Strona domowa GDR!a Tor Hidden Service

V 3.8


Zmiana adresu MAC karty sieciowej


Obowiązuje zakaz umieszczania całości lub fragmentów tego artykułu na innych stronach, nawet jeśli zostanie wymienione źródło. Zamiast tego, można umieścić link:
<a href="http://www.gdr.w.pl/macspoof.php">Tresc linka</a>
lub ramkę:
<iframe src="http://www.gdr.w.pl/macspoof.php"></iframe>
Odstępstwa od tej reguły będą zgłaszane do administratorów serwerów.

Co to jest adres MAC?


Każda karta sieciowa standardu Ethernet posiada swój numer seryjny zwany MAC, czyli Media Access Control (co na polski przekłada się jako kontrola dostępu do medium, przy czym przez medium rozumiana jest w tym wypadku sieć). Numer (adres) MAC jest 48-bitową liczbą podzieloną na dwie części : pierwsze 24 bity to kod producenta karty (lista kodów tutaj, kolejne 24 to jej unikatowy numer seryjny. Producent powinien zapewnić niepowtarzalność owych numerów, co jednak nie zawsze jest przestrzegane, ale nie ma też większego znaczenia ponieważ numery MAC nie mogą się powtarzać jedynie w zakresie jednej sieci LAN.

Jak fizycznie realizowany jest zapis numerów MAC na kartach? Służy do tego pamięć szeregowa EEPROM, w większości nowych kart które widziałem jest to mały, ośmionóżkowy układ scalony 93LC46A wykonany w technologii SMD. Dla przykładu, na moim domowym Realteku 8139 kość ta umiejscowiona pod pustą podstawką na EPROM.

Do czego służy adres MAC?


W sieci realizowanej w technologii Ethernet, kiedy komputery połączone są ze sobą np. za pomocą HUBa, do każdej karty sieciowej docierają informacje przeznaczone nie tylko dla niej, ale także dla wszystkich innych urządzeń pracujących w sieci. Karta filtruje pakiety i przepuszcza do komputera tylko skierowane do niej, czyli z jej adresem MAC w nagłówku (oraz pakiety broadcast, czyli adresowane do wszystkich komputerów w sieci).

Jak się ma MAC do IP?


Numer IP w sieciach lokalnych bywa przez serwer DHCP przydzielany logującemu się komputerowi losowo z wybranej puli adresów (niezależnie od jego numeru MAC), drugą możliwością jest stosowanie adresów zależnych od MACa karty - w tym wypadku użytkownik ma za każdym razem ten sam IP w sieci lokalnej, musi jednak wcześniej dostarczyć administratorowi serwera DHCP (np. dostawcy internetu) swój MAC (o tym jak sprawdzić swój mac będzie dalej).
W czasie pracy w sieci, translacją (zamianą) adresu IP na MAC zajmuje się usługa (program) arp. Jeśli jest to potrzebne, sprawdza w sieci jaki MAC jest powiązany z danym adresem IP, jeśli zaś dany IP był już wywoływany - pobiera odpowiadający mu MAC z lokalnego cache'u. Zawartość owego bufora można wyświetlić komendą (testowana na systemach operacyjnych : Linux, AmigaOS, Windows):
arp -a

Zwraca ona wydruk podobny do następującego:

Interfejs: 192.168.1.2 on Interface 0x1000002
  Adres internetowy      Adres Fizyczny      Typ
  192.168.1.1           00-e0-4c-e8-12-bb     dynamiczny



Jak sprawdzić swój adres MAC?


Tutaj metoda jest zależna od użytego systemu operacyjnego. W Linuxie służy do tego komenda ifconfig z nazwą karty sieciowej jako parametrem, czyli na przykład w przypadku jedynej zainstalowanej w komputerze karty:
ifconfig eth0

Wynik może być podobny do tego:

eth1      Link encap:Ethernet  HWaddr 00:0A:CD:00:93:8B
          inet addr:10.4.75.17  Bcast:10.4.75.255  Mask:255.255.255.0
          UP BROADCAST NOTRAILERS RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:109975 errors:1833 dropped:0 overruns:1 frame:0
          TX packets:4562 errors:32 dropped:0 overruns:0 carrier:64
          collisions:183 txqueuelen:100
          Interrupt:10 Base address:0xf400


(adres MAC kryje się pod pozycją HWaddr)

W Windowsie służy do tego komenda winipcfg. Pokazuje ona okno w którym można wybrać kartę sieciową i odczytać jej parametry. MAC pokazany jest w polu "adres karty".

W Windowsach serii NT (czyli np. XP) używamy komendy:

ipconfig /all

Jej wynik wygląda następująco:

Konfiguracja IP systemu Windows

        Nazwa hosta . . . . . . . . . . . : h057
        Sufiks podstawowej domeny DNS . . . . . . :
        Typ węzła . . . . . . . . . . . . : Nieznany
        Routing IP włączony . . . . . . . : Nie
        Serwer WINS Proxy włączony. . . . : Nie

Karta Ethernet Połączenie lokalne:

        Sufiks DNS konkretnego połączenia :
        Opis . . . . . . . . . . . . . . :  Karta Realtek RTL8139 Family PCI Fast Ethernet NIC
        Adres fizyczny. . . . . . . . . . : 00-E0-4C-EA-DD-CF
        DHCP włączone . . . . . . . . . . : Tak
        Autokonfiguracja włączona . . . . : Tak
        Adres IP. . . . . . . . . . . . . : 192.168.1.2
        Maska podsieci. . . . . . . . . . : 255.255.255.0
        Brama domyślna. . . . . . . . . . : 192.168.1.1
        Serwer DHCP . . . . . . . . . . . : 192.168.1.1
        Serwery DNS . . . . . . . . . . . : 192.168.1.1
        Dzierżawa uzyskana. . . . . . . . : 7 czerwca 2004 11:30:57
        Dzierżawa wygasa. . . . . . . . . : 11 czerwca 2004 11:30:57


MAC opisany jest jako adres fizyczny.

Po co zmieniać numer MAC?


Jest wiele powodów, może to służyć do testowania sieci, można próbować w ten sposób snoopoingu (podglądania) i spoofingu (podszywania się), można obchodzić zabezpieczenia które polegają na niezmienności tego adresu, można znów zmienić MAC z czystej ciekawości. Ciekawe jest też jak różne serwery DHCP radzą sobie z dwoma maszynami o tym samym MACu.

Czy każda karta może zmienić numer MAC?


W sposób sprzętowy MAC można zmienić adres MAC każdej karty, wiąże sie to jednak z wylutowywaniem, przeprogramowywaniem oraz ponownym wlutowywaniem EEPROMU. Większość nowoczesnych kart umożliwia także zmianę adresy programowo, jednak nie powoduje to trwałej jego zmiany (zmiany danych w EEPROMIE), a jedynie zmianę czasową (do najbliższego resetu). Nie znam sposobu na sprawdzenie czy dana karta ma taką możliwość, trzeba poszukać w Internecie bądź też po prostu sprawdzić czy podane poniżej sposoby działają. Mogę jedynie powiedzieć, że na pewno działają w kartach opartych na chipie Realtek 8139.

Jak zmienić MAC programowo?


Zależy to od używanego systemu operacyjnego, jednak w każdym wypadku należy wpierw odłączyć kabel sieciowy (inaczej karta będzie twierdziła że używa nowego numeru, przy czym na prawdą będzie używała prawdziwego). Zacznijmy od Linuxa (w przykładzie robię wszystko dla karty eth0). Cały zabieg sprowadza się do wyłączenia interface'u (karty):
ifconfig eth0 down

następnie, przystępujemy do właściwej zmiany adresu:
ifconfig eth0 hw ether 01:23:45:67:89:ab

gdzie 01:23:45:67:89:ab to nowy MAC (dwukropki nie są obowiązkowe). Następnie należy włączyć w karcie tryb promiscious, czyli taki, w którym do komputera docierają wszystkie pakiety, a nie tylko te skierowane do starego adresu MAC:
ifconfig eth0 promisc

Później zostaje tylko podłączyć kabel sieciowy i przywrócić kartę do normalnego działania:
ifup eth0

Niestety, z niewiadomych mi przyczyn po pewnym czasie wszystko się psuje (możliwe że z powodu zbyt wolnego komputera - testowałem to na moim routerze : pentium 100 MHz, 16 MB RAM), jest jednak na to rada:
tcpdump -i eth0

Polecenie to zalewa nas gradem informacji dotyczących teog, co aktualnie dzieje się w sieci. Można też wyłączyć drukowanie ich na ekranie:
tcpdump -i eth0 >/dev/null

Co pewien czas (tym częściej im większy ruch w sieci) połączenie znów pada, wtedy należy tcpdumpa przerwać poprzez CTRL-C oraz uruchomić jeszcze raz. Najprawdopodobniej na szybszych maszynach nie ma potrzeby wykonywania wyżej wymienionych manewrów.

Windowsy z serii 9x/Me posiadają odpowiednie ustawienia do zmiany adresu sprzętowego karty, jednak nie działają one w sposób prawidłowy. Od Tzoka dowiedzialem sie, że da się MACa zmienić w nieco inny sposób. Cytuję za jego stroną:
...W tym celu uruchamiamy edytor rejestru (regedit.exe) i przechodzimy do klucza
Win9x 'HKLM\System\CurrentControlSet\Services\Class\Net\000x'
Win2000 'HKLM\System\CurrentControlSet\Control\Class\{4D36E972-E325-11CE-BFC1-08002BE10}\000x'
(może być więcej niż jeden klucz stąd 'x', zmiany dokonujemy tylko dla klucza od naszej karty sieciowej, poznamy go po wartości DriverDesc, która powinna być identyczna jak ta widniejąca w Menedżerze urządzeń przy naszej karcie sieciowej). W tym miejscu mamy dwie możliwości:

  • dodajemy nowy ciąg o nazwie 'NetworkAddress' i wartości 'aabbccddeeff' (bez apostrofów), oczywiście podany MAC to tylko przykład;


lub

  • przechodzimy dalej do 'NDI\Params', tworzymy podklucz 'NetworkAddress' a w nim następujące wpisy (wszystkie typu ciąg/REG_SZ):
    default:"000000000000"
    LimitText:"12"
    Optional:"1"
    ParamDesc:"Network Address"
    type:"edit"
    UpperCase:"1"

... i mamy już odpowiednią pozycję w zakładce 'Zaawansowane'.

Aby przywrócić oryginalny MAC, niezależnie od sposobu z którego skorzystaliśmy, należy usunąć wartość 'NetworkAddress' z klucza '(...)\000x'.
W tej chwili nie mam możliwości zrobienia screenshotów dla windowsa 2000 oraz XP, więc jedyne co mogę zrobić do podać link na stronę gdzie takowe są. W każdym bądź razie, zmiana adresu podobno działa bezproblemowo na tych systemach.
Do Windows 2000, XP, i 2003 Server można również użyć programu SMAC. Nie testowałem, czytałem że spełnia zadanie poprawnie.

Jak poznać numery MAC innych komputerów w sieci?


Sposób pierwszy (najprostszy) : połączyć się w jakiś sposób z badanym komputerem (np. go spingować) oraz wydać polecenie:
arp -a 1.2.3.4

gdzie 1.2.3.4 to adres komputera do sprawdzenia. Należy jednak wiedzieć, że MAC można (zwykle) sprawdzić tylko w tym samym segmencie sieci lokalnej.
Sposób drugi : Można przeskanować całą sieć jakimś skanerem, ja dla windowsa polecam Angry IP Scanner - pozwala także pozyskać nazwę komputera, otwarte porty czy serwer WWW jaki (jeśli) jest na nim postawiony.

A po co mi MAC innych komputerów?


  • Z czystej ciekawości :>
  • Aby móc monitorować jakie przychodzą do niego pakiety (ewentualnie je podmieniac)
  • Aby móc podszywać się pod dane przez niego wysyłane
  • W sieciach z serwerem DHCP przydzielającym adresy IP na podstawie MACów - aby dostać IP inne niż własne
  • W sieciach z urządzeniami zezwalającymi na wyjście z sieci na zewnątrz (np. na Internet) tylko określonym MACom

Zbrodnia doskonała?


W celu umożliwienia operowania w sieci wyłącznie na cudzych adresach MAC, napisałem dla Linuxa prosty program, którego działanie zaraz pokrótce wytłumaczę.
Program ma w pliku tekstowym victims.txt zapisane w formacie CSV (arkusza kalkulacyjnego) dane innych komputerów w sieci - dla każdego z nich podany jest po kolei : liczba porządkowa (L.p.), IP, MAC, nazwa. Dane te są zbierane wcześniej jakimś skanerem sieciowym przez użytkownika (nie chcę nic reklamować, ale Angry IP Scanner ma opcję zapisu do CSV ;), przykładowy plik został dołączony do archiwum z programem (niżej).
Następnie, po włączeniu komputera loguje się on do sieci ze swoim prawdziwym MACem. Zaraz potem uruchamiamy program, pinguje on po kolei komputery z listy (victims.txt) oraz, kiedy dany komputer nie odpowiada, upewnia się pingując go jeszcze raz oraz przystępuje do zmiany parametrów sieci na zgodne z wyłączonym komputerem, to znaczy ustawia MAC i nazwę hosta taką samą jak wyłączonego komputera, IP zostanie i tak przydzielony przez serwer DHCP. Po tym zabiegu, jesteśmy nie do wykrycia. Aby nie podszywać się ciągle pod te same maszyny, plik z danymi jest rotowany (tzn. jeśli podszyliśmy się pod komputer dziesiąty w kolejności, to przy następnym włączeniu programu będzie on zaczynał próby podszywania od komputera jedenastego na liście).
Program udostępniam w postaci kodów źródłowych "róbra-co-chceta-ware", czyli public domain innymi słowy ;) Kompilacja następuje poprzez polecenie:
gcc -o cmac macc.c

