情報セキュリティ: 2005年6月24日

q
q
情報セキュリティ
第11回:2005年6月24日(金)
q
q
本日学ぶこと

サーバサイドセキュリティ
q
q
q
Webサーバのセキュリティ
 暗号化通信(SSL/TLS),ユーザ認証,アクセス制御
不正な入力への対応
 SQLインジェクション
 クロスサイトスクリプティング
 バッファオーバーラン
ファイアウォール
 iptables
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)などがコンテンツを取っていくかも
 「リンクを張ってないから」は言い訳にならない
6
Webアクセスでのユーザ認証法(Apache)

Basic認証
q
q
q
q

Digest認証
q
q

ユーザ名とパスワードを指定すればアクセス可能になる.
不特定のアクセスを排除する
パスワードは暗号化されない
認証後の通信も暗号化されない
パスワードは暗号化される
認証後の通信は暗号化されない
パスワードファイルをサーバに設置する
q
q
/etc/passwdと別
Webアクセスで見えないところに置く!
7
アクセス制御



どこからのアクセスを許可・拒否するか
サーバ内のどの情報へのアクセスを許可・拒否するか
設定ファイル(Apache)
q
q
httpd.conf, apache.conf, apache2.conf など
編集には一般にroot権限が必要
8
Webアクセスでの不正な入力




ディレクトリトラバーサル
SQLインジェクション
クロスサイトスクリプティング
バッファオーバーラン(バッファオーバーフロー)
9
ディレクトリトラバーサル

CGIを使って,Webアクセスで通常見ることのできないファイ
ルが見えてしまう
q
対策
 ファイル名を指定するような入力フォームは作らない
 「../」といった入力を適切に検出し,エラーとして扱う
 ファイルを開く前に,開いていいファイルか,そのフルパスか
ら判断する(×/etc/passwd, ○/var/www/data/file1)
10
SQLインジェクション

期待される入力とSQL文
q

悪意のある入力とSQL文
q

SELECT count(*)
FROM usertable
WHERE username='takehiko'
AND password='abcd';
SELECT count(*)
FROM usertable
WHERE username='takehiko'
AND password='1' OR 'X'='X';
delete文を埋め込んで,レコード
をすべて削除してしまうかも
11
SQLインジェクションへの対策

入力中の特殊な文字をエスケープする(サニタイジング)
q

「'」→「\'」など
プレースホルダ(準備済みSQL文)を使用する
q
q
q
$sth = $dbh->prepare(q{ SELECT count(*) FROM
Perlの
usertable WHERE username=? AND password=? }); コード例
$sth->execute($username, $password);
サニタイジングは,安全に処理してくれるライブラリルーチン
(先人の知恵)にお任せ
12
クロスサイトスクリプティング


XSSとも書く
問題(悪意)あるURLでアクセスすると,Cookieなどブラウザ
の情報が漏洩することがある
q
q
アクセス先のホスト(Webサーバ)は,企業などで,悪意はない
 ただし現在では,対策をしていないアプリケーションは
脆弱性があると言ってよい
URLにJavaScriptのコードが埋め込まれていることが多い
13
クロスサイトスクリプティングへの対策

サーバ側
q

サニタイジング
 「<」→「&lt;」,「>」→「&gt;」,「"」→「&quot;」など
クライアント側
q
アクセスしようとするURLをよく確認する
 HTMLメールはできれば使わない
 URLエンコーディング(「%3C」など)に注意
14
バッファオーバーラン

CやC++で,配列やmallocで確保した領域の範囲外に情報
を書き込み,実行できてしまうことがある
q
q

Webサーバに限らず,クライアントPCなどでも起こり得る
Webサーバの場合,やたら長いパスでアクセスしていれば,こ
の攻撃を疑う
対策:
q
q
セキュリティ上問題のないバージョンのアプリケーションを使う
CGIなどをCかC++で作る場合,範囲外にノーチェックで書き込
める危険な関数(strcpy,sprintfなど)は使わない
15
ファイアウォール

ファイアウォールとは
q

パケットフィルタリングとは
q

組織内のコンピュータネットワークへ外部から侵入(不正アクセ
ス)されるのを防ぐシステム
送られてきたパケットを検査して,通過させるかどうか判断する,
ファイアウォールの一つの機能
 パケットヘッダに含まれている情報:プロトコル,送信元・先
のIPアドレス,ポート番号など
Linuxでパケットフィルタリングをするには…iptables
16
iptables

Linuxでのパケットフィルタリングツール
q
q
q

どこからのアクセスを許可・拒否するか
どのインタフェースのアクセスを許可・拒否するか
どのポート番号のアクセスを許可・拒否するか
NAT (Network Address Transformation) の機能もある
17
iptablesの利用方法の基本


外からのアクセス(INPUT)は基本的にDROP,必要に応じて
ACCEPT
lo (localhostに関するインタフェース)はACCEPT
q


LANなど,信頼できるネットワークからのアクセスはすべて
ACCEPTでもよい
外からのアクセスに必要最小限なポートもACCEPT
q
q

インタフェースは /sbin/ifconfig を実行すればわかる
ssh (22),http (80),https (443), smtp (25) など
一律ACCEPTではなく,本当に必要なもののみにする!
ACCEPTのルールに当てはまらないものは,LOGをとるの
もよい
18
ブロードバンドルータはセキュリティに役立つ?




PC (WindowsでもPC-UNIXでも)をインターネットに直結す
るのは,攻撃やウイルス感染のもと!
まずブロードバンドルータを導入して,外からのアクセスを遮
断する.
外からのアクセスを受け入れるなら,「バーチャルサーバ」な
どの機能を使う
DMZ (DeMilitarized Zone)機能はなるべく使わない.使うと
きは,アクセス先計算機のファイアウォールをきちんと設定し
てから.
19
まとめ



サーバの安全性には最大の注意を払う
脅威を把握し,どこをどう措置するか決めて実行する
サーバのセキュリティを知ることで分かる「パソコンの
セキュリティ」もある
20