[참고: http://grayhash.com/files/netsec.pdf (firmware 획득방법 사진)]

[참고: http://www.powerofcommunity.net/poc2012/re&si.pdf (전반적인 프로세스 참고)]

해당 포스팅은 firmware의 취약점을 간략하게 분석하고 firmware이미지를 추출하는 소개정도로 작성하였습니다.

자세한 내용은 생략되어 있으니 자세한 내용을 원하시는 부분은 댓글주세요.


Firmware 취약

  

Firmware 정의

S/WH/W의 중간에 해당하는 것으로 S/WH/W

일반적으로 롬(ROM)에 기록된  H/W를 제어하는 *마이크로프로그램의 집합

*마이크로프로그램: 컴퓨터의 중앙연산처리장치가 지시 받은 명령을 정확하게 수행하기 위해 중앙처리장치가 하는 일련의 제어 기능을 프로그램으로 만들 필요가 있다. 이 때 만들어진 프로그램을 마이크로프로그램이라고 한다.


Firmware 취약점 사례

IoT보안에서 Firmware 취약점 위협 


Firmware 분석

 

Firmware 적용 분야

-Networking- Routers, Switches, NAS, VoIP Phones
-Surveillance- Alarms, Cameras, CCTV, DVRs, NVRs
-Industry Automation- PLCs, Power Plants, Industrial Process Monitoring and Automation
-Home Automation- Sensoring, Smart Homes, Z-waves, Philips Hue
-Whiteware- Washing Machine, Fridge, Dryer
-Entertainment gear- TV, Stereo, Game Console, MP3, Camera, Mobile Phone, Toys
-Other Devices- Hard Drivers, Printers
-Cars
-Medical Devices

 …..


Firmware 구조

 -Firmware 복잡도에 따른 분류방법
-Full-blown(Full-OS/kernel + Bootloader + libs + apps)
-Integrated(apps + OS-as-a-lib)

-Partial updates(apps or libs or resources or support)

 Firmware 획득 방법

-제조사에서 공개하는 firmware 다운로드
-자동/수동 업데이트 시 packet Sniffing
-UART 포트 접속
-논리적 취약점을 이용한 Shell 접근 권한 획득 후 추출(Partition dump, /dev/mtdblock)
-Flash Memory dump
-JTAG 포트 접속

Firmware Hacking Process


1. Firmware 획득

   획득 방법에는 여러가지 방법이 있지만 별도의 장치가 필요 없는 제조사 제공 firmware로 진행 

2. 분석 tool 사용

-BinwalkBinwalk는 firmware 이미지로부터 분석추출리버스엔지니어링을 하기 위해 설계된 firmware 분석 tool

-usage: kali는 기본 내장ubuntu는 별도 설치 필요

-$binwalk <firmware image>

위의 경우 LZMA압축을 사용하고, Squashfs 파일 시스템을 사용하는 것을 확인할 수 있다.


1. 추출 tool 사용

-Firmware-mod-kit: 리눅스 기반으로 다양한 파일포맷을 지원하는 스크립트를 가지고 있음
(cramfs, jffs2, lzma, squashfs etc)

-ERESI framework: multi-architecture binary를 분석하는 리버스 엔지니어링 소프트웨어

-signsrch: file 내부의 signatures를 찾는 툴

-offzip: raw files, packets, zip archives등 데이터를 포함하는 zipunpack하는 매우 유용한 툴

-TrID: binary signatures로부터 파일 타입을 알아낼 수 있도록 설계된 툴

-PFS: Benq ESG 103, NDC NWH8018과 같은 라우터의 이미지 분석에 사용되는 툴

-ardrone-tool: A.R.Drone을 위한 툴

-UnYAFFS: 파일시스템 중 yaffs으로부터 파일을 추출하기 위한 프로그램

-Squash-tools: SquashFS을 위한 툴


-Firmware-mod-kit사용

https://code.google.com/archive/p/firmware-mod-kit 에서 다운로드

리눅스 기반이기 때문에 우분투에서 사용

다운로드 한 tar 파일을 압축 해제하면 왼쪽과 같이 나온다앞서 다운로드 한 a1004_kr_9_912.bin 파일을 복사

추출은 extract-firmware.sh <firmware.bin>

Re-building은 build-firmware.sh [-nopad] [-min]

-The optional –nopad switch will instruct build_firmware.sh to NOT pad the firmware up to is original size.
-The optional –min switch will use the maximum squashfs block size of 1MB.
Example)

$./extract-firmware.sh <firmware.bin>
$
cp new-telnetd fmk/rootfs/usr/sbin/telnetd
$./build-firmware.sh

$./extract –firmware.sh a1004_kr_9_912.bin

오류 발생 필수 라이브러리 필요(LZMA 압축 방법을 사용하였기 때문에 dev라이브러리 필요)

$sudo apt-get install git build-essential zlib1g-dev liblzma-dev python-magic

성공하면 아래와 같이 firmware extraction successfull이 출력된다.

위의 fmk폴더가 생성된 것을 확인할 수 있다. 더블클릭하면 image_parts, logs, rootfs 폴더가 있다.

image_parts폴더에는 header와 rootfs이미지가 있고, logs에는 추출할 때의 로그가 있다. 마지막으로 rootfs의 경우 firmware 이미지의 파일시스템을 확인할 수 있다.


1. Find bugs and vulnerability

취약점을 찾는 단계이다. 해당포스팅에는 간략하게 설명하는 것으로 제한한다.

공유기에서 관리자 페이지로 접속하면 아래와 같이 cgi-bin폴더 안에 timepro.cgi를 호출한다.

실제 펌웨어 안에 cgibin 내부에 timepro.cgi를 확인할 수 있다. 바이너리 덤프는 포스팅에서 제외(해보면 호출 프로세스 확인)

공유기 쉘로 접근방법이다.

아래와 같이 cgi-bin/d.cgi로 접근 시 화면이 출력된다.

Command Name에 입력하고자 하는 명령어를 입력하고

아래 password에는 #notenoughmineral^ 을 입력하면 된다.

아래는 ls의 결과 화면이다.


물론 cat명령어도 된다.


공유기 방화벽 또한 변경할 수 있다.



해당 부분은 포스팅에서 제외

위에서 언급했듯이, 수정 후 ./build-firmware.sh 하면 리패키징됨.


실제 거주하는 곳에서 무선공유기를 검색하면 옆집, 윗집 공유기가 검색된다.

관리자 page를 포함하여 default id와 passwd의 경우가 많다. 

관리자 page에는 펌웨어 업데이트 기능이 있는데 공격자가 악용하여 펌웨어에 악성코드나 백도어를 넣어 업데이트 한다면 위험하다.


이를 위해서는 관리자 id와 passwd를 꼭 바꾸어놓자. 

또한 원격에서 접근할 수 없도록 아래에 보이는 원격지원 부분에 중단으로 바꾸고 적용하자.

설치 전 고민이 있었다.

라즈베리 파이용으로 제공되는 것을 설치하여 라즈베리로 이용할까.

안드로이드 루팅된 단말에 설치하여 사용할까.

위의 고민은 라즈베리파이 터치 모니터가 대략 10만원이라는 것을 알고 난 후 안드로이드 단말에 설치하기로 하였다.


대상단말

갤럭시 S3

설치 전 요구사항

-루팅 된 단말 (http://kkn1220.tistory.com/38 참고)

-busybox

-linux deploy

-android vnc viewer

-10기가 정도의 여유 공간

-빠른 네트워크

(어느글에서는 Wi-Fi 로만 다운이 된다고 함, 또 어느 글에서는 사용자 데이터의 무리가 갈 수 있기 때문에 Wi-FI로 하라고함
그래서 그냥 찜찜해서 Wi-Fi로 진행하였음)

-인내심


설치해보자!

맨 위의 것을 다운로드 받으면 된다.

중간 사진을 보면 Installation path가 있는데 나는 처음에 칼리 이미지를 다운받고 해당 경로를 입력하는 줄 알았다...
그냥 설치 경로를 입력해주면 된다. astro나 안드로이드 파일 탐색기를 보면 해당 경로를 확인할 수 있다. 

이것 저것 글을 봤을 때 sdcard를 하라는둥 legacy로 하라는둥 말이 많았지만 해당 단말에서는 위의 경로로 되었다.

Distribution 은 kali linux로 변경

다른 것은 건드리지 않고 맨 우측사진의 Install을 클릭했다.

수정사항

1) Distribution

첫 번째 결과 실패

E: The selected extractor cannot be found: ar

무엇이 문제일까? 

찾아보다가 busybox 문제인 것을 확인하였다. BusyBox stericson not supported ar and other required functions.

stericson busybox는 ar을 지원하지 않는다....... 지우고 meefik's 의 busybox를 설치하였다. 


If system BusyBox not working:

1) Install compatible BusyBox (https://github.com/meefik/busybox/releases)

2) Run BusyBox app.

