| Предыдущая глава |
↓ Содержание ↓
↑ Свернуть ↑
| Следующая глава |
Ронан
Всю следующую неделю город словно пытался доказать нам обоим, что мы параноики. В Корке зарядил мелкий, ленивый дождь, превративший набережные Ли в зеркальную гладь тёмного мокрого гранита. В офисе кипела обычная дурная суета: Каллан ругался с поставщиками по поводу стальных кронштейнов, верстальщики спорили у кофемашины о шрифтах для презентации городской управы, а мы с Мэй делили широкий стол в углу, заваленный чертежами узлов коммутации.
Пока мы сидели бок о бок над чертежами, в голову против воли лезла дурная, неуместная мысль, от которой внутри всё неприятно зудело. У Мэй никого не было. Точно никого. Если бы рядом с ней был мужчина — нормальный парень, с которым делят постель, строят планы и делятся страхами, — она бы ни за что не пришла за помощью ко мне, угрюмому коллеге с проводами и тестером. Да и за все время моей работы у Каллана ни разу не слышал, чтобы её телефон звонил по личным делам; никаких букетов, никаких вечерних встреч у входа в офис, разве только с коллегами из нашего офиса, только тишина и работа. И стоило этой мысли зацепиться за сознание, как следом накатывала злость на самого себя. Идиот. Девчонку загнали в угол, она напугана до полусмерти, вздрагивает от каждого шороха в собственном подъезде, а я сижу рядом и, как озабоченный сопливый подросток, украдкой вычисляю, свободна ли она, и радуюсь тому, что она одна.
Мэй заметно оттаяла. Не сразу, не рывком — постепенно, день за днём. Тот вечер у её подъезда, когда из сырого тумана вынырнул мистер Донахью со своим лохматым золотистым ретривером Барни, стал для неё чем-то вроде невидимой черты. Мэй снова начала подкрашивать губы светлой помадой, перестала вздрагивать от каждого хлопка двери в приёмной и даже притащила в офис коробку миндального печенья из кондитерской на Патрик-стрит.
Но главное — сеть молчала. Мой сторожевой скрипт, подвешенный на поддельный файл расписания замеров освещения, висел в системной памяти мёртвым грузом. Ни единого запроса. Ни попытки подбора паролей к закрытой директории. Никаких аномалий на внешнем шлюзе. В безопасности такой фоновый маркер называют «канарейкой» — по старой шахтёрской привычке брать в забой птицу в клетке. Если воздух чист, канарейка молчит и дышит; если пошёл угарный газ — она падает первой, давая сигнал бежать со всех ног. Моя электронная канарейка спала уже шестые сутки.
Во вторник перед обедом Мэй подошла ко мне со стаканчиком фильтр-кофе. Поставила его на край стола, задержала взгляд на тёмном окне открытого терминала и спросила — негромко, стараясь, чтобы голос звучал повседневно:
— Ронан... всё ещё тихо?
— Глухо, как в трюме, — отозвался я, не отрывая взгляда от принципиальной схемы щита. — Если бы туда полезли хоть на байт, мой телефон уже орал бы на весь этаж.
Она шумно, с явным облегчением выдохнула. Чуть оперлась о край стола, глядя в окно, по которому лениво сползали дождевые капли:
— Может... может, мы сами себя накрутили? Ну, то есть... вдруг это был просто какой-то бродячий бот? Или кто-то из конкурирующего бюро в Дублине нанял пацана просканировать сервер мэрии, чтобы сдёрнуть концепт освещения до защиты бюджета? Увидели, что лёгкой добычи нет, и бросили?
— Всё может быть, — спокойно ответил я.
Я соврал. Бродячие боты-сканеры не лезут целевым образом в директории с графиками смен конкретных сотрудников, а конкуренты воруют итоговые сметы и визуализации, но никак не служебные наряды-допуски. Но мне так отчаянно хотелось, чтобы она оказалась права.
Господи, как же мне самому не хотелось верить, что за живой, хрупкой девчонкой, которая сейчас так осторожно улыбалась мне поверх картонного стаканчика, по пятам идёт реальный ублюдок. Мой мозг сам с готовностью цеплялся за любые спасительные объяснения. Проще было списать всё на мусорные сетевые сканеры, на дублинских пижонов-конкурентов, на сбой маршрутизации — на что угодно, только не на методичную, хладнокровную охоту.
Потому что если это бот или промышленный шпионаж — это всего лишь моя привычная инженерная работа. Защита периметра, файрвол, патчи на уязвимости. А если за ней действительно тащится какая-то тень... значит, Мэй в опасности, от которой не защитит ни один шифрованный протокол.
В среду днём мне позвонил главный технолог завода металлоконструкций и узловой сборки из Слайго. Заказ на распределительные герметичные шкафы с защитой IP67 и мостовые контроллеры автоматики был готов к отгрузке, но возникла накладка: на производственной линии сменили модель вводных сальников, и кабельные трассы не ложились в стандартные посадочные гнёзда.
В фирме все знали: если вопрос упирался в металл, реле и автоматику с северо-запада, ехать должен я. Слайго был моим домом. Я вырос на этих продуваемых океанских верфях, начинал там подмастерьем и знал половину бригадиров и старых заводчан по именам. Чужака заводские мурыжили бы согласованиями чертежей до рождественских праздников, а со мной разговор шёл коротко и на одном языке: я сам выверял каждый кронштейн. К тому же конторе не приходилось тратиться на гостиницы. На холме над заливом стоял дом родителей, где за мной всегда оставалась моя старая комната под шиферным скатом.
— Либо ты сам приезжаешь на сорок восемь часов и бьёшь по рукам с мужиками в сборочном цеху, либо мы тормозим отгрузку на две недели, — без обиняков бросил технолог в трубку.
Я прикинул расклад. Неделя полнейшей тишины в сети. Мэй спокойна, работа идёт ровно. Домой смотаться на пару дней — обычное дело. Загляну к своим, переночую в родных стенах, лично проверю клеммники и посадочные места под оптику, а в пятницу к ночи вернусь в Корк.
Перед выходом из офиса я притормозил у стола Мэй:
— Я до вечера пятницы в Слайго. На заводе сборки застряли наши шкафы, надо лично согласовать клеммные коробки.
Она подняла на меня глаза. На мгновение в них мелькнула знакомая настороженность, но Мэй тут же спрятала её за мягкой, открытой улыбкой:
— Конечно, Ронан. Езжай, не переживай. Здесь Каллан, да и работы выше крыши, мы до пятницы из чертежей не вылезем.
— Ловушка взведена, телефон при мне, — добавил я, чувствуя глупую потребность оправдаться за свой отъезд. — Если что-то шевельнётся — я увижу. Но, похоже, там и правда была обычная автоматическая прощупка портов. Так что просто работай. И... вечером не засиживайся одна в темноте.
— Слушаюсь, сэр инженер, — почти весело ответила она.
Я уехал с чистой совестью и спокойным сердцем. Четверг в Слайго пролетел в привычной колее: гул сборочных цехов, замеры фланцев штангенциркулем, ругань с отделом контроля качества и влажный сквозняк с Атлантики, врывавшийся в открытые ворота. Телефон молчал. Ночь в родительском доме прошла тихо: за окном привычно шумел океанский прибой, в комнате пахло сухим деревом и старыми книгами.
В пятницу к пяти часам вечера все акты приёмки были подписаны. Я бросил сумку с чертежами в багажник, заскочил домой оставить ключи отцу и по пути на автовокзал заглянул в старый портовый паб у набережной — перехватить тарелку горячей похлёбки и выпить пинту стаута перед рейсом на юг.
В пабе было шумно, тепло и по-домашнему спокойно. За стойкой наливали тот же горьковатый тёмный эль, за соседним столиком спорили знакомые докеры, а за мутным окном хлестал дождь, взбивая пену в бухте. Мой родной, предсказуемый берег.
Телефон на тяжёлом дубовом столе сухо, коротко дёрнулся. Один длинный виброотклик. Два коротких. Звук был негромким, он почти утонул в общем гуле голосов и звоне кружек, но меня словно ударило электрическим разрядом под рёбра. Я уставился на экран.
Канарейка сдохла.
Сердце глухо толкнулось в грудную клетку и заколотилось тяжело, отдаваясь пульсом в висках. Я медленно опустил ложку на салфетку и взял аппарат.
На экране горело уведомление локального терминала:
[ALERT] 17:42:11 UTC [TRIGGER] /public_share/Schedules/November_SiteInspections_Ward.pdf [ACTION] Binary Read Complete / 100% Downloaded
Сработало. Кто-то только что зашёл в сеть, открыл поддельный график полевых выездов Мэй и полностью скачал его к себе. Тот самый документ, где чёрным по белому значилось: завтра, в субботу, в 20:00 — контрольные замеры отражателей на Южном мосту. В полном одиночестве.
Пальцы двигались тяжело, непослушно. Я разблокировал экран, смахнул алерт и открыл мобильную консоль Termius. Быстро вбил команду для развёртывания сетевого дампа сессии.
Строки побежали перед глазами, мелкие, контрастные:
SRC_IP: 193.120.44.118 (AS1213 — HEAnet Dublin Core) PROTO: TLSv1.3 / TCP CIPHER: ECDHE-RSA-AES256-GCM-SHA384
Дублин. Тот самый старый диапазон научно-производственного сектора. Та же подсеть бывших лабораторий на юге столицы, то же старое железо. На долю секунды мне показалось, что всё нормально: ловушка сработала, взломщик сидит за триста километров в столице, он на крючке, он далеко.
А затем мой взгляд опустился на строку сопутствующих сетевых метрик пакета.
TCP_RTT: 4.2 ms SYN-ACK Roundtrip: 4.18 ms JITTER: 0.12 ms
Я моргнул. Поднёс экран к самым глазам. Четыре миллисекунды.
Во рту мгновенно пересохло, будто я заглотил горсть сухой золы. Гул паба, смех у барной стойки, стук дождя по стеклу — всё смазалось, превратилось в глухой, неразборчивый фон.
Этого не могло быть. Это противоречило элементарной физике оптоволоконной связи. Чтобы световой импульс добежал из Корка по магистральному кабелю до Дублина, пробился через маршрутизаторы столичного узла HEAnet, обработался сервером и вернулся обратно, требовалось время. Даже на идеально чистом канале задержка кругового обращения между Корком и Дублином не опускается ниже двадцати пяти миллисекунд. В реальной коммерческой сети это честные сорок пять или пятьдесят. Из Дублина такого отклика в четыре миллисекунды не бывает в природе.
Четыре миллисекунды — это время отклика внутри локального городского кольца. Сигнал дошёл только до ближайшей базовой станции мобильного оператора или районного распределительного шкафа прямо на месте.
Я вбил команду расширенной трассировки, вытягивая заголовки промежуточных сессий. Внутри туннеля висел открытый reverse-shell — удалённый проброс управления.
Картина сложилась с беспощадной ясностью. Дублинский сервер был просто слепой ширмой. Древней машиной, оставленной в тёмном углу лаборатории, которую использовали как прокси. Человек не сидел в Дублине. Он подключился к дублинскому терминалу удалённо, находясь... в Корке. Сигнал ушёл на транзитный узел в столицу и вернулся обратно на юг за доли секунды, потому что сам оператор сидел под боком у нашей городской вышки.
Он был в Корке. И тут же следом ударила вторая мысль, выбившая из лёгких остатки воздуха. Неделя. Ровно семь дней мёртвой, абсолютной тишины. Этот гад не лез в сеть, пока я сидел за соседним столом с Мэй. Не пытался вскрыть сервер, когда мы вместе выходили из офиса в туман и я провожал её до крыльца. Он не прикасался к файлу, пока я был в городе.
Он нажал кнопку скачивания ровно в семнадцать сорок две. В пятницу.
Спустя сутки после того, как я уехал на автовокзал и сел в автобус до Слайго.
Холодная, удушливая волна паники поднялась откуда-то из желудка к самому горлу.
Совпадение?
Семь дней выжидать — и полезть за нарядом-допуском именно тогда, когда меня нет рядом? В пятницу вечером, зная, что впереди выходные? Я не верил в такие совпадения. Этот мудак был реален. И он в Корке. Он не просто ковырялся в файлах из больного любопытства — он следил за нами вживую. Знал график. Возможно, он стоял у офиса на набережной Ли, прячась под зонтом, и собственными глазами видел, как я закидывал сумку в багажник такси. Он выждал день, чтобы убедиться, что я не вернусь к ночи, дождался конца рабочей недели — и забрал фальшивку.
Он дождался момента, когда Мэй останется одна
Я снова посмотрел на экран телефона.
Завтра — суббота. В скачанном им фальшивом наряде-допуске стояло: «20:00, Южный мост, опора №4. Контрольные замеры. Ответственный исполнитель: М. Уорд».
Он придёт туда, рассчитывая застать её одну в темноте у парапета над чёрной водой Ли.
Палец дёрнулся к списку контактов. Найти номер Мэй. Немедленно набрать вызов. И замер в миллиметре от экрана.
Стоп.
Я заставил себя сделать глубокий, размеренный вдох. В лёгкие ворвался горячий воздух паба, пахнущий жареным луком и табаком. Голова начала проясняться, смывая первый бешеный выброс адреналина.
Она не пойдёт туда.
Мысль ударила по вискам спасительной вспышкой. Слава богу. Господи, как же чертовски правильно мы сделали, что выдумали этот наряд из головы. В реальном производственном графике у неё на субботу стояла обычная камералка дома — чистый выходной. Никаких замеров у воды. Она не пойдёт на этот чёртов мост.
Но следом отпустившая было тревога вернулась с утроенной силой, от которой волосы на затылке встали дыбом.
А если бы расписание было настоящим?..
Я сжал телефон в кулаке так, что захрустел пластиковый корпус. Если бы на сервере лежал её подлинный рабочий наряд?
Она бы пошла. Взяла бы планшет, накинула своё светлое пальто, намотала шарф и вышла в туман к Южному мосту. Стояла бы на мокром ветру над чёрной, маслянистой водой Ли, щурясь от бликов тестовых прожекторов, в наушниках, увлечённая замерами. А он подошёл бы сзади. Под шум воды и далёкий гул машин.
От этой картины мне стало не по себе.
Нет, звонить ей сейчас с воплями через динамик нельзя. Истерика на расстоянии — худшее, что можно придумать. Что я скажу ей за сотни миль? «Мэй, он здесь, но ты сиди дома и бойся»? Чтобы она сошла с ума в пустой квартире, вздрагивая от каждого шороха в подъезде, пока я беспомощно трясусь в дороге?
Но не знать, где она сейчас, я тоже не мог. Меня просто разорвало бы на части.
Подавив дурацкую внутреннюю неловкость — с каких это пор я пишу коллегам посреди вечера с расспросами, где они находятся, — я открыл чат. Пальцы быстро набрали нарочито ровные, деловые строки:
«Мэй, привет. На заводе всё подписали раньше времени, освободился. Ты ещё на работе или уже дома?»
Я уставился на экран, не моргая. Сердце колотилось где-то в горле.
Прошла минута. Вторая. Наконец статус сменился на «печатает...», и выскочил ответ:
«Привет! Я уже дома, Каллан сегодня пораньше всех выгнал из-за ливня. Сварила тыквенный суп, сижу под пледом, смотрю сериал. Погода совсем испортилась, так что идеальный вечер для лени :) А ты как? Когда обратно?»
Я выдохнул. Дома. Под замком, в тепле, за толстыми стенами. Жива, невредима, в безопасности.
Пальцы уже увереннее забегали по стеклу:
«Отлично, отдыхай. Погода дрянь, поэтому я не стал ждать утра — сажусь на вечерний автобус до Корка. Буду к рассвету. Дороги пустые, доеду нормально».
Ответ прилетел почти мгновенно:
«Ого, в ночь поедешь? Ну ты даёшь, уставший же будешь. Напиши обязательно, как доберёшься утром, хорошо?»
«Договорились.».
Я заблокировал экран, положил телефон в карман куртки и бросил на стол пару смятых купюр за остывшую похлёбку и стаут.
До автостанции оставалось десять минут ходьбы под секущим дождём. Впереди были неблизкие триста тридцать километров по ирландскому западу. Ночной рейс Expressway 51 — это не скоростной автобан: автобус всю ночь будет ползти и вихлять по узким региональным двухполоскам через Туам, Голуэй, бескрайние каменные изгороди графства Клэр, Лимерик и сонные фермерские городки. Шесть часов монотонной, выматывающей тряски в полупустом салоне под шум дворников и свет редких полустанков. Поспать в такой дороге всё равно не удастся.
Но главное было решено.
Ночью я её пугать не стану. Пусть спокойно выспится. Я доеду до автовокзала Парнелл-Плейс, попаду домой, выпью кофе и дождусь девяти утра.
Тогда я напишу, что нам нужно срочно встретиться, и скажу ей всё лично. Глядя в глаза.
А вечером... вечером на Южный мост вместо неё пойду я.

| Предыдущая глава |
↓ Содержание ↓
↑ Свернуть ↑
| Следующая глава |