OSSECで同じIPアドレス+Port番号からの連続POSTを検知する

前回の記事では同じIPアドレスからの連続POSTを検知するOSSECのルール定義について書きました。今回は同じIPアドレスに加えて、同じPort番号からの連続POSTを検知する場合について書こうと思います。OSSECの監視対象ログはApacheのアクセスログとします。

OSSEC、ApacheとOSのバージョンは以下のとおりです。

OSSEC: 2.8.3
Apache: 2.4
OS: Ubuntu 14.04

ApacheのLogFormatを変更する

同じPort番号からのアクセスであることをOSSECが検知するためには、ApacheのアクセスログにPort番号が出力されている必要があります。
ApacheのLogFormatを以下のように設定した場合、アクセスログの先頭に「送信元IPアドレス:送信元Port番号」(ex. 192.168.0.1:52998)が出力されます。

LogFormat "%h:%{remote}p %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined

OSSECのデコーダを定義する

送信元Port番号を出力するApacheのLogFormatをOSSECが解釈できるようにデコーダを定義します。etc/decoder.xml に定義されているApacheのアクセスログ(NCSA)のデコーダ「web-accesslog」を参考に etc/local_decoder.xml にデコーダを定義します。

<decoder name="web-accesslog-custom">
  <type>web-log</type>
  <prematch>^\d+.\d+.\d+.\d+:\d+ |^::ffff:\d+.\d+.\d+.\d+:\d+ </prematch>
  <regex>^(\d+.\d+.\d+.\d+):(\d+) \S+ \S+ [\S+ \S\d+] </regex>
  <regex>"\w+ (\S+) HTTP\S+ (\d+) </regex>
  <order>srcip, srcport, url, id</order>
</decoder>

デコーダを定義したらOSSECを再起動します。

bin/ossec-logtest でApacheのアクセスログが定義したデコーダで解釈されるかを確認します。

# ./bin/ossec-logtest 
2016/12/02 11:48:11 ossec-testrule: INFO: Reading local decoder file.
2016/12/02 11:48:11 ossec-testrule: INFO: Started (pid: 17109).
ossec-testrule: Type one log per line.

192.168.0.1:51349 - - [02/Dec/2016:11:47:51 +0900] "GET / HTTP/1.1" 200 3269 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36"


**Phase 1: Completed pre-decoding.
       full event: '192.168.0.1:51349 - - [02/Dec/2016:11:47:51 +0900] "GET / HTTP/1.1" 200 3269 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36"'
       hostname: 'hogehoge'
       program_name: '(null)'
       log: '192.168.0.1:51349 - - [02/Dec/2016:11:47:51 +0900] "GET / HTTP/1.1" 200 3269 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.98 Safari/537.36"'

**Phase 2: Completed decoding.
       decoder: 'web-accesslog-custom'
       srcip: '192.168.0.1'
       srcport: '51349'
       url: '/'
       id: '200'

「**Phase 2: Completed decoding.」を見ると、定義したデコーダ「web-accesslog-custom」で解釈されていることが分かります。

OSSECのルールを定義する

前回の記事で定義したルールに同じ送信元Port (same_src_port)という条件を加えると以下のようになります。

<rule id="100041" level="10" timeframe="60" frequency="3">
  <if_matched_sid>31530</if_matched_sid>
  <url>/users</url>
  <same_source_ip />
  <same_src_port />
  <description>Multiple login challenge from same source ip.</description>
</rule>

「/users」に一致するURLに対して、同じIPアドレス+Port番号から60秒以内に5回連続POST(ルールID 31530は「] “POST」にマッチ)があった場合に検知します。

ルールを定義したらOSSECを再起動します。

※本記事執筆時点(2016/12/9)で公式ドキュメントでは「same_sourse_port」と記載されていますが、「same_src_port」としなければ動作しませんでした。

OSSECの詳細については公式ドキュメントを参照してください。
http://ossec.github.io/docs/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*