システム侵入を調べる!企業向けデジタルフォレンジックの基本

「サーバーに不正アクセスがあったかもしれない」「機密データが漏洩した可能性がある」そんな時、どこから調査を始めればいいでしょうか?デジタルフォレンジックは、デジタル証拠を科学的に分析してインシデントの真相を解明する技術です。

この記事では、システム管理者やセキュリティ担当者が知っておくべきデジタルフォレンジックの基本を実践的に解説します。

目次

デジタルフォレンジックとは?企業での必要性

デジタルフォレンジック(Digital Forensics)は、コンピューターやネットワークから証拠を収集・分析・保全する技術と手法です。

基本的な定義と目的

デジタルフォレンジックの目的:

  • インシデントの原因究明
    ・不正アクセスの経路特定
    ・攻撃者の行動分析
  • 証拠の収集と保全
    ・法的に有効な証拠の確保
    ・改ざんされていない証跡の保存
  • 被害範囲の特定
    ・どのデータが影響を受けたか
    ・攻撃の継続期間
  • 再発防止策の立案
    ・脆弱性の特定
    ・セキュリティ対策の改善

企業での必要性

法的要求事項:

  • 個人情報保護法での報告義務
  • 上場企業の内部統制要件
  • 業界規制(金融、医療等)への対応
  • サイバー保険の適用条件

ビジネス上のリスク:

  • データ漏洩による信頼失墜
  • 業務停止による機会損失
  • 法的責任と損害賠償
  • 競合他社への情報流出

インシデント発生時の初動対応

インシデント発覚時の最初の30分が調査の成否を左右します。適切な初動対応手順を見ていきましょう。

緊急対応の5ステップ

Step 1: 現状把握と被害拡大防止(5分以内)

# 緊急状況確認スクリプト
#!/bin/bash
echo "=== インシデント初動確認 $(date) ==="

# 1. システム稼働状況
echo "System Status:"
uptime
df -h

# 2. アクティブな接続確認
echo "Active Connections:"
netstat -an | grep ESTABLISHED | wc -l
ss -tuln | grep :22  # SSH接続確認

# 3. 不審なプロセス確認
echo "Suspicious Processes:"
ps aux | grep -E "(nc|ncat|netcat)" | grep -v grep
ps aux | awk '$3 > 80.0 || $4 > 80.0' # 高CPU/メモリ使用率

# 4. 最近のログイン確認
echo "Recent Logins:"
last | head -10
who

Step 2: 証拠保全の準備(10分以内)

# 証拠保全用ディレクトリ作成
INCIDENT_ID="INC_$(date +%Y%m%d_%H%M%S)"
EVIDENCE_DIR="/forensics/evidence/$INCIDENT_ID"
mkdir -p $EVIDENCE_DIR

# タイムスタンプ記録
echo "Incident ID: $INCIDENT_ID" > $EVIDENCE_DIR/timeline.txt
echo "Start Time: $(date)" >> $EVIDENCE_DIR/timeline.txt
echo "Investigator: $(whoami)" >> $EVIDENCE_DIR/timeline.txt

# システム情報の記録
uname -a > $EVIDENCE_DIR/system_info.txt
cat /proc/version >> $EVIDENCE_DIR/system_info.txt
ifconfig > $EVIDENCE_DIR/network_config.txt

Step 3: 影響範囲の特定(15分以内)

# 影響範囲調査スクリプト
#!/bin/bash

# 最近変更されたファイル(24時間以内)
echo "Recently Modified Files:"
find /var/log -type f -mtime -1 -ls > $EVIDENCE_DIR/recent_files.txt
find /etc -type f -mtime -1 -ls >> $EVIDENCE_DIR/recent_files.txt
find /home -type f -mtime -1 -ls >> $EVIDENCE_DIR/recent_files.txt

# アクセスログの異常確認
echo "Analyzing Access Logs:"
tail -1000 /var/log/apache2/access.log | grep -E "(40[0-9]|50[0-9])" > $EVIDENCE_DIR/error_requests.txt
tail -1000 /var/log/auth.log | grep -i "failed\|invalid" > $EVIDENCE_DIR/failed_auth.txt

# ネットワーク接続の記録
netstat -an > $EVIDENCE_DIR/network_connections.txt
arp -a > $EVIDENCE_DIR/arp_table.txt

通報・連絡体制

社内連絡先(優先順位順):

  • ① インシデント対応責任者
  • ② 情報システム部門長
  • ③ 法務部門(重大事案の場合)
  • ④ 経営陣(機密情報漏洩の場合)

外部連絡先:

  • JPCERT/CC(緊急対応支援)
  • 所轄警察署(刑事事件の疑い)
  • フォレンジック専門会社
  • サイバー保険会社

ログ分析と証跡保全の実践

収集した証拠を適切に分析し、法的に有効な形で保全する方法を解説します。

主要ログファイルの分析