Otrzymujemy plik wykonywalny o nazwie cmac, który uruchamiamy poleceniem:
./cmac
Program jest ustawiony na współpracę z drugą kartą sieciową w systemie (eth1), aby ustawić go na inną, zmieniamy plik macc.c w linii 6:
#define ifc "eth1"

Program ściągamy tutaj.
W razie jakichś pytań, proszę na maila

Jak zmienić MAC sprzętowo?


Disclaimer
Nie odpowiadam za żadne zniszczenia, obrażenia ani inne zjawiska negatywne wywołane wprowadzeniem rad zawartych w tym dokumencie. W szczególny sposób dotyczy to sekcji "Jak zmienić MAC sprzętowo", ponieważ nie sprawdzałem ich na własnym sprzęcie. Informację czerpię z PDFa "MAC Address Cloning" autorstwa kingpin@atstake.com dotyczącego kart opartych na chipie National Semiconductor DP83905-EB AT/LANTIC4.
Dla innych kart zawartość pamięci i sposób obliczania sum kontrolnych mogą być zupełenie inne.

Zacznijmy od zlokalizownia na karcie pamięci szeregowej. Tak jak pisałem wcześniej, zwykle jest to układ 93LC46A wykonany w technologii SMD, chociaż nie zawsze musi tak być, inaczej jest w przypadku mojego Realteka produkowanego przez firmę Mint (jest tam kość ISSI214 46-3GR), jednak we wszystkich (chyba) kartach z chipem RTL8139 umiejscowienie kości jest podobne (i pokazane na skanie poniżej czerwonym kółkiem).

