[ * ] 문제 확인
2014_CodeGate F150.pcap라는 이름의 패킷 캡쳐 파일이 하나 주어지고 해당 파일에서 플래그 값을 찾으라고 되어있고, 파일을 열면 아래와 같이 파일이 손상 또는 변질되었다는 오류 메시지를 확인할 수 있으며 파일이 열리지 않음을 알 수 있다
[ * ] 해결 방향
패킷에서 플래그 값을 찾는 것이 해당 문제가 요구하는 것이지만 오류 메시지가 나타나며 파일이 열리지 않으므로 해당 메시지가 의미하는 오류를 분석하고 패킷 캡쳐 파일을 열고 읽을 수 있도록 고쳐주면 문제를 해결할 수 있는 과정에 가까워 질 것 같다
[ * ] 해결 과정
먼저 주어진 패킷 캡쳐 파일을 열게 되면 보이는 오류 메시지의 의미를 해석하면, 해당 파일이 손상되었거나 변질되었고 EBP의 총 블록의 길이는 96이지만 4270407998 Byte인 패킷 데이터에 비해 현저히 작아서 pcapng_read_packet_block 라는 와이어샤크서 작동하는 함수가 해당 블록을 읽어 들이지 못하는 것 같아 보인다. 조금 더 자세히 알아보기 위해 오류 메시지를 기반으로 Pcapng 파일 구조를 검색했고 잘 정리된 글을 바탕으로 간추린 내용은 다음과 같다
n 일반적인 블록 구조
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Block Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Block Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ / Block Body / / variable length, padded to 32 bits / +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Block Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Pcpang 파일은 여러 개의 블록으로 이루어지며, 일반적인 블록 구조의 해석은 아래와 같다
l Block Type : 32비트로 이루어져 있으며 블록을 식별하기 위한 고유한 값으로 사용 됨
l Block Total Length : 블록의 전체 크기를 나타내며 단위는 바이트를 사용함
l Block Body : 블록의 내용을 표현
l Block Total Length : 파일 탐색을 거꾸로 할 시 허용하기 위한 복제 필드로 사용
n 블록 유형
l Mandatory à 각 파일에서 적어도 한 번은 나타나야 하는 블록
ü Section Header Block : 캡쳐 파일의 가장 중요한 특성을 정의하는 블록
ü Interface Description Block : 트래픽 캡쳐에 사용되는 인터페이스의 가장 중요한 특성을 정의
l Optional à 선택적으로 나타날 수 있는 블록
ü Enhanced Packet Block : 캡쳐 된 단일 패킷 또는 부분을 포함하며 원래 패킷 블록의 진화를 나타냄
ü Simple Packet Block : 캡쳐 된 단일 패킷 또는 그 일부를 포함하며 최소한의 정보 집합만 포함 되며 이 필드가 나타날 경우, 블록 앞에 IDB가 필요
ü Name Resolution Block : 패킷 덤프에 있는 숫자 주소와 정식 이름 대응을 정의
ü Interface Statistics Block : 캡쳐 된 상태를 이해하는데 유용한 통계데이터를 저장하는 방법을 정의, 이 필드가 나타날 경우 블록 앞에 IDB가 필요
* IDB = Interface Description Block
아래의 사진은 Enhanced Packet Block의 구조이며 해당 구조로부터 오류메시지와 관련 있어 보이는 Block Total Length라는 필드를 확인할 수 있고 추가적인 구조 해석을 통해 문제를 해결할 수 있는 실마리를 얻을 수 있을 것 같다
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+---------------------------------------------------------------+
0 | Block Type = 0x00000006 |
+---------------------------------------------------------------+
4 | Block Total Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
8 | Interface ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
12 | Timestamp (High) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
16 | Timestamp (Low) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
20 | Captured Packet Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
24 | Original Packet Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
28 / /
/ Packet Data /
/ variable length, padded to 32 bits /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
/ /
/ Options (variable) /
/ /
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Block Total Length |
+---------------------------------------------------------------+
EBP의 구조는 EBP의 고유 식별자인 0x00000006이란 값을 가지는 Block Type, 블록의 총 길이를 나타내는 Block Total Length, 패킷이 어떤 인터페이스를 통해 들어 왔는지에 대한 정보를 나타내는 Interface ID, 1970년 1월 1일 이후로 지나온 초 단위에 대한 패킷 생성시각을 나타내는 TimeStamp, 캡쳐된 패킷의 크기 값이 적혀 있고 덧붙여 해당 필드는 패킷 데이터 필드의 크기를 맞추기 위한 패딩 값인 Align 데이터가 포함 되어 있는 Captured Len, 네트워크 상에서 실제로 전송된 패킷의 크기를 나타내는 필드이자 사용자가 패킷을 덤프할 때 사용자가 패킷의 스냅샷만을 원할 경우 즉, Snaplen이라는 값을 따로 정의하여 사용하면 Captured Len과 크기가 다를 수 있는 Packet Len, 그리고 이후에 패킷의 실제 데이터를 의미하는 Packet Data와 Block Total Length 필드가 오게 된다
해당 문제를 해결하기 위해 보아야 할 필드는 아래의 네모박스에 있는 부분이다
값 |
설명 |
0x00000006 |
EBP의 블록 타입을 나타냄 |
0x00000060 |
블록의 총 길이를 나타냄 |
0xFE89413E |
캡쳐된 패킷의 크기를 나타냄 |
0x0000003E |
네트워크 상에서 실제로 전송된 패킷의 크기를 나타냄 |
위 표는 네모박스에 있는 필드의 값과 그 필드에 대한 설명을 나타내었고 각 필드를 한 층 더 깊이 이해하기 위해, EBP의 설명에 적어 두었던 "Packet Len이 Snaplen이라는 값을 따로 정의하여 사용하면 Captured Len과 크기가 다를 수 있다"는 내용을 인지하고 예시 파일을 하나 찾던 도중 Captured Len과 Packet Len의 크기가 같음을 발견 했다
그리고 해당 문제의 Captured Len 필드 값이자 오프셋 0x0130에 있던 0xFE89413E를 Packet Len과 같은 0x0000003E로 바꾸어 주었더니
아래와 같이 오류메시지 없이 패킷 캡쳐 파일이 열림을 확인할 수 있다
해당 문제에서 요구했던 플래그 값을 찾기 위해 방법을 모색 도중 HTTP로 주고 받은 패킷에서 파비콘과 png파일 등의 파일을
확인하고 해당 파일들을 추출하기 위해 파일 탭에서 Export Objects HTTP 기능을 이용했더니 아래와 같이 파일을 확인할 수 있었다
Objects를 확인 후 추출한 결과 아래와 같은 파일들을 볼 수 있었다
추출한 파일에서 별 다른 특징을 찾을 수 없어 SteganoGraphy가 적용되어 있고 해당 파일에서 다른 파일을 추출해야 하나 싶었지만 “multiple.pdf”에서 플래그 값을 확인할 수 있었다
FLAG = FORENSICS_WITH_HAXORS
참조 사이트
https://pcapng.github.io/pcapng/
http://www.packetinside.com/2013/08/pcap-ng.html
https://www.winpcap.org/ntar/draft/PCAP-DumpFileFormat.html
'Wargame' 카테고리의 다른 글
[STEGANOGRAPHY] PHDays Quals 2014 - Forensic 150 - mp3 me (0) | 2017.07.07 |
---|---|
[PACKET] ASIS 2013 - Forensic Final 300 (0) | 2017.07.06 |
[STEGANOGRAPHY] RuCTF Quals 2013 - Forensic 100 (0) | 2017.07.05 |
[Web Browser] Secuwave 2012 - Forensic 200 (0) | 2017.07.05 |
[Web Browser] Codegate 2012 - Forensic 300 (0) | 2017.07.05 |