Небо над звёздами
Небо над звёздами

Полная версия

Небо над звёздами

Язык: Русский
Год издания: 2026
Добавлена:
Настройки чтения
Размер шрифта
Высота строк
Поля
На страницу:
2 из 5

— И кто же это сказал?

Мужчина пожал плечами.

— Диспетчер ругался. Может, врал. Может, нет.

Этан кивнул и ничего больше не спросил.

Сдвиги окон на пару секунд могли означать что угодно — от кривого обновления до плохой синхронизации шлюзов. Для обычного человека это звучало как какая-то ерунда. Для человека его профессии — та мелочь, из которой потом вырастает лишняя ночная смена.

В глубине арки зашелестели направляющие, и к платформе бесшумно прибыл состав маглева. Двери открылись. Люди двинулись внутрь без суеты, почти не касаясь друг друга. Этан вошёл одним из последних и занял место у боковой стенки, рядом с окном.

Состав тронулся мягко.

За стеклом потянулась Арлингтон-драйв — мокрая и хмурая в утреннем серо-стальном свете. Жилые кварталы сменились сервисными ярусами, затем зелёной полосой общих теплиц, затем низкими корпусами распределительных станций. По стеклу бежали капли. В стекле вагона лицо Этана накладывалось на город: щетина, тёмные глаза, складка между бровями и линии транспортного узла за ней.

Он смотрел не на город, а сквозь него — так всегда смотрят люди, которые большую часть жизни имели дело не с фасадами систем, а с тем, что у них внутри.

И пока что всё вокруг оставалось обыкновенным.

***

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

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

Всё было построено не ради красоты, а согласно логике наибыстрейшего обслуживания. В этом была одна из главных черт города тридцать шестого года, который давно уже стал бездушной машиной, утратившей даже видимость человечности.

На очередной станции в вагон вошли двое муниципальных техников — серые плащи, тяжёлые ботинки, плоские инструментальные кейсы. Один рослый, начинающий лысеть, с короткой рыжей бородой и быстрым жёстким взглядом человека, отвыкшего ждать от чужой работы чего-то хорошего. Второй моложе и собраннее; в нём ещё чувствовался энтузиазм первых рабочих лет, когда любая проблема кажется вызовом, а не досадной помехой.

Они встали почти рядом с Этаном.

— Я тебе ещё раз говорю, — сказал старший, не понижая голоса, — если внешний подрядчик пишет, что причина плавающая, значит, он либо ленивый, либо уже всё испортил и не хочет брать вину на себя. Плавающих причин не бывает. Бывают плохо прочитанные логи.

Молодой кивнул, но видно было, что этот спор они ведут уже не в первый раз.

— А если сетка действительно гуляет от нагрузки?

— Значит, причина в нагрузке — вполне конкретная.

Этан невольно усмехнулся краем рта.

Старший техник заметил это.

— Что, смешно?

— Нет, — сказал Этан. — Просто это надо распечатать и повесить над всеми диспетчерскими консолями города.

Техник посмотрел внимательнее.

— Безопасность?

— Да.

— Частник?

— Пока что.

Тот коротко фыркнул, будто всё понял.

— Тогда вам вообще на лбу это надо носить.

Дальше ехали молча.

На пересадочном узле Этан вышел, поднялся по короткому эскалатору и оказался в центральной распределительной галерее восточного сектора. Здесь воздух был суше, чище и заметно холоднее — административные ярусы экономили на температуре и влажности. Под ногами светились навигационные линии, по потолку тянулись матовые панели освещения. Люди шли быстро, но спокойно — плотным рабочим потоком, без сутолоки и раздражения. Каждому своё окно. Каждому свой маршрут. Каждому свой набор задач, уже подгруженный в личный контур ещё до первого глотка кофе.

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

Этан прошёл через входной шлюз, подставил ладонь под считыватель и дождался подтверждения.

— Доброе утро, Коул, — сказала система доступа. — Рабочее окно открыто. У вас три активных задачи, одна срочная и две опциональные.

— Порадовала, — пробормотал он.

— Спасибо. Обратная связь зафиксирована как положительная.

Он даже не стал спорить.