Przepraszam za kiepską jakość, skaner strasznie wszystko rozmazał a aparatu cyfrowego nie posiadam - ale chyba widać co i jak.
Następnym krokiem jest włożenie takiej kości do programatora. Jeśli to się komuś przyda, podaję pinouty typowego EEPROMU szeregowego:

Pamięć ta ma pojemność 1024 bitów, jest w niej zwykle prócz MACa i jego sumy kontrolnej przechowywany adres bazowy I/O, przerwanie, typ interface'u (10BaseT, 100BaseT, AUI, 10Base2) oraz konfigurację karty ("soft jumpers").
Należy więc odczytać zawartość EEPROMu oraz porównać ją z adresem MAC karty. Przykładowe zestawienia dla niektórych kart podane są poniżej:

ProducentModelEEPROMAdres MACZawartość pamięci
National Semiconductor NSC ? 93LC06 08:00:17:03:C0:E50008 0317 E5C0 0000 0500 010D 01DA 5757 4242 0000 0000 0000 0000 0000 0020 0020
Ansel Communications N2000 Plus 3 93C46 00:40:90:80:07:7E4000 8090 7E07 FFFF FFFF FFFF FFFF 5757 4242 FFFF FFFF FFFF FFFF FFFF 0100 FF20
Microdyne NE2000 Plus 3 93C06 00:80:29:E7:C2:9CN/A
Linksys Ether16 93C46 00:40:05:44:17:A74000 4405 A717 0108 020A 5464 00D8 0000 0000 0000 0000 0000 0000 0000 0000 0000
Genius GE2000 II 93C46 00:40:33:2A:82:82 4000 2A33 8283 5805 0000 0000 0000 5757 4242 0000 0000 0000 0000 0000 2100 0020
Winbond HT-2003CT 93C46 48:54:33:01:48:245448 0133 2448 0000 5448 0133 2448 5757 4242 0000 0000 0000 0000 0000 4040 0020


