PPT

q
q
情報セキュリティ
第11回:2006年6月30日(金)
q
q
本日学ぶこと

サーバサイドセキュリティ
q
q
q
q
Webサーバのセキュリティ
 暗号化通信(SSL/TLS),ユーザ認証,アクセス制御
不正な入力への対応
 SQLインジェクション
 クロスサイトスクリプティング
 バッファオーバーラン
ファイアウォール
セキュアOS
2
本日の授業で学ぶ内容



暗号通信がセキュリティのすべてではない
不正な入力のパターンを知り,それを防止する
機密性と可用性のバランスをとるには,アクセス制限
q
まずすべて拒否し,必要なものだけ許可する
3
なぜ,サーバサイドのセキュリティを考えるのか

サーバが攻撃されると…
q
q
q
ネットワークが機能しなくなる
 サービス(顧客など,外からのアクセス)に対応できない!
 LANの外にアクセスできない!
知らないうちに加害者になることも
 踏み台攻撃,DDoS (Distributed Denial of Service)攻撃
報道などにより,社会的信頼を低下する
4
典型的なWebサーバ環境
PostgreSQ
L
Apache
PC
(Windows
)
UNIX
MySQ
L
問い合わせ
入力
クライアント
SSL
Oracl
e
検索結果
出力(HTML,
画像など)
Web
サーバ
HTTP
CGI
SQL
データベース
サーバ
Servle
t
5
SSL利用の留意点

サーバ証明書は自作できるが,その分,信頼性がない
q


「オレオレ証明書」
クライアント証明書は必須ではない
クライアント認証はできても,ユーザ認証はしていない
6
Webアクセスでのアクセス制御・ユーザ認証

アクセス制御やユーザ認証をしていないと…
q
q
だれでもコンテンツにアクセス可能
Googlebot (crawler)などがコンテンツを取っていくかも
 「リンクを張ってないから」は言い訳にならない
crawler
7
Webアクセスでのユーザ認証法(Apache)

Basic認証
q
q
q
q

Digest認証
q
q

ユーザ名とパスワードを指定すればアクセス可能になる.
不特定のアクセスを排除する
パスワードは暗号化されない
認証後の通信も暗号化されない
パスワードは暗号化される
認証後の通信は暗号化されない
パスワードファイルをサーバに設置する
q
q
/etc/passwdと別
Webアクセスで見えないところに置く!
8
アクセス制御



どこからのアクセスを許可・拒否するか
サーバ内のどの情報へのアクセスを許可・拒否するか
設定ファイル(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>
9
Webアクセスでの不正な入力




ディレクトリトラバーサル
SQLインジェクション
クロスサイトスクリプティング
バッファオーバーラン(バッファオーバーフロー)
10
ディレクトリトラバーサル

CGIを使って,Webアクセスで通常見ることのできないファイ
ルが見えてしまう
q
対策
 ファイル名を指定するような入力フォームは作らない
 「../」といった入力を適切に検出し,エラーとして扱う
 ファイルを開く前に,開いていいファイルか,そのフルパスか
ら判断する(×/etc/passwd, ○/var/www/data/file1)
11
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文を埋め込んで,レコード
をすべて削除してしまうかも
12
SQLインジェクションへの対策

入力中の特殊な文字をエスケープする(サニタイジング)
q

「'」→「\'」など
プレースホルダ(準備済みSQL文)を使用する
q
q
q
$sth = $dbh->prepare(q{ SELECT count(*) FROM
Perlの
usertable WHERE username=? AND password=? }); コード例
$sth->execute($username, $password);
サニタイジングは,安全に処理してくれるライブラリルーチン
(先人の知恵)にお任せ
上の例で
$usernameが「takehiko」,
$passwordが
「1' OR 'X'='X」なら…
SELECT count(*)
FROM users
WHERE username='takehiko'
AND password='1\' OR \'X\'=\'X';
13
クロスサイトスクリプティング


XSSとも書く
問題(悪意)あるURLでアクセスすると,Cookieなどブラウザ
の情報が漏洩することがある
q
q
アクセス先のホスト(Webサーバ)は,企業などで,悪意はない
 ただし現在では,対策をしていないアプリケーションは
脆弱性があると言ってよい
URLにJavaScriptのコードが埋め込まれていることが多い
14
クロスサイトスクリプティングへの対策

サーバ側
q

サニタイジング
 「<」→「&lt;」,「>」→「&gt;」,「"」→「&quot;」など
クライアント側
q
アクセスしようとするURLをよく確認する
 HTMLメールはできれば使わない
 URLエンコーディング(「%3C」など)に注意
15
バッファオーバーラン

CやC++で,配列やmallocで確保した領域の範囲外に情報
を書き込み,実行できてしまうことがある
q
q

Webサーバに限らず,クライアントPCなどでも起こり得る
Webサーバの場合,やたら長いパスでアクセスしていれば,こ
の攻撃を疑う
対策:
q
q
セキュリティ上問題のないバージョンのアプリケーションを使う
CGIなどをCかC++で作る場合,範囲外にノーチェックで書き込
める危険な関数(strcpy,sprintfなど)は使わない
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


LANなど,信頼できるネットワークからのアクセスはすべて
ACCEPTでもよい
外からのアクセスに必要最小限なポートもACCEPT
q
q

インタフェースは /sbin/ifconfig を実行すればわかる
ssh (22),http (80),https (443), smtp (25) など
一律ACCEPTではなく,本当に必要なもののみにする!
ACCEPTのルールに当てはまらないものは,LOGをとるの
もよい
19
ブロードバンドルータはセキュリティに役立つ?




PC (WindowsでもPC-UNIXでも)をインターネットに直結す
るのは,攻撃やウイルス感染のもと!
まずブロードバンドルータを導入して,外からのアクセスを遮
断する.
外からのアクセスを受け入れたいなら,「バーチャルサーバ」
などの機能を使う
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