こんにちは。SIOS OSSエバンジェリスト/セキュリティ担当の面 和毅です。
WAF等に用いられるModSecurityのログですが、可視化するのは意外に面倒くさいです。ここでは、ModSecurity(3.0)のログをElasticsearchに入れKibanaで可視化する方法をまとめます。具体的にはmodsecurity-to-elasticsearchのPythonスクリプトを修正して利用します。
1. 元になるスクリプトと修正
ModSecurity + Elasticsearch + Kibanaを実現するためのスクリプトとして、modsecurity-to-elasticsearch(https://github.com/theMiddleBlue/modsecurity-to-elasticsearch)が公開されていますので、こちらを利用します。
ただし、現状公開されているバージョン(2017/12/12更新版)のままですと、実行した際にエラーが出ますので、修正を加えます。
60c60
< d['transaction']['unixts'] = int(d['transaction']['id'][0:14].replace('.',''))
---
> d['transaction']['unixts'] = int(d['transaction']['unique_id'][0:14].replace('.',''))
115c115
< if res['created'] is True:
---
> if res['result'] == 'created':
のように、’unixts’となる所を’id’->’unique_id’に修正、またres[‘created’]をres[‘result’]で取得するように修正します。
2. ElasticsearchとKibanaの準備
Elasticsearch/KibanaはDebian(Stretch)を用いて構成します。現状のバージョン(6.4.3)を使用します。
Elasticsearch/Kibanaのインストール方法に関しては、Elasticsearchのサイト、Kibanaのサイトを確認してください。
3. ModSecurityのログ出力の修正
Modsecurityのログ出力をjson形式で一ファイルずつ出力するように修正します。modsecurity.confファイル等で(この辺はインストール方法によって変わります)
# -- Audit log configuration -------------------------------------------------
--省略--
SecAuditLogRelevantStatus "^[0-9]+"
--省略--
SecAuditLogType concurrent
SecAuditLogStorageDir /var/log/modsecurity/[好きなディレクトリ名]
--省略--
SecAuditLogFormat JSON
となるように修正します。(注)上述の/var/log/nginx/logs/modsecurity/[好きなディレクトリ名]を作成する際には、ディレクトリのアクセス権に注意してください。Modsecurityを動かすApacheやnginx等のプロセスが書き込めるようにしておきましょう。
4. ModsecurityのログをElasticsearchに入れる
ModsecurityのログをElasticsearchに入れるように1.で修正したPythonスクリプトを動かします。
- まずは(Debianの場合)pipをインストールし、pipを用いてPython client for Elasticsearch(elasticsearch-py)をインストールします。
sios@elasticsearch:~$ pip show elasticsearch Name: elasticsearch Version: 6.3.1 Summary: Python client for Elasticsearch Home-page: https://github.com/elastic/elasticsearch-py Author: Honza Král, Nick Lang Author-email: honza.kral@gmail.com, nick@nicklang.com License: Apache License, Version 2.0 Location: /usr/local/lib/python2.7/dist-packages Requires: urllib3 Required-by:
- 最初に修正したmodsec_parserを用いて、Elasticsearchにログを流します。
root@elasticsearch:~# python /opt/modsecurity-to-elasticsearch/modsec_parser.py -d /var/log/modsecurity/[好きなディレクトリ名]/20181231/20181231-1504/
のように、ログのディレクトリを”-d”で指定して流し込みます。
- Elasticsearch中のログを確認します。curlを用いて、indexを見て確認します。
sios@elasticsearch:~$ curl 'http://localhost:9200/_cat/indices?v' health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open .monitoring-es-6-2018.12.31 7iWfzAUWRFu8s0fXofVjzw 1 0 44396 72 16.4mb 16.4mb green open modsecurity_20181231 9gRC0ArDRsucvM9Y4uARkw 1 0 23 0 181.2kb 181.2kb green open .kibana 0B_tHSuOQAuomh8JxcafpQ 1 0 3 0 23.2kb 23.2kb green open modsecurity_20181230 nF7KAJgYTQS_zJlN4lE5zA 1 0 2862 0 2mb 2mb
のように、indexにmodsecurity_[日付]がついた形で格納されています。
5. Kibanaでの確認
KibanaでManagementを選択し、Index Patterns->Create IndexでIndexにElasticsearchに入れたログのIndexが表示されます。
まとめ
これでKibanaでModsecurityのログを表示することが出来ました。ここから、更にフィールドの対応付などを行うことで、Modsecurityのログを可視化することが出来ます。可視化に関しては、時間がありましたら別途記事にします。
セキュリティ系連載案内
- OSSセキュリティ技術の会による日経Linuxでの連載「IoT時代の最新SELinux入門」がITPro上で読めるようになりました。技術の会代表で第一人者である中村さん等による、最新のSELinuxの情報やコマンド類等も更新されているのでお薦めです。
- OSSセキュリティ技術の会によるThinkITでの連載「開発者のためのセキュリティ実践講座」がThinkIT上で開始しました。技術の会の中の人間で、最新の代表的なOSSセキュリティ技術を紹介していきます。
- OSSセキュリティ技術の会により、ThinkITでLinuxSecuritySummit 2018のレポートが紹介されています。
- OSSセキュリティ技術の会の面により、@ITで「OSS脆弱性ウォッチ」が連載されています。
- OSSセキュリティ技術の会の面により、@ITで「OpenSCAPで脆弱性対策はどう変わる?」が連載されています。
- OSSセキュリティ技術の会のメンバーにより、@ITで「Berkeley Packet Filter(BPF)入門」が連載されています。
セミナー情報
2019/01/09 18:30-20:30で、「OSSライセンスMeetup Vol.1」を行います。
今回は技術評論社刊「OSSライセンスの教科書」著者・上田さんを迎えて刊行に至った理由・本著に込めた思い・見どころなどを語っていただき、後半ではテクニカルライター可知豊さんと共に上田さんと本書についてのディスカッションを行います。
https://sios.connpass.com/event/104422/がプログラム内容と申し込みの詳細になります。奮ってご参加下さい。