情報セキュリティ: 2006年6月29日

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

サニタイジング
 「<」→「&lt;」,「>」→「&gt;」,「"」→「&quot;」など
クライアント側
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