В сложившейся экономической ситуации мы привыкли слышать, как очередной банк сокращает своих сотрудников и обращается в аутсорсинговые компании для разработки программного обеспечения.
Основной вопрос, усиливает эта практика риск получения тайминговой бомбы, прошитых учетных записей или просто бекдоров, скрытых собственными разработчиками.
Интересный фрагмент кода, обнаруженный Ваней Сватчером (Vanja Svajcer) из Sophos подтверждает наши опасения.
Поскольку до конца неизвестно (отсутствуют доказательства), как этот код попал в банкомат, мы можем предположить, что это сделал человек, знающий архитектуру и имеющий физический доступ к аппаратному и программному обеспечению Diebold ATM. Привилегированный инсайдер, который либо хотел обеспечить страховку на «черный день», имея неограниченный доступ к наличным, либо планировал провести масштабную распределенную атаку на банки.
В любом случае, бекдор старательно скрывает себя на системе. Почему? Скорее всего, для того, чтобы оставаться незамеченным во время аудиторских проверок.
Бекдор состоит из «дроппера» и оставленного компонента.
Если на системе используется файловая система NTFS, дроппер создаст 2 альтернативных потока данных: %windir%\greenstone.bmp:redstone.bmp %windir%\greenstone.bmp:bluestone.bmp
В противном случае, создаст 2 файла: %windir%\redstone.bmp %windir%\bluestone.bmp
Эти файлы создаются из этих копий файлов, если они обнаружены на системе: %windir%\trl2 %windir%\kl
Затем, дроппер предоставляет себе привилегии уровня SeDebugPrivilege и делает 50 попыток завершить процесс lsass.exe.
Бекдор устанавливает себя следующий образом: Получает полный путь к бинарному файлу системной службы "LogWriter" Останавливает службу "LogWriter" Добавляет к имени ":", за которым следует pwrstr.dll Помещает собственный ресурс PACKAGEINFO в альтернативный поток данных [LogWriter_binary_filename]:pwrstr.dll Запускает службу "LogWriter", вместе с которой выполняется библиотека из нового источника.
Наконец, дроппер внедряет и запускает удаленную нить в процессе explorer.exe, которая перечисляет и удаляет все Windows Prefetch файлы.
После активации, библиотека внедряет 2 нити: одна будет внедрена в процесс mu.exe, другая – в процесс SpiService.exe - основную службу ("Diebold XFS Service") проприетарного ПО, работающего на банкоматах Diebold. Эти нити будут ответственны за внутреннее сообщение с драйвером Diebold через именной канал "\\.\pipe\lsndbd".
Другая нить начнет периодичный вызов (раз в секунду) API SQReceiveFromServer(), экспортируемого sharedq.dll. Содержимое буфера, заполненное этой функцией, будет проверяться на наличие тегов "TCS," и "HST,".
Если значения, указанные в тегах, разделяются символом ";", нить их извлечет и запишет в журнал в файл %windir%\greenstone.bmp:redstone.bmp на NTFS системе или в файл %windir%\redstone.bmp на другой файловой системе. Так как тег "TCS," означает транзакции, а тег "HST," историю, бекдор способен собирать данные о пользователях и транзакциях в вышеупомянутом файле.
В случае, когда процесс обработки транзакции обнаруживает определенные данные, предположительно уникальные для атакуемого банкомата, бекдор перейдет в графический режим, который предоставит атакующему полный доступ к бекдору. В этом случае на дисплее банкомата будет отображено диалоговое окно с надписью "Agent" и приглашением "Enter command:", и драйверу Diebold будут переданы команды на активацию клавиатуры и чтение входных данных через последовательность команд, предоставленных DbdDevExecute() API, экспортируемых DbdDevAPI.dll. например, драйвер получит следующие команды: EPP4_ENCODE_DECODE, EPP4_ENABLE_KEYBOARD_READ.
Затем, атакующий предоставляет одну из 10 возможных команд путем ввода номера на клавиатуре. Каждая команда инструктирует бекдор для выполнения определенных действий.
Например, команда «2» проинструктирует бекдор прочитать версию установленного ПО Diebold из ключей реестра: HKLM\SOFTWARE\Diebold\Agilis 91x Core HKLM\SOFTWARE\Diebold\Agilis 91x
Затем эта команда прочитает содержимое временных файлов redstone.bmp и bluestone.bmp и обработает детали транзакций из этих файлов. Наконец, будет отображено уведомление с собранной статистикой в следующем виде: Agilis [version number] Agent [version number] Transactions [number] Cards [number] KEYs [number]
Команда 6 проинструктирует бекдор восстановить "Key A" и "Key B" из файла redstone.bmp, который будет распечатан на чеке. Команда 8 позволит атакующему отобразить внутренние счетчики в диалоговом окне (это может потенциально сообщить о количестве наличных в банкомате).
Команда 7 сгенерирует случайное число и затем сгенерирует на его основе пароль. Затем будет отображено диалоговое окно "Autorization" (орфография сохранена): Request Code: [random number] Enter Responce:
Будет предоставлено 3 попытки для ввода корректного пароля. Если пароль корректный, будет отображено диалоговое окно "Enter Command" (орфография сохранена) 1..4 - dispense cassete 9 - Uninstall 0 - Exit
В случае 1-4 будут выполнены команды AFD_DISPENCE, AFD_PRESENT и AFD_RESTORE, которые проинструктируют Advanced Function Dispenser (AFD) модуль изъять кассеты с наличными из банкомата.
С таким уровнем утонченности, учитывая наличие троянского приложения в его классической форме внутри банкомата, даже такие параноидальные приемы не спасут вас от кражи:
|