Зламати банкомат без болгарки

Всередину банкомату легко може проникнути не тільки працівник банку

фото: Positive Technologies

26 і 27 травня в Москві на міжнародній конференції Positive Hack Days (phdays.ru) пройде незвичайний хакерський конкурс: його учасники будуть зламувати банкомат. Організатори цих конкурсів розповіли порталу Банкі.ру про сучасних атаках на банкомати, а також про те, як захиститися від цих загроз.

До сейфу обхідним шляхом

Все, напевно, чули, що банкомати нерідко підривають, розкривають болгарками, відвозять. Ці випадки знаходяться на увазі. У банку не вийде залишити в таємниці інцидент такого роду. Але насправді банкомати набагато частіше зламують «по-тихому», за допомогою різних социотехнических навичок, а не деструктивних методів.

Один наш знайомий, який працює в банку, розповів, що на одному з їх банкоматів деякий час не відбувалося жодних змін лічильників. Коли інкасатори через пару тижнів прийшли інкасувати банкомат, вони побачили, що касети порожні. По лічильнику кількість грошей в касетах було нормальним, а на ділі грошей там не було. Стали дивитися записи відеоспостереження і побачили, що прийшов якийсь чоловік, відкрив верхній відсік банкомату, вставив всередину щось, закрив банкомат і пішов. Якість відео не вистачило б, щоб розглянути, що він вставив і як відкрив банкомат.

Спробуємо розібратися в тому, як це робиться. Гроші знаходяться в сейфі і добре захищені (на думку банків і виробників банкоматів). Сейф - це «бутерброд» зі сталі і бетону, більше 1 см в товщину. Залежно від взломоустойчивости, оснащується надійним замком: зазвичай це сувальдний замок, лімбовий або електронний кодовий. Щоб відкрити такий сейф, потрібно або мати набір кодів і ключів, або заручитися допомогою «ведмежатника», який за допомогою спеціальних інструментів виконає це завдання.

Однак в банкоматі є ще сервісна зона, де розташовуються системний блок і різні периферійні пристрої. Ця частина банкомату закривається пластиковим корпусом з одним простеньким замком. Причому деякі виробники банкоматів ставили туди однакові замки, відриваються одним і тим же ключем, - для зручності обслуговування. Зараз вендори і банки йдуть від такої практики, але до сих пір зустрічаються банкомати, які можна відкрити ключем від будь-якого іншого банкомату того ж банку. Та й замки там як і раніше простенькі.

Грошей в сервісній зоні немає, зате там є маса цікавих можливостей з управління підсистемами банкомату - в тому числі і тими, що розташовані в сейфі. Отже, пробуємо!

готуємо злом

Для початку ми вирішили використовувати інтерфейси, які розташовані зовні банкомату. Ми взяли мікрокомп'ютер Raspberry Pi, підключили до нього батарею живлення, адаптер Wi-Fi і склали кілька програм для злому. Знайти документацію з описом інтерфейсів банкоматів виявилося нескладно.

Устаткування банкоматів і платіжних терміналів, незалежно від виробника, має загальний API (програмний інтерфейс. - Прим. Ред.), Щоб отримати доступ і управління модулями і працює на платформі Windows відповідно до єдиного стандарту розширень для фінансових послуг XFS.

Знаючи API, можна отримати контроль над комп'ютером банкомату і безпосередньо управляти різними периферійними пристроями. Деякі з цих пристроїв цікавили нас в першу чергу.

Клавіатура банкомату (пінпад). Вона працює в двох режимах: в захищеному, в якому вводиться ПІН-код і передається в комп'ютер банкомату в зашифрованому вигляді, і у відкритому, який використовується для введення суми зняття та іншої інформації. Встановлений на комп'ютері XFS-менеджер може змусити пінпад перемикатися між режимами, що може дозволити зловмисникам отримувати вводяться ПІН-коди в незашифрованому вигляді.

Зчитувач карт (картрідер) вміє читати дані зі смуги і записувати на неї, витягувати і інформацію з EMV-чіпа - наприклад, дані про раніше скоєних трансакціях.

Диспенсер, пристрій видачі грошей, найбільш цікавий для хакера. З його допомогою можна управляти переміщенням грошей, наприклад з грошових касет в касети відбраковування, розблокувати касети, видавати банкноти без авторизації і навіть відкривати сейф, якщо він оснащений електронним замком.

Всіма цими пристроями управляє програма, запущена на комп'ютері банкомату, - XFS-менеджер.

Можна було б припустити, що тут реалізована серйозна аутентифікація і доступ до XFS-менеджеру добре захищений. На ділі ні про яку аутентифікації мови немає. Специфікації можна знайти в Інтернеті. Ексклюзивний доступ реалізований, але не для безпеки, а лише для того, щоб не ламати ніжні банкоматні «залізяки» - наприклад, щоб не посилати одночасно дві команди на видачу банкнот з диспенсера.

Стандарт XFS розроблений в Microsoft, і це пояснює, чому на багатьох банкоматах до сих пір стоїть Windows XP. Приблизно рік тому, на початок 2014 го, 95% всіх банкоматів в світі працювало під керуванням Windows XP. При цьому підтримка даної операційної системи закінчилася в квітні 2014 року. Тобто на банкоматах, керованих Windows XP, величезна кількість відомих вразливостей, які вже ніколи не будуть усунені.

