手を振るまもるくんゆるふわサイバーセキュリティ
OKサインのまもるくん

ログ解析で不審アクセスを検知するPython実装|攻撃の"足跡"を見つける

2026-09-21実践

#ログ解析#監視#インシデント#Python#実践

攻撃は必ずログに足跡を残します。ログイン失敗の連続、深夜の大量アクセス——これらを見つけるのが防御の要。この記事ではPythonで、アクセスログから不審なパターンを検知する簡易ツールを作ります。インシデント対応の「検知」を支える実装です。

何を見るのか

不審アクセスの典型は「短時間に同じIPからログイン失敗が多発」(総当たり)です。IP別に失敗回数を数え、しきい値を超えたら警告します。

準備

標準ライブラリのcollectionsreだけ。

① ログをパースする

サーバーログを模したサンプルから、IPと結果を取り出します。

import re
from collections import Counter, defaultdict

sample_log = """
2026-09-21 10:00:01 login user=alice ip=203.0.113.5 result=success
2026-09-21 10:00:02 login user=bob ip=198.51.100.9 result=fail
2026-09-21 10:00:03 login user=bob ip=198.51.100.9 result=fail
2026-09-21 10:00:04 login user=bob ip=198.51.100.9 result=fail
2026-09-21 10:00:05 login user=root ip=198.51.100.9 result=fail
2026-09-21 10:00:06 login user=admin ip=198.51.100.9 result=fail
2026-09-21 10:00:07 login user=alice ip=203.0.113.5 result=success
""".strip()

pattern = re.compile(r"ip=(\S+)\s+result=(\w+)")
fails = Counter()
for line in sample_log.splitlines():
    m = pattern.search(line)
    if m:
        ip, result = m.groups()
        if result == "fail":
            fails[ip] += 1

② しきい値でアラート

THRESHOLD = 3   # 失敗3回以上で警告

print("=== 不審IP(ログイン失敗が多い) ===")
for ip, count in fails.most_common():
    flag = "⚠️ 要注意" if count >= THRESHOLD else ""
    print(f"{ip:<16} 失敗 {count} 回 {flag}")

出力:

=== 不審IP(ログイン失敗が多い) ===
198.51.100.9     失敗 5 回 ⚠️ 要注意

198.51.100.9 が5回失敗=総当たりの疑い。しきい値超えを自動で洗い出せました。次はレート制限やIPブロック、インシデント対応へ繋げます。

③ 時間帯の異常も見る

失敗が特定の短時間に集中しているかも重要な指標です。

from collections import defaultdict
by_minute = defaultdict(int)
for line in sample_log.splitlines():
    if "result=fail" in line:
        minute = line[:16]        # "2026-09-21 10:00"
        by_minute[minute] += 1
print("分ごとの失敗数:", dict(by_minute))
⚠️

検知はゴールではなくスタート

検知はインシデント対応の入口です。アラートが出たら「本当に攻撃か(正規ユーザーの打ち間違いか)」を確認し、封じ込め・記録・報告へ。誤検知(false positive)を減らすチューニングも重要で、しきい値は運用しながら調整します。本番ではSIEMツールで大規模に自動化します。

まとめ

  • 攻撃はログに足跡を残す。IP別の失敗回数集計が基本
  • しきい値を超えたIPを不審として自動でアラート
  • 時間帯の集中も総当たりの手がかり
  • 検知は入口。封じ込め・報告・しきい値調整へ繋げる

もう少し詳しく(背景と理論)

ログ分析はインシデントの検知と調査の中核です。個々の機器のログを一箇所に集約・相関分析する仕組みが SIEM(Security Information and Event Management) で、複数ソースを突き合わせて攻撃の兆候を浮かび上がらせます1。攻撃者の手口を体系化した MITRE ATT&CK フレームワークにログ上の挙動を対応づけると、「どの段階の攻撃か」を判断しやすくなります2。実務で最大の課題は誤検知(false positive)とのバランス——閾値を厳しくすれば見逃し、緩めればアラート疲れを招きます3。改ざん検知のため、ログ自体を**追記専用(append-only)**にして守り、時刻同期(NTP)で複数ソースの時系列を揃えることも基本です。

次の一歩 🌸

検知後の流れはインシデント対応、総当たりを止めるレート制限、改ざん検知のファイル整合性へどうぞ。

Footnotes

  1. SIEM は分散したログを集約・正規化・相関分析し、単体ログでは見えない攻撃連鎖を検知する。アラートと調査(フォレンジック)の基盤。

  2. MITRE ATT&CK は攻撃の戦術・技術を体系化したナレッジベース。検知ルールを ATT&CK にマッピングすると網羅性と優先度を評価できる。

  3. 検知は感度と誤検知のトレードオフ。過剰なアラートは「アラート疲れ」で重要事象を埋もれさせる。チューニングと優先度付けが継続的に要る。

🔥 この分野の最新トレンドをチェック →

あわせて読みたい