niwacchi.log

niwacchiのログ。

12/4研修のメモ

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のユーザにしておく。

 apachemysqlなど。



・ログ取得

 -ログは嘘つかない。

 -必要な情報を残すように設定する。

 -どんどん溜まるので、ローテーションが必要。

 -外部からアクセスさせない。

 -内部ホストへの転送を考える。



 (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の利用。

※公開キーはputtyGUIを使うなど。