DKIMの脆弱性とは?:DKIMの l= タグの制限について解説

DKIMの脆弱性とは?:DKIMの l= タグの制限について解説

2024年8月12日
著者: Ahona Rudra
翻訳: 岩瀨 彩江

この記事はPowerDMARCのブログ記事 What is DKIM Vulnerability? DKIM l= tag Limitation Explained の翻訳です。
Spelldataは、PowerDMARCの日本代理店です。
この記事は、PowerDMARCの許可を得て、翻訳しています。


DKIMの l= タグ(小文字の「L」)は、署名するメッセージ本文の長さを指定するオプションのタグです。
このタグは、メッセージ本文の一部のみを署名できるため、DKIMの脆弱性と見なすことができます。
これにより、攻撃者がDKIM署名済みのメッセージを悪用しやすくなる可能性があります。

ここでは、DKIMの仕組みと、なぜDKIM署名において l= タグの使用を推奨しないのかについて説明します。

重要なポイント

  1. DKIMの l= タグを使用すると、メッセージ本文の一部のみを署名できるため、攻撃者に悪用される可能性があります。
  2. DKIMの l= タグを使用すると、未署名の部分に悪意のある内容が含まれていても、メールがDKIM検証を通過してしまう場合があります。
  3. メールセキュリティを強化するために、DKIM署名で l= タグを使用しないことが推奨されます。
  4. DKIMキーを定期的にローテーションし、強力な鍵長を使用することで、メール認証設定のセキュリティをさらに高めることができます。
  5. ARC、SPF、DMARCなどの補完的なプロトコルを実装することで、DKIMの有効性と全体的なメールセキュリティをさらに向上させることができます。

DKIM本文長制限(l= タグ)の目的

DKIM(DomainKeys Identified Mail)は、メールの内容が送信中に改竄されていないことを保証するメール認証プロトコルです。
これにより、受信者はメールが実際にそのドメインの所有者によって送信・承認されたものであることを確認できます。

中継サーバがメッセージを転送する際、メッセージ本文が変更される場合があります。
フッターに追加情報を加えたり、メッセージの内容を変更したりすることがあるのです。
DKIMの l タグは、転送やメーリングリストによる内容の変更が発生した場合でも、正当なメッセージがDKIM検証に失敗しないようにするために導入されました。

DKIM l= タグの仕組み

長さの指定
l= タグの後には整数が続き、DKIM署名で保護されるメッセージ本文のバイト数を示します。
本文の一部署名
長さを指定することで、本文の最初の「n」バイトのみが、DKIM署名を生成するためのハッシュに含まれます。
この長さを超える本文部分が変更されても、DKIM署名の検証には影響しません。

例:l= タグを使用したDKIM署名の脆弱性

たとえば、メール本文が1000バイトあり、そのうち最初の500バイトのみが署名されている場合を考えてみましょう。


DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=notify.domain.com; s=selector1; t=1718098168; i=@notify.domain.com; l=500; bh=SF9K/AZh8dO2XDYZlOtjrmHj5txv4H4qjhFr+q3ASuM=; h=Subject:Message-ID:To:Date:Content-Type:From:From:To:Cc:Subject; b=h0Jp5xjZSjUo06er2Gm5k0Fvt0cuC0xOnfobu1oYAFT2ugVxY0h/xly6x/E/pPT2S

この例では、l=500 は、メール本文の最初の500バイトのみがDKIM署名に含まれていることを示しています。

しかし、ヨーロッパを拠点とする大手ドメイン登録業者Zone.euの分析チームは、DKIM署名内の l タグに関連する深刻な脆弱性を発見しました。
メール転送のシナリオで本来の利点を持つはずの l タグですが、サイバー犯罪者によって容易に悪用され、DKIM検証を通過してしまうフィッシングメールの送信に利用される可能性があります。

DKIM l= タグの脆弱性

