Ки­рилл нас­толь­ко вымотал­ся за эти сумас­шедшие два дня, что в понедель­ник бес­совес­тно прод­рых до обе­да. Умы­ваясь, при­дир­чиво огля­дел себя в зер­кале: синяк под гла­зом уже пожел­тел и выц­вел, и, если не прис­матри­вать­ся, его впол­не мож­но было при­нять за пос­ледс­твия хро­ничес­кой уста­лос­ти или недосы­па. А вот со столь же жел­тым кафелем в убор­ной и отва­лива­ющи­мися обо­ями на сте­нах нуж­но и вправ­ду что‑то делать.



Он вдруг пой­мал себя на мыс­ли, что впер­вые за дол­гое вре­мя дума­ет об этой куп­ленной по дешев­ке квар­тире не как о вре­мен­ном логове, где мож­но перекан­товать­ся до луч­ших вре­мен, а как о пос­тоян­ном жилище. Толь­ко вот поз­вать кого‑то в такое жилище было нем­ного стрем­но. Серёга‑то лад­но, он на подоб­ные мелочи обра­щать вни­мание не при­вык, а вот при мыс­ли о том, что жир­ные пят­на на сте­нах и дра­ный линоле­ум на полу кух­ни уви­дит Маша, ста­нови­лось нелов­ко. Кирил­лу вдруг остро захоте­лось соз­дать хотя бы иллю­зию уюта — накатить минималь­ный патч к реаль­нос­ти, преж­де чем кто‑то заметит, что гроз­ный хакер Кикс оби­тает в такой запущен­ной норе, где отов­сюду раз­ве что не тор­чат сколь­зкие хвос­ты чер­вей, а вот пле­сенью кое‑где все‑таки попахи­вает. Мать это­го точ­но не одоб­рила бы.

Во­оду­шевив­шись столь сво­евре­мен­ной мыслью, он соору­дил себе кофе с бутер­бро­дом и при­нял­ся остерве­нело отди­рать обои в коридо­ре и в ком­нате. За этим увле­катель­ным заняти­ем Кирилл про­вел сле­дующие нес­коль­ко часов, пока не выдох­ся окон­чатель­но. Что­бы нем­ного перевес­ти дух, он вклю­чил ноут­бук и запус­тил «Иду», решив поковы­рять тро­яна, которо­го вытащил с при­несен­ного Ива­ном вин­честе­ра, — тот уже заж­дался сво­его часа.

Трой и вправ­ду ока­зал­ся неп­ростым. Ту часть, которую писал он сам, Кирилл решил не тро­гать, прос­то еще раз убе­дил­ся в том, что не ошиб­ся, ког­да ему показа­лось, буд­то кто‑то без спро­са поза­имс­тво­вал его код. А вот с новыми фун­кци­ями, ответс­твен­ными за рас­простра­нение чер­вя, приш­лось нем­ного повозить­ся.

Су­дя по его внут­ренней логике, обновлен­ный тро­ян и вправ­ду самос­тоятель­но копиро­вал себя по сети, но при этом умел выпол­нять пос­тупа­ющие с уда­лен­ного сер­вера коман­ды, которые отда­вал этой прог­рамме неведо­мый опе­ратор. Туда же вре­донос отсы­лал отче­ты о про­делан­ной работе и информа­цию о каж­дой заражен­ной машине. И вот ведь что инте­рес­но: обыч­но адрес такого управля­юще­го сер­вера авто­ры вирусов жес­тко забива­ли непос­редс­твен­но в коде, в ред­ких слу­чаях — шиф­ровали содер­жащую его стро­ку, а потом зас­тавля­ли тро­яна рас­шифро­вывать ее в памяти. Эта прог­рамма дей­ство­вала гораз­до умнее.

Червь про­сыпал­ся каж­дую пол­ночь по Грин­вичу и начинал счи­тать. Он брал сегод­няшнюю дату и прев­ращал ее в чис­ло, затем добав­лял к нему сек­ретное зна­чение, извес­тное толь­ко ему и его соз­дателю. Резуль­тат про­пус­кался через хеш‑фун­кцию, прев­раща­ясь в бес­смыс­ленную кашу из битов.

Но из этой каши червь лепил име­на.

Пер­вые восемь сим­волов хеша ста­нови­лись доменом. Червь пытал­ся соеди­нить­ся с этим адре­сом и, если натыкал­ся на пус­тоту, генери­ровал сле­дующий, а затем еще один и еще. И так десят­ки, сот­ни раз, методич­но переби­рая матема­тичес­ки пред­ска­зуемую, но для пос­торон­него гла­за совер­шенно слу­чай­ную пос­ледова­тель­ность. Где‑то на дру­гом кон­це пла­неты его хозя­ин делал то же самое. Он знал алго­ритм, знал «зер­но», знал дату. Его прог­рамма тоже счи­тала, генери­руя ту же самую пос­ледова­тель­ность доменов. И ког­да она выдава­ла оче­ред­ной адрес, хозя­ин регис­три­ровал его, один из тысячи сге­нери­рован­ных.

