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