第10章 ユーザースクリプトによる振る舞い・イベント検知
本章では、ネットワーク管理者自身が開発ができるユーザースクリプトを紹介します。
本機能を使えば、予期しないネットワークの使い方をしているホストの発見や、閾値設定でトラフィック量の監視をすることができます。
(2022年2月9日(水) ebookの記載を追加)
文:ジュピターテクノロジー よしひろ
- (2022年2月9日(水) 追記)2022年2月9日(水)に、本ブログ記事のシリーズ【ntopng and nProbeによる高速トラフィック分析入門】がもととなったebookを弊社サイトに公開しました。本サイトで紹介する以上の内容が盛だくさんで、かつ本ブログ執筆当時ではntopngのバージョンが4系でしたが、こちらのebookは5系を対象に執筆しております。是非、無料のebook「ntopによる高速トラフィック分析入門(ntopngバージョン5.0.2系)」をご入手ください。ダウンロードは、こちらからお願いします。
10.1 ユーザースクリプトとは
ntopngのユーザースクリプトは、特定のイベントが発生したときにLua(ルア)スクリプトを実行する仕組みです。
ntopngにはビルトインで直ぐに活用できるユーザースクリプトが用意されています。
また、ネットワーク管理者がLuaスクリプトを開発してntopngにデプロイすることも可能です。
ユーザースクリプトは、フローのライフサイクル間に実行されます。
10.1.2 フローhooks
以下のフックが準備されています。
protocolDetected・・・ アプリケーションを検知したタイミングで呼び出し
statusChanged・・・ 前回の呼び出しからフローの内部ステータスが変化した場合に呼び出し
periodicUpdate ・・・長期滞在フローで、5分ごとに実行
flowEnd・・・フローが終了した場合に呼び出し
all・・・使用可能なすべてのフックに対して関連するコールバックが呼び出される特別なフック
10.1.3 ライフタイム
図10-1 フローのライフタイムとフック
10.2 ユーザースクリプト開発の流れ
ntopngのユーザースクリプト開発の流れは以下の通りです。
- プラグインディレクトリの作成
- マニュフェストファイルの作成
- ユーザースクリプト本体の作成
- ステータス、アラートファイルの作成
10.2.1 ユーザースクリプトのデプロイ方法
本書では、営業時間外にローカルホストが、リモートホストに接続した場合にアラート発報するユーザースクリプト"unexpected_time_access"のデプロイ方法をご紹介します。
弊社から入手した”unexpected_time_access.tar.gz”を/homeフォルダ内に展開してください。
ntopngにログインし、「開発者」→「ディレクトリ」をクリックし、プラグインディレクトリ、ステータス、アラートディレクトリを確認後、ファイルをそれぞれ移動してください。
図10-2 ユーザースクリプトディレクトリの確認
以下がフォルダ構成とファイル一覧となります。
unexpected_time_accessといったフォルダはデフォルトでは存在しないので作成してください。その後、ファイルをコピーします。
図10-3 unexpected_time_accessフォルダ・ファイル構成
10.2.2 ユーザースクリプトの設定
unexpected_time_accessの使い方を説明します。
ntopngにログインし、「開発者」→「プラグイン」をクリックしてください。
unexpected_time_accessが読み込まれていることを確認します。
図10-4 unexpected_time_accessの読み込み
「設定」→「ユーザースクリプト」→「フロー」をクリックし、デフォルトの編集ボタンをクリックしてください。
“時間外のリモートアクセス”が表示することを確認し、アクション列の編集ボタンをクリックしてください。
図10-5 unexpected_time_accessの使い方
テキストボックスに営業の開始時間と終了時間をカンマ区切りで入力します。
有効化、適用ボタンをクリックします。
例: 08,12
営業開始午前8時、終了正午
10.2.3 ユーザースクリプトの実行とデバック
ユーザースクリプトのデバック情報を確認する為に、手動でntopngを起動します。
※開発時のテスト/デバックに有効な手段です
ntopngをsystemctl等で停止し、以下のコマンドを実行してください。
標準出力にデバック情報が表示されます。
図10-6 ユーザースクリプトの実行とデバック
最後に実際にアラートが発報されているか確認します。
ntopngのWeb GUI「アラート」→「検出されたアラート」→「フローアラート」をクリックしてください。
”時間外のリモートアクセスの発見”が発報されていることを確認してください。
以上で、unexpected_time_access.luaの配置と動作確認は完了です。
図10-7 時間外のリモートアクセス検知アラート
以降の章では、ntopngのビルトインユーザースクリプトのうち有用なものをいくつかご紹介します。
10.3 SYNスキャン
1分間あたり、レスポンスがないSYN送受信の数が閾値を超えた場合にアラートを発報します。
以下の図は、1分間に256SYNを超過したホストががいればアラートを発報するように設定しています。
図10-8 SYNスキャンアラートの設定
10.4 トラフィック閾値アラート
1分間あたりの入出力トラフィックを確認し、閾値を超えた場合にアラートを発報します。
以下の図は、1分間に512MBを超過した場合にアラートを発報するように設定しています。
図10-9 トラフィックアラート3種類
図10-10 ingressトラフィックアラートの閾値設定
10.5 予期していないDHCP, DNS, NTP, SMTPサーバーの利用
指定したサーバー以外にアクセスしているホストを検知した場合、アラートを発報します。
以下の図は、組織内ネットワーク以外のDNSサーバーにアクセスしたホストを検知した場合、アラートを発報するように設定しています。
図10-11 予期しないDNSサーバーリクエスト
以上で説明は終わりです。
如何でしょうか?ユーザースクリプトを使えば、ネットワークで何か想定していない事態が発生した場合にアラートを発報し、素早い処置がとれるといったイメージができたのではないでしょうか?
本記事で扱っているntop社のnProbe, ntopng製品にご興味のある方は、以下のリンクから弊社までお問い合わせください!