Глава 15. Код расшифрован
20 февраля 2024, вторник
Во вторник среди компаний, которые занимались расследованием самой масштабной вирусной атаки на тысячи финансовых организаций, разошлась новость, которую ждали месяцами: исследователям удалось снять первый слой шифрования Shadowmire.
Ещё в самом начале расследования специалисты привели исполняемый код к виду, пригодному для анализа: машинные инструкции перевели в дизассемблированный код на ассемблере — низкоуровневый язык, который уже мог разобрать человек. Первичный осмотр выглядел удручающе: код был намеренно превращён в мусор — без очевидной структуры, с ложными ветвлениями и бесполезными инструкциями.
Shadowmire был построен многослойно: несколько уровней шифрования, упаковки и обфускации, плюс самошифрующиеся участки кода.
Изучение вируса шло как по учебнику реверс‑инжиниринга: пошаговая отладка (debugging) его поведения в «песочнице». Исследователи запускали заражённую систему внутри изолированной виртуальной машины под управлением отладчика, останавливали выполнение после каждой важной инструкции, наблюдали за регистрами и памятью, отслеживали, какие ветки кода реально выполняются, искали повторяющиеся шаблоны, сравнивали ветки исполнения, пытались выделить генерацию ключей, анализировали криптографические примитивы на уровне операций, проверяли, как небольшие изменения входных данных влияют на выход. Все эти работы позволили получить общую картину того, как вирус действовал в системе, но для детального анализа того, какие именно функции для этого использовались, нужно было видеть код.
Наконец‑то у специалистов появился якорь: исследователи нашли основу алгоритма и восстановили, как именно получался ключ для одного из слоёв.
Новость о том, что Shadowmire частично расшифрован, быстро утекла наружу. При таких масштабах расследование и так было сложно держать в тени.
Через два дня в Innotech начали приходить первые уже «читаемые» куски, пригодные для нормального реверс‑анализа. Уэсли получил их одним из первых. Он рассчитывал не только понять логику модулей, но и выяснить, кто был автором кода.
23 февраля 2024, пятница
Уэсли зевнул, когда на экране телефона высветилось уведомление в рабочем чате. До конца дня оставалось пятнадцать минут, и он, преодолевая сонливость, дописывал отчёт: сухой список того, что удалось понять сегодня.
Лаборатория почти опустела, поэтому он был в тишине, нарушаемой шумом своей клавиатуры.
В рабочем чате коллега — старший аналитик вирусной лаборатории — написал, что нашлась совпадающая сигнатура. Один из фрагментов кода был слишком похож на кусок другого вируса, который всплывал раньше.
Уэсли посмотрел на время. Энцо мог застрять в пробках — значит, у него ещё есть несколько минут, чтобы понять, что именно нашли.
Придвинувшись ближе к монитору, он открыл файл с отчётом и вчитался. Совпадение касалось части, отвечающей за скрытое закрепление в системе. Всё время утечки данных вирус каким‑то образом оставался в тени и не вычищался с серверов.
Уэсли нахмурился. Кусок кода не был каким‑то сложным, хотя запутанные условия и повторения стоило бы оптимизировать. Его больше настораживало, что он узнавал этот стиль и быстро понял, за что отвечала каждая функция. Несмотря на витиеватость, код был простым и обращался к знакомым частям системы.
Сонливость отступила, и Уэсли выпрямился на компьютерном кресле, чтобы бегло просмотреть всё, что ему прислали.
Он открыл код другого вируса, который уже хранился в соответствующей базе данных и был изучен.
Это нельзя было назвать просто «похожей сигнатурой». Это были скопированные куски одного и того же кода.
Следом за этим открытием последовало сообщение в рабочем чате, что такие же совпадения были и в других вирусах из базы. Отсюда точно можно было начать искать следы преступников.
Чувствуя, как сильно забилось его сердце и похолодели руки, Уэсли отпустил мышку и потянулся к телефону.
Он знал, что совпадающие куски кода во всех вирусах были направлены на работу с root‑правами компьютера. Они и на динамическом анализе заметили, что Shadowmire получает полный контроль над устройством.
Ещё Уэсли прекрасно понимал, что в Shadowmire добавили готовую библиотеку, а не придумывали что‑то своё. Та же библиотека, судя по всему, была и в других вирусах.
Уэсли с ужасом перебирал варианты того, как в конечном итоге она оказалась в Shadowmire. С тех пор, как он и Атлас написали RootKitLibV3, прошло три года.
Уэсли ещё никогда не был так напуган.
Репозиторий, где когда‑то лежали исходники, давно удалён. Единственный способ убедиться, что Уэсли не ошибается, — это его личный ноутбук, где мог остаться локальный код.
Уэсли открыл чат с Атласом — и тут же закрыл. Никаких сообщений.
Дверь резко открылась, и Уэсли дёрнулся, отрывая взгляд от телефона.
В кабинет, улыбаясь, зашёл Энцо. Его временный пропуск почему‑то всё ещё работал.
— Я тут. Приветик, — сказал он так, будто в мире не существует ничего страшнее пробок.
Уэсли смог выдавить только слабую улыбку. Слишком многое происходило у него в голове одновременно.
Энцо, наоборот, неторопливо прошёл к столу Уэсли и поставил перед ним бабл‑ти с довольной улыбкой:
— Я надеюсь, ты закончил?
— Дай мне пять минут, — сказал Уэсли ровнее, чем чувствовал себя.
Он сделал первый глоток чая, но, конечно, тот не мог так просто заглушить тревогу.
Уэсли поспешно начал закрывать окна на рабочем ноутбуке, чтобы Энцо не успел ничего спросить.
Энцо смотрел на него с непониманием, заметив, как резко Уэсли застегнул молнию на сумке, куда убрал ноутбук.
— Что тебя взбесило? — спросил он.
Уэсли сглотнул, встретившись с обеспокоенным взглядом. У него вылетело из головы, что у него с Энцо были планы. Нужно было решить, может ли подождать вопрос с библиотекой ещё один день. Казалось, что нет. Возможно, им с Атласом пока ничего не угрожает, но психика Уэсли не выдержит такую неопределённость.
— Мне нужно кое‑что срочно сделать, но на личном ноутбуке. Мы можем перенести вечер кино ко мне?
Энцо кивнул.
— Что за срочность? — не отпустил он.
Уэсли перебирал варианты. Нужно было что‑то придумать. Он с трудом соврал, не встречаясь с Энцо глазами:
— До одиннадцати нужно сдать работу по CS 168, — сказал он наконец. — Я вспомнил, что там надо кое‑что переделать. У меня сохранён только локальный репозиторий на моём ноутбуке. Я попрошу Атласа помочь, чтобы было быстрее.
Он бросил на Энцо умоляющий взгляд.
— Хорошо, — спокойно согласился Энцо. — Без разницы. Мы всё равно согласились прийти на вечеринку в субботу.
Вечеринка была в кампусе, поэтому, да, Энцо бы всё равно к нему приехал.
Уэсли торопливо закончил сборы, и они направились к выходу из офиса.
Приятная уличная прохлада слегка расслабила уставшую голову Уэсли. Путь к машине был быстрым, так как Энцо оставил автомобиль за углом в паре шагов от входа, игнорируя запрет.
Энцо безразлично убрал ярко‑жёлтый тикет со штрафом на переднюю панель, где таких было уже немало.
Пока Уэсли был погружён в свои мрачные мысли о том, что он теперь замешан в масштабную вирусную атаку совсем не так, как планировалось, Энцо начал разговор.
— Я созванивался с мамой. Она рассказала, какую информацию хакеры похищали из банковских систем.
Уэсли сдержал усталый вздох, потому что они вновь обсуждали Shadowmire.
Параллельно с тем, что у специалистов появилась возможность изучить код вируса, стала доступна и расшифровка утекших данных, которые организации когда‑то «защитили» такой скверной системой безопасности. У Уэсли были счета в трёх взломанных американских банках, но, почему‑то, это было последнее, что его волновало.
— Я до этого ещё не доходил, целый день изучал только код. Что там интересного?
На губах Энцо появилась довольная улыбка:
— Почти всё. Они забирали данные по клиентским транзакциям и следы инсайдерских решений крупных игроков. Это значит, они могли знать о крупных сделках фондов, — продолжал Энцо. — И зарабатывать, предугадывая дальнейшее движение рынка.
Уэсли понял, почему Энцо выглядел таким воодушевлённым.
— Кажется, их не интересовали персональные данные клиентов. Думаю, стоит разыскивать кого‑то, кто за эти месяцы необъяснимо хорошо торговал, — предположил Энцо.
Уэсли кивнул. Возможно, он уже не так сильно хочет, чтобы виновника нашли. Если он расскажет, где взял RootKitLibV3, то может привести следствие к Уэсли и Атласу.
— Сегодня отправил документы на магистратуру, — сообщил Энцо, меняя тему. — Стоит признать, после прошлого семестра резюме стало внушительнее. Мой техлид написал большое рекомендательное письмо.
У Уэсли не было сомнений в том, что у Энцо получилось бы поступить и без этого.
— Куда отправил?
Энцо выехал из даунтауна на широкую автомагистраль, и его ладонь уверенно легла Уэсли на бедро.
— Кроме Гринстоуна — в Калифорнийский университет и USC.
Уэсли моргнул, глядя на руку своего парня. Отношения с Энцо длились всего пять дней, и Уэсли всё ещё ловил себя на ощущении нереальности. Будто он не успел привыкнуть к тому, что они уже не просто друзья. Мысли об Энцо почти полностью притупили чувство тревоги, и Уэсли был ему благодарен за это.
— И всё? — Уэсли повернулся к нему.
— Я подумал, что ты точно захочешь остаться в Калифорнии, — пожал плечами Энцо. — Но мама заставила подать и в Англию ещё летом. Но я не особо хочу туда.
Уэсли был растерян. Было неожиданно слышать, что он входил в планы Энцо на следующие два года. Но Энцо всё решил, не потрудившись обсудить сначала с самим Уэсли, и это раздражало.
— Ты должен был сначала поговорить со мной об этом. Я бы поехал с тобой куда угодно.
Уэсли не стал говорить о том, что ориентироваться на желания Уэсли, а не самого Энцо, — глупо, учитывая, что их отношениям всего пять дней.
Энцо бросил на него недоверчивый взгляд.
— Даже в Пенсильванию или в Бостон, — продолжил Уэсли, — в Бостоне у меня сестра. У тебя же ещё есть время подать в Wharton или в Гарвард? Харита смотрела MBA там — у них топ‑программы, и там как раз фокус на инвестициях.
Энцо дослушал спокойно.
— Ты уверен, что готов уехать с западного побережья ради меня?
Уэсли сжал ладонь Энцо на своём бедре. Он не был уверен, что хочет уезжать, но был уверен, что Энцо не должен определять своё будущее, ориентируясь на чужие желания:
— Да, — настоял Уэсли, — я люблю путешествовать. И даже если мне не понравится — это всего два года.
— Ты понимаешь, что там будет зима? — уточнил Энцо.
Уэсли поморщился. Он не мог придумать других аргументов.
— Хорошо, — неохотно признал он. — Это звучит ужасно. Но ты должен приоритизировать образование. Я рад, что ты учитываешь мои предпочтения. Но давай будем объективными — мы встречаемся пять дней.
— Тогда ещё объективнее, — сказал Энцо. — Ты правда думаешь, разница между Wharton и Greenstone решит мою судьбу?
Уэсли отвернулся к окну. Энцо не хотел всю жизнь работать в компании матери и страдал об этом каждый день весь прошлый семестр, но и желания противостоять у него не наблюдалось.
Уэсли не мог осуждать, потому что тоже всю жизнь шёл на поводу у родителей.
— Ты мог бы всё равно подать, — сказал он наконец. — Просто чтобы у тебя был выбор.
— Хорошо, — отозвался Энцо. — Я добавлю пару заявок. Если тебе будет спокойнее.
— Ты говорил то же самое маме, когда подавал в Англию? — пробормотал Уэсли.
Он слышал, как Энцо обречённо вздохнул.
— Я хочу для тебя как лучше, — продолжил Уэсли.
— Я тоже, — ответил Энцо. — Не могу поверить, что мы спорим из‑за этого.
— Мы не спорим, — автоматически возразил Уэсли. — Я просто... не хочу, чтобы ты упустил лучший вариант из‑за меня.
— Я посмотрю другие университеты, — пообещал Энцо и слегка сжал его руку. — Вы с моей мамой точно нашли бы общий язык, — фыркнул он.
Уэсли промолчал. Встреча с матерью Энцо была в его голове отдельным фильмом ужасов. Встречаться с парнем с дорогой машиной — круто. Знакомиться с его мамой, которая, на самом деле, оплачивала все его машины, — страшно.
Уэсли чувствовал себя более усталым, чем после недели хакатона. Любое напоминание о родителях порождало лишний стресс и панические мысли. Казалось, что вся тяжесть мира свалилась на его плечи.
Лио сидел на кухне, когда Уэсли вошёл в сьют.
— Атлас у себя? — спросил Уэсли, на ходу скидывая куртку и сумку.
Не дожидаясь ответа, он уже включал личный ноутбук, стоящий в комнате, листая список старых проектов.
Ему пришлось пролистать далеко вниз — к 2021 году, чтобы найти RootKitLibV3. Его пальцы снова похолодели, и сердце забилось в груди с бешеной скоростью.
Уэсли вывел на одном экране совпадающие фрагменты из отчёта, на другом — свой локальный код. Пробегая глазами по строчкам, он чувствовал, как сжался его желудок.
— Блять, — выдохнул Уэсли и захлопнул крышку, будто так можно было отменить факт, что код был идентичным.
Он вернулся в коридор.
— Атлас у себя? — повторил он уже громче.
Лио поднял голову от учебника.
— Да.
— Мне нужна его помощь. Мы с Энцо будем сегодня у меня. Он скоро придёт — откроешь? Мы возьмём тебе курицу. Если нужно ещё что‑то — напиши Энцо.
Уэсли торопливо захлопнул за собой дверь, чтобы не отвечать на вопросы Лио, и поспешил к Атласу.
Библиотека по взлому руткита была торопливо написана для личных задач. Они с Атласом вычитали, что часть энергопотребления и нагрузки компьютера можно убрать, получив доступ к низкоуровневым настройкам системы. У Уэсли тогда был MacBook, а у Атласа — Acer с Linux (RIP — Харита недавно случайно вылила на него колу), поэтому им пришлось писать так, чтобы оно работало на разных ОС.
Поднимаясь на лифте, Уэсли заставил себя делать успокаивающие вдох и выдох. Они с Атласом были аккуратны даже будучи первокурсниками. По крайней мере, им так казалось
Атлас открыл дверь после того, как Уэсли постучал громче обычного.
— У меня ужасные новости, — сказал Уэсли, заходя и закрывая дверь. Он занял кресло Атласа и поставил ноутбук на стол. — Я нашёл нашу библиотеку из первого курса внутри Shadowmire.
Атлас смотрел на него спокойно.
— Я не писал тебе, — продолжил Уэсли. — На случай, если переписки когда‑нибудь всплывут.
Он понизил голос:
— Нам нужно убедиться, что никаких следов не осталось.
Атлас кивнул, глядя в телефон.
— Атлас! — возмущённо позвал Уэсли.
— Мы и так всё подчистили, — отозвался он.
— Этого может быть недостаточно! Мы были первокурсниками! — Уэсли нахмурился.
— Я... — Атлас наконец‑то поднял на него глаза, — не так давно снова проверил и удалил любые следы, на всякий случай. Ты же знаешь мою работу, мне нельзя быть связанным с чем‑то подобным. Сейчас всё точно чисто. Никаких публичных репозиториев. Никаких старых чатов с кодом. И, если честно, единственное слабое место — это твой ноутбук. Аккаунтов, где это могло светиться, больше нет. Платежи были устроены так, чтобы не оставлять прямой цепочки, а материалы держались в ограниченном доступе. Осталось только тебе удалить локальную копию и тоже избавиться от железа.
Атлас кивнул на контейнер, где были сложены железки от его прошлого ноутбука, и спокойно начал собирать одежду на стирку.
Уэсли сглотнул, сдерживая ярость.
— Мне теперь что, уничтожить ноутбук?
— Харита может помочь, — сказал Атлас так, будто речь шла о домашке.
— Чёрт, как ты можешь быть так уверен? Своими действиями ты только увеличиваешь наш срок!
Уэсли сжал переносицу, перебирая в мыслях всё, что могло их выдать.
— Нам не грозит срок как раз потому, что я всё это сделал, — ровно сказал Атлас. — Брось. Если ты не скажешь никому о библиотеке — они на нас не выйдут, — уверил он.
— Shadowmire не единственный вирус, где её находили! — возразил Уэсли.
Атлас остался спокоен:
— И что? Когда нашли в первый раз? С тех пор на нас так и не вышли.
Уэсли не помнил дату обнаружения первого вируса с RootKitLibV3, хотя стоило бы.
Но и библиотека не была единственным тулзом, который они тогда написали и продали. Таких «полезных» вещей было несколько. Его ноутбуку точно конец.
— Я не расскажу об этом ФБР или компании, — сказал Уэсли. У него был вариант во всём сознаться и возможно уменьшить тем самым срок, но это означало точно разрушить своё будущее. — Но теперь я даже не представляю, как расследовать Shadowmire, не боясь, что мы всплывём сами. И Харита в курсе всего, что мы делали. Мне нужно проверить, нет ли других наших проектов в вирусах, которые уже попали в базу.
Атлас кивнул.
— Энцо у меня вместе с Лио, у меня нет времени этим заниматься сейчас, — выдохнул Уэсли.
Атлас наконец настороженно поднял глаза:
— Энцо же не в курсе?
— Конечно нет. Я пришёл к тебе за «помощью по домашке», — сказал Уэсли. — Надеюсь, эти выходные мы можем спать спокойно. Но потом я проверю абсолютно всё.
Атлас кивнул.
— Никому, кроме нас троих, лучше про это не знать, — поддержал он.
Уэсли опустил глаза на экран ноутбука. Он поспешно безвозвратно удалил данные обо всех проектах, которые они с Атласом продавали в даркнете. Это не внушило уверенности: удаление не означало, что следов не было.
Нужно было избавиться от железа и продумать, где ещё могли остаться хвосты — и как закрыть их так, чтобы самому не сделать хуже.
Когда Уэсли вернулся в сьют вместе с Атласом, Энцо помогал Лио с домашкой по арт‑менеджменту. На экране ноутбука была открыта таблица Excel. Уэсли помнил, как Лио жаловался, что в менеджменте оказалось слишком много цифр.
Они поужинали вместе. Энцо помог Лио закончить с домашкой. Уэсли с Атласом ели молча.
— Не могу поверить, что это было так легко, — пожаловался Лио, раздражённо закрывая Excel.
После ужина у Энцо и Уэсли не было планов.
Энцо сходил в душ и переоделся, пока Уэсли снимал и убирал украшения, раскладывал одежду и пытался привести комнату в порядок. После торопливых утренних сборов кровать снова превратилась в продолжение шкафа.
Ему давно нужно было разгрести вещи. И давно нужно было перестать лечить стресс шопингом.
— Чем хочешь заняться? — спросил Уэсли.
— Ничем, — Энцо лёг на кровать в домашней одежде, которую ему дал Уэсли, и открыл приложение с камерой Алехандро.
У кота была полная миска корма, который высыпался по таймеру автоматически, и фонтанчик с водой. Сытый и довольный, он спал на любимой круглой когтеточке.
Уэсли тоже с умилением взглянул на кота и ушёл в душ.
Под водой мысли снова догнали его.
Пятнадцать лет. Это первая цифра, которая приходила ему в голову. Уэсли читал дела по CFAA. В случае с ним можно спокойно выдвигать обвинение за умышленный ущерб защищённым системам и сговор. А при международном масштабе и количестве пострадавших организаций прокуроры могли требовать показательный приговор.
Он мог сколько угодно повторять себе, что код — это инструмент. Что инструмент можно использовать и во зло, и во благо.
Но проблема была не в философии. Проблема была в том, какую среду и каких покупателей они выбрали тогда.
Они знали, что на легальной бирже фриланса их библиотеку заблокируют в первый же день.
Они сознательно выбрали даркнет — место, куда приходят за анонимностью. Сами подписались под тем, что их продукт — не просто «инструмент», а нелегальный товар. Поставили высокую цену — и желающие всё равно нашлись.
Для Уэсли, Хариты и Атласа значение имели не деньги, а ощущение интеллектуального превосходства. Азарт заключался в том, чтобы доказать себе, что они умнее системы правопорядка. Ещё на старте они разработали многоуровневую систему анонимности.
Они не работали на своих машинах. Вся разработка RootKitLibV3 и других программ велась внутри виртуальных машин, которые после каждой сессии Атлас откатывал к чистому образу.
Они использовали VPN и выходили в даркнет только через Tor‑браузер, который маршрутизировал трафик через множество узлов по всему миру, делая источник крайне сложным для отслеживания.
Для общения с покупателями использовались зашифрованные мессенджеры с функцией самоуничтожения сообщений.
Каждую выплату они пропускали через криптовалютный миксер. Были также аккуратны в выводе денег: покупали предоплаченные дебетовые карты за криптовалюту, затем снимали деньги в банкоматах в разных городах во время своих поездок. Для системы это выглядело как обычные траты туристов.
Спокойствие Атласа можно было объяснить результатом скрупулёзной работы. Казалось, теперь им оставалось уничтожить последнее устройство, которое могло сохранить улики, — ноутбук Уэсли.
Они продумали всё до мелочей. Уэсли со своей тревожностью и не мог поступить иначе.
Сейчас он бы не сделал ничего подобного, но тогда ему было восемнадцать‑девятнадцать лет.
Стук в дверь ванной вернул его в реальность.
После душа Уэсли взял из холодильника две банки пива — себе и Энцо.
Холодильник выглядел печально: напитки, энергетики, остатки доставки. Нормальной еды почти не было. Уэсли не умел готовить, а у Лио пропало желание из‑за учёбы.
Энцо с благодарностью принял банку.
На ноутбуке — том самом, с которого пару часов назад Уэсли в панике удалял старые папки — была футбольная трансляция. Уэсли услышал трибуны и голос комментатора до того, как увидел экран.
Кровать у Уэсли была меньше, чем у Энцо, но в этом были свои плюсы.
Пока Уэсли открыл пиво, Энцо устраивался поудобнее, поправляя подушки за спиной и удерживая ноутбук на коленях.
Уэсли смотрел на это с улыбкой, делая большой глоток. Он поймал себя на том, что — да — он на секунду отвлёкся. Казалось, гормоны в его теле были даже сильнее, чем угроза заключения в тюрьме.
Энцо поднял руки, приглашая в объятия:
— И долго мне ещё тебя ждать?
Уэсли выключил верхний свет, оставив лампу, и молча сел ему на колени — лицом к нему, игнорируя дебютный матч «Интер Майами» с участием Месси.
Энцо удивлённо поднял брови, но сразу обнял его.
Уэсли уткнулся лбом в плечо Энцо.
— Я хочу перестать работать, — пробормотал он.
— Давай, у тебя богатый парень, — тут же поддержал Энцо.
Уэсли коротко рассмеялся — и на секунду подумал, что, возможно, ему и правда стоило уйти из Innotech. Если когда‑нибудь правда раскроется, работа «внутри расследования» может тоже сыграть против него.
Присутствие Энцо успокаивало. Ему нужно было почувствовать, что он не один. Уэсли расслабился, рассматривая веснушки Энцо, которые опускались ниже к шее.
— Ты меня бросишь, если я буду заниматься киберпреступлениями? — спросил Уэсли на удивление спокойно, будто проверял границу.
Энцо медленно убрал банку от губ и посмотрел на него.
— Смотря какими, — подумав, ответил Энцо.
— Смотря какими? — Уэсли даже отстранился, не веря.
Энцо кивнул:
— Мир не чёрно‑белый. И... — он усмехнулся, — ты слишком красивый, чтобы я был строгим судьёй.
Уэсли покачал головой, но не смог сдержать улыбки.
— Ты что‑то задумал? — спросил Энцо уже внимательнее.
— Нет, — сказал Уэсли. Свои преступления он уже совершил и не хотел новых.
— Жаль. Я уже успел представить, что у тебя есть нелегальный план заработать миллиарды, чтобы мы больше никогда не работали.
Уэсли слабо посмеялся.
— Прости, но буду знать, что при определённых условиях у меня будет твоя поддержка.
— Конечно, — сказал Энцо и похлопал его по бедру.
Уэсли почувствовал, как по телу прошёл ток. Пальцы скользнули по груди Энцо.
Энцо поставил ноутбук на пол.
— Ты собирался смотреть матч, — напомнил он с ухмылкой.
— Это было до того, как ты оказался у меня на коленях.
— Я тебя отвлекаю?
— Немного. Но я не против.
— Ты не должен всегда поддерживать меня во всём, — возразил Уэсли.
Энцо посмотрел тем самым взглядом, который раньше пугал, а теперь заводил.
— Думаю, нам нужно быть потише, — сказал Энцо и запустил руку под футболку Уэсли. Его голос стал тише, но увереннее.
Уэсли сглотнул, ощущая как громко заколотилось его сердце.
— Да, тут тонкие стены, — выдохнул он и позволил Энцо снять с него одежду.
— Будем надеяться, что они услышат только футбол, — тихо добавил Энцо. К счастью, Лио уже был в комнате Атласа.
Мягкие губы скользнули по его шее, а затем ниже, к ключицам. Уэсли едва дышал. Конечно, заниматься сексом в пентхаусе Энцо, где можно было шуметь сколько угодно, было бы удобнее. Но в этой вынужденной тишине, в страхе быть услышанным, таилась своя, запретная острота.
— Ты же умеешь быть тихим, да? — строго спросил Энцо, останавливаясь, прежде чем перевернуть их.
— Конечно, — уверил Уэсли, хотя сомневался в своих силах.
Сохранять молчание требовало постоянного, изматывающего контроля. Энцо, кажется, ему не поверил — сейчас Уэсли был готов пообещать что угодно, лишь бы его не останавливали. Кровать жалобно заскрипела, когда они перевернулись, и Уэсли оказался на спине. Он закусил губу в тот момент, когда Энцо помог ему снять шорты и бельё.
Первый стон вырвался у него, когда Энцо стянул с себя футболку. Уэсли тут же получил суровый взгляд, от которого по телу пробежала дрожь. Сильные руки обхватили его бёдра, и одним плавным движением Уэсли съехал ниже, голова упала на подушку и его дыхание перехватило.
Энцо навис над ним, склонился и захватил его губы в грубом поцелуе, от которого через несколько секунд Уэсли ловил ртом воздух. Возможно, это снова была паранойя, но каждый звук казался ему оглушительно громким: шорох простыни, сдерживаемые вздохи, влажный звук поцелуев. К счастью, комментатор снова затараторил, заглушая собой остальной шум в комнате.
Сознание начинало плыть. Уэсли изо всех сил пытался глотать стоны, поднимавшиеся к горлу.
Оставив ещё один короткий поцелуй на его губах, Энцо отстранился с самодовольной ухмылкой.
— Ты действительно серьёзно настроен насчёт этой тишины, да? — прошептал он прямо в ухо Уэсли, отчего по спине пробежали мурашки.
— Я же сказал, что могу, — напомнил Уэсли, запуская руки вниз по груди Энцо, чтобы ощупать твёрдый пресс.
Энцо вздрогнул. С улыбкой Уэсли скользнул ладонями по коже парня в тех местах, которые заставили бы Энцо наклониться за следующим поцелуем. Он был грязнее, влажнее и гораздо громче предыдущего. Звук сливающихся губ и сдавленных стонов наполнял комнату почти невыносимым напряжением.
Уэсли не хотел ждать дольше. Он отстранился на мгновение.
— В тумбочке, — коротко проинструктировал он и тут же вернулся к поцелую, продолжая исследовать тело Энцо руками.
Пружины матраса вновь жалобно заскрипели под их весом, когда Энцо наклонился за смазкой. Сердце Уэсли замерло, но он успокоил себя: матрас скрипел бы, даже если бы он лежал здесь один.
Энцо усмехнулся, покрывая пальцы скользкой субстанцией. Первый палец заставил Уэсли нахмурить брови от неприятных ощущений. Даже если Энцо пытался быть аккуратным, это не сработало. Уэсли впился зубами в губу, чтобы не издать ни звука, и в тот же миг почувствовал, как губы Энцо приникли к его шее, явно оставляя засос на видном месте.
— Блять, Энцо, — возмущённо прошипел Уэсли, пытаясь оттолкнуть его. Безуспешно. Энцо замедлил движения и ввёл второй палец. Мысли Уэсли сузились до ощущений внизу живота. Энцо не торопился, тщательно растягивая его, пока тот не был готов принять третий.
Уэсли почти забыл об уговоре, упираясь пятками в матрас и приподнимаясь навстречу пальцам, безуспешно пытаясь принять их глубже.
Энцо оторвался от его шеи только когда сам захотел. Он снова ухмыльнулся, глядя Уэсли в глаза, и намеренно провёл пальцами вплотную к нужному месту, но не коснулся его. Теперь Уэсли мог думать только об этом.
— Энцо... — вырвалось у него, когда тот повторил движение.
— Если уж ты так этого хочешь, может, стоит быть чуть громче?
Уэсли удивлённо уставился на него.
— Мы не у тебя дома.
— Никто не услышит, если ты будешь достаточно тихим, — пробормотал Энцо, и его голос прозвучал низко и соблазнительно. — Я просто хочу слышать тебя. К тому же, — он кивнул в сторону экрана, где началась очередная атака, — у нас отличное звуковое прикрытие.
Уэсли недовольно засопел.
— Наслаждаешься моими страданиями, да?
— Конечно нет, — покачал головой Энцо.
Он снова наклонился, коснувшись губами щеки Уэсли, и в тот же миг изогнул пальцы именно там, где это было нужно. Тихий прерывистый вздох вырвался из груди Уэсли и прозвучал прямо у его уха.
Пальцы задвигались быстрее. Теперь это была не подготовка. С каждой новой дрожью и сбивающимся дыханием Уэсли чувствовал, как погружается в пучину ощущений всё глубже. На фоне звучал раскатистый гул трибун — видимо, кто‑то опасно подошёл к воротам.
— Энцо... — простонал он и сам испугался этого звука. Слишком громко. Но его стон потонул в оглушительном свистке судьи.
Паника на мгновение охватила его, но Энцо уже бесстыдно сбрасывал с себя остатки одежды.
— Обожаю, как ты произносишь моё имя, — прерывисто выдохнул Энцо, прежде чем вновь захватить его губы.
Уэсли ощутил тупое давление головки члена у своего входа.
Это было похоже на магию. Конечности ослабли, когда он вцепился в обнажённую спину Энцо, а глаза закатились от наслаждения в тот момент, когда тот вошёл в него до конца. Шум стадиона на экране превратился в сплошной белый гул, сливаясь с гулом в его собственных ушах.
Уэсли не издал ни звука. По крайней мере, ему так показалось. На глаза навернулись слёзы, и он заморгал, вглядываясь в полумрак. От последнего толчка его бёдра рефлекторно сомкнулись на талии Энцо.
— Чёрт, — беззвучно выдохнул Уэсли, закатив глаза к потолку.
Энцо был ненамного тише. Он замер, давая Уэсли время привыкнуть. Его тяжёлое дыхание обжигало кожу на шее.
— Двигайся, — разрешил Уэсли.
Энцо приподнял голову. Его взгляд был затуманен желанием. Уэсли не был готов к тому, что последовало.
Ритмичные толчки сводили с ума. Энцо двигался нарочито медленно, явно стараясь не стукнуть изголовьем о стену, но это порождало другую проблему.
Чёртова пружина. Та, о которой Уэсли имел все основания беспокоиться, отзывалась жалобным скрипом на каждое движение бёдер Энцо. Этот медленный, ритмичный звук делал происходящее ещё более порочным. К счастью, игра возобновилась, и нарастающий гул приближающейся атаки со стадиона почти полностью заглушил предательский скрип.
— Помедленнее.
— Медленнее? — с тревогой переспросил Энцо. Он послушно замедлил темп, и, чёрт, это было ещё хуже. Скрип стал размеренным, грязным, он возбуждал ещё сильнее и при этом не оставлял сомнений в том, чем они заняты. Тишину в комнате теперь нарушали только этот скрип, их дыхание и ровный гул трансляции.
— Ладно, я беру свои слова назад.
— Определись уже, — с надрывом выдохнул Энцо.
— Просто делай, как до этого.
Темп снова ускорился.
Уэсли отпустил контроль, вцепившись в широкие плечи Энцо как в спасательный круг, пока тот брал на себя всю инициативу.
— Чёрт, Уэсли...
Его имя на губах Энцо совпало с криком комментатора о промахе нападающего.
— А теперь кому нужно быть потише? — дразняще прошептал Уэсли.
Это вышло ему боком. В тот миг, когда он потерял концентрацию, стон вырвался из его губ. Затем ещё один и ещё, и прежде чем он осознал это, уже сам выгибался навстречу каждому движению. Его стоны теперь смешивались с криками болельщиков с экрана, создавая странный дуэт.
К ним добавлялись тихие шлепки кожи о кожу в тишине комнаты, но Уэсли больше не волновало. Как и Энцо, чьи бёдра двигались всё нетерпеливее.
Уэсли чувствовал, что Энцо близок. Тихая мантра «чёрт‑чёрт‑чёрт», выдыхаемая ему в ухо, означала, что Энцо достигал предела.
— Сильнее, — задыхаясь, прошептал Уэсли, впиваясь пальцами в простыни.
Потребовался один, два, три мощных толчка, чтобы он кончил. Сознание померкло, когда он судорожно сжался вокруг Энцо. В этот момент на стадионе кто‑то бил по воротам, и оглушительный рёв трибун достиг пика, полностью поглотив его собственный сдавленный крик.
Четвёртый толчок обладал такой силой, что изголовье с грохотом ударилось о стену. Звук эхом разнёсся по комнате, и Энцо с глубоким, сдавленным стоном кончил глубоко внутри него.
В тишине комнаты гулко звучало только их тяжёлое, прерывистое дыхание.
— Ну, это было не так уж громко, — виновато произнёс Энцо.
Уэсли несколько раз моргнул, чувства медленно возвращались.
— Энцо, это было пиздец как громко, — возразил он. Но ему было это нужно. О чём он так переживал до этого? Кажется, это было что‑то важное...
Уэсли снился кошмар, в котором он стоял в суде и не мог оправдаться. Обвинители знали всё и оглашали его преступления так, будто читали список из его памяти. Уэсли не мог возразить, потому что обвинения были правдой.
Он проснулся резко и с колотящимся сердцем. На секунду стало легче от мысли, что это всего лишь сон, но облегчение растворилось почти сразу. Сон просто собрал в один образ то, чего он боялся наяву.
Уэсли лежал, приходя в себя. Рядом Энцо обнимал его рукой и ногой. Из‑за этого было жарко, но его не хотелось отталкивать. Присутствие Энцо отвлекало от тревожных мыслей.
Уэсли хотел высокого накачанного футболиста с крутой тачкой — и получил его. Только вместе с тачкой шёл ещё и мозг. И даже забота.
В это было трудно поверить. Иногда ему казалось, что мир отдал ему за все усилия, приложенные за время учёбы — так он стал репетитором.
На улице начинало светать. Время было слишком ранним для пробуждения. Уэсли закрыл глаза и попытался уснуть снова.
24 февраля 2024, суббота
К вечеру кухня в сьюте Уэсли и Лио собрала, кроме них двоих, ещё Энцо, Атласа, Хариту и Кэла.
Энцо и Уэсли провели ленивый день: проснулись позже обычного, спокойно позавтракали и почти до вечера валялись на кровати, смотря YouTube. Уэсли нужен был такой отдых после напряжённой недели, и у него почти получалось не вспоминать про Shadowmire.
Сегодня ночью планировалась вечеринка для выпускников. Все повторяли одно и то же — скоро будет не до веселья и «надо успеть в последний раз».
Энцо не сводил глаз с Уэсли, почти не замечая насмешливого взгляда Хариты. Их друзья даже не пытались начать разговор о чём‑то другом.
— Я с самого начала говорил Уэсли, что удивлён, как легко Энцо ему открылся, — заявил Кэл с самодовольным видом. — Но меня напрягало, что советы про парней ему давал Кэмерон.
Харита сделала невинное лицо, будто Уэсли вообще никогда не пересказывал ей этот разговор в деталях.
— Звучит сомнительно, — согласился Лио.
— Он помог мне разобраться с сомнениями, — сказал Энцо в защиту друга. — И, кажется, ему реально помогает терапия.
Кэл закивал, но Лио это не убедило. А Уэсли, наоборот, мгновенно заинтересовался.
— И как он тебе помог?
Энцо коротко поделился своей историей. После чего тему наконец‑то сменили. Харита упомянула работу, и всё пришло к тому, что Энцо вновь восторженно рассказывал о Shadowmire и о том, как хакеры могли использовать украденные данные. Он говорил скорее с Харитой и Атласом.
— Мы думали о банальной продаже персональных данных, — с благоговением произнёс Энцо, — но это даже круче. Я глубже посмотрел отчёт Innotech. Помимо транзакций, они тянули служебную переписку по сделкам, внутренние заметки аналитиков, черновики отчётов... и даже элементы данных об ордерах и их динамике.
Атлас подхватил мысль:
— С этим набором данных вполне можно заранее знать изменении цен на ценные бумаги и зарабатывать на этом, Если ты заранее знаешь, что крупный игрок собирается резко входить в позицию...
Харита нахмурилась:
— Но разве это не слишком заметно?
Энцо пожал плечами:
— Думаю, у них были масштабы и инфраструктура. Скорее всего, это было автоматизировано: фильтрация потока данных, поиск «событий», оценка риска, распределение по времени. И не только акции. Валюты, сырьё, дериватив. Там объёмы такие, что при грамотном подходе можно раствориться.
Уэсли начинал понимать Лио, который с пустым взглядом слушал разговоры о программировании. После пары бокалов мозг тем более отказывался удерживать смысл в потоке терминов.
— Если бы их не нашли, — сказала Харита, — они могли бы делать это годами. И выглядеть как самые успешные трейдеры мира.
— Да, — отозвался Энцо, и Уэсли уловил в его голосе странное, почти раздражённое восхищение. — И список того, что можно использовать, шире. Сделки M&A: подготовительная переписка, планы, тайминги. Квартальные отчёты: результаты до публикации. Рейтинги: если ты знаешь о готовящемся понижении заранее — у тебя есть преимущество.
Харита покачала головой:
— Это круто. И прибыль при этом может выглядеть легальной: деньги приходят на брокерские счета, всё «по правилам». Регуляторы годами могут не замечать.
Энцо кивнул:
— Да, если всё делать правильно. На их месте я бы ещё продавал аналитику.
— Ты о чём? — оживился Атлас.
— Можно построить идеальный индекс или продавать подписки на аналитику. Публиковать прогнозы и индексы — как будто это талант и математика. И попробуй потом докажи, что источник — украденные данные, а не грамотный расчет.
Харита обменялась взглядом с Атласом — видно было, что этот вариант её зацепил именно своей прикладной частью.
Лио посмотрел на Уэсли так, будто умолял прекратить.
Уэсли поймал себя на мысли, что действительно встречается с «финансовым бро». Энцо когда‑то говорил, что ему ближе экономика и математика — и, похоже, не шутил. Просто Уэсли с ним об этом почти не разговаривал.
Вместо участия в диалоге Уэсли открыл ASOS. После вчерашнего кошмара он заслужил что‑то, способное улучшить его настроение. В корзине уже лежали вещи, и Уэсли должен был их наконец‑то купить.
Кэл, игнорируя сложные разговоры, разлил Уэсли и Лио ещё алкоголя.
— Я рад, что у моих друзей есть такие парни, как вы, — пафосно заявил он. — Ещё бы Кэмерона пристроить в правильные руки.
Лио фыркнул с видом «даже не пытайся», но Уэсли всё равно поддержал тост, и они выпили.
Кэл поставил стопку на стол и заговорил вдруг серьёзно:
— Знаете, что нам нужно сделать?
Уэсли насторожился:
— Что?
— Нам нужна новая поездка к озеру. Всем составом.
Уэсли мгновенно оживился:
— На все выходные?
— Да. В пятницу вечером уехать, в понедельник или воскресенье вернуться.
— Это было бы идеально, — с энтузиазмом сказал Уэсли, хлопнув Кэла по плечу.
Лио ткнул Уэсли пальцем:
— А ты не будешь потом ныть, что слишком занят учёбой и работой?
— Конечно, нет, — уверенно ответил Уэсли.
Лио толкнул Кэла локтем:
— Запиши на видео. Для доказательства. Он так говорит только потому, что пьяный.
— Нет, — упрямо сказал Уэсли. — Я ещё уволюсь с работы и буду точно свободен.
Кэл и Лио заставили его торжественно «поклясться» на камеру.
25 февраля 2024, воскресенье
Уэсли спустился на парковку у общежития. Полчаса назад он провожал Энцо — и, как только тот ушёл, тяжесть тревоги навалилась с новой силой. Возможно, где‑то агенты ФБР уже планировали его арест.
У края парковки стояла чёрная Audi — машина Лио. За рулём сидел Атлас, рядом — Харита.
Уэсли открыл дверь и устроился на заднем сиденье.
— Куда мы едем? — раздражённо спросил он, не успев даже пристегнуться.
Было около девяти вечера.
— Мы подумали, что лучше сделать это в офисе Хариты, — спокойно ответил Атлас. — Там есть оборудование.
— Я в курсе всего, — добавила Харита.
Уэсли резко посмотрел на Атласа:
— Почему ты ей рассказал?
Почему-то Уэсли ошибочно предполагал, что они не скажут всю правду Харите.
— Она и так всегда была при делах, — напомнил Атлас.
Харита не писала код, но курировала отмывку денег. Часть обезличенных карт была куплена в том числе ею.
Уэсли покачал головой, не веря в происходящее.
— Почему мы с вами оказались в какой‑то нелегальной авантюре? — задал риторический вопрос Уэсли.
Харита усмехнулась.
— Мы слишком умны, чтобы ограничиваться рамками закона, — самодовольно произнесла она.
Уэсли не разделял её уверенности. Его психика не выдерживала постоянной угрозы. И никакие деньги не стоили пятнадцати лет в тюрьме. Возможно, они смогут пойти на сделку и просто работать до конца жизни в ФБР или ЦРУ.
Офис Хариты располагался в стеклянной высотке в деловом центре Санта‑Крины. Небоскрёб имел форму вытянутого овала с острым пиком и был окружён небольшим парком с ровными деревьями, плиткой и скамейками. Днём здание красиво отражало блеск солнца, сейчас для Уэсли оно мрачно возвышалось, становясь всё более пугающим по мере того, как Атлас подъезжал к нему.
— Что за погода... — с досадой сказала Харита, глядя в окно. — Вчера же было нормально.
По городу лупил ливень. В небе вспыхнула молния, и почти сразу ударил гром. Уэсли вздрогнул. Он из‑за тревоги не мог поддерживать непринуждённую беседу, поэтому обсуждение вечеринки Атласом и Харитой его только раздражало.
Небоскрёб назывался «Аврора». Подземная парковка в это время была закрыта, и Уэсли выругался: пришлось идти через дождь, прижимая ноутбук к груди.
В холле Уэсли с удивлением увидел, что у Атласа уже есть пропуск. Он приложил его к турникету. Харита тем временем спокойно объяснила охраннику, почему они здесь так поздно. Она представила его как сотрудника, который обычно работал только удалённо, но у Datasolve приключилась «авария», которую «нужно починить до утра».
Они поднялись на прозрачном лифте, и Уэсли машинально отметил: в другой ситуации он бы сделал фото вида. Сейчас ему было не до этого. Datasolve арендовали помещения на 34‑м этаже. Уэсли ещё не успел там побывать.
Харита провела их по коридору мимо стеклянных перегородок и светло‑серых стен из необработанного бетона в небольшой кабинет системного администратора. Кабинет выглядел слегка пугающе: высокие полки с техникой и контейнеры с инструментами отбрасывали тень, в окна стучал дождь.
Харита включила свет и обстановка мгновенно стала менее мрачным. Как и во всем офисе здесь был бело-серый минималистичный дизайн. Она повесила мокрую джинсовку на крючок и повернулась к Уэсли:
— Итак. Нам нужно убрать то, что может стать уликой. Безвозвратно, — с расстановкой произнесла Харита, ткнув на серебряную крышку личного ноутбука Уэсли.
Уэсли положил его на стол. Руки дрожали, когда он открыл крышку. В голове вспыхивали вопросы один за другим: достаточно ли он удалил? что, если остались следы? что, если уже поздно?
Харита принесла небольшую коробку с инструментами.
— Приступим? — спросила она ровным голосом.
Они работали быстро и молча. Харита действовала уверенно, как человек, который не делает ничего «впервые». Уэсли наблюдал, почти не дыша.
Когда накопитель извлекли, Харита быстро подготовила всё к физическому уничтожению — так, чтобы от данных не осталось ничего, что можно «восстановить».
Уэсли было тоскливо наблюдать, как разрушался ноутбук, который служил ему с первого курса. Ещё нужно было придумать оправдание его исчезновению.
Он покачал головой, отказываясь верить, что стирает следы преступления вместе с друзьями ночью, под ливнем.
Это было странно, но часть тревоги действительно отступила. Возможно, потому что он больше не мог придумать других вариантов того, как их могли поймать.
Глоссарий
Реверс‑инжиниринг (reverse engineering): Анализ исполняемой программы «вглубь», чтобы восстановить её логику, структуру и работу по уже готовому бинарному файлу, а не по исходному коду.
Дизассемблированный код на ассемблере (disassembled assembly code): Машинные инструкции, переведённые обратно в низкоуровневый текстовый вид (ассемблер), пригодный для чтения и анализа человеком.
Пошаговая отладка (debugging, пошаговое выполнение): Режим работы программы под управлением отладчика, когда выполнение можно останавливать после каждой важной инструкции, просматривая состояние регистров, памяти и переменных; используется для понимания логики работы и поиска уязвимостей.
«Песочница» (sandbox): Изолированная виртуальная среда, в которой запускают подозрительные программы (вредоносы), чтобы изучить их поведение, не заражая реальную систему.
Динамический анализ (dynamic analysis): Изучение программы во время её выполнения: отслеживание системных вызовов, изменений в памяти, файловой системе, сети и т.п. (в отличие от статического анализа, который смотрит только на код).
Регистры процессора (CPU registers): Небольшие, очень быстрые области памяти внутри процессора, в которых временно хранятся числа и адреса при выполнении инструкций; при анализе вредоноса по значениям регистров можно понять, что он делает.
Root‑права (root privileges): Максимальные права доступа в системе (аналог администратора), позволяющие делать с устройством всё: читать/менять любые файлы, обходить защиту, скрывать своё присутствие и т.п.
Виртуальная машина (Virtual Machine, VM): Программная «копия» компьютера, работающая внутри другой системы; позволяет запускать отдельную ОС и программы в изоляции, а затем откатывать состояние к «чистому» снимку.
Tor‑браузер (Tor Browser): Браузер, использующий сеть Tor, которая многократно пересылает зашифрованные данные через цепочку узлов по всему миру, что делает установление исходного адреса пользователя крайне сложным.
Зашифрованные мессенджеры с самоуничтожением сообщений: Чаты, где сообщения шифруются (их не может прочитать провайдер или третьи лица) и автоматически удаляются через заданное время, уменьшая объём потенциальных улик.
Криптовалютный миксер (cryptocurrency mixer): Сервис, который принимает криптовалюту от разных людей, перемешивает её и возвращает другим адресам, разрывая связь между исходным и конечным кошельками, что затрудняет отслеживание происхождения средств.
Предоплаченная дебетовая карта (prepaid debit card): Карта, на которую заранее зачислена сумма денег, обычно покупаемая анонимно (в случае даркнета — за криптовалюту); потом с неё можно снимать наличные в банкоматах, маскируя источник средств.
CFAA (Computer Fraud and Abuse Act): Американский закон о компьютерном мошенничестве и злоупотреблениях; позволяет предъявлять обвинения за несанкционированный доступ к «защищённым системам», умышленный ущерб, сговор и т.п., при этом санкции могут достигать десятков лет тюрьмы при крупном и международном ущербе.
