BIMIによるなりすましメール対策を試してみる

2023.01.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

BIMIについて

成りすましメール対策のための技術となります。
記事執筆時点では技術仕様としてはドラフト中の技術となるため仕様が変更となる可能性がある点はご注意ください。
https://datatracker.ietf.org/doc/draft-blank-ietf-bimi/

なおbimigroup.orgを確認する限り既に大手でも対応しているサービスが存在するそうです。 https://bimigroup.org/bimi-infographic/

BIMIはDMARCのように特定のDNSレコードに埋め込むことで
受信側のサービスやクライアントが対応していればロゴを表示することができます。

個人的な印象

ごく個人的な意見ですがBIMIはDMARCでは対応できなかった、
自ドメイン外からのなりすましに対応できる可能性の面白い技術であると考えています。

DMARCは受信させないという方法で除去をしているため、
機械的に正規のものかどうかを判別できず別ドメインのメールには対応できません。

BIMIは除去するのではなく正規のものに特別なものを付与することで
なりすましと差別化することで判別ができるものと考えております。

少し前では怪しい日本語で判別だけで判別できたものが
特に最近では実際の企業メールをコピーしリンクだけ差し替えたようなものも出てきており、
ひと昔前の感覚で判別していると逆に危険なメールも含まれています。

わかっている人であればFROMのアドレスを確認したり、
リンク先が短縮URL等怪しいものであるといったことで判別することも可能ですが、
一般利用者としてはそこまで逐一確認することも非常に厳しいものと思います。


** リンクの件は比較的メーラー側で警告が出るケースが多い印象はあります

BIMIを利用することでロゴを確認することでぱっと見で正規のメールかを判別することができ、
利用者に要求されるリテラシーを大幅に下げることができると考えております。

とはいえBIMIによるロゴの表記があることをで大丈夫と思い込んでしまうことは
それはそれで別の認知的な脆弱性となるので注意はしましょう。

本記事について

BIMIの設定をして対応しているサービスで確認してみます。
今回はVMC(後述)は未設定で利用します。

また全てのパラメータについて詳細を記載するわけではないのでご注意ください。

導入の事前準備

BIMIの認証の前提条件としてDMARCの認証に成功している必要があるため、
BIMIの導入とは別に事前にDMARCレコードの設定が必須となります。

先日DMARCに関する記事も書いたので興味があれば是非読んでみてください。

DMARCレコードの段階的な導入を考えてみる

設定値にも制約がありnoneポリシーの設定はは不可であり
quarantineもしくはrejectが設定されている必要があります。

rejectの場合はpctの値に指定はありませんがquarantineの場合はpctが100(%)が必須となります。

VMCについて

設定するロゴについてですが当然第三者に使われる可能性がありますので、
悪用しなりすましされる可能性があります。

そのためVMC(Verified Mark Certificate)という
認証局から発行されるデジタル証明書を用いてロゴの正当性を示すことができます。

VMCの発行はdigicertが対応しているようです。
https://www.digicert.com/content/dam/digicert/jp/pdfs/guide/certcentral-simple-manual-vmc.pdf

VMCの発行はロゴに対して法的な権利を所有している必要があり、
誰でも発行できものではなく信頼性は非常に高いものとなります。
(前述のdigicertの資料では商標を取得と表現されていました)

現在はVMCの設定は任意値のため未指定の場合の挙動は注視する必要があるとは思います。

流石に商標を持っているようなロゴはないので今回は未指定で設定します。

BIMIレコード

BIMIレコードはは標準ではdefault._bimi.example.comのTXTレコードに設定します。
(example.comに対して設定する場合)

defaultの部分はセレクタとなり、
メール送信時に送信側がBIMI-Selectorヘッダ指定可能です。

未設定の場合はdefaultの値が利用されますので
任意メールヘッダを付与できない送信サービスでもBIMIの対応は可能です。

例)
hogeというセレクターを利用したい場合、
メールヘッダにBIMI-Selector: v=BIMI1; s=hoge;と指定。
default._bimi.example.comではなくhoge._bimi.example.comの値が採用される。

設定するパラメータ

vタグ(必須)

DAMRCのvタグと似たような形でバージョンを指定します。
執筆時点ではBIMI1のみ存在しています。

lタグ(必須)

ロゴイメージの格納場所を指定します。
ロゴはSVGの形式である必要があります。

前述のdigicertの申請資料を確認する限りSVG Tiny 1.2で申請する旨が書かれていますが
実際にはSVG P/Sという規格のようです。 (一応資料内のリンク先で編集する旨の記載はある)

easydmarcでSVG Tiny 1.2をSVG P/Sに変換するツールがあるので今回はこちらを利用しました。

https://easydmarc.com/tools/bimi-logo-converter

aタグ(オプション)

VMCを指定するためのタグとなります。

前述の通り未指定の場合の挙動については明確な規定はないのですが、
今回の検証の範囲で未指定の場合にもしかしたら表示されないのではないかと思われる挙動は見られました。

BIMIレコードの適用

自分の保持しているドメインで既にDMARCレコードが設定されているためBIMIのみの対応となります。
設定されているDMARCレコードは以下の通りです。

$ dig _dmarc.xxxx.com txt +short
"v=DMARC1;pct=100;p=reject;"

ロゴを準備する

こんな感じのテスト用のロゴを準備しました。
(PNGで上げてますが実際はSVGです)

自分の使用しているソフトでSVGを書き出したところ1.1でありどうしたものか悩みましたが
easydmarcのツールに試しに上げてみたところ変換できました。

SVGの規格には詳しくないですがツールの説明上は1.2からの変換で
今回作ったもの的にできた可能性はあるので試す方はご注意ください。

