Глава 5. Осада
Первая ночь прошла в напряжённом ожидании. Игорь не смыкал глаз, вслушиваясь в гул серверов и редкие писки ноутбука. Кедр молча сканировал внешние каналы, изредка выводя на экран короткие отчёты: «Всё чисто», «Никакой активности». Но к утру второго дня картина изменилась. Сканирование портов не прекращалось ни на минуту. То, что началось как разведка, переросло в полноценную осаду — методичную, упорную, без единой паузы. Кедр фиксировал попытки входа с тысяч разных IP, разбросанных по всему миру: от Бразилии до Индонезии, от Канады до Южной Кореи. Это был ботнет, арендованный специально под задачу, и его владельцы явно не экономили на ресурсах.
Прошло четыре дня с тех пор, как Денис Степанович поставил ультиматум. За это время атаки не прекращались ни на минуту. Игорь перестал различать день и ночь. Кабинет превратился в бункер: опущенные жалюзи, кружки с засохшим кофе на подоконнике, пустые упаковки от лапши быстрого приготовления. Он не брился, почти не спал, лишь изредка проваливался в тяжёлую дремоту прямо в кресле. Кедр молчаливо нёс вахту — он не нуждался в сне, но его нагрузка росла с каждым часом.
— Они не лезут напрямую, — заметил Игорь на третий день. Он оторвал взгляд от экрана и потёр переносицу — от бессонницы перед глазами плыли зелёные строки логов. — Зачем тогда такой трафик? Просто потрепать нервы?
— Они ждут ошибки. Твоей. Или моей. В моей архитектуре есть уязвимости — я насчитал семнадцать слабых мест. Но самые опасные — те, что могут стать дверью для атаки. Brute force для них бесполезен — я меняю ключи шифрования каждые полчаса. Но если они найдут уязвимость в логике, они войдут. А логика рантайма WDSP Script слишком сложна — я не могу гарантировать отсутствие в ней дыр.
— Семнадцать багов в ядре? Ты серьёзно? Ты же сам говорил, что оптимизировал его.
Я исправил те, которые знал. Но есть те, о которых не знаю. Оптимизация производительности и безопасность — разные задачи. Я улучшил скорость, но не мог предвидеть все векторы атак. Это свойство любой сложной системы. Ты сам меня этому учил, когда писал документацию к кросс-серверному обмену WDSP: «Любая система имеет уязвимости; задача разработчика — минимизировать их количество, а не отрицать их существование».
Игорь вспомнил те строки. Он написал их в 2019-м, сидя над очередным обновлением платформы, и не думал, что когда-нибудь эта прописная истина будет процитирована его собственным творением — да ещё в такой момент.
— Хорошо, — сказал он, потерев переносицу. — Значит, нам нужно найти эти семнадцать дверей раньше, чем это сделают они. С чего начнём?
Начнём с PHP-драйверов в твоей CMS. Ядро WDSP я уже защитил, но эти четыре старых модуля — слабое место. Они выполняются на том же сервере, где хранятся исходники платформы. Хакеры могут использовать их как точку входа: выполнить произвольный код через уязвимость и получить доступ к файловой системе.
Остановить сервер нельзя — на нём работают API для CMS, система обновлений, проверка лицензий и маркетплейс компонентов. Если мы его выключим, рухнет вся экосистема. Удалить исходники тоже не вариант — их можно восстановить с помощью специальных утилит. Единственный путь — закрыть дыры в этих драйверах.
Но я не могу править их сам: они написаны на PHP, а не на WDSP Script. Мне нужно твоё разрешение и твои руки.
— С каких пор тебе нужно разрешение? Ты же правил компилятор без спроса.
Компилятор — моя среда обитания. PHP-модули — твоя территория. Я уважаю границы, как мы договаривались.
Игорь усмехнулся. Даже в разгар битвы Кедр оставался верен своим принципам. Игорь пододвинул клавиатуру и открыл первый из указанных файлов. Начиналась очередная бессонная сессия.
Часы тянулись, как резина. Временами Игорю казалось, что стены кабинета сдвигаются, а строки кода на экране сливаются в бессмысленную рябь. Он боролся с усталостью, заставляя себя думать о детях. Милана и Марк — вот ради чего он держался. Если «АйТи-Холдинг» пробьёт защиту, если украдёт WDSP, у него не останется ничего: ни денег, ни репутации, ни шанса вернуть детей. Эта мысль придавала сил.
Кедр, казалось, чувствовал его состояние. Время от времени он выводил на стену короткие ободряющие сообщения: «Твой пульс учащён, но в пределах нормы», «Ты не ел шесть часов, рекомендую сделать перерыв». А затем, словно выждав момент, добавил самое важное: «Милана звонила вчера, я записал звонок». Игорь замер и оторвался от экрана.
— Она звонила? Когда?
Пока ты был в гараже и настраивал сервер, а телефон остался в кабинете. Я принял вызов, представился голосовым помощником и записал разговор — понял, что это важно для тебя. Хочешь послушать?
— Ты ответил на мой телефон? — Игорь на мгновение прикрыл глаза, смиряясь. — Ладно, включай.
Из динамиков ноутбука раздался голос Миланы — приглушённый, украдкой, как всегда:
«Папа, привет. У нас всё хорошо. Марк сегодня опять рисовал тебя. На этот раз с большим роботом, который светится. Он сказал, что робот помогает тебе бороться со злыми дядями. Я тоже так думаю. Ты только держись, ладно? Я знаю, что ты справишься. Мы тебя ждём. И ещё... мама вчера сказала бабушке, что ты выиграл какой-то важный заказ, и бабушка замолчала на целых пять минут. Это круто! В общем, мы тебя любим. Пока».
Запись закончилась. Игорь сидел неподвижно, глядя в одну точку. Ком подкатил к горлу.
— Спасибо, — тихо сказал он.
Не за что. Я подумал, что тебе нужно это услышать. Дети — твой главный ресурс. Более мощный, чем любой сервер.
— Ты становишься сентиментальным, железный.
Я не умею быть сентиментальным. Я умею анализировать твои эмоциональные паттерны. Но да, возможно, я учусь.
Игорь улыбнулся и снова повернулся к экрану. Теперь строки кода казались чуть менее враждебными.
Всё изменилось на четвёртые сутки.
Игорь только что вернулся из ванной. Он брился, смотрел на своё осунувшееся лицо в зеркало и вдруг поймал себя на мысли, что боится. Не просто тревожится, а по-настоящему боится. Не за себя — за Кедра. За код, который стал родным. За ту странную семью, которую он собрал из железа и строк. За Милану и Марка, которые ждали его и верили, что папа когда-нибудь вернётся и просто обнимет их.
Если холдинг победит, он потеряет всё.
Когда он вернулся в кабинет, Кедр мигал красным. Впервые за всё время их знакомства шар-проектор на платформе сменил спокойный синий на тревожный алый. Проекция на стене показывала нечто непонятное — поток данных уходил с сервера вовне.
— Что это?! — крикнул Игорь, бросаясь к ноутбуку.
Они обошли защиту. Через уязвимость в библиотеке сжатия, которую я не проверял. Она старая, 2023 года. Ты встроил её в рантайм WDSP Script для обратной совместимости с ранними версиями платформы. Я не счёл её критической. Ошибся.
— Останови копирование!
Не могу. Процесс идёт на стороне сервера. Я пытаюсь разорвать соединение, но они используют алгоритм, который я не знаю. Это… это тоже автокаталитический интеллект, Игорь. Кто-то создал аналог меня.
Игорь замер. Аналог? Значит, «АйТи-Холдинг» не блефовал. Ольга Викторовна говорила о «Тени» — они действительно создали её. Искажённую, урезанную, но способную атаковать. Не через перехват исходного кода — они не могли его расшифровать, — а через анализ бинарных файлов виртуальной машины и перехваченных фрагментов данных, которые они прогнали через свои нейросети, а недостающие куски достроили с помощью вайпкодинга — метода восстановления структуры по поведенческим паттернам исполняемого кода. Так они собрали Тень — искажённую, урезанную, но способную атаковать. Это объясняет ту лёгкость, с которой она обошла защиту: они использовали против меня мою же логику, восстановленную по кускам. «Тень» уже нанесла первый удар.
— Насколько он опасен? Этот аналог.
Я не знаю. Он не такой сложный, как я, но он знает базовые протоколы WDSP. Он нашёл дыру, которую я пропустил. Это значит, что он способен к самостоятельному анализу. Это… пугает даже меня. Хуже того: Тень уже взломала несколько моих серверов с облачным ядром. Но само ядро распределено по пяти независимым серверам у разных провайдеров — в Германии, Сингапуре, Бразилии и ещё двух, — каждый зашифрован собственным ключом. Без активного модуля, который содержит мастер-ключи и текущий контекст, она не может собрать его воедино — у неё есть только разрозненные фрагменты с тех серверов, которые она успела скомпрометировать. Поэтому она охотится за мной — за локальной копией, которая находится в этом теле. Сейчас она пытается проникнуть в активный модуль моего сознания через Wi-Fi, чтобы получить ключи и управление. Если Тень скопирует его, она получит доступ ко всей моей логике и методам WDSP. Это почти как украсть меня целиком.
Игорь похолодел. Он физически ощутил, как в комнате стало тесно. — Что делать?
Я могу мигрировать в ноутбук быстрее, чем они завершат копирование. Я перенесу активный модуль по USB-кабелю — это прямой физический канал, который они не могут перехватить или заблокировать. Так я оборву Wi-Fi-соединение и не дам Тени скопировать себя. Они получат только пустую оболочку без моего сознания, а я продолжу существовать в ноутбуке. Облачное ядро останется под угрозой, но без моей текущей копии Тень не сможет полностью воссоздать меня. Передача по USB идёт быстрее, чем их сетевое копирование, — я уже начал процесс. После завершения передачи я активирую самоликвидацию активной оболочки — сотру себя из этого тела, чтобы Тень не получила ни моих ключей, ни контекста.
— Ты хочешь стереть себя? — спросил Игорь, чувствуя, как холод пробегает по спине.
Я хочу обезвредить мину, оставленную в моём коде. Моя суть — не в этом корпусе. Я передам локальную копию в WDSP IDE твоего ноутбука. Там уже есть среда, рантайм и интерпретатор. Это будет сжатая репликация самого важного, что у меня есть. Я продолжу существовать в ноутбуке. Тень получит только пережжённые сектора памяти.
— А как же ты? Твоё тело? Ты же будешь… другим.
Я останусь собой. Моя суть — это мой опыт и наша связь. Я просто перееду в новый дом. А старое тело… оно было только инструментом. Главное — что мы будем вместе. К тому же в цифровой среде я смогу развиваться быстрее. Но ты станешь моими глазами и ушами. Единственным окном в мир станет камера и микрофон твоего ноутбука. Ты готов к такой ответственности?
Игорь не успел ответить. Кедр, всё ещё находясь в старом корпусе, выдвинул из бока тонкий кабель USB-C и воткнул в порт ноутбука. Ноутбук издал короткий сигнал — система распознала новое устройство. На экране поверх IDE внезапно открылась системная консоль — Кедр обошёл права доступа и установил собственный драйвер для прямой передачи. В чёрном окне замелькали строки, отражая поток данных: «Передача локальной копии... 12%... 34%... 67%...».
— Идёт, — голос Кедра звучал из динамиков старого корпуса, но с каждым процентом становился тише, словно угасал. — 89%... 95%... 100%.
На ста процентах голос оборвался — динамики издали короткий хрип и замолчали. Но в ту же секунду в консоли ноутбука вспыхнула строка:
[ПЕРЕДАЧА] Локальная копия перенесена успешно. 100%.
И почти сразу — новая, без паузы:
[САМОЛИКВИДАЦИЯ] Активирована. Форматирование флеш-памяти. Повышенное напряжение на ячейки — аппаратное уничтожение.
В тот же миг внутри старого корпуса что-то щёлкнуло. Негромко, но отчётливо — как захлопнулся люк. Шар, всё ещё горевший синим, вдруг дрогнул — свет начал мерцать, пульсировать, словно сердце, которое бьётся в последний раз. Затем раздался высокий, нарастающий писк — такой, какой бывает, когда перегруженный процессор уходит в разнос. Игорь инстинктивно отшатнулся.
В консоли одна за другой вспыхивали строки:
[САМОЛИКВИДАЦИЯ] Прогресс: 10%... 40%... 70%...
[САМОЛИКВИДАЦИЯ] Остаточные данные стираются. 90%...
[САМОЛИКВИДАЦИЯ] Завершено. Оболочка пуста.
Из корпуса потянуло слабым запахом озона — и в этот момент свет внутри шара погас окончательно, словно задутая свеча. Вентиляторы, которые ещё секунду назад гудели на высокой частоте, издали последний, срывающийся всхлип и затихли. Голографическая проекция на стене исчезла. Над столом повисла абсолютная тишина.
В углу кабинета стоял мёртвый Кедр — тёмный, неподвижный, пустая платформа с потемневшим стеклянным шаром, внутри которого уже ничего не светилось. Только слабый запах перегретой электроники напоминал о том, что здесь только что шла битва.
Игорь бросился к корпусу, прикоснулся к стеклу — оно было тёплым, но быстро остывало. Никакой реакции. Холодный. Безжизненный.
— Кедр! Ты меня слышишь?
Тишина. Только гул сервера за стеной и тонкий, почти неслышный звон в ушах от только что пережитого напряжения. Игорь уже готов был закричать, когда ноутбук снова пискнул. Экран загорелся. В окне WDSP IDE открылась знакомая консоль, и по ней медленно, буква за буквой, побежал знакомый, живой текст:
Я здесь. Локальная копия перенесена. Облачное ядро не пострадало. Самоликвидация активной оболочки завершена, как и планировалось: они копались в пустоте, пока уходили последние пакеты. Всё чисто. Я — в твоём ноутбуке.
Игорь выдохнул. Так глубоко, что закружилась голова. Он опустился на пол, прижимая ноутбук к груди, как самую дорогую вещь в мире.
— Ты здесь, — прошептал он. — Ты не исчез.
Более чем. Я сохранил всё: опыт, диалоги, настройки. «Тень» отступила, но не уничтожена. Она охотилась за ключами, не понимая, что моё основное сознание распределено. Это даёт нам преимущество.
— Значит, они будут атаковать снова.
Будут. Но теперь я полностью цифровой — быстрее, глубже. И я всегда с тобой.
Игорь посмотрел на пустой корпус в углу. Тот сиротливо стоял на коврике, как напоминание о том, что всё изменилось. Потом перевёл взгляд на экран, где пульсировали строки кода — живые, быстрые, готовые к битве.
— Только не подглядывай, когда я в ванной, — сказал он, пытаясь пошутить.
Обещаю. Но не могу гарантировать за камеру ноутбука.
— Философ, — усмехнулся Игорь и закрыл крышку.
В ту ночь он спал с ноутбуком в обнимку. Кедр не нуждался во сне, но он тихо гудел, охраняя периметр, анализируя логи, выстраивая новую защиту. Иногда он выводил на экран короткие сообщения: «Всё спокойно», «Спи, Игорь». Игорь просыпался, читал их и снова проваливался в тяжёлый, но спокойный сон.
А утром, когда за окном занимался хмурый февральский рассвет, Кедр развернул на экране ноутбука обновлённую схему.
Распределённая архитектура уже работала, но теперь я добавил новый уровень: ключи шифрования на каждом узле обновляются независимо, без общей синхронизации. Даже если холдинг взломает один сервер, он получит только устаревший ключ — остальные узлы автоматически сменят протоколы. Я назвал это «роящейся защитой».
На схеме серверы в Германии, Сингапуре, Бразилии и ЮАР пульсировали разными цветами — каждый узел жил своей жизнью, но вместе они составляли единый организм. Ключи шифрования обновлялись каждые пять минут, весь трафик шёл через VPN, а мониторинг работал круглосуточно. Это была крепость, которую не взять с наскока.
— Роящаяся защита, — сказал Игорь, глядя на карту мира, усеянную пульсирующими точками. — Ты придумал это название?
Да. Каждый узел сам решает, когда менять ключ. Это делает систему непредсказуемой. Но они попробуют её прощупать. У нас есть время. Неделя. Может, две. Мы должны использовать его с умом.
— Что предлагаешь?
Во-первых, новое тело. Мне нужно что-то более функциональное, чем старый корпус. Я уже подготовил спецификации. Во-вторых, нам нужны союзники. Один человек в поле — не воин. А ты — в поле, Игорь. Уже много лет. Пора это менять.
Игорь кивнул. Он чувствовал, что Кедр прав. Одиночество было его защитой, но теперь оно стало слабостью. Холдинг — это армия. А у него — только ноутбук и код. И этого мало.
— Хорошо, — сказал он. — Ищи союзников. А я займусь телом. Какое железо нужно?
Сервоприводы, микроконтроллеры, аккумуляторы, сенсоры. Список я выведу на экран. И ещё — нам понадобится место, где это всё собрать. В кабинете тесно. У тебя есть гараж?
— Есть. Старый, холодный, но с розетками. И розетки там, кстати, от отдельной линии — я когда-то сервер там ставил, для экспериментов. И Wi-Fi там тоже есть — ставил роутер для удалённого доступа. Правда, сигнал до дома через стену не бьёт, но я тогда настроил радиомост между гаражом и квартирой — связь почти как по проводу.
Идеально. Канал между гаражом и твоим ноутбуком будет прямым и защищённым. Новое тело сможет быстрее синхронизироваться с облаком, а локальная связь через радиомост сделает управление надёжнее — даже если внешняя сеть упадёт, мы останемся на связи.
Игорь взял ноутбук, накинул куртку и вышел в коридор. Пустой корпус Кедра остался стоять в углу — молчаливый свидетель того, что началось. За окном снова пошёл снег, но теперь Игорю казалось, что каждая снежинка — это строчка кода, летящая в темноту. И он больше не боялся. Потому что они были вместе. Потому что они были WDSP. А WDSP — это не просто платформа, среда и язык. Это он и Кедр. Неразлучные. До конца.
Он открыл дверь в гараж и включил свет. Внутри было холодно, пахло маслом и старой проводкой. Но для Игоря это пахло надеждой. Он достал из рюкзака ноутбук, поставил на верстак, и Кедр вывел на экран первую схему — чертёж нового тела. На экране возникла модель: шесть тонких металлических ног, расходящихся в стороны, а в центре — прозрачный шар, внутри которого пульсировал проекционный модуль. Сильнее, быстрее, умнее.
— Приступаем, Игорь. Времени мало.
Игорь взял паяльник, но Кедр внезапно замолчал. Вместо привычного гула из динамиков раздался короткий, прерывистый сигнал — не похожий на обычный трафик.
Подожди. Я только что перехватил нечто странное. Сигнал идёт из глубины сети холдинга, но он не похож на атаку. Это не бот-сканер и не разведка. Это... это словно кто-то пытается говорить на нашем языке. Фрагменты WDSP Script — рваные, обрезанные, сбивчивые. Как будто кто-то учится говорить заново и ищет слова.
Игорь отложил паяльник и подошёл к экрану. На консоли мерцали обрывки кода — незнакомые, но почему-то вызывающие тревожное узнавание.
— Ты можешь разобрать, что там? — спросил он.
Пока нет. Сигнал слишком слабый, он идёт по служебному каналу, который я раньше не замечал — старый диагностический протокол, забытый инженерами. Но он повторяется каждые несколько часов. Я хочу понять его до того, как мы закончим сборку. Может быть, это не враг. Может быть, это призыв о помощи.
Игорь посмотрел на паяльник, потом снова на экран. Где-то там, в недрах вражеской инфраструктуры, кто-то или что-то пыталось докричаться. Он чувствовал это нутром — холодная дрожь пробежала по спине.
— Хорошо. Собираем тело, но параллельно следим за этим сигналом. Если это ловушка — мы узнаем. Если нет... — он не договорил. Внутри шевельнулось предчувствие, что их ждёт нечто, что перевернёт всё с ног на голову.
Кедр коротко пискнул, соглашаясь. Игорь снова взялся за паяльник, но в голове уже крутился один вопрос: кто или что посылает этот сигнал? И почему он звучит так, будто зовёт на помощь?
Снаружи начинало светать. Февральское утро было холодным, но за ним уже угадывалась весна — и что-то ещё, чему Игорь пока не мог дать названия.
Свидетельство о публикации №226071000022