Є банкомати, в яких системний блок зберігається в самому сейфі. Це добре з точки зору безпеки, але рятує не завжди - адже все одно назовні виходить порт для зв'язку з мережею, а це вже вектор атак.

Візьмемо, наприклад, відому уразливість МС08-067. В якихось банкоматах вона може бути закрита, так як вже не нова, але є й інші подібні уразливості. Вона дозволяє отримати права адміністратора при мережевому підключенні до комп'ютера. Беремо наш Raspberry Pi і підключаємо до порту системного блоку банкомату. Причому нам навіть не потрібно відкривати сервісну область, можна використовувати виведений назовні порт, службовець для підключення банкомату до мережі. До самого Paspberry Pi підключаємося по Wi-Fi і запускаємо на ньому програму-експлойт для MC08-067. З'являється консоль, де ми можемо вводити команди для комп'ютера банкомату. Лише кілька разів клацнувши на клавіші можна змусити банкомат видати невелику кількість грошей.

В середньому в банкоматі чотири касети по 2,5-3 тис. Банкнот в кожній. Нескладно підрахувати, що при стандартній завантаженні в банкоматі може виявитися більш 10 млн рублів. Їх можна витягнути, експлуатуючи різні уразливості, які, як сказано вище, вже ніколи не будуть усунені.

обходимо захист

Припустимо, банк не поскупився на те, щоб захистити операційну систему: встановив антивірус або яку-небудь систему контролю цілісності, яка не дає нам запускати довільний код. Але якщо у нас є доступ в сервісну зону, ніяка захист нам не страшна. Комп'ютер банкомату нам взагалі не знадобиться, будемо працювати через фізичні інтерфейси.

Периферійні пристрої банкомату, такі як картрідер, диспенсер і пінпад, підключені до комп'ютера через COM або USB-порти. COM - стандартний послідовний інтерфейс, для нього не потрібні ніякі спеціальні драйвери, ніяка авторизація. Протоколи передачі не захищені, їх можна спокійно прослуховувати і реплєєв (передавати записані послідовності даних. - Прим. Ред.) З невеликими змінами.

Правда, протоколів там безліч. Кожна нова прошивка пристрою - новий протокол. Аналізувати їх непросто, і в Інтернеті мало інформації на цю тему. Зате відомо, наприклад, що COM-порт не підтримує контроль послідовності виконання команд. Тобто ми можемо повторювати якусь окрему команду або ланцюжок команд. А ще відомо, що втрата зв'язку пристрою з порту не детектується: якщо ми на 5-10 секунд відключимо диспенсер від банкомату, то банкомат, в принципі, не зможе це зрозуміти.

Крім того, в протоколах або використовується фіксований розмір даних для пакетів, або застосовуються байти «старт / стоп» для поділу пакетів один від одного, або застосовується префікс довжини і самі дані передаються разом. Проаналізувавши перехоплені дані, можна зрозуміти, яка послідовність означає «видати з першої касети одну купюру». Легко і просто. Для таких дій не потрібно ніякої авторизації.

Так само легко можна перетворити банкомат в апаратний скіммер, який забирає дані і передає їх зловмисникові - адже дані банківської картки передаються у відкритому вигляді між банкоматом і картрідером. Якщо ми розмістимо наш Raspberry Pi всередині банкомату, такий скіммер в принципі не можна буде побачити зовні.

Звичайно, виробники банкоматів і банки стверджують, що давно відмовилися від COM-портів і на їх банкоматах використовується тільки шифрування USB-підключення. Насправді це відноситься лише до нових, недавно купленим банкоматів. Десятки тисяч старих банкоматів до сих пір знаходяться в експлуатації.

Хто винен і що робити

Виробники банкоматів пропонують захисні засоби: антивіруси, системи контролю цілісності, системи протидії запуску додатків. Вони, безумовно, корисні. При цьому за допомогою викрутки або сервісного ключа ми за пару хвилин (не допоможе навіть сигналізація - все зробимо і підемо до приїзду охорони) отримуємо прямий доступ до комп'ютера і можливість застосовувати до нього всілякі експлойти. Захист повинна бути ешелонованої.

Необхідна постійна двостороння аутентифікація між комп'ютером банкомату і його периферійними пристроями. Тут не завжди врятує і криптографія - в кожному зашифрованому протоколі можна знайти уразливості.

Також ми пропонуємо переглянути стандарт XFS на користь збільшення його захищеності. Поточна ситуація вкрай плачевна. Якщо є можливість виконати код, а також звернутися до XFS-менеджеру, то у нас є повний контроль над периферією банкомату.

Потрібно регулярно проводити системний аналіз захищеності банкомату, включаючи тестування на проникнення, перевірку зовнішнього периметра, тестування самих банкоматів і їх підключення до процесингу.

Ольга КОЧЕТОВА, експерт відділу безпеки банківських систем Positive Technologies, Олексій ОСИПОВ, старший експерт відділу тестування на проникнення Positive Technologies, для Banki.ru