昨年末ごろから、社長の実名で部下に詐欺メールが届く事例が全国的に発生しているようで、私の管理しているサーバーにも届きました。
おそらく会社のウェブサイトからドメインと代表者名を取得して、無差別に送信しているのでしょうが、差出人に実名が入っているとギョッとするユーザーも多いと思います。
今回の詐欺メールは、差出人アドレスがフリーメール(Outlook や Gmail)なのが特徴で、自社ドメインのメールアドレスで運用している会社ならすぐに異変には気付くことができます。逆にフリーメールのおかげで DMARC を PASS するため、スパムフィルターに引っ掛からずに素通りしてきます。
今回は、以前構築した Rspamd を使って、社長のなりすましメールをブロックする方法を共有します。
要件
今回のなりすましメールの特徴に合わせて「表示名に社長の名前が入っていた場合」かつ「メールアドレスが自社のドメインではない場合」のブロックルールを設定していきます。
環境
- OS: AlmaLinux release 9.7 (Moss Jungle Cat)
- スパムフィルター: Rspamd daemon version 3.14.3
設定
それでは Rspamd でブロックルールを設定していきます。
表示名のリストを作成
まずは、表示名で騙られる社長の名前のリストを作成します。
/etc/rspamd/local.d/ceo_name.map を作成して、正規表現を使って記入します。
1 2 | /山田\s?太郎/ /Taro\s?Yamada/i |
Web GUI から操作できるように、所有者を変更しておきます。
1 | # chown _rspamd: /etc/rspamd/local.d/ceo_name.map |
自社ドメインのリストを作成
次に、自社のメールで使用されるドメインをリストアップします。
/etc/rspamd/local.d/my_domain.map を作成してドメインを列挙します。
1 2 | example.com example.co.jp |
こちらも Web GUI から操作できるように、所有者を変更しておきます。
1 | # chown _rspamd: /etc/rspamd/local.d/my_domain.map |
Multimap で個別ルールを設定
下記で設定する IS_CEO_NAME と IS_CORP_DOMAIN の個別スコアを 0 に設定し、マッチしても直ちに判定は行わず、composites.conf の判断材料とします。
表示名の判定
ルール名は IS_CEO_NAME としました。
送信者の表示名を filter = "email:name"; で抽出し、ceo_name.map のリストと比較します。
MIME エンコードされた文字列は Rspamd によってデコードされ、UTF-8 として正規表現の判定にかけられます。
ドメインの判定
ルール名は IS_CORP_DOMAIN としました。
ドメイン名を filter = "email:domain"; で抽出し、my_domain.map のリストと比較します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ……(最終行に追加)…… # 社長名を騙る外部ドメインからのなりすまし対策 IS_CEO_NAME { type = "header"; header = "From"; filter = "email:name"; score = 0.0; description = "差出人名(なりすまし判定用)"; map = "/etc/rspamd/local.d/ceo_name.map"; regexp = true; } IS_CORP_DOMAIN { type = "header"; header = "From"; filter = "email:domain"; score = 0.0; description = "自社ドメイン(なりすまし判定用)"; map = "/etc/rspamd/local.d/my_domain.map"; } |
/etc/rspamd/local.d/multimap.conf の最後に判定ルールを追加します。
Composites で組み合わせて判定
/etc/rspamd/local.d/composites.conf に、IS_CEO_NAME と IS_CORP_DOMAIN を組み合わせる条件を記述し、最終スコアを付けます。
また、自社ドメインの場合は DMARC_POLICY_REJECT の判定を合わせることで、ドメインを詐称してくる場合にも対応できます。
1 2 3 4 5 | CEO_IMPERSONATION { description = "社長を騙る外部メール、または自社ドメインを偽装した不正メール"; expression = "IS_CEO_NAME & (!IS_CORP_DOMAIN | (IS_CORP_DOMAIN & DMARC_POLICY_REJECT))"; score = 20.0; } |
Rspamd をリロード
Rspamd をリロードして、上記の設定を反映します。
1 2 3 | # rspamadm configtest syntax OK # systemctl restart rspamd |
以上で設定は完了です。
結果
設定後に届いた、なりすましメールのヘッダーを見たところ、きちんと動作しているようです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | X-Spamd-Result: default: False [21.10 / 10.00]; CEO_IMPERSONATION(20.00)[]; FREEMAIL_REPLYTO_NEQ_FROM_DOM(3.00)[]; ARC_ALLOW(-1.00)[microsoft.com:s=arcselector10001:i=1]; DMARC_POLICY_ALLOW(-0.50)[outlook.com,none]; R_DKIM_ALLOW(-0.20)[outlook.com:s=selector1]; R_SPF_ALLOW(-0.20)[+ip4:52.103.0.0/17]; MIME_BASE64_TEXT(0.10)[]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; FREEMAIL_REPLYTO(0.00)[gmail.com]; RCVD_TLS_LAST(0.00)[]; TO_DN_ALL(0.00)[]; FREEMAIL_ENVFROM(0.00)[outlook.com]; TO_MATCH_ENVRCPT_ALL(0.00)[]; FREEMAIL_FROM(0.00)[outlook.com]; RCPT_COUNT_ONE(0.00)[1]; GREYLIST(0.00)[pass,body]; MIME_TRACE(0.00)[0:+,1:+,2:~]; RCVD_IN_DNSWL_NONE(0.00)[52.103.10.20:from]; REPLYTO_DOM_NEQ_TO_DOM(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; ARC_SIGNED(0.00)[example.com:s=dkim:i=2]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; REPLYTO_DOM_NEQ_FROM_DOM(0.00)[]; MID_RHS_MATCH_FROMTLD(0.00)[]; RWL_MAILSPIKE_POSSIBLE(0.00)[52.103.10.20:from]; DWL_DNSWL_NONE(0.00)[outlook.com:dkim]; DKIM_TRACE(0.00)[outlook.com:+]; ASN(0.00)[asn:8075, ipnet:52.96.0.0/12, country:US]; HAS_REPLYTO(0.00)[xxxxxxxxxx@gmail.com] X-Rspamd-Queue-Id: XXXXXXXXXXX X-Rspamd-Action: add header X-Spam-Status: Yes, score=21.10 X-Rspamd-Server: example.com X-Spam-Level: ********************* X-Spam-Flag: YES X-Spam: Yes |
まとめ
ニュースにもなっていましたが、実際に詐欺の被害にあわれた企業もあるようです。このような詐欺メールをユーザーから遠ざけてあげることで、被害が少なくなることを願います。


コメント