Computer Science%/Network

WPA2 무선랜 해킹

ch4rli3kop 2018. 5. 24. 15:49
반응형

Cracking the wireless network(WPA2)


오랜만의 포스팅입니다. 오늘은 Wifi hacking과 관련된 주제로 포스팅하려고 합니다.


우선, 간단하게 오늘 사용할 도구들을 정리해보겠습니다.


먼저, 모니터링 모드를 지원하는 무선 랜카드가 필요합니다. 저는 무난하게 많이 사용하는 n150ua 무선랜카드로 진행했습니다.


다음으로, Aircrack-ng 라는 유몋안 무선랜 종합 분석 툴입니다. 

Monitoring, Attacking, Testing, Cracking 기능들을 가지고 있습니다. 해당 소프트웨어는 굉장히 다양한 도구들을 포함하고 있지만, 오늘 사용할 도구는 하위의 4가지의 도구 입니다.

1. airmon-ng

- 무선랜 인터페이스에 대해서 모니터 모드를 지원하게 해줄 수 있습니다. 실제 랜카드에는 해당 시스템이 속하고 있는 서브넷 상에서 오고가는 모든 패킷이 들어오지만, 패킷의 목적지 주소와 자신의 맥 주소를 비교하여 같지 않은 패킷은 모두 버려버립니다. 모니터 모드는 이런 패킷들을 버리지 않고 모든 패킷들을 살펴볼 수 있도록 하는 기능입니다. 당연히 무선랜카드가 모니터 모드를 지원해야 합니다. 

2. airodump-ng

- 패킷을 캡쳐할 수 있는 기능을 가지고 있습니다. 무선 데이터 트래픽을 cap이나 IVs 형태로 저장하고 네트워크 정보를 보여줍니다.

3. aireplay-ng

- 사용자의 임의적인 패킷을 만들 때 사용할 수 있습니다. 주로 WEP 나 WPA-PSK 의 키를 구하려는 크래킹을 할 때 사용합니다. deauthentication ,즉 와이파이와 사용자 간의 인증을 해제하는 패킷을 임의로 전송함으로써 WPA handshake data, fake authentications, Interactive packet replay, hand-crafted ARP request injection, ARP-request reinjection 등을 얻을 수 있습니다. 본문에서는 WPA handshake data를 탈취하는 것을 목표로 하겠습니다.

4. airdecap-ng

- 무선랜 패킷에는 무선통신 프로토콜에 대한 헤더가 붙습니다. 해당 도구로 무선통신 프로토콜과 관련된 헤더부분을 없애서 평문 패킷의 대한 정보를 얻을 수 있습니다. 또한, WEP 이나 WPA 의 암호를 알 수 있다면, 암호화된 패킷을 복호화할 수 있습니다.


마지막으로 암호화된 패킷의 키를 알아내기 위해 사용할 도구인 hashcat 입니다. 

Dictionary attack, Brute-force attack 등의 공격으로 패스워드를 알아낼 수 있는 유틸리티입니다. aircrack-ng 도구도 해당 기능을 지원하지만, GPU 연산을 이용하는 hashcat에 비하면 굉장히 느리므로 hashcat을 사용하여 wifi 패스워드를 알아내보도록 하겠습니다.  


START!


먼저, 현재 연결된 네트워크들을 확인해보도록 하겠습니다.

> sudo ifconfig -a

(혹은)

> sudo iwconfig

위의 두 명령어 중 하나만 사용해도 괜찮습니다. 아, iwconfig 명령어는 무선 네트워크 인터페이스를 대상으로 확인작업을 수행하는 녀석입니다.

두 명령어 중 아무거나 치면 위 그림처럼 wlan0 이라는 무선 인터페이스를 확인하실 수 있습니다.

자 모니터 모드로 이용할 대상 네트워크 인터페이스를 확인하였으니, 이제 이 무선 네트워크 인터페이스를 모니터 모드로 바꿔 줍시다. 먼저, 모니터 모드를 적용하는데 방해가 되는 프로세스들을 정리줍니다.

> sudo airmon-ng check kill


잘 종료를 시켰다면 이제 해당 무선 랜카드를 모니터 모드로 사용하기 위해, 아래의 명령어들로 껐다 다시 모니터 모드로 켜줍시다.


> sudo ifconfig wlan0 down

> sudo airmon-ng start wlan0


제대로 모니터 모드로 적용이 되었는지 확인해봅시다. iwconfig 같은 명령어로 보면 모니터 모드를 사용하는 wlan0mon 이라는 무선 인터페이스가 추가된 것을 확인할 수 있습니다.



제대로 적용이 되었네요! 이제 다음 작업들을 수행합시다.


아래의 명령어로 제 무선랜 카드에 잡히는 모든 와이파이들을 확인할 수 있습니다.

> sudo airodump-ng wlan0mon


그 중 저기 흰색으로 표시한 와이파이를 대상으로 오늘의 실험을 진행하도록 하겠습니다.

자, airdump-ng 를 사용하여 해당 와이파이의 신호를 잡아줍시다. 대충 사용방법은 아래와 같습니다.


> sudo airodump-ng wlan0mon --bssid [bssid 값] -w [대상의 정보가 저장될 파일 이름]


그렇다면 아래와 같은 화면을 보실 수 있습니다.