ロゴをアップロードするドメインなどの制約は見当たらないので
公開用に適当なS3バケットを作成しそこにアップロードしました。

BIMIレコードを設定

今回は送信側にヘッダをを付与するような作業を行いたくないため
BIMI-Selectorヘッダを付与せずdefaultの値を利用します。

レコードは以下の値を設定しました。

$ dig default._bimi.xxxxxx.com txt
"v=BIMI1; l=https://xxxxxx.s3.ap-northeast-1.amazonaws.com/bimi-logo.svg;"

確認

設定が済んだため実際にメールを送信して確認してみます。
GMailが対応しているようなのでそちらに送信します。

が、表示されませんでした。

認証結果を確認するために受信側メールヘッダを確認してみましたが
ドキュメントで確認できるbimi=xxxのようなパラメータが見当たりません。

 Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of yyyy@xxxxx.com designates zzz.zzz.zzz.zzz as permitted sender) smtp.mailfrom=yyyy@xxxxx.com;
       dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=xxxxxx.com

ドキュメントの7.7(7,5や7.6等も関連)を読む限り失敗した場合でもAuthentication-Resultsヘッダ内にbimiのパラメータに設定されるはずですが、そのパラメータすら見当たりませんでした。 仮にbimiが未設定の場合でも最低限bimi=noneが確認できそうです。

https://datatracker.ietf.org/doc/draft-brand-indicators-for-message-identification/02/ bimi: Result of the bimi lookup (plain-text; REQUIRED). Range of values are 'pass' (BIMI successfully validated), 'none' (no BIMI record present), 'fail' (syntax error in the BIMI record, failure in Discovery or Validation steps, or some other error), 'temperror' (DNS lookup problem), 'declined' (The domain owner published an explicit declination record), or 'skipped' (BIMI check was not performed, possibly because the message did not comply with the minimum requirements such as passing DMARC, or the MTA does not trust the sending domain). The MTA MAY put comments in parentheses after bimi result, e.g., "bimi=fail (Invalid SVG)", "bimi=skipped (sender not trusted)" or "bimi=skipped (message failed DMARC)".

VMC未設定起因で何かあるのかと思いVMCなしで成功してる事例があったfastmailで試してみました。

背景色付けてないせいで透過されてちょっと見た目が悪いですが無事表示されました。

メールヘッダを確認したところbimi関連のパラメータも含まれておりました。

ARC-Authentication-Results: i=1; mx2.messagingengine.com;
     x-csa=none;
     x-me-sender=none;
     x-ptr=fail smtp.helo=xxxxxxx.com
     policy.ptr=xxxxxx.jp
     bimi=pass header.d=xxxxxxx.com header.selector=default;
     arc=none (no signatures found);
     dkim=none (no signatures found);
     dmarc=pass policy.published-domain-policy=reject
     policy.applied-disposition=none policy.evaluated-disposition=none
     (p=reject,d=none,d.eval=none) policy.policy-from=p
     header.from=xxxxxxx.com;
     iprev=pass smtp.remote-ip=zzz.zzz.zzz.zzz
...
Authentication-Results: mx2.messagingengine.com;
     bimi=pass header.d=xxxxxxx.com header.selector=default

こうなるとGMailが本当に対応しているのか気になるので
送信側として対応しているyahooのメールが手元にあるので確認してみます。

フィッシングメール対策として、Yahoo! JAPANから配信するメールにアイコンが表示される規格「BIMI」を導入

実際現状もDNSレコードとしてBIMIレコードを設定されていることを確認しました。

$ dig +short default._bimi.mail.yahoo.co.jp txt 
"v=BIMI1; l=https://bimi.west.edge.storage-yahoo.jp/yahoo_japan_corporation_224791083.svg; a=https://bimi.west.edge.storage-yahoo.jp/yahoo_japan_corporation_224791083.pem"

ロゴが表示されているのでGMailはBIMIに対応していそうではあります。

しかしながらメールヘッダを確認したところBIMI関連のパラメーターが見当たりません。

Authentication-Results: mx.google.com;
       dkim=pass header.i=@mail.yahoo.co.jp header.s=2020020701 header.b=xxxxxx;
       spf=pass (google.com: domain of my-reg-err@serr.yahoo.co.jp designates 183.79.221.39 as permitted sender) smtp.mailfrom=my-reg-err@serr.yahoo.co.jp;
       dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mail.yahoo.co.jp

bimi=xxxの結果が見えないためこの点は推測するしかないですが、
今回の設定ではGMailとfastmailで表示の条件が異なりそれによりGMailでは表示されていないものかと考えております。
(VMC未指定時の取り扱いに決めがないのでGMailはそれがなかったら表示してない等)

検証してみたいのですが残念ながらVMCを取得していない今回は確認する術がありません。

逆にfastmailではVMCが未設定でも設定したロゴが表示されてしまうため、
現状の仕様では正規保持していないロゴの悪用したメールの表示には注意する必要があるかもしれません。

終わりに

GMail側で表示ができず少し消化不良感は残りますが
実際にBIMIを設定しfastmailではそのロゴを確認することができました。

今回は雑に書いたテストロゴのため実感は薄いものとなりますが、
これが大手企業のロゴであったり普段自分の使っているロゴであれば
もっとぱっと見の印象で安心感を利用者側に与えることができるものではないかと思います。

VMCの関係で自宅サーバ等個人環境で導入しよう!というような技術ではないですが、
敷居が高い分なりすまし悪用される可能性は下がるものと考えております。

実際にはまだ技術資料的にはドラフト中のものではありますが、
既に大手のサービスでは一部対応されているような状態です。

是非頭の片隅にでも置いていただき、
そういえばこんなのあった気がするといった形で思い出していただければと思います。