9.2. ネットワーク侵入の検知

4.2.1. 利用帯域モニタリングの実施

ネットワーク帯域監視の概要

帯域監視は、トラフィック監視などとも呼ばれ、ネットワーク上を流れるデータ通信量を監視することを指す。

Linuxで帯域監視を行えるソフトウェアにntopCactiがある。

Ntop(ntopng)

ntopはネットワークトラフィック(L2,L3)監視ソフトウェアで、ネットワークのステータス、UDP、TCP、DNS、HTTP、その他のプロトコルのトラフィックのプロトコルごとの分布をWebブラウザ上で確認できる。

  • サーバごとにNWの使用状況をtopコマンドのようにリアルタイムに表示可能
  • 送信先や送信元パケットの個別情報を分析可能
  • NW全体の通信パケットの統計情報を分析可能
  • 取得情報や統計情報をWebブラウザに表示し、リモートホストから閲覧可能

設定ファイルは/etc/ntopng.confとなる。

ntop コマンド説明
/usr/sbin/ntop -Antop 管理者ユーザーのパスワードを設定する
ntop –set-admin-password=NewP@$$新しい管理者パスワードを設定する
ntop -P /etc/ntop -w4242 -d/etc/ntop 設定ファイルをポート番号 4242 で使用して、ntop をデーモンとして実行する。
-Wオプションは、Web ブラウザを通じて ntop にアクセスするポートを有効にする。このオプションを指定しない場合、デフォルトのポートは3000。
-dオプションを指定すると、ntop がデーモン モードで有効になる。
ntop [オプション]
オプション説明
-A=キーワード,–set-admin-password=パスワードntopの管理者パスワードの設定
-d, –daemonntopをデーモンとして起動
-i, –interface [インターフェイス]トラフィック監視するインターフェイスの指定
-p, –protocolos [プロトコルリスト]監視するTCP/UDPプロトコルを指定
-u, –user [ユーザ名]指定したユーザ名でntopを起動
-r, –refresh-times [時間]画面を更新する時間を指定/デフォルトは3秒
-w, –http-server [ポート番号]httpのポート番号を指定
-W, –https-server [ポート番号]httpsのポート番号を指定

Cacti

Cactiは、RRDtoolと呼ばれるデータロギングとグラフィカルな描画を行う業界標準のツールを使った、WebUIを持つネットワーク監視ソフトのこと。

Cactiの機能は以下の通り。

  • MRTGと同様に対象機器のリソース情報をSNMPで取得し可視化できる
  • すべての設定をWebGUIベースで行うことができる
  • 収集したい対象機器の追加もWebGUIで可能
  • Cactiユーザの権限付与等の管理が楽

RRDtool: RRDへデータを保持し、グラフを作成するOSS

4.2.2. Snortの利用と設定とルール管理 (NIDS)

Snortの概要

Snortはネットワーク型IDSとして代表的なソフトウェア。
検知するパケットのルール(シグネチャ)を定義したルールファイルを参照して不正なパケットを検知する。

Snortには以下の用途で使用できる。

  • tcpdumpのようにパケットスニファとしての使用
  • パケット ロガーとしての使用
  • 本格的なIDSとしての運用

ソースからのダウンロードや、RedHatユーザはコチラからダウンロードできる。

Snortの構成と設定

Snortの設定は/etc/snort/snort.confファイルで行う。 Debianの場合はSnort のデフォルト構成ファイル内の一部のネットワーク設定を上書きする必要がある。手順は/etc/snort/snort.debian.confを確認して行う。詳しくは公式ドキュメントより。