3) Run Linux Deploy app and change "Settings -> BusyBox directory" to /data/data/ru.meefik.busybox/files/bin

4) Run "Settings -> Update ENV".

linux deploy를 탭하면 설정이 나오는 데 위의 방식대로 경로를 추가하고 업데이트를 해주었다.

수정사항

1) BusyBox directory

-> /data/data/ru.meefik.busybox/files/bin

-> Update ENV 해줘야됨

두 번째 결과 실패

E: linux deploy making new disk image (512mb) fail

ahㅏ......... 위의 준비사항에 끈기의 이유이다.

별짓을 다하였다. 그러던 중 http://forum.xda-developers.com/showthread.php?t=2400638 의 글을 보니 이미지 파일 크기를 7128로 하라고 한다. 

위에서 변경한 것 다 필요없다. Linux deploy 삭제 후 다시 다운로드

원래 초기는 0으로 auto로 정해주는 사이즈로 하는데 맨 위 가운데 사진은 7128로 설정하고 캡처를 하였기에 위의 결과로 출력된 것이다. 원래는 0이다.

수정사항

1) 다시 다운로드하였기 때문에 distribution kali linux로 변경

2) image size

7128로 해준 결과 done이 출력되었다.

쭉쭉쭉 잘넘어간다~~~~~

이전 버전의 linux deploy는 end가 출력되었다고 하는데 내꺼는 <<< install로 출력되었다.

end표시인듯? 

start버튼을 눌러준다.

vnc view로 연결하였다. 

아래의 사진처럼 kali가 드디어 설치가 되었다.

 번째 결과 실패

kali components 설치안함...


그렇다. 위의 포럼에서 가르쳐준거는 이미지파일만 바꾸고 나머지는 default로 하면 된다고 하였기에 이미지 파일 사이즈만 변경하고 설치하였더니 메뉴가 없다...


default는 x server와 kali components에 체크가 안되어있다...체크를 해주자..

수정사항

1) Components

+ X server, Kali components


네 번째 결과 실패

forum에서 GNONE으로 설치하라고 해서 했는데 view가 이상한건지 화면이 출력이 안됨...
default인 LXDE로 다시 설치....


드디어 제대로 된 칼리리눅스 설치 완료

해상도가 720*1280 이라 화면을 가로모드로 했을 때 안습이었다...

linux deploy 에서 GUI Setting부분을 수정해준다.

1280*720으로 바꿔주었다.

끝....

결론

1) linux deploy 다운로드

2) Distribution -> kali linux로 변경

3) Component -> X server, Kali components 추가

4) 우선 설치해보자(사용자 단말에 따라 image size 허용이 다를 수 있기 때문에)

5) 에러메시지 확인(에러 없으면 땡큐~)

The selected extractor cannot be found: ar

-> busybox meefik's 로 다시 설치

linux deploy making new disk image (512mb) fail

-> image size 7128로 변경

중요)에러메시지 출력 후 설치 path로 가서 linux.img가 있으면 꼭 지우고 다시 설치할 것

6) linux deploy 어플에서 start버튼 클릭
7) vnc view 다운로드 후 칼리 접속
8) 이용이 끝나면 vnc view 종료하고 linux deploy어플에서 stop누르면 마운트 해제됨

시간 오래걸리니 설치하면서 할 일 하시면 됩니다.

대략 1시간 소요

이걸로 무슨 부귀영화를 누리려고 시작했는지는 모르겠으나 
설치 완료.....

'해킹 > 해킹' 카테고리의 다른 글

