my cognition

書きたいことを書きます。

DKIMやメール関連技術についての覚書き。

TwitterDKIMが話題になってたので、あくまで個人的に調べて考えたこと、または変わらないであろう結論を書いています。

DKIMについて

RFC

2024/02/25現在の情報です。特に、DKIMの安全性については、このあたりを見ると良いようです。

DKIMの特性に関する補足

  • DKIMは、メールの受信毎に評価する必要があります。これは、SSL/TLS証明書のような、世界中の計算機が、それぞれコストを負担するようなものではなく、メールを受信するサーバが、受け付けるメールの件数分、検証を行うということです。(1件のメール受信に対しての負荷が高すぎると、メールのキューが溜まり続けることが容易に考えられるでしょう。)
  • DKIMは、メールの内容を暗号化しません。平文のメールと、平文のメールとメール送信者の暗号鍵からなる署名を付けることで、メールの改ざんを検知する機能です。
  • DKIMの鍵は容易に変更が可能です。秘密鍵が例え漏れたり突き止められたとしても、秘密鍵から公開鍵を生成し、<selector>._domainkey.example.com のTXTレコードを変更し、DKIMヘッダのセレクタを変更することで完了します。

DKIMの暗号鍵が特定されていると疑われる場合

DKIMの鍵を変更しましょう。

DKIMの暗号鍵が特定されている場合の脅威

DKIMをpassする攻撃を目的とするメールを、 example.com の管理する以外のサーバから送信できるようになります。

良くある勘違いとして、秘密鍵が登場するため、何らかのメールを復号されるなどの脅威が考えられますが、DKIMでは暗号化は行いません。メールも平文でやりとりされます。

尚、DKIMには直接関係しませんがSPFレコードを -all として設定することによって、悪意のあるサーバからのメール受信を防ぐことができるかもしれません。

1024bits RSA鍵の安全性について

現時点では、RSAのチャレンジでも見つかっていないので、一般のドメインに設定されている公開鍵に対応する秘密鍵を見つけるコストは非常に高く、ある程度は安全と言えるでしょう。

補足: メールの関連技術

SPF

SPFは、 example.com のメールを送信してきた送信元IPを元に、メールを評価します。具体的には、DNSの情報は example.com の信頼できる情報とし、 _spf.example.com のTXTレコードで指定するIPアドレスからのメール送信であるかの確認を行います。

仮に、DKIM秘密鍵が特定できたとしても、SPFがあるため、DNSの書き換えやあるIPのサーバを乗っ取ることができない限り、この検証を通過することができません。

秘密鍵DKIM=pass、SPF=passとなる結果のメールサーバを攻撃者が送信できた場合、以下のようなシナリオが考えられます。

  • サーバの問題: SMTPサーバで不正なメールの送信ができたり、正当なメールアカウントが不正に利用されている
  • レコードの指定の問題: SPFレコードの指定するIPに問題がある(ネットワークレンジが広いなど)
  • レコードの書き換えの問題: SPF自体が書き換えられている、SPFでincludeするドメインのテキストレコードが書き換えられている

MTA-STS

(追記: STARTTLSもあります。後程まとめます)

ではメールの暗号化はどうするのかというと、皆さんご存じSSL/TLSで経路の安全性を確保します。その仕様がMTA-STSであり、RFC8461に定義されています。

例えば、Gmailであれば、以下のようなURLとレコードで確認することができますね。

[~] $ curl https://mta-sts.gmail.com/.well-known/mta-sts.txt
version: STSv1
mode: enforce
mx: gmail-smtp-in.l.google.com
mx: *.gmail-smtp-in.l.google.com
max_age: 86400
[~] $ dig +noall +ans txt _mta-sts.gmail.com @8.8.8.8
_mta-sts.gmail.com.     300     IN      TXT     "v=STSv1; id=20190429T010101;"

DMARC

私は解説できるほど詳しくないのでググってください。

参考

以下に記載する他、記事中のリンクも参考にしています。

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/send-email-authentication-dkim.html

https://qiita.com/angel_p_57/items/d7ffb9ec13b4dde3357d

https://qiita.com/angel_p_57/items/4989494481cbf3c61f04

https://www.proofpoint.com/jp/threat-reference/dmarc

https://support.google.com/a/answer/9261504?hl=ja