DKIMの l= タグは、セキュリティ体制を弱める可能性があるため、使用は推奨されません。
メール認証を設定していても、ドメインが攻撃に対して脆弱な状態になるおそれがあります。

攻撃者は、メッセージ本文の内容を変更し、l タグで定義されたバイト範囲外の未署名部分に悪意のあるファイルやリンクを追加することができます。
このメールが受信者に届いたとき、DKIM検証を通過してしまいます。
さらに、ドメインにDMARCが有効になっている場合でも、同様に通過してしまいます。

受信者はあなたのドメイン名を信頼してこのメールを開き、フィッシング攻撃の被害者になる可能性があります。
これにより、重大なプライバシー侵害や認証情報の盗難、そして信用の失墜を招くおそれがあります。
もし顧客がこの過程で金銭的損害を被った場合、あなたが金銭的な補償責任を負う可能性もあります。

このDKIM脆弱性を悪化させるBIMIの役割

BIMIは、ブランドロゴをメールに付加できる機能を持つ新しいプロトコルであり、セキュリティ業界とマーケティング業界の両方で注目を集めています。
最近では、GmailやApple Mailなどの主要なメールプロバイダもBIMIをサポートし、メールをよりプロフェッショナルに見せると同時に、視覚的な検証によってセキュリティを強化できるようになりました。

しかし、DKIM署名に l タグを使用しているドメインから送信された偽装メッセージがDKIMおよびDMARC検証を通過してしまうと、ブランドのBIMIロゴもそれらの悪意あるメールに付加されてしまいます。
つまり、あなたのドメイン名から送信された偽のメッセージがすべての認証フィルタを通過し、さらにブランドロゴまで添付されてしまうのです。
これにより、受信者がそのメールを本物と信じてしまう可能性がさらに高まります。

このようなDKIM l= タグの悪用されやすい性質のため、GmailはGoogle管理コンソールのヘルプセンターでその使用を強く非推奨としています。
Googleは次のように述べています

Google Workspace以外のメールシステムでDKIMを設定する場合、送信メッセージでDKIMの長さタグ(l=)を使用しないでください。
このタグを使用したメッセージは、不正利用されるおそれがあります。

さらに、RFC 6376の第8.2節「本文長制限(l=タグ)の誤用」でも、DKIMの l タグに関連するリスクが強調されています。
RFCでは、DKIM署名に l タグを指定すると、ユーザが警告なしに悪意あるメール内容へアクセスしてしまう可能性があると警告しています。
また、l= タグが指定されたDKIM署名を完全に無視するよう、DKIM署名者および検証サーバに対して特に注意を促しています。

l=タグによるDKIM脆弱性を確認する方法

まず、自分のドメインが脆弱であるかどうかを確認することが重要です。
以下に、いくつかの確認方法を紹介します。

手動で確認する方法:元のDKIM署名ヘッダーをチェックする

  1. 自分宛に空メールを送信します(ここではGmailユーザを例にします)。
  2. 送信したメールを開きます。
  3. 右上の三つの点で示されている「その他のオプション」に移動します。
    Gmailの2段階認証設定における「その他のオプションを表示」ボタンの画像
  4. 「オリジナルを表示」をクリックします。
    メールインターフェース内で「元のメッセージを表示」または「オリジナルを表示」といった操作を示す画面のスクリーンショット
  5. 「オリジナル メッセージ」ページで下にスクロールし、生のヘッダー情報を確認します。
  6. 「DKIM-Signature:」セクションに移動し、構文を確認します。
    DKIM署名ヘッダー内に l= タグが含まれている場合、あなたのドメインは脆弱です。
    l= タグが存在しない場合は問題なく、特に対処する必要はありません。
    DKIM署名がメールヘッダーに含まれる様子、またはDKIMが動作する仕組みを図で示したもの

