はじめに
ふとセキュリティについて何か学習を始めたいと思いました。オープンソースのプログラムを解読しながら、理解を深めていきたいと思います。
まずはオープンソースのOSSECについて学習します。まずはドキュメントを読むことから始めます。
https://www.ossec.net/docs/
今回は第六弾としまして、OSSECのLog monitoring/analysisについて読んでいきます。
https://www.ossec.net/docs/docs/manual/monitoring/index.html
ログ監視と分析ですので、いよいよOSSECの中心部分に差し掛かってきたのかと思います。ここをある程度理解してから、ソースコードを読んでいくと良いのかなと思いつつ、まずはドキュメントを読むことから始めます。
ログの監視と分析
ログ解析(またはログ検査)は、OSSEC内部ではlogcollectorとanalystdのプロセスによって行われる。前者はイベントを収集し、後者はそれらを分析(デコード、フィルタリング、分類)します。
これはリアルタイムで行われるため、イベントが書き込まれるとすぐにOSSECはそれらを処理することになる。OSSECは、内部ログファイル、Windowsイベントログからイベントを読み取ることができ、また、リモートsyslog経由で直接受け取ることもできます。
logcollectorプロセス
OSSECの内部でイベントの収集を行うプロセスです。
analystdプロセス
logcollectorプロセスが収集したイベントの分析を行うプロセスです。ここでいう分析とはデコード、フィルタリング、分類です。
リアルタイム性
イベントの収集と分析はリアルタイムで行われます。
イベントの読み取り
OSSECは、内部ログファイル、Windowsイベントログからイベントを読み取ります。また、リモートsyslogからも読み取ります。
What is log analysis?
OSSECでは、ログ解析のことをLIDS(Log-based Intrusion Detection)と呼んでいます。ログを利用して、攻撃や不正使用、システムエラーなどを検知することが目的です。
LIDS - Log-based intrusion detection or security log analysisは、ログを主な情報源として、特定のネットワーク、システム、アプリケーションに対する攻撃を検知するためのプロセスまたは技術です。また、ソフトウェアの誤用、ポリシー違反、その他の不適切な活動の検出にも非常に有効です。
LIDSとは?
OSSECでは、ログ解析のことをLIDS(Log-based Intrusion Detection)と呼んでいます。ログを情報源として、攻撃や不適切な挙動を検知します。
analystdのソースコードを読み込むとOSSECの攻撃検知、不正検知の仕組みが理解できそうです。ソースコード読み込みのポイントかも知れません。
Quick Facts
・ログはどのくらいの頻度で監視されていますか?
⇒リアルタイムです。
・イベントはどこで解析されますか?
⇒マネージャー内です。
・ログはどれくらいの期間保存されますか?
⇒ポリシーで定められた期間です(ユーザーが設定可能)。
・コンプライアンスにはどのように対応するのですか?
⇒(PCI DSSなど)PCI の第10項(ログ監視)全体に役立ちます。
・CPUはどの程度使用しますか?
⇒エージェントでは、イベントを読み込んでマネージャに転送するだけなので、CPU/メモリはほとんど使いません。
⇒マネージャでは、1秒あたりのイベント数(EPS)に依存します。
・誤検出はどのように処理されますか?
⇒ローカルルールを用いて誤検出を排除することが可能です。
Configuration Options
これらのオプションは、各エージェントのossec.confファイルまたは共有のagent.confでローカルに指定する必要があります。 要素の内部では、以下のオプションを持つことができます。
ossec.conf
各エージェント毎のコンフィグ設定ファイル
agent.conf
エージェント共通のコンフィグ設定ファイル
Monitoring logs
OSSECでは、ログを監視する方法として、大きく分けて「ファイル」と「プロセス」の2つがあります。それぞれの方法には、ページと例があります。
Process Monitoring(プロセス監視)
(例)
Disk space utilization (df -h) example
例えば、ディスクの使用率を監視したい場合、df -h の出力をログファイル (多分 /var/log/df.log) にダンプする cron ジョブを設定し、OSSEC がそれを参照するように設定する必要があります。
OSSEC バージョン 2.3 では、以下の設定により OSSEC で直接コマンドを監視することができます (/var/ossec/etc/ossec.conf 内)。
Load average (uptime) Example
別の例として、ロードアベレージを監視したい場合、例えば「uptime」コマンドを監視し、それが2より大きい場合にアラートを出すようにOSSECを設定することができる。この機能には、たくさんの可能性があります。監視するコマンドやルールのアイディアがあれば、ぜひコメントください。とのこと。
Alerting when output of a command changes
ログやコマンドの出力が変化したときにアラートを作成したい場合は、ルールの新しいオプション を見てみましょう(最新のスナップショットで利用可能です)。
例として、サーバでリスニングモードで新しいポートが開かれたときに警告するルールを作成します。
まず、以下を ossec.conf に追加して、netstat -tan |grep LISTEN コマンドを実行するように OSSEC を設定します。その後、その出力が変化したときに警告するルールを追加します。
オプションを使用していることに注意してください。最初にイベントを受信すると、内部のデータベースに保存されます。同じイベントを受信するたびに、保存されているものと比較し、出力が変化した場合にのみ警告を発します。
この例では、OSSECを設定した後、ポート23456をリッスンするためにnetcatを開始し、これが私が得たアラートです。
Detecting USB Storage Usage
Xavier Mertensが、OSSECによるUSBストレージの使用状況の検出について、非常に興味深い記事を書いています。彼はそのために私たちのポリシー監査モジュールを使用しましたが、USBモニタリングは私たちの新しい機能である :xml:check_diff
を使えば、もっと簡単に行えると思います。
まず、regコマンドを使用して、USBSTORレジストリエントリを監視するようにWindowsエージェントを設定します。次に、そのコマンドのローカルルールを作成します。
数分後、/var/ossec/queue/diff/[agent_name]/[rule_id]に、このコマンドの現在のスナップショットを含むディレクトリが表示されるでしょう。誰かが新しいUSBデバイスを追加すると、このアラートが表示されます。
どうやら、プロセスの検知は、ossec.onfファイルにタグにて、OSSECが実行するコマンドをconfigureして、ruleを作成する。ruleには、rule idを割り振るようです。そして、ruleにcheck_diffを設定した場合は、/var/ossec/queue/diff/[agent_name]/[rule_id]にて、差分を検知した結果のようなものが書き込まれるようです。この辺もソースコードを見るポイントかも知れません。要は、Linuxのコマンドを実行しておいて、ルールに従ってイベントを上げるようなものか?
File Monitoring(ファイル監視)
OSSECにはossec-logcollectorというプロセスがあり、設定されたログファイルに新しいイベントがないか監視しています。新しいログメッセージが到着すると、それを他のプロセスに転送して分析したり、OSSECサーバーに転送したりする。
(例)
Simple example
監視するログファイルを設定するのは簡単です。監視するファイルの名前と形式を指定するだけです。
Windows EventLog Example
Windowsのイベントログを監視するには、書式を「eventlog」、場所をイベントログ名で指定する必要があります。
Windows EventChannel Example
Windows Vista以降のWindowsイベントログを監視するには、"eventchannel "ログ形式を使用する可能性があります。場所は、イベントログの名前です。これは、アプリケーションとサービスのログを監視する唯一の方法です。ファイル名に「%4」が含まれている場合は、「/」に置き換えてください。
Multiple Files Example
複数のファイルをチェックするために、OSSECはposix正規表現に対応しています。例えば、/var/log ディレクトリ内の .log で終わるすべてのファイルを分析する場合は、次のように設定します。
Date Based Example
また、日付によって変化するログファイルについては、strftime形式で日、月、年などに置き換えて指定することができます。例えば、08が年、12が月、15が日(そして毎日ロールオーバーされる)のログ
IIS Logs Example
IIS(5、6)では、NCSA形式(Webのみ)、W3C拡張形式(Web、FTP、SMTP用)のサポートが可能です。デフォルトでは、インストールスクリプトは、Web (W3SVC1 から W3SVC254), ftp (MSFTPSVC1 から MSFTPSVC254) および smtp (SMTPSVC1 から SMTPSVC254) の最初のバーチャルホストを監視するように OSSEC を設定しようとします。その他のファイルを監視するには、新しいエントリを手動で追加する必要があります。
監視対象のファイルをlocalfileに設定するだけのです。こちらの方が簡単なのか。ただし、ここで対象に指定されたファイルの差分をチェックするロジックがあるのでしょうか。ファイルのタイムスタンプを見るだけではないですよね。。。ソースコードを見るときのポイントとして覚えておきます。
おわりに
今回は以上です。では、また。