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