Привет habr! В данной заметке решил затронуть тему защиты от поддельных писем (Email spoofing, Forged email). Речь пойдёт о письмах, в которых так или иначе подделывается информация об отправителях. Получатель видит письмо, отправленное якобы доверенным лицом, но на самом деле, письмо отправлено злоумышленником.
В последнее время всё чаще слышим о проблеме поддельных писем от наших заказчиков, да и просто от знакомых. Эта проблема не только актуальна, но, похоже, набирает обороты. Вот реальная история от знакомого, который был близок к тому, чтобы потерять сумму с четырьмя нулями в долларовом эквиваленте. В компании велась переписка на английском языке с зарубежной компанией о приобретении дорогостоящего специализированного оборудования. Сперва нюансы возникли на стороне нашего знакомого – потребовалось изменить реквизиты счёта отправителя (компанию-покупателя). Через некоторое время, после успешного согласования новых реквизитов, поставщик оборудования также сообщил о необходимости изменения реквизитов счёта получателя (компанию-продавца). Вот только письма об изменении данных получателя шли уже от злоумышленников, удачно подменявших адрес отправителя. На фоне некоторой общей суматохи, усугубляющейся ещё и тем, что обе стороны не являлись носителями языка переписки, заметить подмену писем было практически невозможно. Нельзя не отметить и тот факт, что злоумышленники старательно копировали стили, шрифты, подписи и фотографии в письмах. Как именно утекла информация о сделке – скорее всего была скомпрометирована почтовая переписка. За неделю до финального согласования сделки, о которой идет речь в этой статье, на почту знакомого пришло письмо с трояном, в виде счета-фактуры в *.exe архиве. На момент прихода письма антивирус не отловил зловреда, и тот, некоторое время успел “поработать” на компьютере, и даже подтянуть на подмогу пару своих собратьев.
Через несколько дней сигнатуры антивируса обновились и зловред с собратьями был удален, но к тому моменту в переписку уже вклинились, отправителя подделали, деньги ушли на чужой счёт.
В данном примере подмена адреса отправителя была сделана крайне незамысловато. Реальные адреса мы не опубликуем, но приведём аналогичный пример.
Правильный адрес отправителя: best@bestofall.com
Поддельный адрес отправителя: bestbestofall.com@spoofed.ru.
Почтовая учётная запись злоумышленника включала имя “best@bestofall” и фамилию “.com”. Часть переписки знакомый вел с мобильного устройства, почтовый клиент которого отображал в поле отправителя только имя и фамилию отправителя. А так делают все мобильные почтовые клиенты. Поэтому, входящее письмо в этом почтовом клиенте виделось как от best@bestofall «пробел» .com. Что очень похоже на оригинал. Ниже письмо от злоумышленника и под ним легитимное письмо в интерфейсе Яндекс.Почты:
В Outlook письмо от злоумышленника тоже выглядело достаточно похоже на оригинал, если внимательно не всматриваться, то тоже можно и не заметить подделку.
Всё всплыло, когда позвонил поставщик и спросил: «Веэр из май мани?». К счастью знакомого, из-за двойной смены реквизитов (получателя и отправителя) относительно изначального подписанного соглашения $$$$$ не были окончательно зачислены на счет злоумышленников, а зависли на транзитном счете банка-получателя, и их удалось вернуть.
Компании по всему миру терпят существенные убытки из-за Email-атак (источник). Так с октября 2013 по август 2015 совокупный убыток от компрометаций корпоративной электронной почты компаний по всему миру составил 1,2 миллиарда долларов США. А атаки с поддельными письмами находятся среди самых распространённых видов атак на корпоративные почтовые системы.
Особое внимание уделяется атакам, при которых злоумышленник отправляет поддельное письмо от имени высокопоставленного руководителя компании. В тексте письма злоумышленник требует незамедлительного ответа, или какой-либо срочной реакции от сотрудника или группы сотрудников компании. Например, может потребовать ответить на письмо отправкой какой-либо конфиденциальной информации. Это может привести к утечке данных. Или злоумышленник может потребовать срочный банковский перевод какой-либо крупной суммы. В описанных сценариях сотрудник ощущает давление: высокопоставленный руководитель требует безотлагательных действий. Этот факт повышает вероятность успеха атаки. Кроме того, атаке может предшествовать рекогносцировка методами социальной инженерии, чтобы наиболее эффективно сформировать текст письма и наиболее точно выявить целевую группу сотрудников, которые получат поддельное письмо. Данный подход также благотворно влияет на успех атаки.
Для того, чтобы разобраться с механизмом подделки адреса отправителя, вспомним структуру электронного письма, передаваемого по протоколу SMTP. Электронное письмо состоит из конверта (envelope), заголовков (headers) и тела письма (message body). Информация об отправителе содержится в конверте. Эта информация формируется SMTP-командой mail from и оказывает непосредственное влияние на процесс пересылки сообщения по мере прохождения почтовых cерверов Mail Transfer Agent (MTA). Однако, информация об отправителе также содержится в некоторых заголовках письма, таких как “From:”, “Return-Path:”, возможно “Reply-To:”. Заголовок “From:” не обязательно должен совпадать с тем, что написано в конверте письма и может представлять некоторое «дружеское имя» (friendly name, friendly from). Заголовок “Return-Path:” копирует отправителя из конверта. Заголовок “Reply-To:” содержит адрес для ответа. Заголовки значимы для почтового клиента (например, MS Outlook), по заголовкам заполняются соответствующие поля.
Рассмотрим пример SMTP-команд для отправки письма с поддельными заголовками “From:” и “Reply-To:”. Подключаемся к почтовому серверу Exchange с помощью telnet:
telnet 10.1.2.3 25
220 Exchange Microsoft ESMTP MAIL Service ready at Wed, 26 Oct 2016 10:28:00 +0300
helo
250 Exchange Hello [192.168.100.100]
mail from: attacker@spoofed.ru
250 2.1.0 Sender OK
rcpt to: uskov@cbs.ru
250 2.1.5 Recipient OK
data
354 Start mail input; end with <CRLF>.<CRLF>
From: Ivanov Ivan <CEO@cbs.ru>
To: Boris <uskov@cbs.ru>
Reply-To: attacker@yandex.ru
Subject: Urgent!
Need your credit card information.
Ivanov Ivan Ivanovich,
CEO,
Computer Business Systems
.
250 2.6.0 Queued mail for delivery
quit
221 2.0.0 Service closing transmission channel
В данном примере мы отправляем с реального адреса attacker@spoofed.ru письмо, но в заголовке “From:” указываем имя и адрес руководителя компании, а в заголовке “Reply-to” адрес на mail.yandex, куда невнимательный сотрудник отправит конфиденциальную информацию. В итоге письмо в почтовом клиенте Outlook будет выглядеть следующим образом:
А если нажать «Ответить» автозаполнится адрес получателя:
Как видно из предыдущего примера, отправить поддельное письмо не составляет большого труда, если почтовый сервер не защищён. В худшем случае, значение в конверте письма mail from также может быть подменено на легитимное. Если тело письма составлено аккуратно и с применением результатов социальной инженерии, выявить поддельное письмо становится всё сложнее для конечного пользователя. Ситуация ещё более усугубляется для пользователей мобильных устройств. Концепция мобильности предполагает, что все действия выполняем быстро, «на ходу», да ещё и на небольшом экране, не обращая внимание на мелочи/несоответствия. Кстати говоря, в примере про сделку с зарубежной компанией у знакомого тоже не обошлось без фактора «мобильности». Часть переписки проходила с мобильного устройства, почтовый клиент в поле отправителя отображал только имя/фамилию отправителя, но скрывал полный почтовый адрес.
Не существует единого метода борьбы с подменёнными письмами. Защита от данного вида атак требует комплексного и многоуровневого подхода. Попробую выделить основные подходы борьбы с поддельными письмами:
- Фильтрация на основе репутации сервера-отправителя.
- Фильтрация на основе проверок DNS-записей сервера отправителя.
- Фильтрация на основе проверок DNS-записей домена отправителя из конверта письма.
- Фильтрация на основе проверок SPF-записей.
- Фильтрация на основе DKIM.
- Фильтрация на основе DMARC.
- Создание гранулярных фильтров «вручную».
Из перечисленных методов первые три являются фильтрами грубой очистки, позволяющими бороться с массовыми рассылками спама, вредоносной почты, в том числе с подменённым отправителем. В данном случае злоумышленники используют эффект массовости, не осуществляя до атаки какой-либо специальной рекогносцировки и не стараясь точно подобрать контент под получателя. Например, письма от лица Сбербанка с просьбой сообщить какую-либо конфиденциальную информацию (логин/пароль от личного кабинета, номера карт, PIN-коды), рассылаемые на огромное число получателей. По принципу, кто-нибудь да клюнет.
Методы 4-6 помогают бороться с точными подменами отправителей, то есть ситуациями, когда в заголовках письма злоумышленник указывает с точностью до знака подменяемый отправитель.
К методу 7 предстоит прибегать в случаях как в примере про переписку с зарубежной компанией в начале статьи, когда заголовок письма модифицируется таким образом, чтобы стать похожим на реального отправителя. Но при этом, заголовок в подменённом письме всё же отличается от заголовка реального отправителя, что позволяет обойти проверки методами 4-6.
Рассмотрим перечисленные методы более подробно.
1. Фильтрация на основе репутации сервера-отправителя. Если система защиты корпоративной почты обеспечивает качественную базу репутаций отправителей, мы можем фильтровать значительный процент распространителей спама и вредоносной корреспонденции любого вида уже на этапе установления TCP-сессии, не заглядывая ни в тело, ни в конверт письма. Такой подход существенно экономит ресурсы системы. Как только отправитель пытается установить TCP-сессию на порт 25, система защиты определяет репутацию для IP-адреса отправителя, и принимает решение.
Ниже сводка по нашей организации:
В зависимости от репутации отправителя Cisco ESA не только принимает решение отбросить письмо или пропустить далее, но и определяет дальнейший сценарий обработки письма. Для различных значений репутации мы можем применять различные политики:
2. Фильтрация на основе проверок DNS-записей сервера отправителя. Отправитель почтовых сообщений должен быть корректно зарегистрирован в DNS. Для отправителя должны существовать корректные PTR запись, А-запись. Отправитель должен корректно представляться в SMTP-команде HELO. При массовых рассылках спама и вредоносов злоумышленники постоянно меняют IP-адреса рассылающих серверов. Адреса меняются каждый день и даже чаще. Регистрировать необходимые записи в DNS сложно и даже невозможно. Поэтому, многие распространители спама и вредоносных сообщений пренебрегают данными требованиями, соответственно, появляется возможность их фильтровать по признакам DNS.
- Проверка наличия PTR-записи. PTR запись должна быть единственной и возвращать корректное каноническое имя хоста отправителя.
- Проверка наличия А-записи для имени хоста, найденного на первом шаге (по PTR-записи).
- Проверка совпадения forward DNS lookup для А-записи из предыдущего шага с IP-адресом отправителя.
Если PTR-запись не существует, или найденная A-запись указывает на сторонний IP-адрес, с наибольшей долей вероятности мы принимаем сессию от нелегитимного отправителя. Для таких отправителей на Cisco ESA мы можем применять ограничивающие политики (отбрасываем письмо, отправляем в карантин, модифицируем заголовок, ограничиваем количество сессий и т.д.), в зависимости от поставленных требований.
Хочу обратить внимание, на данном этапе проверок ESA не контролирует легитимность отправителя, то есть не проверяет, имеет ли право отправитель слать письма от указанного домена. Более того, на данном этапе ни конверт письма, ни заголовки не просматриваются. Отрабатывает только проверка по IP-адресу. Например, если письма от домена mycompany.ru будут идти с «левого» IP-адреса с корректными A- и PTR-записями в DNS, например, «smtp.spamer.ru», проверка пройдёт успешно и письмо будет пропущено для дальнейшей обработки. Проверка легитимности отправителей осуществляется другими методами (см. далее SPF-записи, DKIM, DMARC).
3. Фильтрация на основе проверок DNS-записей домена отправителя из конверта письма. Информация в mail from также подлежит проверке по DNS. На примере Cisco ESA письмо может быть отброшено если:
- Информация о домене отправителя отсутствует в конверте.
- Имя домена не разрешается в DNS.
- Имя домена не существует в DNS.
Данный тип проверок не особенно эффективен, отбрасываются письма с заведомо неверно сформированными конвертами.
4. Фильтрация на основе проверок SPF-записей. SPF – Sender Policy Framework – система проверки отправителей электронных сообщений. Проверка методом 2 «DNS-записи сервера отправителя» говорит только о том, что для IP-адреса отправителя существуют необходимые записи в DNS (PTR- и A-записи). Однако данные проверки не помогают определить, имеет ли право сервер отправитель слать письма от указанного домена. Стоит заметить, часто A-записи почтовых серверов содержат в себе имя домена компании, например, smtp01.mycompany.ru. Если этот же сервер используется для приёма почты, то эта же A-запись будет входить и в MX-запись. Можно предположить, что если письмо от mycompany.ru отправлено с сервера smtp01.mycompany.ru, то это письмо не поддельное, в противном случае, если письмо отправлено с smtp01.anythingelse.ru, письмо поддельно. Но на самом деле часто компании отправляют электронную корреспонденцию не напрямую со своих почтовых серверов, а через какие-либо дополнительные серверы MTA, например, через сервера своих провайдеров. В этом случае получаем, что письмо от домена mycompany.ru отправляется через серверы, к примеру, smtp01.provider.com, smtp02.provider.com и т.д. Канонические имена серверов отправителей не принадлежат домену компании mycompany.ru. Как на стороне получателя в данном случае понять, являются ли серверы-отправители легитимными или нет? Эту задачу решает система проверок SPF.
Задача решается опять же с помощью DNS. Для домена отправителя публикуется TXT-запись специального формата. В данной TXT-записи перечисляются IP-адреса, подсети или А-записи серверов, которые могут отправлять корреспонденцию, серверы, которые не являются легитимными отправителями. Благодаря системе SPF получатель может обратиться к DNS и уточнить, можно ли доверять серверу отправителю письма, или же сервер отправитель пытается выдать себя за кого-то другого.
На данный момент SPF-записи формируют далеко не все компании.
5. Фильтрация на основе DKIM. DKIM — DomainKeys Identified Mail – технология аутентификации электронных сообщений. Вернёмся к примеру из рассмотрения SPF-записей, когда компания mycompany.ru отправляет корреспонденцию наружу через провайдерские MTA smtp01.mycompany.ru и smtp02.provider.com. Для MTA существуют SPF-записи, поэтому письма от mycompany.ru, отправленные через эти серверы, успешно проходят проверку. Но что если данные MTA окажутся скомпрометированными, и злоумышленник также получит возможность отправлять поддельные письма через эти серверы? Как установить подлинность отправителя в этом случае? На помощь приходит аутентификация писем.
Для аутентификации используется ассиметричная криптография и хеш-функции. Закрытый ключ известен исключительно серверу отправителю. Открытый ключ публикуется опять же с помощью DNS в специальной TXT-записи. Сервер отправитель формирует отпечаток заголовков письма с помощью хэш-функции и подписывает его, используя закрытый ключ. Подписанный отпечаток вставляется в заголовок письма “DKIM-Signature:”. Теперь получатель письма с помощью открытого ключа может получить расшифрованный отпечаток и сравнить его с отпечатком полей полученного письма (хеш-функция известна). Если отпечатки совпадают, подписанные заголовки не были изменены при передаче, а отправитель письма, сформировавший заголовок “DKIM-Signature:”, является легитимным.
6. Фильтрация на основе DMARC. DMARC — Domain-based Message Authentication, Reporting and Conformance — техническая спецификация, описывающая как именно следует использовать результаты проверок SPF и DKIM. Политики DMARC публикуются как обычно с помощью DNS в TXT-записи. Политики DMARC указывают, что именно нужно делать с письмом на стороне получателя (доставить, отбросить, отправить в карантин), в зависимости от результатов проверок SPF и DKIM. Кроме того, DMARC обеспечивает обратную связь отправителя с его получателями. Отправитель может получать отчёты о всех электронных письмах, имеющих домен отправителя. Информация включает IP-адреса серверов-отправителей, количество сообщений, результат в соответствии с политиками DMARC, результаты проверок SPF и DKIM.
7. Создание гранулярных фильтров «вручную». К сожалению, далеко не все организации используют SPF, DKIM, DMARC при отправке электронной почты. Кроме того, в некоторых случаях проверки SPF, DKIM и DMARC могут пройти успешно, но письма оказываются всё равно подделанными (Cousin domain, Free Email Accounts). Для таких случаев помогают настройки фильтров. Возможности различных систем по созданию правил фильтрации разнятся. Фильтры настраиваются под различные сценарии проведения атаки и зависят от особенностей организации почтовых систем в компаниях. Например, в каких-то компаниях могут приходит из вне письма с доменом-отправителем этой же компании. Хотя в большинстве случаев такие письма должны пересылаться только в пределах периметра организации.
Мы более ориентированы на Cisco ESA, поэтому в заключении рассмотрим несколько примеров настройки фильтров на этом решении, а также интересную функциональность, появившуюся в релизе 10.0 (от июня 2016) программного обеспечения для Cisco ESA — Forged Email Detection. Данная функциональность как раз позволяет бороться с неточной подделкой отправителей, как в примере из начала статьи. Если заинтересовало, велкам в подкат.
Если Content Filters не достаточны, чтобы описать условия попадания письма под действие фильтра, можно использовать Message Filters. Message Filters настраиваются из командной строки, используют регулярные выражения для описания условий и позволяют создавать сложные условия (например, If (((A and B) and not C) or D)). Message Filters обрабатывают письмо до Content Filters и позволяют создавать более гранулярные правила.
Рассмотрим несколько сценариев подделки отправителя и соответствующие фильтры Cisco ESA для борьбы с атакой.
Пример 1. Письма с доменом организации в отправителе не должны приходить из вне. Пример взят из с cisco.com: ссылка. Пример актуален в том случае, когда организация не готова публиковать свои SPF и Domain Keys в DNS. В данном примере используется следующий Message Filter:
MarkPossiblySpoofedEmail:
if ( (recv-listener == "InboundMail") AND
(subject != "\{Possibly Forged\}$") ) // Если письмо получено из вне и в заголовке ещё не помечено, что письмо как «Possibly Forged»
{
if (mail-from == "@yourdomain\.com$") OR
(header("From") == "(?i)@yourdomain\.com") // Если в конверте в mail from присутствует домен организации или в заголовке From присутствует домен организации
{
strip-header("Subject");
insert-header("Subject", "$Subject {Possibly Forged}");
}
}
// Добавляем к заголовку запись «Possibly Forged»
В качестве действия могут быть выбраны и другие варианты: отправить в карантин, отбросить письмо и т.д.
Пример 2. В начале статьи мы рассматривали пример, когда mail from из конверта письма был не поддельный (attacker@spoofed.ru, то есть атакующий пишет свой верный адрес), однако в заголовке From указывался поддельный адрес (uskov@cbs.ru). При этом, ничто не мешает атакующему завести SPF и Domain Keys в DNS для домена spoofed.ru. Получаем, что поддельное письмо пройдёт проверки SPF и DKIM. Также, проверки SPF и DKIM будут успешно пройдены, если злоумышленник использует бесплатную почту (free mail accounts – gmail.com, mail.ru и т.д.).
Бороться с данной ситуацией можем, проверяя равенство значений в mail from и заголовке From. Сразу стоит оговориться, в общем случае RFC совершенно не требует, чтобы mail from равнялся From. Поэтому применять такой фильтр нужно только к некоторым отправителям.
У Cisco ESA на данный момент (ноябрь 2016) есть ограничение: нельзя сравнивать значения полей между собой, то есть нельзя просто написать if mail from != header (From). Задачу можно решить другим способом. Создаём словарь имён отправителей Spoofed_senders, в который будем заносить отправителей, подверженных подмене. В фильтре ставим условие: если mail from не содержит отправителя из словаря, а заголовок From содержит отправителя из словаря, выполнять действие. Можно отправить письмо в карантин или отбросить, но cisco рекомендует записать подделанное значение заголовка From в новый заголовок X-Original-From, а поле From вообще удалить. В этом случае Cisco ESA автоматически сформирует заголовок From из значения mail from. Пример такого фильтра:
SpoofedSendersFilter:
if (header-dictionary-match("Spoofed_Senders","From", 1))
AND
(NOT (mail-from-dictionary-match("Spoofed_Senders", 1))) // Если поле From содержит имя из словаря, а значение mail from не содержит имя из словаря
{
insert-header("X-Original-From", "$From");
strip-header("From");
} // Формируем заголовок X-Original-From и удаляем заголовок From
Пример 3. Злоумышленники используют адреса, похожие на адреса отправителей, так называемые “Cousin domains” и “Cousin addresses”. Например, адрес uskov@cbs.ru заменяется на usk0v@cbc.ru. Для домена cbc.ru формируются SPF и Domain Keys в DNS, поэтому письма проходят соответствующие проверки SPF и DKIM успешно, а получатель письма видит знакомого отправителя. Бороться с такой подменой сложнее. Придётся заносить в словарь Spoofed_senders из предыдущего примера все похожие варианты имён отправителей и названий домена, что едва-ли возможно.
Для борьбы с данным видом подмены отправителей у Cisco ESA, начиная с релиза AsyncOS 10.0 (от июня 2016 года), появилась интересная функциональность “Forged Email Detection”. Сперва создаётся словарь имён отправителей (в примерах используется имя словаря FED), как и в предыдущем примере, в который будем заносить отправителей, подверженных подмене. Этот словарь формируется из имён отправителей, а не из имён почтовых ящиков. То есть нужно писать Olivia Smith вместо olivia.smith@example.com. Система Forged Email Detection будет сверять заголовок From с именами из словаря FED и выдавать вероятность (от 1 до 100), с которой отправителя можно считать подделанным.
Например, если в словаре есть “John Simons”, а в заголовке From фигурирует j0hn.sim0ns@example.com, система выдаст вероятность подделки 82. Если в заголовке From фигурирует john.simons@diff-example.com (то есть то же имя, но другой домен), система выдаст вероятность подделки 100.
Forged Email Detection настраивается через Content Filters или Message Filters. Ниже скриншот настройки Content Filter:
Необходимо указать имя словаря, и пороговое значение вероятности, после которого считаем отправителя подделанным. Для данного условия можно выбрать любое из доступных действий (отбросить, отправить в карантин, модифицировать тему письма и т.д.). Кроме того, появилось новое дополнительное действие для Forged Email Detection: заменить значение заголовка From на значение из mail from. Данное действие не предлагает каких-либо опций:
Заключение
Атаки на электронную почту с подделкой отправителя, к сожалению, повседневная реальность. А последствия успешного проведения такого рода атаки могут быть крайне плачевными как для каждого человека в отдельности, так и для атакуемой организации в целом. Возможны существенные материальные потери и утечки конфиденциальной информации. Надеюсь, статья поможет разобраться как с анатомией атак поддельными письмами, так и со способами защиты. В примерах я оперировал решением Cisco ESA, однако, инструменты защиты, упомянутые в статье, реализуемы и на других системах защиты корпоративной электронной корреспонденции.
Автор: CBS