| Предыдущая глава |
↓ Содержание ↓
↑ Свернуть ↑
| Следующая глава |
Ронан
На верфях в Слайго всё было устроено просто. Если на пульте мигает аварийный индикатор, ты берёшь тестер, идёшь вдоль контура и прозваниваешь цепь. Либо перегорело реле, либо окислился контакт, либо кто-то криво затянул клемму. Любую неполадку можно было потрогать руками, зачистить наждачкой и закрутить ключом на четырнадцать.
С людьми у меня так не получалось. Особенно с Мэй. С того момента, как она зашла сегодня утром в опенспейс, я не мог сосредоточиться на спецификации сетевых шкафов. Она сняла пальто, повесила сумку на спинку стула, но даже не включила свой экран. Сидела, сжимая остывшую кружку обеими ладонями, и смотрела в одну точку на стене. Бледная, словно провела ночь не дома в тепле, а на продуваемом молу в заливе.
Первая мысль вломилась в виски тупой тревогой: я вчера всё испортил. Навязался со своей вечерней прогулкой до её дома. Решил, что выгляжу заботливым коллегой, а на деле перешагнул границы, напугал её или показался назойливым идиотом. От этой мысли под воротником толстовки стало жарко и липко.
Я пытался отвлечься, погрузиться в работу, но неизменно возвращался взглядом к Мэй. Она сидела всё так же неподвижно, глядя куда-то мимо людей, будто выпала из реальности, пальцы её на краю стола едва заметно дрожали.
Вся моя собственная неловкость вдруг отошла на второй план. Оставить её в таком состоянии я просто не мог. Сделав короткий вдох, я поднялся, пересёк разделявшее нас расстояние в три шага и остановился рядом с её столом.
Голос мой прозвучал жестче и суше, чем хотелось бы — я всегда так говорил, когда нервничал. Спросил, всё ли в порядке, не обидел ли её вчера ненароком.
Она вскинулась, и в её глазах на секунду мелькнуло недоумение, и тут же сменилось таким искренним, горячим облегчением, что меня отпустило. "Что? Ронан, боже мой, нет! Это не из-за тебя, правда".
Врать Мэй не умела, это я уже понял. Значит, дело было не во мне. Но легче от этого не стало. Если на работе всё чисто, проект согласован, Каллан не придирается, а я её ничем не задел — отчего её колотит мелкой дрожью?
Когда после обеда шеф увёл верстальщиков в городскую мэрию и в офисе повисла гулкая тишина, Мэй встала со своего места. Подошла к моему столу, упёрлась в лакированную кромку и попросила поднять вчерашние системные логи и дампы сетевого шлюза.
Зачем дизайнеру сырые дампы трафика?
Это не имело никакого смысла. Мэй работала с 3D-моделями набережной, визуализациями фасадов и схемами освещения. Она знала, как наложить текстуру гранита, но в структуре сетевых пакетов смыслила не больше, чем я — в тонкостях графических фильтров.
Но в её глазах было что-то такое, отчего вопросы застряли у меня в горле. Взгляд загнанного в угол зверька, который из последних сил ищет лазейку в глухом заборе.
Я молча пододвинул ей второй стул:
— Садись. Сейчас вытащим.
На экране терминала побежали бесконечные колонки шестнадцатеричных кодов. Я отфильтровал фоновый мусор: городские синхронизации времени, опросы датчиков давления на насосных станциях, стандартный трафик мэрии.
Осталась тонкая, упрямая цепочка запросов.
— Смотри, — я показал пальцем на выделенный блок. — Вот что мы видим прямо сейчас, без шаманства. Вчера в одиннадцать вечера на наш внешний шлюз пришёл запрос. Не вирус. Кто-то нашёл дыру в удалённом доступе, которую мы ещё не успели закрыть после монтажа на мосту. Он целенаправленно искал одну конкретную директорию: внутренний календарь смен проектной группы и твою папку с графиками дежурств.
Мэй вжалась в спинку стула.
— И всё? — её голос прозвучал глухо, почти с отчаянием. — Ронан, мы не можем узнать, кто это? Откуда он заходил?
— Прямо сейчас с ходу — нет, — ответил я, поворачивая к ней монитор. — Если бы он сидел с домашнего вай-фая в соседнем пабе, я бы показал тебе провайдера и район через две минуты. Но тут человек понимает, что делает. Трафик прогнан через три узла: сначала коммерческий VPN, потом Франкфурт, а оттуда — зашифрованный туннель к нам. Внутри этой трубы — глухая каша, для нашего роутера это просто бессмысленный набор байтов.
Она опустила глаза, прерывисто вздохнула. Мне чертовски захотелось положить руку ей на плечо, но я вовремя одёрнул себя. Вместо этого я постучал пальцем по столу, заставляя её поднять взгляд:
— Но это не значит, что мы в тупике.
— В смысле?
— В прямом. Это не кино, Мэй. Никакой адрес не всплывает на экране красными буквами, если нажать пробел. В реальности всё делается по шагам. Первое: я выгружаю весь сырой дамп трафика — все эти гигабайты мусора — себе на флешку и забираю домой на ночь. Напишу скрипт, сниму цифровой отпечаток клиента, с которого он отправлял команды. Это даст нам понимание, с какого типа железа он вообще работает.
— А второе? — в её глазах мелькнула слабая искра надежды.
— А второе — нам нужно заставить его наступить на мину, — я усмехнулся краешком губ, открывая конфигуратор прав доступа. — Если он так нагло полез в твои графики, он почти наверняка вернётся проверить обновления. Думает, что остался незамеченным. Если я сейчас наглухо закрою дыру, он поймёт, что спалился, и заляжет на дно. Мы его спугнём.
— И что делать?
— Оставить дверь чуть-чуть приоткрытой, — я открыл служебную папку с расписаниями. — Мы сделаем приманку. Смотри: мы берём твой график выездов на набережную на эту неделю и подменяем файл на сервере. Делаем липовое расписание. Допустим, ставим, что завтра в восемь вечера у тебя контрольные замеры освещения у Южного моста.
Мэй вздрогнула, непонимающе уставившись на меня:
— Зачем?
— А затем, что внутрь этого файла я зашью скрытый маячок. Ловушку. Для человека с той стороны это будет выглядеть как обычный документ с таблицей. Но в ту самую миллисекунду, когда он попытается его открыть или хотя бы скопировать к себе на диск, скрытый скрипт заставит его систему отправить фоновый пинг на мой сервер. Он думает, что копается в архиве в темноте. А мы повесим над этой дверью сигнальную ракету. Если он сунется за твоим новым расписанием — он сам сорвёт чеку и выдаст узел. Ты согласна на такую игру?
Мэй смотрела на меня, не моргая. Тревога в её взгляде никуда не делась, но сквозь неё впервые пробилась холодная, упрямая решимость.
— Загружай, — тихо сказала она. — Делай приманку, Ронан.
Офис окончательно опустел к половине седьмого. Мониторы погасли, только на моём терминале тихо моргал индикатор фонового процесса, собирающего сырые пакеты на флешку. Я выдернул накопитель, спрятал его в нагрудный карман куртки и застегнул молнию до самого горла.
Мэй стояла у вешалки в полутьме коридора. Нам в любом случае было по пути. Моя съёмная мансарда на холме у церкви Святой Анны находилась дальше, выше по склону, так что её переулок у набережной я так или иначе проходил каждый вечер. Вчера всё вышло легко и естественно: на развилке сама предложила срезать мимо её дома.
Сегодня всё было иначе. Она не просила меня идти с ней, но я видел, как не слушались её пальцы — она дважды промахнулась мимо пуговицы пальто. А когда взялась за ручку входной двери и выглянула на улицу, где речной туман Ли уже затапливал брусчатку, в её фигуре появилась застывшая напряжённость.
— Пойдём? — негромко позвал я, поправляя лямку рюкзака.
Мэй повернулась ко мне и на долю секунды в глубине её глаз промелькнуло прозрачное, чистое облегчение — словно она всё это время ждала именно меня, просто сама ни за что бы не решилась попросить остаться рядом.
Она кивнула и толкнула створку дверей:
— Пойдём, Ронан.
Мы шли тем же маршрутом, что и вчера, но лёгкость испарилась. Мэй держалась чуть ближе — почти касаясь рукавом пальто плотной ткани моей куртки. Любой случайный звук — хлопок брезента на пришвартованной барже, шелест шин запоздалого фургона на противоположном берегу — заставлял её вздрагивать. Я нарочно заговорил первым — о какой-то технической ерунде, о просадке напряжения на щитовой, просто чтобы заполнить эту вязкую пустоту между нами и дать ей опереться на что-то простое и понятное.
Мы свернули в её тупик, выложенный старым булыжником. Вот и знакомое трёхэтажное георгианское здание из тёмного кирпича, массивная парадная дверь под козырьком. Мэй подошла к ступенькам, достала из сумочки связку ключей. И замерла. Она стояла на первой ступени, сжимая латунный ключ, и смотрела на тяжёлую филёнчатую дверь. Не открывала. Не оборачивалась. Просто стояла, неестественно выпрямив спину.
Я затормозил в двух шагах у кованых перил. Я привык считать себя неповоротливым увальнем, тугодумом, который хорошо соображает только среди схем и реле. Но здесь мне не нужны были логи: я кожей почувствовал, что она боится сделать шаг внутрь. Боится войти в этот сумрак одна.
Горло сдавило. "Скажи ей: давай поднимусь с тобой, проверю этаж".
Но язык словно примёрз к нёбу. Набиться к ней на порог квартиры? А если она решит, что я пользуюсь её растерянностью?
Пауза затягивалась, становясь мучительной. Мэй медленно повернула голову, посмотрела на меня — и в её расширенных глазах читалась та же самая немая, неловкая борьба. Она хотела попросить, но не могла перешагнуть через смущение.
И тут эту натянутую струну молчания оборвал топот лап и весёлое фырканье из-за угла дома. Из тумана вынырнул мужчина лет сорока в непромокаемой кепке, держа на поводке лохматого золотистого ретривера. Пёс, завидев Мэй, радостно завилял хвостом, застучал когтями по мокрому камню и ткнулся мокрым носом ей в ботинок.
— Добрый вечер, Мэй! — мужчина приподнял козырёк кепки, — Опять эта речная сырость. Барни уже все лапы промочил, еле увёл с набережной.
Мэй чуть вздрогнула, но тут же опустилась на колено перед собакой. Её пальцы зарылись в густую тёплую шерсть ретривера, и я услышал, как шумно, прерывисто она выдохнула.
— Привет, Барни... — голос её чуть дрожал, но она уже улыбалась, гладя довольную морду пса. — Добрый вечер, мистер Донахью. Да, туман сегодня жуткий.
— Жуть не то слово. Идёмте греться, я как раз дверь открываю.
Он полез в карман за электронным ключом, замок весело щёлкнул, и подъезд наполнился тёплым жёлтым светом.
Мэй поднялась с колен, поправила шарф и оглянулась на меня. Теперь в её глазах не было паники — только спокойная, бесконечная благодарность.
— До завтра, Ронан, — негромко сказала она. — И... спасибо. За всё.
— До завтра. Отдыхай, — кивнул я, пряча руки в карманы куртки.
Мэй чуть улыбнулась и шагнула в подъезд следом за соседом и виляющим хвостом Барни. Дверь захлопнулась с глухим стуком. Я постоял ещё минуту на мостовой, пока на втором этаже не вспыхнул свет, наверное, в её окнах, затем развернулся и зашагал вверх по холму.
В голове гудело, как в трансформаторной будке под перегрузкой. Я поднимался по крутым переулкам Шэндона, и каждый шаг отдавался глухим стуком в висках.
Она боялась зайти в собственный подъезд.
Вот что не давало мне покоя. Утром я ещё дёргался, что сам во всём виноват и навязываюсь ей, что она поссорилась с парнем и растроенна, и возникла даже дикая мысль про промышленный шпионаж — как инженер я обязан был допустить любую вероятность, какой бы бредовой она ни казалась. Но тут же отбросил эту чушь: будь Мэй замешана в сливе данных, она бы не пошла ко мне с просьбой открыть дампы, подставляясь под удар. Ссора с парнем тоже отпадала: из-за парня девчонки злятся, плачут, хлопают дверями или жалуются пордугам, поминутно проверяют телефон на личный кризис, но не вытягивают логи сетевого шлюза с побелевшими губами. Мэй была именно напугана — отчаянно, до ледяного ступора, и больше всего на свете хотела понять по этим пакетам: кто, что и где. А такой страх в сети вызывает только одно — сталкерство.
Люди не цепенеют перед входной дверью из-за взломанных таблиц Excel. Люди так замирают, только если ждут, что из темноты за дверью кто-то выйдет.
В IT-тусовке о таком не любили трепаться вслух за пинтой в пабе, но каждый, кто хоть раз администрировал открытые ресурсы или разгребал инциденты, знал: сталкерство — это отдельный сорт сетевой гнили. Самый липкий и трудновыводимый.
Мне самому повезло — меня никогда не вели. Кому интересен угрюмый железятник с верфей, у которого вся жизнь укладывается в схемы коммутации и термокружку с чаем? Но историй я насмотрелся.
На третьем курсе в Слайго у нашего парня с потока девчонку вот так же методично выживал из сети бывший одноклассник. Без угроз физической расправы, без откровенного криминала — закон за такое даже зацепиться не мог. Просто однажды ночью ей на личную почту прилетела фотография её расписания пар с пометкой аудиторий. Потом — копия старой переписки пятилетней давности, где она признавалась, как боится не сдать сессию. Ей методично, миллиметр за миллиметром, выкручивали психику, пока она не начала вздрагивать от каждого звука уведомления на телефоне и в итоге чуть не бросила учёбу.
Этим тварям даже не нужен реальный компромат. Не обязательно иметь на человека откровенные снимки или криминальное досье. У каждого живого человека за душой есть что-то хрупкое, глупое или болезненное. Забытая связь, чужой секрет, старая ошибка, которую хотелось похоронить и забыть. Для нормальных людей это прошлое. Для маньяка — рычаг.
Они не всегда требуют какой-то выкуп за информацию, часто упиваются тем, что держат тебя за горло. Но хуже всего другое: эта мразь редко остаётся только по ту сторону монитора. Виртуальный контроль всегда тянет за собой соблазн реального присутствия. Сталкер начинает бродить рядом. Заглядывать в окна, проверять почтовые ящики, стоять на противоположной стороне улицы под дождём.
И Мэй знала это. Она вздрагивала не от мысли о вирусе на сервере — она боялась увидеть живую тень на своей лестничной клетке.
Может, бывший? Какой-нибудь ублюдок, с которым она разошлась, а он решил, что имеет на неё пожизненные права? Или случайный неадекват, зацепившийся за неё на прошлой работе?
Спросить её прямо? "Мэй, что у него на тебя есть? Кто за тобой тащится?"
Нет. Человеку, которого методично загоняют в угол, меньше всего нужны допросы, даже из лучших побуждений. Спросить об этом — значит заставить её снова пережить стыд и беспомощность. Если захочет — расскажет сама. Но я могу попытаться копнуть глубже.
Поднявшись к себе под крышу, я сбросил куртку на кресло, щёлкнул чайником и сразу нажал кнопку включения на системном блоке. Достал из кармана флешку с дампом трафика и воткнул в порт.
Первым делом я открыл текстовый редактор и набросал скрипт на Python. Простой фильтр, который должен был перелопатить вчерашний массив пакетов и вычленить из них TLS-отпечаток атакующей машины. Шифрование скрывает текст, но архитектуру программы-клиента спрятать нельзя.
Пока скрипт шуршал по секторам диска, я открыл открытые реестры RIPE. Секундный сбой туннеля, который я заметил в офисе, не давал мне покоя. Я вбил сырой диапазон адресов в поиск.
На экране высветилась карточка владельца пула. Подсеть принадлежала старому научно-производственному сектору на юге Дублина. Закрытые инженерные ангары, бывшие испытательные лаборатории, часть которых сейчас сдавалась под мастерские и склады точной механики.
Я откинулся на спинку стула, глядя на мерцающие строчки. Мастерские.
Скрипт на соседнем мониторе негромко пискнул, завершая обработку. Выдало сигнатуру: старая рабочая станция под дистрибутивом десятилетней давности. Очень специфический терминал ввода данных, подключенный к порту. Тот, кто сидел за этой машиной, не был сопливым школьником. Это был человек старой закалки, привыкший работать с тяжелым техническим железом.
Я взял телефон, проверил соединение с нашим офисным шлюзом и повесил скрипт-перехватчик прямо на поддельный файл расписания Мэй. Если этот узел в Дублине шевельнётся хотя бы на байт в сторону файла — мой телефон завибрирует мгновенно.
Чашка с остывающим чаем стояла рядом, но я так к ней и не прикоснулся. Я сидел в полутьме мансарды, слушая, как осенний дождь колотит по наклонному стеклу на крыше, и смотрел на бегущую зелёную строку готовности ловушки.
"Ну давай, — зло подумал я, глядя в темноту за стеклом. — Зайди завтра проверить её новое расписание у Южного моста. Сделай всего один клик, мразь. И мы посмотрим, как тебе понравится, когда провода потянут в обратную сторону".
Телефон тихо мигнул синим светодиодом на краю стола: сторожевой процесс встал на боевое дежурство. Ловушка была взведена.

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