Apache HTTPサーバーログを分析し、Webスキャン活動、ディレクトリ列挙、パストラバーサル試行を検出することに焦点を当てたBlue Teamラボ。
隔離されたラボ環境でApache Webサーバーをインストールして公開し、業界標準ツールを使用して自動Webスキャンをシミュレートし、Blue Teamの視点から生成されたログを分析し、攻撃パターン、ツールシグネチャ、悪意のある偵察活動の兆候を特定します。
| コンポーネント | 詳細 |
|---|---|
| 攻撃者VM | Kali Linux |
| ターゲットVM | Debian 13 |
| ネットワーク | NAT Network (VirtualBox) |
| 攻撃者IP | 10.0.2.5 |
| ターゲットIP | 10.0.2.15 |
| Webサーバー | Apache 2.4.67 |
| ログソース | /var/log/apache2/access.log, /var/log/apache2/error.log |
| HTTPポート | 80 |
ターゲットマシン上でApache HTTPサーバーがアクティブで実行中であることを確認しました。```bash sudo systemctl status apache2 --no-pager
結果: `active (running)` since Wed 2026-05-06 21:09:17. Apache 2.4.67 (Debian), Main PID 3164, 55 tasks active.
---
### 2. ターゲットIPの特定
DebianターゲットマシンのIPアドレスを特定しました。```bash
ip a
ターゲットIP: 10.0.2.15/24 — interface enp0s3
Kali攻撃機とDebianターゲット間のネットワーク接続を確認しました。```bash ping -c 4 10.0.2.15
**Result:** 4 packets transmitted, 4 received, 0% packet loss. RTT min/avg/max: 0.495/1.288/2.139ms.
---
### 4. Apache ブラウザテスト
KaliブラウザからApacheサーバにアクセスし、HTTPサービスの可用性を確認しました。```
http://10.0.2.15
結果: Apache2 Debian デフォルトページが正常に読み込まれました — Webサーバーが到達可能でHTTPリクエストに応答していることを確認しました。
ターゲットサーバー上にテスト用のディレクトリとページを作成し、現実的なWebアプリケーション構造をシミュレートしました。```bash sudo mkdir -p /var/www/html/admin sudo mkdir -p /var/www/html/backup sudo mkdir -p /var/www/html/login echo "
ディレクトリ作成: `/admin`、`/backup`、`/login`
---
### 6. Nikto スキャン
指定されたWebサーバーに対してNiktoを実行し、自動化された脆弱性スキャンをシミュレートしました。```bash
nikto -h http://10.0.2.15
Nikto v2.5.0 — 開始時刻: 2026-05-06 20:16:56 — 終了時刻: 20:17:13 (17秒)
Niktoによる発見結果:
X-Frame-Options — クリックジャッキング保護なしX-Content-Type-Options — MIMEスニッフィング保護なし/admin/, /backup/, /login//admin/index.html — 管理ログインページにアクセス可能Dirbを実行して、対象Webサーバーに対してディレクトリブルートフォースを実施しました。```bash dirb http://10.0.2.15
**DIRB v2.22 — 開始: Wed May 6 20:19:50 2026 — 終了: 20:19:59 2026(9秒)**
使用したワードリスト: `/usr/share/dirb/wordlists/common.txt` — 4612 単語テスト済み
見つかったディレクトリとファイル:
| URL | コード | サイズ |
| --------------------------------- | ---- | ----- |
| http://10.0.2.15/index.html | 200 | 10703 |
| http://10.0.2.15/server-status | 403 | 314 |
| http://10.0.2.15/admin/ | 200 | — |
| http://10.0.2.15/admin/index.html | 200 | 21 |
| http://10.0.2.15/backup/ | 200 | — |
| http://10.0.2.15/login/ | 200 | — |
| http://10.0.2.15/login/index.html | 200 | 20 |
**警告:** `/backup/` のディレクトリリストが有効です — インデックスファイルが存在しないため、ディレクトリ内容は直接参照可能です。
**合計ダウンロード:** 13836 バイト — **検出:** 4 リソース
---
### 8. アクセスログ解析
攻撃パターンを特定するために、生のアクセスログエントリを調査しました。```bash
sudo cat /var/log/apache2/access.log
Niktoスキャンフェーズからのサンプルエントリ(21:18:32):``` 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "GET /10.0.2.15.tar.bz2 HTTP/1.1" 404 527 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "GET /10_0_2_15.gz HTTP/1.1" 404 527 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "GET /10.0.2.15.sql HTTP/1.1" 404 527 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "GET /10.0.2.15.zip HTTP/1.1" 404 527
Dirbスキャンフェーズのサンプルエントリ (21:21:34):```
10.0.2.5 - - [06/May/2026:21:21:34 -0300] "GET /login/xsql HTTP/1.1" 404 472
10.0.2.5 - - [06/May/2026:21:21:34 -0300] "GET /login/xxx HTTP/1.1" 404 472
10.0.2.5 - - [06/May/2026:21:21:34 -0300] "GET /login/zimbra HTTP/1.1" 404 472
10.0.2.5 - - [06/May/2026:21:21:34 -0300] "GET /login/zoom HTTP/1.1" 404 472
観測されたパターン: 同じ秒間に何百もの連続したリクエストが存在しないパスを標的としており、自動スキャン動作と一致しています。
攻撃元のIPからのすべてのアクセスログエントリをフィルタリングしました。```bash sudo grep "10.0.2.5" /var/log/apache2/access.log | head -30
観察された追加のパターン:
- NiktoはサーバーIPをファイル名として使用してバックアップファイルにアクセスしようとしました(例:`10.0.2.15.tar.bz2`、`10.0.2.15.sql`、`10.0.2.15.zip`)
- Dirbは発見された各ディレクトリを対象に、アルファベット順のワードリストを繰り返し処理しました
- 両方のツールはマシンスピードでリクエストを生成しました — 同一の送信元ポート範囲から毎秒複数のエントリ
---
### 10. HTTPステータスコード分布
攻撃対象範囲を定量化するために、HTTP応答コードごとにリクエストを集計しました。```bash
sudo grep " 200 " /var/log/apache2/access.log | wc -l
sudo grep " 403 " /var/log/apache2/access.log | wc -l
sudo grep " 404 " /var/log/apache2/access.log | wc -l
| HTTPコード | 意味 | 数 |
|---|---|---|
| 200 | OK — リソースが見つかり提供されました | 177 |
| 403 | 禁止 — リソースは存在するがアクセス拒否 | 26 |
| 404 | 未検出 — リソースが存在しません | 21740 |
合計404エラー: 21,740 — 大多数のリクエストは存在しないパスを対象としており、これは自動化されたディレクトリブルートフォースの特徴です。
攻撃者からのすべてのアクセスログエントリをカウントしました。```bash sudo grep "10.0.2.5" /var/log/apache2/access.log | wc -l
**10.0.2.5 からの総リクエスト数: 21,962**
---
### 12. ツール署名の識別
アクセスログ内のスキャナ固有の署名を検索しました。
#### Nikto の署名```bash
sudo grep "nikto" /var/log/apache2/access.log | head -5
結果:``` 10.0.2.5 - - [06/May/2026:21:18:32 -0300] "PUT /nikto-test-pk9VPSjF.html HTTP/1.1" 405 590 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
NiktoはPUTリクエストを用いて、テストファイル(`nikto-test-pk9VPSjF.html`)を作成し、サーバーへの書き込み権限を確認しました。
#### Dirb シグネチャ```bash
sudo grep "DirBuster\|dirb" /var/log/apache2/access.log | head -5
結果:``` 10.0.2.5 - - [06/May/2026:21:21:26 -0300] "GET /dirb HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:26 -0300] "GET /dirbmark HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:29 -0300] "GET /admin/dirb HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:29 -0300] "GET /admin/dirbmark HTTP/1.1" 404 472 10.0.2.5 - - [06/May/2026:21:21:32 -0300] "GET /login/dirb HTTP/1.1" 404 472
Dirb自体の名前が使用するワードリストに含まれており、ログに明確な痕跡を残します。
---
### 13. エラーログ分析
スキャンによって引き起こされたサーバー側のセキュリティイベントについて、Apacheエラーログを調査しました。```bash
sudo cat /var/log/apache2/error.log
重大なイベントが見つかりました:
Nikto は、ディレクトリ境界を横断して機密システムファイルにアクセスしようとしました。``` [client 10.0.2.5] AH10244: invalid URI path (/../../../../../../../../../../../../etc/shadow) [client 10.0.2.5] AH10244: invalid URI path (/../../../../../../../../../../etc/passwd) [client 10.0.2.5] AH10244: invalid URI path (/%2E%2E/%2E%2E/%2E%2E/%2E%2E/%2E%2E/windows/win.ini) [client 10.0.2.5] AH10244: invalid URI path (/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd) [client 10.0.2.5] AH10244: invalid URI path (/../../../../../../../../../boot.ini) [client 10.0.2.5] AH10244: invalid URI path (/../../../../winnt/repair/sam._)
Targets included: `/etc/passwd`, `/etc/shadow`, `boot.ini`, `win.ini`, Windows SAM database — all classic path traversal targets.
#### 無効なHTTPメソッド
Niktoは、非標準のHTTPメソッドをテストして設定ミスを特定しました:```
[client 10.0.2.5] AH00135: Invalid method in request DIWHWPJH / HTTP/1.1
[client 10.0.2.5] AH00135: Invalid method in request DEBUG / HTTP/1.1
[client 10.0.2.5] AH00135: Invalid method in request TRACK / HTTP/1.0
[client 10.0.2.5] AH00135: Invalid method in request SEARCH / HTTP/1.1
[client 10.0.2.5] AH00135: Invalid method in request INDEX / HTTP/1.1