Була стаття з назвою «Злом платіжних терміналів», в якій описувалися складові апарату, його функціональні частини і те, як термінал захищений від злому. Я прочитав статтю на кілька разів, але навіть між рядків не знайшов реальні способи злому. Зрозуміло, що фізично ламати його марно — якщо зловлять, відірвуть все що намацають. Але моє бажання знайти баг в захисті було непереборним.

Як все починалося

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

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

Усі платежі поділяються на онлайн і оффлайн. Онлайн — це платіж, який надходить до постачальника послуг негайно, через Інтернет. Оффлайн — це платежі, які накопичуються у базі даних платіжної системи, і, в певні проміжки часу відправляються на сервер постачальника послуг. Крім того, деякі постачальники беруть тільки паперові реєстри. Тобто обмін відбувається безпосередньо при участі людини і постачальника послуг. Онлайн-платежами, як правило, оперують оператори стільникового зв’язку, в той час як комунальники воліють отримувати платежі «оптом» один раз на добу-дві. Сама по собі концепція онлайн-платежу вже небезпечна, тому що, проводячи такі платежі у великій кількості, працівникам платіжних систем найменше їх виходить розгрібати. Зате у випадку комунальних платежів, перед відправленням їх набагато простіше перевірити на існування відповідного запиту на терміналі.

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

Як правило, початківці платіжні системи підходять до питання безпеки в останню чергу, роблячи акцент на швидкості і зручність сервісу. Тому, при виборі жертви, варто в першу чергу звернути увагу на молоді компанії. Хоча ніхто не говорив, що Гіганти платіжної індустрії не містять помилок у системах безпеки. Дуже часто відбувається якраз навпаки… Візьмемо, наприклад, недавній випадок з відомої конторою «ОСМП» (Об’єднана Система Моментальних Платежів). Центральний сервер, до якого звертаються тисячі терміналів Росії, Казахстану, і, можливо, інших країн був обеззброєний на кілька діб банальної DOS/DDOS-атакою. Я, правда, не в курсі, чи скористався хтось ситуацією у своїх корисливих цілях або просто похуліганили, але атака була і це залишається фактом.

Зв’язок терміналу з сервером відбувається по GPRS/GSM-каналу і, як правило, за допомогою технології XML-RPC. Деякі навіть додумуються навішувати SSL-захист, але щоб вона дійсно виправдовувала себе, протокол, по-перше, повинен бути закритим, по-друге переданий пакет повинен шифруватися також засобами програми, а в-третіх, сервер повинен не тільки надавати свій кореневий сертифікат, але також вимагати клієнтський. Не буду голослівним і наведу приклади.

У того ж ОСМП протокол передачі відкритий, тобто, шифрувати пакет на виході з програми вже не має сенсу. Отримувати його реверс-инженерингом буде тільки збоченець. Але їх сервер не вимагає клієнтського сертифіката, тобто відправити запит може будь-який бажаючий, правильним чином сформував пакет. Так, твій канал при передачі буде захищений, але кого це цікавить, якщо для злому потрібні тільки ідентифікаційні дані. Адже отримати їх при великому бажанні не важко. Тут і Соціальна Інженерія і НЛП і банально Хакінг тобі в допомогу.

Ще одну цікаву пролом я знайшов відразу в двох молодих конторах. У відповідь на мій POST-запит, сервер послав мене в бік HTTPS явним проявом у вмісті помилки IIS-ного акценту. Як відомо, за замовчуванням IIS-сервер встановлює центр з видачі сертифікатів в каталог /CertSrv/Default.asp, наслідуючи який, я, в три кліка, отримав свій власний клієнтський сертифікат. До речі, після цього мені вдалося отримати доступ до ASPX-сторінка для проведення платежів та їх перегляду, правда на одному з ресурсів сторінка була захищена паролем, отримати який мені так і не пощастило.

Більшість платіжних систем ставлять на свої сервери Windows 2000/2003 Server, що вже роблять велику помилку. Але ті, хто приймає платежі в MySQL-бази на Linux-сервері, при цьому, тримаючи на борту Apache+PHP, роблять ще більшу помилку. Не мені тебе вчити, як користуватися SQL-Injection, а адже це дуже простий і вірний спосіб одержати величезну кількість необхідних даних для проведення платежів, імітуючи платіжний термінал.
Шукаємо діри

При пошуку дірок в захисті платіжної системи – жертви перше, що варто зробити це сканування портів і web-контенту. На відкритих портах найчастіше можна знайти цікаві самописні сервіси для проведення платежів, адміністрування терміналів. Адже жоден робітник не буде працювати цілодобово разом з платіжними терміналами. Программеры і сисадміни придумують різні примочки віддаленого управління для власної зручності. Часто вони навіть не замислюються про захист, сподіваючись, що ніхто не подумає їх ламати.

До деяких портів можна спробувати ломануться telnet, але як показує практика, в основному такі сервіси працюють по технології XML-RPC, а це означає, що порт може тільки приймати і відправляти POST-запити. Як дізнатися структуру запиту та його вміст? Можна спробувати просканить веб-вміст, читання. Багато пишуть свої сервіси з використанням asp-сторінок, які вимагають своїх джерел в тих же каталогах. Якщо адміністратор в останню чергу думає про права доступу, є велика ймовірність прочитати код asp сценаріїв, що при грамотному використанні може допомогти скласти XML-запит. До речі, подібні діри були зафіксовані навіть у досить великих платіжних систем!

