Привет, дорогие мои скучающие по публикациям на блоге! Я знаю, что вы все ждали гениальных постов последние два года. Но, что я, что d_x заняты делами, которые по важности, честно сказать, уступают только спасению мира... или нет. Сегодняшняя тема - CEN/XFS, специфичный и крайне нужный стандарт для взаимодействия с банковским оборудованием, а конкретнее - способ анализа вызовов XFS API на Windows. Если вы до сих пор не знаете, что такое CEN/XFS (не путать с XFS, который файловая система), то, скорее всего, у вас была счастливая жизнь без головной боли. Но для тех, кто готов погрузиться в это болото - welcome.
Что такое XFS?
Эта аббревиатура расшифровывается как "Extensions for Financial Services". Позволяет различным приложениям взаимодействовать с разными видами банковского оборудования по единообразным интерфейсам. Представьте себе, что вам нужно разработать ПО, которое должно общаться не с одним видом оборудования, а с целым зоопарком различных устройств. Вот тут-то и приходит на помощь XFS. Для весьма общего пояснения сошлюсь на следующую схему:
Схема взята у Лаборатории Касперского
XFS произошел от WOSA/XFS стандарта. WOSA (Windows Open Service Architecture) — это старенькая архитектура Microsoft, которая... впрочем, в Wikipedia все написано: https://en.wikipedia.org/wiki/Windows_Open_Services_Architecture. Документация по стандарту доступна здесь: https://www.cencenelec.eu/areas-of-work/xfs_cwa16926_350_release/.
msxfs.dll
Теперь о том, ради чего этот пост был задуман. msxfs.dll - это небольшая библиотека, является одним из ключевых компонентов XFS (доступна в SDK). Она выступает посредником между приложением и разнообразным финансовым оборудованием, обеспечивая стандартизированное API для устройств типа кардридеров, пинпадов, принтеров чеков и, в том числе, с диспенсером. Существует множество малвари под банкоматы, которая выдает деньги, обращаясь к XFS (вопросы шифрования/подписи и прочего оставим в стороне), например, старенький уже ATMii.
При анализе штатного ПО банкомата, вредоносного ПО или создании сигнатур для его обнаружения, бывает полезно отследить, какие функции вызывались из msxfs.dll, в каком порядке, с какими аргументами и т.п. Исторически, для подобного анализа в контексте WinAPI, я использовал Rohitab API Monitor: удобный, но немного устаревший инструмент.
Он позволяет перехватывать вызовы функций в контексте процесса и отображать информацию об аргументах, результате вызова и т.п. Единственный момент - для работы необходимо описание функций и аргументов в XML-формате. И если для большинства функций WinAPI оно присутствует, то для XFS я такого не нашел, пришлось сделать самому. Этим файлом я и хотел бы поделиться: https://github.com/kaimi-/xfs-api-monitor.
Его необходимо разместить, например, по следующему пути: API Monitor (rohitab.com)\API\XFS\XFSAPI.xml
. После этого API Monitor подхватит спецификацию, и вы сможете перехватывать обращения к функциям msxfs.dll.
На этом все, постараюсь опубликовать следующий пост в течение месяца, а не через 2 года.