web-dev-qa-db-ja.com

DKIMベリファイアをだます電子メールを作成する方法は?

送信者のサミーが受信者のリタにメールを送信しています。 SammyがメールにDKIM署名を適用し、RitaがDKIM検証ツールを使用してDKIM署名をチェックすることを知っています。私は悪意のある中間者です。 Ritaのメールクライアントに表示されるヘッダー値がDKIMで署名されたものと異なるようにメールを変更したいのですが、DKIM検証ツールを通過するときにRitaが受信するメールがDKIM検証済みであるように見せたいです。これはできますか?攻撃者はどの程度変更できますか?

これまでのところ、これを行うための3つの手法を学びました。

  1. 新しいヘッダーを追加します。元のメールには存在せず、DKIM署名に含まれていないヘッダーを追加します。そのヘッダーは、DKIM署名に含まれていなくても、おそらくRitaの電子メールクライアントによって表示されます。

  2. ヘッダーの複数のコピー。異なる値を使用して、同じヘッダーの複数のバージョンを追加します。 DKIMは最後のものだけをチェックします。メールクライアントが最初のメールを表示する場合、攻撃が成功する可能性があります。具体的には、悪意のあるヘッダーを配置します。たとえば、From:悪意のある値を持つヘッダー-beforeDKIMヘッダー。私が正しく理解している場合、DKIM署名はDKIMヘッダーの後のヘッダーのみを対象としているため、悪意のあるヘッダー値が署名されていないにもかかわらず、署名は有効であるように見えます。クレジット: このトリックを指摘した のRobert Grahamに感謝します。

  3. 署名されたセクションの後にコンテンツを追加します。RFC 6376が指摘 より不明瞭な攻撃 、元のメールのDKIMヘッダーがl=タグ(ほとんどの通常の電子メールは通常そうではありません)を使用して、慎重に使用します。おそらくほとんどの状況では関係ありません。

これらはそれぞれ、攻撃者が達成できることには制限があります。私が見落とした他の攻撃はありますか?

7
D.W.

まず、いい質問です。既存のメールを変更してThunderbirdがどのように動作するかを確認しました。DKIM署名メカニズムが最後から開始している間、実際にはFrom、To、Subjectの表示に最初のヘッダーが必要です。したがって、DKIM署名はFrom、興味深いことに、最初のFrom行はメールビューでのみ使用され、すべてのメールのリストビューでは最後のFrom行が表示されます。
他の攻撃について、またはあなたが説明した攻撃を、あなたが気づかなかった方法でどのように使用できるかについて:

興味深い副作用のあるメールヘッダーがいくつかあり、これらのヘッダーは完全には保護されていません(つまり、変更または新しいヘッダーの追加から保護されています)。特にContent-TypeとContent-Transfer-Encodingは、コンテンツの解釈方法に特別な意味があります。これらのヘッダーを操作すると、興味深い効果が得られます。たとえば、存在しない境界を持つContent-Typeマルチパートがあると、Thunderbirdはメールの元のテキストを表示せず、代わりに空白のコンテンツを表示します。件名のなりすまし(「hxxp:// ...からのアップデートのダウンロード」)やReply-Toと組み合わせると、この予期しない空白のコンテンツがソーシャル攻撃に使用される可能性があります。例:

 Subject: Blank mail? Download hotfix for your mail client at http://....
 Content-type: multipart/mixed; boundary=boundary_does_not_exist
 Subject: original subject
 Content-type: original/type

非マルチパートコンテンツの同様のContent-Transfer-Encodingをbase64に変更すると、ソーシャルアタックで同様に使用される意味不明なコンテンツのみが表示される可能性があります。例:

 Subject: Mail corrupt? Download hotfix for your mail client at http://....
 Content-Transfer-Encoding: base64
 Subject: original subject
 Content-type: text/plain

DKIM署名がl=を使用して本文ハッシュで使用される行数を制限する場合、Content-typeを特別な境界のあるマルチパートタイプに変更(または追加)することにより、メールのコンテンツを「置き換える」こともできます。境界は、ハッシュに含まれる既存のコンテンツをスキップするように設計されています。これは、新しいMIMEパーツのプリアンブルとして扱われます(したがって、表示されません)。例:

 Content-type: multipart/mixed; boundary=my_own_boundary
 DKIM-Signature: ... bh=...; l=...
 Content-type: original/type

 here is the original content, no matter if single part or multipart
 this is the last line included in the body hash

 --my_own_boundary
 Content-type: text/plain

 Only this text is shown at the recipient
 --my_own_boundary--

... l =タグを使用します(ほとんどの通常の電子メールは通常使用しません)

実際、メールボックスでl=を含むDKIM署名がいくつ見つかったかに驚いていました。特にCisco.comからのメールはこの機能を使用しており(d?)、私はこれを使用して、署名を有効に保ちながら、説明した方法でコンテンツを正常に置き換えました。

サミーからの既存のメールを変更する以外に、攻撃者はサミーから送信されたように見えるリタへの新しいメールを作成することもできます。これを行うには、有効なDKIM署名を含むメールを作成し、偽のFromヘッダーを上に追加します。リタがDKIM署名が有効であるかどうかを確認するだけであれば、問題は発生しません。さらに、署名ドメインが送信者ドメインと一致するかどうかを確認する場合、結果は、この検証に使用されるFromヘッダーによって異なります。しかし、Sammyがパブリックメールプロバイダーの1つを使用している場合、攻撃者はそこでメールアカウントも取得するだけでよく、両方が同じドメインからのものであるため、ドメインをチェックするときにどちらのFromが考慮されても問題ありません。

編集:ここでの質問の結果、2017年にいくつかのより大きな調査が行われ、実際のDKIM署名を壊すことなくメールを変更する方法を示しました。 破壊的なDKIM-意図的かつ偶然 を参照してください。

9
Steffen Ullrich