Я люблю говорить моей маме, что создаю конкурентные преимущества для клиентов, позволяющие им легче получать кредиты. Я начал писать ботов ещё в 1995 году для удалённого тестирования медицинской сети, исследований нарушений конфиденциальности информации, сетевого мошенничества, выполнял частные расследования, работал на иностранные правительства и так далее. У меня было много дел с клиентами, занимающимися торговлей автомобилями, что несколько отличает меня от остальных хакеров-ботописателей. Я говорю об этом так свободно, потому что имею разрешение от клиентов на разглашение информации по этим проектам.
Эти истории описаны в моей последней книге и в журнале Linux, в номере за декабрь 2012 года, они касаются технологии Интернет-атак. С тех пор прошло 6 лет, и я, наконец, получил возможность написать об этом. Это интересно, потому что технология ботнета даёт Вам возможность завоевать конкурентное преимущество в бизнесе и осуществить стратегическое проникновение в систему. Вы не хотите об этом никому рассказывать, потому что это Ваш торговый секрет. Поэтому, если Вы хотите взглянуть на это с другой точки зрения, прочитайте старые экземпляры журнала Linux. Я пишу там немного иначе, чем буду Вам сегодня рассказывать.
Итак, первое с чего Вы начинаете – это изучаете, как создать хороший проект бота. Я расскажу Вам об этом на примере бота для сети продажи автомобилей. Затем Вы должны осознать коммерческое значение BOTNET и ботов, только учтите, что это было 6-7 лет назад. Первое, что Вы должны знать, если хотите создать действительно хорошего бота — Вы не должны бояться сделать что-то иное, Вы должны использовать немного другой подход. Если Ваша компания имеет интернет-стратегию, основанную на ведущей роли браузеров, этого недостаточно для успеха. Браузеры есть у всех, все работают с Интернетом через браузер. Нужно смотреть на вещи шире, увидеть со стороны, как работают браузеры и сайты, и тогда Вы сможете создавать действительно крутые вещи.
Сколько из присутствующих здесь писали «скрин-скраперы» (программы, использующие данные, отображаемые на экране другими программами)? Много! А сколько из Вас написали программ-спайдеров? Тоже много! Так вот, знайте, что если Вы это умеете, этого недостаточно, чтобы сделать копию всего Интернета! Ко мне периодически обращались люди с идеями, как сделать копию Интернета, поэтому учтите – если Ваш проект одновременно требует пакетной обработки данных и получения результатов в режиме реального времени, у Вас будет проблема. Или если Ваш проект требует масштабирования массивов данных, у Вас тоже будут проблемы. Если Ваш проект имеет такие требования, он обречён на провал. Это всё равно, что попытаться сделать копию Google. Когда клиенты спрашивают меня, а почему нельзя повторить Гугл, я отвечаю: «потому что Гугл тратит миллион долларов в день на электричество, вот почему»!
Итак, если клиент предлагает Вам для работы сервер, не думайте, что этот сервер принадлежит Вам. Приведу пример: несколько лет назад у меня был клиент, который хотел отслеживать изменение цен на Amazon примерно на 100 тысяч торговых позиций. Я думал, что этот парень просто солидный продавец на Амазон, который хочет быть в курсе изменений цен на товары. Но когда я узнал, что он хочет проделывать это каждые 5 секунд, то отказался от этого проекта. Потому что невозможно обновлять такой массив данных через такие короткие промежутки времени. Если Вы попытаетесь осуществить подобное, знайте, что для этого потребуется выстроить специальную сетевую структуру, куда придётся скопировать весь Amazon. Поэтому остерегайтесь иметь дело с клиентами, которые вносят подобные предложения, ведь это ещё и противозаконно.
Далее Вы должны иметь реалистичную модель прибыли, а не обычную бизнес-модель. Например, для торговли на e-Bay. Это очень важно, потому что Вам платит клиент, которому нужен конкретный результат, а не общие методики.
А сейчас о торговле автомобилями. Это важный пример для понимания того, как написать хороший бот. Торговать машинами не настолько прибыло, как думается. Продажа новых машин существует в жесточайшей конкуренции, требует больших капиталовложений и не слишком прибыльна. Поэтому если Вы торгуете новыми автомобилями, у Вас должна быть проверенная репутация и доверие клиента, а если Вы продаёте подержаные машины, эти качества должны встать на первое место.
Главное, что я понял, занимаясь проблемами trade-in, это то, что в торговле подержанными машинами очень мало людей, которые действительно зарабатывают на этом большие деньги. И если Вы не будете развивать свой бизнес, Вы пропадёте. Цены на подержаные автомобили хорошо известны, поэтому на этом рынке слишком мало места для ценовых манёвров. Все цены на новые автомобили, пятилетние автомобили и так далее можно посмотреть в альманахе Kelly Blue Book. Из него можно узнать, сколько стоит Ваша машина и за сколько её можно продать. Поэтому продавец может манипулировать только ценой покупки, а не продажи. Продавец должен купить машину у владельца как можно дешевле, чтобы при перепродаже получить прибыль за счёт низкой цены на старте.
Клиенты приходят ко мне с просьбой найти сайт, где можно дёшево купить действительно хорошую машину. Например, собственную или прокатную машину возрастом 2 года с пробегом от 12 до 16 тысяч миль. К сожалению, из-за большой конкуренции и плохого веб-дизайна они лишены возможности купить те машины, которые хотят. Сотни дилеров в этой цепочке продаж хотят одинаковые машины, а дизайн сайтов по продаже автомобилей настолько ужасен, что Вы не можете ничего купить.
Ежедневно на продажу выставляют две-три сотни автомобилей, которые отображаются на сайте в виде фотографии с кратким описанием характеристик. И кнопка «Купить сейчас» под таким объявлением не активна! Это как раз время продажи, пока кнопка находится в таком состоянии. Проходит совсем немного времени, и кнопка становится активной.
Что делает клиент? Он сидит пред экраном компьютера и периодически вручную обновляет страницу браузера, пока кнопка не станет активной, чтобы не пропустить нужный момент и успеть купить машину, пока этого не сделал конкурент.
Это приводит к другой проблеме – к задержкам сервера. Мой клиент должен привлечь к процессу покупки автомобиля как можно больше помощников, которые также будут сидеть и щелкать клавишу F5, обновляя страницу каждую секунду.
Представьте, что ему удалось найти ещё шесть человек, которые тоже участвуют в процессе покупки. Предположим, Вам необходимо купить 6 автомобилей. Значит, у всех одновременно будут открыты 6 страничек в браузере, каждая со своей машиной. И они все сидят и периодически щелкают клавишей, обновляя браузер.
Пусть за покупкой следят одновременно 750 дилеров. Итак, мы имеем 6 х 6 = 36 х 750 = 27 000 запросов, попадающих на сервер в одно и то же время. И вот в самый ответственный момент покупки, когда Вам это совершенно не нужно, на сервере возникает пик задержек, совпадающий с нажатием на кнопку «Купить сейчас». И эта задержка может составлять 30 секунд, пока страница наконец-то не обновиться и Вам удастся или не удастся совершить покупку машины. Иногда Вам так и не удаётся первым нажать на кнопку, и покупателем становится другой. Это действительно серьёзная проблема.
Следующая проблема – это конкуренция. Допустим, каждый день предлагается на продажу 200 машин, из них 5 машин захочется купить каждому автодилеру в стране, потому что они имеют нужный цвет, отличную цену или по какой-то другой причине. Итак, каждый дилер желает приобрести одни и те же машины, и между дилерами завязывается соревнование.
Вот так выглядят попытки купить одну и ту же машину, когда заявки поступают с разных концов страны. Добавьте к этому задержки сервера, отвратительный дизайн сайтов и прочее. Вот почему люди звонят нам и спрашивают, может ли им помочь в этом деле сетевой бот.
Они говорят: «Майк, сможете ли Вы мне помочь? Просто взгляните на это». Итак, у нас имеется две проблемы: требуется слишком много ручного труда и активная кнопка «Купить» проявляется на экране слишком долго.
Вы должны вручную пролистать страницу, чтобы найти нужную машину, пробить VIN-номера машин, иногда даже позвонить продавцу автомобиля, чтобы узнать интересующие Вас подробности. Поэтому выбор машины может занять у Вас 15-20 минут. Стучать по клавише обновления страницы целыми днями тоже небольшое удовольствие. Плюс кнопка «Купить» проявляется на экране не сразу, что связано с задержками сервера.
Решение проблем состоит из двух этапов. Замечу, что бот имеет непривычный дизайн, потому что это происходило 6 лет назад, и сейчас я уже не использую подобных решений.
Вот как выглядит интерфейс моего бота. Он состоит из четырёх HTML-строк, каждая предназначена для 1 клиента. Этот бот запускается в сеть BOTNET и начинает одновременно работать на всех компьютерах, которые мы контролируем. Нет, лучше сказать так: «которые принадлежат нам», в этом есть разница, не так ли? Все коммерческие боты, которых я написал, работали только на нашем собственном «железе», это правда. Бот-клиент связывается с бот-сервером, а тот – с сервером нужного сайта.
Итак, мой клиент отказывался от услуг всех этих людей, обновляющих странички, сам запускал бот на нескольких своих компьютерах, выбирал имя пользователя и заходил в учётную запись. Затем он вносил VIN-номер автомобиля, который собирался купить, проверял, легальна ли машина, которая с таким номером выставлена на продажу. Когда Вы пользуетесь ботом, он поступает не так, как это делает обычный человек, сидящий за компьютером. Такое поведение бота привлекает внимание.
Например, если бы бот не проверял VIN, администратор магазина мог бы заинтересоваться, почему пользователь избегает этого действия при том, что с его IP-исходит большой трафик, и мог бы заблокировать моего клиента.
После проверки номера в окне бота рядом со строкой VIN появлялся счётчик, который показывал, сколько секунд остаётся до покупки автомобиля, так как бот синхронизировал свои внутренние часы с часами продающего сервера. Чем меньше времени оставалось до нажатия кнопки, тем быстрее происходило обновление страницы благодаря такой синхронизации. И когда время доходило до 0, бот отдавал бот-серверу команду купить выбранную машину.
Бот выступал спусковым крючком для бот-сервера, инициирующим самую быструю покупку. Иногда мы упускали свой шанс, но чаще всего на экране появлялась надпись «Покупка успешна».
После этого на адрес моего клиента приходило подтверждение покупки, и это служило основанием для оплаты автомобиля.
Вот как выглядит диаграмма, на которой показано количество неудачных и удачных покупок до и после использования BOTNET – число успешных покупок возросло с 0 до 99%.
Успех был просто феноменальным. Я звонил своим клиентам через 15-20 минут после появления объявления о продаже на сайте, и они говорили: «Майк, сегодня я купил 5 из 6 машин, которые хотел приобрести»! Или 7 или 7, или 9 из 12. И я им отвечал: «никому об этом не говорите, не режьте курицу, несущую золотые яйца». Почему наш бот обеспечивал успех?
Потому что люди вызывали задержки сервера, периодически обновляя страницы, пока кнопка не станет активной. В результате покупателем становился тот, кому удавалось щелкнуть по кнопке «Купить» раньше других. Процесс покупки превращался в настоящую лотерею.
Наш бот делал так, что счётчик отображал реальное время, которое оставалось до активации кнопки «Купить», анализируя активность других покупателей и мощность сервера. Он мгновенно посылал команду «нажать кнопку», как только она становилась активной на сайте.
Бот такого типа обычно называют «снайпер». Однажды я уже собрался написать своему клиенту электронное письмо, что сегодня с утра мои снайперы собираются поразить 6 машин, или убить, уже не помню. Но потом сообразил, что лучше не отсылать по почте такой текст, а просто позвонить ему по телефону. Или вообще не звонить. В общем, в нашем деле нужно следить за своим языком.
Продолжим нашу историю. Один из моих клиентов был успешен в течение 6 месяцев, а затем потерял 50% прибыли – он смог покупать лишь 2 из 7 машин, потому что связь его компьютера с сервером постоянно обрывалась. Оказалось, что всему виной группа русских хакеров, которых наняли для написания конкурирующей программы-бота, и они находились где-то за пределами Нью-Джерси. Так что конкуренция – это всегда хорошо, это как гонка вооружений, которая провоцирует инновации в сетях «Ботнет».
Рассмотрим вторую часть решения проблемы. Я расскажу, как работает бот и зачем он синхронизируется с часами сервера продаж. Он вычисляет время задержек, подсчитывая, сколько пользователей работает в системе.
Каждый бот-клиент заставляет бот-сервер делать множество попыток купить машину, около 5-7 попыток в секунду. Каждая попытка происходит немного раньше актуального времени продажи и базируется на подсчёте системных задержек. И это действительно приносит успех.
Таким образом, если до этого клиент покупал примерно половину машин, с нашим ботом показатель приблизился к 100%. Насколько успешным был этот бот? Мы использовали его в течение 40 недель, каждую неделю покупалось по 20 машин, примерно 5 штук ежедневно, итого было куплено 800 автомобилей. Каждая машина стоила около 16 тыс. $, итого наш клиент совершил покупок на 12,8 млн $. Это очень большое достижение для такого маленького дилера, как наш.
Я привёл вам пример, из которого видно, насколько BOTNET важен для бизнеса. Нужно только отказаться от традиционных способов использования браузера и взглянуть на проблему по-другому, попробовать решить проблему снаружи, а не внутри привычных рамок.
Что же я изменю сегодня, если мне понадобиться решить подобную задачу? Мой бот должен быть ещё более успешен, чем от него ожидается. Это должен быть очень «легковесный» программный клиент, буквально одна страничка кода Java Script. Он должен легко обновляться и быстро распространяться по сети. Далее я должен построить аналитику и собрать метрики, характеризующие работу моего бота. Я должен точно знать, чему обязан своим успехом, я должен точно знать, сколько машин было продано благодаря бот-клиенту.
Я должен помочь клиенту в процессе выбора машины. Я должен заглянуть в альманах Kelley Blue Book и отследить рыночные цены на автомобили, интересующие моего клиента. Далее я должен модифицировать HTML-код так, чтобы создать кнопку «Купить» внутри бот-сервера, который играет роль прокси-сервера. Только тогда я смогу совершать покупку раньше других, пользующихся настоящей кнопкой «Купить» на странице сайта.
Приведённый в примере веб-сайт, на котором продаются автомобили, использовал стандартный HTML-код, который легко эмулируется и подчиняется простым скриптам PHP/cURL.
Современный сайты намного сложнее, они используют много модулей Java Script, AJAX, фоновый обмен данными браузера с веб-сервером, комплексные формы и так далее. Поэтому сегодня решить такую задачу будет намного сложней.
Например, нужный автомобиль должен быть записан через веб-интерфейс в виде последовательности задач Task Queue, которая оправляется на бот-сервер.
Эта последовательность зависит от индивидуальных компьютеров, которых я называю Harvester — «уборочными машинами», или «жнецами». Они могут располагаться где угодно – в дата-центрах, в офисах, в Облаках, если используется виртуальная технология хранения и обработки данных.
Для их работы используются специальные программные модули iMacro, которые будут постоянно работать с Вашим браузером, например, Firefox. Кто-нибудь из вас использует iMacro? Это потрясающий инструмент, который копирует и воспроизводит действия пользователя, как если бы за компьютером сидел живой человек.
«Жнецы» динамически создают эти iMacro, и после того, как задача будет выполнена, они связываются с бот-сервером, который обновляет Task Queue, и процесс продолжается. Если Вас заинтересовали детали этой технологии, смотрите мой доклад на конференции DEFCON 17, где я рассказывал, как работают все эти iMacro, как использовать «скрин-скраперы» на разных сайтах и ещё много полезных вещей.
Спасибо, что остаётесь с нами. Вам нравятся наши статьи? Хотите видеть больше интересных материалов? Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).
Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США! Читайте о том Как построить инфраструктуру корп. класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки?
Комментарии (9)
Ar0x13
22.03.2018 12:18Интересно почитать про нестандартные решения, но что то не понял где в тексте описание как я «победил русских хакеров»» — или что то упустил?
PaulAtreides
22.03.2018 18:09В тексте, что характерно, написано, что это русские хакеры его победили.
LODIII
22.03.2018 12:18Новый хайп в выступлениях. Чтобы его пришло послушать как можно больше людей нужно обязательно упомянуть о русских хакерах.
komlachsv
22.03.2018 12:18+1Ценность статьи можно свести к одной фразе: «чуваки, я умею посылать http запросы».
Кстати, я так и не понял где и кого он там победил?
Заголовок статьи не отражает суть.
Почти флуд.
terantul
22.03.2018 19:15Подобных «ботов» писал пару лет назад для покупки на веб аукционе. Клиент задавал параметры (желаемый товар, максимальная цена покупки (ставки) итд). Бот отслеживал и за пару секунд до окончания времени покупал если цена соответствовала желаемой.
Кто меня пригласит выступить на конференции?HostingManager Автор
22.03.2018 19:16Никто Вас не пригласит, надо самому региться и делать доклад. Таких как Вы — сотни тысяч. Но не все хотят делиться своим опытом.
NoRegrets
Парень написал обычного распределенного бота, работающего на их железе, который нажимает кнопку на сайте в нужный момент и теперь выступает с этим на конференции? Или это перевод статьи 2000 года? Если другие люди, написавшие аналогичного бота, — «русские хакеры», то стало быть он вообще хакер хакер.