自動で確認する方法:メールヘッダー解析ツールを使用する

  1. PowerDMARCにサインアップして、無料トライアルを開始します。
    「Analysis Tools(分析ツール)」>「MailAuth Analyzer」に進みます。
  2. 自動生成されたメールアドレスをコピーし、Gmailで新しいテストメールの宛先として貼り付けます。
    その後、テストメールを送信します。
    MailAuth Analyzer画面
  3. 次に、ポータルに戻ってページを更新します
    「Actions(アクション)」セクションの「view(表示)」アイコンをクリックし、結果を確認します。
    MailAuth Analyzer画面のアクションボタン
  4. 私たちはメールヘッダーを即座に解析し、DKIM、SPF、DMARCの設定情報などを含む集約レポートを生成します。
    MailAuth Analyzerの集約レポート画面
  5. スクロールダウンすると、DKIM署名ヘッダーを「生データ形式」と「解析済み形式」の両方で確認できます。
    ここで、署名に l= タグが含まれているかどうかを確認できます。
    もし含まれている場合は、この脆弱性を取り除くための対策を講じる必要があります。
    DKIM署名ヘッダーの確認画面

例:l=タグを使用しないDKIM脆弱性のないDKIM署名


DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=notify.domain.com; s=selector1; t=1718098168; i=@notify.domain.com; bh=SF9K/AZh8dO2XDYZlOtjrmHj5txv4H4qjhFr+q3ASuM=; h=Subject:Message-ID:To:Date:Content-Type:From:From:To:Cc:Subject; b=h0Jp5xjZSjUo06er2Gm5k0Fvt0cuC0xOnfobu1oYAFT2ugVxY0h/xly6x/E/pPT2S

DKIMの脆弱性を防ぐには:DKIMのベストプラクティスとは?

DKIMプロトコルを最大限に活用したい場合、以下は専門家が推奨するヒントです。

  1. DKIM署名ヘッダーで l= タグを使用しないようにします。
  2. メールサービスプロバイダに連絡し、l= タグを含まない新しいDKIM公開鍵をDNSに追加してもらいます。
  3. DKIMキーを定期的にローテーションし、l= タグ脆弱性を持つ古いキーを安全な新しいキーに置き換えます。
  4. DKIMのセキュリティ強度を高めるため、1024ビットではなく2048ビットの強力なDKIMキーを使用します。
  5. ホスト型DKIMソリューションを利用して、DKIMセレクタとキーを管理し、認証結果を集中管理型のダッシュボードで監視します。
  6. 自動DKIMジェネレーターツールを使ってDKIMキーを作成します。
    これにより、見落としやすい構文エラーを回避できます。

DKIMと併用すべき補完的なプロトコル

DKIMの有効性をさらに高めるために、以下のプロトコルを実装することをお勧めします(最後に追加の推奨事項もあります)。

  1. ARC(Authenticated Received Chain) を使用して、メール転送時やメーリングリスト使用時でも、正当なメールが認証チェックを通過できるようにします。
    これにより、DKIMの l= タグを使用する必要が自動的になくなります。
    ARCはメッセージの元のヘッダーを自動的に保持し、誤検出(偽陰性)を防ぎます。
  2. SPFやDMARCなどのフォールバックメカニズムを構成し、認証精度と全体的なセキュリティを向上させます。
  3. DMARCレポートを有効化して、メールチャネルや送信元を継続的に監視します。
    DMARCレポートは、悪意のあるIPアドレスや送信者を特定し、迅速に対応するのに役立ちます。

これらのベストプラクティスを遵守することで、組織はメールセキュリティ体制を大幅に強化し、ドメインの評判を保護できます。
l= タグは、送信中にメール内容が変更される可能性に柔軟に対応するための機能ですが、ドメインのセキュリティを弱める可能性があります。
そのため、私たちをはじめ、多くのメールプロバイダや業界専門家、組織はその使用を推奨していません。

ドメインセキュリティやメール認証サービスの詳細については、ぜひ私たちまでお問い合わせください。