VMwareのCentOS5.2。Redhat互換。
■apache
・/etc/httpd/conf/httpd.confの内容を書き換え
■php
■mysql
■dns
■mail
[解説]
■OSセキュリティ概論 ※LOCALの資料?
・OS内部のセキュリティモデル
-ファイル、ディレクトリのアクセス制御によってセキュリティを守る。
-グループ、ユーザ、オーナーなどの概念
(UNIX系)
-所有ユーザ、所有グループ、パーミッションで制御
-/etc/groupファイルのXフィールドはグループパスワードの設定フィールド
(Windows系)
-UNIX系より詳細。
-ACL:アクセスコントロールリストを使用して細かい制御が可能。
※Solarisなど一部のUNIXでも拡張で利用可能。
→セキュリティタブのチェック項目が詳細
・OSに対するアクセス制御
-ポート単位のアクセス制御
-IPアドレス単位のアクセス制御
(何のために制御するか?)
-明示的に設定することで制御。
-不要なポートの公開をしない。
→オペレーションミスを防ぐことができる。
デーモンを立ち上げてもポートが閉じていれば大丈夫。
(どうやって制御するか)
-デーモン側での制御(tcp_wrapper、xinetd)
-ポートでの制御(iptables)
(デーモンでの制御)
-tcp_wrapper
→inetd経由で起動するデーモンを制御
→/etc/hosts/allow、/etc/hosts/deny
→allowを先に見て判断、書いてなければdenyを見る
-xinetd
inetdの後継。設定+アクセス制御という機能
(ポートでの制御)
-iptables
→設定順に評価する。
最後に全てのパケットを破棄する条件を書く。
先に許可するパケットの条件を書く。
・基本
-まず、全てを拒否する。それから許可するものを選ぶ。
※SELinuxは、ACLに近い話。通信の制御とはちょっと異なる。
■アプリケーション・セキュリティ
-必要最小限の権限を設定する。
(データベース(mysql))
-他のサーバがクラックされてもアクセス制御で
データベースサーバは助かる可能性が高くなる。
(Webサーバ(Apache))
-ユーザ権限が奪われた場合、適切に設定していれば改ざんされない。
(基本)
-デフォルト拒否!最小限の権限のみ設定する。
-最大限の権限を付与するとクラックされたときの被害が甚大。
(データベースサーバのアクセス元制御)
-必要なホストからのアクセスのみ許可する。
1.bind-addressを使う方法
→/etc/my.cnfに記述する。
bind_address=127.0.0.1
サーバが複数IPを持つ場合、指定したアドレスでのみ待ちうけ。
厳密にはアクセス元制限とは異なる。
2./etc/hosts.allowを使う方法。
-ユーザ権限の制限
→参照専門のウェブアプリにはSELECT権限だけでよい。
→SQLインジェクションによるDDL文の実行を防ぐ。
→GRANT文の使用時に制限をかける。(user@localhostとするなど)
(Apacheのアクセス制御)
-webページのアクセス制御
→アクセス元のIPアドレスを制限する。
→Directoryの設定で「Order allow,deny」としておく。
「allow from xx.xx.xx.xx」で許可するIPを指定。
-その他の制限
→エラーページにApacheのバージョン情報を表示させない。
※クラッカーに不要な情報を与えない。
httpd.confに「sigunature off」を追加する。
→cgiが実行されるディレクトリに対して、
apacheのオーナの書き込み権限は消しておく。
-r-xr-xr-x 1 http http
としておく。
→管理用ファイルには類推しにくいファイル名をつける。
admin.phpなどは避ける。
→不要なファイルは消しておく。
phpinfo();を記述したファイルは消しておく。
※ログインしなくてもよいユーザは、/sbin/nologinのユーザにしておく。
apache、mysqlなど。
・ログ取得
-ログは嘘つかない。
-必要な情報を残すように設定する。
-どんどん溜まるので、ローテーションが必要。
-外部からアクセスさせない。
-内部ホストへの転送を考える。
(mysqlのログの種類)
-エラーログ
-一般クエリログ
-スロークエリログ
→一定時間に終了しないクエリのログ。
-バイナリログ
-設定の確認
→ログの取得設定の確認
→外部からアクセスできない場所に出力するように設定したか。
(apacheのログの種類)
-httpd.conf
→Errorlog
→Customlog
記述のときはcombinedをつけること。
→VirtualHostに記述するとログを分けることができる。
※ログローテーション
/etc/logrotate.d、/etc/logrotate.conf
を参考にしてログのローテーションの計画をする。
■UNIX系OSのアクセス権限について
・シェルを持つユーザでサービス実行してはいけないのか?
→これは確かだが、最近のクラック手法に対して安全ではない。
→nologinでも安全ではない。※nologinというプログラムを実行する。
→アカウントの管理が重要。
不要なアカウントは削除しておく。
・サービスが動く権限
→/etc/passwd、/etc/shadowは権限によって見え方が違う。
(Webコンテンツ転送にWebサービスアカウントを使ってはいけない?)
→ウェブサービスアカウントでログインできることが問題。
→逆もだめ。個別のアカウントで区別して使用すること。
→FTPは望ましくない。
-暗号化されない。
-パスワード認証
-データセッションと??セッションが別。
2本のセッションが必要になる。
→SSHを利用したSFTP、SCPなどが推奨。
★★★★★★必ずクライアント認証で利用すべき!!!★★★★★★★
パスワード認証は安全ではない。総当り攻撃でやられる。
■DNS
・設定による危険性
-不要な情報のアナウンス
-DNSキャッシュの不正保持
-キャッシュサーバになる・ならない
・SOAレコードの作成
-TTLは$TTL行で別に指定する。
-Negative TTLを必ず設定する。
・考えられる問題
-アドレス間違い
-期限切れで他人に取得される
-応答を返さない(DoS状態)
-キャッシュ汚染
→フィッシング詐欺に利用される
-キャッシュを持つ必要がある?
→今回のハンズオンでは必要なし。
・キャッシュ汚染の対処
-DNSプロトコル
→問い合わせ/回答=UDP
→UDPはステートレスプロトコル。投げっぱなし。
→ソースアドレスを偽装して返す。
→TTLを短くしすぎると、キャッシュ再問い合わせ回数が増えて、
汚染される確立が増える。
・ソースポート固定問題
-2008/7/9 DNSセキュリティアドバイザリ
query-source address * port *;
と書くことで対応。
■メール ※今回はメール送信サーバ
・不正中継を防止する。
・SMTP認証を行う。
・不要なVRFYコマンド、ETRNコマンドを停止する。
■時刻同期
・重要性
-ログなどのため。
・イントラネットのPCについて個別に外部サーバに聞きに行くのはNG
内部に1、2台NTPサーバを準備すれば足りる。
※rshの利用。
※公開キーはputtyのGUIを使うなど。