firmware hacking process  (8) 2016.03.23
IP fragmentation을 이용한 공격  (0) 2016.02.12
DoS(Denial of Service) 소개 및 공격유형  (0) 2016.02.12
스푸핑 (Spoofing) 소개  (0) 2016.02.11
스니핑 도구 dsniff 소개  (0) 2016.02.02

http://www.cse.scu.edu/~tschwarz/COEN252_09/Lectures/IPTraffic.html 참고

IP fragmentation 정의

- IP 프로토콜은 IP패킷을 작은 몇개의 패킷으로 나누어 전송되고 목적지 시스템에서 재조합하는 것을 허용하는데 이러한 과정을 fragmentation이라고 부른다. IP fragmentation은 데이터그램이 네트워크를 통해 전송될 때, 전송되는 IP 데이터그램의 크기가 전송될 수 있는 최대크기 보다 클 경우 발생한다.

- ethernet에서 전송 가능한 IP 데이터그램의 최대크기(MTU)는 1,500바이트이다. 만약 1,500바이트보다 큰 데이터그램이 전송된다면 fragmentation이 발생하게 된다.


IP fragmentation 예제


Kali linux(192.168.100.14)에서 target pc(192.168.100.5)에 4000바이트의 ICMP데이터를 전송하였다.


데이터그램의 총 크기는 4,028(4000+20(ip header)+8(icmp header))바이트가 된다. 

그러나 데이터그램의 최대 크기는 1,500바이트이기 때문에 fragment가 발생한다.

아래는 예이다. 자세한 내용은 최상위 첨부를 참고하면 된다.

다른건 위의 것과 동일하고 다만 ID만 54321에서 40818로 생각하면 되겠다.


요약

1. 공격자는 타겟에 4,000바이트의 ICMP 데이터를 전송하였다.

2. 데이터 그램의 총 바이트는 4,028이 된다.(4,000+20(ip header)+8(icmp header))
3. MTU가 1,500바이트이기 때문에 3개로 fragment로 쪼개진다.

  1)첫 조각1,500= 20(ip header)+8(icmp header)+1,472(data)    //남은 데이터 수: 2,528

  2)두 번째 조각1,500= 20(ip header)+1,480(data)              //남은 데이터 수: 1,048

  3)세 번째 조각1,068= 20(ip header)+1,048(data)

  4,068-4028=40(ip header*2)


공격 유형
(그림 출처: http://www.slideshare.net/gofortution/best-3178984)

1) tiny fragment attack

- tiny fragment는 최초의 조각을 아주 작게 만들어서 네트워크 침입탐지시스템이나 패킷 필터 장비를 우회할 수 있다.
TCP 헤더(default 20바이트)가 2개의 조각으로 나뉘어질 정도로 작게 쪼개서 목적 포트가 두 번째 조각에 위치하도록 함

  침입탐지시스템이나 패킷필터 장비에서 포트번호를 확인하는데 작게 쪼개어진 첫 번째 조각을 통과 시킨다. 또한, 실제 포트가 포함된 두 번째 조각을 검사 없이 통과시키기 때문에 서버에서 조각은 재 조합이 되어 공격자는 무사히 연결할 수 있다.  



2) fragment overlap

- fragment overlap공격을 위해 공격자는 두 개의 조각을 생성한다.
첫 조각에는 필터 장비에서 허용하는 예를 들면 80포트를 가진다. 그리고 두 번째 조각에는 offset을 아주 작게 하여 재 조합 시, 두 번째 조각을 첫 번째 조각의 일부분을 덮어쓰게 한다. 일반적으로 첫 조각의 포트 번호를 포함하여 덮어쓴다.

침입 장비에서는 첫 번째 조각이 허용된 포트번호 80이기 때문에 통과시키고 두 번째 조각은 이미 허용된 id이기 때문에 역시 통과시키게 된다. 통과되면 재 조합 시 첫 번째 조각을 덮어쓰기 때문에 두 번째 포트번호의 포트번호로 전달되게 된다.

위의 그림을 보면 80번 포트는 OK를 해서 통과되고 이후 2번째 조각의 23번 포트로 1번포트를 덮어쓰고 서버 23번 포트의 응용프로그램으로 전달되는 것을 의미한다.


3) DoS공격

(http://kkn1220.tistory.com/75 참고)

DoS(Denial of Service) 정의

  • DoS공격은 상대방 서버가 서비스를 하지 못하도록 하는 서비스 거부 공격
  • 공격대상이 수용할 수 있는 능력 이상의 정보나 사용자 또는
    네트워크의 용량을 초과시켜 정상적으로 작동하지 못하게 함
  • 공격의 종류에는 특정 프로그램의 취약점을 이용한 공격, 네트워크
    특성상 발생하는 취약점 공격, 무차별 공격, 서버 및 시스템 마비 등
  • 분산 환경에서 발생할 수 있는 DoS공격을 DDoS(Distributed DoS)라 함












DoS 공격 유형


<출처: University of TORONTO>

1) Ping of Death

- Ping of Death 공격의 기본은 Ping을 이용하여 ICMP 패킷을 정상적인 크기보다 아주 크게 만드는 것

 이렇게 만들어진 패킷은 네트워크를 통해 라우팅되어 공격 네트워크에 도달하는 동안 아주 작은 조각(fragment)이 됨

 자세한 사항은 (http://kkn1220.tistory.com/76 참고)

 공격 대상 시스템은 이렇게 작게 조각화된 패킷을 모두 처리해야 하므로 정상적인 Ping의 경우보다 많은 부하가 걸림

- RFC-791 Internet Protocol에 따르면 헤더를 포함한 IP 패킷의 최대길이는 65,535(=16비트-1=2^16-1)까지로 제한되어 있다.

Ping of Death

 결국 공격자가 65,535보다 큰 사이즈의 패킷을 보내게 되면 수많은 조각이 생성되고 해당 Buffer가 overflow되어, 대상 시스템 및 서버는 충돌이 일어난다.

 통상적으로 IP 패킷의 헤더는 특별한 옵션이 없으면 20바이트를 보내고, ICMP ECHO request 패킷은 8바이트의 ICMP 헤더를 사용하기 때문에 실제 데이터 길이의 최대값은 65,507(65,535-20-8)바이트가 된다. 하지만 요새 시스템은 비정상적으로 큰 ICMP 데이터를 발생시키지 못하도록 하기 때문에 많이 막혀있다.

 기본적인 ping을 살펴보자

192.168.100.3(window)에서 192.168.100.5(target-ubuntu)로 ping을 보내고 kali에서 tcpdump로 5번을 지켜보았다.
귀찮아서 3번에 tcpdump를 안한것은 아니다.

기본적으로 ping은 32바이트(window)를 보낸다.(리눅스의 경우 56) 
그렇기 때문에 위에서 설명했듯이 32+20(ip header)+8(request packet) 총 60바이트의 길이가 출력될 것이다.

즉, 총 length는 60을 확인할 수 있다.


앞서 요새 많이 막혔다고 하는데 실제로 다음과 같다.

실제 보낼 수 있는 데이터 길이의 최대값은 65,507(65,535-20-8)바이트이다.

윈도우의 경우 65500을 넘지 못한다.

kali의 경우 65507까지만 허용한다.

65,507을 넘을 경우 허용하지 않는다.

jolt2라는 툴을 사용하면 된다고 몇 개의 다큐먼트들이 있지만 다음에...(윈도우 NT, 2000 시스템 가능 확인 필요)

2) SYN Flooding (그림 출처: wiki)

