Перейти к содержанию

- 3 -

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

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

К тому моменту, как Макс позвонил в дверь, у меня уже был готов список из пары десятков вопросов.

Макс прямо с порога начал кричать:

— Видел, да?
— Ты о чем?
— Да наши только что ушатали итальянцев, 2-1! Мы в качалке смотрели, так один мужик на себя штангу чуть не уронил, когда Джера за полторы минуты до конца забил гол!
— Вот же блин, забыл совсем про хоккей!
— Да ты что, у нас третья победа подряд, а ты какой-то фигней занимаешься. Кстати, я тебе кинул письмом кусок лога, зашифрованный — Макс протянул мне стикер с длинной последовательностью букв и цифр .
— Ага, ща гляну. Где холодильник — знаешь, все, что там найдешь, можешь брать.
— Это ты не подумав сказал. Сильно рискуешь.
— Ну ты же оставишь мне пару бутылочек?
— Это как пойдет, ничего не обещаю.

Я ввел в архиватор пароль и пошел на кухню, где Макс, нашедший кусок пармезана, руками ломал его и клал на тарелку.

— Слушай, в этом доме есть нож, и даже не один. Да и руки не мешало бы помыть сначала!
— Какой же ты зануда! Вот поэтому у тебя с женщинами так. Кстати, — Макс повернулся и пристально посмотрел на меня, — ты ведь из-за Даши в эту историю впрягся? Это она тебя попросила своего брата вытащить? Надеешься все отыграть назад?
— Да, Даша попросила. Может, и надеюсь, хотя и не уверен, что хочу этого.
— Ага, мне не рассказывай! Еще как надеешься. Вот только зря. Блин, ты здоровый 35-летний мужик, не слишком тупой, мяса бы нарастить, и вообще полный порядок. Найди себе новую девицу и не парься вообще! Не нужна тебе Даша! Использует она тебя, неужели не понимаешь?
— Слушай, давай я сам буду решать. И у нас с тобой разный подход к женщинам.

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

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

Макс довольно улыбался.

— Ты алкоголь потому и не держишь, что мяса в тебе нет ни фига!
— Зато на необитаемом острове меня съедят последним, а мясного тебя — первым!
— И кто же это, интересно, будет меня есть на острове, если он необитаем? Ты, что ли?
— Нет, конечно, аборигены.
— Тогда это уже не необитаемый остров. В любом случае первым съедят того, кто хуже отбивается, и это точно буду не я, не сомневайся.
— Ладно, давай вернемся с острова на материк. Ты мне вот что скажи — почему платеж не отозвали сразу, как обнаружили?
— Да понимаешь, платеж сделали четвертого(1), у нас же это был праздник, а у нашего банка-корреспондента — нет, они платеж приняли и сразу обработали. Конечно, мы бы это заметили на следующий день и отозвали платеж — зачисление на счет обычно с задержкой происходит, но мы ведь и пятого отдыхали, в отличие от остального мира. А в понедельник, то есть вчера, уже было поздно — послали отзыв, конечно, но получили отказ, наверно, деньги из банка-получателя уже куда-то успели перекинуть, ну или просто этот оффшорный банк не захотел нам помогать. Короче, очень грамотно все просчитано, момент выбран идеально. Ладно, пойдем лог покажу.

  1. 4 мая — день восстановления независимости, национальный праздник и выходной в Латвии. В 2017 году 4 мая был четверг, поэтому перенесли выходной с субботы, 13 мая, на пятницу, 5 мая, таким образом 4–7 мая были выходные.

Файл уже скопировался, и я открыл его.

— Ищи время 2:47, там мало активности в этот момент.

Я увидел такие записи в логе:

20180504:024709.208:I:Message CRD0094775082 from CARD placed into queue BACKOFFICE
20180504:024709.223:I:Queue INTERNET disconnected from queue TO_CHECK, user asabitov
20180504:024709.225:I:Queue INTERNET connected to queue PROCESS, user asabitov
20180504:024711.408:I:Message IBK0002789415 from IBANK placed into queue INTERNET
20180504:024711.415:I:Message IBK0002789415 forwarded to queue PROCESS
20180504:024712.087:I:Message PAY0835820261 from PAYM placed into queue BACKOFFICE
20180504:024712.742:I:Message PAY0835820262 from PAYM placed into queue SWIFT
20180504:024739.226:I:Queue INTERNET disconnected from queue PROCESS, user asabitov
20180504:024739.227:I:Queue INTERNET connected to queue TO_CHECK, user asabitov