Червь находил этот единс­твен­ный живой домен. Соеди­нение уста­нав­ливалось, при­казы заг­ружались, мис­сия про­дол­жалась. Очень разум­ный под­ход: если оче­ред­ной домен заб­локиру­ют пра­воох­раните­ли или сам сер­вак грох­нут из‑за жалоб пос­тра­дав­ших поль­зовате­лей, бот­нет будет жить, а таинс­твен­ный зло­дей смо­жет и даль­ше отда­вать коман­ды заражен­ным машинам — рас­пол­зши­еся по сети тро­яны прос­то под­клю­чат­ся к сле­дующе­му сер­веру. Изящ­ное решение, при­думан­ное явно не нович­ком и не слу­чай­ным вирусо­писа­телем. Понять бы еще, кто такой умный и талан­тли­вый изоб­рел столь инте­рес­ный ход…

Ки­рилл выг­рузил образ чер­вя в вир­туаль­ную машину, выс­тавил нуж­ное вре­мя и зна­чение на кален­даре, сло­вил момент полуноч­ного про­буж­дения прог­раммы, а потом с помощью нес­ложно­го скрип­та начал записы­вать в тек­сто­вый файл дату и получив­ший­ся домен. Затем сле­дующий, и еще, и еще. Ког­да наб­ралось изрядное количес­тво строк, Кирилл заг­нал получив­ший­ся фай­лик в написан­ный им скрипт‑реконс­трук­тор, который начал методич­но переби­рать воз­можные зна­чения «зер­на», для каж­дого про­гоняя алго­ритм впе­ред и срав­нивая резуль­тат с наб­люда­емы­ми домена­ми. В какой‑то момент пос­ледова­тель­ность сош­лась так, что прог­рамма начала пов­торять генери­руемые тро­яном наборы сим­волов. Получи­лось! «Сек­ретным сло­вом» ока­залась стро­ка 0x4C69616D — на пер­вый взгляд бес­смыс­ленная, но отче­го‑то зас­тавив­шая Кирил­ла нас­торожить­ся. Неч­то стран­ное, неуло­вимо зна­комое при­виде­лось ему в этих сим­волах…

Ста­раясь отог­нать наваж­дение, Кирилл сно­ва открыл бинар­ник в дизас­сем­бле­ре. В сег­менте, где червь фор­мировал сооб­щения, пря­тались фраг­менты тек­ста — наз­вания внут­ренних перемен­ных отладки, не вычищен­ные при сбор­ке: WatcherInit, TC_ResponseQueue. Он про­бежал бинар­ник по диаго­нали и в debug-сек­ции, которую нель­зя было уви­деть в ран­тай­ме, вне­зап­но нат­кнул­ся на ком­мента­рий: If you read this — you’re still faster than your habits.

Ки­рилл отки­нул­ся на скри­пучем сту­ле. Такие пас­халки‑пос­лания не появ­ляют­ся в коде вре­доно­сов сами собой. Похоже, автор это­го поделия неп­лохо говорит по‑англий­ски и каким‑то обра­зом смог раз­добыть обра­зец его вин­локера, который Кирилл совер­шенно не пла­ниро­вал выпус­кать в «дикую при­роду». А это воз­можно толь­ко в одном слу­чае — если соз­датель чер­вя вни­матель­но за ним сле­дил, а может быть, даже хотел, что­бы Кирилл об этом догадал­ся. Он вновь взгля­нул на сим­волы «сек­ретной фра­зы», мыс­ленно сопос­тавил их с таб­лицей ASCII… и наконец раз­гадал эту при­чуд­ливую голово­лом­ку.

0x4C = L
0x69 = i
0x61 = a
0x6D = m

За­гадоч­ный паззл 0x4C69616D сло­жил­ся в понят­ное Liam. Это была не прос­то вес­точка, не вызов и не угро­за, а, ско­рее, при­вет от челове­ка, который в силах заранее прос­читать твои шаги и все рав­но хочет, что­бы ты их сде­лал. Впро­чем, всег­да оста­ется ненуле­вой шанс, что это чья‑то чужая игра, непонят­ная шах­матная пар­тия, которую зате­ял нек­то, хорошо зна­ющий рас­положе­ние фигур на дос­ке. И Кирилл, при всем сво­ем чутье, не имел пра­ва округлять веро­ятность до еди­ницы. Иллю­зия оче­вид­ности — худ­ший экс­пло­ит в соз­нании хакера. Сей­час понят­но глав­ное: если это дей­стви­тель­но Лиам, то та дав­няя исто­рия с TerraCore все еще не окон­чена. И цель, похоже, зак­лючалась имен­но в том, что­бы осто­рож­но напом­нить: «я не потерял тебя из виду, парень». Прав­да, в этом напоми­нании — раз­дра­жающе мало ясности. Зачем он отпра­вил это пос­лание и почему — имен­но здесь и сей­час?

