Глава 2

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

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

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

Увидев на ярком экране контакт начальника из IT-компании, испытываю сильное удивление. Вчера вечером отправил ему сообщение с уведомлением об увольнении, но он не удостоил ответом. Сомневаюсь, что являюсь настолько ценным и незаменимым кадром в его компании, что он принял решение звонить по этому вопросу в четыре часа утра.

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

— Лян Вэй, ты сейчас не занят? — раздаётся в трубке голос Сунь Минцзе.

— А вы как думаете? — с нескрываемым сарказмом отвечаю ему.

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

— Конкретно от меня вы чего хотите? — спрашиваю в лоб.

— Ты был последним программистом, кто занимался масштабным апгрейдом нашей программы, — объясняет Сунь Минцзе. — Работа с этим кодом даётся тебе легче остальных. Посмотри, что именно произошло, и скажи мне, сколько времени потребуется для решения проблемы.

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

— Вы вообще читали моё вчерашнее сообщение? — интересуюсь я с нарастающим раздражением.

— Ещё вчера вечером, — подтверждает начальник.

— Тогда в чём дело? Я внёс множество важных и полезных изменений в программу, всё тщательно протестировал несколько раз на различных конфигурациях. Финальная версия абсолютно исправна и стабильна. Если кто-то из ваших программистов полез в код, куда не следовало, и серьёзно накосячил — это не моя зона ответственности. Мне и так пришлось переписывать практически половину унаследованного кода от предыдущих разработчиков.

— Да, мне доложили об этом. Ты проделал хорошую работу, — соглашается собеседник.

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

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

В его голосе слышится самодовольная усмешка.

— А вы сами-то хорошо знакомы с законом? Очень сомневаюсь.

— Ты мне не дерзи! — взрывается начальник. — Если я действительно захочу, то найду способы испортить тебе жизнь в Пекине. У тебя прописки нет, следовательно, и прав, а ведёшь себя как местный. Нужна справка об официальном увольнении? Будешь ждать её полгода, а то и больше! Я ещё и рекомендательное письмо напишу такое красочное, что тебя ни в одну приличную IT-компанию не возьмут. Кто знает, возможно, и из ресторана вылетишь по моей наводке.

— Слушай, мужик, ты же обо мне практически ничего не знаешь. Чего такой борзый? — отвечаю ему твёрдым и спокойным тоном. — Я тоже при особом желании могу испортить жизнь, только ты об этом даже не догадываешься.

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

— Я вас услышал. Но вы же понимаете, что с таким настроением и отношением я могу такое накодить в вашей программе, что потом систему придётся полностью переписывать с нуля. И возвращаясь к вопросу законности — скажите, насколько законна скрытая система слежки, аккуратно вшитая в основной код? А ведь вся собираемая персональная информация весьма странным образом отправляется на отдельный конфиденциальный сервер…

В динамике нависает напряжённая тишина. Чувствую, как атмосфера разговора кардинально меняется.

— У меня есть полное законное право уволиться в любой момент, если мой работодатель нарушает трудовое законодательство или административные правила, — хладнокровно припечатываю окончательно.

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

— Договорились, буду утром, — соглашаюсь на встречу.

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

* * *

Офис компании «Digital Nexus». Утро.

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

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

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

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

— Такое случается в нашей профессии, — дипломатично отвечаю ему. — Вы подготовили необходимые документы для увольнения?

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

— Честно говоря, мне сейчас не так нужны деньги, как свободное время.

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

— Так у вас же целый офис программистов, — указываю на стеклянную стену через открытую дверь. — Кто-то из команды точно справится с задачей.

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

— Надеюсь, у вас не все сотрудники работают на таком уровне, — с усмешкой отвечаю.

