続・玩式草子 ―戯れせんとや生まれけん―

第39回 お久しぶりのSpamAssasin

この記事を読むのに必要な時間:およそ 5 分

SpamAssasinの働き

SpamAssasin(SA)は,受け取ったメールをさまざまな観点からチェックして「スパムらしさ」を数値化し,その値が一定値(デフォルトは5.0)を越えたメールをスパムと判定します。

SAが評価した「スパムらしさ」は,メールのヘッダ部のX-Spam-Level:X-Spam-Flag:行に記録され,どのような点でそのメールがスパムと見做みなされたかが判断できます。たとえば,手元に届いたとあるスパムでは,このような行がヘッダ部に追加されていました。

X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pl74_1031.linet.jp
X-Spam-Flag: YES
X-Spam-Level: **************
X-Spam-Status: Yes, score=14.8 required=5.0 tests=FROM_SUSPICIOUS_NTLD,
    FROM_SUSPICIOUS_NTLD_FP,HTML_FONT_LOW_CONTRAST,HTML_MESSAGE,
    MIME_HTML_MOSTLY,MPART_ALT_DIFF,PDS_OTHER_BAD_TLD,RCVD_IN_SBL_CSS,
    RCVD_IN_VALIDITY_RPBL,SPF_HELO_NONE,SPF_NONE,T_KAM_HTML_FONT_INVALID,
    T_SCC_BODY_TEXT_LINE,URIBL_ABUSE_SURBL,URIBL_BLACK,XM_RECPTID
    autolearn=spam autolearn_force=no version=3.4.6

X-Spam-Status行に記録されているのが,SAがこのメールを「スパムらしい」と判断した観点で,"tests=..."以下に記録されているのがチェックに引っかかった項目になります。

スパムと判定されたメールには,より詳細なチェックレポートも付加されます。

Content analysis details:   (14.8 points, 5.0 required)

 pts rule name              description
---- ---------------------- --------------------------------------------------
 3.6 RCVD_IN_SBL_CSS        RBL: Received via a relay in Spamhaus SBL-CSS
                            [5.196.119.97 listed in zen.spamhaus.org]
 1.9 URIBL_ABUSE_SURBL      Contains an URL listed in the ABUSE SURBL
                            blocklist
                            [URIs: awesomewebsites.click]
 1.7 URIBL_BLACK            Contains an URL listed in the URIBL blacklist
                            [URIs: awesomewebsites.click]
 1.3 RCVD_IN_VALIDITY_RPBL  RBL: Relay in Validity RPBL,
                            https://senderscore.org/blocklistlookup/
                            [5.196.119.97 listed in bl.score.senderscore.com]
 ...
 2.0 PDS_OTHER_BAD_TLD      Untrustworthy TLDs
                            [URI: awesomewebsites.click (click)]
 ...
 3.0 XM_RECPTID             Has spammy message header

この表では,左から順に,pts欄が「スパムらしさ」の評価値,rule name欄がチェックした項目,description欄がその項目の説明,となっています。

ざっと見,最も評価値が高いのが3.6ptsのRCVD_IN_SBL_CSSで,zen.spamhaus.orgがチェックしているスパムによく使われるドメインを経由してきたことを示します。

1.9ptsのURIBL_ABUSE_SURBLは,メールの本文中にあるURLがABUSE SURBLが提供するURLブラックリストに載っていることを示します。

少し飛ばして,2.0ptsのPDS_OTHER_BAD_TLDは,メール本文中にある"awesomewebsites.click"というURLのTLD(Top Level Domain)である".click"が「信用できないTLD」であることを示します。

ちなみに,spamhaus.orgによると,「信用できないTLD」のトップ3は,2021年4月20日現在,1位がサーフィン系の情報を扱う".surf",2位が中国の".cn",3位がガボン共和国の".ga" だそうです。

最後の3.0ptsが与えられた"M_RECPTIDは,説明では「スパムっぽいヘッダがある(Has spammy message header⁠⁠」とされており,具体的にはスパムによく使われるメーラー(MUA)が生成するX-Mailer-ReceptID:などのヘッダをチェックしているようです。

SAでは,これら「スパムらしさ」「ルールセット」でチェックしています。⁠ルールセット」は/var/lib/spamassasin/以下に収められた"*.cf"ファイルに記述され,手元のバージョンでは60種類ほど用意されていました。