— Смотри, что мы тут видим — пользователь asabitov, то есть Леха, переключил все сообщения, которые должны валиться в очередь INTERNET, то есть входящие платежи из интернета напрямую в очередь PROCESS. В нормальной ситуации система контроля выбирает платежи из INTERNET, делает все проверки — лимиты, остатки, AML и прочее, и если что-то не нравится, то отправляет в очередь на ручную обработку, ну или сразу в отказ, а если все в порядке, то перекладывает платеж в PROCESS, откуда его забирает платежная система, и она уже кидает проводки в банковскую систему и отправляет платеж в SWIFT. А тут платеж из INTERNET сразу пошел в PROCESS, в обход всех проверок. А потом этот же пользователь все вернул как было.
— И как, выглядит все чисто?
— Ну я не копаюсь в этих логах целыми днями, но вроде выглядит все вполне естественно.
— Что сразу удивляет — время, точнее, промежутки. Смотри, после переключения очередей до транзакции из интернета прошло чуть больше двух секунд.
— Да, и при этом учти, что она немало времени проводит в самом интернет-банке — как минимум проверка прав пользователя, проверка подписи, до секунды может занимать, так что транзакцию сделали почти моментально.
— Стало быть, если работал один человек, то он должен был это делать сразу, а если двое, то они должны были быть хорошо синхронизированы.
— Ну, никто не мешал Лехе или кому-то другому, кто менял конфигурацию очередей, тут же с телефона подтвердить транзакцию.
— Согласен. Хорошо бы глянуть на IP-адрес клиента, и с какого браузера делали платеж.

Я добавил еще пару пунктов в свой список вопросов, а Макс стал намеренно громко пить пиво, дразня меня. Но я не поддался

— А вот смотри, что еще интересно, — сказал я, снова посмотрев в лог. — Между отключением очереди и подключением ее к другому процессу одна миллисекунда, это же не руками сделано, явно скрипт какой-то!
— Да, это мы видели, но у нас есть команда, которая оба действия делает одним махом, так что это вполне могло быть и руками.
— Ладно, а то, что с момента изменения рутинга до момента его восстановления прошло практически ровно тридцать секунд, тоже объяснимо?
— Блин, точно! — Макс щелкнул пальцами. — А я не заметил! Это действительно интересно!
— То есть почти наверняка это меняли не руками, а каким-то скриптом, или это вообще вирус, который напрямую вызывает нужные функции.

Макс завис, держа в руке вилку с наколотым куском сыра.

— Ты чего?
— Знаешь, ты сейчас сказал про скрипт и функции, и я понял одну вещь — есть функция управления очередями, которой можно указать пользователя, от чьего имени делается изменение. В системе настройки очередей пользователя задать нельзя, как залогинился, такой и есть, а вот через функцию — вполне. Предполагается, что пользователя проверяет тот, кто вызывает эту функцию, — отвис Макс.
— О! Мне кажется, или это уже реальная возможность объяснить случившееся без Лехиного участия? Я ни разу не юрист, но похоже, что только что главная улика перестала быть неопровержимой. Как там это называют в юридических сериалах — «обоснованное сомнение»? Например, это мог быть хитрый вирус, заточенный конкретно на вас.
— У нас этот вирус не попал бы на рабочую систему, они изолирована.
— А как туда попадают изменения самой платежной системы?
— Весь процесс полностью автоматизирован, никак не влезть.
— Ладно, если в процесс нельзя вмешаться, может, на самом сервере можно что-то сделать?
— Там нет среды разработки никакой, и поставить ничего нельзя — он изолирован, я же говорю тебе. И флешку не воткнешь, чтобы что-то проинсталлировать.
— А если закладка в софте? Добавить замаскированное изменение прямо в код?
— Ну это очень непросто, я тебе скажу. Весь код проходит через инспекцию, и у нас всегда минимум два человека инспектируют, засекли бы.
— А если сговор?
— Три человека? Высокий риск. К тому же всегда есть вероятность, что код посмотрит кто-то еще.
— Да, тут, пожалуй, надо очень хорошо маскировать изменения, без исходников можно только гадать.

Я сделал паузу, почесал щетину и вкрадчиво спросил:

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

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

