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

- 11 -

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

Работник СБ встретил нас на проходной. Он взял наши документы, бумагу из полиции, объясняющую мое участие в качестве эксперта, внимательно все это изучил и куда-то ушел, попросив нас немного подождать. Меня опять разлучили с моим документом, который я только вызволил из лап полиции. Но через пару минут он вернулся, отдал нам документы и повел через проходную. Мы поднялись на какой-то высокий этаж, через стеклянную стену лифта было хорошо видно хоккейную арену, окрестности и большую тучу, ползущую со стороны залива. Безопасник завел нас в комнату, где сидело человек пятнадцать. Даже если бы я не знал, куда нас привели, то сразу бы понял, что попал к разработчикам — на двух досках, развешенных по стенам, были нарисованы схемы, похожие на потоки данных, а в углу было что-то очень похожее на Канбан-доску, на которую записывают текущие и планируемые задачи, с разноцветными бумажками в нескольких столбцах. И поскольку разработчики сталкивались с клиентами только как с записями в базах данных, либеральное руководство не требовало от них соблюдения дресс-кода, так что одевались они кто во что горазд. Подозреваю, что пиджак тут носит только Макс, но сейчас его не было. А, ну еще Горелов, я же видел его на днях в костюме, но его можно уже не считать.

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

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

Что я хочу найти в компьютере Горелова? Нужно что-то, что выведет на предполагаемого подельника. Хорошо бы найти имейлы. Вряд ли Горелов был настолько неосторожен, что использовал рабочую почту, но проверить стоило все равно. Как и ожидалось, там не оказалось ничего подозрительного. Я посмотрел, какие приложения установлены, нашел Skype, пролистал переписки за последние пару месяцев — практически пусто, судя по всему, Горелов использовал Skype только для общения с какими-то американскими родственниками. Проверил историю браузера за этот же период — нет обращений к сторонним почтовым ящикам. Или Горелов не читал почту через браузер, или он это делал в режиме «инкогнито». Похоже, тупик.

Тогда я решил посмотреть исходники. Я знал, что там увижу, но не хотел сдаваться так быстро. Я открыл файл, в котором, как я помнил, были злонамеренные изменения и… не нашел их. Я проверил другой файл — и там их нет. Как такое может быть? Я спросил у Ивара, что он про это думает — он был удивлен не меньше моего. Краем глаза я заметил, что сидевший через стол от нас парень, один из тех, кто был в наушниках, а потом «пошел за кофе», уже без наушников, как будто он забыл их надеть по возвращении, и, как мне показалось, прислушивается. Возможно, на тайной сходке на кухне ему было поручено шпионить. Я решил говорить тише — скрывать мне нечего, но сам факт, что кто-то подслушивает, раздражал. Я оглянулся, чтобы понять, кто еще может быть в зоне слышимости, и увидел симпатичную девушку — странно, что я ее не заметил сразу, такую ярко-рыжую. Я не мог не заметить, что на девушке была черная майка Led Zeppelin. Думаю, с ней я бы нашел общие темы для разговора. Но я тут не за этим.

Я сделал поиск по всем исходникам — где-то ведь должен быть вызов dlsym, это я помнил точно. Ничего. Это какая-то мистика, а мистики не бывает, и я должен найти рациональное объяснение. Такого же в принципе не может быть, видно, что исходники не так давно обновлялись, значит, вредоносный код тут должен быть. Ну если только его кто-то на лету подмешал, но как это сделать? Встроиться между клиентом и сервером и незаметно внедрить какую-то гадость? Сложно, но возможно. Как бы я сам реализовал такое? Наверно, сделал бы какой-то поддельный сервер и перенаправил туда клиента. Я нашел конфигурационный файл системы контроля версий для платежной системы, и там вместо имени сервера почему-то был указан IP-адрес. В аналогичных файлах других проектов было прописано нормальное имя сервера.

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

— Это Raspberry! — воскликнул я и тут же вспомнил, что нужно быть тише.
— Любимое оружие взломщиков, — усмехнулся Ивар.
— Похоже, Горелова подставили. Надо найти эту Raspberry, она это докажет.

Работник СБ заинтересованно, но молча слушал — наконец он услышал какие-то понятные слова.

— Не будем делать преждевременных выводов, — сказал Ивар, неодобрительно глядя на меня. — Сначала все проверим. И не факт, что этот Raspberry до сих пор тут.

С этими словами он пинганул адрес. Ответа не было. Raspberry уже не было в сети.

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

В этот момент мне позвонил Озолс:

— Удалось найти что-то интересное?
— Как ни странно, да, очень может быть…
— Не по телефону, я буду внизу через 5 минут. Или нужно больше времени?
— Нет, мы тут закончили уже.

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

Прямо напротив входа в банк, под знаком «Остановка запрещена» стоял Passat Озолса. Я не успел даже пристегнуться, как он тронулся с места.

— Домой?
— Да, если не сложно, я живу на углу…
— Я знаю адрес.

Ну да, с Озолсом о приватности можно забыть. Что еще ему про меня известно? Ладно, я знал, на что подписывался.

— Мы выяснили интересную вещь: оказывается, на компьютере Горелова нет следов вредоносного кода, но когда он делал коммиты, они шли не на обычный сервер SVN, а на левую Raspberry, и она…
— Я уже потерялся. Можно как для полицейского? — спросил Озолс с ухмылкой.
— Исходный код хранится в системе управления версиями, это такая очень специфичная штука, в которой видно, кто когда и что менял в коде, и она позволяет нескольким программистам параллельно вносить изменения. В банке используется довольная старая система — SVN, и у нее есть один существенный недостаток — не контролируется целостность кода. Это значит, что когда программист делает коммит, то есть отсылает на сервер свои изменения, сервер не проверяет, что он получил именно то, что ему послали.

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

— А как это может поменяться?
— В том то и дело, что компьютер Горелова посылал изменения не на обычный банковский SVN-сервер, а на другое устройство, которое уже заливало исходники на сервер, но при этом подмешивало туда вредоносный код.
— Это точно?
— Это предположение, точно сказать нельзя, пока мы не добрались до этого устройства. Но поскольку у Горелова на диске нет вредного кода, логично предположить, что он добавился как раз там.
— А что это за устройство?
— Судя по адресу, это микрокомпьютер, размером с пачку сигарет, называется Raspberry Pi, распространенная штука для всяких поделок. У меня самого дома такая есть.

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

— А сам Горелов мог установить это устройство?
— Мог, но в этом нет смысла, он мог все изменения сделать обычным образом. Зачем делать сложно, когда можно просто и надежно?
— Возможно, это ложный след, чтобы отвести от себя подозрение.
— А он просил полицию проверить его компьютер?
— Насколько я знаю, нет.
— То есть если бы я не решил посмотреть, этот якобы ложный след никто бы и не увидел. Рискованная тактика.

Озолс помолчал, обдумывая мои слова, и потом сказал:

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