본문 바로가기

Security

무선 기기 해킹

 

  # 무선 공격 환경 구축하기

   - 무선 트래픽을 스니핑하고 802.11 프레임을 전송하는 코드를 만듦.

   - HAWNU1(Hawking Hi-Grain USB Wireless-150N Network Adapter with Range Amplifier)를 사영하여 스크립트를 

     테스트함.

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

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

      >추가적으로, 카드에 성능 안테나를 부착할 수 있게 해주는 외부 안테나 연결을 포함하고 있음.

 

   1) Scapy로 테스트하기

     - aircrack-ng를 사용하여 카드를 모니터 모드로 설정함.

     - iwconfig를 통해 무선 어댑터가 wlan0인것을 알 수 있음

     - airmon-ng start wlan0이라는 명령어를 통해 모니터 모드로 설정함

        > mon0이라는 새로운 어댑터가 생성됨.

현재 무선 어댑터가 없음.
시작할 무선 어댑터가 없음..

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

python-bluez API 설치
bluetooth 패키지 설치
obexftp 설치

  - CSR(Cambridge Silicon Radio)칩셋을 꽂고, 운영체제가 인식하는 지 확인함.

  

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

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

   - 파이썬 정규표현 

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

ex. 3[47][0-9]{13} : 반드시 3으로 시작되도록하며, 그뒤에는 4나 7이 올 수 있고, 그 뒤에는 13개의 숫자가 오도록 함.

                        = 34, 37로 시작하며 총 15개의 숫자로 구성되어 있음. 

임의의 카드번호를 입력하고 해당 카드번호가 있는 지 확인하는 스크립트

 

 2) 호텔 투숙객 스니핑하기

  - sniff()로 트래픽을 리스닝함

  - TCP 트래픽만 필터링하여 모든 패킷을 findGuest()로 전송함

  - findGuest()가 패킷을 전송받으면 해당 패킷에 개인 정보가 저장되어 있는지 확인함.

  - 페이로드의 콘텐츠를 raw 변수에 복사하여 정규표현을 만들어 고객의 성과 룸 번호를 처리함.

    성 구분 정규표현 : LAST_NAME으로 시작하고 &로 끝나는 모든 문자열

    룸 번호 정규표현 : ROOM_NUMBER로 시작하는 모든 문자열

    ※ 실제 이러한 정보를 수집행위는 법에 위반 될 수 있어 코드는 올리지 않는 것으로!

 

 

 3) 무선 구글 키로거 만들기

  - 브라우저 검색 할 때 : HTTP GET 요청

  - q= 가 오는 것으로 검색이 시작되고 &로 끝남

  - pq=는 바로 이전의 검색을 의미함

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

  - 웹 브라우저는 스페이스를 +또는 %20로 인코딩함. 따라서 이 메시지를 정확하게 변환하기 위해서는 +나

    %20을 공란으로 변환해야함.

  - sniff() : TCP와 80번 포트의 트래픽만 캡쳐하도록 만듦.(443번 포트는 암호화되어 있어 별로 도움 안됨)

 

 ** 현재 wlan0을 인식하지 못해 브라우저 트래픽을 읽어오지 못함...

 

  4) FTP 인증정보 스니핑하기

    - FTP(파일 전송 프로토콜)은 사용자 인증정보를 보호할 수 있는 암호화 채널이 없음.

    - 공격자는 사용자가 암호화되지 않은 네트워크로 이 정보를 전송하는 순간 손 쉽게 인증정보를 탈취할 수 있음.

    - 인증정보를 캡쳐하기 위해서 두 개의 특정 문자열을 찾는다(1. USER와 사용자이름, 2. PASS와 패스워드)

    - tcpdump와 마찬가지로 tcp 패킷의 데이터 필드에는 이러한 정보가 포함되어 있음.

   

 

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

  1) 802.11 프로브 요청 리스닝하기

   - 컴퓨터와 휴대전화는 끊임없는 통신을 제공하기위해 선호 네트워크 목록을 유지하는 경우가 많음.

   - 목록에는 과거에 성공적으로 연결한적이 있는 무선 네트워크의 이름들이 저장되어 있어 이후 컴퓨터는 자주 802.11       프로브 요청을 전송하여 목록에 있는 네트워크 이름을 검색함.

  > 패킷에서 haslayer(Dot11ProbeReq)여부를 확인하여 802.11 프로브 요청만을 정리함.

  > 만약 그 요청이 새로운 네트워크 이름을 포함하고 있따면, 화면에 네트워크 이름을 출력함.

 

 2) 숨겨진 802.11 네트워크 찾기

  - 대부분의 네트워크는 자신의 이름을 공개하지만, 일부 무선 네트워크는 네트워크 이름이 발견되지 않도록 SSID를 숨김.

  - 802.11 비콘 프레임의 Info 필드에는 일반적으로 네트워크의 이름이 포함되어 있음.

    > 숨겨진 네트워크의 경우 AP가 이 필드를 공란으로 남겨둠 > 공란인 것을 찾아 AP의 MAC주소를 출력함.

 

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

  - AP가 802.11 비콘 프레임의 info 필드를 공란으로 남겨두기는 하지만 프로브 응답에서는 이름을 전송함.

  - 프로브 응답은 보통 클라이언트가 프로브 요청을 전송한 후에 발생함.

  - 숨겨진 이름을 찾기 위해서는 802.11 비콘 프레임에 있는 MAC주소와 프로브 응답에 있는 MAC 주소가 일치할 때

    까지 기다려야 함.

 

 # FIRESHEEP 탐지하기

  1) Wordpress 쿠키 재사용 탐지하기

   - 세션 쿠키를 포함하고 있는 Wordpress HTTP 세션을 처리하는 파이썬 스크립트

   - 이 공격이 암호화되지 않은 세션에서 발생하기 때문에 TCP 포트 80번의 HTTP프로토콜만 필터링 함.

   - Wordpress 쿠키와 일치하는 정규표현을 살펴보면 쿠키의 내용을 한번에 화면에 출력할 수 있음.

   - 클라이언트 트래픽만 살펴보기위해 "Set"을 포함하고 있는 서버의 쿠키는 출력하지 않음.

  - firesheep을 사용하고 있는 공격자를 탐지하기 위해서는 다른 IP에서 이 쿠키값을 재사용하고 있는 지 확인해야 함.

 

>> 위의 스크립트 수정

  - sessionID로 인덱화한 해시 테이블을 생성하여 Wordpress 세션을 보면 값을 해시 테이블에 저장하고, 해당 키와

    관련된 IP주소를 저장함. 

  - 이전에 저장했던 키와 중복되는 키를 발견하여 충돌이 일어난다면 두 개의 다른 IP에서 동일한 쿠키를 사용하고 

    있다는 것을 알게 됨 -> Wordpress 세션 탈취하려는 것을 탐지함.

 

 

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

 

1) 주변 블루투스가 켜있는 장치 탐색하기

켜있는 휴대폰의 MAC주소를 불러옴.
btScan.py

 >> 'hcitool scan'이라고해도 bluetooth 장치를 검색할 수 있음.

 

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

  - 앞 경우에서는 장치검색이 가능한 장치들만 검색할 수 있음 > hidden privacy 모드로 사용하고 있으면 검색 불가능.

  - hidden 모드에서 아이폰의 블루투스 공격하는 방법.

    > 802.11 무선 어댑터의 MAC 주소에 1을 더하면 아이폰을 위한 블루투스 MAC주소를 얻을 수 있음.

    > 802.11 무선 어댑터는 MAC주소를 보호하기 위한 2개층 통제를 사용하지 않기 때문에 단순히 스니핑하여 

      그 정보를 가지고 아이폰의 블루투스 MAC 주소를 계산 가능함.

 

  - MAC 주소

    > 처음 3바이트는 OUI(Oragizational Unique Indentifier)라고 불리는 제조업체를 나타내며 필터링됨.

    > 기기 검색 중 OUI 데이터베이스가 3바이트라면 애플의 것임을 알 수 있음.

    > 처음 3바이트가 일치하는 MAC주소를 가진 802.11 프레임을 리스닝하여 만약 탐지가 되면 그 결과를 화면에

     출력하고 802.11 MAC주소를 저장함.

    > 이를 통해 아이폰의 802.11 무선 어댑터의 MAC주소를 식별함.

    > 아이폰의 블루투스의 MAC주소는 무선어댑터 MAC주소 + 1이므로 아이폰의 블루투스 MAC주소 역시 구함.

 

  - MAC 주소를 가지고 있는 기기가 실제로 존재하는 지 알아보기 위해 장치이름검색을 실행할 수 있음.

    > hidden 모드에서도 이 요청에 응답할 수있음

      (비활성화되어 있어도 해드셋이나 자동차의 핸드프리와 연결되어 있는 경우 등은 hidden모드에서도 응답함).

    

 3) 블루투스 RFCOMM 채널 스캔하기

     - RFCOMM 연결은 TCP 소켓 연결과 매우 유사함.

     - RFCOMM 포트에 연결하기 위해서 aRFCOMM-typeBluetoothSocket을 생성함.

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

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

 

모두 닫혀있음.
rfcommScan.py

 

 4) Bluetooth Service Discovery Protocol 사용하기

  - SDP(Bluetooth Service Discovery Protocol) : 블루투스의 종류와 기기에서 제공하는 서비스를 보여줌.

     > SDP의 프로파일을 살펴보면 각 블루투스 프로토콜과 포트에서 실행 중인 서비스에 대한 설명을 볼 수 있음.

  - find_service() : 호스트, 이름, 설명, 제공자, 프로토콜, 포트, 서비스 클래스, 프로파일, 서비스 ID 등의 기록을 반환함.

 

 

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

  - 블루버그 공격 : 인증되지 않고 보안적으로 안전하지 않은 연결을 통해 휴대전화의 세부내용을 가져오거나

    휴대전화에 직접 명령어르 전송함. 이 공격은 RFCOMM 채널을 사용하여 AT 명령어를 내려서 원격에서 기기를

    제어할 수 있도록 함.

     > 공격자는 문자 메시지를 읽고 적을 수 있으며, 개인 정보를 수집하고 강제로 특정 번호로 전화를 걸도록 만들

     수 있음.