Внутри всё было устроено в той строгой манере, которую предпочитают компании, работающие с критической инфраструктурой. Никаких дизайнерских излишеств, никакой корпоративной жизнерадостности: голопанель вместо администратора; ряды рабочих капсул и общая зона с кофе-модулем, слишком ярким светом и экраном текущей нагрузки по секторам. За прозрачной перегородкой расположился оперативный зал, на стенах которого висели экраны со схемами маршрутизации, журналами секторов и списками задач с цветовой маркировкой. Система справлялась с обычным потоком сама; люди нужны были там, где решение переставало быть чисто техническим и требовался моральный или нестандартный выбор.

У кофе-модуля стояла Хелен Брукс.

Она работала в соседнем блоке — разбирала внешние вторжения, отделяла настоящие инциденты от обычных сбоев и была одной из немногих в компании, кто умел вовремя заметить опасную дыру и затем не дать её выдать за статистическую погрешность. Невысокая, сухощавая, с тёмной кожей, жёстко собранными волосами и точёным, резким профилем. Она носила очки — потому, что не любила линзы и не доверяла лазерной коррекции. В очках её лицо казалось ещё строже, поэтому мягкий, глубокий голос поначалу сбивал с толку тех, кто слышал её впервые.

— Ты выглядишь так, будто уже видел сегодняшний отчёт, — сказала она, не оборачиваясь.

— Хуже. Я видел утро.

Она протянула ему кружку ещё до того, как он подошёл вплотную.

— Без сахара. Крепче нормы.

— Это уже похоже на вторжение в частный профиль.

— Простая наблюдательность.

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

— Что у нас? — спросил он.

— Ничего, за что стоило бы переплачивать коэффициент, — ответила Хелен. — Пара грязных логов. Один ложный запрос на резервное окно в депо. Ещё ночью кто-то пытался протащить кривое обновление под видом блочной синхронизации, но система сама его выплюнула. Если повезёт, день пройдёт скучно.

— Скучно — это плохо, — сказал Этан.

— Смотря для кого.

Она повернулась к нему. Глаза у неё были тёмные, внимательные и усталые — не от этого утра, а от того, как мало оно отличается от всех предыдущих.

— У тебя опять низкий баланс? — спросила Хелен, глядя поверх кружки, как будто между делом.

— Двадцать три с небольшим.

— Плохо.

— Не смертельно.

— Я и не сказала «смертельно». Я сказала «плохо».

Это было типично для неё. Хелен не драматизировала и не утешала. Просто называла всё своими именами.

— Возьми внешний аудит, — сказала она. — Ночной. На старом складе доставки, там повышенный коэффициент.

— Там же кривая сетка и дешёвые датчики.

— Поэтому и коэффициент.

— Именно поэтому и нет.

Хелен пожала плечами.

— Тогда не жалуйся, когда придётся экономить на температуре или стирке.

— Я и не жалуюсь.

— Ты всем своим лицом жалуешься.

Он хотел ответить, но в этот момент над входом мигнул служебный индикатор и прозвучал короткий сигнал начала рабочего окна.

Хелен допила кофе, поставила кружку в приёмник и кивнула в сторону оперативного зала.

— Идём. Пока день не успел испортиться.

***

Рабочая капсула Этана стояла у дальней стены, под вентиляцией. Место было удачное: тише, чем в центральном ряду, и мимо ходили реже. Он занял его два года назад, после Бернса — сварливого, недоверчивого аналитика, который умел по одному ритму сервисных сбоев понять, с чем имеет дело. Потом Бернс ушёл. Официально — на место получше. В компании же шептались: туда, где паранойя считается частью квалификации. Этану было всё равно — он просто был рад, что может работать в относительном комфорте.

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

Он сел, поставил кружку на тумбочку справа и приложил палец к панели авторизации.

Перед ним развернулся рабочий интерфейс: сверху легли задачи на смену, рядом открылась карта сектора, ниже потянулись журналы ночной активности.

В углу всплыла системная панель:

Этан Коул. Коэффициент ставки: 1.32. Текущее окно: 4 часа. Расчётный заработок: 5.28 тч. Дополнительный блок аудита: 0.87 тч.

Этан молча посмотрел на цифры.

Пять с небольшим трудочасов. Полдня квалифицированной работы без права на ошибку, аккуратно сведённые в одну цифру.

