WI-FI packet sniffing (Wi-Fi packet 분석)

Network/Wi-Fi 2017.09.19 22:59 posted by TechNote.kr


일반 사용자가 Wi-Fi frame을 볼 일은 거의 없다. 아마도 이 글을 Wi-Fi 관련 연구자나 개발자가 보면 도움이 될 것이다. 


Windows 상에서 Wi-Fi frame을 제대로 잡기 위해서는 상당한 금액의 omnipeek이나 별도의 Wi-Fi USB dongle을 구매해야 하는 wireshark를 사용할 것이다. 이외에도 몇가지 방법은 있지만 잘 안되는 경우가 많은 것 같다. 


하지만 Linux 에서는 kernel 에서 monitor mode라고 해서 Wi-Fi sniffing을 지원하고 있다. (해당 기능은 mac80211에서 지원 하는 것으로 너무 오래된 구형 Wi-Fi driver에서는 동작하지 않는다.)


Built-in Wi-Fi이건 USB Wi-Fi dongle이건 배포판에 상관없이 Linux가 준비되어 있고, 해당 Linux에서 정상적으로 Wi-Fi를 사용하고 있다면 Wi-Fi frame을 air 상에서 잡을 준비가 된 것이다. 


Wi-Fi frame을 잡기 위한 절차는 다음과 같다. (Wi-Fi mode를 바꾸는 일임으로 root 권한이 필요하다.)


1. 우선 현재 Wi-Fi mode를 확인해 보자


 iwconfig를 하면 Mode가 Managed인 것을 확인할 수 있다. 일반 Wi-Fi mode일 경우 managed로 표시된다.


root@User:~# iwconfig

eth0      no wireless extensions.


wlan0     IEEE 802.11abgn  ESSID:off/any  

          Mode:Managed  Access Point: Not-Associated   Tx-Power=20 dBm   

          Retry short limit:7   RTS thr:off   Fragment thr:off

          Encryption key:off

          Power Management:off

          

lo        no wireless extensions.



2. Wi-Fi interface를 내리고 monitor mode로 변환한 후 다시 interface 를 올린다.


root@User:~# ifconfig wlan0 down

root@User:~# iwconfig wlan0 mode monitor

root@User:~# ifconfig wlan0 up



3. Wi-Fi mode를 다시 확인해 본다.


 아래와 같이 monitor로 mode가 변한 것을 확인할 수 있다. 

root@User:~# iwconfig

eth0      no wireless extensions.


wlan0     IEEE 802.11abgn  Mode:Monitor  Frequency:2.412 GHz  Tx-Power=20 dBm   

          Retry short limit:7   RTS thr:off   Fragment thr:off

          Power Management:off

          

lo        no wireless extensions.



4. Wi-Fi mode가 sniffing을 위한 mode로 변환되었음으로 wireshark를 실행한다. 


root@User:~# wireshark &



5. sniffing을 위한 interface로 wlan0을 선택하고, Start 버튼을 누른다.



6. sniffing을 시작하면 바로 frame이 capture된다. 기본 설정으로 1번 channel의 frame들이 올라오기 시작한다.



7. Wi-Fi sniffing 화면에 알맞게 channel을 표시해 주는 column은 다음과 같이 추가한다. 


 Column 에서 마우스 오른 버튼을 눌러 popup menu를 띄우고, "Column Preferences..." 를 선택한다.



8. "Add" 버튼을 눌러 column 항목을 하나 추가하고, 해당 항목을 선택한 뒤, "Field type"으로 "Frequency/Channel" 을 선택한다.



9. 화면에 보면 Channel column이 추가된 것을 확인할 수 있고, capture된 frame의 frequency 및 channel 번호를 볼 수 있다.



10. 채널을 바꾸기 위한 메뉴를 추가하면 다음과 같다.


메뉴 중 "View" > "Wireless Toolbar" 를 선택한다.



11. 상단 바에 Wireless를 위한 새로운 toolbar가 하나 추가된다. 


 "Frequency" combo box에서 capture하기 원하는 frequency를 선택하면 바로 해당 frequency 의 frame들이 capture된다. 



아직 linux에서 11ac가 되는 제품을 보유하고 있지 못하다 보니 11n까지만 확인되었다. 

11ac USB dongle을 구매하였지만 linux에서 지원되지 않아 사용하지는 못하는 상황이다. 

11ac Linux driver가 official하게 지원된다면 해당 sniffing 시 11ac frame들도 정상적으로 capture될 거라 생각된다.