【mod_security】mod_securityのログファイル（modsec_audit.log）の解析 その１

#はじめに
mod_securityの自己学習をしています。mod_securityのログファイルを解析してみます。

#mod_securityのログ
###動作確認に使用したindex.htmlです。
```/var/www/html/index.html
<html>
<form>
<input type="text" name="value">
<input type="submit">
</form>
</html>
```
###ブラウザで開くとこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321513/8b3b043e-0913-c8c0-276f-6aa1d1301025.png)

###送信をクリックしたときのアドレスバーはこんな感じ。IPアドレスは編集してます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321513/b01ef239-6473-7ace-d971-621a2aa76ca4.png)

###Apacheのテストページに飛びます。この辺はApacheの設定かも。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321513/40d4f737-9a15-62a9-a261-8e43682380e8.png)



###という訳で、今回、解析するmod_securityのログです。IPアドレスは編集してます。

```/var/log/httpd/modsec_audit.log
--eddafe7b-A--
[03/Feb/2022:11:52:51 +0000] YfvCE7Yy7OCFRLMWFtNyCwAAAAM 6A.1BC.1DE.2FG 51357 1AB.3C.2D.E 80
--eddafe7b-B--
GET /?value=1%27+or+%27a%27%3D%27a HTTP/1.1
Host: 5A.9B.2C.1DE
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://5A.9B.2C.1DE/
Accept-Encoding: gzip, deflate
Accept-Language: ja,en-US;q=0.9,en;q=0.8
```

```
--eddafe7b-F--
HTTP/1.1 403 Forbidden
Upgrade: h2,h2c
Connection: Upgrade, Keep-Alive
Last-Modified: Thu, 30 Dec 2021 21:39:01 GMT
ETag: "e2e-5d463e1efe740"
Accept-Ranges: bytes
Content-Length: 3630
Keep-Alive: timeout=5, max=100
Content-Type: text/html; charset=UTF-8
```

```
--eddafe7b-H--
Message: Access denied with code 403 (phase 2). Pattern match "(?i:([\\s'\"`\xc2\xb4\xe2\x80\x99\xe2\x80\x98\\(\\)]*?)\\b([\\d\\w]++)([\\s'\"`\xc2\xb4\xe2\x80\x99\xe2\x80\x98\\(\\)]*?)(?:(?:=|<=>|r?like|sounds\\s+like|regexp)([\\s'\"`\xc2\xb4\xe2\x80\x99\xe2\x80\x98\\(\\)]*?)\\2\\b|(?:!=|<=|>=|<>|<|>|\\^|is\\s+not ..." at ARGS:value. [file "/etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [line "77"] [id "950901"] [rev "2"] [msg "SQL Injection Attack: SQL Tautology Detected."] [data "Matched Data:  'a'='a found within ARGS:value: 1' or 'a'='a"] [severity "CRITICAL"] [ver "OWASP_CRS/2.2.9"] [maturity "9"] [accuracy "8"] [tag "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"] [tag "WASCTC/WASC-19"] [tag "OWASP_TOP_10/A1"] [tag "OWASP_AppSensor/CIE1"] [tag "PCI/6.5.2"]
Apache-Error: [file "apache2_util.c"] [line 273] [level 3] [client 6A.1BC.1DE.2FG] ModSecurity: Access denied with code 403 (phase 2). Pattern match "(?i:([\\\\\\\\s'\\\\"`\\\\xc2\\\\xb4\\\\xe2\\\\x80\\\\x99\\\\xe2\\\\x80\\\\x98\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\b([\\\\\\\\d\\\\\\\\w]++)([\\\\\\\\s'\\\\"`\\\\xc2\\\\xb4\\\\xe2\\\\x80\\\\x99\\\\xe2\\\\x80\\\\x98\\\\\\\\(\\\\\\\\)]*?)(?:(?:=|<=>|r?like|sounds\\\\\\\\s+like|regexp)([\\\\\\\\s'\\\\"`\\\\xc2\\\\xb4\\\\xe2\\\\x80\\\\x99\\\\xe2\\\\x80\\\\x98\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\2\\\\\\\\b|(?:!=|<=|>=|<>|<|>|\\\\\\\\^|is\\\\\\\\s+not ..." at ARGS:value. [file "/etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [line "77"] [id "950901"] [rev "2"] [msg "SQL Injection Attack: SQL Tautology Detected."] [data "Matched Data:  'a'='a found within ARGS:value: 1' or 'a'='a"] [severity "CRITICAL"] [ver "OWASP_CRS/2.2.9"] [maturity "9"] [accuracy "8"] [tag "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"] [tag "WASCTC/WASC-19"] [tag "OWASP_TOP_10/A1"] [tag "OWASP_AppSensor/CIE1"] [tag "PCI/6.5.2"] [hostname "5A.9B.2C.1DE"] [uri "/"] [unique_id "YfvCE7Yy7OCFRLMWFtNyCwAAAAM"]
Action: Intercepted (phase 2)
Stopwatch: 1643889171139933 687 (- - -)
Stopwatch2: 1643889171139933 687; combined=292, p1=202, p2=86, p3=0, p4=0, p5=3, sr=115, sw=1, l=0, gc=0
Producer: ModSecurity for Apache/2.9.3 (http://www.modsecurity.org/); OWASP_CRS/2.2.9.
Server: Apache/2.4.52 ()
Engine-Mode: "ENABLED"

--eddafe7b-Z--
```
#最初ですので、ログの内容を細かく見ていきます。
####GET /?value=1%27+or+%27a%27%3D%27a HTTP/1.1
ASCII文字とURLエンコードの対応表より、
%27は'
%3Dは=
ですので、
GET /?value=1'+or+'a'='a HTTP/1.1
になります。orを挟んでいる+はスペースなのでしょうか・・・

まぁ、とは言うても、HTTPリクエストに対して、403のレスポンスを返しているようです。ここまでは、あんまりmod_securityとは関係なさそう。

#本題は、--eddafe7b-H--以下のログですね。。
```/var/log/httpd/modsec_audit.log
--eddafe7b-H--
Message: Access denied with code 403 (phase 2). Pattern match "(?i:([\\s'\"`\xc2\xb4\xe2\x80\x99\xe2\x80\x98\\(\\)]*?)\\b([\\d\\w]++)([\\s'\"`\xc2\xb4\xe2\x80\x99\xe2\x80\x98\\(\\)]*?)(?:(?:=|<=>|r?like|sounds\\s+like|regexp)([\\s'\"`\xc2\xb4\xe2\x80\x99\xe2\x80\x98\\(\\)]*?)\\2\\b|(?:!=|<=|>=|<>|<|>|\\^|is\\s+not ..." at ARGS:value. [file "/etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [line "77"] [id "950901"] [rev "2"] [msg "SQL Injection Attack: SQL Tautology Detected."] [data "Matched Data:  'a'='a found within ARGS:value: 1' or 'a'='a"] [severity "CRITICAL"] [ver "OWASP_CRS/2.2.9"] [maturity "9"] [accuracy "8"] [tag "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"] [tag "WASCTC/WASC-19"] [tag "OWASP_TOP_10/A1"] [tag "OWASP_AppSensor/CIE1"] [tag "PCI/6.5.2"]
Apache-Error: [file "apache2_util.c"] [line 273] [level 3] [client 6A.1BC.1DE.2FG] ModSecurity: Access denied with code 403 (phase 2). Pattern match "(?i:([\\\\\\\\s'\\\\"`\\\\xc2\\\\xb4\\\\xe2\\\\x80\\\\x99\\\\xe2\\\\x80\\\\x98\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\b([\\\\\\\\d\\\\\\\\w]++)([\\\\\\\\s'\\\\"`\\\\xc2\\\\xb4\\\\xe2\\\\x80\\\\x99\\\\xe2\\\\x80\\\\x98\\\\\\\\(\\\\\\\\)]*?)(?:(?:=|<=>|r?like|sounds\\\\\\\\s+like|regexp)([\\\\\\\\s'\\\\"`\\\\xc2\\\\xb4\\\\xe2\\\\x80\\\\x99\\\\xe2\\\\x80\\\\x98\\\\\\\\(\\\\\\\\)]*?)\\\\\\\\2\\\\\\\\b|(?:!=|<=|>=|<>|<|>|\\\\\\\\^|is\\\\\\\\s+not ..." at ARGS:value. [file "/etc/httpd/modsecurity.d/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [line "77"] [id "950901"] [rev "2"] [msg "SQL Injection Attack: SQL Tautology Detected."] [data "Matched Data:  'a'='a found within ARGS:value: 1' or 'a'='a"] [severity "CRITICAL"] [ver "OWASP_CRS/2.2.9"] [maturity "9"] [accuracy "8"] [tag "OWASP_CRS/WEB_ATTACK/SQL_INJECTION"] [tag "WASCTC/WASC-19"] [tag "OWASP_TOP_10/A1"] [tag "OWASP_AppSensor/CIE1"] [tag "PCI/6.5.2"] [hostname "5A.9B.2C.1DE"] [uri "/"] [unique_id "YfvCE7Yy7OCFRLMWFtNyCwAAAAM"]
Action: Intercepted (phase 2)
Stopwatch: 1643889171139933 687 (- - -)
Stopwatch2: 1643889171139933 687; combined=292, p1=202, p2=86, p3=0, p4=0, p5=3, sr=115, sw=1, l=0, gc=0
Producer: ModSecurity for Apache/2.9.3 (http://www.modsecurity.org/); OWASP_CRS/2.2.9.
Server: Apache/2.4.52 ()
Engine-Mode: "ENABLED"

--eddafe7b-Z--
```

###/var/log/httpd/modsec_audit.logは監査ログと呼ぶようです。
####A～Zセクションの説明は以下になります。
#####Aセクション
監査ログのヘッダ情報です。発生時刻や接続元のIPアドレスを含んでいます。
#####Bセクション
リクエストヘッダです。
#####Cセクション
リクエストボディです。
#####Dセクション
中間的なレスポンスヘッダのようです。mod_securityによって変更される前のレスポンスヘッダのようですが、未実装とのことです。
#####Eセクション
中間的なレスポンスヘッダのようです。mod_securityによって変更される前のレスポンスヘッダのようですが、未実装とのことです。
#####Fセクション
最終的なレスポンスヘッダです。
#####Gセクション
最終的なレスポンスボディです。未実装です。
#####Hセクション
監査の要約情報になります。idはルールのID、msgはルール名、severityは重要度になります。
#####Iセクション
リクエストボディでCセクションとほぼほぼ同じようです。
#####Jセクション
マルチパート/フォームデータで送信するアップロードファイルに関する情報です。
#####Kセクション
監査でパターンマッチングしたルール情報です。
#####Zセクション
ひとつのトランザクションに関する監査ログの終了を示します。

#おわりに
mod_securityを理解するうえで、重要かなと思われるHセクションの監査ログについては、別の記事で書いていこうと思います。では、また。