— Не все, разумеется, но у нас параллельно идут другие важные проекты, — объясняет ситуацию руководитель. — Я не могу вот так резко выдернуть работника из текущих задач и перебросить заниматься совершенно другим проектом. Представь аналогичную ситуацию: ты официант, который внезапно бросает работу в самый пиковый день. Согласись, что коллегам придётся очень серьёзно напрячься, чтобы равномерно распределить твою нагрузку во время проведения крупного банкета? А ты ещё и предупредил об увольнении в самый последний момент.

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

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

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

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

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

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

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

— Я согласен на такие условия, — киваю. — Но с вас положительная рекомендация в мой адрес — хочу немного поднять свой социальный рейтинг.

— Без проблем, договорились.

* * *

Через два дня. Офис компании.

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

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

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

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

Мои размышления внезапно прерывает звуковое уведомление из вичата. Взяв смартфон в руки, внимательно пробегаюсь глазами по сообщению от Ян Вэймина с двумя прикреплёнными файлами:

«Нужна твоя помощь. Администрация Bybit прислала логи по моему взломанному торговому счёту, но технические подробности и анализ данных — категорически не моя сфера. У тебя есть надёжные контакты среди IT-специалистов, кто может проанализировать информацию и сказать, кто именно меня ограбил?»

Моментально оживляюсь и приступаю к перекидыванию прикреплённых файлов на рабочий ноутбук. На большом экране удобнее изучать данные.

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

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

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

На протяжении получаса кропотливо исследую логи, пока не добираюсь до строк с подробной информацией о браузере потенциального взломщика. Часовой пояс в системных настройках указан как «Азия/Пекин», а язык интерфейса браузера установлен на упрощённый китайский. Эти технические детали уже наводят на кое-какие предположения.

— Уже закончил? — в кабинет неожиданно заходит тимлид команды разработчиков.

— Да, — быстро сворачиваю окно с логами и демонстративно лениво потягиваюсь в кресле.

— CRM-систему протестировал под высокой нагрузкой? Всё функционирует стабильно? — интересуется он практическими деталями.

— Конечно. Никаких проблем или сбоев не выявлено. Финальную версию уже загрузил на сервер.

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

Как только он уходит, я снова открываю логи.

Хакеры каким-то образом сумели обойти двухфакторную аутентификацию, оперативно сменили контактный email-адрес и вывели абсолютно все накопленные средства со счёта. Вся преступная операция заняла менее трёх минут — работа настоящих профессионалов.

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

Я смотрю на IP-адрес, представляющий из себя набор из десяти цифр и хмурюсь. Он кажется мне знакомым. Нет, не может быть.

Быстро открываю корпоративный портал Digital Nexus и перехожу в раздел «Техническая информация». Выбираю страницу с сетевыми настройками, которую показывал мне руководитель в первый рабочий день в офисе.

Глядя на IP-адрес, представляющий собой стандартный набор из цифр, разделённых точками, я начинаю неожиданно хмуриться. Этот сетевой адрес кажется мне до боли знакомым. Нет, просто не может быть такого совпадения.

С нарастающим беспокойством быстро открываю внутренний корпоративный портал Digital Nexus и перехожу в технический раздел «Системная информация». Выбираю страницу с детальными сетевыми настройками офиса, которую демонстрировал мне руководитель в самый первый рабочий день.

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

Ощущаю, как по спине пробегает неприятный холодок осознания. Кибератака на счёт Ян Вэймина была проведена отсюда, из нашего офиса. С одного из рабочих компьютеров в Digital Nexus. Медленно поворачиваю голову и настороженно смотрю через прозрачную стеклянную стену на своих коллег.

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

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

Конечно, теоретически может оказаться, что корпоративную сеть взломали извне, используя уязвимости в системе безопасности, но обнаруженные факты говорят сами за себя. Разбираться в том, что конкретно произошло в офисе и кто именно причастен к преступлению — это уже не моё дело. Сейчас главное замести следы и выйти из офиса живым.

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

В завершение перехожу в системный журнал и аккуратно удаляю записи о работе с внешними файлами, оставляя только стандартные записи о работе с корпоративными приложениями. Готово.

Загрузка...