OLD_posting

와이어샤크

슈개 2012. 10. 27. 02:39
반응형

http://www.packetinside.com


2012년 10월 26일 금요일

패킷에서 추출해 낸 데이터 역으로 돌리기


패킷파일에서 추출해 낸 바이너리 데이터를 역(Reverse)으로 되돌릴 경우에는 어떤 방법을 사용할 수 있을까? 프로그램을 작성해서 역으로 만들수도 있다. 프로그램을 배우는 초반에 많이 언급되는 내용중에 하나이다. 이런 방법말고 간단히 도구만으로 쉽게 만들 수 없을까? 일단, 추출한 데이터가 1.bin 이라고 가정해 보자. xxd 나 hexdump 와 같은 프로그램을 이용해 HEX 값으로 출력을 할 수가 있다. 출력방법은 '00 00 00 00' 과 같이 한개의 HEX 값을 출력하고 공백 그리고 HEX 값이 이어지는 구조로 얻고 싶다. 이런 경우에는 hexdump 에서 아래와 같은 방법으로 포맷을 맞출수가 있다.

# hexdump -v -e '/1 "%02X "' 1.bin > 1.txt
52 75 6E 6E 69 6E 67 20 58 20 73 65 73 73 69 6F 6E 20 77 72 61 70 70 65 72 0A 4C
 6F 61 64 69 6E 67 20 70 72 6F 66 69 6C 65 20 66 72 6F 6D 20 2F 65 74 63 2F 70 7
2 6F 66 69 6C 65 0A 4C 6F 61 64 69 6E 67 20 70 72 6F 66 69

자, 그럼 이 데이터를 역으로 돌리면 되는데 쉽게 떠오르는 명령어로 rev 가 있다. 그런데 rev 를 사용하면 약간의 문제가 있다. 데이터가 역으로는 되는데 HEX 값 자체도 앞뒤가 뒤바뀌어 버린다.

# hexdump -v -e '/1 "%02X "' 1.bin | rev
 96 66 F6 27 07 02 76 E6 96 46 16 F6 C4 A0 56 C6 96 66 F6 27 07 F2 36 47 56 F2 02 D6 F6 27 66 02 56 C6 96 66 F6 27 07 02 76 E6 96 46 16 F6 C4 A0 27 56 07 07 16 27 77 02 E6 F6 96 37 37 56 37 02 85 02 76 E6 96 E6 E6 57 25

차이점을 알 수 있을 것이다. 끝 데이터인 6F 66 69 가 역으로 앞으로는 갔는데 96 66 F6 과 같이 이 값 자체도 앞뒤가 바뀐것이다. 이렇게 되면 전혀 엉뚱한 값이 된다. 이럴때 쉽게 사용할 수 있는 명령어로 tac 가 있다. *NIX 의 대표적인 명령어 cat 를 거꾸로 뒤짚어 보자. tac 가 된다. 그렇다 cat 과 같은 기능을 역으로 해주는 것이다. (필자도 tac 라는게 있는줄은 몰랐다. 쉽게 역으로 변환할 수 있는 도구가 무엇이 있을까 찾게되었다)

[TAC 도움말]

# tac --help

Usage: tac [OPTION]... [FILE]...
Write each FILE to standard output, last line first.
With no FILE, or when FILE is -, read standard input.

Mandatory arguments to long options are mandatory for short options too.
  -b, --before             attach the separator before instead of after
  -r, --regex              interpret the separator as a regular expression
  -s, --separator=STRING   use STRING as the separator instead of newline
      --help     display this help and exit
      --version  output version information and exit

Report tac bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
For complete documentation, run: info coreutils 'tac invocation'

# tac -s ' ' 1.txt > 2.txt


-s 옵션은 구분자를 지정하는 것으로 우리가 만들어낸 데이터가 각 HEX 값 마다 공백을 가지고 있으므로 ' ' 로 구분해 주었다. 그러면 역으로 만들어진 데이터가 2.txt 에 저장되었다.

ASCII 로 만들어진 데이터를 바이너리로 만드는 방법은 여러가지가 있다. 입력 데이터가 무엇이냐에 따라 다르지만 앞서 언급한 경우는 다음과 같이 할 수 있다.

# xxd -r -plain 2.txt

xxd 의 -r 옵션은 hexdump 데이터를 바이너리로 컨버터 해주는 것이다.

패킷에서 추출해 낸 데이터가 어떤 형식이냐에 따라 그것을 어떻게 다뤄야 할지가 나눠진다. 오늘 소개한 것은 여러 경우중 일부에 속한다. 이런 방법도 있구나 하고 알아두면 좋을것 같다.




Foremost


http://www.packetinside.com/2011_11_01_archive.html

 

 

 

2011년 11월 24일 목요일

패킷파일에서 카빙기법을 통한 데이터 추출


패킷파일에서 빠르게 파일을 추출하기 위한 방법중에 하나로 포렌식 도구중에 하나인 Foremost 를 이용해 보고자 한다. 이미 Tcpxtract 와 와이어샤크를 통해서 파일을 추출하는 방법도 언급하였으나, 이 방법은 또 나름대로 필요한 경우가 있기 때문에 도움이 될 것이다. 기존에 파일 추출관련한 포스팅은 다음과 같으니 참고하길 바란다.

