ݺߣ

ݺߣShare a Scribd company logo
Bezprzewodowe
(nie)bezpieczeństwo
Adam Ziaja, Maciej Grela
O nas
■ Adam Ziaja, OSCP, OSWP, eWPT
biegły sądowy
Starszy Konsultant Cyberbezpieczeństwa, Deloitte
http://adamziaja.com - prywatna strona
■ Maciej Grela, OSCP, OSWP
Główny Inżynier Usług Bezpieczeństwa IT, Exatel
http://github.com/mgrela
WiFi stalking
Co to są pakiety Probe Request i dlaczego mam się nimi interesować?
■ wysyłane automatycznie przez urządzenie WiFi - nawet gdy nie jesteśmy
połączeni z żadną siecią
■ ujawniają informacje o sieciach, z których korzystaliśmy wcześniej i są
zapamiętane w laptopie, telefonie, tablecie itd.
■ nie można ich łatwo zablokować - biorą udział w procesie łączenia się z
siecią WiFi
WiFi probe - jak to działa?
Directed Probe NULL Probe
Przykład z życia wzięty… biały wywiad (OSINT)
■ uruchamiamy program do podglądu ruchu sieciowego (np. Wireshark,
tcpdump itp) na jednej z konferencji poświęconych bezpieczeństwu IT
■ znajdujemy wśród pakietów probe request ciekawą nazwę sieci (SSID),
która związana jest ze znanym portalem z branży
■ pakiety probe request zwierającę interesujący nas SSID wysyła tylko jedno
urządzenie
■ chcemy pozyskać jak najwięcej informacji odnośnie tego urządzenia
wlan_mgt.ssid matches "(?i).*niebezpiecznik.*"
wlan.sa == 00:26:08:b6:0b:a8 and
wlan.fc.type_subtype == 4 (probe request)
WiFi probe request
Narzędzia - WiGLE.net
■ publicznie dostępna (darmowa) baza danych access pointów WiFi
○ ponad 250 milionów wykrytych sieci na całym świecie
■ jest darmowa
○ automatyczne odpytywanie jest ograniczane
○ możliwe wykupienie abonamentu komercyjnego
■ możliwość przeszukiwania pod kątem pojedynczego BSSID/ESSID
(większość komercyjnych serwisów geolokacji podaje dokładne położenie na
podstawie co najmniej dwóch BSSID np. usługa lokalizacji Google)
■ dane są croudsource’owane
○ częste aktualizacje
○ nie wszystkie AP są widoczne
Narzędzia - WiGLE.net
Jak z dokładnością danych?
■ zbadaliśmy 1429 unikalnych SSID
■ 63% z nich może być w praktyce przydatne do lokalizacji (wielu nazw ESSID
nie ma w bazie, wiele ESSID nie jest wystarczająco unikalne - np. AndroidAP,
linksys, Dom itp)
■ lokalizacja w promieniu kilkudziesięciu metrów
Automatyzacja WiGLE.net
pozycja GPS z WiGLE to pozycja gdzie wykryto siec, a nie
gdzie znajduje się AP
odległość 50m od
“prawdziwej” lokalizacji
Niebezpiecznik.plNiebezpiecznik.pl GUEST
https://github.com/bezprzewodowe/niebezpieczenstwo/ - wigle.py
WiGLE.net + Google Maps
https://github.com/bezprzewodowe/niebezpieczenstwo/ - revgeocode.py
GPS adres :)
“odwrotne
geokodowanie”
SSID
MAC
https://github.com/bezprzewodowe/niebezpieczenstwo/ - probe.py
...automatyczne parsowanie
ruchu sieciowego,
możliwa również wersja “live”
Pełna automatyzacja całego procesu :)
bardziej unikalny SSID to lepsze wyniki
https://github.com/bezprzewodowe/niebezpieczenstwo/ - geo.py
GPS
adres
https://github.com/bezprzewodowe/niebezpieczenstwo/ - probe.php
MAC SSID GPS adres
Zebraliśmy więcej danych
access pointy uruchomione w trybie
CWIDS (Cisco Wireless Intrustion
Detection System)
profesjonalny agregator pakietów :)
Narzędzia - Scapy
class CWIDSFrame(Packet):
name = 'CWIDS packet '
fields_desc = [ ShortField("version", 1), StrFixedLenField("Unknown1", "", 7),
ByteField("channel", 6), StrFixedLenField("Unknown2", "", 6),
ShortField("original_length", 0), FieldLenField("captured_length", 0),
StrFixedLenField("Unknown3", "", 8), PacketLenField("dot11_frame", None, Dot11,
length_from=lambda pkt: pkt.captured_length) ]
cwids_port = 1234
bind_layers(CWIDSFrame, CWIDSFrame)
bind_layers(UDP, CWIDSFrame, dport=cwids_port)
...tutaj dzieje się magia :)
Narzędzia - Scapy
RadioTap(version=0, pad=0, present=18478L, len=18,
notdecoded='x00x02x85txc0x00xb8x06x00x00')/Dot11(proto=0L,
FCfield=0L, subtype=4L, addr4=None, addr2='00:26:08:b6:0b:a8',
addr3='ff:ff:ff:ff:ff:ff', addr1='ff:ff:ff:ff:ff:ff', SC=1024, type=0L,
ID=0)/Dot11ProbeReq()/Dot11Elt(info='Wesola_Cafe', ID=0,
len=11)/Dot11Elt(info='x02x04x0bx16', ID=1,
len=4)/Dot11Elt(info='x0cx12x18$0H`l', ID=50,
len=8)/Dot11Elt(info='x07', ID=3,
len=1)/Dot11Elt(info='x00x10x18x02x00x00x00x00x00', ID=221,
len=9)
Kilka skryptów później...
{"ie": [{"data": "47462053414c452043204420692045", "id": 0}, {"data":
"02040b16", "id": 1}, {"data": "0c1218243048606c", "id": 50}, {"data": "0c [...] 0",
"id": 45}, {"data": "001 [...] 00", "id": 221}, {"data": "00 [...] 00", "id": 221}],
"subtype": 4, "addr2": "08:70:45:84:f6:2c", "T": "2016-03-10T08:38:00+0000",
"sc": 25920, "type": 0, "channel": 3}
ESSID
adres MAC klienta
wysyłającego probe
znacznik czasu
kanał radiowy
Przykładowy profil (1)
dc:ce:bc:a1:10:9a|4k0naqzwert2|2 -> ul.
Konduktorska, Warszawa
dc:ce:bc:a1:10:9a|Atigh-Hotel|3
dc:ce:bc:a1:10:9a|BjeE-SFVBV0VJRzZVMTA|4
dc:ce:bc:a1:10:9a|Cafe Rayka|4
dc:ce:bc:a1:10:9a|Charmy's Pasta|3
dc:ce:bc:a1:10:9a|Free Airport WiFi Telekom|3 ->
lotnisko Berlin-Tegel
dc:ce:bc:a1:10:9a|Free Boryspil Wi-Fi|2 -> lotnisko
Boryspol (Kijów, Ukraina)
dc:ce:bc:a1:10:9a|SHATEL93|2
dc:ce:bc:a1:10:9a|hotel termah|4
Dc:ce:bc:a1:10:9a|kolbeh|3
dc:ce:bc:a1:10:9a|pwwifi|1 -> Kampus PW
dc:ce:bc:a1:10:9a|silk road|5 -> O_o
dc:ce:bc:a1:10:9a|vnet-5124B7|4 -> 0
OUI (Organization Unique Identifier)
często identyfikuje producenta telefonu
(zwłaszcza sprzętu Apple)
Przykładowy profil (2)
select distinct sta_mac from probe_requests where
lower(essid) = 's_16_76';
7c:d1:c3:8c:a4:54
66:bc:ac:9c:d5:04
64:20:0c:ab:0c:52
26:e3:bf:0a:5d:bd
be:a7:77:7b:0c:20
Czy jesteśmy zdani na WiGLE?
http://wardriving.adamziaja.com (2010)
...w 2010 roku przejechanie ok. 700 km w Katowicach i okolicach
pozwoliło pozyskać informacje o 13,5 tyś sieci WiFi
http://wardriving.adamziaja.com (2010)
...najbliższa sieć bez szyfrowania itd
...najbliższe podatny AP
np. informacja z BSSID + SSID
Livebox (przepełnienie bufora, 2008)
kanał 14 (2.484 GHz) - w Polsce tylko częstotliwości od 2.4 do 2.4835 GHz nie wymagają koncesji
http://wardriving.adamziaja.com (2010)
...kiedyś było słabo z bezpieczeństwem WiFi
✓ WPA2 z dobrym hasłem
aktualnie dużo się nie zmieniło w kontekscie bezpieczeństwa
90 kombinacji dla całego vendora TP-LINK
Vectra (...-2016, Warszawa)
■ hasłem do Wi-Fi jest MAC (12 znaków) pisany małymi literami.
■ nazwa sieci Wi-Fi składa się z członu "VNET-" oraz drugiej połowy MAC (6
znaków).
■ pierwsza połowa MAC przypisana jest do vendora (6 znaków).
■ sąsiedzi prawdopodobnie mają ten sam model modemu, co za tym idzie
pierwsze 6 znaków naszego hasła oraz 6 znaków z nazwy sieci Wi-Fi sąsiada
daje nam dostęp do sieci sąsiada… :)
■ jeśli hasło nie pasuje to jest kilkadziesiąt kombinacji (modemy z serii Cisco
EPC np. 3212, 3925, 3208, 3010, 3008, 3928, 2100 = możliwe 32
kombinacje)
■ generator możliwych haseł http://adamziaja.com/misc/vectra.php (2014-...)
UPC (2016)
https://niebezpiecznik.pl/post/lamacz-hasel-do-sieci-wi-fi-dla-niektorych-routerow-upc/
Czas na coś zupełnie innego...
(urządzenie ułatwiające prowadzenie prezentacji)
Nieudokumentowana funkcjonalność :)
...ściąga dowolny plik z urządzenia w zaszyfrowanej postaci
Podatność w kodzie skryptu CGI
Możemy wykonać dowolne polecenie jako root
(administrator)
hasło administratora
Czy mieliśmy po prostu szczęście?
Niestety nie jest tak dobrze, polecana lektura: (In)Security of Embedded
Devices' Firmware - Fast and Furious at Large Scale [32c3]
(https://www.youtube.com/watch?v=5gf6mFz1rPM)
■ automatyczna statyczna i dynamiczna analiza obrazów firmware
■ przeanalizowano zaledwie 185 obrazów od 13 producentów
■ znalezione 225 poważnych podatności (Command Injection, CSRF, XSS)
Jak żyć?
■ systematycznie aktualizować firmware urządzeń z WiFi
■ jeżeli to możliwe używać OpenWRT lub DDWRT (backdoory producenta!)
■ zmienić domyślne hasło z naklejki nawet jeśli wygląda na mocne i unikalne
■ szyfrować WPA2 (czyli AES)
■ w przypadku większych sieci korzystać z serwera RADIUS i 802.1x
“Zabezpieczenia”, a WiFi probe request
■ filtrowanie MAC
■ ukryta nazwa sieci (SSID)
Dziękujemy za uwagę!
Adam Ziaja <adam@adamziaja.com>
Maciej Grela <enki@fsck.pl>
Repozytorium ze skryptami z prezentacji:
https://github.com/bezprzewodowe/niebezpieczenstwo

More Related Content

Bezprzewodowe niebezpieczeństwo (TAPT 2016)

  • 2. O nas ■ Adam Ziaja, OSCP, OSWP, eWPT biegły sądowy Starszy Konsultant Cyberbezpieczeństwa, Deloitte http://adamziaja.com - prywatna strona ■ Maciej Grela, OSCP, OSWP Główny Inżynier Usług Bezpieczeństwa IT, Exatel http://github.com/mgrela
  • 3. WiFi stalking Co to są pakiety Probe Request i dlaczego mam się nimi interesować? ■ wysyłane automatycznie przez urządzenie WiFi - nawet gdy nie jesteśmy połączeni z żadną siecią ■ ujawniają informacje o sieciach, z których korzystaliśmy wcześniej i są zapamiętane w laptopie, telefonie, tablecie itd. ■ nie można ich łatwo zablokować - biorą udział w procesie łączenia się z siecią WiFi
  • 4. WiFi probe - jak to działa? Directed Probe NULL Probe
  • 5. Przykład z życia wzięty… biały wywiad (OSINT) ■ uruchamiamy program do podglądu ruchu sieciowego (np. Wireshark, tcpdump itp) na jednej z konferencji poświęconych bezpieczeństwu IT ■ znajdujemy wśród pakietów probe request ciekawą nazwę sieci (SSID), która związana jest ze znanym portalem z branży ■ pakiety probe request zwierającę interesujący nas SSID wysyła tylko jedno urządzenie ■ chcemy pozyskać jak najwięcej informacji odnośnie tego urządzenia
  • 7. wlan.sa == 00:26:08:b6:0b:a8 and wlan.fc.type_subtype == 4 (probe request)
  • 9. Narzędzia - WiGLE.net ■ publicznie dostępna (darmowa) baza danych access pointów WiFi ○ ponad 250 milionów wykrytych sieci na całym świecie ■ jest darmowa ○ automatyczne odpytywanie jest ograniczane ○ możliwe wykupienie abonamentu komercyjnego ■ możliwość przeszukiwania pod kątem pojedynczego BSSID/ESSID (większość komercyjnych serwisów geolokacji podaje dokładne położenie na podstawie co najmniej dwóch BSSID np. usługa lokalizacji Google) ■ dane są croudsource’owane ○ częste aktualizacje ○ nie wszystkie AP są widoczne
  • 11. Jak z dokładnością danych? ■ zbadaliśmy 1429 unikalnych SSID ■ 63% z nich może być w praktyce przydatne do lokalizacji (wielu nazw ESSID nie ma w bazie, wiele ESSID nie jest wystarczająco unikalne - np. AndroidAP, linksys, Dom itp) ■ lokalizacja w promieniu kilkudziesięciu metrów
  • 12. Automatyzacja WiGLE.net pozycja GPS z WiGLE to pozycja gdzie wykryto siec, a nie gdzie znajduje się AP odległość 50m od “prawdziwej” lokalizacji Niebezpiecznik.plNiebezpiecznik.pl GUEST https://github.com/bezprzewodowe/niebezpieczenstwo/ - wigle.py
  • 13. WiGLE.net + Google Maps https://github.com/bezprzewodowe/niebezpieczenstwo/ - revgeocode.py GPS adres :) “odwrotne geokodowanie”
  • 14. SSID MAC https://github.com/bezprzewodowe/niebezpieczenstwo/ - probe.py ...automatyczne parsowanie ruchu sieciowego, możliwa również wersja “live” Pełna automatyzacja całego procesu :)
  • 15. bardziej unikalny SSID to lepsze wyniki https://github.com/bezprzewodowe/niebezpieczenstwo/ - geo.py GPS adres
  • 17. Zebraliśmy więcej danych access pointy uruchomione w trybie CWIDS (Cisco Wireless Intrustion Detection System) profesjonalny agregator pakietów :)
  • 18. Narzędzia - Scapy class CWIDSFrame(Packet): name = 'CWIDS packet ' fields_desc = [ ShortField("version", 1), StrFixedLenField("Unknown1", "", 7), ByteField("channel", 6), StrFixedLenField("Unknown2", "", 6), ShortField("original_length", 0), FieldLenField("captured_length", 0), StrFixedLenField("Unknown3", "", 8), PacketLenField("dot11_frame", None, Dot11, length_from=lambda pkt: pkt.captured_length) ] cwids_port = 1234 bind_layers(CWIDSFrame, CWIDSFrame) bind_layers(UDP, CWIDSFrame, dport=cwids_port) ...tutaj dzieje się magia :)
  • 19. Narzędzia - Scapy RadioTap(version=0, pad=0, present=18478L, len=18, notdecoded='x00x02x85txc0x00xb8x06x00x00')/Dot11(proto=0L, FCfield=0L, subtype=4L, addr4=None, addr2='00:26:08:b6:0b:a8', addr3='ff:ff:ff:ff:ff:ff', addr1='ff:ff:ff:ff:ff:ff', SC=1024, type=0L, ID=0)/Dot11ProbeReq()/Dot11Elt(info='Wesola_Cafe', ID=0, len=11)/Dot11Elt(info='x02x04x0bx16', ID=1, len=4)/Dot11Elt(info='x0cx12x18$0H`l', ID=50, len=8)/Dot11Elt(info='x07', ID=3, len=1)/Dot11Elt(info='x00x10x18x02x00x00x00x00x00', ID=221, len=9)
  • 20. Kilka skryptów później... {"ie": [{"data": "47462053414c452043204420692045", "id": 0}, {"data": "02040b16", "id": 1}, {"data": "0c1218243048606c", "id": 50}, {"data": "0c [...] 0", "id": 45}, {"data": "001 [...] 00", "id": 221}, {"data": "00 [...] 00", "id": 221}], "subtype": 4, "addr2": "08:70:45:84:f6:2c", "T": "2016-03-10T08:38:00+0000", "sc": 25920, "type": 0, "channel": 3} ESSID adres MAC klienta wysyłającego probe znacznik czasu kanał radiowy
  • 21. Przykładowy profil (1) dc:ce:bc:a1:10:9a|4k0naqzwert2|2 -> ul. Konduktorska, Warszawa dc:ce:bc:a1:10:9a|Atigh-Hotel|3 dc:ce:bc:a1:10:9a|BjeE-SFVBV0VJRzZVMTA|4 dc:ce:bc:a1:10:9a|Cafe Rayka|4 dc:ce:bc:a1:10:9a|Charmy's Pasta|3 dc:ce:bc:a1:10:9a|Free Airport WiFi Telekom|3 -> lotnisko Berlin-Tegel dc:ce:bc:a1:10:9a|Free Boryspil Wi-Fi|2 -> lotnisko Boryspol (Kijów, Ukraina) dc:ce:bc:a1:10:9a|SHATEL93|2 dc:ce:bc:a1:10:9a|hotel termah|4 Dc:ce:bc:a1:10:9a|kolbeh|3 dc:ce:bc:a1:10:9a|pwwifi|1 -> Kampus PW dc:ce:bc:a1:10:9a|silk road|5 -> O_o dc:ce:bc:a1:10:9a|vnet-5124B7|4 -> 0 OUI (Organization Unique Identifier) często identyfikuje producenta telefonu (zwłaszcza sprzętu Apple)
  • 22. Przykładowy profil (2) select distinct sta_mac from probe_requests where lower(essid) = 's_16_76'; 7c:d1:c3:8c:a4:54 66:bc:ac:9c:d5:04 64:20:0c:ab:0c:52 26:e3:bf:0a:5d:bd be:a7:77:7b:0c:20
  • 23. Czy jesteśmy zdani na WiGLE?
  • 24. http://wardriving.adamziaja.com (2010) ...w 2010 roku przejechanie ok. 700 km w Katowicach i okolicach pozwoliło pozyskać informacje o 13,5 tyś sieci WiFi
  • 25. http://wardriving.adamziaja.com (2010) ...najbliższa sieć bez szyfrowania itd ...najbliższe podatny AP np. informacja z BSSID + SSID Livebox (przepełnienie bufora, 2008) kanał 14 (2.484 GHz) - w Polsce tylko częstotliwości od 2.4 do 2.4835 GHz nie wymagają koncesji
  • 26. http://wardriving.adamziaja.com (2010) ...kiedyś było słabo z bezpieczeństwem WiFi ✓ WPA2 z dobrym hasłem
  • 27. aktualnie dużo się nie zmieniło w kontekscie bezpieczeństwa 90 kombinacji dla całego vendora TP-LINK
  • 28. Vectra (...-2016, Warszawa) ■ hasłem do Wi-Fi jest MAC (12 znaków) pisany małymi literami. ■ nazwa sieci Wi-Fi składa się z członu "VNET-" oraz drugiej połowy MAC (6 znaków). ■ pierwsza połowa MAC przypisana jest do vendora (6 znaków). ■ sąsiedzi prawdopodobnie mają ten sam model modemu, co za tym idzie pierwsze 6 znaków naszego hasła oraz 6 znaków z nazwy sieci Wi-Fi sąsiada daje nam dostęp do sieci sąsiada… :) ■ jeśli hasło nie pasuje to jest kilkadziesiąt kombinacji (modemy z serii Cisco EPC np. 3212, 3925, 3208, 3010, 3008, 3928, 2100 = możliwe 32 kombinacje) ■ generator możliwych haseł http://adamziaja.com/misc/vectra.php (2014-...)
  • 30. Czas na coś zupełnie innego... (urządzenie ułatwiające prowadzenie prezentacji)
  • 31. Nieudokumentowana funkcjonalność :) ...ściąga dowolny plik z urządzenia w zaszyfrowanej postaci
  • 32. Podatność w kodzie skryptu CGI
  • 33. Możemy wykonać dowolne polecenie jako root (administrator) hasło administratora
  • 34. Czy mieliśmy po prostu szczęście? Niestety nie jest tak dobrze, polecana lektura: (In)Security of Embedded Devices' Firmware - Fast and Furious at Large Scale [32c3] (https://www.youtube.com/watch?v=5gf6mFz1rPM) ■ automatyczna statyczna i dynamiczna analiza obrazów firmware ■ przeanalizowano zaledwie 185 obrazów od 13 producentów ■ znalezione 225 poważnych podatności (Command Injection, CSRF, XSS)
  • 35. Jak żyć? ■ systematycznie aktualizować firmware urządzeń z WiFi ■ jeżeli to możliwe używać OpenWRT lub DDWRT (backdoory producenta!) ■ zmienić domyślne hasło z naklejki nawet jeśli wygląda na mocne i unikalne ■ szyfrować WPA2 (czyli AES) ■ w przypadku większych sieci korzystać z serwera RADIUS i 802.1x
  • 36. “Zabezpieczenia”, a WiFi probe request ■ filtrowanie MAC ■ ukryta nazwa sieci (SSID)
  • 37. Dziękujemy za uwagę! Adam Ziaja <adam@adamziaja.com> Maciej Grela <enki@fsck.pl> Repozytorium ze skryptami z prezentacji: https://github.com/bezprzewodowe/niebezpieczenstwo