Он открыл журнал.

Муниципальный распределительный контур доставки. Ночная перестройка маршрутов. Пакеты синхронизации. Проверка подписи. Вторичный отклик от архивного узла. Несколько незначительных ошибок. Один криво сформированный внешний запрос. Ничего, за что сразу цеплялся бы глаз.

Он любил первые минуты работы — тот короткий фрагмент спокойствия, когда логи ещё не успели распасться на чужую халтуру, кривые настройки и попытки что-нибудь протащить в обход допуска.

Он вывел на экран схему сектора и не спеша пошёл по ночным отметкам. Слева, за матовой перегородкой, сидела Хелен — тёмный силуэт, линия плеча, короткое движение руки у панели. В зале негромко переговаривались двое из утренней смены; слов он почти не разбирал, да это и не было нужно. Важен был не смысл отдельных реплик, а сам звук работы: короткие ответы, смазанные шаги, редкие сигналы консолей, ровный гул охлаждения. Начало обычной смены — без лишней суеты, с тем хрупким ощущением порядка, который не задержится надолго.

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

Он сделал глоток уже остывшего кофе и вернулся к проверке ленты, всё ещё полагая, что главная неприятность этого утра — его счёт.


1.2. Страшное слово «Здравствуй»

Первые два часа смены не принесли ничего, кроме рутины. Этан прошёлся по журналу муниципального контура: снял три ложные тревоги, отправил на повторную проверку кривую синхронизацию из транспортного депо и уже потянулся подтвердить дополнительный аудит, когда внизу в полосе статусов вспыхнуло уведомление низкого приоритета. Обычно рабочая дрянь выглядела именно так — скромно, незначительно, без малейшего намёка на то, сколько времени потом сожрёт.

СЕГМЕНТ 82-B

НЕСТАНДАРТНАЯ АКТИВНОСТЬ

КЛАСС: ВТОРИЧНАЯ ПРОВЕРКА

Этан скользнул по уведомлению взглядом и уже хотел его закрыть, но в последний момент задумался.

Сегмент 82-B.

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

За годы архитектура сети менялась, кластеры переносили, протоколы переписывали, а такие хвосты оставались забытыми где-то на периферии. Не из сентиментальности, а из чисто практических соображений. Стоило стереть там не тот архив и сиди потом разбирайся, что именно ты ненароком задел.

Обычно они просто существовали. Полупустые и заброшенные.

Именно поэтому слово «активность» по отношению к 82-B вызывало не тревогу, а раздражение.

— Хелен.

Она ответила не сразу. За матовой перегородкой мелькнула её рука, потом стихли клавиши.

— Что?

— Всплыл восемьдесят второй «Б».

Теперь она повернула голову.

— Архивный?

— Да.

— Он же мёртвый.

— Вот именно.

Хелен поднялась, обошла перегородку и встала у его капсулы.

— Что там?

Этан молча вывел уведомление на весь экран.

Хелен прочитала его быстро, потом задержала взгляд на индексе.

— Значит, восемьдесят второй «Б»?

— Да.

— Давно оттуда что-нибудь приходило?

— На моей памяти — ни разу.

Она обречённо выдохнула:

— Тогда открывай.

Этан открыл сегмент и сначала увидел именно то, что ожидал увидеть: старые таблицы отката, следы прежних ревизий, дубли архивных индексов, редкие системные отметки, которые тянулись через такие карманы годами и ничего не значили. Пыль цифрового чулана. Он уже собирался закрыть журнал и вернуть уведомление в общую кучу вторичной проверки, но кое-что из ночных событий в 82-B заставило его остановиться.

Первые записи стояли на 03:14.

Не ошибка. Не атака. Обычные служебные логи. Но их было слишком много для сегмента, который должен быть тих, как покойник. Этан увеличил ленту и несколько секунд смотрел молча. Затем вывел рядом карту внутренних обращений.

Внутри 82-B шло движение.

Сначала Этан принял это за обычный архивный шум. Старые сектора иногда просыпались для сверки контрольных сумм; уточняли индексы, отвечали на запоздалые сервисные запросы через давно забытые каналы. Инерция слишком большой системы.

