narita-lab’s blog

成田ラボ 〜テクノロジーと雑学の観察日記〜

AIと共同で“詐欺メールを潰すプログラム”を設計してみる Day4 本文解析編

前回のDay3では、Tkinterを使ってGUIを導入し、

  • メール一覧表示
  • 本文表示
  • IMAP接続維持

など、“ただの接続テスト”から一歩進んだところまで実装できた。

そして今回のDay4。

いよいよ、

“本文解析”

に手を出し始める。

今回やりたいのは、単純にメールを表示するだけではない。

本文の中から、

  • 【重要】
  • 本人確認
  • お支払いを完了してください
  • 利用制限
  • アカウント停止

など、詐欺メールでよく見る文言を検出し、

「どれくらい怪しいメールなのか」

をスコア化してみよう、という話だ。

つまり今回から、このツールは少しずつ、

“Yahooメールを読むだけの簡易メーラー”

から、

“迷惑メール解析ツール”

へ進化し始める。

さらに今回は、Day1からずっと問題視していた、

 
楽 天 カ ー ド
 

みたいな“フィルタ回避表現”にも対策を入れてみた。

スペースや全角文字を除去し、正規化してから解析することで、

 
楽 天 カ ー ド

楽天カード
 

として認識できるようにしている。

地味な処理だが、こういう部分が迷惑メール対策ではかなり重要になりそうだ。

 

本文解析を実装してみる

Day4で追加したのは、本文を取得した後に、その内容を解析する機能だ。

これまでは、選択したメールの本文を表示するだけだった。

つまり、

「読めるようになった」

という段階である。

今回はそこから一歩進めて、

「怪しい文言が含まれているか」

をチェックするようにした。

判定対象にしたのは、件名、送信者、本文。

この3つをまとめて解析し、危険そうな単語が含まれていたらスコアを加算する。

例えば、

 
【重要】
本人確認
お支払いを完了してください
利用制限
アカウント停止
異常ログイン
 

この辺りは、詐欺メールでかなりよく見る文言だ。

もちろん、本物のメールでも使われる可能性はある。

ただ、私の場合はYahooメールで決済系サービスを使っていない。

つまり、Yahooメール宛にこの手の支払い要求や本人確認メールが来た時点で、かなり怪しい。

なので今回は、自分の運用に合わせてかなり強めに判定している。

汎用ツールとしては危険かもしれないが、まずは自分用ツールとして育てる段階なので、これでいいと思っている。

 

文字列の正規化で“楽 天 カ ー ド”対策

今回かなり重要だと思ったのが、文字列の正規化だ。

詐欺メールは、ただ「楽天カード」と書いてくるとは限らない。

実際には、

 
楽 天 カ ー ド
 

のように、文字と文字の間にスペースを入れてくることがある。

おそらく、単純なキーワードフィルタを避けるためだと思う。

普通に、

 
楽天カード
 

という単語だけを探していると、この手の表記はすり抜けてしまう。

なので今回は、解析前に本文や件名を正規化するようにした。

具体的には、

  • 全角半角の統一
  • 大文字小文字の統一
  • 空白の除去
  • 記号類の軽い除去

この辺りを行う。

これにより、

 
楽 天 カ ー ド
Amazon
A m a z o n
 

のような表記も、ある程度まとめて判定できるようになる。

もちろん、これで全ての詐欺メールを検出できる訳ではない。

ただ、迷惑メール側が小手先の表記ゆれで逃げようとしているなら、こちらも正規化で潰せばいい。

地味だが、こういう処理こそ実用面ではかなり効いてくると思う。