Hrátky s MAC adresami

Zdroj: SOOM.cz [ISSN 1804-7270]
Autor: Harvie
Datum: 21.5.2007
Hodnocení/Hlasovalo: 2.2/71

Zjišťujeme MAC adresy, čmucháme, spoofujeme, obcházíme filtry MAC adres, boříme se do sítí s minimálním stupněm zabezpečení.

SooM.cz - IP2MAC MAC2IP Zjištění MAC adresy z IP

Úvodem:

Různé sítě, od napůl otevřeného WiFi AP, až po jednoduché domácí sítě povolují připojení jen uživatelům s konkrétní MAC adresou (MAC whitelisting).

Nejpodstatnější informace o stavu naší síťové karty (včetně MAC) zjistíme ve Windows příkazem "ipconfig /all" v Linuxu programem "ifconfig".


Měníme MAC adresu:

Změnit vlastní MAC adresu není takřka nikdy problém. Ve Windows použijeme dobrý volně dostupný program MAC MakeUP, horší komerční trial verzi SMACu s méně funkcemi, nebo rovnou změníme položku v registrech ručně. U některých ovladačů tuto možnost nalezneme přímo v dialogu s vlastnostmi síťového adaptéru. U posledních dvou možností musíme kartu nejdříve zakázat a po změně MAC povolit.

V Linuxu potom Hardwarovou (MAC) adresu změníme opět pomocí programu "ifconfig" a to konkrétně trojcí příkazů:

Zakážeme rozhraní:
# ifconfig eth0 down
Změníme adresu:
# ifconfig eth0 hw ether De:ad:Ba:ad:Ba:be
Povolíme rozhraní:
# ifconfig eth0 up

Toho samého můžeme dosáhnout změnou souboru "/etc/network/interfaces". Např. přidáme/přepíšeme následující řádky:

iface eth0 inet dhcp
hwaddress ether De:ad:Ba:ad:Ba:be
auto eth0

Pro více informací navštivte Ubuntu fórum.

Zjišťujeme MAC adresu:

Nyní stojíme před problémem, jak zjistit adresu oběti, se kterou se přihlásíme do sítě.

Nejjednodušším způsobem je použít dávkový soubor (např.: ultrahaxor.bat) s následujícím obsahem:
ipconfig /all >> %0
exit
rem ----------------------------------------


Ten při spuštění z počítače oběti vytáhne IP i MAC adresy všech rozhraní a uloží na konec sebe samého.

Dalšími způsoby (pokud na počítač oběti "vidíme") je zjišťování MAC adresy z cache ARPu. To uděláme jednoduše:

Ping na oběť:
ping 192.168.2.69
Zjištění MAC z cache ARPu (v Linuxu tuším není parametr -a nutný):
Jinak můžeme v Linuxu ARP cache nalézt také v souboru "/proc/net/arp", se kterým tento program již tradičně a samozřejmě pracuje.
arp -a


Teorie MAC & ARP:

A co to vlastně je ta ARP (Address resolution protocol) cache? ARP cache je soubor (nebo jiné úložiště), ve kterém si systém udržuje informace o tom, která MAC adresa patří ke které IP adrese (jednou je vyhledá a pak řádově několik sekund používá záznam z cache, než si záznam obnoví). My jako programátoři a uživatelé určujeme počítač v síti pomocí IP adresy, hardwarová vrstva síťového přenosu nikoliv. Proč? Protože MAC adresy platí pouze v podsíti. Tedy v celém internetu může být například 10000 počítačů se stejnou MACkou, ale stejně nebudou kolidovat, protože slouží jen k tomu, aby router dokázal mezi těmi několika málo počítači, které na které routuje nalézt ten správný a aby tento počítač poznal, že jde o packet pro něj. A to nemluvím o tom, že možných MAC adres je více, než IP adres (každý výrobce síťových adaptérů má přiřazenou předponu o 3 oktetech, tj. 1. polovina adresy, nicméně to neznamená, že takto nemůžeme předstírat kartu od jiného výrobce...) BTW: existuje také všesměrová MAC adresa ff:ff:ff:ff:ff:ff (tedy samé jedničky), na kterou pokud zašleme packet, musí ho přijmout všechy stroje (tomu se říká broadcasting - např. toho využívá ping - zašle všem počítačům packet se zprávou: "jestli jsi 123.123.123.123, tak mi odpověz", pokud v síti existuje počítač s nastavenou, nebo půjčenou IP adresou 123.123.123.123, tak odpoví: "Jo sem tu, ahooj, moje MAC: De:ad:Ba:ad:Ba:be s pozdravem tvůj 123.123.123.123")