# ログ分析スクリプト
#!/bin/bash

EVIDENCE_DIR="/forensics/evidence/$INCIDENT_ID"

# 1. 認証ログの分析
echo "=== Authentication Analysis ==="
# 失敗したログイン試行
grep "authentication failure" /var/log/auth.log | tail -50 > $EVIDENCE_DIR/auth_failures.txt

# 成功した不審なログイン
grep "session opened" /var/log/auth.log | grep -v "$(whoami)" > $EVIDENCE_DIR/suspicious_logins.txt

# 2. Webアクセスログの分析
echo "=== Web Access Analysis ==="
# 異常なアクセスパターン
awk '$9 >= 400 {print $0}' /var/log/apache2/access.log > $EVIDENCE_DIR/web_errors.txt

# SQLインジェクション試行の検出
grep -i -E "(union|select|insert|drop|script)" /var/log/apache2/access.log > $EVIDENCE_DIR/sql_injection_attempts.txt

# 3. システムログの分析
echo "=== System Log Analysis ==="
# システムエラーの抽出
grep -i "error\|fail\|critical" /var/log/syslog | tail -100 > $EVIDENCE_DIR/system_errors.txt

# 権限昇格の試行
grep -i "sudo\|su " /var/log/auth.log > $EVIDENCE_DIR/privilege_escalation.txt

デジタル証拠の保全手順

# 証拠保全スクリプト
#!/bin/bash

# ハッシュ値計算による完全性確保
create_evidence_package() {
    local source_file=$1
    local evidence_name=$2
    
    # ファイルのコピー
    cp "$source_file" "$EVIDENCE_DIR/${evidence_name}"
    
    # ハッシュ値計算(SHA-256)
    sha256sum "$source_file" > "$EVIDENCE_DIR/${evidence_name}.sha256"
    
    # メタデータ記録
    stat "$source_file" > "$EVIDENCE_DIR/${evidence_name}.metadata"
    
    echo "Evidence preserved: $evidence_name"
}

# ログファイルの保全
create_evidence_package "/var/log/auth.log" "auth.log"
create_evidence_package "/var/log/syslog" "syslog"
create_evidence_package "/var/log/apache2/access.log" "apache_access.log"

# メモリダンプの取得(重要)
if command -v memdump &> /dev/null; then
    memdump > "$EVIDENCE_DIR/memory_dump.raw"
    sha256sum "$EVIDENCE_DIR/memory_dump.raw" > "$EVIDENCE_DIR/memory_dump.raw.sha256"
fi

# 証拠パッケージの作成
tar -czf "$EVIDENCE_DIR.tar.gz" "$EVIDENCE_DIR/"
sha256sum "$EVIDENCE_DIR.tar.gz" > "$EVIDENCE_DIR.tar.gz.sha256"

タイムライン分析

# timeline_analysis.py - イベントタイムライン作成
import re
import datetime
from collections import defaultdict

def parse_auth_log(file_path):
    """認証ログのパース"""
    events = []
    with open(file_path, 'r') as f:
        for line in f:
            # パターン: Oct 19 14:30:25 hostname sshd[1234]: Failed password
            match = re.search(r'(\w+ \d+ \d+:\d+:\d+).*?(Failed|Accepted)', line)
            if match:
                timestamp = match.group(1)
                event_type = match.group(2)
                events.append({
                    'timestamp': timestamp,
                    'type': event_type,
                    'detail': line.strip()
                })
    return events

def parse_apache_log(file_path):
    """Apacheアクセスログのパース"""
    events = []
    with open(file_path, 'r') as f:
        for line in f:
            # パターン: IP - - [19/Oct/2024:14:30:25 +0900] "GET /path HTTP/1.1" 200 1234
            match = re.search(r'\[(.*?)\].*?"(.*?)".*?(\d{3})', line)
            if match:
                timestamp = match.group(1)
                request = match.group(2)
                status = match.group(3)
                events.append({
                    'timestamp': timestamp,
                    'type': 'HTTP_REQUEST',
                    'detail': f"{request} -> {status}"
                })
    return events

def create_timeline(auth_events, web_events):
    """統合タイムライン作成"""
    all_events = auth_events + web_events
    
    # タイムスタンプでソート
    all_events.sort(key=lambda x: x['timestamp'])
    
    # タイムライン出力
    with open('incident_timeline.txt', 'w') as f:
        f.write("=== INCIDENT TIMELINE ===\n\n")
        for event in all_events:
            f.write(f"{event['timestamp']} | {event['type']} | {event['detail']}\n")

# 実行例
auth_events = parse_auth_log('/var/log/auth.log')
web_events = parse_apache_log('/var/log/apache2/access.log')
create_timeline(auth_events, web_events)

調査ツールと技術の活用

効率的な調査のための実用的なツールを紹介します。

オープンソースツール

# 必須ツールのインストール
#!/bin/bash

