Вегвизир. Бульон. №05
Глава 1. ЧИСТАЯ РАБОТА
ВЕГВИЗИР. БУЛЬОН
Ксандр Веришин, IVAN
Глава 1. ЧИСТАЯ РАБОТА
Техзадание пришло в 3:47 ночи.
Бульон не спал — он никогда не спал в это время. Он работал, или смотрел в потолок, или кормил кота, который пришёл однажды в приоткрытую форточку и больше не ушёл. Кот был серый, без имени, и ел всё подряд без разбора. Бульон уважал такой подход к жизни.
Сообщение пришло через четвёртый уровень луковой маршрутизации, с временным ключом, который уже истекал пока он читал. Отправитель — никто. Адрес — облако. Деньги — уже в ячейке, половина вперёд.
Бульон прочитал три раза.
Задача была красивая. Не в том смысле, что благородная — в том смысле, что элегантная, как хорошая математика. Написать алгоритм, который умеет «дышать» на бирже. Создавать органичный шум — мелкие покупки, мелкие продажи, случайные паузы, имитация живого трейдера. Никакой грубости, никаких резких движений. Просто фон. Просто воздух.
Для чего этот воздух нужен — в задании не говорилось.
Бульон не спрашивал.
Он вообще редко спр
ВЕГВИЗИР. БУЛЬОН
ВЕГВИЗИР. БУЛЬОН
Ксандр Веришин, IVAN
* * *
Глава 1. ЧИСТАЯ РАБОТА
Техзадание пришло в 3:47 ночи.
Бульон не спал — он никогда не спал в это время. Он работал, или смотрел в потолок, или кормил кота, который пришёл однажды в приоткрытую форточку и больше не ушёл. Кот был серый, без имени, и ел всё подряд без разбора. Бульон уважал такой подход к жизни.
Сообщение пришло через четвёртый уровень луковой маршрутизации, с временным ключом, который уже истекал пока он читал. Отправитель — никто. Адрес — облако. Деньги — уже в ячейке, половина вперёд.
Бульон прочитал три раза.
Задача была красивая. Не в том смысле, что благородная — в том смысле, что элегантная, как хорошая математика. Написать алгоритм, который умеет «дышать» на бирже. Создавать органичный шум — мелкие покупки, мелкие продажи, случайные паузы, имитация живого трейдера. Никакой грубости, никаких резких движений. Просто фон. Просто воздух.
Для чего этот воздух нужен — в задании не говорилось.
Бульон не спрашивал.
Он вообще редко спрашивал «зачем». Это был чужой вопрос, философский, из той части жизни, где люди ходят на работу и пьют кофе с молоком. Его вопрос всегда был другой: как. Как сделать изящно. Как не оставить следов. Как написать код, который живёт, а не просто выполняется.
Он открыл новый проект. Назвал папку «soup». Усмехнулся.
Кот запрыгнул на стол, сел между вторым и третьим монитором и уставился в экран с видом эксперта.
— Не мешай, — сказал Бульон.
Кот моргнул. Не ушёл.
Братск за фольгированными окнами дышал морозом — минус двадцать восемь, февраль, темнота до восьми утра. Бульон этого не замечал. У него была задача. У него была половина оплаты. У него был кот.
Он начал писать.
Код шёл легко — как всегда, когда задача красивая. Алгоритм получался живым: он умел ускоряться в моменты рыночной активности, замедляться в тишине, делать паузы с нормальным распределением, как настоящий человек, который отвлёкся на чай. Бульон добавил вариативность реакций, случайный дрейф в пределах допустимого коридора, имитацию усталости к концу торговой сессии.
К рассвету алгоритм дышал.
Бульон откинулся на спинку кресла, посмотрел на код. Хорошая работа. Чистая. Один из лучших его скриптов за последний год — хотя никто никогда об этом не узнает, потому что такова природа его профессии.
Он упаковал файлы, зашифровал, отправил по обратному адресу из задания.
Через семь минут упала вторая половина оплаты.
Бульон закрыл ноутбук, встал, прошёл на кухню. Поставил чайник. Посмотрел в окно — точнее, в фольгу на окне. Где-то там был город. Где-то там был мороз. Где-то там люди шли на работу, не зная, что ночью кто-то написал кусочек механизма, который будет жить своей жизнью в цифровом пространстве.
Кот пришёл на кухню и сел у холодильника.
— Пельмени? — спросил Бульон.
Кот моргнул.
— Согласен.
Он достал пакет, поставил кастрюлю. Работа закончена. Файл «soup» удалён. Деньги распределены по трём адресам.
Он забыл об этом на следующий день.
Глава 2. ШУМ
Глава 2. ШУМ
Март пришёл без потепления — только с длинным светом, который резал глаза после зимней темноты.
Бульон работал над другим заказом — скучным, корпоративным, пентест для какой-то логистической компании из Новосибирска. Деньги средние, задача банальная. Он делал это автоматически, как чистят зубы.
Параллельно, по привычке, держал открытым один терминал с биржевыми данными. Не торговал — просто смотрел. Биржа была для него как аквариум: красиво, ритмично, и иногда в нём происходило что-то странное.
В этот раз странное происходило уже третью неделю.
Он заметил краем глаза — характерный паттерн в движениях нескольких акций второго эшелона. Мелкие покупки. Мелкие продажи. Случайные паузы. Нормальное распределение задержек. Имитация живого трейдера.
Бульон остановился.
Посмотрел внимательнее.
Его кофе остыл.
Он открыл историю торгов за последние шесть недель и написал скрипт, который искал этот паттерн — его паттерн, его ритм, его распределение вариативности — по всему рынку. Скрипт работал двенадцать минут.
Результат был некрасивый.
Его алгоритм — тот самый, из февраля, из папки «soup» — работал в пятнадцати разных точках одновременно. Он был скопирован, модифицирован, встроен в более сложную структуру. Он стал частью чего-то, что Бульон сразу и точно идентифицировал как координированную манипуляцию рынком.
Кто-то использовал его дыхание как маскировку для чего-то большого.
Бульон встал. Прошёлся по квартире. Три шага туда, три шага обратно — больше пространства не было.
Он не был наивным человеком. Он понимал, что его заказчики не всегда занимались легальными вещами. Это было частью ценообразования — за анонимность платят больше. Но одно дело — не знать деталей. Другое дело — видеть свой код внутри механизма, который явно делает что-то масштабное и явно плохое для тех, кто на другом конце.
Кот пришёл, потёрся об ногу.
— Ты бы что сделал? — спросил Бульон.
Кот ушёл к миске. Практичное животное.
Бульон сел обратно. Смотрел на данные. Видел рисунок — не сразу, но постепенно, как проявляется фотография. Движение шло не хаотично. Оно было направленным. Много мелкого шума создавало один большой ветер, который нёс что-то в одну сторону.
Он написал слово в блокноте, который держал рядом с клавиатурой.
МЕТЕЛЬ.
Перечитал. Закрыл блокнот.
Логистическая компания из Новосибирска подождёт.
Глава 3. АРХИТЕКТУРА
Глава 3. АРХИТЕКТУРА
Бульон не копал из принципа. Он копал потому, что не мог не копать — это было как незакрытая скобка в коде, как обрыв в середине строки. Мозг не успокоится, пока не найдёт закрывающий символ.
Он начал с данных.
Пятнадцать точек его алгоритма. Пятнадцать торговых аккаунтов — каждый зарегистрирован на разное юрлицо, в разных брокерских системах. На поверхности — ничего общего. Разные регионы, разные объёмы, разные инструменты.
Но паттерн был одинаковый. Его паттерн.
Бульон написал парсер, который собирал публичные данные — биржевые отчёты, раскрытия, движения по эмитентам. Данных было много, и они были скучные. Именно в скучных данных прячутся интересные вещи.
Первый слой он вскрыл за три дня.
Все пятнадцать аккаунтов координировались — не явно, не через один сервер, а через серию промежуточных сигналов, встроенных в легальный информационный поток. Кто-то был очень умный. Кто-то строил это долго и аккуратно.
Второй слой занял неделю.
За аккаунтами стояли подставные компании — типовая конструкция, ничего оригинального. Но одна из цепочек вела к реальному адресу. Не домашнему — корпоративному. Московскому.
Бульон остановился перед этим адресом как перед дверью, за которой что-то живёт.
Он пробил компанию через открытые реестры. Импортные поставки, консалтинг, что-то про финансовые услуги. Стандартная оболочка. Директор — номинал, был директором в сорока трёх других компаниях одновременно.
Но в учредителях — один человек. Реальный. С реальной биографией.
Бульон прочитал имя.
Артур Каримов.
Поискал. Нашёл немного — несколько деловых публикаций, пара упоминаний в отраслевых медиа, один старый материал про инвестиционный форум. Фотографий почти нет. Человек, который умеет не светиться.
Именно такие люди и строят метели.
Кот запрыгнул на стол, сел на клавиатуру второго ноутбука — того, который Бульон использовал для чистых задач. Обозначил территорию.
— Слезь, — сказал Бульон.
Кот не слез.
Бульон посмотрел на имя на экране. Каримов. Значит, вот кто купил его дыхание и вложил его в свою машину. Значит, вот кто решил, что алгоритм — это просто инструмент, без автора, без истории.
Это его почти не злило. Злость — дорогое топливо, он предпочитал более холодные виды энергии.
Его злило другое.
Код был живой. Его код. И кто-то взял живое и сделал из него шестерёнку.
Он открыл новый файл. Начал документировать — методично, слой за слоем. Не для кого-то. Для себя. Потому что если ты понимаешь архитектуру врага — ты уже внутри его системы. А если ты внутри — у тебя есть варианты.
За окном (за фольгой на окне) март становился апрелем.
Глава 4. УЯЗВИМОСТЬ
Глава 4. УЯЗВИМОСТЬ
Бульон нашёл дыру на двадцать третий день.
Не в защите Каримова — туда он даже не лез. Слишком шумно, слишком рискованно. Дыра была в логике самой схемы.
Метель работала на координации. Пятнадцать точек должны были действовать синхронно — не идеально, с нужной вариативностью, но по единому сигналу. Этот сигнал где-то генерировался. И он должен был куда-то приходить.
Бульон искал канал.
Он перебрал стандартные варианты — закрытые Telegram-каналы, зашифрованные RSS-ленты, тайминг публикаций в открытых источниках. Ничего. Каримов был аккуратным.
Потом Бульон подумал иначе.
Если сигнал нельзя найти снаружи — значит, он встроен в данные, которые уже движутся легально. Финансовые данные. Биржевые данные. Поток информации, который никто не читает целиком, потому что его слишком много.
Он написал новый анализатор — искал статистические аномалии в объёмах публичных торгов по нескольким малоликвидным инструментам. Инструменты, которые никому не интересны. На которые никто не смотрит.
Нашёл за шесть часов.
Сигнал был встроен в паттерн торгов тремя малоликвидными облигациями. Не в ценах — в объёмах. Двузначная последовательность объёмов в определённое время кодировала команду. Элегантно. Почти красиво.
Бульон записал ключ дешифровки.
Посидел.
Встал. Пошёл на кухню. Поставил чайник. Смотрел, как нагревается вода.
У него в руках была архитектура чужой схемы. Он мог войти. Мог прочитать команды до того, как они исполнятся. Мог, в теории, изменить сигнал.
Это был момент выбора.
Бульон не любил моменты выбора. Выбор — это ответственность, а ответственность — это именно то, от чего он всю жизнь строил дистанцию. Он был инструментом. Хорошим, дорогим, точным — но инструментом. Инструменты не выбирают.
Или выбирают?
Кот пришёл на кухню, сел у холодильника, посмотрел снизу вверх.
— Не смотри так, — сказал Бульон.
Кот продолжал смотреть.
Чайник закипел.
Бульон налил кофе, вернулся к экранам. Сохранил ключ дешифровки в зашифрованный контейнер. Продолжил наблюдение.
Пока — только смотреть. Понять полную картину. Не дёргаться.
Но он уже знал, что дёрнется. Рано или поздно.
Потому что код был живой. И его использовали не по назначению.
Глава 5. ПАРАЛЛЕЛЬНЫЕ СЛЕДЫ
Глава 5. ПАРАЛЛЕЛЬНЫЕ СЛЕДЫ
В середине апреля Бульон заметил, что кто-то ещё копает.
Это было не очевидно. Это было как запах озона перед грозой — ни звука, ни картинки, просто что-то изменилось в воздухе данных.
Несколько запросов к публичным реестрам по тем же компаниям, которые смотрел он. Паттерн просмотра биржевых архивов — похожий на его, но другой. Более интуитивный, менее методичный. Человек шёл не от структуры к деталям, а от деталей к структуре. Иначе думал.
Бульон отследил следы сколько мог — они обрывались на провайдерском уровне, чисто. Человек умел не светиться, хотя и не так профессионально, как сам Бульон. Не хакер. Скорее — кто-то, кто умеет думать и умеет быть осторожным.
Интересно.
Он не стал искать имя. Имена сейчас были опасны — если он ищет кого-то, значит, оставляет следы поиска. А его следов нигде не должно быть.
Но он стал за этим человеком наблюдать. Пассивно, без контакта. Как наблюдают за другим кораблём в тумане — видишь огни, чувствуешь курс, понимаешь: идёт туда же.
Куда именно — оба пока не знали. Но точка назначения у них была одна.
В конце апреля человек-с-другого-корабля явно нашёл что-то важное — по резкому изменению паттерна активности. Стал быстрее. Стал глубже. Стал, судя по всему, нервничать — это читалось в хаотичности запросов, в ночных сессиях.
Бульон это понял и сбавил темп собственного поиска.
Не из страха. Из тактики.
Если два человека идут к одной точке — лучше, чтобы один шёл чуть позади. Смотрел. Страховал. И при необходимости — первым успел уйти.
Кот к тому времени освоил все три монитора поочерёдно и разработал чёткий график: левый монитор — утром, центральный — днём, правый — ночью. Бульон не спорил с расписанием. Это был договор двух существ, которые делят территорию без лишних слов.
— Кто-то ещё нашёл Каримова, — сказал Бульон коту однажды ночью.
Кот смотрел в центральный монитор. Рабочее время.
— Или Каримов нашёл его. Что хуже.
Кот моргнул.
— Согласен. Хуже.
Глава 6. СТИРАНИЕ
Глава 6. СТИРАНИЕ
В мае схема начала сворачиваться.
Бульон это увидел раньше, чем это стало очевидным. Пятнадцать точек его алгоритма начали отключаться — тихо, по одной, без паники. Кто-то внутри Метели принял решение выходить. Деньги уже переместились — он видел это в косвенных признаках, в отдалённых рябях на рынке.
Каримов убирал хвосты.
Значит, или всё сделано. Или — почуял опасность.
Бульон перешёл к следующей фазе. Той, ради которой он, по честному признанию себе, и занимался всем этим.
Он начал стирать себя из этой истории.
Не из страха уголовного преследования — его следов в схеме юридически не существовало. Но его код был внутри Метели, и когда Метель будут разбирать — а её будут разбирать, он это чувствовал — кто-нибудь умный может дойти до алгоритма. И узнать почерк.
Почерк — это то, что хакеры оставляют неизбежно. Как художники. Можно менять стиль, но что-то всегда остаётся.
Он написал скрипт, который имитировал его собственный алгоритм с намеренными искажениями — ложный след, который вёл в никуда. Разместил его в нескольких открытых репозиториях под случайными аккаунтами. Теперь его почерк был не уникальным — он был одним из многих похожих.
Параллельно он зачистил собственную инфраструктуру. Не полностью — полное стирание само по себе подозрительно. Он оставил правдоподобную историю: обычный фрилансер, обычные заказы, обычная жизнь за фольгированными окнами.
Занял это четыре дня.
На пятый день он сделал одно действие, которое не было частью зачистки. Он нашёл тот самый сигнальный канал — через малоликвидные облигации — и встроил в него одно сообщение. Не команду. Просто данные. Кусочек архитектуры схемы, упакованный так, чтобы его мог прочитать кто-то, кто уже знает, что искать.
Для человека с другого корабля.
Бульон не знал его имени. Не хотел знать. Но понимал: этот человек дойдёт до конца, а значит, ему нужна зацепка, которая сократит путь.
Это был не альтруизм. Это была математика.
Если Метель разберут — его код в ней потеряет ценность как улика. Если Метель не разберут — схема повторится, и в следующий раз кто-то снова купит его дыхание, не спрашивая разрешения.
Оба варианта указывали на одно действие.
Он нажал отправить.
Глава 7. СЛЕДУЮЩИЙ СЛОЙ
Глава 7. СЛЕДУЮЩИЙ СЛОЙ
Июнь. Братск. Белые ночи.
Бульон сидел у окна — у фольги на окне — и думал о том, что свет сейчас не заходит совсем. Это всегда его немного раздражало: ночь без темноты как код без комментариев. Формально работает, но что-то не так.
Метель утихла.
Не до конца — где-то в финансовых новостях мелькали отдалённые отзвуки, расследование какого-то регулятора, что-то про манипуляции на рынке. Бульон читал между строк: нашли. Не всё, не всех — но нашли достаточно. Колесо начало крутиться в другую сторону.
Человек с другого корабля, судя по всему, добрался.
Хорошо.
Бульон выпил кофе. Посмотрел на кота, который лежал на правом мониторе — июнь, значит, ночная смена, всё по расписанию.
Новый заказ пришёл вчера. Снова через четыре слоя анонимизации, снова с временным ключом. Задача другая — анализ уязвимостей одной инфраструктурной системы. Технически интересная. Заказчик — снова никто.
Бульон прочитал три раза.
Подумал: а может, в этот раз спросить зачем?
Посмотрел на кота.
Кот посмотрел обратно.
— Нет, — сказал Бульон. — Не спрошу.
Но что-то изменилось. Не в задаче. В нём.
Он открыл новый проект. Пока не назвал папку. Сидел, смотрел на пустое поле для имени файла. Думал о коде, который дышит. О том, что живое не перестаёт быть живым от того, что ты его продал. О том, что почерк — это не просто след. Это личность.
За фольгой на окне не темнело.
Кот устроился поудобнее.
Бульон набрал имя папки.
«soup2»
Усмехнулся. Начал писать.
Код пошёл легко — как всегда, когда задача красивая. Только теперь, где-то в фоне, на четвёртом мониторе — том, который он добавил в мае — висел открытый терминал с биржевыми данными. И рядом — маленький скрипт, который искал его паттерн. Его дыхание.
На случай если кто-то снова решит, что инструменты не помнят себя.
Кот зевнул.
Белая ночь стояла над Братском.
Спасибо за чтение
Вернуться к книге
