OSSEC v2.9.0 でApacheアクセスログのPort番号を解釈するデコーダを定義する

2017年2月9日にOSSECのバージョン2.9.0がリリースされました。

v2.9.0ではIPv6がサポートされ、IPアドレスを解釈するデコーダの定義が更新されています。
以前の記事で、クライアントのPort番号をApacheのアクセスログに出力する場合のデコーダ定義について書きましたが、このような場合、v2.9.0ではどのようにデコーダを定義すればよいか調べてみました。

本記事で対象とするOSSEC、ApacheとOSのバージョンは以下のとおりです。

OSSEC: 2.9.0
Apache: 2.4
OS: Ubuntu 14.04

ApacheのLogFormatを変更する

以前の記事では「送信元IPアドレス:送信元Port番号」と出力されるように定義していましたが、OSSECで解釈しやすいようにApacheのLogFormatを以下のように変更しました。

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

アクセスログの先頭に「送信元IPアドレス(半角スペース)送信元Port番号」(e.g. 192.168.0.1 52998 )が出力されます。

OSSECのデコーダを定義する

etc/decoder.xml に定義されているApacheのアクセスログ(NCSA)のデコーダ「web-accesslog」を参考に etc/local_decoder.xml にデコーダ「web-accesslog-custom」を定義します。

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

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

IPv4の場合

# ./bin/ossec-logtest
2017/05/08 11:24:06 ossec-testrule: INFO: Reading local decoder file.
2017/05/08 11:24:06 ossec-testrule: INFO: Started (pid: 27).
ossec-testrule: Type one log per line.

192.168.0.1 51349 - - [08/May/2017:11:06:00 +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 - - [08/May/2017:11:06:00 +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 - - [08/May/2017:11:06:00 +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'

IPv6の場合

# ./bin/ossec-logtest
2017/05/08 11:26:23 ossec-testrule: INFO: Reading local decoder file.
2017/05/08 11:26:23 ossec-testrule: INFO: Started (pid: 28).
ossec-testrule: Type one log per line.

::1 38332 - - [08/May/2017:11:07:53 +0900] "GET / HTTP/1.1" 200 4002 "-" "curl/7.35.0"


**Phase 1: Completed pre-decoding.
       full event: '::1 38332 - - [08/May/2017:11:07:53 +0900] "GET / HTTP/1.1" 200 4002 "-" "curl/7.35.0"'
       hostname: 'hogehoge'
       program_name: '(null)'
       log: '::1 38332 - - [08/May/2017:11:07:53 +0900] "GET / HTTP/1.1" 200 4002 "-" "curl/7.35.0"'

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

無事、定義したデコーダ「web-accesslog-custom」で解釈されました。
OSSECを再起動するとデコーダが有効になります。

OSSECv2.9.0の詳細についてはOSSECのGitHubを参照してください。
https://github.com/ossec/ossec-hids/releases/tag/2.9.0

コメントを残す

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

*