- SYN flooding이란 SYN을 넘치게 하는 것을 뜻한다. 즉 클라이언트가 서버의 SYN Queue를 overflow시켜 서버를 오동작하거나 충돌시키는 공격이다.

위의 그림은 정상적인 3-way handshake 내용이다. 

1. 클라이언트 alice는 서버에 접속을 요청하는 SYN패킷을 보낸다. 이 때 상태는 SYN/ACK 응답을 기다리는 SYN_SENT이다.

2. 서버는 SYN요청을 받고 alice에게 요청을 수락한다는 ACK와 SYN flag가 설정된 패킷을 발송하고 alice의 ACK응답을 기다린다. 이때 서버의 상태는 SYN_RECEIVED이다.

3. alice는 서버에 ACK를 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 된다. 서버의 상태는 ESTABLISHED이다.

위의 그림은 SYN flood공격 모습이다. 

1. attacker는 스푸핑된 ip를 가지고 서버에 다수의 패킷을 보낸다. 하지만 ACK를 응답하지 않기 때문에 이를 half-opened라 부른다.

2. 서버는 스푸핑된 ip가 네트워크에 존재하지 않기 때문에 SYN/ACK패킷을 보낼 수 없고, 서버의 자원은 계속 소비하게 된다.
즉 SYN Queue의 내용은 계속 유지된다.
3. 합법클라이언트 alice는 서버에 연결을 시도하지만 거절당하게 된다.

4. attacker는 무한으로 보내게 되면 결국 서버의 Queue는 추가만 되기 때문에 overflow가 발생하게 된다.


공격: kali linux(192.168.100.14) -> target pc(192.168.100.5), fake ip(192.168.100.50)

위는 kali에서 기본적으로 제공하는 hping3으로 192.168.100.5에 192.168.100.50이라는 src ip로 80번의 목적지 포트에 SYN패킷을 초당 10개씩 보내라는 것을 의미한다. (hping3 소개: http://kkn1220.tistory.com/99 참고)

tcpdump로 확인 결과 flag가 S만 출력되는 것을 확인할 수 있다.


3) land attack (그림 출처: http://docstore.mik.ua/orelly/networking_2ndEd/fire/ch04_08.htm)

- 패킷을 전송할 때 출발지 IP주소와 목적지 IP주소 값을 타겟의 IP주소 값으로 똑같이 만들어서 타겟으로 보낸다.

- 시스템은 처음 시도된 SYN에 대한 reply 패킷을 출발지 IP 주소값을 참조하여 그 값을 목적지 IP주소 값으로 설정하여 패킷을 보낸다. 그러나 이 값은 자기 자신의 IP 주소값이기 때문에 네트워크 밖으로 나가지 않고 자기 자신에게 돌아오며 land 공격은 동시 사용자를 점유하는 것 동시에 CPU부하 또한 올리게 된다.

Figure 4-9

공격: kali linux(192.168.100.14) -> target pc(192.168.100.5)

kali에서 기본적으로 제공하는 hping3을 가지고 출발지ip와 목적지ip를 타겟ip로 설정하고 포트를 100으로 설정하였다.

첫 패킷을 확인하면 192.168.100.5.100 > 192.168.100.5.100 을 확인할 수 있는데 land attack 패치 이후 이후 패킷에서는 src port가 자동 증가되어 land attack에 피해를 입지 않는 것을 확인할 수 있다.


4) smurf attack (그림 출처: https://blog.cloudflare.com/deep-inside-a-dns-amplification-ddos-attack)

1. smurf공격은 공격자가 타겟의 IP로 스푸핑한 후, 타겟이 속해 있는 broadcast network로 broadcast 요청을 보낸다.

2. ICMP request를 수신한 컴퓨터들은 타겟에 reply 패킷을 보낸다.

3. 대량의 ICMP reply를 수신한 타겟은 과부하 상태가 된다.

Deep Inside a DNS Amplification DDoS  
Attack

위의 그림을 보면 공격자는 라우터에 타겟의 주소 9.9.9.9로 스푸핑하여 요청한다. 라우터는 각각 디바이스에 타겟의 IP로 request요청을 한다. 결국 각각의 디바이스들은 타겟에 reply 패킷을 보내게 된다.

hping3 [broadcast ip] -a [target ip] [packet type] --flood

kail#hping3 192.168.100.255 -a 192.168.100.5 --icmp --flood

kali에서 tcpdump결과 5번 target에서 255번으로 request를 하였고, 실제로 8번과 6번이 현재 연결되어 있는데 reply응답을 한 것을 확인할 수 있다.

실제로 위 명령을 실행한 결과 나의 컴퓨터는 컨트롤 c로 멈추기 전 동안 정상적이지 못했다... 직접 해보시길.......


teardrop 업데이트 필요

Spoofing

- 스푸핑(Spoofing)이란 '속이다'라는 의미를 가짐

IP address, host name, Mac address 등 여러가지를 속일 수 있고, 스푸핑은 이런 속임을 이용한 공격을 총칭

인터넷이나 로컬에서 존재하는 모든 연결에 스푸핑이 가능하며, 정보를 얻어내는 것 이외에 시스템을 마비시키는 것이 가능

- 일반적으로 TCP/IP 네트워크 환경에서의 IP주소나 ARP주소 등으로 상대를 인식하는 취약성을 가지고 있기 때문에 내가 아닌

남으로 위장하는 것이 수월하고 현재까지도 문제점으로 지적되고 있다.


1. ARP 스푸핑 공격


1) B(Attacker)는 A와 C에게 자신의 MAC주소로 속이고 A와 C의 컴퓨터로부터 패킷을 받게됨

