情報セキュリティ 第11回:2006年6月29日(金)
2 本日学ぶこと サーバサイドセキュリティ Webサーバのセキュリティ ユーザ認証,アクセス制御 不正な入力への対応 SQL インジェクション クロスサイトスクリプティング バッファオーバーラン ファイアウォール セキュア OS 暗号通信がセキュリティのすべてではない 不正な入力のパターンを知り,それを防止する 機密性と可用性のバランスをとるには,アクセス制限
3 なぜ,サーバサイドのセキュリティを考えるのか サーバが攻撃されると … ネットワークが機能しなくなる サービス(顧客など,外からのアクセス)に対応できな い! LAN の外にアクセスできない! 知らないうちに加害者になることも 踏み台攻撃, DDoS ( Distributed Denial of Service )攻 撃 報道などにより,社会的信頼を低下する
4 典型的なWebサーバ環境 クライアント 入力 We b サー バ 問い合わせ データベー スサーバ PC ( Window s) UN IX Apac he Postg reSQL MyS QL Ora cle SQ L 検索結果 HT TP Ser vle t CGI SS L 出力(HT ML,画像 など)
5 SSL利用の留意点 サーバ証明書は自作できるが,その分,信頼性がない 「オレオレ証明書」 サーバ認証とクライアント認証はできても,ユーザ認証 はしていない
6 Webアクセスでのアクセス制御・ユーザ認証 アクセス制御やユーザ認証をしていないと … だれでもコンテンツにアクセス可能 Googlebot (crawler) などがコンテンツを取っていくかも 「リンクを張ってないから」は言い訳にならない crawler
7 Webアクセスでのユーザ認証法( Apache ) Basic 認証 ユーザ名とパスワードを指定すればアクセス可能になる 不特定のアクセスを排除する パスワードは暗号化されない 認証後の通信も暗号化されない Digest 認証 パスワードは暗号化される 認証後の通信は暗号化されない パスワードファイルをサーバに設置する /etc/passwd と別 Web アクセスで見えないところに置く!
8 アクセス制御 どこからのアクセスを許可・拒否するか サーバ内のどの情報へのアクセスを許可・拒否するか 設定ファイル( Apache ) httpd.conf, apache.conf など 編集には一般に root 権限が必要 order deny,allow deny from all allow from.wakayama-u.ac.jp allow from / アクセス制限の記述例 対象ディレクト リ まず拒否 許可する 接続元ホスト 名 許可する 接続元 IP アドレ ス
9 Webアクセスでの不正な入力 ディレクトリトラバーサル SQL インジェクション クロスサイトスクリプティング バッファオーバーラン
10 ディレクトリトラバーサル CGIを使って, Web アクセスで通常見ることのできな いファイルが見えてしまう 対策 ファイル名を指定するような入力フォームは作らない 「../ 」といった入力を適切に検出し,エラーとして扱う ファイルを開く前に,開いていいファイルか,そのフル パスから判断する( ×/etc/passwd, ○/var/www/data/file1 )
11 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 文を埋め込んで,レ コードをすべて削除してしま うかも
12 SQL インジェクションへの対策 入力中の特殊な文字をエスケープする(サニタイジン グ) 「 ' 」 → 「 \' 」など プレースホルダ(準備済み SQL 文)を使用する $sth = $dbh->prepare(q{ SELECT count(*) FROM users WHERE username=? AND password=? }); $sth->execute($username, $password); サニタイジングは,安全に処理してくれるライブラリルー チン (先人の知恵)にお任せ Perlの コード例 SELECT count(*) FROM users WHERE username='takehiko' AND password='1\' OR \'X\'=\'X'; 上の例で $username が「 takehiko 」, $password が 「 1' OR 'X'='X 」なら …
13 クロスサイトスクリプティング XSS とも書く 問題(悪意)ある URL でアクセスすると, Cookie などブ ラウザの情報が漏洩することがある アクセス先のホスト(Webサーバ)は,企業などで,悪 意はない ただし現在では,対策をしていないアプリケーションは 脆弱性があると言ってよい URL に JavaScript のコードが埋め込まれていることが多い
14 クロスサイトスクリプティングへの対策 サーバ側 サニタイジング 「 」 → 「 > 」,「 " 」 → 「 " 」 など クライアント側 アクセスしようとする URL をよく確認する HTML メールはできれば使わない URL エンコーディング(「 %3C 」など)に注意
15 バッファオーバーラン 「バッファオーバーフロー」ともいう. C や C++ で,スタック上に確保した領域(配列など)の 範囲外に情報を書き込み,実行できてしまうことがある Webサーバに限らず,クライアント PC などでも起こり得 る Webサーバのログを見て,やたら長いパスでアクセスし ていれば,この攻撃を疑う 対策: セキュリティ上問題のないバージョンのアプリケーション を使う CGIなどを C か C++ で作る場合,範囲外にノーチェック で書き込める危険な関数( strcpy , sprintf など)は使わない
16 CGI プログラム作成時の注意点 CGI では,リクエストに応じて HTTP サーバがファイル を実行し,その出力をクライアントに送る. 静的なアクセスでは,ファイルそのものを送る. CGI プログラムの中に,秘密にすべき値(パスワードな ど)を格納してはならない. サーバ設定ミスにより, CGI プログラムそのものが送られ ることに対処 サーバ内部で使用するファイルは, Web アクセスで見え ない位置(ディレクトリ上)に置く.
17 ファイアウォール ファイアウォールとは 組織内のコンピュータネットワークへ外部から侵入(不正 アクセス)されるのを防ぐシステム パケットフィルタリングとは 送られてきたパケットを検査して,通過させるかどうか判 断する,ファイアウォールの一つの機能 パケットヘッダに含まれている情報:プロトコル,送信 元・先の IP アドレス,ポート番号など Linux でパケットフィルタリングをするには …iptables
18 iptables Linux でのパケットフィルタリングツール どこからのアクセスを許可・拒否するか どのインタフェースのアクセスを許可・拒否するか どのポート番号のアクセスを許可・拒否するか NAT (Network Address Transformation) の機能もある OK NG
19 iptables の利用方法の基本 外からのアクセス (INPUT) は基本的に DROP ,必要に応 じて ACCEPT lo (localhost に関するインタフェース)は ACCEPT インタフェースは /sbin/ifconfig を実行すればわかる LAN など,信頼できるネットワークからのアクセスはす べて ACCEPT でもよい 外からのアクセスに必要最小限なポートも ACCEPT ssh (22) , http (80) , https (443), smtp (25) など 一律 ACCEPT ではなく,本当に必要なもののみにする! ACCEPT のルールに当てはまらないものは, LOG をとる のもよい 落とす 通す
20 ブロードバンドルータはセキュリティに役立つ? 手っ取り早く,外からのアクセスを遮断するという点で, 役立つ PC ( Windows でも PC-UNIX でも)をインターネットに直 結するのは,攻撃やウイルス感染のもと! ブロードバンドルータの LAN 内でウイルスが蔓延したり, 外に発したりするかも 利用すべき機能,利用しないほうがいい機能 外からのアクセスを受け入れたいなら,「バーチャルサー バ」などの機能を使う DMZ (DeMilitarized Zone) 機能はなるべく使わない.使う ときは,アクセス先計算機のファイアウォールをきちんと 設定してから.
21 UNIX の安全性 root は全能の神 ⇒ root 権限を奪われる(権限昇格)と,何でもされてし まう セキュアOS 既存の OS と互換性は保ちつつ,神のような強大な権限を なくす 「強制アクセス制御( Mandatory Access Control, MAC )」と 「最小特権」を持つ Linux におけるセキュアOS SELinux (Security Enhanced Linux) LIDS (Linux Intrusion Ditection System)
22 まとめ サーバの安全性には最大の注意を払う サーバのセキュリティを知ることで分かる「パソコンの セキュリティ」もある