
psad: iptablesを用いた侵入検知とログ分析
ポートスキャン攻撃検出器 psad は、Linux iptables/ip6tables/firewalld ファイアウォールコードと連携して動作する軽量システムデーモンであり、ポートスキャンやスイープ、バックドア、ボットネットの指揮統制通信などの不審なトラフィックを検出します。高度に設定可能な危険度しきい値(適切なデフォルト値付き)を備え、送信元、宛先、スキャン対象ポート範囲、開始時刻と終了時刻、TCPフラグと対応するnmapオプション、逆DNS情報、メールおよびsyslogによる警告、iptablesルールセットの動的設定による不正IPアドレスの自動ブロック、パッシブOSフィンガープリンティング、DShieldレポート機能を提供します。さらに、psad は Snort 侵入検知システムに含まれる多くのTCP、UDP、ICMPシグネチャを組み込んでいます。さまざまなバックドアプログラム(例: EvilFTP、GirlFriend、SubSeven)やDDoSツール(Mstream、Shaft)、高度なポートスキャン(SYN、FIN、XMAS)を検出します。これらはnmapを使って簡単に仕掛けられます。psad は fwsnort を介してログに記録されたSnortシグネチャについても警告できます。fwsnortはiptablesの文字列一致拡張機能を利用してアプリケーション層シグネチャに一致するトラフィックを検出します。2.4.4リリース以降、psad はMiraiボットネットのIoTデフォルト認証情報スキャンフェーズも検出できます。
完全な機能一覧は以下の通りです。
psad はアプリケーション層のバッファオーバーフロー攻撃、不審なアプリケーションコマンド、その他の疑わしいレイヤ7トラフィックに対するアラートを生成できます。psad は gnuplot および afterglow との連携を提供し、悪意のあるトラフィックのグラフを生成します。以下の2つのグラフは、Honeynet Scan30 チャレンジからのNachiワームのものです。最初は、psad によるiptablesログデータの解析後に afterglow によって生成されたリンクグラフです:
"Nachiワームリンクグラフ"
2つ目は、Scan30のiptablesデータからNachiワームのトラフィックを時間別に示したものです:
"Nachiワーム時間別グラフ"
psadが参照する設定キーワードに関する情報は、psad(8) マニュアルページおよび以下で参照できます:
http://www.cipherdyne.org/psad/docs/config.html
psadが分析するすべての情報は、iptablesログメッセージから収集されます。psadはデフォルトで /var/log/messages ファイルから新しいiptablesメッセージを読み取り、必要に応じて専用ファイル (/var/log/psad/fwdata) に出力します。psadは、ポートスキャンが発生したかどうかを判断し、適切な警告メールを送信し、(オプションで)不正IPアドレスをブロックするために、危険度しきい値とシグネチャロジックを適用します。psadにはシグナルハンドラが含まれており、USR1シグナルを受信すると、psadは現在のスキャンハッシュデータ構造の内容を /var/log/psad/scan_hash.$$ にダンプします。ここで "$$" は実行中のpsadデーモンのPIDを表します。
注:psadは不正パケットに対する適切なログメッセージを生成するためにiptablesに依存しているため、psadの性能はiptablesルールセットに含まれるログルールの良し悪しに左右されます。したがって、ファイアウォールがパケットをログに記録するように設定されていない場合、psadはポートスキャンなどを検出しません。通常、ファイアウォールを設定する最善の方法は、ルールセットの最後にデフォルトの「ドロップアンドログ」ルールを配置し、その最後のルールの上に、許可すべきトラフィックのみを許可するルールを含めることです。psadデーモンは実行時に、このようなデフォルト拒否ルールが存在するかどうかを確認し、存在しない場合はユーザーに警告します。psadと互換性のあるファイアウォールルールセットの例については、FW_EXAMPLE_RULESファイルを参照してください。
さらに、psadの詳細な説明は、No Starch Pressから出版された書籍「Linux Firewalls: Attack Detection and Response」に含まれており、この書籍内のサポートスクリプトはpsadと互換性があります。このスクリプトは以下にあります:
http://www.cipherdyne.org/LinuxFirewalls/ch01/
Linuxディストリビューションによっては、psad がデフォルトのパッケージリポジトリですでに利用可能な場合があります。例えば、DebianまたはUbuntuシステムでは、以下の簡単なコマンドでインストールできます:
apt-get install psad
パッケージリポジトリでpsadが利用できない場合は、psadソースに同梱されている install.pl スクリプトを使用してインストールできます。install.plスクリプトは、psadがすでにインストールされている場合のアップグレードも処理します。psad は、Linuxシステムにすでにインストールされている場合といない場合があるいくつかのPerlモジュールを必要とします。これらのモジュールはpsadソースの deps/ ディレクトリに含まれており、install.plスクリプトによって自動的にインストールされます。モジュールのリストは次のとおりです:
psadには、Marco d'Itri によって書かれたwhoisクライアントも含まれています(deps/whoisディレクトリを参照)。このクライアントは、特定のIPアドレスに対して正しいwhois情報を収集する点で他のクライアントより優れています。
iptables設定がpsadと互換性を持つための主な要件は、iptablesがパケットをログに記録することです。これは通常、INPUTおよびFORWARDチェーンに次のようなルールを追加することで実現されます:
iptables -A INPUT -j LOG
iptables -A FORWARD -j LOG
上記のルールは、正当なトラフィックに対するすべてのACCEPTルールの後、かつポリシーで許可しないトラフィックに対する対応するDROPルールの直前に、INPUTおよびFORWARDチェーンの最後に追加する必要があります。iptablesポリシーは、プロトコル、ネットワーク、ポート、インターフェースの制限、ユーザー定義チェーン、コネクショントラッキングルールなど、非常に複雑になる可能性があることに注意してください。ShorewallやFirewall Builderなど、iptablesポリシーを構築し、iptablesが提供する高度なフィルタリングおよびログ機能を活用するソフトウェアが多数あります。これらのソフトウェアによって構築されたポリシーは、通常、正当なトラフィックではないパケットをログに記録するようにiptablesに指示するルールを特に追加するため、psadと互換性があります。Psadは、特定のログプレフィックス(--log-prefixオプションで追加)を含むiptablesメッセージのみを分析するように設定できますが、デフォルトではpsadはすべてのiptablesログメッセージを分析し、ポートスキャン、バックドアプログラムへのプローブ、その他の不審なトラフィックの証拠を探します。
psadは通常Linuxシステムで動作し、多くの主要なLinuxディストリビューションのパッケージリポジトリで利用可能です。psadに関して動作上の問題がある場合は、github でIssueを開いてください。
psad は GNU General Public License (GPL v2+) の条件の下でオープンソースソフトウェアとして公開されています。最新リリースは https://github.com/mrash/psad/releases にあります。
psadは、Snortで利用可能な多くのTCP、UDP、ICMPシグネチャを利用しています(Marty Roesch 作、http://www.snort.org 参照)。SnortはSourcefire, Inc.の登録商標です。
すべての機能リクエストとバグ修正は、github issuesトラッキングを通じて管理されています。ただし、メール(michael.rash_AT_gmail.com)またはTwitter(@michaelrash)で連絡することも可能です。