Электронная почта появилась так давно, что в сознании закрепилась как неотрывная часть интернета. Появление других способов общения — мессенджеров, социальных сетей — не сильно снизило востребованность старой доброй собачки @. Но задумывались ли вы, что электронная почта — далеко не такой надёжный способ общения, каким кажется? Ведь подделать отправителя — дело довольно простое, об этом регулярно, раз в пару лет, выходят статьи и инструкции.
Отправителя письма можно подделать
Вот эти две свежие статьи на Geektimes сподвигнули меня высказаться о наболевшей проблеме. С неё сталкивался и я, когда настраивал VPS с почтовым сервером Exim:
- Проблемы безопасности почты Mail.ru: https://habr.com/ru/articles/357408/
- Проблемы безопасности Яндекс.Почты (а еще ПДД и Коннект): https://habr.com/ru/articles/357410/
Автор первой статьи истерично реагирует на обнаруженную «особенность» отправки писем и демонстрирует незнание почтовых протоколов, вторая содержит больше технических подробностей и даёт пищу для размышлений. Вдогонку ранняя статья:
- Подделываем письма от крупнейших российских банков: https://habr.com/ru/articles/326382/
Суть в том, что можно подделать отправителя имейла и получивший письмо может ничего не заподозрить. В поле «от:» письма можно вписать что угодно, как и в случае с настоящей почтой. Прокатывает только при некоторых условиях, но их достаточно, чтобы получить, например, письмо от известного зелёного банка с просьбой ввести свои данные на постороннем сайте.

Почему же нельзя проверять подлинность отправителя до того, как письмо увидит пользователь? Вот комментарий с Хабра, проливающий свет на проблему:
… Защита от подделки писем должна происходить с двух сторон: владельца сервиса и получателя письма (в большинстве случаев это почтовый провайдер, например Mail.ru).
К сожалению, владельцы сервисов не очень хотят защищать пользователей от отправки поддельных писем от имени этого сервиса, что и описывалось в статье по ссылке.
Отдельная проблема — почтовые сервисы. Они должны проверять письма на подделку, но не всегда это делают (по разным причинам) или делают неправильно. Например, есть забавная уязвимость в Yahoo, которая позволяет обойти проверку DMARC и SPF и подделать письмо от абсолютно правильно настроенного сервиса. …
Из обсуждения ( https://habr.com/ru/articles/357408/comments/ ) становится ясен масштаб беды. Дело неприятное и парадоксальное. Либо почтовые службы начнут проверять подлинность писем и отбрасывать с поддельным полем «от», но тогда перестанут приходить всякие рассылки и оповещения с некорректно настроенных серверов, либо начнут пропускать письма с несоответствиями в заголовках и обрабатывать их различными антиспам-фильтрами в надежде, что в ящик пользователю попадёт только «правильная» корреспонденция.
Знающие люди могут поправить меня: получатель всегда может посмотреть исходник письма, по ним подлинность определяется на раз-два.
Вот только когда вы последний раз смотрели на хедеры письма? В веб-интерфейсах почты это сделать можно, но нужно понимать, что это вообще такое и зачем нужно. В школе на уроках информатики об этом не расскажут, в ВУЗах на не программно-инженерных специальностях — тоже. Так с чего бы среднеокруглённому сотруднику офиса знать, как проверять имейлы на подлинность отправителя?
Проверяем подлинность сами
Так как почтовые серверы никто настраивать не хочет, придётся научиться самим проверять подлинность особо важных писем. Расскажу, как это делать в трёх популярных почтовых сервисах. Способ не гарантирует 100% точность, зато относительно прост.
Для начала откройте само письмо, в подлинности отправителя которого вы не уверены. Затем нужно открыть исходный текст письма.
Почта от Гугла GMail: меню письма — «Показать оригинал».


Yandex: кнопка меню с тремя точками — «Свойства письма».
Mail.ru: кнопка меню справа от заголовка письма — пункт «Служебные заголовки».

Откроется простыня (ПРОСТЫНИЩЕ!) текста, в котором нужно найти три строчки (можно поиском по странице, нажав Ctrl+F, они будут в начале текста):
- From: «Имя» <адрес@ящика> (то, что видно в поле «От:», когда мы открываем письма).
- Return-Path: <адрес@ящика> (скорее всего настоящий адрес отправителя).
- Reply-To: <адрес@ящика> (это адрес, который подставится в поле «Кому:» при ответе на письмо, поле не всегда имеется).
Если адреса первых двух полей совпадают, скорее всего, письмо не подделка.
Третий служебный заголовок письма «Reply-To» вставляется не всегда. Мошенниками он применяется для более хитрой схемы. Допустим, приходит такое письмо начальника подчинённому:
От: [email protected] Тема: напомни пароль от онлайн-банка Сообщение: Оставил блокнот в офисе, напомни пароль от личного кабинета банка.
Чтобы ответ одураченного сотрудника ушёл не к настоящему боссу на [email protected], а на поддельный [email protected], пригодится поле «Reply-To». Нажав на «Ответить», в окне ответа подставится адрес, для усыпления бдительности похожий на настоящий.
Это, конечно, очень примитивный пример и теоретически можно другими способами подделать имейлы. Сличая пару служебных заголовков можно защититься от самых распространённых методов, если нужно больше знаний — читайте стандарт RFC 5321 — Протокол SMTP.
Когда всё починят?
Боюсь, не в ближайшее время. Парочка статей, вышедших на популярном ресурсе, да моя скромная заметка — капля в информационное море. Как ни парадоксально, но Яндекс, Майл.ру и прочие сервисы не могут просто так взять и включить строгую проверку отправителя письма, потому что тогда перестанут приниматься письма с некорректно настроенных серверов.
Хотя есть один простой способ и принять, и пометить подозрительные письма — просто в начало темы ставить метку [UNTRUSTED] или [ОТПРАВИТЕЛЬ НЕ ПОДТВЕРЖДЁН]. Письмо пришло? Да! Почему пометка появилась? Да потому то отправляющие письма сервера не работают по стандартам. Неважно, открыто ли письмо в веб-интерфейсе почты или в Outlook/The Bat/прочей программе, пометка о не удостоверенном отправителе будет видна. Вот почему этого не сделали давно — мне сие не ведомо.