1) 네트워크 패킷 캡쳐 파일에서 파일 추출하기 (using Tcpxtract)

2) 와이어샤크를 이용한 패킷파일에서 바이너리 파일 추출하기

이번에 파일 추출 방법으로 사용할 것은 Foremost 라는 도구를 이용한 것이다. Foremost 는 패킷파일을 위해 만들어진 것은 아니고 파일에서 데이터를 추출하기 위한 포렌식 용도로 제작된 것이다. 콘솔기반의 프로그램으로 파일에서 헤더, 내부 데이터 구조를 기반으로 파일을 복구해 내는 것이다. 흔히 이런 방법은 데이터 카빙이라고도 불린다. Foremost 는 dd, Encase 등에 의해 만들어진 파일에서도 복구를 할 수 있으며, 우리는 이것을 패킷파일 대상으로 이용할 것이다.

우선 파일다운로드는 아래 경로에서 할 수 있으며, 리눅스 패키지를 이용한다면 foremost 로 검색하여 설치할 수 있을 것이다.

http://foremost.sourceforge.net/

-h 옵션을 주면 도움말을 볼 수 있다.

# foremost -h
foremost version 1.5.7 by Jesse Kornblum, Kris Kendall, and Nick Mikus.
$ foremost [-v|-V|-h|-T|-Q|-q|-a|-w-d] [-t <type>] [-s <blocks>] [-k <size>]
[-b <size>] [-c <file>] [-o <dir>] [-i <file]

-V  - display copyright information and exit
-t  - specify file type.  (-t jpeg,pdf ...)
-d  - turn on indirect block detection (for UNIX file-systems)
-i  - specify input file (default is stdin)
-a  - Write all headers, perform no error detection (corrupted files)
-w  - Only write the audit file, do not write any detected files to the disk
-o  - set output directory (defaults to output)
-c  - set configuration file to use (defaults to foremost.conf)
-q  - enables quick mode. Search are performed on 512 byte boundaries.
-Q  - enables quiet mode. Suppress output messages.
-v  - verbose mode. Logs all messages to screen

사용방법은 간단하다. -i 로 입력될 파일을 지정해 주면 된다. -v 는 좀더 세부정보를 보여주고 -o 로 출력될 디렉토리 경로를 정할 수 있다. 기본은 output 이라는 폴더 아래에 추출된 파일이 저장된다. 아래 그림은

# foremost -i ex.pcap -v

 로 실행한 결과이다.



추출된 파일 정보들이 출력이 된다. output 폴더를 보면 추출된 파일이 확장자별로 해서 존재함을 확인 할 수 있다.


# ls -l output
total 20
-rw-r--r-- 1 root root 1808 2011-11-23 23:51 audit.txt
drwxr-xr-- 2 root root 4096 2011-11-23 23:51 gif
drwxr-xr-- 2 root root 4096 2011-11-23 23:51 htm
drwxr-xr-- 2 root root 4096 2011-11-23 23:51 jpg
drwxr-xr-- 2 root root 4096 2011-11-23 23:51 png
# ls -l output/jpg
total 64
-rw-r--r-- 1 root root 60610 2011-11-23 23:51 00000857.jpg
# file output/jpg/00000857.jpg
output/jpg/00000857.jpg: JPEG image data, JFIF standard 1.02



그런데 필자가 가지고 있었던 또 다른 패킷파일에서는 바로 PCAP 에서 추출해 내지 못했다. UDP 데이터 인데, 그 안에 JPG 관련 Payload 가 포함되어 있었다.  이런 경우에는 패킷파일에서 추출하기 원하는 부분에서 'Follow UDP(or TCP) Stream' 을 선택하고 그 후, 데이터를 받은 방향으로 해서 선택하고 Raw 로 저장을 하면 된다.

저장된 Raw 파일에서는 Foremost 로 추출해 낼 수 있었다. 즉, 기록되어 있는 데이터 구조에 따라서 달라지므로 기본적으로 Raw 데이터에서 추출해 내는 것이 맞다.

TCP 뿐만 아니라 UDP 에서도 원하는 데이터를 추출해 낼 수 있다. 단 조건은 어떤 파일형태의 구조를 제대로 갖추고 있어야 한다는 것이다. 무작정 임의의 페이로드에서 데이터가 뽑혀질 수 있는 것은 아니기 때문이다.

와이어샤크의 기능을 통한 추출은 제한적이므로, 분석 대상의 패킷파일에 따라 적절한 방법을 선택해 사용하면 될 것이다.
반응형

'OLD_posting' 카테고리의 다른 글

File signature  (0) 2012.10.29
2011 HTP 문제 대 방출!!!!!!  (0) 2012.10.28
스레드 개념과 원리  (0) 2012.10.22
윈도우 프로그래밍 잡지 기사  (0) 2012.10.21
초보 프로그래머 와 전문 프로그래머의 차이  (0) 2012.10.16