3.ログの解析/収集と攻撃の痕跡

3.ログの解析/収集と攻撃の痕跡

3.1. ログ解析のツール

3.1.1. ログ解析ツールの選定

ログ分析ツールは以下のように整理できる。

自作スクリプトSyslog/LogwatchR言語ELKStackSIEM
分類自作OSSOSSOSS市販品
導入コスト
導入稼動
運用コスト
運用稼動低~中
自動化の方法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 10Microsoft EdgeMozilla/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 10ChromeMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
Mac OSSafariMozilla/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ヘッダ
NmapMozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)
NessusMozilla/5.0 (compatible; Nessus WAS; rv:X.X) Gecko/20100101 Firefox/X.X
AcunetixMozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36 Acunetix
BurpSuiteMozilla/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は正規の物に偽装しきれていない場合がある。また偽装していない場合はツール名などが表示される場合がある。