情 報 セキュリティ 第 11 回 2013 年 7 月 5 日 ( 金 ) 1/27
今 後 の 予 定 第 11 回 :7 月 5 日 :サーバサイドセキュリティ 第 12 回 :7 月 8 日 ( 月 )5 限 :セキュリティ 基 礎 計 算 モデル, 計 算 の 複 雑 さ 第 13 回 :7 月 12 日 : 暗 号 プロトコル 安 全 でない 暗 号 プロトコル,ゼロ 知 識 (FFS) 第 14 回 :7 月 19 日 : 組 織 のセキュリティ セキュリティポリシー, 個 人 情 報 保 護 法 第 15 回 :7 月 26 日 :まとめ レポート 課 題 ( 若 干 名 プレゼン),おさらい 問 題 試 験 :( 実 施 日 未 定 ) 自 筆 ノート1 冊 のみ 参 照 可 曜 日 時 限 注 意 教 室 はA104 2
本 日 学 ぶこと 本 日 の 授 業 を 通 じて インターネットにおけるサーバを 安 全 に 運 用 するための 方 法 (サーバサイドセキュリティ)について 学 びます. Webアクセスを 中 心 として, 不 正 な 入 力 ( 攻 撃 )とその 対 策 を 理 解 します. アクセス 制 御 やファイアウォールの 仕 組 みを 学 習 し, 機 密 性 と 可 用 性 のバランスがとれた 運 用 方 法 を 理 解 します. 3
なぜ,サーバサイドのセキュリティを 考 えるのか サーバが 攻 撃 されると ネットワークが 機 能 しなくなる サービス( 顧 客 など, 外 からのアクセス)に 対 応 できない! LANの 外 にアクセスできない! 知 らないうちに 加 害 者 になることも 踏 み 台 攻 撃,DDoS (Distributed Denial of Service) 攻 撃 報 道 などにより, 社 会 的 信 頼 が 低 下 する 踏 み 台 攻 撃 のイメージ 4
DoS 攻 撃 ( 復 習 ) 送 信 受 信 敵 DoS = Denial of Service 可 用 性 を 脅 かす 5
DDoS 攻 撃 ( 復 習 ) 敵 敵 送 信 受 信 敵 敵 DDoS = Distributed Denial of Service 可 用 性 を 脅 かす 敵 6
典 型 的 なWebサーバ 環 境 Apache PostgreSQL PC UNIX MySQL Oracle 入 力 問 い 合 わせ クライアント 出 力 (HTML, 画 像 など) 検 索 結 果 SSL HTTP Web サーバ SQL データベース サーバ CGI Servlet 7
Webにおけるアクセス 制 御 ユーザ 認 証 の 必 要 性 アクセス 制 御 やユーザ 認 証 をしていないと だれでもコンテンツにアクセス 可 能 Googlebot (crawler)などがコンテンツを 取 っていくかも リンクを 張 ってないから は 言 い 訳 にならない crawler 8
Webのユーザ 認 証 ( 目 的 ) ユーザが 適 切 なユーザ 名 とパスワードを 入 力 すれば アクセス 可 能 になる. 不 特 定 のアクセスを 排 除 できる. 認 証 に 必 要 なファイル(パスワードファイル)は/etc/passwdと 別 物.Webでアクセスできないところに 置 く. SSLは, 計 算 機 の 認 証 (サーバ 認 証,クライアント 認 証 )をす るが,ユーザ 認 証 はしない. 9
Webのユーザ 認 証 ( 方 式 ) 方 式 Basic 認 証 :HTTPの 認 証 方 式 の 一 つ.ユーザ 名 パスワードは 暗 号 化 されない. Digest 認 証 :HTTPの 認 証 方 式 の 一 つ.ユーザ 名 パスワード は 暗 号 化 される. アプリケーションによる 認 証 :サーバサイドスクリプトなどを 用 い た 認 証 方 式.ユーザ 名 パスワードは 暗 号 化 されない. SSLと 組 み 合 わせることも 可 能. 10
Webのアクセス 制 御 どこからのアクセスを 許 可 拒 否 するか サーバ 内 のどの 情 報 へのアクセスを 許 可 拒 否 するか 設 定 ファイル(Apache) httpd.conf, apache.conf など 編 集 には 一 般 にroot 権 限 が 必 要 対 象 ディレクトリ まず 拒 否 許 可 する 接 続 元 ホスト 名 許 可 する 接 続 元 IPアドレス アクセス 制 限 の 記 述 例 <Directory /home/*/public_html> order deny,allow deny from all allow from.wakayama-u.ac.jp allow from 192.168.0.0/255.255.255.0 </Directory> 11
サーバサイドスクリプトとセキュリティ サーバサイドスクリプトは,リクエストに 応 じてHTTPサーバ がファイルを 実 行 解 釈 し,その 出 力 をクライアントに 送 る. 静 的 なアクセスでは,ファイルそのものを 送 る. CGIでは,レスポンスを 生 成 する(ようなプログラムを 書 く). PHP, erubyなどは,htmlの 中 にプログラムを 埋 め 込 む. スクリプトファイルの 中 に, 秘 密 にすべき 値 (パスワードなど) を 格 納 してはならない. サーバ 設 定 ミスにより,プログラムそのものが 送 られてしまう 可 能 性 に 対 処 プログラムから 参 照 するファイルは, 同 じディレクトリではなく, Webアクセスで 見 えない 場 所 に 置 く. 12
Webアクセスでの 不 正 な 入 力 ディレクトリトラバーサル(directory traversal) SQLインジェクション(SQL injection) クロスサイトスクリプティング(cross site scripting, XSS) クロスサイトリクエストフォージェリ(cross site request forgery, CSRF) バッファオーバーラン(buffer overrun) 13
ディレクトリトラバーサル CGIを 使 って,Webアクセスで 通 常 見 ることのできないファイ ルが 見 えてしまう 対 策 ファイル 名 を 指 定 するような 入 力 フォームは 作 らない../ といった 入 力 を 適 切 に 検 出 し,エラーとして 扱 う ファイルを 開 く 前 に, 開 いていいファイルか,パスから 判 断 す る( /etc/passwd, /var/www/data/file1) 14
SQLインジェクション 期 待 される 入 力 とSQL 文 SELECT count(*) FROM users WHERE username='takehiko' AND password='abcd'; 悪 意 のある 入 力 とSQL 文 SELECT count(*) FROM users WHERE username='takehiko' AND password='1' OR 'X'='X'; DELETE 文 を 埋 め 込 んで, レコードをすべて 削 除 してしまう かも 15
SQLインジェクションへの 対 策 入 力 中 の 特 殊 な 文 字 をエスケープする(サニタイジング, sanitizing) ' ' など プレースホルダ(placeholder)を 使 用 する result = User.find_by_sql [ SELECT count(*) FROM users where username=? AND password=?, u, p] サニタイジングは,ライブラリルーチン( 先 人 の 知 恵 )に 任 せる Rubyの ActiveRecordを 用 いた 例 上 のコードで u が takehiko, p が 1' OR 'X'='X なら SELECT count(*) FROM users WHERE username='takehiko' AND password='1 ' OR 'X '= 'X'; 16
クロスサイトスクリプティング 問 題 ( 悪 意 )あるURLでアクセスすると,Cookieなどブラウザ の 情 報 が 漏 洩 することがある アクセス 先 のホスト(Webサーバ)は, 企 業 などで, 悪 意 はない ただし 現 在 では, 対 策 をしていないアプリケーションは 脆 弱 性 があると 言 ってよい URLにJavaScriptのコードが 埋 め 込 まれていることが 多 い <form action="register.cgi"> <input type="hidden" name="sample" value=" "> パスワード: <input type="text" name="name" value="password"> <input type="submit"> </form> <form action="register.cgi"> <input type="hidden" name="sample" value=""> </form><form action="http://attacker/register.cgi"> パスワード: <input type="text" name="name" value="password"> <input type="submit"> </form> コード 例 の 出 典 :http://www.atmarkit.co.jp/ait/articles/0212/05/news002.html 17
クロスサイトスクリプティングへの 対 策 サーバ 側 サニタイジング < <, > >, " " など クライアント 側 アクセスしようとするURLをよく 確 認 する HTMLメールはできれば 使 わない URLエンコーディング( %3C など)に 注 意 18
クロスサイトリクエストフォージェリ 利 用 者 が,サイトSのページにアクセスする(ログイン 後 に 日 記 に 書 く,ショッピングサイトで 商 品 を 購 入 するなど)とき 対 策 攻 撃 者 が,サイトSにアクセスする 悪 意 あるコンテンツ(HTMLフ ァイル,フレーム,1ピクセル 画 像 などを 用 いて)を 作 っておき, 利 用 者 が, 悪 意 あるコンテンツをWebブラウザで 動 かすと, サイトSへのアクセスが 発 生 し, 利 用 者 の 意 図 しない 操 作 ( ぼくはまちちゃん と 書 く, 無 用 な 商 品 を 購 入 するなど)をして しまう! 利 用 者 : 不 審 なURLにはアクセスしない,ボタンを 押 さない. サーバ( 開 発 者 ): 認 証 に 関 する 適 切 な 情 報 (クッキー,セッショ ンID,トークンなど)を 管 理 し,やりとりする. 19
バッファオーバーラン バッファオーバーフロー(buffer overflow) ともいう. CやC++で,スタック 上 に 確 保 した 領 域 ( 配 列 など)の 範 囲 外 に 情 報 を 書 き 込 み, 実 行 できてしまうことがある 対 策 : Webサーバに 限 らず,クライアントPCなどでも 起 こり 得 る セキュリティ 上 問 題 のないバージョンのアプリケーションを 使 う CGIプログラムなどをC 言 語 で 作 る 場 合, 範 囲 外 に 書 き 込 める 危 険 な 関 数 (strcpy,sprintfなど)は 使 わない 20
アクセスログ ファイル 例 (Apache2) /var/log/apache2/{access,error,ssl,suexec}.log ログの 例 133.42.***.*** - - [18/Jun/2008:16:01:04 +0900] "GET /kankyou db/rss?num=10 HTTP/1.1" 200 3753 "http://******.sys.wakayamau.ac.jp/kankyoudb/" "Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14" 対 応 異 常 に 長 いパスでアクセスしていれば,バッファオーバーランを 疑 う 1 秒 ~ 数 秒 の 間 に 異 常 な 数 のアクセスがあれば,DoS 攻 撃 また はDDoS 攻 撃 を 疑 う 21
ファイアウォール ファイアウォールとは 組 織 内 のコンピュータネットワークへ 外 部 から 侵 入 ( 不 正 アクセ ス)されるのを 防 ぐシステム パケットフィルタリング 型,サーキットレベルゲートウェイ 型 (SOCKなど),アプリケーションゲートウェイ 型 (プロキシサーバ など)がある. パケットフィルタリング(packet filtering) 送 られてきたパケットを 検 査 して, 通 過 させるかどうか 判 断 パケットヘッダに 含 まれている 情 報 :プロトコル, 送 信 元 先 のIPアドレス,ポート 番 号 など Linuxでパケットフィルタリングをするには iptables 22
iptables Linuxでのパケットフィルタリングツール どこからのアクセスを 許 可 拒 否 するか どのインタフェースのアクセスを 許 可 拒 否 するか どのポート 番 号 のアクセスを 許 可 拒 否 するか NAT (Network Address Transformation) の 機 能 もある OK NG 23
iptablesの 利 用 方 法 の 基 本 落 とす 外 からのアクセス(INPUT)は 基 本 的 にDROP, 必 要 に 応 じて ACCEPT 通 す lo (localhostに 関 するインタフェース)はACCEPT インタフェースは ifconfig コマンドを 実 行 すればわかる LANなど, 信 頼 できるネットワークからのアクセスはすべて ACCEPTでもよい 外 からのアクセスに 必 要 最 小 限 なポートもACCEPT ssh (22),http (80),https (443), smtp (25) など 一 律 ACCEPTではなく, 本 当 に 必 要 なもののみにする! ACCEPTのルールに 当 てはまらないものは,LOGをとるの もよい 24
ブロードバンドルータはセキュリティに 役 立 つ? 手 っ 取 り 早 く, 外 からのアクセスを 遮 断 できる PCをインターネットに 直 結 するのは, 攻 撃 やウイルス 感 染 のも と! ブロードバンドルータのLAN 内 でウイルスが 蔓 延 したり, 外 に 発 したりするかも 利 用 すべき 機 能, 利 用 しないほうがいい 機 能 外 からのアクセスを 受 け 入 れたいなら, バーチャルサーバ な どの 機 能 を 使 う DMZ (DeMilitarized Zone) 機 能 はなるべく 使 わない. 使 うとき は,アクセスされることになるサーバの 安 全 性 を 十 分 確 保 して から. 25
UNIXの 安 全 性 rootは 全 能 の 神 root 権 限 を 奪 われる( 権 限 昇 格 )と, 何 でもされてしまう セキュアOS 既 存 のOSと 互 換 性 は 保 ちつつ, 神 のような 強 大 な 権 限 をなくす 強 制 アクセス 制 御 (Mandatory Access Control, MAC) と 最 小 特 権 を 持 つ LinuxにおけるセキュアOS SELinux (Security Enhanced Linux) LIDS (Linux Intrusion Ditection System) 26