Я – хакер! Хроника потерянного поколения - Дмитрий Артимович
Источник: www.gee.ru
Интересно, что следствие ФСБ и многие журналисты, в том числе Брайан Кребс, приписывают ник Engel моему брату, хотя изначально это был мой никнейм.
Занимаясь поиском возможностей заработать в онлайне, я попал на форум спамеров — Spamdot. Форум был всегда закрытым, но тогда для регистрации было достаточно написать админу в аську (ICQ)[19], тебе задавали пару вопросов: откуда ты узнал о форуме и чем занимаешься. Я честно ответил: «Пишу софт». Так, на форуме Spamdot появился новый участник Engel с забавной аватаркой черного ангела.
На Spamdot для меня открылась новая вселенная. Одни делали почтовые рассылки за деньги (например, 1 млн адресов по России стоил $100), другие — продавали ту же «Виагру» через спам, третьи — писали софт для спама.
На форуме было представлено несколько категорий продавцов.
Ботнеты для рассылки писем. Ботнеты — это боты, которых грузят на машины пользователей, естественно, без их разрешения, и серверная часть, которая умеет управлять этими ботами. Рассылка писем через ботнеты намного эффективней спама через прокси. Так как каждому боту достаточно взять только шаблон письма и адресную базу, далее он работает автономно. Когда при рассылке через прокси, вся нагрузка ложится на шлющий сервер.
Загрузчики — люди, продающие загрузки. Те самые установки ботов на компьютеры пользователей.
Продавцы email-баз. Их было один-два человека всего.
Спонсоры — партнерские программы.
И мы решили: если идти в спам, то первое, что нужно, — это почтовые базы. Покупать смысла не имело — непонятно, какого качества окажется база. По хорошим email-базам рассылают, а не продают.
Нужно было собрать свежую почтовую базу, арендовать ботнет, прогрузить его и попробовать разослать рекламу таблеток.
Для сбора почтовых адресов мы решили написать веб-паука, который максимально использовал бы ресурсы сервера и мог бы парсить сайты, полностью загружая канал. То есть требовалось написать эффективное (скорость работы и расход оперативной памяти) многопоточное приложение для обхода сайтов. Тут-то мне и пригодился весь опыт оптимизации, полученный в «Адаманте».
Писал веб-паука я около двух месяцев. Мой рабочий день выглядел так: подъем в 11 утра, сбор за 15 минут, выдвижение к метро, сон, стоя в метро полчаса, по выходе на Сенной площади баночка энергетика, перезарядка, баночка энергетика в обед, 9 часов на работе, метро, поездка домой, баночка энергетика, работа над пауком полночи, сон 4–5 часов. И все повторяется снова. Только на выходных я мог выспаться.
Зато у меня скопилась огромная гора пустых банок из-под энергетика.
Поскольку времени было в обрез, я пристрастился ужинать в KFC. Ох, как глуп я был! На курочке, бургерах и коле я набрал вес — с 77 кг до 110! Весь мой, некогда красивый, рельф покрыл толстый слой жира.
Возвращаемся к пауку. Я реализовал свой парсер HTML для экономии памяти, ведь приложение работало в несколько сотен потоков. Тот же libxml был непозволителен, поскольку делал слишком много динамических аллокаций памяти, а это дорого по производительности. И еще он съедал память. Много бессонных ночей я провел в отлаживании многопоточной работы. Например, крашился[20] один поток, а ошибка вылезала совсем в другом.
Распределение нагрузки между несколькими рабочими серверами выглядело так: брались домены, которые нужно обойти, и делились по количеству серверов. Сам парсер не выходил за пределы изначального домена и его уровня, то есть, если он бегал по домену второго уровня, он не переходил на субдомены. А результаты своей работы парсер клал в два больших файла:
Мыла[21] с повторами, так как делать фильтрацию на уникальность в процессе работы было проблематично — накладно по расходу памяти.
Собранные новые домены и субдомены.
Оба файла за время работы набирали несколько гигабайт. Вылезло сразу несколько новых проблем.
Существовало много сайтов-ловушек (honeypot) с мусорными адресами, то есть целые страницы, на которых были размещены сотни сгенерированных адресов. Проблема осложнялась тем, что многие сгенерированные мэйлы были на вполне себе настоящих доменах, и отбросить их на стадии MX-валидации не представлялось возможным.
Наш паук игнорировал файл robots.txt, и мы получали абузы за скан сайтов — тех мест, куда паук не должен ходить. А делать парсер robots.txt совсем не хотелось.
Файлы с почтовыми адресами и доменами нужно было объединять с нескольких серверов и фильтровать на уникальность. То есть это работа с файлами размера заведомо большего, чем размер оперативной памяти.
Проблему первую мы пытались решить, отсекая все адреса, если их было больше определенного количества на странице. Но от этой идеи отказались, так как фильтр часто рубил и настоящие ящики. В итоге так ничего и не сделали.
Вторую проблему решили проще. Купили домен id-search.org, на нескольких языках написали «Мы группа ученых из… Новосибирского университета. Создаем поискового робота. Если вы заметили у себя в логе веб-сервера чрезмерную активность IDBot, пожалуйста, пишите нам на [email protected]». Пауку задали строку User-Agent’а[22] «IDBot/1.0; +http://www.id-search.org/». 99 % абуз стали приходить теперь нам.
Для третьей проблемы пришлось делать отдельную утилиту. Ее делал мой брат. Назвали MailListManager. Набор из трех утилит DoorIt! MailParser, MailListManager отныне назывался Spam Studio.
Утилита умела дедапить[23] почтовые адреса, домены, разбивать большие листы на части, удалять адреса по блэклисту, перемешивать и считать строки в файлах.
Удаление дупликатов в больших файлах (не помещающихся в оперативной памяти) работало так: сначала файл дробился на мелкие фрагменты, которые сортировались в памяти и сохранялись на диск, потом отсортированные фрагменты одновременно читались и соединялись в один результирующий файл с удалением дупликатов (для этого и нужна была сортировка по алфавиту).
И так нужно было опробовать все в действии. Для этого мы заказали десять серверов на общую сумму $1000 за месяц. В течение этого месяца мы собрали 100 млн свежих почтовых адресов.
Как попробовать базу на деле? На Spamdot можно было арендовать два спам-ботнета: Reactor Mailer (Srizbi botnet) и Obulk Psyche Evolution (Cutwail). Reactor стоил $4000 за месяц без