Оптовая компания обратилась не за аудитом, а с конкретным испугом: главбух чуть не провела платёж в 640 000 ₽ по письму, которое выглядело как обращение собственника — с правильным адресом отправителя, знакомым стилем и подписью на месте. Спасло то, что бухгалтер позвонила директору уточнить детали. Директор в этот момент был на встрече и никакого письма не отправлял.
При разборе выяснилось: почтовый ящик директора не взломан. Письмо пришло с чужого SMTP-сервера, который просто подставил в поле «От» адрес директора компании. Технически это классический email spoofing, а инфраструктура компании была устроена так, что подделку никто не проверял и не блокировал.
Как это эксплуатируется
Схема BEC (Business Email Compromise) через spoofing не требует взлома почты жертвы вообще — атакующему достаточно, чтобы у домена компании отсутствовали или были неправильно настроены механизмы проверки отправителя. Разберём шаги, которые проходит атакующий.
Шаг 1. Разведка домена
Первое, что делает атакующий — проверяет, есть ли у домена жертвы защита от подделки писем. Это занимает 30 секунд и не требует специальных прав.
dig txt company.ru +short
"v=spf1 include:_spf.google.com ~all"
dig txt _dmarc.company.ru +short
;; ответ пустой — записи нет
dig txt selector1._domainkey.company.ru +short
;; ответ пустой — DKIM не настроен
Ключевой момент здесь — политика SPF ~all (softfail) вместо -all (hardfail), и полное отсутствие DMARC-записи. Это значит: даже если получатель проверит SPF и увидит несовпадение, письмо не будет отклонено — максимум помечено как подозрительное, да и то не всегда, если принимающий сервер вообще смотрит на этот заголовок.
Шаг 2. Проверка возможности отправки от чужого имени
Дальше атакующий проверяет, пройдёт ли поддельное письмо технически. Для этого используется инструмент swaks — стандартный SMTP-тестер, который легально применяется пентестерами и точно так же — мошенниками.
swaks --to buhgalter@company.ru \
--from "Иванов Иван Иванович " \
--header "Subject: Срочно! Оплата новому поставщику" \
--body "Прошу срочно перевести 640000 руб. по реквизитам во вложении" \
--server smtp.attacker-relay.com --port 25
=== Trying smtp.attacker-relay.com:25...
=== Connected to smtp.attacker-relay.com.
<- 220 relay ESMTP ready
-> EHLO test
<- 250-relay Hello
-> MAIL FROM:
<- 250 OK
-> RCPT TO:
<- 250 OK
-> DATA
<- 354 Go ahead
-> ... письмо отправлено ...
<- 250 Message accepted
Обратите внимание: сервер-релей принял MAIL FROM с чужим доменом без каких-либо проверок — потому что открытые или слабо настроенные SMTP-релеи (в том числе специально арендуемые в даркнете «спуф-панели») этим и торгуют. Стоимость такого сервиса на теневых форумах — от 15 до 50 долларов за подписку с готовым веб-интерфейсом: вставляешь «от кого», «кому», текст — получаешь письмо с любым Return-Path.
Шаг 3. Социальная инженерия в теле письма
Дальше в дело идёт не техника, а сценарий: срочность, ссылка на реального контрагента компании (имя которого легко взять из открытых источников — сайта, тендерной площадки, соцсетей), просьба «оплатить сейчас, я на встрече, не могу говорить». Часто копируется реальная подпись директора из его прошлых писем, если переписка утекала ранее или бралась из открытого LinkedIn/VK-профиля.
Полутехнические пруфы
Если открыть заголовки такого письма (в Gmail — «Показать оригинал», в других клиентах — «view source»), видно расхождение между тем, что показано пользователю, и тем, что реально произошло на уровне протокола:
Return-Path:
Received: from mail.attacker-relay.com (185.220.xxx.xxx)
by mx.company.ru with SMTP id 7f3a...
Authentication-Results: mx.company.ru;
spf=softfail (domain owner discourages use of this host) smtp.mailfrom=company.ru;
dkim=none (message not signed);
dmarc=none (p=none)
Три строки в Authentication-Results — это и есть диагноз. spf=softfail означает, что письмо пришло не с разрешённого IP, но политика домена не запрещает его доставку. dkim=none — цифровая подпись письма отсутствует в принципе, значит подтвердить целостность и подлинность нечем. dmarc=none — самое важное: нет правила, что делать с письмами, которые провалили проверки, поэтому почтовый сервер компании просто доставил письмо во «Входящие» как обычное.
В логах почтового сервера компании (Postfix/Exim/Exchange) такие попытки выглядят характерно — resolving IP отправителя не принадлежит диапазону, заявленному в SPF-записи домена, и обычно повторяется пачками в течение короткого времени, если атака автоматизирована:
Oct 03 09:14:02 mx postfix/smtpd[22841]: NOQUEUE: reject: RCPT from unknown[185.220.xxx.xxx]:
554 5.7.1 Sender address rejected: Domain not permitted to send from this IP;
from= to=
Именно такую строчку «reject» и должен выдавать сервер после включения строгой политики — до настройки в логах компании была тишина: письма просто проходили.
Что и почему сработало бы дальше
Если бы бухгалтер не позвонила директору, а перевела деньги, схема развивалась бы дальше по стандартному для BEC сценарию:
- Деньги уходят на счёт «нового поставщика» — обычно это счёт дропа, который обналичивается в течение 2-4 часов после зачисления, что делает возврат через банк технически возможным только в первые минуты после платежа.
- Атакующий, видя, что схема сработала, повторяет её через 2-3 недели — уже от имени «постоянного поставщика» с письмом о смене реквизитов (ещё более правдоподобный вариант, потому что такие письма компании действительно получают регулярно).
- Параллельно может использоваться перехват реальной деловой переписки — если ранее была скомпрометирована почта одного из контрагентов (не обязательно самой компании), атакующий видит реальные суммы, сроки и стиль общения, что делает поддельные письма ещё точнее.
- При отсутствии DMARC у компании нет и отчётов (aggregate reports), поэтому она даже не узнаёт, сколько раз её домен уже использовался для рассылки поддельных писем другим — партнёрам, клиентам, банку.
Как закрыли дыру
Решение полностью укладывается в стандарт email-аутентификации, который существует больше десяти лет, но в малом и среднем бизнесе почти никогда не включён до первого инцидента.
1. SPF — список серверов, которым разрешено отправлять письма от имени домена
; DNS TXT-запись для company.ru
v=spf1 ip4:203.0.113.10 include:_spf.google.com -all
Ключевое отличие от того, что было — механизм -all (hardfail) вместо ~all. Это прямое указание принимающим серверам: письма не из перечисленных источников должны отклоняться, а не просто помечаться.
2. DKIM — цифровая подпись каждого письма
# Postfix + OpenDKIM, генерация ключа
opendkim-genkey -s selector1 -d company.ru
cat selector1.txt
selector1._domainkey.company.ru IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSq..."
Публичный ключ публикуется в DNS, приватный подписывает исходящие письма на сервере. Теперь любое письмо от company.ru либо подписано корректно, либо подпись отсутствует/не совпадает — и это видно принимающей стороне.
3. DMARC — политика «что делать с письмами, провалившими проверки»
_dmarc.company.ru IN TXT
"v=DMARC1; p=reject; rua=mailto:dmarc-reports@company.ru; pct=100"
Параметр p=reject — это и есть та самая «цифровая печать»: если письмо не проходит SPF или DKIM, принимающий сервер обязан его отклонить, а не доставить с пометкой. Параметр rua настраивает еженедельные агрегированные отчёты о том, кто и откуда пытается слать письма от имени домена — это готовый источник ранней аналитики по попыткам спуфинга.
Дополнительно к DNS-записям было сделано:
- Настроена автоматическая маркировка писем с
dmarc=failкрасным флагом прямо в почтовом клиенте — визуальный сигнал для сотрудников до открытия письма. - Введено короткое правило: любой платёж по «срочному» письму от директора, поставщика или в обход обычного порядка согласования подтверждается звонком на уже известный номер, а не тот, что указан в письме.
- Настроено уведомление директору в мессенджер при каждой попытке отправки писем от его имени, не прошедшей DMARC-проверку, — это даёт видимость атак ещё до того, как они дойдут до сотрудников.
Дыра, из-за которой компания чуть не потеряла 640 000 ₽, закрывалась тремя DNS-записями и правкой конфига почтового сервера — на всё ушло меньше рабочего дня.
Важный нюанс: SPF, DKIM и DMARC не защищают от компрометации самого ящика директора (взлом пароля, фишинг с кражей сессии) — это другой класс атак с другими методами защиты (MFA, мониторинг входов, EDR на рабочих станциях). Но именно спуфинг — самый дешёвый и массовый инструмент для BEC-схем, потому что не требует ни взлома, ни доступа к инфраструктуре жертвы, только знания её домена и того факта, что защита не включена.
