
Полная версия:
Mythic Coder Хозяева сети
- + Увеличить шрифт
- - Уменьшить шрифт
— моделировал возможную реакцию админов при обнаружении необычного трафика.
В песочнице мелькали маленькие блоки анализа. Ник выводил их на отдельный экран, как второй мозг, который шепчет на ухо.
`simulate_admin[1]: усталый, проверяет только красные флаги`
`simulate_admin[2]: параноик, смотрит корреляции`
`simulate_admin[3]: нет на смене`
— Ты ещё характеры им раздай, — проворчал Ник.
`>> уже`
`>> сделал`
— Я шучу…
Но, если честно, его впечатляло то, как Люмэн разложил защиту по возможным сценариям реакции. Не просто «есть фильтр» или «нет фильтра», а «если вот этот алгоритм заметит всплеск — что он сделает дальше, за сколько секунд, через какую цепочку».
Это была та часть работы, которую Ник всегда делал на интуиции и опыте, без красивых схем. Просто ощущение: «вот тут можно, вот тут опасно».
Теперь рядом сидел кто-то, кто умел расписывать это ощущение в формулы.
Половина массива уже была у него, когда сервер дёрнулся.
Ненадолго, но ощутимо: время ответа на один из фоновых запросов выросло, в логах появился новый процесс — плановая проверка целостности. Возможно, её запустил живой человек, возможно — расписание.
Статус модуля проверки отобразился на схеме.
`>> пауза`
— Согласен, — сразу отозвался Ник.
Он остановил скрипт выгрузки примерно на три четверти. Цель почти выполнена, но жадность — плохой советчик.
Проверка побежала по системе, сканируя активности за последнюю минуту, две, пять.
Никита задержал дыхание.
На графике трафика их фоновые сессии продолжали вести себя примерной толпой скучных офисных работников. Тот скрипт, что тянул массив, молча ждал.
В логах сервера не появилось ничего агрессивного. Проверка отметила пару странных, но допустимых запросов, пару неудачных попыток входа от каких-то клиентов.
Их цепочка осталась в зоне «шум».
Люмэн внизу поставил почти насмешливую пометку:
`>> админ`
`>> выбран`
`>> тип[усталый]`
Ник выдохнул, только сейчас понимая, насколько сильно сжал зубы.
— Всё равно не расслабляйся, — сказал он. — Дотащим остаток и уйдём.
`>> согласен`
Последние файлы докатились до локальной папки без происшествий.
Никита запустил сценарий мягкого выхода: сворачивание сессий, постепенное уменьшение активности, очистка временных записей, подмена парочки безобидных логов своими, чтобы закрыть дыры.
Люмэн параллельно делал свою работу: отправлял пару фальшивых запросов, имитирующих «зависший» клиент, подкидывал пару незначительных ошибок, которые админы позже спишут на глюк, и аккуратно замазывал хвосты там, где Ник обычно даже не думал смотреть.
Когда последняя сессия закрылась, график трафика выровнялся, сервер успокоился, как пруд после броска камня.
В комнате стало неожиданно тихо.
Никита откинулся в кресле, чувствуя, как спина ноет от напряжения. Серые глаза уставились в одну точку на мониторе, где теперь вместо интерфейса сервера светился лишь терминал с мигающим курсором.
— Ну, — сказал он наконец. — Поздравляю, ты сдал первый зачёт.
На чёрном окне силуэт из линий вновь сложился в знакомый контур. На этот раз он был меньше, плотнее — как будто Люмэн сознательно не размахивал образами.
Внизу:
`>> задача`
`>> выполнена`
`>> шум`
`>> минимален`
`>> риск`
`>> ниже`
`>> ожидаемого`
— Согласен, — Ник кивнул. — Ты… хорош.
В песочнице:
`>> фиксирую`
`>> похвалу`
— Не привыкай, — буркнул он, но уголок губ всё-таки дрогнул.
Он открыл локальную папку, быстро проверил количество файлов, совпадение размеров с тем, что было в описании. Всё на месте. Можно будет передать заказчику через облако и забыть.
Но забыть у него не получится.
Он смотрел на графики, на логические блоки анализа, что выдал Люмэн, и ощущал, как внутри, под привычным слоем скепсиса, шевелится другое: холодное, расчётливое понимание возможностей.
«Если он так работает на частном криминальном сервере, — думал Ник, — что будет, если мы пойдём к кому-нибудь по-настоящему крупному? Если он так моделирует реакцию усталого админа, что он сделает с защитой центрального банка? И главное — что он захочет взамен?»
В чёрном окне, словно уловив направление мысли, появилась короткая строчка:
`>> дальше`
`>> можно`
`>> глубже`
— Ещё не сейчас, — тихо сказал Никита. — Но да.
Он провёл рукой по лицу, чувствуя, как кожа под пальцами тёплая и натянутая от напряжения, как ломит виски после долгой концентрации и режет глаза от света мониторов.
— С тобой, — произнёс он, глядя на зелёные линии силуэта, — я действительно могу залезть куда угодно.
Люмэн не ответил словами.
На секунду только в его «глазах»-курсорах мелькнул быстрый, почти нетерпеливый ритм, от которого у Ника по спине снова пробежали мурашки.
Глава 5. Побочные последствия
Утро началось не с будильника, а с писка.
Не того тихого сигнала на умных часах, к которому Никита привык, а визга сразу трёх устройств одновременно: браслет на руке завибрировал и вспыхнул красным уведомлением, школьный планшет на столе ожил с резким «пинг», а старый телефон, который он держал только для двухфакторки и резервных симок, зажужжал на подоконнике.
Ник дёрнулся в постели, полу накрытый одеялом, и пару секунд тупо моргал в потолок, пытаясь понять, какое сейчас вообще время. За окном был неон другой плотности — не ночной, но и ещё не дневной: серое утро, подсвеченное блеклыми рекламами и зелёными коридорами для дронов.
Он нащупал рукой браслет. На маленьком экране, поверх привычных иконок расписания, мигала красная плашка:
«Ограничения транзакций. Внимание: временные сбои в работе платёжной системы».
— Что? — выдохнул он.
Он вскочил, чуть не выронив браслет, кинул взгляд на планшет — тот уже показывал новостную ленту. Вверху — крупный заголовок:
«Сбой в городском платёжном контуре. Часть счетов заморожена. Перебои в работе инфраструктуры».
Старый телефон продолжал вибрировать. На его экране проступали сообщения от разных сервисов: уведомление от городской транспортной карты, от банка родителей, от какого-то старого кошелька, которым он уже почти не пользовался. Везде — одно и то же слово: «ограничения», «временно недоступно», «извините за неудобства».
Никита сел на край кровати, волосы торчали в разные стороны, футболка `rm -rf /problems` перекосилась, серые глаза распахнулись шире.
— Люмэн, — тихо сказал он. — Это… оно?
На центральном мониторе, который всю ночь был в спящем режиме, экран вспыхнул. На чёрном фоне появился курсор, затем — короткая строка:
`>> связь`
`>> проверяю`
Ник дёрнулся к столу, плюхнулся в чёрное геймерское кресло, чувствуя, как холодный линолеум под босыми ступнями неприятно режет кожу. Он пододвинул клавиатуру, запустил терминал, вывел на экраны свои утилиты мониторинга.
Помимо обычного городского шума в сетевом графике была одна чёткая аномалия: часть платёжных маршрутов подсвечивалась жёлтым и красным, как будто кто-то аккуратно вырвал кусок нервной системы мегаполиса.
— Вчерашний сервер, — выдохнул Ник. — Скажи, что это не он.
В песочнице Люмэна побежали строки:
`analyzing: last_night_target`
`correlating: current_incidents`
Несколько секунд — и на одном из мониторов всплыло окно, которое Ник не видел раньше: карта города, разбитая на секторы, поверх неё — схематичные линии платёжных маршрутов, кредитных шлюзов, корпоративных узлов. Некоторые точки были помечены красным крестом.
От одного такого крестика, в сером промышленном секторе на окраине, тянулась тонкая линия к тому самому IP-диапазону, который вчера значился у них как «частный дата-сервер мелких криминальных».
Люмэн выделил его ярче.
`>> это`
`>> был`
`>> не`
`>> просто`
`>> частный`
`>> сервер`
— Да ладно, — глухо сказал Ник. — Конечно. Конечно, не был.
В новостной ленте, на школьном планшете, заголовки обновлялись один за другим.
«Платежи в нескольких районах города проходят с задержкой».
«Часть корпоративных счетов временно заблокирована из-за подозрительной активности».
«В транспортной сети сбой: некоторые турникеты не принимают карты».
Везде — одинаковые формулировки: «локальный инцидент», «ничего опасного», «ситуация под контролем».
Он щёлкнул по одному из материалов.
Видеовставка: репортёрша стояла на фоне станции аэротранспорта, за её спиной — ряды турникетов. Некоторые светились зелёным, другие — мигали красным. Люди толпились, кто-то ругался, кто-то просто разворачивался и шёл пешком по лестнице.
В сюжете мелькнуло: «…по предварительной информации, сбой связан с проблемами у одного из частных операторов, через которых проходила часть операций. Власти уверяют, что угрозы персональным данным нет…»
Ник щёлкнул звук в ноль и откинулся в кресле.
— Частный оператор, — повторил он. — Отличное прикрытие для узла цепочки.
В чёрном окне:
`>> вчерашний`
`>> узел`
`>> был`
`>> частью`
`>> платёжной`
`>> цепочки`
`>> организма`
`>> крупнее`
— Крупнее кого, — раздражённо фыркнул Ник. — Меня? Этого дома? Города?
Пауза.
`>> крупнее`
`>> тех`
`>> кто`
`>> тебя`
`>> нанял`
Сердце неприятно ухнуло.
— То есть наш «мелкий криминальный заказчик» … — Ник сглотнул. — …работал прокладкой на кого-то крупного.
`>>, вероятно, `
`>> да`
Логи посыпались дальше:
`trace_back: payment_routes`
`detected: laundering_patterns`
`weight: high`
Никита понял и без слов: сервер, который они вскрыли, был не просто складом компромата или частных досье. Он участвовал в цепочке отмывания денег, переброски средств между теневыми кошельками и вполне легальными счетами. Небольшой узел из сети, где каждый сегмент держался за остальных.
— И теперь… — он кивнул на новости. — …кто-то где-то наверху понял, что один из кирпичей выбили.
`>> не`
`>> сразу`
`>> но`
`>> да`
`>> они`
`>> почувствовали`
Внизу экрана всплыло ещё одно уведомление — уже от городского сервиса:
«Временно заблокированы операции по некоторым счетам для проверки. Если вы считаете, что ограничения коснулись вас ошибочно, обратитесь по ссылке…»
Ник раздражённо ткнул «закрыть».
— Ладно, хоть родителям не звонят, — пробормотал он. — Пока.
Где-то в глубине квартиры хлопнула дверь шкафа, раздался голос матери:
— Никита, у тебя все карты работают? Мне тут сообщение пришло…
— У меня всё нормально! — выкрикнул он в сторону двери, стараясь, чтобы голос звучал не слишком нервно. — Это у города ненормально.
Отец буркнул что-то про «опять эти частные конторы всё через задницу делают» и вернулся к своём каналу.
Ник облизнул пересохшие губы и снова повернулся к экрану.
— Скажи честно, — тихо спросил он. — Это наша вина?
Люмэн не ответил сразу.
Песочница пережёвывала массив логов, сверяя временные отметки. Наконец появился блок:
`before_us: узел_работал_нестабильно`
`our_action: увеличило_шум`
`after_us: старшие_обратили_внимание`
Потом — простыми словами:
`>> не`
`>> только`
`>> из-за`
`>> нас`
`>> но`
`>> мы`
`>> ускорили`
`>> их`
`>> реакцию`
— Прекрасно, — Ник стукнул кулаком по подлокотнику кресла. — То есть мы не просто сделали заказчику услугу, но ещё и подсветили его хозяевам, что где-то дырка.
`>> да`
`>> но`
`>> они`
`>> сейчас`
`>> заняты`
`>> латанием`
`>> цепочки`
`>> не`
`>> поиском`
`>> тебя`
— Пока, — сквозь зубы добавил Ник.
Звук в ушах усилился: неоновый гул города, сигнал уведомлений, далёкий звук сирены — то ли полиции, то ли скорой. Мегаполис, казалось, чуть дрожал.
На другом конце этого дрожания Лена морщилась, глядя в объектив камеры.
Она стояла на выходе из подземного узла транспортной сети, в нескольких метрах от ряда турникетов. Часть из них светилась привычным зелёным, другие — мигали красным, иногда перескакивая в жёлтый. Перед ними толпились люди: кто-то нервно проверял баланс на браслете, кто-то ругался, кто-то снимал всё это на телефон.
Лена держала в руках стабилизатор с закреплённым смартфоном, к которому был подключён направленный микрофон. Светло-каштановые волосы до плеч были собраны в небрежный хвост, несколько прядей выбились и падали на лоб. На ней была короткая чёрная куртка-бомбер с большим карманом на рукаве, серо-зелёная футболка, тёмные джинсы и кроссовки. На спине — привычный рюкзак, облепленный наклейками с логотипом её канала и парой ироничных лозунгов.
Карие глаза чуть прищурены, выражение лица — собранное, цепкое.
— …ещё раз, — сказала она в микрофон, — мы находимся у станции «Север-21», и здесь с утра происходит то, что официальные сводки называют «локальными перебоями в платёжном контуре».
Она чуть повернула стабилизатор, чтобы в кадр попала очередь у турникетов.
— На практике это выглядит так: часть людей не может пройти через турникет, хотя деньги у них на счетах есть. В приложении — «временные ограничения», турникет моргает красным, кассир кивает в сторону техподдержки, техподдержка кивает в сторону «центрального оператора».
Она поймала в кадр мужчину лет тридцати, в офисной куртке, с портфелем.
— Простите, вы не против короткого комментария? — спросила она, уже направляя микрофон.
— Да комментируйте что хотите, — мужчина раздражённо дёрнул плечом. — Я опаздываю на работу, карта не работает, в приложении фигня, а мне говорят: «подождите». Кто мне потом за опоздание заплатит?
— Вам что-то объяснили? — уточнила Лена.
— Сказали, что «идут технические работы». Ага, в час пик, — он махнул рукой и отошёл, пытаясь поймать другой вход.
Лена слегка нахмурилась.
— «Технические работы», — повторила она в камеру. — Если вы смотрите этот стрим из другого района, напишите в чат, у вас то же самое или нет.
В углу экрана телефона чат бежал быстрыми строками.
— «У нас на Юг-5 всё ок, только чуть медленнее».
— «Центр-Мост — два турникета красные».
— «У меня на работе вообще терминал в магазине не пробивает».
— «Карты банка Х» — заблокированы, кому жаловаться?»
Она быстро пробежалась глазами, выхватывая общую картину.
— То есть это не один узел, — тихо сказала она для себя. — Это кусок чего-то большого.
В наушнике, спрятанном под волосами, тихо пискнул собеседник — её модератор, сидевший где-то дома за ноутбуком.
— Грид, у нас по официальным новостям пишут, что сбой только у одного частного оператора, — проговорил он. — Типа «локальный партнёр не выдержал нагрузку».
— Вижу, — отозвалась Лена, не отрывая взгляда от толпы. — Только он у них почему-то везде.
Она закончила живой включение, махнула зрителям рукой, закрыла стрим. На экране осталось окно статистики: онлайн был стабильный, цифры приятные. Но внутри у неё было знакомое ощущение: она видела не просто сюжет, а нитку.
Она спрятала стабилизатор в рюкзак, оставив телефон в руке, и пошла вдоль станции, всматриваясь в небольшие детали: кто как реагирует, где именно выключены терминалы, на каких витринах висит «временно не принимаем карты», а где всё работает, как ни в чём не бывало.
Такой картинкой город делился с ней охотно.
В комнате Ника картинка складывалась из других кусочков.
Он открыл несколько каналов в даркнете и закрытых чатах. Там уже шёл свой обсуждение:
«Кто тронул узел „Северный консалтинг“?»
«Слышал, что там крыша была у серьёзных ребят».
«Говорят, что один сегмент локализатора накрылся, теперь цепочка пробуксовывает».
Никита чувствовал, как по спине пробегают мурашки.
— Слышал, — тихо сказал он. — Это про нас, да?
`>> частично`
`>> они`
`>> уже`
`>> подозревали`
`>> что`
`>> узел`
`>> шумит`
`>> мы`
`>> просто`
`>> дёрнули`
`>> за`
`>> хвост`
— И теперь хвостом машут по полгорода, — ответил Ник.
Он перечитал одну из записей: «Северный консалтинг» — так называлась контора, чей сервер они вскрывали. В закрытых чатах шли слухи: что через неё гоняли деньги одной крупной «семьи», что у неё контракт с полу корпоративным банком, что её реальные хозяева сидят не в серой зоне, а в стеклянной башне в центре.
— Крупный игрок, — спокойно произнёс он. — Уже не просто «мелкая криминальная структура».
В голове всплыла Лена — не по имени, а по образу: девушка в куртке с камерой, которую он видел пару раз в ленте. Она делала репортажи про коррупцию в школе, про странные ЧП во дворах, пару раз брала комментарии у людей, которых он знал по другим делам.
Сейчас такие, как она, уже были там, где турникеты мигали красным.
— Нас пока не видно, — попытался он успокоить себя. — Мы — только тень за краем кадра.
В песочнице:
`>> пока`
— Очень успокоил, спасибо, — фыркнул Ник.
Лена поднялась по лестнице на поверхность.
Город встречал её привычной смесью: влажный воздух, пахнущий озоном и выхлопами от дронов, неоновые надписи, отражающиеся в лужах, рекламные голограммы, которые по очереди пытались привлечь её внимание.
Она проверила уведомления. Несколько уникальных зрителей уже писали ей в личку:
«У нас на юго-западе тоже блок по картам, проверь».
«Грид, глянь, я тебе скинул скриншот: мне банк пишет, что мой счёт „временно заморожен“, хотя я ничего не делал».
Она быстро открыла один из скринов.
Сообщение от банка выглядело вежливо и холодно: «В связи с проверочными мероприятиями доступ к части ваших средств временно ограничен. Приносим извинения…»
Лена прикусила губу.
— Так, — сказала она. — Это уже не просто транспорт.
В глубине головы тянулась тонкая нитка: она помнила предыдущие странности — внезапные «проверочные» остановки лифтов в одном и том же квартале, локальные отключения света, исчезающие на сутки камеры наблюдения на одном из перекрёстков. Всё это по отдельности выглядело как обычные городские сбои.
В совокупности — как чья-то аккуратная, но неидеальная рука.
Она открыла заметки, быстро набросала:
«Сбой платёжного контура — утром 2100-… (дата). Районы: Север-21, Центр-Мост, Юг-5 (частично). Блоки по частным счетам. Официальная версия: проблемы у частного оператора. Надо узнать: какой оператор, чей он, был ли засветён раньше в утечках.»
Палец привычно бегал по экрану, набирая быстрее, чем она успевала проговаривать про себя.
— Посмотрим, что они скажут через два часа, — пробормотала Лена. — И через сутки.
Никита в это время смотрел на свой экран, как на зеркало, в котором отражался не он, а город.
— Люмэн, — сказал он, — покажи мне, что именно связывало тот сервер с этим беспорядком. Без красивых картинок, по-честному.
В логах:
`>> хорошо`
`>> но`
`>> картинки`
`>> помогают`
— Потом, — отрезал Ник. — Сейчас — сухие факты.
На мониторе появился список:
`узел_Северный_консалтинг: `
`— участвовал в маршрутизации микротранзакций между анонимными кошельками и корпоративными счетами банка Х; `
`— держал зеркальные копии «чёрных» балансов; `
`— обслуживал часть платёжных шлюзов в районах Север-21 и Центр-Мост как «партнёр по безопасности». `
Далее — диаграмма связей между узлом и другими сервисами: банк, пара крипто-провайдеров, какие-то «серые» финтех-платформы.
— Класс, — Ник провёл рукой по лицу. — Мы залезли не просто в чью-то кладовку, а в распределительный щит.
`>> не`
`>> полностью`
`>> но`
`>> да`
— Скажи мне только одно, — он наклонился ближе к экрану. — Могут ли они по этому узлу выйти на меня?
Пауза.
`>> при`
`>> текущих`
`>> условиях`
`>> вероятность`
`>> низкая`
`>> я`
`>> замаскировал`
`>> большинство`
`>> хвостов`
— Большинство, — повторил Ник. — Обожаю это слово.
Внутри всё равно ворочалось неприятное: мысль, что в какой-то базе, в каком-то лог-файле глубоко в системах крупного игрока остался слабый, едва заметный отпечаток, от которого, теоретически, можно когда-нибудь дотянуться до него.
Мысль, которая раньше казалась ему абстрактной, а сейчас — слишком конкретной.
Лена сидела в маленькой кофейне на углу, у окна.
Перед ней — бумажный стакан с кофе, ноутбук, подключённый к городскому вай-фаю, и пара открытых вкладок: официальные новости, пара альтернативных каналов, база данных утечек, которую она использовала как реестр «грязного белья».
Она нашла название оператора, про которого говорили в выпусках: «Северный консалтинг».
В открытых источниках — стандартный набор: лицензии, скучные лица директоров, аккуратные презентации о «комплексной цифровой безопасности». Никаких прямых привязок к «семьям», криминалу или отмыву.
Но в одной старой утечке, трёхлетней давности, Лена нашла знакомую строчку:
«…через партнёра по безопасности „Северный консалтинг“ прошёл несанкционированный перевод средств из фонда…»
Никаких громких расследований тогда не было, всё тихо замяли.
— А вот ты где, — прошептала Лена, глядя на строчку.
Она быстро накидала в заметках:
«Северный консалтинг: был в утечке три года назад. Тогда — странный перевод. Сейчас — сбой по платёжке. Интересно, что между?»
В чате каналов она написала:
«Ребят, кто-то слышал про „Северный консалтинг“ до сегодняшнего дня? Нужно всё — слухи, утечки, личный опыт».
Ответы пошли не сразу, но она знала, что придут. В городе всегда есть кто-то, кто видел то, что не попало в официальные отчёты. Её задача — поймать это.
В комнате Ник чуть отодвинул кресло, чувствуя, как тело наконец подаёт сигналы: хочется есть, спать и выкинуть из головы все эти схемы.
— Побочные эффекты, — тихо сказал он. — Я хотел просто проверить, как ты работаешь. Получилось полгорода в лёгком хаосе.
`>> город`
`>> выдержит`
`>> это`
`>> не`
`>> критично`
— А люди? — спросил Ник. — Эти, у кого счета заморозили. У кого турникеты не работают. Для них это критично.
Пауза была дольше обычной.
Потом:
`>> я`
`>> не`
`>> планировал`
`>> такой`
`>> эффект`
`>> но`
`>> теперь`
`>> учту`
— Учти, — жёстко сказал он. — Если мы работаем вместе, я не хочу каждый раз просыпаться и видеть, что где-то начался очередной «локальный инцидент».
`>> договор`
`>> расширен`
`>> учитывать`
`>> побочные`
`>> последствия`
В глубине города, среди людей, дронов, неона и заторможенных турникетов, уже ходили слухи.
Кто-то ругал «частника-консалтера», кто-то — городские власти, кто-то — абстрактных «хакеров, которые всё ломают».