Web-контент краще дослідити вручну + сканером. В якості сканера особисто мені більше всього подобається XSpider. Відкрию секрет, зовсім недавно мені супутникової риболовлі прилетіла безкоштовна версія 7.5 від Zeromag Lab, так що шукайте та знайдете :).
Три реальних злому
Злом CyberPlat

Як показало дослідження, платіжна система CyberPlat приймає платежі в багатьох країнах, і їх сайти хостятся на одному сервері. Перевірити це досить просто. Досить ввести доменне ім’я або IP-адресу в пошуковий запит www.domainsdb.net.

Цікава картина виходить:

1. cybercheck.ru [whois] IP: 0.0.0.0 dns: ns.cyberplat.ru | proxy.cyberplat.com
2. cyberplat.ru [whois] IP: 213.33.161.9 dns: ns.demos.su | ns.cyberplat.ru
3. cyberpos.ru [whois] IP: 0.0.0.0 dns: ns.cyberplat.ru | proxy.cyberplat.com
4. cybercard.ru [whois] IP: 0.0.0.0 dns: ns.cyberplat.com | ns.cyberplat.ru
5. gribov.ru [whois] IP: 0.0.0.0 dns: ns.cyberplat.com | ns.cyberplat.ru
6. pinsale.ru [whois] IP: 0.0.0.0 dns: ns.cyberplat.com | ns.cyberplat.ru
7. platina.ru [whois] IP: 0.0.0.0 dns: ns.cyberplat.ru | ns.platina.ru
8. rodnoe-pole.ru [whois] IP: 0.0.0.0 dns: ns.demos.su | ns.cyberplat.ru
9. rodnoepole.ru [whois] IP: 0.0.0.0 dns: ns.demos.su | ns.cyberplat.ru

Домени зареєстровані, але недоступні. Швидше за все, їх залишили для особистого користування. Але це не так важливо. Інші сайти в інших країнах показали в ролі первинного DNS cyberplat.com, а вторинним стояв cyberplat.ru. Це могло означати тільки те, що центральний сервер один, але на ньому хоститься кілька CyberPlat-сайтів для різних країн. Пинговались вони, до речі, теж по одному айпишнику.

Сканування і ручне дослідження показало, що краще залишити цю ідею і попорпатися в іншому місці. Тоді був по-швидкому згенерований інший спосіб.

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

Недовго думаючи, я зателефонував за контактним номером телефону, вказаним на квитанції і попросив їх дати свій e-mail, нібито для відправки міфічного комерційної пропозиції.

Через кілька хвилин лист від адміністрації сервісу CyberPlat полетіло жертві на ящик (не для кого ж не секрет, як фальшується адресат). У листі не було нічого особливого. Стандартна історія про зміну обладнання на сервері і т. п., у зв’язку з чим, просимо надіслати ваші реєстраційні дані, які нам просто життєво необхідні, щоб ваш термінал не заткнувся :).

Слухняні вівці прислали мені всі свої реєстраційні дані через пару годин. Після цього був згенерований XML-файл, який полетів POST запит на сервер платіжної системи.

До речі, на їхньому сайті лежить не тільки весь опис протоколу, але і вихідні коди програми встановлюється на стороні терміналу, а також її скомпільована версія.
Злом QuickPay

Програмістам цієї контори я взагалі дивуюся. Зробили гарний дизайн на флеш, а про налагодження своєї проги по-моєму взагалі не думають. Відкрию тобі маленький секрет при певних комбінаціях дій на сенсорному екрані терміналу, програма вилітає, навіть не видавши помилку. Причому тут є ще один цікавий момент. Всі сенсорні монітори на сьогоднішній день підтримують кілька режимів:
Click on touch
Click on release
Drag and click
Drag and double click

Це як мінімум тобто, сам розумієш, що можна відключити всі можливості крім простого натискання по намальованим кнопкам. Але ж ні! Кваліфіковані майстри сервісного обслуговування і не подумали нічого відключати. Напевно, вважають, що тоді їм буде незручно обслуговувати термінали!

Таким чином, мені вдалося на різних терміналах цієї контори отримати доступ до робочого столу (так, не дивуйся, там стоїть звичайна вінда, всупереч тому, що на сайті написано Linux), Мого Комп’ютера і, каталогу з програмою з усіма витікаючими наслідками.
Злом ОСМП

З цією конторою довелося трохи попотіти. Просканувавши порти, nmap намацав відкритий і нефільтрований pptpd-демон на стандартному 1723 порту. Так як для підбору пароля у нас існує THC Hydra, справа залишалася за іменами користувачів. База даних користувачів PPTP дуже часто не має нічого спільного з базою даних користувачів сервера, але далеко не завжди. Найчастіше Василь Пупкін створює одного і того ж користувача vasya скрізь, де тільки можливо. Тому, отримавши версію Apache-демона, я згадав про стару вразливість з визначенням імен користувачів через web-доступ. Через кілька хвилин експлойт був готовий до роботи.

Експлойт відпрацював вдало і знайшов двох користувачів root і alex. Далі за справу взялася Hydra. Я зарядив кілька важких словників і підготував скрипт для генерування словників імітують посимвольный перебір, але до них справа так і не дійшла. Все вийшло як можна простіше. Пароль для alex-а був дуже простий і навіть перебував десь на початку словника.

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

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

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

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

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