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
