WiFi and the Beast

24
WIFI AND THE BEAST INTRO TO 80211 IN THE LINUX KERNEL

Transcript of WiFi and the Beast

Page 1: WiFi and the Beast

WIFI AND THE BEASTINTRO TO 80211 IN THE LINUX KERNEL

Page 2: WiFi and the Beast

OURI LIPNERSECURITY RESEARCHEREQUUS TECHNOLOGIES

[email protected]

Page 3: WiFi and the Beast

WHY ARE WE HERE AND WHAT IS THIS MADNESS?

Page 4: WiFi and the Beast

A SHORT INTRO TO WIFI

• FULLMAC - SOFTMAC• FRAME TYPES• FRAME PROTOCOL TRANSLATION (DOT11 – ETH)• MONITOR MODE• SCAN – AUTH – ASSOC• AP – STA (AND OTHERS)

Page 5: WiFi and the Beast

CONNECTION ESTABLISHMENT

WPA2

Page 6: WiFi and the Beast

BASIC WIFI FRAME

Page 7: WiFi and the Beast
Page 9: WiFi and the Beast

A SHORT INTRO TO WIFI - RECAP

• FULLMAC - SOFTMAC• FRAME TYPES• FRAME PROTOCOL TRANSLATION (DOT11 – ETH)• MONITOR MODE• SCAN – AUTH – ASSOC• AP – STA (AND OTHERS)

Page 10: WiFi and the Beast

TASKS OF A WIFI DRIVER

• STATE MACHINE – MLME (PER STA)• INTERFACE STATE CHANGE / PEER STATE CHANGE• PACKET ADMITTANCE

• VIF• SCAN• CHANNEL SELECTION• CRYPTO CONFIGURATION + VALIDATION• AUTHENTICATION• RATE CONTROL• REGDOMAIN• POWERSAVE• …• MADWIFI (NET80211 + ATH) : > 56K LOC

Page 11: WiFi and the Beast

DRIVER EXAMPLE - MADWIFI

• CONNECTION STAGES• MANAGEMENT FRAMES• DATA FRAMES

Page 12: WiFi and the Beast

MADWIFI CONNECTION ESTABLISHMENT

• IWCONFIG WLAN<X> MODE MANAGED• IWCONFIG WLAN<X> ESSID “MYNET”• IEEE80211_IOCTL_SIWESSID() – IOCTL HANDLER, STARTS

INTERFACE• IEEE80211_NEWSTATE() – STATEFULL SWITCH CASE• IEEE80211_CHECK_SCAN() – FIND ESSID IN SCAN CACHE OR

INIT SCAN• IEEE80211_STA_JOIN() – ALLOCTE NODE FOR AP• IEEE80211_NEWSTATE() AGAIN• …• FULLY SELF-SUFFICIENT

Page 13: WiFi and the Beast

MADWIFI MANAGEMENT FRAME RX

• IEEE80211_INPUT() – SWITCH CASE FOR INTERFACE MODE, MAINLY• CHECK IF STAGE IS LOGICAL, FRAME SIZE, CRYPTO

• IEEE80211_RECV_MGMT() – PARSE AND HANDLE FRAME IN KERNEL

Page 14: WiFi and the Beast

MADWIFI DATA FRAME RX

• IEEE80211_INPUT(), AGAIN SWITCH CASE ON IFACE STATE AND PACKET• CHECK CRYPTO, REASSEMBLE, CHECK CRYPTO SIGNATURE• A LOT OF DIFFERENT PACKET TYPES AND IFACE STATES (WDS,

ETC.)• CONVERT WIFI FRAME TO ETHERNET

• ACCEPT_DATA_FRAME() – VERIFY 802.1X PORT STATUS• IEEE80211_DELIVER_DATA() – NETIF_RX()

Page 15: WiFi and the Beast

MAC80211

• IDEA: LET’S HAVE ONE MAC IMPLEMENTATION FOR ALL WIFI DRIVERS

• ALSO: LET’S PUSH AS MUCH AS POSSIBLE TO USER MODE

Page 16: WiFi and the Beast
Page 17: WiFi and the Beast

NEW ARCHITECTURE

• MAC80211• CFG80211• NL80211

• IWEXT STILL IN USE• ATH5K ~ 31K LOC (VS. >56K IN MADWIFI)

Page 18: WiFi and the Beast

ATH5K – MAC80211 DRIVER

Page 19: WiFi and the Beast

MAC80211 RX PATH (MGMT, AP)

ATH5K_RECEIVE_FRAME() – HW FLAGS, NO LOGICIEEE80211_RX_NAPI() - MAC80211, SANITYIEEE80211_RX_HANDLERS() – SANITY CHECKS AS WELLIEEE80211_RX_H_USERSPACE_MGMT() – SEND IT TO USER MODE

Page 20: WiFi and the Beast

USER MODE HELPER

• HOSTAPD / WPA_SUPPLICANT• RECEIVES AND SEND MANAGEMENT FRAMES USING NETLINK

(MOSTLY)• CONTROLS CONNECTION ESTABLISHMENT, ETC.• ALSO PROVIDES HIGH LEVEL PROTOCOLS – WPA2, WPS, P2P-

GO

Page 21: WiFi and the Beast

TINKERING WITH A DRIVER

• IS DEVICE FULLMAC / SOFTMAC?• IS DRIVER BASED ON MAC80211?• FIRMWARE AND EEPROM – HAVEN’T TOUCHED HERE.

Page 22: WiFi and the Beast

EXAMPLEHTTPS://DEV.OPENWRT.ORG/BROWSER/TRUNK/PACKAGE/KERNEL/MAC80211/PATCHES

Page 23: WiFi and the Beast

EXAMPLE2

Page 24: WiFi and the Beast

THANK YOU FOR LISTENING