
ログ解析で不審アクセスを検知するPython実装|攻撃の"足跡"を見つける
2026-09-21 ・ 実践
攻撃は必ずログに足跡を残します。ログイン失敗の連続、深夜の大量アクセス——これらを見つけるのが防御の要。この記事ではPythonで、アクセスログから不審なパターンを検知する簡易ツールを作ります。インシデント対応の「検知」を支える実装です。
何を見るのか
不審アクセスの典型は「短時間に同じIPからログイン失敗が多発」(総当たり)です。IP別に失敗回数を数え、しきい値を超えたら警告します。
準備
標準ライブラリのcollections・reだけ。
① ログをパースする
サーバーログを模したサンプルから、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)で複数ソースの時系列を揃えることも基本です。
次の一歩 🌸
検知後の流れはインシデント対応、総当たりを止めるレート制限、改ざん検知のファイル整合性へどうぞ。