毎度毎度、新たなスパムメールが届きます。よくもまあ、いろんな手口を考え出すものだと半ば呆れ、半ば感心する(^o^)ほどです。とりあえず、spam-samples というフォルダを作り、ここに放り込んで保存(^o^)してきましたが、ある程度たまってきたので、全く同じ文章で複数届いたものは1通だけを取り出してテキストファイル spam-samples.txt とし、これをテキストデータ処理言語 awk を用いて単語分解して、どんな単語が多く使われているのかを探ってみました。シンプルですが、一応は語彙分析という形です(^o^)/
サンプルとして使ったスパムメールは2023年4月から現在まで23件、「最後の警告」「@nifty」「auじぶん銀行」「ソニー銀行」「マイナポイント」「MasterCard」「Amazon」「三井住友カード」「三井住友銀行」「イオンクレジット」「三菱UFJ」「JAネットバンキング」「ヤマト運輸」などを詐称するものです。途中で不自然に改行されているものなどはちゃんとつながるように整形しましたが、語彙はまったくそのままです。以前は「行動を監視しているぞ、暴露されたくなければ金を払え」というタイプが多かったのですが、これは「ビットコインウォレット」を含むメールをサーバ側で拒否してからは届かなくなりました。
さて、spam-samples.txt を tango-utf.awk というスクリプトで単語に分解します。要するに、漢字、カタカナ、英数字を正規表現で表し、1文字以上連続するならそれを出力、それ以外のひらがなや記号等は出力しない、という動作です。標準出力をパイプでソートして、作業用のファイル temp1.txt に保存します。
$ awk -f tango-utf.awk spam-samples.txt | sort > temp1.txt
temp1.txt の一部を示すと、例えばこんなふうです。
〜
破壊
破棄
配信
配信停止
配信停止
配信停止
配信登録
配送
配送
配送情報
発行
発行
発行
〜
これを、やはり awk スクリプトで数えさせます。
$ awk -f count.awk temp1.txt > temp2.txt
その結果 temp2.txt は、次のようになります。
〜
破壊 1 回
破棄 1 回
配信 1 回
配信停止 3 回
配信登録 1 回
配送 2 回
配送情報 1 回
発行 3 回
〜
あとは、出現頻度(回数)の順にソートしてやります。
$ sort -n +1 -2 temp2.txt > spam-samples-kekka.txt
ちなみに、-n は numeric sort つまり数値としてソートするオプション、+1 -2 はどの列でソートするかを表します。その結果、例えば15回を超える出現頻度の高い単語は次のとおりでした。
〜
登録 16 回
本 16 回
com 17 回
1 18 回
2 18 回
9 18 回
Amazon 18 回
アカウント 18 回
合 18 回
問 18 回
確認 21 回
願 22 回
客様 22 回
000 24 回
https 26 回
カード 29 回
利用 30 回
メール 37 回
場合 38 回
このうち、Amazon は詐称されたものですから省略し、単なる数字や .com はあまり意味がないので無視することとします。問と合は同数ですのでおそらく「問い合わせ」という語であろうと考えると、スパムメール作成者の本音としては、
お客様のアカウントに登録されたカードの利用について、確認をお願いします。なお、この場合、本メールについての問い合わせはしないでください。https://〜
ということなのでしょう。いろいろなもっともらしい理由を付けて偽サイトにアクセスさせ、情報を入力させようとするが、本物への問い合わせはしてもらいたくない、要するにこれが最近のスパムメールの本質ということ。
このように、テキストファイルを単語分解し語彙分析することで、建前ではない無意識の本音を推測することができるというのが、自己流ながら平成初期の頃から私が使ってきた自由記述アンケートの分析手法(*1)で、かなり有効だったと感じています。
(*1): 上田太一郎『事例で学ぶテキストマイニング』を読む〜「電網郊外散歩道」2014年7月
基本的に開かない(Webメールでもプレビューしない)ようにしているので……。
それにしても、スパムに利用される企業名というのはだいたい決まっていますね。
できるだけ該当者が多くなるように、大手銀行が使われるのはわかるとして……。
東京電力を名乗るスパムも少なくありません。
北海道や中部以西の人だと、すぐにおかしいと気づくでしょうが、関東圏だとついうっかりがあるかもしれませんね。
awkを使いこなせば、いったんcsvなどにしてエクセルで操作しなければいけないデータも、テキストのままで処理できるのは憧れます。
憧れるばかりで身にはつきませんでしたが……。
>スパム分析とawk... への返信
コメントありがとうございます。勝手に送られてくる迷惑なメール、腹も立つのですが冷静に「研究」してみるのが理系の石頭の長所でもありますので、やってみました。
並べ替えやカウントは表計算でもできますが、平文のテキストファイルを単語に分解するのは正規表現を使った awk スクリプトの便利なところです。これで、utf-8 で単語分解・語彙分析できることがわかりましたので、機会があれば応用してみます、って、古希を過ぎた爺さんにそんな機会はあるのだろうか(^o^)/