Patrząc na tabelkę, łatwo zauważyć gdzie jest przechowywany MAC - w pierwszych sześciu bajtach (o adresach 0-5 - pogrubione). Bajty w poszczególnych słowach są odwrócone, ale nie powinno to sprawiać większego problemu.

Co dalej?


Teraz patrzymy na mapę pamięci jednej z kart sieciowych i oto co widzimy:


Najważniejszym wnioskiem z tej lektury jest to, że za adresem MAC (w bajcie o adresie 6) umieszczona jest suma kontrolna. Tworzona jest ona tak, żeby najmłodszy bajt sumy pierwszych ośmiu bajtów był równy 0xff (255), czyli np. dla karty Genius GE2000 II z przykładów powyżej z danymi:
4000 2A33 8283 5805 0000 0000 0000 5757 4242 0000 0000 0000 0000 0000 2100 0020
obliczamy : ( 0x40 + 0x00 + 0x2A + 0x33 + 0x82 + 0x83 + 0x05 + Checksum (0x58) ) & 0xFF = 0xFF

Jeśli ktoś posiada doświadczenia albo teksty dotyczące sprzętowej zmiany adresu MAC w innych kartach (szczególnie Realtekach) proszę o kontakt.
URL encoded in QR Code Statystyki:

Email
Comments