ГЛАВА 5. ЦИФРОВАЯ КРЕПОСТЬ
4 декабря 2025 г., 02:43
MicroSD карта лежала на моём столе, словно маленькая чёрная бомба. Я смотрел на неё уже несколько минут, не решаясь прикоснуться. Как она оказалась у Али, это другой вопрос, который сейчас меня волновал меньше всего – может просто валялась на полу генераторной в особняке, как ещё одна подсказка оставленная нашем мучителем?
Прошло четырнадцать часов с момента встречи с Северцевой и Ледниковым. Четырнадцать часов из сорока восьми. Мы успели покинуть особняк — полиция всё-таки прорвалась внутрь к рассвету, взломав одну из решёток служебного входа газовым резаком. Нас допросили, записали показания, пообещали связаться «в случае необходимости». Юристы корпорации присутствовали при каждом разговоре с правоохранительными органами. Разумеется, не случайно.
Теперь я сидел в своём домашнем кабинете — маленькой комнате на втором этаже с видом на задний двор. Али был внизу; я слышал, как он ходит по кухне, открывает и закрывает дверцы шкафов. София уехала к родственникам. Карла исчезла в неизвестном направлении сразу после допроса. Соловьёвы заперлись в своём городском особняке. Бена увезли в частную клинику — Артём лично об этом позаботился.
А я сидел и смотрел на карту памяти.
Корпоративный телефон лежал в другом конце комнаты, накрытый плотной тканью. Паранойя? Возможно. Но если они действительно мониторят устройство, то встроенный микрофон способен улавливать звуки даже в режиме ожидания. Я знал это, потому что мы сами внедряли эту функцию в прошивку два года назад. «Для экстренной связи в случае угрозы жизни пользователя», — так это было сформулировано в технической документации. Но утверждать наверняка не брался.
Я надел латексные перчатки — те самые, которые остались после прошлогоднего ремонта, — и осторожно вставил карту в адаптер, подключённый к моему личному ноутбуку. Машина была не подключена к сети; я физически выдернул Ethernet-кабель и отключил Wi-Fi модуль через BIOS ещё вчера вечером. Может быть, избыточная предосторожность. Но после того, что я видел в том зале, избыточной предосторожности не существовало.
Карта содержала семнадцать файлов. Все с расширением .log и .bin.
Первые пять файлов оказались стандартными системными логами — теми самыми, которые генерирует любое устройство под управлением нашей операционной системы. Временные метки охватывали период с шестнадцати ноль-ноль до девятнадцати двадцати трёх того вечера. Последняя запись в последнем логе обрывалась на полуслове: «SYS_EVENT: DEVICE_FAULT_CRITICAL_BAT...»
Батарея. Или то, что мы все привыкли считать батареей.
Я открыл следующий файл — бинарный. Шестнадцатеричный дамп. Размер — четыреста двенадцать килобайт. Слишком маленький для полноценного обновления прошивки, но достаточный для патча или модуля расширения. Я загрузил его в дизассемблер и принялся изучать структуру.
Спустя сорок минут я откинулся на спинку стула и потёр глаза. Голова гудела от напряжения, но кое-что начинало вырисовываться.
Файл содержал исполняемый код. Скомпилированный, обфусцированный, но всё же узнаваемый. Это был модуль управления питанием — один из критических компонентов нашей операционной системы. Тот самый модуль, который отвечает за контроль температуры аккумулятора, распределение нагрузки между ядрами процессора и экстренное отключение в случае перегрева.
Но этот модуль отличался от того, что хранился в нашем репозитории.
Я вывел на экран две колонки — справа оригинальный код из официального репозитория, слева содержимое бинарника с карты. Различия были минимальными, но существенными. Кто-то добавил обработчик внешнего сигнала — триггер, который активировался при получении определённой последовательности байтов через Bluetooth-модуль. Когда триггер срабатывал, модуль отключал все предохранители и направлял максимальный ток на элемент питания.
Литий-ионные батареи при таком сценарии ведут себя предсказуемо. Перегрев. Тепловой разгон. Возгорание или взрыв — в зависимости от конструкции корпуса и окружающих материалов.
Убийство по Bluetooth.
Я записал хеш-сумму модифицированного файла и сравнил её с эталонной. Они не совпадали. Это было очевидно. Но меня интересовало другое — цифровая подпись. Каждое обновление, каждый модуль, который устанавливается на устройства корпорации «N», должен быть подписан корпоративным сертификатом. Без этой подписи система откажется принимать код.
Я извлёк подпись из бинарника и прогнал её через верификатор.
Подпись была действительной.
Я перечитал результат трижды. Действительная подпись. Это означало, что либо злоумышленник имел доступ к нашему закрытому ключу, либо кто-то внутри корпорации — кто-то с правом подписи — намеренно заверил этот код.
Круг людей с таким доступом был ограничен. Я, Карла, Джон, Барклай, трое Соловьёвых и технический директор Марков, который не присутствовал на презентации. Восемь человек. Двое из них уже мертвы. Один — в отпуске на другом конце мира. Оставались пятеро.
Включая меня.
Я посмотрел на метаданные сертификата. Дата выпуска — три месяца назад. Срок действия — до конца года. Идентификатор... Я замер.
Идентификатор указывал на сертификат, выданный отделу специальных проектов. Подразделению, о существовании которого я знал, но с которым никогда напрямую не работал. Официально они занимались «перспективными разработками». Неофициально — их бюджет был засекречен даже от меня, главы отдела кибербезопасности.
Я вернулся к логам и начал искать временную привязку. Когда модифицированный модуль был загружен на устройства? Ответ нашёлся в системном журнале презентационного смартфона — того самого, который взорвался в руках Джона.
OTA_UPDATE_RECEIVED: 00:12:07. OTA_MODULE_INSTALLED: 00:12:34. SOURCE_SERVER: INT_UPDATE_SRV_03.
Ноль часов двенадцать минут. За семь минут до того, как Джон вышел на сцену. За семь минут до первого взрыва.
Обновление пришло с внутреннего сервера. Нашего сервера. Не через публичный канал дистрибуции, который проходит многоступенчатую проверку, а напрямую — через служебный интерфейс, предназначенный для тестирования.
Я откинулся назад и уставился в потолок. Кто-то — кто-то с высоким уровнем доступа, кто-то изнутри — загрузил убийственный код на устройства за считаные минуты до презентации. Это было не случайностью. Не внешней атакой. Это было внутренней операцией.
Но зачем? И почему именно эти люди?
Я снова посмотрел на список «ДЕСЯТЬ ТАИНСТВ», сфотографированный в вертолёте. Джон, Барклай, Стивен — первые три, четвёртое моё... Инженеры и дворецкий. Какая связь? Что их объединяло, кроме присутствия на презентации?
Мне нужно было больше данных. Полные логи сервера обновлений. Журналы доступа к системе подписей. Внутренняя переписка отдела специальных проектов. Всё это хранилось в корпоративной сети — за семью уровнями защиты, половину из которых проектировал я сам.
И теперь мне предстояло взломать собственную систему.
Дверь кабинета скрипнула. Я инстинктивно свернул окно с кодом и обернулся.
— Тук-тук, — Али стоял в дверях с двумя кружками чая. Его лицо было серым от недосыпа, под глазами залегли тёмные круги. — Ты тут уже четыре часа безвылазно. Нашёл что-нибудь?
Я помедлил секунду. Стоит ли ему говорить? Слышат ли нас в корпорации через телефон? Он не инженер, не программист. Он мой брат, но он оказался втянут во всё это случайно. С другой стороны — его имя может быть в том списке. Или имя кого-то, кого он знает.
— Да, — я принял кружку и сделал глоток. Чай был слишком горячим; он обжёг язык. — Это не случайность. Это диверсия.
Али поставил свою кружку на край стола и сел на гостевой стул.
— Расскажи.
— Устройства получили обновление за несколько минут до презентации. Модифицированный код, который превращал батарею в бомбу замедленного действия. Триггер активировался по внешнему сигналу — скорее всего, через Bluetooth.
— То есть кто-то просто... нажал кнопку?
— Упрощённо — да. Отправил команду на активацию с другого устройства. Возможно, был в том же зале. Возможно — в нескольких километрах, используя ретранслятор.
Али нахмурился.
— Но зачем такие сложности? Если хотели убить Джона или кого-то другого — есть способы попроще.
Он был прав. Яд, пуля, подстроенный несчастный случай — всё это требовало меньше технических знаний и оставляло меньше следов. Зачем городить сложную схему со взломом прошивки и дистанционным подрывом?
Если только...
— Это было не просто убийство, — произнёс я вслух, формулируя мысль по ходу. — Это было послание. Демонстрация возможностей. Тот, кто это сделал, хотел показать, что он может добраться до любого. Через любое устройство.
— Послание кому?
Я не ответил. Я думал о списке. Десять имён. Десять таинств. Кто-то тщательно выбирал жертв. Кто-то знал всех этих людей достаточно хорошо, чтобы включить в свой перечень.
Кто-то из тех, кто остался в живых.
Или кто-то, кто наблюдает со стороны.
В этот момент корпоративный телефон под тканью коротко завибрировал. Одно сообщение. Я не стал его доставать. Вместо этого достал свой личный смартфон — старую модель, купленную за наличные два года назад, не привязанную ни к какому аккаунту.
Открыл браузер. Набрал адрес анонимного почтового сервиса. Создал новый аккаунт со случайно сгенерированными данными.
Мне нужен был доступ к серверам корпорации. Но идти напрямую — значит оставить следы, которые юристы Соловьёвых непременно обнаружат. Значит, мне нужен был посредник. Кто-то, кто имеет легитимный доступ, но при этом не находится под их наблюдением.
Я знал только одного такого человека. Человека, который работал в нашем отделе три года назад, а потом уволился и перешёл в конкурирующую фирму. Человека, у которого всё ещё могли сохраниться резервные ключи от старых систем — те самые, которые должны были быть отозваны, но которые в суматохе корпоративной реструктуризации могли остаться активными.
Его звали Виктор. И он был мне должен.
Я начал набирать письмо.
«Виктор. Нам нужно поговорить. Срочно. Только не по обычным каналам. Помнишь наш разговор про питерский проект? Используй тот адрес. — Р.»
Питерский проект — это был наш с ним кодовый термин со времён совместной работы. Он поймёт. Если прочитает. Если захочет ответить. Если не сдаст меня корпорации.
Слишком много «если». Но других вариантов у меня не было.
Я отправил письмо и удалил все следы в браузере. Потом посмотрел на Али.
— Ты должен уехать отсюда.
Он поднял брови.
— Что?
— Уехать. На время. К друзьям. К родственникам в другой город. Куда угодно, лишь бы подальше от меня.
— Рум, ты сошёл с ума? Я не оставлю тебя одного после всего...
— Твоё имя могло быть в том списке, — перебил я. — Или его нет, и тогда ты случайный свидетель, которого могут убрать для чистоты эксперимента. В любом случае — рядом со мной ты в опасности.
Али встал. Его глаза потемнели — так бывало всегда, когда он злился по-настоящему.
— Я не ребёнок, Румит. И не буду прятаться, пока кто-то охотится на мою семью.
Мы смотрели друг на друга несколько секунд. Потом я опустил глаза.
— Хорошо, — сказал я. — Тогда будь осторожен. Никаких контактов по корпоративной связи. Никаких визитов в офис. И держи при себе это.
Я достал из ящика стола небольшой предмет и протянул ему. Портативный джаммер — глушилка радиосигналов, собранная мной пару лет назад для тестирования защищённости наших устройств. Она подавляла Bluetooth, Wi-Fi и большинство сотовых частот в радиусе пяти метров.
— Если почувствуешь опасность — включай. Только помни: она глушит всё, включая возможность вызвать помощь.
Али взял джаммер, повертел в руках и убрал в карман.
— А ты?
Я посмотрел на экран ноутбука, где всё ещё мерцал шестнадцатеричный код убийственного модуля.
— А я буду искать того, кто это написал.
Снизу донёсся звонок в дверь. Три коротких удара, пауза, ещё два. Не почтальон. Не соседи.
Мы с Али переглянулись.
— Жди здесь, — я встал и направился к лестнице.
Но брат уже шёл следом. Спорить не было времени.
Спустившись в прихожую, я посмотрел в глазок. На крыльце стояла женщина. Невысокая, в тёмном плаще, с папкой документов под мышкой. Её лицо показалось мне смутно знакомым, но я не мог вспомнить откуда.
Она подняла руку и постучала снова. Те же три удара, пауза, два.
— Господин Румит? — голос у неё был низкий, с лёгкой хрипотцой. — Меня зовут Константа. Я работаю с детективом Вертаненом. Нам нужно поговорить. Срочно.
Вертанен. Это имя я слышал в новостях — что-то про расследование на окраине города. Какая-то лавка. Изуродованный труп. Событие, произошедшее в тот же вечер, что и наша презентация.
Совпадение? После того, что я только что узнал, совпадений больше не существовало.
Я отодвинул засов и открыл дверь.