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

Доступ к архивам дает возможность изменить и удалить отдельные отправления. Может ли это быть полезно злоумышленнику? Очень даже может. Бизнес-процессы цикличны: например, при пролонгации старых договоров сотрудник обращается к архиву и находит письмо с реквизитами, которое может быть заведомо изменено злоумышленником. Или другой пример: статичные архивы часто выступают в роли «алиби» или, наоборот, доказательства причастности при внутренних расследованиях. Злоумышленник просто дописывает в старые цепочки писем сотрудника фразы, выдающие коммерческую тайну, или «согласия» на сомнительные сделки. Либо обратная ситуация: полностью вычищает или удаляет компрометирующие сообщения. Если начнется проверка, архив покажет несуществующую деятельность или, наоборот, не покажет существующую, что пустит службу безопасности по ложному следу или снимет подозрения с реального инсайдера.

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

Рассмотрим ситуацию на примере популярного почтового клиента Microsoft Outlook и его архива PST. PST — это не защищенный журнал электронных отправлений, а структурированный контейнер с набором писем в формате MSG с минимальным контролем целостности. Более того, защита пароля архива PST отключается за 2 минуты свободно распространяемым ПО. Специализированные утилиты или даже скрипты и вовсе способны подменить тему письма, дату, вложенный файл или отправителя. И обычный почтовый клиент никак не сигнализирует о вмешательстве.

В данной статье разберем реальный вариант создания подлога почтового отправления внутри архива PST.

Сначала определим, из чего состоит электронное письмо. Сообщение электронной почты можно разделить на две основные части: технические заголовки (Интернет-заголовки) и тело письма.

Технические заголовки содержат служебную информацию о создании, передаче и получении конкретного отправления, например:

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

Рассмотрим редактирование уже существующего письма в архиве на примере самого популярного решения электронной почты Microsoft Outlook. Создадим тестовое сообщение в почтовом сервисе Mail.ru и через веб-версию почтового клиента отправим его на адрес сервиса Hotmail для получения через приложение Outlook.

Подготовка письма в сервисе Mail.ru.

Письмо успешно получено и открыто в Outlook.

Обратим внимание на дату и время получения. В дальнейшем это нам пригодится.

Что мы видим в технических заголовках письма внутри Outlook:

Мы видим свойства и служебную информацию о создании, передаче и получении этого письма.

Создадим архив PST для тестов, куда будет включено только что полученное сообщение:

Выгрузим полученное письмо в формате MSG из Outlook с помощью File — Save As и изучим его с помощью текстового редактора Notepad++:

Мы видим строки, понятные только проприетарному ПО (например, Microsoft Outlook), но не понятные пользователю. MSG-файл представляет собой бинарные данные, которые невозможно отредактировать обычным способом через текстовые редакторы.

Для того чтобы иметь возможность редактировать письмо, нам нужно конвертировать его в формат, понятный человеку: EML. Формат EML представляет собой обычный текст (plain text), который можно открыть и прочитать обычным блокнотом Windows.

Существует множество онлайн-сервисов для конвертации MSG в EML, но мы сделаем это через Python-скрипт с использованием стандартных модулей для работы с ОС Windows (os, sys, win32com.client).

Что мы видим в технических заголовках письма после его конвертации в EML:

Служебная информация о письме стала читаемой и доступной для редактирования.

Отредактируем тело (послание) полученного EML-файла.

До.

После.

Теперь нам нужно подменить оригинальный файл MSG в PST на наш измененный EML. С помощью Outlook измененный EML можно вернуть обратно в формат MSG, а затем уже вставить в PST. Для замены исходного MSG в PST проще всего использовать специальные онлайн-конвертеры (MSG to PST) и даже специализированные утилиты (MSG2PST, MFCMAPI и др.). Но мы пойдем путем скриптов и локального выполнения всех процессов.

Для этого мы будем использовать связку «Outlook ↔ Python-скрипт ↔ библиотека Redemption.dll».

Redemption.dll — библиотека для разработчиков ПО, которая позволяет удобно и безопасно работать с программным интерфейсом Outlook (MAPI). Также эта библиотека нередко используется для обхода безопасности Outlook при массовой отправке писем или доступе к адресной книге, так как работа через эту библиотеку не «триггерит» системы защиты Outlook.

Весь процесс подмены будет условно разделен на четыре части:

Первые три пункта скрипт выполняет с использованием доступа к установленному Outlook. Через него осуществляется поиск исходного письма по уникальному идентификатору Message-ID или EntryID, которые мы можем посмотреть в исходном MSG или созданном EML. Затем происходит удаление оригинального письма, и наша подделка вставляется на его место. В процессе этих манипуляций скрипт самостоятельно с помощью Outlook конвертирует EML в MSG.

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

Для того чтобы письмо заняло хронологическое место своего оригинального предшественника, необходимо перезаписать исходные реквизиты на низком уровне. В этом как раз помогает Redemption.dll на четвертом шаге скрипта. Выполним скрипт:

Как выглядело исходное письмо в тестовом PST до замены:

Как теперь выглядит письмо:

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

Таким образом можно внести любые правки в существующее письмо. Но это только половина дела. Для злоумышленника мало отредактировать сообщение: нужно сделать так, чтобы не осталось никаких следов изменений. В данном случае единственным признаком редактирования будут являться временные метки PST-архива.

Вернуть метки к состоянию до подмены MSG можно несколькими способами: использовать скриптовые языки ОС (PowerShell, Bash и т. д.), специальное ПО (например, GhostWrite или NewFileTime) или редактирование метаданных напрямую в Hex-редакторе.

Криминалистические следы такой подмены

Метаданные MAPI-свойств (например, измененные даты) в самом PST могут отличаться. При желании их можно скорректировать, используя Redemption.dll. Абсолютно «бесшовной» замены на уровне файловой структуры PST добиться сложно, но визуально для пользователя и при стандартном просмотре все будет выглядеть как оригинал.

Есть несколько моментов, которые невозможно исправить описанным выше способом. Например, MAPI-параметр PR_CREATION_TIME всегда будет содержать время импорта MSG. А параметр PR_LAST_MODIFICATION_TIME будет обновляться при любом взаимодействии с письмом в Outlook. Если у специалиста ИБ будет возможность сравнить письмо с оригинальным, то многие параметры MAPI дадут расхождения (например, EntryID), тем самым подтвердив факт подлога.

В завершение отметим, что тема записи исходных временных меток MSG и PST-архива заслуживает подробного разбора в отдельной статье. Кроме того, некоторые детали процесса были намеренно оставлены за рамками данного материала, чтобы избежать его превращения в учебное пособие для начинающих злодеев.