# The Sleuth Kit (ファイルシステム分析)
apt-get install sleuthkit

# Volatility (メモリ分析)
pip install volatility3

# Wireshark (ネットワーク分析)
apt-get install wireshark

# Autopsy (統合分析プラットフォーム)
# https://www.autopsy.com/ からダウンロード

# LogParser (ログ分析)
apt-get install gawk

ネットワークトラフィック分析

# ネットワークキャプチャと分析
#!/bin/bash

# パケットキャプチャ開始
tcpdump -i eth0 -w network_capture.pcap &
TCPDUMP_PID=$!

# 5分間キャプチャ
sleep 300

# キャプチャ停止
kill $TCPDUMP_PID

# 基本分析
echo "=== Network Analysis ==="
# 接続先IPの集計
tcpdump -r network_capture.pcap -n | awk '{print $3}' | cut -d'.' -f1-4 | sort | uniq -c | sort -nr

# 異常な通信の検出
# 高頻度通信の検出
tcpdump -r network_capture.pcap -n | awk '{print $3}' | sort | uniq -c | awk '$1 > 1000 {print}'

# DNS要求の分析
tcpdump -r network_capture.pcap port 53 -n

ファイルシステム分析

# ファイルシステム調査
#!/bin/bash

# 削除されたファイルの復元候補
fls -r /dev/sda1 | grep "(deleted)"

# ファイルアクセス時刻の分析
find /home -type f -printf "%T@ %p\n" | sort -n | tail -50

# 隠しファイル・ディレクトリの検索
find / -name ".*" -type f 2>/dev/null | grep -v "/proc\|/sys"

# 不審な実行可能ファイル
find /tmp /var/tmp -type f -executable

# 最近作成されたファイル(24時間以内)
find / -newerct "1 day ago" -type f 2>/dev/null | head -100

法的証拠としての取り扱い注意点

収集した証拠を法的手続きで使用する際の重要な注意点をまとめました。

証拠能力の確保

Chain of Custody(証拠管理の連鎖):

  • 証拠の収集者:誰が、いつ、どのように収集したか
  • 保管場所:物理的・論理的な保管方法
  • アクセス記録:誰がいつアクセスしたか
  • 完全性証明:ハッシュ値による改ざん検証

文書化の要件:

  • 調査開始時刻と調査者
  • 使用したツールとバージョン
  • 調査手順の詳細記録
  • 証拠のハッシュ値
  • 写真・スクリーンショット

プライバシーと法的制約

調査範囲の制限:

  • 業務用システムに限定
  • 個人の私的データは除外
  • 必要最小限の範囲
  • 調査目的の明確化

報告書作成のポイント:

  • 客観的事実のみ記載
  • 推測と事実の明確な区別
  • 専門用語の説明
  • 調査の限界も明記

セキュリティ調査をさらに深める関連記事

デジタルフォレンジックの基本を理解したら、AI技術やセキュリティツールも活用してより高度な分析能力を身につけましょう:

AI開発支援・分析ツール

データ分析・可視化ツール

まとめ:証拠に基づく科学的調査

デジタルフォレンジックは科学的手法に基づく証拠収集と分析が基本です。適切な手順で証拠を保全し、客観的な分析を行うことで、インシデントの真相解明と再発防止につながります。

今日から始められるアクション:

  • インシデント対応手順書の作成
  • 証拠保全用ツールの準備
  • ログ収集・分析スクリプトの整備
  • Chain of Custody文書テンプレート作成

セキュリティインシデントは「起きるかもしれない」ではなく「いつか必ず起きる」ものです。事前の準備により、適切な対応と迅速な復旧を実現しましょう。

デジタルフォレンジック よくある質問

小規模企業でもフォレンジック調査は必要ですか?

規模に関係なく必要です。むしろ小規模企業ほど一度のインシデントが致命的になりがちです。高価な専門ツールは不要で、基本的なログ分析とオープンソースツールから始められます。重要なのは手順の確立と証拠保全の意識です。

従業員のプライバシーとの兼ね合いはどうすればいいですか?

業務用システムに限定し、就業規則で調査の可能性を明記することが重要です。個人データと業務データを明確に区別し、調査目的と範囲を事前に定義してください。必要に応じて法務部門や労働組合との事前協議も検討しましょう。

外部の専門会社に依頼する判断基準は?

以下の場合は専門会社への依頼を検討してください:①機密情報の大量漏洩、②法的手続きが想定される重大事案、③高度な技術による攻撃、④社内リソースで対応困難な規模。ただし、基本的な初動対応は社内でできるよう準備しておくことが重要です。

調査結果を警察に提出する際の注意点は?

Chain of Custodyの完全性確保が最重要です。証拠収集から提出まで全ての手順を文書化し、ハッシュ値で完全性を証明してください。また、捜査に影響する可能性があるため、警察への相談前に証拠を社外に公開しないよう注意が必要です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次