2) A와 C의 패킷을 읽은 후 정상적으로 상대방에게 패킷을 보내주면 A와 C는 정상적으로 주고 받았다고 생각하게 됨


아래는 arp spoofing 전의 A에서의 arp테이블이다.

공격자 B는 A에게 MAC주소를 속이게 된다.

A에서 다시 보면 B와 gateway의 맥주소가 같음을 확인할 수 있다.

이 후 A에서 전달되는 패킷은 B에서 확인할 수 있음을 보여주는 예이다.

사용 예는 http://kkn1220.tistory.com/72 를 참고하면 되겠다.


2. IP 스푸핑 공격

- IP 스푸핑은 시스템간의 신뢰 관계를 이용한 것으로 관계가 설정된 상태에서 클라이언트 시스템은 서버에 접속할 때, 자신의 IP주소로 인증을 하고 별도의 패스워드 없이 로그인이 가능하도록 만든 것이다.

 원격지 접속 서비스 중 r로 시작하는 rsh, rcp 등의 명령이 주로 IP기반으로 인증하는 서비스

- TCP/IP 프로토콜의 약점을 이용한 IP spoofing 방법

1) Sequence number guessing

2) SYN flooding

3) Connection hijacking

4) Connection killing by RST

5) Connection killing by FIN

6) SYN/RST generation

7) killing the INETD(네트워크데몬)

8) TCP window spoofing

일반적으로 IP Spoofing이란 1)Sequene number guessing, 2)SYN flooding 을 주로 사용


3. DNS 스푸핑 공격

- DNS 스푸핑은 DNS(Domain Name Server)에서 전달되는 IP 주소를 변조하거나 DNS의 서버를 장악하여 사용자가 의도하지 않은 주소로 접속하게 만드는 공격 방법

<정상적인 DNS 서비스> 출처: 한빛미디어

1) 클라이언트는 접속하고자 하는 도메인 이름에 해당하는 IP주소를 이미 설정된 DNS서버에 물어봄(DNS query packet전달)

2) DNS서버는 해당하는 도메인 이름에 대한 IP주소를 클라이언트에게 전달

3) 받은 IP주소를 가지고 클라이언트는 해당 웹서버로 접속


<DNS 스푸핑>

1) 클라이언트가 DNS 서버로 DNS query packet을 보내는 것을 확인(arp spoof 선행 작업 필요)

2-3) 공격자는 로컬에 존재하므로 DNS 서버보다 가까운 위치에 잇기 때문에 DNS 서버가 올바른 DNS response packet을 보내기 전에 위조된 DNS response packet을 클라이언트에 전달

4) 클라이언트는 공격자가 보낸 packet을 올바른 packet으로 인식하고 웹에 접속(DNS 서버 packet은 버림)

사용 예는 http://kkn1220.tistory.com/72 를 참고하면 되겠다.



'해킹 > 해킹' 카테고리의 다른 글

IP fragmentation을 이용한 공격  (0) 2016.02.12
DoS(Denial of Service) 소개 및 공격유형  (0) 2016.02.12
스니핑 도구 dsniff 소개  (0) 2016.02.02
스니핑 도구 tcpdump 소개  (0) 2016.02.02
스니핑(sniffing) 소개  (0) 2016.02.02

Dsniff

- Dsniff는 스니핑을 위한 자동화 도구이다. 많이 알려진 툴이며, 단순한 스니핑 도구가 아니라 스니핑을 위한 다양한 툴이 패키지처럼 만들어져 있다.

- 무차별 모드에서의 패킷을 캡쳐할 수 있는 특징을 가진다.


- Dsniff 가 읽어낼 수 있는 패킷의 종류

-> ftp, telnel, http, pop, nntp, imap, snmp, ldap, rlogin, rip, ospf, pptp, ms-chap, nfs, yp/nis +, socks, x11, cvs, IRC, ATM, PostageSQL, Citrix ICA, sql, auth 등


우분투에서는 

$sudo apt-get install dsniff (칼리는 기본 제공)

사실 설치 방법은 복잡하다.

LIBNET 설치 -> LIBPCAP 설치 -> DB 라이브러리 설치 -> LIBNIDS 설치 -> OPEN SSL 설치 -> DSNIFF 설치

굳이 우분투에 설치하고 싶으신 분들은 

(https://hplearn.co.kr/upload/lecture_pds/main3%20-%20session%201%20-%20Dsniff%EB%A5%BC%20%EC%9D%B4%EC%9A%A9%ED%95%9C%20password%20hijacking%20%EC%8B%A4%ED%97%98%201%20-%20dsniff%20%EC%84%A4%EC%B9%98-1.pdf) 참고



Dsniff 설치 시 설치 되는 툴


filesnarf     NFS 트래픽에서 스니프한 파일을 현재 디렉토리에 저장 

macof        스위치를 허브와 같이 작동하게 하기 위하여 임의의 MAC 주소로 스위치의 MAC 테이블을 오버플로우 시킴 

urlsnarf     HTTP의 모든 URL을 가로챔 

mailsnarf    SNMP와 POP을 스니프하여 이메일을 볼 수 있게함 

msgsnarf    채팅 메시지를 스니핑 

tcpkill       탐지할 수 있는 TCP 세션 끊음 

tcpnice      ICMP source quench 메시지를 보내 특정 TCP 연결을 느리게 만든다.  

(속도가 빠른 네트워크에서 스니프 할 때)

arpspoof     ARP 스푸핑 공격 

dnsspoof    DNS 스푸핑 공격 


옵션

Usage: dsniff [-cdmn] [-i interface | -p pcapfile] [-s snaplen]

              [-f services] [-t trigger[,...]] [-r|-w savefile]

              [expression]


-d: debugging mode 사용

-m: 자동 프로토콜 탐지 기능 사용

-n: IP이름을 풀이 하지 않음

-i: interface: 사용할 장치 지정

-w: savefile: 스니핑한 결과를 지정한 이름으로 저장



위의 기능 중 전부 하기에는 시간적 문제 및 귀찮아서 그럴싸한 몇 가지를 테스트해보았다.


Macof - LAN에 random MAC addresses에 트래픽을 계속 발생하게 하여 스위치 메모리를 고갈 시키는 것

macof <-s 출발지> <-d 목적지> <-e 목적지 하드웨어주소> <-x 출발포트> <-y 목적지포트> <- i 장치> <-n 회수>

예) macof -d 192.168.100.5(희생자 IP) -i eth0    (예에서는 그냥 ip로 어떤 것을 의미하는지 보여주기 위함)