Потом увидел порядок. В 03:14 82-B поднял внутренний индекс. Через несколько секунд запросил из внешней сети языковой справочник. После ответа внутри сегмента начались переносы данных между локальными хранилищами. Затем ушёл ещё один запрос — уже к старой таблице маршрутов. После него снова пошёл внутренний обмен. Потом пауза. Потом тот же цикл, но в другой последовательности. На плановую ревизию это было не похоже. На сбой — тоже.

— Смотри, — сказал Этан.

Хелен наклонилась к экрану.

— Фоновый процесс?

— Нет.

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

— Сервисный обход? — спросила Хелен.

— Тогда была бы задача.

— Ошибка классификатора?

— Классификатор мог неверно интерпретировать событие, но не подменить его.

Этан вывел на экран больший участок журнала.

Та же схема повторилась ещё раз: сначала внутренний запрос к одному из индексов 82-B, затем короткое обращение в сеть, после ответа — новая серия внутренних запросов уже к другим локальным адресам. Потом пауза в несколько секунд. Потом ещё один цикл.

Хелен не отрываясь смотрела на экран.

— Что он тянет?

— Пока не знаю.

Этан раскрыл слой внутренних переносов.

После каждого внешнего обращения 82-B начинал внутренний обмен данными. Сначала поднимал локальный индекс. Затем перебрасывал данные во внутренний кэш. После этого шла запись в языковой буфер и короткое обращение к адресной таблице сегмента. Потом пауза. Потом новый цикл.

Он проверил следующие строки.

То же самое.

— Это не похоже на чтение, — сказала Хелен.

— Да.

— Тогда на что?

Этан не ответил. Он уже открывал внешний слой.

Вот здесь и стало ясно, почему 82-B вообще попал во вторичную проверку.

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

Хелен нахмурилась.

— Он же вроде изолирован.

— Должен быть, — сказал Этан.

Он открыл маршруты двух запросов, потом ещё трёх. Все шли по старым сервисным каналам, оставшимся в схеме после прежних обновлений. 82-B не ломал защиту и не искал обход. Он выходил наружу незаметными партизанскими тропами.

— Что возвращается? — спросила Хелен.

Этан вывел ответный трафик.

После каждого внешнего ответа внутри 82-B снова начиналось движение: поднимались локальные индексы, шли внутренние переносы, затем уходил новый запрос — уже к другому внешнему массиву. Через несколько секунд цикл повторялся. Не один и тот же, но одного типа.

— Это не атака, — сказала Хелен.

— Пока не похоже.

— И не обслуживание.

— Нет.

Этан свёл два слоя рядом, и картина стала достаточно ясной, хотя и ещё менее понятной: 82-й не просто загружал данные. Он постоянно добирал их извне и что-то делал с ними внутри себя.

Он вернулся к ленте. Сопоставил внешние обращения с внутренними всплесками и только тогда увидел главное: после каждого запроса наружу активность внутри 82-B менялась.

До этого 82-B ещё можно было принять за старый сегмент, в котором по неясной причине проснулся какой-то забытый процесс. Внутренний журнал эту версию ломал.

Там не было одной линии работы. Обмен шёл сразу в нескольких местах сегмента. Одни потоки оживали на несколько секунд и закрывались, другие сразу приходили им на смену; где-то активность нарастала, где-то сходила к редким коротким откликам, но общий обмен в секторе не прерывался ни на секунду.

И после каждого внешнего ответа общий рисунок менялся: часть внутренних маршрутов исчезала, в других местах тут же возникали новые, нагрузка смещалась по сегменту, расходилась, снова собиралась. Без какой-либо внятной схемы.

Этан открыл ещё несколько фрагментов подряд. Везде было одно и то же — 82-B не просто брал данные извне и не только лишь «обрабатывал запрос». Он жил после каждого ответа чуть иначе, чем до него. Новые внешние данные сразу перестраивали внутреннюю активность сегмента: где-то запускали плотный обмен, где-то вызывали веерные всплески, похожие не на работу одной программы, а на одновременную реакцию множества локальных процессов.

— Автоматика могла это собрать? — спросила Хелен.

Этан ответил не сразу. Сначала ещё раз проверил служебный контур 82-B: не висит ли на сегменте задача, не шло ли ночью обслуживание, не подцепил ли его какой-нибудь старый регламент сопровождения. Ничего.