이제, 암호화된 패킷을 복호화하기 위한 키를 찾기 위하여, 공유기와 기기 간의 인증이 일어날 때 서로 교환되는 암호화된 패스워드를 얻어야 합니다. 4-way handshake 방식을 사용하는데, 이 때 공유기와 기기는 와이파이의 패스워드와 essid 값이 결합된 해시 값을 교환하게 되는데, 공격자는 이 해시 값을 탈취하여 사전공격(Dictionary Attack), 전수조사공격(Brute-Force Attack) 등을 통하여 패스워드를 알아낼 수 있습니다.


본인이 계속해서 다시 연결하여 인증 패킷을 잡거나, 아니면 누군가 네트워크에 접속하여 인증을 수행할 때까지 계속 기다리는 것도 좋겠습니다만, 우리는 성급한 사람들이므로 와이파이를 사용하는 사람들의 연결을 강제적으로 끊어버려 다시 인증을 하는 과정을 거치게 하는 것도 나쁘지 않겠습니다. 심지어 저는 개인적으로 사용하는 공유기에 연결했기 때문에 지쳐 쓰러질까봐 그냥 연결을 끊으며 인증 패킷을 기다렸습니다. 

물론 이런 강제적으로 전파를 방해하는 재밍은 굉장히 악랄한 방식이므로 악용하다가 주변 사람들에게 걸리면 좋은 꼴은 보지 못할 것 같습니다.


aireplay-ng 를 사용하여 기기 간의 인증을 해제해주는 패킷을 날려줍니다. 사용법은 대충 아래와 같습니다.

> aireplay-ng --deauth [보낼 deauthentication 패킷 수] -a [대상 wifi의 bssid] [모니터링하고 있는 무선 랜]


위와 같이 다른 터미널 창을 띄워 해당 wifi에 재밍을 걸어줍니다.



제대로 인증 패킷을 잡으면 위와 같이 WPA handshake 표시가 뜹니다!


자, 이제 handshake를 잡기위해 켜놓았던 airodump-ng를 살포시 꺼줍니다. 이제 ls 명령어로 확인할 수 있는 cap 파일 안에는인증 패킷이 들어있는 겁니다! 


자 이제는 해당 무선 네트워크의 패스워드를 알아내보도록 하겠습니다. 이 인증 패킷 안에 있는 해시 값을 이용해, 패스워드를 알아내도록 하겠습니다. 이제 hashcat을 사용합시다.


hashcat은 여러 종류의 파일 확장자에 대해서 키를 추측할 수 있는 기능을 가지고 있습니다. 대신 특정한 포맷으로 변환시킨 뒤에 사용해야 하는데, cap 파일은 hccapx 라는 확장자로 변환한 뒤 사용해야 합니다. hashcat에서 제공하는 여러 도구들 중 cap2hccapx라는 도구가 이 기능을 제공합니다.(최신 hashcat 버전이 아닌 경우 해당 도구가 없는 경우도 있습니다. 온라인 사이트로 cap 파일을 hccapx 파일로 변환시켜주는 사이트도 있으니 해당 사이트를 이용하거나, 아니면 hashcat-utils 를 다운받아 설치하는 것도 나쁘지 않을 것 같습니다.)



hccapx 파일로 잘 변환이 되었으면, 이제 hashcat 을 이용하여 key guessing 을 시작해 봅시다. 제 경우에는, 로컬 상에서는 GPU 연산을 활용할 수 없기 때문에 호스트 PC에서 hashcat 을 사용했습니다.




해당 옵션들은 대충 -m 2500은 WPA2 프로토콜에 관련된 암호화 방식이라는 표현과 -a 3은 brute-force attack을 사용하겠다는 옵션들입니다. 뒤의 0000?d?d?d?d?d?d 는 패스워드인데 앞에 0이 4개 있고, 숫자로 6자리라는 뜻입니다. 아예 모른다는 것을 전제로 진행하는 것도 좋겠으나, 시간이 너무 오래 걸리는 관계로 패스워드의 일부를 주고 시작했습니다.


음, 아예 패스워드에 대한 힌트를 주지 않고 시작한 경우입니다... !? 1년이나 걸리네요...



전수조사할 범위를 잘 줄여서 던져주면 아래와 같이 빠르고 신속하게 잘 나옵니다. 


위 그림의 밑 부분과 같이 패스워드가 샥 나와버립니다!


[+] 추가로 hashcat을 같은 hccapx 파일에 대해 또 다시 돌리면 결과 값이 안나오는 경우도 있던데, 그 때는 --show 옵션을 주시면 예전에 구했었던 결과가 바로 나옵니다. 결과 값이 자동으로 어딘가에 저장되는 것 같습니다. 



아무튼 이처럼 WPA2 프로토콜을 사용하는 무선 네트워크의 패스워드를 알아내는 테스트였습니다. Wifi가 이전에 생각하고 있었던 것보다 더 취약하다는 것을 깨닫게 되는  순간이었네요.. ㅠ

앞으로는 Wifi에 비밀번호가 걸려있다고 너무 맹신하지는 말아야겠습니다...



[주의] 다른 사용자의 네트워크에 피해를 주는 행위 등 해당 내용을 악용하여 입힌 피해는 해당 기술을 사용한 사용자 본인에게 책임이 있습니다. 




반응형

'Computer Science% > Network' 카테고리의 다른 글

네트워크 공부  (0) 2018.07.15
가상 사설 네트워크 망 만들기 (feat. vm router 만들기)  (1) 2018.07.12
PCAPNG 파일  (0) 2017.10.30
패킷과 프레임의 차이  (0) 2017.10.17
Mac 이란?  (0) 2017.09.26