URLsnarf - CLF(Common Log Format) 를 사용하여 HTTP 패킷을 가로챈 후 현재 클라이언트가 사용하는 URL을 알려줌

urlsnarf <-i 인터페이스> <-p pcap파일> <-v 자세히 pattern[URL 정규 표현식 지정]>
예) urlsnarf -i eth0        //host지정 시 host <ip주소> 

//test에서는 한 명의 희생자밖에 없기 때문에 지정 안함 

192.168.100.5에서 접속하는 url 획득


arpspoof - arpspoof는 양 서버사이에서 스니핑하고자 하는 서버인 것처럼 MAC을 위조하여 트래픽을 포워딩하는 것인데 실제로 해킹을 할 때 arpspoof를 마치 게이트웨이 인듯 사용하는 경우가 많다.

(http://kkn1220.tistory.com/32)를 참고하면 arpspoof를 한 것을 확인할 수 있다.

다른 방법으로는 다음과 같다.


희생자 우분투(192.168.100.5)에서 arp-a를 입력했을 때 공격자 14번과 1번 게이트웨이의 맥주소는 다른 것을 확인할 수 있다.

하지만 arpspoof를 하게 되면 다음과 같이 14번은 1번이 마치 자신의 맥인것 마냥 속이게 되며 패킷을 본인에게 향하게 한다. 

이를 악용하여 tcpdump라든지 기타 방법을 사용하여 패킷을 확인할 수 있다.


arpspoof <-i 인터페이스> <-t 타겟> host




dnsspoof - 말그대로 DNS 주소를 속이는 것이다.

이를 위해 위에서 했던 것을 토대로 전체적인 시나리오를 기반으로 진행해보겠다.


우선 아파치 서버 페이지를 수정하겠다. 기본은 it works 화면임

(vi /var/www/index.html 수정하면됨)

아파치 서버가 실행이 되지 않았을 수도 있기 때문에 실행하자

#service apache2 restart

아래의 화면은 kali 공격자의 index.html 페이지이다.

1. arpspoof   

#arpspoof -t <target ip> <gateway ip>

#arpspoof -t 192.168.100.5 192.168.100.1

1번 쉘을 열고 위의 명령어 실행


2. IP forwarding

#echo 1 > /proc/sys/net/ipv4/ip_forward

#fragrouter -B1

2번 쉘을 열고 위의 명령어 실행


3. fake host file 작성

#vi test

[attacker IP]       [Domain]

192.168.100.14    *.naver.com

vi 편집기 내용


4. dnsspoof

#dnsspoof -f <filename>

#dnsspoof -f test

3번 쉘을 열고 위의 명령 실행


5. target pc에서 naver.com 접속

아래의 화면과 같이 naver.com에 접속하였음에도 불구하고 공격자의 index.html에 접속하는 것을 확인할 수 있다.

사이트를 진짜 사이트처럼 복제한 후 악용할 수 있다.


'해킹 > 해킹' 카테고리의 다른 글

DoS(Denial of Service) 소개 및 공격유형  (0) 2016.02.12
스푸핑 (Spoofing) 소개  (0) 2016.02.11
스니핑 도구 tcpdump 소개  (0) 2016.02.02
스니핑(sniffing) 소개  (0) 2016.02.02
shodan 소개  (0) 2016.02.01

TCP Dump

- 가장 일반적으로 사용하는 스니핑 도구로 불법적인 느낌, 해킹이라는 느낌보다는 관리자적인 느낌이 강한 도구이다.

처음부터 스니핑을 위한 도구로 개발된 것이 아니라 네트워크 관리를 위해 개발된 툴이며 Snort라는 IDS의 기반 프로그램이기도 하다.


man page에서 Tcpdump의 정의를 잠깐 살펴보고자 한다.

Tcpdump prints out a description of the contents of packets on a network interface that match the boolean expression; the description is preceded by a time stamp, printed, by default, as hours, minutes, seconds, and fractions of a second since midnight. It can also be run with the -w flag, which causes it to save the packet data to a file for later analysis, and/or with the -r flag, which causes it to read from a saved packet file rather than to read packets from a network interface. It can also be run with the -V flag, which causes it to read a list of saved packet files. In all cases, only packets that match expression will be processed by tcpdump.


뭐 내용을 잠깐 보면 Tcpdump는 boolean 표현식을 만족하는 네트워크 인터페이스의 패킷의 내용을 출력하고 파일로 저장하는 w플래그나 저장된 패킷으로부터 읽어들이는 r플래그 등이 존재한다는 것을 확인할 수 있다.


설치

Tcpdump는 libpcap 라이브러리를 사용하는데 칼리에서는 기본적으로 tcpdump가 설치되어 있고, 리눅스의 경우

apt-get install tcpdump, apt-get install libpcap 으로 필요 라이브러리를 설치하면 되는데 자세한 설치 방법은 칼리를 사용할 것이기 때문에 제외하도록 한다.


옵션(자주 쓰이는 것만 나열 (자세한 것은 man page 참고)


예제

To print all packets arriving at or departing from sundown:

-> tcpdump host sundown        

 //sundown host의 출발 도착 패킷 출력


To print traffic between helios and either hot or ace:

    -> tcpdump host helios and \( hot or ace \)    

//helios와 hot, ace에서 발생하는 패킷 출력


To print all IP packets between ace and any host except helios:

    -> tcpdump ip host ace and not helios        

//helios를 제외한 ace와 다른 host간 ip 패킷 출력


To print all traffic between local hosts and hosts at Berkeley:

     -> tcpdump net ucb-ether       

//local host와 berkeley host사이에서 발생하는 모든 트래픽 출력


To print all ftp traffic through internet gateway snup: (note that the expression is quoted to prevent the shell from (mis-)interpreting the parentheses):

    -> tcpdump 'gateway snup and (port ftp or ftp-data)'    

//gateway snup을 통한 모든 ftp 패킷 출력


To print IP packets longer than 576 bytes sent through gateway snup:

    -> tcpdump 'gateway snup and ip[2:2] > 576'    

//snup을 통과하는 패킷 중 576byte 이상 패킷 출력



'해킹 > 해킹' 카테고리의 다른 글

스푸핑 (Spoofing) 소개  (0) 2016.02.11
스니핑 도구 dsniff 소개  (0) 2016.02.02
스니핑(sniffing) 소개  (0) 2016.02.02
shodan 소개  (0) 2016.02.01
해킹의 두번째걸음. 스캐닝(scanning)  (0) 2016.01.28

- 스니핑 정의

-> 'sniff'는 사전에서 찾아보면 '코를 킁킁거리다'라는 의미를 가진다. 코를 킁킁거리듯이 정보를 데이터 속에서 찾는 것이라고 생각하면 된다.

-> 스니핑 공격은 막는 것도 어려우며, 탐지 역시 쉽지 않다. 스니핑 공격을 수동적 공격이라고도 말하는데, 그 이유는 공격 시 툴을 설치해놓은 상태로 충분하기 때문이다.

-> 랜에서의 스니핑은 promiscuous 모드에서 작동한다. 랜 카드는 설정된 IP 주소값과 고유한 MAC(Media Access Control) 주소 값을 가지고 있으며 자신의 랜카드에 들어오는 프로토콜 형식에 따른 전기적 신호의 헤더부분, 즉 주소 값을 인식하고 자신의 버퍼에 저장할지를 결정한다. 그러나 스니핑은 자신이 가지지 말아야 할 정보까지 모두 받아들이는 것이다. 이렇듯 자신의 주소값을 무시하고 모든 패킷을 받아들이는 상태를 promiscuous 모드라고 한다.


그림출처: 안랩


- 인터페이스를 promiscuous 모드로 전환하기

$sudo ifconfig eth0 promisc

<전환 전>


<전환 후>


- 인터페이스를 원복시키기

$sudo ifconfig eth0 -promisc

<원복>


관련 Tools


1. TCP Dump

http://kkn1220.tistory.com/70 참고

2. Dsniff

http://kkn1220.tistory.com/72 참고




'해킹 > 해킹' 카테고리의 다른 글

스니핑 도구 dsniff 소개  (0) 2016.02.02
스니핑 도구 tcpdump 소개  (0) 2016.02.02
shodan 소개  (0) 2016.02.01
해킹의 두번째걸음. 스캐닝(scanning)  (0) 2016.01.28
maltego(footprinting tool) 소개  (0) 2016.01.28

shodan은 검색 엔진과 비슷한 형태로 보일 수 있으나
정확하게 말하자면 특정 웹서버나 webcam 등과 같은 정보를 수집하고 그 결과를 가져오는 것이라고 볼 수 있다.


https://www.shodan.io 에 접속을 하면 아래와 같은 화면을 볼 수 있다.


제공하는 기능은 많다. 웹사이트를 이용하여 취약점을 확인하거나, API를 이용하는 방법, exploit 등 방법에 대해 알면 알수록 많은 기능을 사용할 수 있다. 이번 포스팅에는 웹사이트를 이용한 단순 소개로 한정짓는다.

explore를 눌러보면 인기있는 searches에 대해 볼 수 있다. 역시 캠에 대한 빈도수가 가장 높았다.


유료회원의 경우 검색할 수 있는 쿼리 개수도 많아지고 customizing 할 수 있는 장점이 있지만, 돈이 없어서..
여하튼 회원가입을 하고 이용해보았다.




웹 사이트를 이용한 검색으로는

다음과 같을 수 있다.


city -  도시를 한정하여 검색

country - 국가를 한정하여 검색

hostname - 호스트 네임 매칭 검색

os - 특정 OS 검색

port - 특정 포트 검색


검색 방법은 다음과 같다.

예) apache country:KR -> apache를 사용하는 것 중에 한국에 한정하여 검색

예) apache country:KR city:"Seoul" -> 위와 동일하지만 서울에 한정하여 검색

예) country:KR product:"samsung"



현재 가장 인기있는 검색어는 webcam이다. 

webcam country:KR의 결과내용이다.




해당 IP의 정확한 위치 및 open port등 또한 확인할 수 있다.


각각을 눌러보면 id와 pw를 입력하여야 한다.

하지만 삼성테크윈 제품으로 한정하여 검색하였을 때 디폴트 id와 pw를 유지하고 있는 곳이 많다는 것을 확인할 수 있었다.

또한, 그런 id, pw또한 없는 곳도 있었다.


위의 사진은 편의점에 불과하지만 개인용 주택이나 사무실의 경우 사생활 침해를 유발할 수 있다.




아래는 metasploit을 이용한 것인데 자세한 것은 추후 진행하도록 하겠다.


아래는 kali에서 실행하였다.


#msfconsole


msf> show auxiliary  (tab 기능 제공됨)



shodan search를 확인할 수 있다.


msf> use auxiliary/gather/shodan_search   (tab 기능 제공됨)

msf> show options


api key는 메일로 등록 시 발급받은 api key를 등록해주면 된다.


msf> show options

msf> set query <query식>        //쿼리식 확인 필요


msf> run


db저장 방법, 쿼리식 종류 및 사용법 등 공부 필요


'해킹 > 해킹' 카테고리의 다른 글

스니핑 도구 tcpdump 소개  (0) 2016.02.02
스니핑(sniffing) 소개  (0) 2016.02.02
해킹의 두번째걸음. 스캐닝(scanning)  (0) 2016.01.28
maltego(footprinting tool) 소개  (0) 2016.01.28
MITM 공격을 위한 ettercap 소개  (0) 2016.01.21

풋프린팅이 정보를 담고 있는 공간을 찾는 행위라면 스캐닝은 잠재적인 출입구가 될 수 있는 문이나 창문을 찾는 것과 같다.