Ки­рилл задумал­ся, нер­вно пос­тукивая паль­цами по под­бород­ку. Зашитый в чер­вя алго­ритм генера­ции доменов выг­лядел кра­сиво и эле­ган­тно, но имел один неоче­вид­ный изъ­ян. Зная его сек­рет, Кирилл мог каким‑то обра­зом вывес­ти из стоя нас­тоящий коман­дный сер­вер, а потом зарегис­три­ровать сле­дующий домен рань­ше сво­его оппо­нен­та, кем бы тот ни был. И тог­да… Тог­да он суме­ет перех­ватить управле­ние все­ми заражен­ными компь­юте­рами в сети.

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

На самом‑то деле спо­соб нап­рашива­ется толь­ко один: DDoS-ата­ка, метод прос­той и надеж­ный, как удар ногой по запер­той две­ри. Все­го‑то и тре­бует­ся — завалить сер­вер мусор­ными зап­росами, забить его канал до отка­за так, что­бы ни одна заражен­ная машина не сумела сквозь него про­бить­ся. Вот толь­ко для реали­зации такой ата­ки тоже нужен ресурс, которо­го у Кирил­ла сей­час под рукой нет. Обра­щать­ся к ста­рым зна­комым катего­ричес­ки не хотелось, как не хотелось и лезть на всем извес­тные хакер­ские пло­щад­ки в поис­ках под­ходяще­го исполни­теля. Это же опять при­дет­ся перело­пачи­вать кучу сооб­щений, оце­нивать пред­ложения по репута­ции их авто­ров, всту­пать с ними в перепис­ку, уточ­нять детали опла­ты, замора­чивать­ся с гаран­тами… Кро­ме все­го про­чего, была у это­го нежела­ния как минимум одна раци­ональ­ная при­чина.

Ки­рилл вдруг вспом­нил яркую, как вспыш­ка мол­нии, кар­тинку из детс­тва: пог­ружен­ное в кро­меш­ную тьму помеще­ние, залитое таинс­твен­ным алым све­том. Помимо страс­ти к рыбал­ке, у отца было еще одно увле­чение — он ред­ко рас­ста­вал­ся с тяжелым фото­аппа­ратом «Зор­кий» и малень­ким при­бором в аро­мат­но пах­нущем кожей чех­ле, который он называл экспо­номет­ром. Нащел­кав нес­коль­ко пле­нок, отец надол­го запирал­ся в тем­ной ван­ной ком­нате, вызывая недоволь­ное вор­чание матери. Там тво­рилось магичес­кое дей­ство, за которым так любил наб­людать малень­кий Кирилл: отец зажигал неболь­шую лам­пу со смен­ными крас­ными све­тофиль­тра­ми, собирал акку­рат­но сло­жен­ный в чемодан про­ектор‑фото­уве­личи­тель, дос­тавал глян­цеватель, раз­ливал по плас­тиковым ван­ночкам химичес­кие реак­тивы… Года через два пос­ле его смер­ти мама вынес­ла на помой­ку все эти вещи, потому что они занима­ли полез­ное мес­то на антре­солях. Сде­лан­ные отцом фотог­рафии, пожел­тевшие осколки вос­помина­ний в пыль­ном семей­ном фото­аль­боме — оста­лись.

Ки­рилл вспом­нил, как заворо­жен­но созер­цал нас­тоящее вол­шебс­тво: на опу­щен­ном в ван­ночку с проз­рачной жид­костью лис­те фотобу­маги мед­ленно прос­тупало изоб­ражение — улы­бающиеся лица, силу­эты домов, кро­ны деревь­ев, пок­рытые чер­но‑белой лис­твой. Так и сей­час кар­тинка про­исхо­дяще­го понем­ногу про­явля­лась из небытия, обрастая деталя­ми. Свя­зан ли до сих пор Лиам с «Тер­рой» или нет, но, впол­не веро­ятно, он потерял Кирил­ла из виду. И воз­можно, этот тро­ян — попыт­ка зацепить его, отсле­дить реак­цию, выяс­нить, где он оби­тает сей­час. Если Кирилл при­зовет на помощь мес­тных хакеров, это будет след. Яркий, оче­вид­ный и совер­шенно ненуж­ный.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    2 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии