본문 바로가기

해커의 언어, 치명적 파이썬

5장 무선 기기 해킹

무선 공격 환경 구축하기


백트랙 5의 디폴트 드라이버

- 사용자가 무선 기기를 모니터 모드로 작동시키거나 프레임을 전송할 수 있게 함

- 카드에 고성능 안테나를 부착할 수 있게 해주는 외부 안테나 연결을 포함

 

Scapy로 테스트하기

깔끔하게 처음부터 실패!

test-sniff.py

무선 트래픽을 캡쳐할 수 있는지 간단히 테스트한다.

당연히 실패!

 

 

파이썬 블루투스 패키지 설치하기

파이썬으로 블루투스 관련 스크립트를 작성하기 위해서 Linux Bluez API에 대한 파이썬 바인딩을 활용한다.

근데 왜 unable하다는걸까?

이 장의 스크립트에서는 SENA Parani UD100 Bluetooth USB Adapter를 사용한다. 운영체제에서 이 기기를 인식하는지 테스트하기 위해 config 명령어인 hciconfig를 실행한다. 이 명령어로 블루투스 기기의 설정 내용을 출력할 수 있다.

그럼 이걸 하려면 저 기기가 필요하다는거 아닌가..?

 

 

 

WALL OF SHEEP-무선 비밀 수동적으로 리스닝하기


파이썬 정규표현으로 신용카드 정보 스니핑하기

정규표현은 텍스트에서 특정 문장열을 찾는 한 가지 수단이다. 파이썬에서 정규표현(re) 라이브러리를 통해 정규표현을 사용할 수 있다.

'.' 뉴라인 문자를 제외한 모든 문자
'[ab]' 문자 a 또는 b
'[0-9]' 0부터 9까지의 숫자
'^' 문자열 시작
'*' 앞의 정규표현을 0번 또는 그 이상 일치시킴
'+' 1번 또는 그 이상 일치시킴
'?' 앞의 정규표현을 0번 또는 1번 일치시킴
{n} 앞의 정규표현을 정확히 n번 일치시킴

americanExpressTest.py

아메리칸 익스프레스 신용카드는 34나 37로 시작하며 15개의 숫자로 구성되어 있다. 이 정규표현은 숫자가 반드시 3으로 시작되도록 하며, 그 뒤에는 4나 7이 올 수 있다. 그리고 13개 또는 그 이상의 숫자를 탐지하도록 해 총 15개의 숫자 길이를 탐지한다.

결과

프로그램이 정확하게 신용카드 정보를 식별하여 화면에 출력하는 것을 확인할 수 있다.

마스터카드와 비자를 구분하는 정규표현이다. 마스터카드는 51과 55사이의 숫자로 시작하고 열여섯 자리다. 비자는 4로 시작, 열셋 또는 열여섯 자리 숫자다. 마스터카드 정규표현은 5로 시작하여 1부터 5까지의 숫자 그 뒤에는 열네 자리 숫자가 온다. 모두 합치면 열여섯 자리의 길이가 된다. 비자의 정규표현은 4로 시작, 그 뒤에 열두 자리 숫자가 온다. 그리고 3개의 숫자가 0번 한 번 반복될 수 있도록 하여 열세 자리와 열여섯 자리 길이의 숫자를 모두 캡쳐할 수 있도록 한다.

 

 

호텔 투숙객 스니핑하기

hotelSniff.py

*트래픽을 스니핑하고 처리하기 위해 scapy 라이브러를 임포트했다.

결과

이번에도 실패!

 

무선 구글 키로거 만들기

구글에서는 검색 상자에 한의 키를 입력하는 순간마다 HTTP GET 요청을 전송하여 검색어를 입력하는 동안에 거의 바로 검색 결과를 볼 수 있다.

q= 쿼리. 검색창에 입력한 단어
pq= 이전의 쿼리. 현재 검색 바로 전의 쿼리
hl= 언어. 디폴트는 영어
as_epq= 정확한 구문
as_filetype= 파일 형식. zip과 같은 특정 파일 타입으로 제한함
as_sitesearch= www.2600.com과 과 같이 특정 사이트로 제한함

googleSniff.py
결과

또 실패! 같은 문제인 듯하다.

 

FTP 인증정보 스니핑하기

tcpdump를 통해 사용자 인증정보(USER root/PASS secret)을 탈취할 수 있다. 물론 실패했다.

이러한 인증정보를 캡쳐하기 위해서는 두 개의 특정 문자열을 찾아야 한다. 첫 번째 문자열은 USER와 사용자이름이고 두 번째 문자열은 PASS와 패스워드다.

 

ftp-sniff.py
결과

여긴 정말 줄줄이 사탕으로 안된다.

 

 

노트북 컴퓨터를 사용한 곳은? 파이썬 방식


802.11 프로프 요청 리스닝하기

sniffProbes.py

패킷에게 haslayer(Dont11ProbeReq)인지의 여부를 확인하여 802.11 프로브 요청만을 정리하게 한다. 만약 그 요청이 새로운 네트워크 이름을 포함하고 있다면 화면에 그 이름을 출력한다.

결과

넵 안됩니다.

 

 

숨겨진 802.11 네트워크 찾기

일부 무선 네트워크는 대부분의 네트워크와는 다르게 자신의 이름이 발견되지 않도록 SSID를 숨긴다. 숨겨진 네트워크는 AP가 802.11 비콘 프레임의 Info 필드를 공란으로 남겨둔다. 따라서 802.11 비콘 프레임 중 이름이 공란인 것을 찾으면 되기 때문에 숨겨진 네트워크를 찾는 것은 생각보다 쉽다.

def sniffDot11(p):
  if p.haslayer(Dot11Beacon):
      if p.getlayer(Dot11Beacon).info == '':
          addr2=p.getlayer(Dot11).addr2
          if addr2 not in hiddenNets:
              print '[-] Detected Hidden SSID: '+'with MAC:'+addr2

 

숨겨진 802.11 네트워크 식별하기

sniffHidden.py

숨겨진 이름을 찾기 위해서 802.11 비콘 프레임에 있는 MAC 주소와 프로브 응답에 있는 MAC 주소가 일치할 때까지 기다려야 한다. hiddenNets은 우리가 본 숨겨진 네트워크의 고유 MAC 주소를 추적, unhiddenNets은 발견한 네트워크를 추적한다. 이름이 공란으로 되어있는 프레임을 탐지하면 숨겨진 네트워크 배열에 추가하고 802.11 프로브 응답을 탐지하면 네트워크 이름을 가져온다. 그리고 hiddenNets 배열에서 이 값이 있는지 확인하고 unhiddenNets은 이 값이 포함되어 있지 않도록 보장한다. 만약 이 두 개 모두 참이면 네트워크 이름을 가져와 화면에 출력한다.

 

 

파이썬으로 UAV 제어하기


오픈소스이자 리눅스 기반의 UAV인 Parrot Ar.Drone은 아이폰/아이팟 애플리케이션으로 제어가 가능하고 암호화되지 않은 802.11 와이파이 망을 사용한다. 이 UAV는 아래 주소에서 300달러에 살 수 있다.

http://ardrone.parrot.com/ 

불러오는 중입니다...

 

트래픽 캡쳐와 프로토콜 분석하기

될리가 없다!

uav-sniff.py

이 스크립트는 5556번으로 전송되는 UDP 트래픽의 원본 콘텐츠를 출력한다. 이를 실행하면 UAV의 항해 프로토콜이 어떻게 작동하는지 대략적인 아이디어를 얻을 수 있다.

 

 

Scapy로 802.11 프레임 생성하기

환영 인사가 더욱 요란해졌다.

UAV 명령어가 있는 새로운 패킷을 생성해야 하는데 그러기 위해서는 현재 패킷이나 프레임에서 필요한 정보를 일부 복사해야 한다. Scapy는 이미 각 층(Radio Tap, 802.11, SNAP, LLC, IP, UDP 층)을 지원한다. 예로 Dot11 층을 검색하기 위해서는 Scapy에서 ls(Dot11)이라고 명령하면 된다.

새로운 패킷을 생성할 때 복사가 필요한 필드가 무엇인지 살펴볼 수 있다.

 

 

공격 최종 단계. UAV 비상 착륙하기

dup.py

 

FIRESHEEP 탐지하기


에릭 버틀러(Eric Butler)가 ToorCon에서 선보인 FireSheep은 클릭 두 번 만으로 페이스북, 트위터 구글 등 여러 개의 계정을 해킹할 수 있었다. 이 툴은 무선 랜 카드를 통해 웹사이트에서 제공하는 HTTP 쿠키를 수동적으로 리스닝했다. 만약 사용자가 안전하지 않은 무선 네트워크를 사용, 서버에서 HTTPS와 같은 수단으로 세션 보호를 하고 있지 않다면, FireSheep은 공격자가 쿠키를 재사용할 수 있도록 캡쳐한다.

 

Wordpress 쿠키 재사용 탐지하기

fireCatcher.py

이 스크립트를 실행하면 암호화되지 않은 무선 네트워크를 통해 표준 HTTP 세션으로 Wordpress 사이트에 연결하는 사용자들이 있다는걸 알 수 있다.

 

블루투스와 파이썬으로 스토킹하기


블루투스를 이용하기 위해서는 PyBluez Python 모듈이 필요하다. 이 모듈은 Bluez 라이브러리에서 제공하는 기능을 한층 더 확장시켜준다.

btScan.py
결과

블루투스 모듈이 없어 실패했다. 이 스크립트가 정상적으로 실행된다면 실제로 주변에 있는 블루투스 기기들을 탐지할 수 있다.

 

 

무선 트래픽으로 블루투스 주소 찾기

앞의 방법으로는 블루투스 모드가 discoverable로 되어있는 경우에만 찾을 수 있어 hidden 프라이버시 모드로 사용하고 있는 블루투스는 찾을 수 없다. 아래 스크립트로는 애플 아이폰의 숨겨져 있는 블루투스 라디오를 식별할 수 있게 된다.

find-my-iphon.py

이 스크립트로 아이폰의 802.11 무선 어댑터와 블루투스의 MAC 주소를 식별할 수 있다는 것을 알 수 있다.

 

 

블루투스 RFCOMM 채널 스캔하기

->RFCOMM 포트에 연결하기 위해 aRFCOMM-typeBluetoothSocket 생성

->공격대상의 MAC 주소와 포트가 저장되어 있는 튜플을 connect() 함수에 전달

->성공한다면 RFCOMM 채널이 열려있고 리스닝하는 것을 알 수 있음

->함수에서 예외 발생한다면 포트에 연결할 수 없다는 것을 알 수 있음

->각 30개의 RFCOMM 포트마다 이 과정 반복

rfcommScan.py

 

Bluetooth Service Discovery Protocol 사용하기

sdpScan.py

find_service() 함수 : 기록의 배열을 반환

-> 이 기록으로 호스트, 이름, 설명, 제공자, 프로토콜, 포트, 서비스 클래스, 프로파일, 서비스 ID 등의 정보를 각 블루투스 서비스마다 확인

 

파이썬 ObexFTP로 프린터 제어하기

->Obesftp로 프린터에 연결

->공격자의 컴퓨터에서 /tmp/ninja.jpg라는 이미지를 프린터로 전송

->파일 전송이 성공하면 피해자 컴퓨터에서 닌자 사진 출력

 

파이썬으로 전화기 블루버그하기

블루버그:

인증되지 않고 보안적으로 안전하지 않은 연결을 통해 휴대전화의 세부내용을 가져오거나 전화기에 직접 명령어를 전송. RFCOMM 채널을 사용하여 AT 명령어를 내려 원격에서 기기를 제어할 수 있도록 함.

'해커의 언어, 치명적 파이썬' 카테고리의 다른 글

6장 정보수집  (0) 2020.03.29
4장 네트워크 트래픽 분석  (0) 2020.03.15
3장 포렌식 수사  (0) 2020.03.15
2장 침투 테스트  (0) 2020.03.13
1장 소개  (0) 2020.03.13