3.ログの解析/収集と攻撃の痕跡
3.1. ログ解析のツール
3.1.1. ログ解析ツールの選定
ログ分析ツールは以下のように整理できる。
自作スクリプト | Syslog/Logwatch | R言語 | ELKStack | SIEM | |
---|---|---|---|---|---|
分類 | 自作 | OSS | OSS | OSS | 市販品 |
導入コスト | 低 | 低 | 低 | 低 | 高 |
導入稼動 | 高 | 低 | 高 | 高 | 中 |
運用コスト | 低 | 低 | 低 | 低 | 高 |
運用稼動 | 高 | 低 | 高 | 高 | 低~中 |
自動化の方法 | cron等 | プロセス常時起動 | cron,jenkins等 | Fluentd, Spark等 | 製品の機能 |
向いている分析 | ・特定のキーワード分析 ・単位当たりの合計値/平均値の出力 | ・特定キーワードを検出する | ・特定キーワードを検出する ・単位当たりの合計値/平均値の出力 より高度な統計解析 | ・特定キーワードを検出する ・単位当たりの合計値/平均値の出力 より高度な統計解析 | ・特定キーワードを検出する ・単位当たりの合計値/平均値の出力 より高度な統計解析 |
3.1.2. ログ解析ツールの使用方法
自作スクリプト
自作スクリプトではLinuxの場合はシェルスクリプトの作成とcron登録による定期実行により使用する。
R言語
R言語は統計解析に強みのある言語。
Rの実行環境の用意、パッケージのDL、RStudioのインストールによるWebGUI有効化等を行い環境を用意する。
そしてWebGUIのR Script実行/Cron登録により自動的に解析するようにする。
3.2. ログの収集
3.2.1. syslog/rsyslogによるログ収集
syslog/rsyslogの概要
syslogはログメッセージをIPネットワーク上で転送するための規格。
syslogの機能を実装したLinuxのソフトウェアはsyslogdというものがある。
syslogdには転送したメッセージの完全性の保証や細かいログローテーションができないという問題があったが、 rsyslogというソフトウェアはそれらの問題に克服したもので、syslogdの設定ファイルを使用できる特徴がある。
rsyslogの特徴は以下の通り
- メッセージ転送にTCPが使用可能
- メッセージの圧縮転送が可能
- 通信経路の暗号化が可能
- 各種データベースと連携可能
syslogサーバの設定
syslogサーバはログの転送先サーバとなるものである。
rsyslogのソフトウェアインストールの終了後、/etc/rsyslog.conf
が設定ファイルの本体となるため編集する。
設定例の一部は以下の通り。
module(load="imudp") # UDPで送信
input(type="imudp" port="514")
:
設定後はrsyslogサーバの再起動が必要。
syslogクライアントの設定
サーバ側と同様に/etc/rsyslog.conf
により設定を行う。
# /var/log/secureにあるログをsyslogサーバ(192.168.2.10)に転送させる例
authpriv.* /var/log/secure
authpriv.* @@192.168.2.10:514
設定後はrsyslogクライアントの再起動が必要。
なおサーバ再起動後にrsyslogが自動起動するようにするにはchkconfig rsyslog on
で設定、chkconfig --list rsyslog
で確認が可能。
3.2.2. Fluentdによるログ収集
Fluentdの概要
FluentdはOSSのログ収集管理ツール。
rsyslog 8.0系以前は以下の特徴がFluentd固有のものであった。
- MongoDB/MySQL/HaDoopなどのログ分析に使用されるDBに直接ログを書き込める
- ログがJSON形式
- Fluentdへのイベント入力、ログ出力はプラグインで実装
- Fluentd/プラグインはRubyで実装されており、Rubyによる自作プラグインが可能
3.3. 攻撃の痕跡とログ分析
3.3.1. Webサーバへの調査を伴う攻撃
SQLインジェクション
SQLインジェクションはSQLクエリの組み立てを不正に操作することで想定されていないデータを表示させる攻撃のこと。
以下がSQLインジェクションを試みた際のアクセスログ例。
52.67.4.138 - - [03/Jul/2025:10:30:00 +0900] "GET /item.php?search=%27 HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
52.67.4.138 - - [03/Jul/2025:10:30:03 +0900] "GET /item.php?search=%27--+ HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
52.67.4.138 - - [03/Jul/2025:10:30:07 +0900] "GET /item.php?search=%27+UNION+SELECT+null+--+ HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
52.67.4.138 - - [03/Jul/2025:10:30:11 +0900] "GET /item.php?search=%27+UNION+SELECT+null%2C+null+--+ HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
52.67.4.138 - - [03/Jul/2025:10:30:12 +0900] "GET /item.php?search=%27+UNION+SELECT+null%2C+null%2c+null+--+ HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
52.67.4.138 - - [03/Jul/2025:10:30:18 +0900] "GET /item.php?search=%27+UNION+SELECT+null%2C+null%2c+null+--+FROM+information_schema.tables+WHERE+table_type%3D%27BASE+TABLE%27 HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
上記のように複数回不正なSQLが挿入されリクエストを送られている場合、SQLインジェクションを試みている可能性が高い。
ブラインドSQLインジェクション
通常のSQLインジェクションでは、攻撃の結果がWebページに直接表示されることで情報を取得するが、ブラインドSQLインジェクションではそれができない。
代わりに、攻撃者は真偽値に基づいてデータベースの応答を推測を試みる。
つまり、ブラインドSQLインジェクションはクエリの結果が真か偽かによって、Webページの表示(エラーメッセージの有無、表示速度の変化など)が変わるのを利用し、一文字ずつ情報を推測していく手法といえる。
以下がブラインドSQLインジェクションを試みた際のアクセスログ例。
52.67.4.138 - - [03/Jul/2025:10:30:11 +0900] "GET /item.php?search=%27+AND+ASCII%28LOWER%28SUBSTRING%28%28SELECT+table_name+FROM+information_SCHEMA.tables+WHERE+table_type%3D%27BASE+TABLE%27+LIMIT+1+OFFSET+0%29%2c+2%2c+1%29%29%29+%3c+102 HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
52.67.4.138 - - [03/Jul/2025:10:30:12 +0900] "GET /item.php?search=%27+AND+ASCII%28LOWER%28SUBSTRING%28%28SELECT+table_name+FROM+information_SCHEMA.tables+WHERE+table_type%3D%27BASE+TABLE%27+LIMIT+1+OFFSET+0%29%2c+2%2c+1%29%29%29+%3c+110 HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
52.67.4.138 - - [03/Jul/2025:10:30:13 +0900] "GET /item.php?search=%27+AND+ASCII%28LOWER%28SUBSTRING%28%28SELECT+table_name+FROM+information_SCHEMA.tables+WHERE+table_type%3D%27BASE+TABLE%27+LIMIT+1+OFFSET+0%29%2c+2%2c+1%29%29%29+%3c+99 HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
52.67.4.138 - - [03/Jul/2025:10:30:14 +0900] "GET /item.php?search=%27+AND+ASCII%28LOWER%28SUBSTRING%28%28SELECT+table_name+FROM+information_SCHEMA.tables+WHERE+table_type%3D%27BASE+TABLE%27+LIMIT+1+OFFSET+0%29%2c+2%2c+1%29%29%29+%3c+98 HTTP/1.1" 200 1234 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
3.3.2. 侵入された痕跡
Webシェルの発見
WebシェルはURIのクエリにコマンドを入力し、結果としてコマンドの結果を返してしまうWebの仕組みのこと。 ウェブサイトのアップロード機能などを悪用して攻撃者はWebシェルをサイトに設置する。
access.logにファイルパスの一覧でソートし、あらかじめ用意した覚えのないディレクトリで.cgi
,.php
など動的解釈可能なファイルである場合Webシェルが設置されている可能性がある。
データベースの漏洩
同様にDLファイルのバイト数が異常に多いリクエストは事前にデータベースデータを何かしらの脆弱性をついてダンプさせておき、その後外部からブラウザでダウンロードして持ち出そうとした可能性がある。
3.3.3. User-Agentによる不審クライアント判別
以下は主要ブラウザのUser-Agentの例。
OS | ブラウザ | User-Agentヘッダ |
---|---|---|
Windows 10 | Microsoft Edge | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.2592.56 |
Windows 10 | Chrome | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 |
Mac OS | Safari | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15 |
独自HTTPクライアントのUser-Agent
User-Agentは特定のものを使用しなければならないという決まりはない。 そのため独自ツールやセキュリティツールでは独自の名前を出力する場合がある。
ツール | User-Agentヘッダ |
---|---|
Nmap | Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html) |
Nessus | Mozilla/5.0 (compatible; Nessus WAS; rv:X.X) Gecko/20100101 Firefox/X.X |
Acunetix | Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36 Acunetix |
BurpSuite | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36 BurpSuite/2.x |
クローラ/プログラムによるアクセスのUser-Agent
クローラやアプリケーションのライブラリの機能を使ったWebアクセスによるUser-Agentは正規の物に偽装しきれていない場合がある。また偽装していない場合はツール名などが表示される場合がある。