— Нет, — сказал он. — Не так.

— Тогда сбой?

Этан снова свёл журналы рядом.

— Сбой выглядел бы как повреждение пакетов или ложная адресация, — сказал он. — Здесь нет ни того ни другого.

Он провёл пальцем по ленте, не отрывая взгляда от строк.

— Активность в 82-B неоднородна. Он берёт данные извне, и после этого внутри у него каждый раз меняется общий рисунок. Для пустого сегмента уж слишком целенаправленная работа.

Хелен молчала.

— Тогда что это? — спросила она.

Этан не ответил сразу.

Потому что для увиденного у него не было объяснения. Для архивного сегмента в 82-B происходило слишком много всего и сразу.

Системный интерфейс тем временем уже начал делать то, для чего его и создавали: сводить разрозненные сбои в безопасную служебную картинку. Часть событий система пометила как фоновую синхронизацию, часть попыталась увести в нестабильность старого архивного сегмента. Ещё немного — и 82-B утонул бы в обычной автоматической обработке: вторичная индексация, пересборка журналов, служебная проверка, стандартные объяснения, после которых от реальной картины почти ничего не остаётся.

Этан смотрел, как лента меняется на глазах.

— Не надо, — сказала Хелен.

— Что?

— Не дай автоматике всё нам испортить.

Он сразу открыл консоль системного управления и снял 82-B с фонового сопровождения. Отключил вторичную классификацию, закрыл автоматическую индексацию, убрал стандартные сервисные процедуры, которые могли туда подключиться. После этого перевёл сегмент на ручной режим наблюдения: все новые события — только напрямую к оператору, без промежуточной обработки.

Лента сразу перестроилась. Система убрала свои ярлыки, оставив лишь голый список событий. Теперь 82-B был виден как последовательность собственных действий.

Хелен несколько секунд смотрела молча.

— Если там что-то произойдёт, мы это увидим первыми, — сказала она.

— Для этого и перевёл, — ответил Этан.

Он ещё раз проверил настройки. 82-B был снят с общей автоматики. Теперь ни один корректирующий процесс не должен войти туда раньше них, чтобы пересчитать, подправить, «нормализовать», привести странную активность к штатному виду и в итоге превратить неизвестное в аккуратно исправленный сбой.

Только после этого Этан убрал руку с панели.

— Всё, — сказал он. — Теперь вручную.

— Давно пора, — ответила Хелен.

***

Несколько минут они просто молча смотрели.

Этан возвращал ленту на одни и те же моменты, останавливал её, снова сводил рядом внутренний и внешний журналы. Сначала он смотрел только на внешний слой. Потом снова свёл его с внутренним и оставил оба рядом. После каждого ответа внутри 82-B сразу менялся весь рисунок нагрузки: на одних внутренних адресах трафик резко подскакивал, на других спадал, через секунду там, где за мгновение до этого было тихо, начинался плотный обмен между локальными узлами. Затем часть этих потоков обрывалась, нагрузка смещалась дальше по сегменту, и 82-B снова выходил наружу — уже за другими данными.

Он прогнал этот кусок ещё раз. Потом ещё.

Это не было похоже ни на одну системную процедуру — слишком много всего происходило одновременно. На каждый пакет данных извне 82-B реагировал множеством внутренних откликов — будто те попадали в лагерь гремлинов, которые тут же принимались делить их между собой.

И вот здесь раздражение впервые сменилось у него той сухой, рабочей собранностью, которая приходит, когда система наконец перестаёт быть скучной, но ещё не успела стать аварией. Когда перед тобой уже не рутина, а вызов.

Хелен какое-то время наблюдала за ним, нахмурив брови. Потом сказала:

— Может, просто отрубим его нахрен?

Этан ответил не сразу.

Решение отключить 82-B будет простым, безопасным и правильным. Странная активность в заброшенном сегменте — сегмент выведен из работы, вопрос закрыт. Именно так и поступают, когда не хотят потом объяснять, почему не сделали это сразу. Но тогда исчезнет загадка, а вместе с ней и возможность разобраться, что она из себя представляет.

На страницу:
2 из 5