/etc/snort/*

ファイル説明
/etc/snort/snort.confネットワーク構成/監視するポートの定義が可能

Snortのルール管理

Snortルール

Snortルールはシグネチャとは異なる検出手法でルールを作成するには、脆弱性が実際にどのように機能するかを正確に理解してルールを作成する必要がある。そのためデフォルトのルールセットを通常は用いると良い。

なおSnortルールは、/etc/snort/snort.confファイル内の行をコメント化またはコメント解除することによって有効または無効になる。 ルールは/etc/snort/rulesに保存される。

pulledpork.plによるSnortルールの更新と管理

pulledpork.plは、Snortの公式およびコミュニティルールセットのダウンロード、処理、および管理を自動化するPerlスクリプトのこと。
IDS/IPS運用のセキュリティレベルを維持するために、最新のルールを定期的にシステムに適用することは不可欠となる。

  • ルールのダウンロード
    • Snortの有料/無料のルールサイトから、認証キーを使用してルールセットを自動的に取得する。
  • ルールの処理
    • ダウンロードしたルールを、Snort設定ファイル(snort.conf)で定義されたローカル設定や、古いルールの置き換えなどの条件に基づいて処理する。
  • SID(署名ID)管理
    • GID (Group ID) とSIDの衝突を防ぎ、カスタムルール(local.rules)との統合を容易にする。
  • ホワイトリスト/ブラックリスト
    • ルールの一部を無効化(コメントアウト)したり、特定のルールを強制的に有効化したりするためのリストを管理する。
# pulledpork.plの実行
pulledpork.pl -c /etc/snort/pulledpork.conf -k # -k はMD5チェックサムの確認を行う

設定ファイルの/etc/snort/pulledpork.confには、ルールの取得元URL、認証キー、ルールが適用されるSnort設定ファイルのパス、GID/SIDの管理に関する設定などを記述する。

Snortルールの構文

Snortルールは、ルールヘッダルールオプションという 2 つの主要なコンポーネントで構成される。

なおルールセット(ルールファイル)に記述したシグネチャ(ルール)を変更した後は、snortプロセスを再起動することで変更が反映される。

alert ip any any -> any any (msg: "IP packet Detected";)

構成は以下の通り。

ルールアクション プロトコル IPアドレス ポート番号 <方向演算子> IPアドレス ポート番号 (ルールオプション)
  • ルールアクション
    • alert … ルールマッチしたパケットのログを記録し警告を出力する
    • log … ルールにマッチしたパケットをログに記録
    • pass … ルールにマッチしたパケットを無視
    • activate … ルールにマッチしたパケットについて警告出力し、対応するdynamicアクションの実行を行う
    • dynamic … activateアクションから呼び出され、該当パケットをログに記録
  • プロトコル
    • 検知対象(tcp, udp, icmp, ip)を記録
  • IPアドレス
    • x.x.x.xか範囲([x.x.x.x,y.y.y.y])または任意(any)で指定
  • ポート番号
    • ポート番号(x)または範囲((x,y))または任意(any)で指定
  • 方向演算子
    • ->:右側が送信先、左側が送信元となる
    • <>:左右に記載されるIP/ポートが送信先/送信元どちらでもよい
  • ルールオプション
    • 検知するパケットルールの指定
    • 未指定の場合はルールヘッダに垣外数るすべてのパケットがマッチする

Snortのルールセット

Snortはルールファイルに記述されているシグネチャを見て、ホストへのアクセスが正常会場を判別する。 Snortの主なルールセットは以下の通り。

ルールファイル説明
dos.rulesDoS攻撃を検出するためのルール
ftp.rulesFTPサービスへの攻撃を通知するためのルール
local.rulesユーザ独自のルール
scan.rulesスキャンを検知するためのルール
smtp.rulessmtpサービスへの攻撃を検知するためのルール
telnet.rulestelnetサービスへの攻撃を検知するためのルール
web-cgi.rulesWEBサーバのCGIに対する攻撃を検知するためのルール

snort-statによるSnortの統計情報取得

snort-statは、Snortのログファイル(特にバイナリのパケットログ)を解析し、Snortの検出結果やトラフィックに関する統計情報を出力するユーティリティ
Snortが適切に動作しているか、どのルールが頻繁にトリガーされているかなどを確認するために使用する。

  • ルールの統計
    • どのルール(SID)が最も多くパケットを検出したか(トリガーされたか)の統計を表示する。
  • パケットの要約
    • 処理されたパケットの総数、プロトコルごとの分布、バイト数などの基本的なトラフィック統計を提供する。
  • 効率の分析
    • Snortのパフォーマンスや、特定のルールがネットワークの負荷に与える影響を分析するのに役立つ。
# snort-statの実行例
snort-stat -c /etc/snort/snort.conf -l /var/log/snort

# 特定のSnortログファイル (tcpdump形式のバイナリログ) を解析
snort-stat -r /var/log/snort/snort.log.<timestamp>

snortコマンド

snort [オプション] <フィルタオプション>
オプション説明
-bログをtcpdump形式で記録
-c 設定ファイル設定ファイルの指定
-dアプリケーション層のデータも記録
-Dバックグラウンドで実行
-g <グループ>記録するグループの指定
-u <ユーザ>起動するユーザの指定
-i <インターフェイス>ネットワークインターフェイスの指定
-l <ディレクトリ>ログディレクトリの指定
-vコンソールにパケットを表示
# スニファとしてSnortを動作させる
snort -v

# Snortをtarosanユーザ、snortグループ、/etc/snort/snort.confの設定、ログを/var/log/snortで実行する
snort -u tarosan -g snort -e /etc/snort/snort.conf -l /var/log/snort

4.2.3. OpenVASの利用と設定 (脆弱性スキャナ)

OpenVASの概要

OpenVAS

OpenVAS(Open Vulnerability Assessment System)は、OSSの脆弱性スキャナソフトウェア
Network Vulnerability Tests(NVTs)と呼ばれる脆弱性テストを常に更新でき、最新の脆弱性情報にすばやく対応できることが強みで、CLIでもGUIでも操作できるインタフェースを持つ。

なおOpenVasの設定は/etc/openvas/以下に配置され、/etc/openvas/openvassd.confが全体における主要な動作の設定ファイルとなる。

NASL

NASLはNessusやOpenVASなどの脆弱性スキャナーで使用されるセキュリティ対策用に特化したスクリプト言語のこと。
NASLを使用すると、既知の脆弱性に基づいて特定の攻撃を自動化できる。

4.2.2. OpenVASの構成と管理

OpenVASのユーティリティ

OpenVASを操作するユーティリティには以下のようなものがある。

ユーティリティ機能
openvasmd / gvmdOpenVasManager: 各種操作が行える
openvasmd –rebuildデータベースの再構築を行う
openvassd / openvas-scanner対象のマシンにスキャン処理を行う
openvas-nvt-sync / greenbone-nvt-syncNVTsを更新する
openvas-feed-update / gvm-feed-updateNVTsの更新なおかつ、脆弱性についての最新データ/検出の指示を取得する
openvas-mkcert / gvm-manage-certsクライアントと暗号化通信を行うための証明書を発行する
openvas-adduser / gvmd –create-userOpenVAS用のユーザを追加

ユーザの追加と削除

OpenVASではユーザごとにスキャン内容を設定することができる。 ユーザ追加/削除は以下コマンドで可能。

# 追加
openvasmd --create-user
# 削除
openvasmd --delete-user

NTSsのアップデート

openvas-nvt-syncコマンドで最新の状態にアップデートすることができる。

openvas-nvt-sync

クライアントとの通信の暗号化

OpenVASスキャナとこれを使うクライアント間の通信はSSL化される。 この際に必要な証明書はopenvas-mkcertコマンドで作成できる。

openvas-mkcert

NVTsの更新

脆弱性についての最新データおよびそれらを検出するための指示を取得とNVTsの更新が可能。

gvm-feed-update