Jednotlivé záznamy v ARP cache vznikají při jakékoli komunikaci s daným počítačem (nejjednodušší je zaslat na daný počítač požadavek ping), tím vznikne v aktivním (pingujícím) i cílovém (odpovídajícím) počítači záznam např.:

123.123.123.123     De:ad:Ba:ad:Ba:be     Dynamic


Více informací naleznete například v knize "Hacking: umění exploitace" od Jona Ericksona, nebo Daanově článku ARP Poison Routing


Automatizace:

Pro zjednodušení některých operací jsem si napsal malý PHP Skriptík =), který vám teď popíši.

Softwarové požadavky:
- ping (snad máš ne??!)
- arp (ten se docela hodí...)
- Windows (jediná závislost na windows je, že skript parsuje MSoftí verzi arpu a v Linuxové můžou být drobné nuance, s jinými věcmi nebude problém - ping se pouze spouští a ngrep se v Linuxové verzi neliší.)
- WinPCap (LibPCap pokud používáte Linux - vyžadován ngrepem)
- ngrep (nejlepší sniffer pod sluncem!!!)

Konfigurační proměnné:
//binárka NGREPu
$ngrep = "ngrep";
//PING s parametry (já zasílám pouze jeden dotaz tj.: -n 1)
$ping = "ping -n 1";
//ARP s parametry pro vypsání všech záznamů
$arp = "arp -a";

Popis jednotlivých funkcí:

quick_ipmac_scan("192.168.1");
Otevře na pozadí procesy, které najednou odešlou ping na adresy 192.168.1.1-192.168.1.255, počká na odpověď a následně vypíše obsah ARP cache (tím zjistíme IP a MAC adresy všech počítačů, které odpovídají na ping v rozsahu, který jsme zadali jako parametr, tj. tři první oktety IP adresy, poslední bude scanován).

get_mac("192.168.2.69");
Odešle ping na zadanou IP a potom pomocí regulérních výrazů vyparsuje z ARP cache příslušnou MACku, trimne z ní přebytečné mezery a vrátí jí. Pokud jde o IP vašeho rozhraní, nebo na danou IP nelze zaslat ICMP broadcast, bude vrácena příslušná chybová hláška.

sniff_ips(3, "192.168");
//ngrep -d 3 | grep "192.168.*:.* -> .*:.*"

spustí NGREP tak, aby snifoval na 3. rozhraní (tj. 1. parametr funkce - seznam u vás dostupných rozhraní získáte příkazem "ngrep -L", u mne je 3. rozhraní WiFi) čte zachycená data a hledá v nich všechny IP adresy, ze kterých jsou aktivně posílaná nějaká data a které začínají druhým parametrem ("192.168") a pomocí funkce "get_mac" zjistí a vypíše MAC adresu společně s IP (jinak řečeno v tomto příkladu si nechávám vypisovat všechny IP i MAC adresy počítačů aktivních v síti na rozhraní #3, jejihž IP začínají "192.168"). Pozn.: Tato funkce obsahuje nekonečnou smyčku, která běží do ukončení skriptu.


Závěrem:

Máme MAC adresu oběti, můžeme si jí nyní nastavit na svoje rozhraní (pozor!! Pokud má obět více rozhraní, každá její síťová karta má pravděpodobně jinou MAC adresu, musíme tedy získat MACku toho rozhraní, se terým se připojuje do námi napadané sítě), tomuto postupu se říká "spoofování MAC adresy", pravděpodobně se budeme muset vykašlat na DHCP a ručně si nastavit stejnou IP, jako oběť. Tak jsme si teoreticky zařídili, že se k nám router (etc...) bude chovat stejně jako k oběti (uvidíme na její pakety - to si musíme zajistit pingováním routeru cca jednou za 10 sec aby si nás nacachoval a udržel v ARP cache, to již ale zabíhám do aktivního sniffování přes ARP poisoning) Nám šlo hlavně o to např. získat přístup k internetu (pokud například mají přístup do WANu povoleny jen některé MACky, jak tom je většinou u WiFi hotspotů, které vám internet povolí až po zadání hesla, i když do sítě vás bez něj pustí...), nebo jiné službě, která je omezená na určité MACky klientů.

Moderní AP se většinou proti tomuto brání mechanismy, které nám v ARP poisoningu brání, a dokáží rozlišit jednotlivé síťové adaptéry i jinak než podle IP a MAC adres (pomocí různých otisků atd...)

keywords: MAC IP IP2MAC MAC2IP ARP CACHE