풋프린팅 정보는 (http://kkn1220.tistory.com/61 참고)


-스캔의 개념

-> 스캔은 서비스를 제공하는 서버의 작동 여부와 제공하고 있는 서비스를 확인하기 위한 것

   TCP 기반의 프로토콜은 기본적으로 질의(Request)를 보내면 응답(Response)을 보냄

-> 스캐닝은 이러한 기본적인 메커니즘에 기본하는 것으로, open port, 제공 중인 서비스, 동작중인 데몬 버전, os version,   취    약점 등 다양한 정보를 얻는 것이 가능


- 시스템 활성화 여부 결정

- Ping & ICMP Scan

- ping은 네트워크와 시스템이 정상적으로 작동하는지 확인하기 위한 간단한 유틸리티

- ICMP(Internel Control Messaging Protocol)를 사용

- 각각의 네트워크는 고유한 ping이 존재하며, 일반적으로 알려진 ping은 TCP/IP 네트워크에서의 ping을 말함


윈도우에서의 ping


linux에서의 ping

- ping은 결국 ICMP의 Echo request(type 8), reply(type 0)을 따름

 즉, ping 도구는 ICMP Echo Request  메시지를 전송하여 목적지시스템으로부터 ICMP Echo Reply 메시지로 응답을 받  는데 걸린 시간을 측정하며 네트워크 연결을 검사 할 수 있다.


ICMP 스캔

-> ICMP를 이용한 스캔 방법으로는 다음의 네 가지를 생각 할 수 있다.

- Echo Request(type 8)와 Echo Reply(type 0)을 이용한 방법

- Timestamp Request(Type 13)와 Timestamp Reply(Type 14)를 이용한 방법

- Information Request(Type 15)와 Information Reply(Type 16)를 이용한 방법

- ICMP Address Mask Request(Type 17)와 ICMP Address Mask Reply(Type 18)를 이용한 방법


Timestamp Request는 원격지 시스템의 현재 시간을 알아보기 위한 패킷임
Timestamp 패킷은 송신자가 패킷을 받은 시간(Originate Timestamp)과 수신자가 패킷을 받은 시간(Receive Timestamp), 송신자가 수신자에게 전송하는 동안 걸린 시간(Transmit Timestamp)으로 공격대상의 현재 시스템 시간을 알 수 있다.

하지만 Timestamp Request 패킷에 Reply 패킷을 돌려보내오는 시스템이 시간만을 알려준다고 생각할 수는 없는데 상대 시스템이 Reply 패킷이 돌아온다는 것은 상대 시스템이 활성화 되어 있음을 말함


Information Request와 Reply 패킷은 메인 프레임의 터미널과 같이 부팅할 때 자신의 디스크가 없는 시스템에 스스로 설정할 수 있도록 하는 패킷으로, 자신의 네트워크를 찾기 위해 개발됨

기본 목적은 RARP, Bootp, DHCP와 같은 프로토콜과 같으나 다른 프로토콜을 이용한 방법에 비해 원시적

Timestamp 패킷과 마찬가지로 죽은 시스템이 Reply패킷을 보내지 않음


ICMP Address Mask Request와 Reply패킷은 Information Request 패킷과 같이 터미널이 부팅 될 때 자신이 속해 있는 네트워크의 서브넷 마스크를 알기 위해 보내는 프로토콜

마찬가지로 Reply 패킷을 돌려보내오는지 확인하면서 활성화 여부 확인


- ARP(Address Resolution Protocol) 호스트 탐색

ARP는 IP 주소값으로 MAC 주소값을 알아내는 프로토콜이다

예) #arp-scan 192.168.100.0/24


대상시스템이 원격에 위치한 네트워크일 경우 실효성이 떨어지는 ARP탐색보다는 ICMP또는 TCP/UDP 탐색 방법을 사용하여야 함


- 포트스캐닝

- 네트워크매퍼(nmap): 호스트와 서비스 검색과 관련된 도구

nmap은 상당히 상당히 강력한 도구이다. 기능도 엄청 많다.

(자세한 사항은 kkn1220.tistory.com/103 참고)

스캐닝 옵션 (192.168.100.5는 현재 우분투 test 대상)

-sT: TCP connect() scan: TCP scanning의 가장 기초적인 형태로 connect()함수를 사용해서 모든 포트에 대해 스캔


-sS: TCP SYN scan: full TCP접속을 하지 않으므로 "half-open" 스캐닝이라 한다. 하나의 SYN 패킷을 보내어 SYN|ACK 응답이 오면 그 포트는 listening 상태임을 나타내며, RST(ReSeT)응답이 오면 non-listener임을 나타냄

 이 기술은 하나의 패킷을 보내어 응답을 받으면 그 즉시 RST 패킷을 보내서 접속을 끊어버리기 때문에 로그를 남기지 않는 경우가 대부분임

-sF: Stealth FIN: SYN 패킷을 막아놓은 방화벽이나 패킷 필터 또는 Synlogger와 Courtney 같은 스캔을 탐지하는 프로그램들을 무사히 통과할 수 있다. open 포트로 FIN 패킷을 보내면 이 패킷을 무시하고, closed 포트로 보내면 RST 패킷이 온다.

-sX: Xmas Tree: FIN, URG, PUSH 코드 비트를 설정한 채 패킷을 보냄. RESET은 포트가 닫혔다는 것을 말해주며, 반응이 없는 것은 포트가 열려있음을 뜻함

-sN: Null scan: 어떤 코드 비트도 설정하지 않은 패킷을 보냄. RESET은 포트가 닫힌 것을 말하며, 반응이 없는 것은 포트가 열린 것을 뜻함

-sP: Ping scanning: 네트워크의 어느 호스트가 살아있는지를 알고 싶을 때 사용

그밖에 -sU; UDP scan, -sA: ACK scan, -sW: window scan, -sR: RPC scan 등 다양하다....

'해킹 > 해킹' 카테고리의 다른 글

스니핑(sniffing) 소개  (0) 2016.02.02
shodan 소개  (0) 2016.02.01
maltego(footprinting tool) 소개  (0) 2016.01.28
MITM 공격을 위한 ettercap 소개  (0) 2016.01.21
웹 퍼징 도구 DirBuster 소개  (0) 2016.01.19

+ Recent posts