Альтер М. – Аккаунт удален (страница 2)
Максим прогнал журнал до самого конца. Записей после четвертого марта не было. Все чисто. Но система все равно блокировала аккаунт. Он проверил другие профили, связанные с этим номером телефона или адресом электронной почты. Нашелся один дополнительный профиль — технический, созданный автоматически для интеграции с другим сервисом. Он был пуст и не мог быть причиной блокировки. Максим ввел еще одну команду, проверяющую целостность данных профиля. Сканирование шло медленно. Проценты бежали неторопливо, словно капли смолы. Наконец, результат: «Нарушений целостности не обнаружено. Файлы не повреждены. Проверка заняла двенадцать минут сорок одну секунду».
Что за чертовщина?
Он снова попытался удалить аккаунт. На этот раз через другую панель управления, используя более низкий уровень доступа к файловой системе. Он не хотел этого делать, потому что такие операции были рискованны и могли привести к сбоям, но другого выхода он не видел.
«Ошибка выполнения операции. Код ошибки: 745. Невозможно удалить объект. Объект используется другим процессом».
Максим громко выругался, но коллеги не обернулись. Он встал из-за стола и прошелся по серверной. Холодный воздух приятно обжигал разгоряченное лицо. Он подошел к окну, но за ним была только кирпичная стена соседнего здания, покрытая грязными разводами от дождя. Тоска. Он достал из кармана пачку сигарет, но вспомнил, что курить можно только в специально отведенном месте на улице. Спускаться вниз не хотелось. Он просто покрутил пачку в руках и убрал обратно. Ошибка семьсот сорок пять не была мистикой. Это был технический сбой. В его практике бывали случаи и посерьезнее. Просто нужно было найти причину. Возможно, какой-то зависший процесс в системе управления очередями.
Максим вернулся к компьютеру и открыл мониторинг всех активных задач. Среди сотен процессов, выполнявшихся в данный момент, он искал что-то, что могло быть связано с профилем Громова. Нужный идентификатор не находился ни в одном списке. Тогда он решил расширить поиск и проверить журналы системных ошибок за последние несколько лет. Он ввел команду поиска по ключевому слову «Громов» и идентификатору. Результаты были ошеломляющими. Список ошибок, связанных с этим аккаунтом, был огромен. Они появлялись с пугающей регулярностью, начиная с пятого марта две тысячи девятнадцатого года.
Сначала ошибки возникали каждые несколько часов. Потом — каждый день. Потом — каждые несколько дней. Постепенно интенсивность снижалась, но ошибки не прекращались полностью. Последняя из них была зафиксирована три дня назад. Максим похолодел. Что же пыталась сделать система? И почему все операции с этим аккаунтом заканчивались ошибкой семьсот сорок пять? Он открыл одну из самых ранних записей. Она была датирована пятым марта две тысячи девятнадцатого года, три часа семнадцать минут ночи. Всего через три часа после смерти Громова. Ошибка семьсот сорок пять. Объект используется другим процессом. Он открыл следующую запись. Та же ошибка. Следующую. И следующую. Система пыталась удалить аккаунт автоматически? Или кто-то другой пытался это сделать?
Максим почувствовал, как по спине пробежал неприятный холодок, не имеющий отношения к температуре в серверной. Он открыл более подробную информацию об одной из ошибок. В логе было указано, какая служба инициировала попытку удаления. Им значился «внешний процесс с неопределенным идентификатором». Это было абсолютно невозможно. Все процессы в «ГлобалКоннект» были стандартизированы и имели уникальные идентификаторы. Внешний процесс с неопределенным идентификатором мог означать только одно: что-то за пределами системы пыталось управлять аккаунтом. Или внутри системы жил какой-то вирус, глубоко законспирированный и целенаправленно атакующий именно этот профиль.
Но зачем вирусу блокировать удаление мертвого аккаунта? Это не имело никакого смысла. Максим проверил, не было ли попыток входа в аккаунт за последние годы. Официальный журнал был чист. Но неофициальный, тот, что хранился в бинарных логах серверов, мог рассказать больше. У Максима был доступ к этим данным, но он редко им пользовался. Эти логи были неудобными, неструктурированными, требовали специального программного обеспечения для расшифровки. Он запустил анализ бинарных логов для профиля Громова за последние пять лет. Процесс должен был занять около часа.
Время тянулось мучительно. Максим гипнотизировал полосу прогресса, чувствуя, как внутри нарастает странное напряжение. Это была не просто производственная загадка. Что-то в этом всем было неправильно. Аккаунт, который сопротивляется удалению, как живой организм, борющийся за свою жизнь. Он вспомнил лицо Алексея на аватарке. Прямой, спокойный взгляд. Словно он смотрел на Максима с того света, не осуждая, но и не собираясь уходить.
Наконец, анализ был завершен. Максим открыл отчет и впился глазами в строки. Логи показывали попытки входа в аккаунт. Нет, не попытки. Успешные входы. Сессии. Начиная с пятого марта две тысячи девятнадцатого года. Короткие, от нескольких секунд до двух-трех минут. Они повторялись снова и снова. Сначала часто, потом все реже и реже. Последняя сессия была зафиксирована две недели назад. Источник входа не определялся. Ай-пи-адрес отсутствовал. Геолокация не определялась. Пользователь просто появлялся в системе и исчезал. Или что-то появлялось от его имени.
Максим откинулся на спинку кресла. Пот на его лбу был холодным и липким. Он проверил, что эти сессии делали в системе. Отчет показывал, что они обращались к фотографиям, к сообщениям, к списку друзей. Просматривали их. Читали. Изучали. Или, возможно, просто наслаждались. Он вспомнил, как сам заходил в социальные сети, чтобы перечитать старые переписки. Словно хотел вернуться в прошлое. Но кто заходил в аккаунт мертвого Алексея?
Он открыл внутренний чат отдела технической поддержки и написал коллеге, сидящему через два стола, Сергею.
«Слушай, Серег. У меня тут висяк с семисот сорок пятой ошибкой на одном профиле. Пять лет не может удалиться. Кто-нибудь еще пытался с ним что-то сделать?»
Сергей ответил не сразу. Максим видел, как он печатает.
«Понятия не имею. Пятый год говоришь? Может, база данных сама накрылась? Попробуй пересоздать индекс и удалить через бинарную консоль».
Максим покачал головой. Он уже пробовал. Он ответил:
«Не помогает. Ошибка на уровне ядра. Объект используется другим процессом. Как будто он в оперативной памяти, но его там нет».
Сергей ответил смайликом, означающим недоумение.
«Слушай, брось ты это дело. Поставь статус «Отказ по техническим причинам» и передай в третий уровень. Пусть эскалацию делают, если это так важно».
Это было разумное предложение. Максим мог так и поступить. Отправить заявку наверх, забыть и пойти домой. Но что-то не давало ему этого сделать. Любопытство. Профессиональное любопытство. Он хотел разгадать эту загадку. Или, может быть, это было что-то другое. Смутное чувство, что за этим сбоем кроется нечто большее, чем просто техническая проблема. Он вспомнил слова из подписи к фотографии заката: «Иногда кажется, что самое главное — это уметь остановиться и просто смотреть. Завтра будет новый день. Спасибо, что были со мной». Словно прощание. Словно Алексей знал, что уходит.
Максим вернулся к отчету. Он открыл подробную информацию о последней сессии. Внутри нее были записи о том, какие страницы просматривались. Это были старые фотографии. Аватарки. Сохраненные изображения. И одна странная запись: «Попытка ввода команды в командную строку внутреннего интерфейса». Кто бы ни входил в аккаунт две недели назад, он пытался не просто смотреть. Он пытался что-то сделать. Какую команду он вводил? В логе не было ее содержания, только сам факт попытки. Максим попытался восстановить полный дамп сессии, но данные были повреждены или намеренно стерты.
Он начал методично перебирать все сессии за пять лет. В каждой из них была одна и та же активность: просмотр профилей, фотографий, сообщений. Но чем дальше он углублялся в историю, тем более странной становилась картина. В ранних сессиях, сразу после смерти, активность была сосредоточена на списке друзей. Алексей, или тот, кто управлял его аккаунтом, просматривал страницы своих друзей. Затем читал их переписки. Затем… отправил несколько сообщений. Но они не были зафиксированы в обычном журнале. Максим увидел только служебные записи о том, что исходящие пакеты данных были отправлены, но их содержимое и получатели были скрыты.
Он почувствовал приступ тошноты. Что, черт возьми, происходит? Он закрыл отчет и откинулся в кресле. Ошибка семьсот сорок пять, мертвый пользователь, таинственные сессии. Все это складывалось в какую-то дикую, нелогичную картину. Может быть, это была тщательно спланированная операция по взлому аккаунта? Кто-то получил доступ к данным мертвеца и использовал их в своих целях. Шантаж? Мошенничество? Но зачем тогда блокировать удаление профиля? Проще было бы скачать все данные и дать системе стереть его. Блокировка только привлекала лишнее внимание.
Максим запустил антивирусное сканирование на самом аккаунте. Он проверил все файлы, все записи, все связанные объекты. Сканирование шло медленно. Он смотрел на экран, не отрываясь. Наконец, результат: «Угроз не обнаружено». Все чисто. Но тогда что же это?