はじめに
OSSECデコーダーとルール、ossec-logtestについて記事にしました。
なお、OSSECのインストール手順にご興味のある方は以下の記事を参照ください。
- Amazon Linux2にOSSECをインストールした(OSSEC-Serverインストール)
- Amazon Linux2にOSSECをインストールした(OSSEC-Agentインストール)
- Amazon Linux2にOSSECをインストールした(OSSEC-Localインストール)
各種ファイルとパスについて
- デコードとルールのテストツール:/var/ossec/bin/ossec-logtest
- デコード設定:/var/ossec/etc/decoder.xml
- ルール設定:/var/ossec/rules/*.xml
- OSSECのログファイル:/var/ossec/logs/ossec.log
- OSSECのアラートログ:/var/ossec/logs/alerts/alerts.log
- Active Responseのログ:/var/ossec/logs/active-responses.log
各種ファイルの出力例
- Active Responseのログ
# cat active-responses.log
Tue Mar 1 08:42:57 UTC 2022 /var/ossec/active-response/bin/host-deny.sh add - 1xx.4x.1xx.1xx 1646124177.162 5706
Tue Mar 1 08:42:57 UTC 2022 /var/ossec/active-response/bin/firewall-drop.sh add - 1xx.4x.1xx.1xx 1646124177.162 5706
Tue Mar 1 08:53:27 UTC 2022 /var/ossec/active-response/bin/host-deny.sh delete - 1xx.4x.1xx.1xx 1646124177.162 5706
Tue Mar 1 08:53:27 UTC 2022 /var/ossec/active-response/bin/firewall-drop.sh delete - 1xx.4x.1xx.1xx 1646124177.162 5706
Tue Mar 1 09:57:52 UTC 2022 /var/ossec/active-response/bin/host-deny.sh add - 3x.1xx.2xx.2xx 1646128672.11989 5758
Tue Mar 1 09:57:52 UTC 2022 /var/ossec/active-response/bin/firewall-drop.sh add - 3x.1xx.2xx.2xx 1646128672.11989 5758
Tue Mar 1 10:08:23 UTC 2022 /var/ossec/active-response/bin/host-deny.sh delete - 3x.1xx.2xx.2xx 1646128672.11989 5758
Tue Mar 1 10:08:23 UTC 2022 /var/ossec/active-response/bin/firewall-drop.sh delete - 3x.1xx.2xx.2xx 1646128672.11989 5758
- OSSECのログ
2022/03/05 11:52:10 ossec-testrule: INFO: Reading local decoder file.
2022/03/05 11:52:10 ossec-testrule: INFO: Started (pid: 3264).
2022/03/05 12:36:49 ossec-testrule: INFO: Reading local decoder file.
2022/03/05 12:36:49 ossec-testrule: INFO: Started (pid: 3658).
2022/03/05 12:38:27 ossec-testrule: INFO: Reading local decoder file.
2022/03/05 12:38:27 ossec-testrule: INFO: Started (pid: 3661).
デコーダーとルールについて
OSSECにはマネージャーとエージェントがあります。エージェントは監視対象のサーバログやファイルのハッシュをマネージャーに送信します。マネージャーはエージェントから送られてきた情報を分析し、アラートの通知や通信の遮断などのアクティブレスポンスを行います。
なお、デコーダー機能とルールマッチ機能は、マネージャーにだけ存在する機能になっております。
デーモンは、/var/ossec/bin/ossec-analysisd です。
また、デコードの設定は、xmlファイルに書かれています。
デコードの設定ファイル:/var/ossec/etc/decoder.xml
デフォルトで、デコード設定は330個ありました。
# cd /var/ossec/etc
# # grep decoder decoder.xml | grep name | wc -l
330
デコード設定の名前だけ抽出してみます。
# cd /var/ossec/etc
# grep decoder decoder.xml | grep name
<decoder name="pam">
<decoder name="pam">
<decoder name="pam-user">
例として、loginページへのアクセスのデコーダーを見てみます。
正規表現を利用してデコードしています。
\S は 空白文字以外、\S+ は空白文字以外の1回以上の繰り返しです。
<decoder name="web-accesslog">
<type>web-log</type>
<prematch_pcre2>^\S+ \S+ \S+ \[\S+ \S\d+\] "\w+ \S+ HTTP\S+" </prematch_pcre2>
<pcre2>^(\S+) \S+ (\S+) \[\S+ \S\d+\] </pcre2>
<pcre2>"(\w+) (\S+) HTTP\S+" (\d+) </pcre2>
<order>srcip, srcuser, action, url, id</order>
</decoder>
ルールは/var/ossec/rulesのxmlに書かれています。
#cd /var/ossec/rules
#ls
apache_rules.xml ftpd_rules.xml ms_dhcp_rules.xml ossec_rules.xml sendmail_rules.xml unbound_rules.xml
apparmor_rules.xml hordeimp_rules.xml ms-exchange_rules.xml owncloud_rules.xml smbd_rules.xml vmpop3d_rules.xml
arpwatch_rules.xml ids_rules.xml ms_firewall_rules.xml pam_rules.xml solaris_bsm_rules.xml vmware_rules.xml
asterisk_rules.xml imapd_rules.xml ms_ftpd_rules.xml php_rules.xml sonicwall_rules.xml vpn_concentrator_rules.xml
attack_rules.xml kesl_rules.xml ms_ipsec_rules.xml pix_rules.xml spamd_rules.xml vpopmail_rules.xml
cimserver_rules.xml last_rootlogin_rules.xml ms_powershell_rules.xml policy_rules.xml squid_rules.xml vsftpd_rules.xml
cisco-ios_rules.xml lighttpd_rules.xml ms-se_rules.xml postfix_rules.xml sshd_rules.xml web_appsec_rules.xml
clam_av_rules.xml linux_usbdetect_rules.xml mysql_rules.xml postgresql_rules.xml symantec-av_rules.xml web_rules.xml
courier_rules.xml local_rules.xml named_rules.xml proftpd_rules.xml symantec-ws_rules.xml wordpress_rules.xml
dnsmasq_rules.xml mailscanner_rules.xml netscreenfw_rules.xml proxmox-ve_rules.xml syslog_rules.xml zeus_rules.xml
dovecot_rules.xml mcafee_av_rules.xml nginx_rules.xml psad_rules.xml sysmon_rules.xml
dropbear_rules.xml mhn_cowrie_rules.xml nsd_rules.xml pure-ftpd_rules.xml systemd_rules.xml
exim_rules.xml mhn_dionaea_rules.xml openbsd-dhcpd_rules.xml racoon_rules.xml telnetd_rules.xml
firewalld_rules.xml ms1016_usbdetect_rules.xml openbsd_rules.xml roundcube_rules.xml topleveldomain_rules.xml
firewall_rules.xml msauth_rules.xml opensmtpd_rules.xml rules_config.xml trend-osce_rules.xml
web,accesslogのルールは、/var/ossec/rules/web_rules.xml にありました。
<group name="web,accesslog,">
<rule id="31100" level="0">
<category>web-log</category>
<description>Access log messages grouped.</description>
</rule>
<rule id="31108" level="0">
<if_sid>31100</if_sid>
<id_pcre2>^2|^3</id_pcre2>
<compiled_rule>is_simple_http_request</compiled_rule>
<description>Ignored URLs (simple queries).</description>
</rule>
<rule id="31101" level="5">
<if_sid>31100</if_sid>
<id_pcre2>^4</id_pcre2>
<description>Web server 400 error code.</description>
</rule>
<rule id="31102" level="0">
<if_sid>31101</if_sid>
<url_pcre2>\.jpg$|\.gif$|favicon\.ico$|\.png$|robots\.txt$|\.css$|\.js$|\.jpeg$</url_pcre2>
<compiled_rule>is_simple_http_request</compiled_rule>
<description>Ignored extensions on 400 error codes.</description>
</rule>
<rule id="31103" level="6">
<if_sid>31100,31108</if_sid>
<url_pcre2>=select%20|select\+|insert%20|%20from%20|%20where%20|union%20|</url_pcre2>
<url_pcre2>union\+|where\+|null,null|xp_cmdshell</url_pcre2>
<description>SQL injection attempt.</description>
<group>attack,sql_injection,</group>
</rule>
<rule id="31104" level="6">
<if_sid>31100</if_sid>
<!-- Attempt to do directory transversal, simple sql injections,
- or access to the etc or bin directory (unix). -->
<url_pcre2>%027|%00|%01|%7f|%2E%2E|%0A|%0D|\.\./\.\.|\.\.\\\.\.|echo;|</url_pcre2>
<url_pcre2>cmd\.exe|root\.exe|_mem_bin|msadc|/winnt/|/boot\.ini|</url_pcre2>
<url_pcre2>/x90/|default\.ida|/sumthin|nsiislog\.dll|chmod%|wget%|cd%20|</url_pcre2>
<url_pcre2>exec%20|\.\./\.\.//|%5C\.\./%5C|\./\./\./\./|2e%2e%5c%2e|\\x5C\\x5C</url_pcre2>
<description>Common web attack.</description>
<group>attack,</group>
</rule>
<rule id="31105" level="6">
<if_sid>31100</if_sid>
<url_pcre2>%3Cscript|%3C%2Fscript|script>|script%3E|SRC=javascript|IMG%20|</url_pcre2>
<url_pcre2>%20ONLOAD=|INPUT%20|iframe%20</url_pcre2>
<description>XSS (Cross Site Scripting) attempt.</description>
<group>attack,</group>
</rule>
ossec-logtestについて
デコーダーとルールは、/var/ossec/bin/ossec-logtest を利用して、テストすることができます。
198.168.3.5 - - [05/Mar/2022:21:38:24 +0900] "POST /login HTTP/1.1" 200 - をテストしてみたところ、ルールID:31108にヒットしました。
# /var/ossec/bin/ossec-logtest
2022/03/05 12:38:27 ossec-testrule: INFO: Reading local decoder file.
2022/03/05 12:38:27 ossec-testrule: INFO: Started (pid: 3661).
ossec-testrule: Type one log per line.
198.168.3.5 - - [05/Mar/2022:21:38:24 +0900] "POST /login HTTP/1.1" 200 -
**Phase 1: Completed pre-decoding.
full event: '198.168.3.5 - - [05/Mar/2022:21:38:24 +0900] "POST /login HTTP/1.1" 200 -'
hostname: 'ip-172-31-83-176'
program_name: '(null)'
log: '198.168.3.5 - - [05/Mar/2022:21:38:24 +0900] "POST /login HTTP/1.1" 200 -'
**Phase 2: Completed decoding.
decoder: 'web-accesslog'
srcip: '198.168.3.5'
srcuser: '-'
action: 'POST'
url: '/login'
id: '200'
**Phase 3: Completed filtering (rules).
Rule id: '31108'
Level: '0'
Description: 'Ignored URLs (simple queries).'
おわりに
今回の記事は以上です。では、また。