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