Есть мнение, что 80% электронных сообщений в мире – это спам. То есть, сообщения электронной почты, которые ну совсем не нужны получателю (и это печально). Но, как будто этого мало, среди спама нередко попадаются письма, посланные с вредоносными целями: например, для похищения или удаления данных, или вымогательства.

КДПВ:



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

Обычно таким действием является «открытие» файла-вложения к письму, то есть ручной запуск обработки файла соответствующей программой-обработчиком внутри операционной системы пользователя.

Что ещё более печально, оппонент-помощник – совсем нередкая птица, и наш спамер-злоумышленник вполне может на него рассчитывать.

И это приводит к


Короче говоря, открывает наша бухгалтерша счёт, а там совсем даже не счёт, а вирус.

Злонамеренные письма, конечно, имеют важные отличия. Но надеяться на внимательность и сознательность пользователей – плохая затея. Даже разудалые концерты на тему «не открывайте такое» с салютом и сольным вокальным выступлением гендира (композиция «Полимеры») со временем стираются из памяти офисного работника.

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

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

И, как нас учат древние: если не можем победить, надо возглавить. Действительно, чем мы хуже спамеров? Да мы гораздо лучше! Да и возможностей у нас больше. А сама задача потребует самых минимальных навыков программирования и практически не затронет существующие системы.
Disclaimer: автор – не спамер, спамер – не автор. Автор только и исключительно на стороне добра.
Задача очень простая:

мы будем сами слать нашим пользователям письма, похожие на злонамеренные. Во вложениях к этим письмам мы прикрепим документы, где крупными буквами напишем «НЕ НАДО ОТКРЫВАТЬ ДОКУМЕНТЫ ИЗ ТАКИХ ПИСЕМ. Будьте внимательнее и осторожнее».

Таким образом, к нашей задаче есть следующие условия:

Условие 1. Письма должны быть разными. Если мы будем рассылать всем и каждый раз одно и то же письмо, то это ничем не будет отличаться от обычных напоминаний на собраниях, к которым у пользователей стойкий иммунитет. Мы должны простимулировать у пользователя систему, отвечающую за обучение. Из этого вытекают следующие условия:

Условие 2. Письма должны быть похожи на настоящие. Слать письма от ТОО «Мясо-компани» или Барака Обамы можно, но неэффективно. Имеет смысл использовать реально существующие (и разные!) названия организаций и органов;

Условие 3. Также важно, чтобы письма выглядели немного странно. Они должны быть несколько сомнительными, чтобы возбудить подозрения и пользователя и активировать в мозгу систему обучения;

Условие 4. И при всём этом письма должны привлекать внимание и провоцировать. Ну, тут всё просто, нам даже не нужно ничего придумывать: спамеры уже всё сделали за нас. «Штрафы», «Судебные решения» и даже просто «Документы» во вложениях, «Неустойки», «Перерасчёты», «Пени» в теме и множество слов «Срочно», «Немедленно», «Обязаны», «Оплатите» в тексте – и дело в шляпе.

Для реализации этого волшебного набора понадобятся минимальные навыки программирования и скучный вечер. Автор использовал Python 3 (потому что надо было попрактиковаться) и JS (для сбора данных, прямо из консоли браузера). Но большая часть кода легко реализуема на нативных инструментах ОС (bash, cmd), только с кодировками намучаетесь.

Справедливости ради надо отметить, что сама идея автору не принадлежит, а подсмотрена у одной крупной международной компании. Тем не менее, идея настолько на поверхности, что, едва услышав, автор с криками «чо ж я раньше-то не» бросился реализовывать.

Итак, в первую очередь нам нужны части, из которого мы составим письмо. Начнём с поля From – кто будет грозить нашим пугливым пользователям. Ну, кто: конечно же, банки, налоговые инспекции, суды и всякие странные ООО. Заодно можно добавить шаблоны для будущей автоподстановки, наподобие ПАО CmpNmF. См. from.txt

Теперь нам нужны, собственно, имена. ООО Ромашка и Вектор, а также бесконечно повторяющийся какой-нибудь «Московский суд» вряд ли вызовут отклик в душах.

К счастью, интернет даёт нам просто потрясающие возможности к получению информации. Например, список действующих судов РФ можно получить простой командой на JavaScript прямо в консоли браузера код наподобие:

for (let el of document.getElementById("mw-content-text").querySelectorAll("li")) {console.log(el.innerText;)}

Так можно быстро очень быстро набрать прекрасную базу для наших задач (тем более что автор уже сделал это за вас :) ). Сохранять будем в Plain text, БД для такой задачи – оверкилл. В проекте используется кодировка UTF-8 с BOM, на случай использования самых специфических символов. См. в файлах txt c соответствующими названиями.

Дальше нужно сгенерировать корректный (с т.з. стандарта, но не обязательно существующий) email адрес отправителя, чтобы наше письмо корректно отображалось и корректно пересылалось. Для части наименований автор использовал фиксированные домены, для части – автогенерацию из названия с использованием библиотеки транслитерации, что-то вроде ООО «Вектор» -> warning@ooovektor.ru. Имя ящика берётся из списка в коде и также призвано внушать трепет: «vzyskanie», «shtraf», «dolg», 'alarm' и прочий «zapros».

Теперь – тема письма.

Тема должна обязательно привлечь внимание, иначе письмо пройдёт незамеченным. Дайте волю своему внутреннему пугателю бухгалтеров, и всё получится: «Закрытие счета(ов) (CmpNm)», «Главному бухгалтеру (CmpNm)», «Требование (для CmpNm)» «Немедленно оплатите (!!!)» и прочие шалости.
См. subj.txt. Добавьте по вкусу, смешать, не взбалтывать.

Текст письма должен быть несколько странным. Мы уже привлекли внимание пользователя, теперь наша задача – вызвать подозрения. Поэтому стараться в этом пункте совершенно ни к чему. Возьмём у спамеров угрожающих фраз и будем их произвольно комбинировать, стопроцентная достоверность нам только помешает. Будет получаться чушь вроде:
(важная) Информация (ООО "ТЕСТ") По счёту в порядке судебного разбирательства
откройте документы во вложении
постановление во вложении

См. msg.txt. Дополнения приветствуются.

И, наконец, вложение. В проекте на данный момент предусмотрено 3 типа вложений: pdf, doc, docx. Файлы копируются с образцов без изменения содержания, файлу вложения присваивается имя из списка («Постановление», «Судебное решение» и пр, см. flnms.txt). Для первых двух типов размер генерируется случайно, путём добавления нулей в конец файла. С docx такое не прокатывает (хотя после процедуры восстановления Word файл открывается; а LibreOffice, например, без ругани открывает файлы docx, в которые добавлены сторонние файлы через интерфейс архиваторов).

И мы получим такое вот чудо:



Можно отправлять:

gen_msg.py buh@oootest.ru

Код, конечно же, на гитхабе

Собственно, вот и всё. Дел на час, а пользы… А польза будет. Ибо теория суха, но древо жизни пышно зеленеет – объяснения не доходят, напоминания забываются, а люди осваивают навыки лишь на практике. И лучше учителями побудем мы, чем потом всё из бэкапов восстанавливать, так?