— Даже если на секунду предположить, что ты говоришь правду, это ничего не меняет. Потому что я — не ты. Ты вообще представляешь, что мне за это может быть, даже если забить на этическую сторону?
— Никто не узнает. Я даже копировать никуда не буду, все так на флешке и останется. Только нужны исходники с полной историей.
— У нас флешки нельзя втыкать, безопасность.
— Тогда ведь можно через облако перекинуть. Dropbox, Google Drive.
— У нас это все закрыто.
— Ну что-то ведь открыто?

Макс почесал затылок.

— Amazon S3 должен быть открыт, мы его иногда используем для обмена файлами с поставщиками.
— Хорошо, давай через S3 тогда.
— Так, ты куда разогнался? Я же сказал тебе, что не пойду на это, забудь. Меня прям бесит, что ты вообще такое у меня спрашиваешь! Для таких, как ты, есть специальный ад, где не дают пароль от Wi-Fi! — А смысл в этом Wi-Fi? Котел металлический, считай, ты внутри клетки Фарадея, никакой радиосигнал не проникает.
— Мне кажется, тебе стоит показаться эндокринологу, у тебя занудная железа слишком хорошо работает. А какая железа у тебя отвечает за принуждение друзей к должностным преступлениям, я даже и представить не могу.
— Ладно, извини. Слабо представляю, что тут можно сделать без исходников. Хотя бы на вопросы сможешь ответить?
— Какие?
— Я вот тут список накидал, давай по порядку.

Макс стал читать список, нос его гневно раздувался. Я подозревал, что моя просьба ему не понравится, но как-то он уж слишком разозлился.

— Про клиента ничего тебе ответить не могу, не знаю, и это секрет, но скорее секрет Полишинеля, в банке куча народу знает, так что если прям нужно, могу выяснить. Про платежную систему — удаленно нельзя подключиться, как я сказал, она изолирована. Поэтому у нас всегда есть дежурный админ на месте — это дорого, но мы идем на это. Настройки очередей может поменять только залогиненный пользователь, или, как я говорил, через внутренние функции, но это только локально, с самого сервера. Доступ — обычно дежурный админ один, только он имеет физический доступ к системе, она в отдельной сети. Был ли кто-то еще в банке, у кого есть право доступа — не знаю, очень сомневаюсь. Вся информация по пропускам и их использованию только у СБ. Теоретически это все должно журналироваться — если кто-то был, может, он еще куда-то логинился, но это тоже все у безопасников, мне туда хода нет. Несанкционированно использовать Лехину чип-карту очень сложно, скопировать ее вроде как нельзя.
— Почему нельзя?
— У нас какая-то продвинутая система от того же поставщика, который в ФБР поставляет.
— От того же поставщика — не значит, что такая же система, но уровень вашей паранойи заслуживает уважения.
— Мне казалось, что я тебе говорил, что я в банке работаю.
— Да, говорил вроде что-то такое.
— По поводу интернет-банка — тут я, наверно, смогу что-то достать, эти логи пока доступны, они в архив уходят через неделю, завтра еще будут. Что еще? Только не говори опять про исходники!
— Да что ты так разнервничался? Возьми лучше еще пива, а то уже пустая бутылка.
— А я думал, что я в гостях.
— У тебя неожиданный приступ деликатности? Или тебе нарисовать карту до холодильника?
— Хочется почувствовать себя гостем, знаешь ли.
— Ладно, фиг с тобой, сейчас.
— Захвати оливки, я там видел в холодильнике.
— Гости так себя ведут, по-твоему?
— Не занудствуй, тащи пиво!
— Будешь возникать, выберу тебе самую теплую бутылку!
— Все-все, молчу.

Когда я вернулся с пивом, оливками и остатками сыра, Макс заканчивал разговор по телефону, похоже, со своей пассией.

— Извини, мне уже надо бежать.
— Ну и на фига я пиво открывал?
— Сам выпей. Тем более что я за рулем, вторую бутылку мне не стоит пить.
— Не, я сегодня пропускаю. А что у тебя такое случилось? Мамзель мерзнет в постели?
— Да, брат, дело такое, на самотек пускать нельзя. Там такая тян… — Макс аж причмокнул.
— Сколько ей годов-то?
— Двадцать три.
— Ёкарный бабай, ты серьезно? О чем ты с ней разговариваешь?
— А с ней не надо разговаривать.
— А после секса?
— У нас обычно не так уж много времени после секса — ей с утра в универ, мне на работу.
— Высокие отношения!
— Ну, знаешь, не все такие романтики, как ты. Нас очень даже устраивает. Все, я почесал. Пока!