$ ls /var/lib/spamassassin/3.004006/updates_spamassassin_org
10_default_prefs.cf             20_uri_tests.cf           60_awl.cf
10_hasbase.cf                   20_vbounce.cf             60_bayes_stopwords.cf
...
20_porn.cf                      50_scores.cf              user_prefs.template
20_ratware.cf                   60_adsp_override_dkim.cf

先に見たRCVD_IN_SBL_CSSという項目は"20_dnsbl_tests.cf"というルールに記述されています。

$ cat -n 20_dnsbl_test.cf
  ...
  129  # CSS is the Spamhaus CSS Component of the SBL List: https://www.spamhaus.org/css/
  130  header RCVD_IN_SBL_CSS          eval:check_rbl_sub('zen', '127.0.0.3')
  131  describe RCVD_IN_SBL_CSS        Received via a relay in Spamhaus SBL-CSS
  132  tflags RCVD_IN_SBL_CSS          net
  133  reuse  RCVD_IN_SBL_CSS
  ...

このルールでは,メールが通過してきたドメイン(IPアドレス)が,SpamHausが提供する「スパムに利用されているアドレスリスト」に載っているかを調べます。問題のメールの場合,Received:行に記録されている"5.196.119.97"というアドレスが引っかかったようです。

SAの興味深い点は,各ルールの評価値(pts)が固定ではなく,実際に流通しているスパムを元に学習し,随時更新されるところです。ドキュメントによると,実際に流れてくるスパムメールを入力データとし,パーセプトロン形式のニューラルネットを用いてスパムの判定率がもっとも高くなるように各評価値を調整,その結果をルールセットと共に定期的に更新することで,スパムチェックをあの手この手ですり抜けようとするスパム業者に対抗し,フィルタリング精度を保ち続けているそうです。このような日々の努力が,20年以上に渡ってアンチスパム・ソフトウェアとして活用され続ける原動力なんだなぁ…… と感心しきりです。


話は変わりますが,ここ数ヵ月Gmailが不調で困っています。具体的には,届いたメールをGmailのアカウントにフォーワードする設定で,以前は特に問題無く送れていたメールが,最近ではしばしば"550-5.7.26"エラーとして受取を拒否されます。

Apr 19 09:49:44 localhost postfix/smtp[4079]: E806A1E7804D: to=<kojima3216@gmail.com>,
  relay=gmail-smtp-in.l.google.com[64.233.188.27]:25, delay=1.4, delays=0.17/0.01/0.49/0.74,
  dsn=5.7.26, status=bounced (host gmail-smtp-in.l.google.com[64.233.188.27] said: 550-5.7.26
  This message does not have authentication information or fails to 550-5.7.26 pass
  authentication checks. To best protect our users from spam, the 550-5.7.26 message has
  been blocked. Please visit 550-5.7.26  https://support.google.com/mail/answer/81126#authentication
  for more 550 5.7.26 information. e15-20020a17090a7c4f00b001cd51f48295si674368pjl.174 - gsmtp
  (in reply to end of DATA command))

同様の現象は筆者以外にも起きているようで,Plamo Linuxのメーリングリストに何か投稿があるたび,そのメールをGmailのアカウントへフォーワードできなかった旨を報せるエラーメールが大量に発生しています。

なりすましメールを防ぐためのSPF(Sender Policy Framework)やDKIM(DomainKeys Identified Mail)を設定すればいいのでは,といわれているものの,見る限り,同じドメイン,同じメールアドレスから送信されたメールの半数が転送時にハジかれる上,上記エラーメッセージの最後に"in reply to end of DATA command"とあるように,ヘッダのSPFやDKIMだけではなく,メール本文の内容もチェックした上で受信拒否(bounced)されている気配です。

SPFやDKIMはメールの転送処理と相性が悪い,という話も耳にします。

ロシアのウクライナ侵攻に便乗したサイバー攻撃が急増した結果,Gmailがチェックを強化した,という話もあるようですが,実際のところは闇の中で,イライラがつのるばかりです。

SpamAssasinが,OSSとしてスパム業者に対してすら自らの判定ルールや重み付けを公開しながら戦い続けているのと比べると,Google/Gmailはかっての輝きを失なってしまったなぁ…… と感じてしまいます。

著者プロフィール

こじまみつひろ

Plamo Linuxとりまとめ役。もともとは人類学的にハッカー文化を研究しようとしていたものの,いつの間にかミイラ取りがミイラになってOSSの世界にどっぷりと漬かってしまいました。最近は田舎に隠棲して半農半自営な生活をしながらソフトウェアと戯れています。

URLhttp://www.linet.gr.jp/~kojima/Plamo/index.html