前回の記事では同じ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/