Анализ email

Электронная почта (e-mail) распространена повсеместно. Через почту происходит обычное общение, через почту рассылается спам, через почту выполняются фишинговые атаки, а также рассылают письма мошенники.

Кроме отображаемой информации (текста письма, полей «Кому» и «От кого») электронные письма также содержат заголовки с технической и мета информацией. Электронные письма прежде чем быть доставленными адресату могут пройти через несколько почтовых узлов. Как правило, каждый почтовый узел добавляет свои заголовки, поэтому анализ почты может дать интересную информацию — вплоть до IP адреса отправителя.

Как по email узнать IP

На самом деле — каждый почтовый узел записывает IP адрес, откуда пришло письмо. То есть IP адрес отправителя также записывается! Это отлично работает если используются настольные почтовые клиенты (например, Thunderbird, The Bat!). Но сейчас очень многие пользователи предпочитают веб-интерфейс для доступа к почте (примеры mail.google.com, mail.yandex.ru, e.mail.ru). При использовании веб-интерфейса веб-браузер передаёт данные (например, отправленное письмо) в почтовую программу и эта почтовая программа передаёт письмо адресату (или промежуточному почтовому узлу) — и адресат видит IP адрес сервера (например, сервера mail.google.com) — в этом случае настоящий IP адрес отправителя не попадает в заголовки. Плохая новость в том, что веб-интерфейсы стали весьма популярны.

Хорошая новость в том, что злоумышленники (спамеры и мошенники) далеко не всегда используют веб-интерфейс — им нужно отправить множество писем и веб-интерфейс в этом случае просто неудобен.

Другая хорошая новость в том, что в зависимости от структуры сети отправителя, в заголовки может попасть даже IP локальной сети. Пример:

Может попасть имя компьютера:

Может попасть информация о почтовом клиенте отправителя:

Или так:

Подделка email адреса отправителя

Нужно знать, что в качестве адреса отправителя может быть указано что угодно — абсолютно что угодно. В том числе ваш собственный адрес электронной почты. На этом основываются некоторые фишинговые атаки.

Подделка IP адреса отправителя

IP адрес и имя хоста о предыдущем почтовом узле записывается каждым последующим узлом. Поэтому если вы доверяете почтовому узлу (например, письмо уже доставлено до сервера Google), то информацию об IP предыдущего узла можно считать надёжной. Я видел письма от мошенников (одно из таких мы немного поковыряем далее), в котором прежде чем быть доставленным до узла вызывающего доверие, оно прошло через ненадёжный один или два узла. Например:

Ненадёжный узел 1Ненадёжный узел 2Надёжный узел 1Надёжный узел 2

Информация о каждом узле содержится в заголовке. При этом можно доверять только информации об IP хоста который обозначен как «Ненадёжный узел 2». Информация об IP адресе хоста «Ненадёжный узел 1» также имеется в заголовках, но соответствует ли она действительности, и вообще, были ли какие-либо точки пересылки электронного письма до второго ненадёжного узла — сказать уже невозможно. Итак, те, кто помечен жёлтым, их IP мы можем считать достоверными. Все остальные данные о тех, кто стоит в цепочке ранее, могут быть спуфлены (подделаны).

Структура электронного письма

Структура электронного письма не является жёсткой и возможны варианты. В любом случае сначала идут заголовки. В самом простейшем случае письмо состоит из заголовков и сообщения в виде простого текста:

Кстати, как и в случае с HTTP протоколом, заголовки не нужно путать с тегом <head> в HTML коде или с заголовками на странице (например, оформляемыми тегами <h1>, <h2> и так далее. В данном случае заголовки — это метаинформация, которая является частью протокола.

Современные письма обычно имеют более сложную структуру. Для отделения частей письма используется конструкция из заголовков:

Content-Type: ...; boundary="..."

В качестве значения boundary указывается уникальная строка, которая является разделителем для частей письма. После этого разделителя обычно указываются заголовки:

Content-Type: ...; charset=...
Content-Transfer-Encoding: ...

Они устанавливают:

  • тип содержимого
  • кодировку
  • кодировку передачи

Конструкция Content-Type: …; boundary="…" может использоваться более чем один раз, устанавливая разные разделители. Получается что-то вроде вложенных структурных элементов.

Те части, которые отделены уникальной строкой разделителя, иногда являются простым текстом. Иногда это HTML код, который по сути также является текстом. К письму могут быть прикреплены файлы (например, документ, фотография). В этом случае используется кодировка, которая позволяет переводить бинарные данные в текст. Ниже я покажу, как извлечь файлы из имейла.

Обычный текст или HTML код также могут быть переведены в кодировку — всё зависит от того, кто отправляет и его почтового клиента.

Поскольку даже бинарные файлы (если они прикреплены к письму) переводятся в «текстовый» вид, то исходный файл электронного сообщения представляет собой текстовый файл, который можно посмотреть в любом текстовом редакторе.

Заголовки email

Каждое электронное сообщение обязательно содержит заголовки. Адрес получателя и отправителя прописаны именно в заголовках. В зависимости от почтовой программы, в письме может содержаться различный набор заголовков. Некоторые присутствуют в письмах обязательно, некоторые используются очень редко.

Обычно почтовые клиенты не выводят заголовки, чтобы их посмотреть, например, в Gmail нужно выбрать пункт меню Показать оригинал:

А в веб-интерфейсе почты от Yandex нужно в меню выбрать Свойства письма:

У mail.ru нужно нажать кнопку Ещё, а затем выбрать пункт меню Служебные заголовки:

Важно знать, что практически всё в заголовках может быть поддельным — не настоящим, то есть все данные могут быть фиктивными кроме строки Received: , которая добавлена вашим компьютером или компьютерами, которым вы абсолютно доверяете.

Более подробно некоторые популярные заголовки email будут рассмотрены в самом конце. Сейчас же мы подробно остановимся на заголовке Received:

Received: в email

Уже было сказано, что стоит доверять только записям, которые добавлены только надёжными узлами — это относится именно к заголовку Received:. То есть нужно каждый раз принимать решение — заслуживает данная запись доверия или нет.

Вверху email идут самые «свежие» заголовки, чем ниже расположен заголовок Received:, тем он «старее», то есть тем он раньше добавлен.

Типичная структура этого заголовка:

Received: from ... by ... for ...

То есть в начале после from идёт IP адрес и имя хоста ОТ которого получено сообщение, затем после by идёт информация о том, КЕМ получено сообщение, а после for информация об email адресе кому в конечном счёте предназначено это сообщение.

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

Received: from ns39859.ip-91-121-26.eu (prestashopitaliano.it [91.121.26.53]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sendmail8.hostland.ru (Postfix) with ESMTPS id 28E667A00BD for <al@mi-al.ru>; Tue,
  8 Jan 2019 01:26:51 +0300 (MSK)

Из него следует, что получено сообщение от хоста ns39859.ip-91-121-26.eu. В скобках идёт имя хоста (полученное обратным преобразованием из IP адреса, а также в квадратных скобках сам IP адрес). Это сообщение было получено хостом sendmail8.hostland.ru на котором работает программа Postfix. В конечном счёте это сообщение предназначено для адреса al@mi-al.ru.

Поиск IP адреса источника мошеннических писем

У всех у нас в папке СПАМ есть письма, на которых можно потренироваться. Я решил выбрать самое интересное, письмо с темой:

This account has been hacked! Change your password right now!

Суть письма в том, что меня взломали и украли все полимеры. Я сильно не вчитывался, но в соответствии с этим письмом мне обязательно нужно отправить Биткоины на адрес 1AyRZviUxoBaCU1pJM5m7C1V2LdhPYiRcB чтобы этот год принёс мне удачу. Ах да, самое смешное — чтобы доказать, что меня действительно взломали, это письмо «было отправлено с моего адреса»…

Это было бы очень смешно, если бы судя по транзакциям за последнее время на этот кошелёк не пришло почти 13 тысяч долларов… А разных адресов кошельков в подобных рассылках много. Один пользователь сообщил, что ему в письме прислали его пароль от электронной почты и роутера. Некоторые люди такие угрозы (разослать порочащие захваченные данные) принимают всерьёз.

Сразу будем иметь в виду — что практически наверняка использовались IP адреса взломанных компьютеров, устройств и серверов. Например, здесь довольно много отзывов тех, кому пришло это письмо с этим же самым адресом кошелька. Некоторые приводят информацию из заголовков — она везде разная. У меня она тоже отличается.

Многие находили в заголовках надпись Detective с цифрами — видимо, это особенность используемого программного обеспечения:

  • Detective26583 (unknown [123.24.206.222]), loft9675.serverprofi24.eu
  • Detective82182 IP address 113.160.165.88
  • Detective12523 (unknown [123.21.91.137]) (Authenticated sender: poohmike@com2com.ru)
  • Detective51686, via mail.inspectraperu.com
  • from [171.224.231.144] (helo=Detective75617) by mail.uos.net.ua with esmtpsa
  • Received: from Detective54508 ([85.41.190.130])
  • (mail.suspicious.org [104.131.63.74]) Detective70638 ( [85.96.174.183]) (Auth. sender: tidepool)
  • Received: from Detective31682 (unknown [41.242.143.42])
  • Detective06782 ([88.202.121.136]) by smtpcmd06.ad.aruba.it
  • X-Source-Sender: (Detective71582) [196.1.125.114]:37299 X-Source-Auth: mark@nmclippers.com

Мы просто учимся анализировать заголовки — в данном случае найденные IP не принадлежат мошеннику — это практически наверняка.

Смотрим в заголовки письма:

Как мы помним, самые первые заголовки располагаются внизу, самый нижний заголовок Received:

Received: from [82.193.112.236] (helo=Detective20033) by ns39859.ip-91-121-26.eu with esmtpsa (TLSv1.2:DHE-RSA-AES256-GCM-SHA384:256) (Exim 4.84) (envelope-from <al@mi-al.ru>) id 1gge8Y-00013H-39 for al@mi-al.ru; Tue, 08 Jan 2019 00:16:50 +0100

Очистим лишнее:

Received: from [82.193.112.236] (helo=Detective20033) by ns39859.ip-91-121-26.eu for al@mi-al.ru

То есть изначально письмо было отправлено с IP адреса 82.193.112.236 — и это неудивительно, я посмотрел тот роутер — там в меню вообще нет пункта для смены заводского пароля! (как тебе такое, Илон Маск?). При этом роутер поддерживает VPN, в том числе в качестве сервера — то есть с лёгкостью мог быть использован в качестве промежуточного узла. Либо у роутера могли взломать Wi-Fi пароль.

К роутеру постоянно кто-то подключается — я сохранил журнал подключений на примерно то время, когда было отправлено письмо.

Смотрим следующий заголовок:

Received: from ns39859.ip-91-121-26.eu (prestashopitaliano.it [91.121.26.53]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sendmail8.hostland.ru (Postfix) with ESMTPS id 28E667A00BD for <al@mi-al.ru>; Tue,
  8 Jan 2019 01:26:51 +0300 (MSK)

Очистим лишнее:

Received: from ns39859.ip-91-121-26.eu (prestashopitaliano.it [91.121.26.53]) by sendmail8.hostland.ru (Postfix) for <al@mi-al.ru>

Здесь sendmail8.hostland.ru — это сервер, которому я доверяю, — это хостинг, на котором хостится сайт mi-al.ru, (это его email al@mi-al.ru). Таким образом, эту строку Received: можно считать достоверной. Можно быть уверенным, что это письмо в действительности прошло через почтовый узел ns39859.ip-91-121-26.eu с IP адресом 91.121.26.53. Возвращаясь к самой первой строчке с заголовком Received: , она может быть как настоящей, так и спуфленой (поддельной).

Там дальше ещё есть заголовки:

Received: from sendmail8.hostland.ru (sendmail8.hostland.ru. [185.26.123.238])
        by mx.google.com with ESMTPS id 9-v6si51001889ljo.136.2019.01.07.14.26.50
        for <proghoster@gmail.com>
        (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Mon, 07 Jan 2019 14:26:50 -0800 (PST)

Затем:

X-Received: by 2002:a2e:58b:: with SMTP id 133-v6mr6235012ljf.127.1546900010472;
        Mon, 07 Jan 2019 14:26:50 -0800 (PST)

И, наконец, письмо доставлено:

Received: by 2002:a19:6750:0:0:0:0:0 with SMTP id e16csp4171758lfj;
        Mon, 7 Jan 2019 14:26:50 -0800 (PST)

Но они только показывают путь письма по доверенным почтовым узлам — то есть там ничего интересного.

Выводы: источником письма был IP адрес 82.193.112.236 или хост ns39859.ip-91-121-26.eu (91.121.26.53). Хотя письмо предназначено для email адреса на домене *@mi-al.ru, в конечном счёте оно пришло на почтовый сервер Gmail (mx.google.com), причём для адреса proghoster@gmail.com — то есть произошла переадресация почты.

Как извлечь файлы из email

Иногда просто невозможно скачать прикреплённый к письму файл, например, файл распознаваемый Gmail как вредоносный она просто не даёт скачать из веб-интерфейса. Чтобы получить файлы в подобных случаях (например, для анализа), можно скачать полное письмо вместе с заголовками и извлечь из него вложенные файлы.

По умолчанию при показе заголовков Gmail сокращает длинные письма, поэтому чтобы была возможность извлечь вложенные файлы нажмите на ссылку «Скачать оригинал»:

Яндекс.почта сразу показывает полные письма.

Самый простой способ извлечь файлы и просмотреть письмо — это сохранить его с расширением .eml и открыть любым почтовым клиентом (например, Thunderbird, The Bat!).

Можно исследовать и извлекать вложения вручную. Пример заголовков, которые описывают вложение:

Content-Type: text/plain; name="Список-Физика.txt"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="Список-Физика.txt"

Имя файла вложения - «Список-Физика.txt», он закодирован в base64. Чтобы раскодировать base64 можно использовать одноимённую утилиту Linux base64. Для этого сохраните строки, которые кодируют вложение в файл, в отдельный файл, например, с именем ФАЙЛ_ИЗ_ВЛОЖЕНИЯ. Затем выполните команду вида:

echo `cat ФАЙЛ_ИЗ_ВЛОЖЕНИЯ | base64 --decode` > ИЗВЛЕЧЁННЫЙ_ФАЙЛ

Но не всегда применяется кодировка base64 и описанный метод требует ручного анализа и действий, поэтому проще использовать программу mu.

Для установки mu в Kali Linux, Debian, Ubuntu, Linux Mint и их производные:

sudo apt install mu

Для установки mu Arch Linux, BlackArch и их производные:

sudo pacman -S mu

Для показа вложений письма без их извлечений запустите команду вида:

mu extract ПИСЬМО

В которой вместо ПИСЬМО укажите путь до файла email.

Например, файл называется extract original_msg.txt, тогда команда следующая:

mu extract original_msg.txt

Пример вывода:

MIME-parts in this message:
  1 <none> text/plain [< none >] (0,4 kB)
  2 <none> text/html [< none >] (0,6 kB)
  3 Допустимые налоговые схемы. Налоговые проверки 2019.doc application/msword [attach] (75,0 kB)

Строки с [attach] показывают вложенные в email файлы. В данном случае файл называется «Допустимые налоговые схемы. Налоговые проверки 2019.doc», его тип application/msword, то есть это документ MS Word и его размер 75,0 kB.

Две другие строки говорят об элементах письма тип которых text/plain (простой текст) и text/html (HTML код) — это тот текст, который выводится в качестве сообщения, самого электронного письма.

Для извлечения прикреплённых к письму файлов (те, которые с пометкой [attach]) используется команда:

mu extract original_msg.txt -a

Вместо original_msg.txt укажите путь до вашего сохранённого электронного письма.

Если вы хотите сохранить всё: и прикреплённые к email файлы, и текст самого письма, то используйте опцию --save-all:

mu extract original_msg.txt --save-all

Описание email заголовков

Рассмотрим некоторые часто встречающиеся заголовки email. Напомню ещё раз, что все они могут быть подделанными, поэтому только строкам Received:, которые созданы службой вашего компьютера или надёжным сервером, можно полностью доверять.

From

Показывает от кого пришло сообщение. Может быть с лёгкостью подделано, является самым ненадёжным.

Subject

Здесь то, что отправитель поместил в качестве темы email.

Date

Показывает дату и время, когда было создано email сообщение.

To

Здесь показывается кому адресовано это сообщение, но может не содержать адрес получателя.

Return-Path

Адрес email для ответного письма. Это то же самое, что и "Reply-To:".

Envelope-To и Envelope-From

Эти заголовки, как и To и From, показывают получателя и отправителя письма. Но заголовки To и From предназначены для того, кто читает письмо, либо для почтовой программы. Протокол SMTP, который используется при передаче писем, использует определённые команды с адресами получателя и отправителя, и информация из этих команд может добавляться в заголовки Envelope-To и Envelope-From.

Delivery Date

Показывает дату и время, когда email был получен почтовым сервисом или почтовым клиентом.

Received

Received является самой важной частью заголовка электронного письма и обычно самой надёжной. Эти строки формируют список всех серверов/компьютеров через которые путешествовало сообщение, чтобы добраться до вас. Строки received лучше читать снизу вверх. То есть первая строка «Received:» — это ваша собственная система или почтовый сервер. Последняя строка «Received:» — это откуда исходит письмо. Каждая почтовая система имеет свой собственный стиль строки «Received:». Каждая отдельная «Received:» обычно показывает машину, с которой получена почта, и машину, которая получила почту.

DKIM-Signature и DomainKey-Signature

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

DomainKeys Identified Mail — метод E-mail аутентификации, разработанный для обнаружения подделывания сообщений, пересылаемых по email. Метод дает возможность получателю проверить, что письмо действительно было отправлено с заявленного домена. DKIM упрощает борьбу с поддельными адресами отправителей, которые часто используются в фишинговых письмах и в почтовом спаме.

Технология DomainKeys Identified Mail (DKIM) объединяет несколько существующих методов антифишинга и антиспама с целью повышения качества классификации и идентификации легитимной электронной почты. Вместо традиционного IP-адреса, для определения отправителя сообщения DKIM добавляет в него цифровую подпись, связанную с именем домена организации. Подпись автоматически проверяется на стороне получателя, после чего, для определения репутации отправителя, применяются «белые списки» и «чёрные списки».

В технологии DomainKeys для аутентификации отправителей используются доменные имена. DomainKeys использует существующую систему доменных имен (DNS) для передачи открытых ключей шифрования.

DomainKeys — система e-mail-аутентификации, разработанная для проверки доменного имени отправителя и достоверности электронной корреспонденции. Спецификация DomainKeys наследует аспекты Identified Internet Mail для создания расширенного протокола, называющегося DomainKeys Identified Mail (DKIM). Эти объединённые спецификации служили основой для рабочей группы IETF при разработке стандарта.

Message-id

Уникальная строка, назначаемая почтовой системой при первом создании сообщения. Может быть легко подделана.

Mime-Version

MIME (Multipurpose Internet Mail Extensions — многоцелевые расширения интернет-почты) — стандарт, описывающий передачу различных типов данных по электронной почте, а также, в общем случае, спецификация для кодирования информации и форматирования сообщений таким образом, чтобы их можно было пересылать по Интернету.

Content-Type

Обычно он будет говорить вам формат сообщения, такой как html или plaintext (простой текст).

X-Spam-Status

Отображает рейтинг спама, созданный вашей службой или почтовым клиентом.

X-Spam-Level

Отображает рейтинг спама, обычно создаваемый вашей службой или почтовым клиентом.

Message Body (тело сообщения)

Это само содержимое письма, которое выводиться получателю.

X-Received

X-Received это нестандартный заголовок (в отличие от Received) добавляемый некоторыми пользовательскими агентами или агентами пересылки почты, такими как сервер google mail SMTP.

X-PHP-Originating-Script

Если письмо отправлено PHP скриптом, то в этом заголовке может содержаться имя этого скрипта PHP. Пример

X-PHP-Originating-Script: 6603:class-phpmailer.php

X-Mailer

Заголовок, который может добавлять PHP скрипт, содержит информацию о программе, которая отправила письмо. Пример:

X-Mailer: PHPMailer 5.2.22 (https://github.com/PHPMailer/PHPMailer)

X-Originating-IP

Содержит IP адрес компьютера, который отправил этот email. Если вы не можете найти заголовок X-Originating-IP, тогда двигайтесь по заголовкам Received для поиска IP адреса отправителя, как это показано выше.

Онлайн сервис для анализа email

Довольно простой сервис анализа электронных писем. В него нужно вставить полное письмо с заголовками, а он покажет цепочку почтовых узлов, через которое прошёл данный email, а также выведет список вложений.

Адрес сервиса: https://suip.biz/ru/?act=email

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

Ещё один пример:

Если у вас есть предложения по сервису, например, какие ещё важные и интересные заголовки следует добавить в этот небольшой отчёт, то пишите здесь в комментариях.

Заключение

Итак, в этой заметке мы учились понимать email заголовки. Хотя сейчас многие используют веб-интерфейс, который обычно не содержит такой интересной информации как IP адрес отправителя, в корпоративной среде довольно часто используются установленные на компьютер почтовые программы. Анализ таких писем может раскрыть больше интересной информации. Обычно письма из рассылок спама и разных вредоносных рассылок также отправляются без использования веб-интерфейса — это также делает анализ таких писем более интересным.

Ещё в этой заметке мы научились извлекать вредоносные файлы из писем, если почтовые сервисы с веб-интерфейсом не дают их скачать.

Вы уже знаете о факультете информационной безопасности от GeekBrains? Комплексная годовая программа практического обучения с охватом всех основных тем, а также с дополнительными курсами в подарок. По итогам обучения выдаётся свидетельство установленного образца и сертификат. По этой ссылке специальная скидка на любые факультеты и курсы!

Рекомендуется Вам:

2 комментария to Анализ email

  1. Аноним:

    Не могу понять, как извлечь заголовки из писем почтового сервиса Tutanota.

    • Alexey Alexey:

      Пишут что нужно нажать Ctrl+h. И ещё пишут, что для «внутренней» почты (от Tutanota к Tutanota) заголовков нет, так как письма отправляются/доставляются внутри.

      Ещё в HowTo пишут что:

      «Tutanota strips headers from emails sent to protect your privacy.», что означает… хрен знает что это означает — нужно спросить у авторов )))))) Видимо, они изобрели email без заголовков )))

Добавить комментарий

Ваш e-mail не будет опубликован.