slide-image


와이어샤크

[2019-1]

# 01


첫 주는 가볍게 와이어샤크에 대해서 알아보았다.

와이어샤크는 전송중인 네트워크 프레임을 캡쳐 및 해석하여 네트워크 문제점을 알아내 분석 및 해결을 해주는 도구이다.

네트워크 포렌식이나 어플리케이션 분석 등에서 쓰이는데, 캡쳐를 하고 해석기(Dissector)를 거쳐서 분류를 해주는것이다.

수집된 트래픽을 추적 파일 형식으로 저장하는데, 기본 .pcapng(next generation)이며, 확장자는 도구에 따라 다르다.

해석기는 프레임의 여러 필드와 값을 식별하여 나타내고, 프레임 내용에 대한 해석을 제공하는 도구이다.


간단히 일반 분석 작업은 네트워크 상에서 최상위 대화자(Top Talker)을 찾고, 네트워크 통신을 평문으로 살펴보거나, 어플리케이션을 사용하는 호스트를 찾고, 정상적인 네트워크 통신의 기준선이되어 적절한 네트워크 동작을 검증하거나 무선 네트워크에 연결을 시도하는 클라이언트를 식별한다. 또한 복수의 네트워크를 동시에 수집하며, 의도하지 않은 트래픽을 수집하고, 특정 호스트나 서브넷 상 트래픽 수집 및 분석을 담당해 FTP나 HTTP형식으로 전달된 파일을 검토하거나 재조립하기도 한다. 다른 수집 도구로부터 추적파일을 읽거나 최소 자원을 이용한 트래픽을 수집한다고 하는데, 그냥 한 번 써봤다.


문제점을 해결하는 작업은 경로와 클라이언트 서버 지연을 식별하거나 TCP 문제점을 파악하거나 프록시 문제점을 검출하고, 어플레케이션 응답 오류를 검출하며 네트워크 문제점 IO비율과 폐기 그래프화를 해 볼 수 있고, 오버로드된 버퍼를 식별할 수도 있으며 정상 속도보다 느린 통신을 검출할 수도 있고, 중복 IP주소를 검출하거나 네트워크 상 DHCP서버나 중계 에이전트의 문제점을 식별할 수 있다. 똫나 WLAN신초 세기 문제점을 식별하거나 세그먼트 오버로드 되는 어플리케이션 식별하는 등 셀 수 없이 많다.


포렌식 비표준 포트를 사용하는 어플리케이션을 검출하거나 의심스러운 호스트 상에서 전송되는 트래픽을 식별하고 IP주소 획득을 시도하는 호스트를 검출하며 'phone home'트래픽을 식별할 수 있다. 또한 원격 대상 주소 위치를 찾거나 글로벌 지도를 만들 수 있고, 형태가 잘못된 프레임을 검출하거나 트래픽에서 알려진 주제어를 공격 서명하는 위치를 찾을 수 있다.


이 밖에 되게 많은데 그만 쓸래..


먼저 프레임과 패킷에 대해 설명하자면, 프레임은 이더넷 헤더 등 MAC(2계층)을 사용하는 계층 헤더에서 MAC 트레일러까지의 통신을 나타낼 때 사용되는 용어로 간단히 말하면 장치들 간의 모든 통신을 프레임이라고 일컬을 수 있다.

하지만 3계층 TCP/IP통신에서의 패킷은 IP헤더부터 MAC 트레일러 앞부분까지를 의미하며, 대부분의 분석 작업은 IP헤더에서 시작하므로 일반적으로 네트워크 분석은 패킷 분석을 의미한다.


사실 와이어샤크에서는 단위를 프레임으로 잡고, 일반적으로 와이어샤크를 켰을 때 색이 보이는 화면이 패킷 목록 창이며, 하나를 한 프레임으로 본다. 

12개의 프레임이 있는 것.


그리고 프레임 하나를 더블 클릭하면, 패킷 번호와 함께 창이 뜨는데, 여기 보이는 내용 전체가 프레임내용이지만, 사실 앞의 Frame으로 시작하는 부분은 와이어샤크가 추가한 프레임 섹션으로 실제 프레임의 내용은 아니며 메타 데이터를 제공하는 목적으로 와이어샤크가 추가한 것이다.

그 밑의 내용이 실제 프레임 섹션인데, 프레임의 메타데이터는 없고, 프레임에 관련된 실질 내용만을 포함한다. 어떤 기기를 통해 어떤 주소로 패킷이 오갔는지가 보여진다.


프레임을 더블 클릭하지 않아도 일반적으로 프레임을 선택하면 밑에 보이는 창이 패킷 상세 창이다. 그림에서는 저 윗 부분이다.

패킷 상체 창 내용을 보려면 오른쪽 버튼 클릭 후 Expand All이나 Expand Subtrees로 할 수 있다.

그리고 밑의 헥사값들은 패킷 바이트 창으로 실제 컴퓨터가 읽는 정보이며, 이를 코어 엔진 해석기가 분류하는 것이다.

16진수와 아스키 형식으로 프레임의 내용을 표시한다.


패킷 목록 창에서의 윗 부분을 보면 Number열과 Time, Source&Destination, Protocol, Length, Info, Intelligent Scrollbar 열이 있다.

넘버 열은 해석기에서 시간 순서로 프레임에 숫자를 부여 해 오름차 순으로 정렬해 놓은 것이다.

이 컬럼들에 대고 오른쪽 버튼을 누르면 컬럼을 삭제하거나 디스플레이를 변경할 수 있다.


Time 열은 첫 번째 프레임(일반적으로 1번 프레임)의 도착 시간보다 얼마나 늦게 도착했는지를 제공한 창이다.

즉, 첫 번째 프레임 도착시간을 기준으로 상대시간을 제공해 놓은 것이다. 이를 이용해 패킷 지연을 탐지할 수 있다.


Source & Destination 열은 각 프레임이 이용 가능한 최상위 계층의 주소를 표기한 것이다. 

예를 들어, ARP 패킷 등 MAC주소만 갖는 프레임의 경우 MAC 주소가 표기된다. 어떤 프로토콜이냐에 의존하는 것이다.


Protocol열은 해당 프레임에 적용된 마지막 해석기를 표기해 해당 프레임이 사용된 애플리케이션을 식별할 때 쓰인다.


Length 열은 프레임의 전체 길이를 나타낸다.


Info 열은 프레임에 관한 기본적인 정보를 나타낸다. 예를 들어, Router Advertisement는 라우터 임을 알려준다.


Intelligent Scrollbar 열은 추적 파일에서 나타나는 트래픽 컬러링의 축소판 뷰이다. 

원래 보이는데, 프레임 양이 적어서 그런지 안보인다.


그리고 프레임을 선택하면 왼쪽에 보이는 이 선이 패킷 지시기이다. 


선택된 패킷과 같은 스크림에 있는 패킷들의 관계를 나타내는데, 3개 이상의 패킷을 포함하면 위 처럼 체크 표시는 선택된 패키에 대한 확인 응답 패킷을 의미한다.

그리고 체크표시가 두 개이면 선택된 패킷과 중복인 패킷을 말하고, 

수학에서 쓰이는 왜냐하면을 나타내는 점 3개 ∵ 는 선택된 패킷에 대한 응답패킷이나 스트림 상에서 다음 응답을 요청하는 패킷을 나타낸다.


그리고 패킷을 선택하고 오른쪽을 마우스를 누르면 필터링, 컬러링, 트래픽 재조립 등을 할 수 있다.


그리고 창에서 맨 밑의 부분의 상태바에서 왼쪽 동그라미는 전문가 정보 버튼으로, 패킷의 유형에 따라 프레임을 분류해준다.

그리고 그 옆은 인용 버튼으로 pcapng 파일일 때 추적 파일에 대한 설명을 추가, 편집, 열람하도록 해준다.

그 옆은 추적 파일 정보를 나타내고, 그 옆은 패킷 개수와 로드 시간, 그 옆은 현재 사용중인 프로파일을 말한다.


그리고 맨 위에서 노란색 폴더를 누르면 파일을 오픈할 수 있다.



와이어 샤크가 트래픽을 수집하는 방법은 밑의 그림과 같다.

와이어 샤크 트래픽 수집 방법에 대한 이미지 검색결과


맨 밑의 네트워크라는 것은 랜카드(이더넷 카드, 네트워크 인터페이스 카드)나 링크 계층 네트워크 드라이버를 말한다.

일반적인 클라이언트 컴퓨터의 랜카드와 드라이버를 통해서 패킷을 송수신 하는데, 와이어 샤크는 이더넷 카드와 링크 계층 드라이버에 의존한다. 


그 후 윈도우 호스트에서 WinPcap혹은 Npcap등의 수집 필터를 이용해 패킷을 수집한다. (Unix나 애플OS는 Libpcap, 로컬 USB는 USBPpcap 등 OS에 따라 다름)


그 후에 Dumpcap라는 엔진을 통해서 패킷을 본격적으로 저장하고, 캡쳐하며, 코어 엔진으로 전달한다.

이 Dumpcap 수집 엔진은 수집 프로세스를 어떻게 구동하고 정지할 것인지 조건을 지정하는데, 예를 들어 패킷을 파일 하나당 50MB 단위 프레임으로 저장해 6개 파일이 생성되면 정지한다는 등의 조건을 거는 것이다. 이렇게 저장되는 추적 파일의 디폴드 형식은 pcapng이다. 


코어 엔진은 수집 엔진으로부터 추적 파일을 전달받아 여러 종류의 해석기가 제공되는 곳이다. 전달받은 추적파일을 사람이 읽을 수 있는 형식의 프레임으로 변환해 프레임을 여러 필드로 분할하고, 내용을 분석하는 일을 수행한다.


QT 프레임워크는 이름 그대로 인터페이스를 제공하는 역할이다. 분석시 여러 대의 컴퓨터에서 디스플레이를 가능하게 조정하는 역할을 한다.


Wiretap라이브러리는 저장된 추적 파일에 대한 IO기능을 제공해 추적 파일을 읽을 때 이 Wiretap라이브러리가 각 프레임을 코어에 전달한다.

Wiretap라이브러리는 .pcap이나 .pcapng형식만 처리가 가능하다.



실습은 general101.pcapng 파일로 진행했다.


첫번째 프레임을 살펴보면 ICMPv6 라고 되어있는데, ICMP 프로토콜은 통신 연결 상태를 확인하고 에러 메시지 수신에 사용되는 프로토콜이다.

신뢰성이 없는 IP 프로토콜을 대신해 연결성을 확인하는 데에 사용되고, 문제가 생겼을 때에 원인 파악을 위해 에러 메시지를 체크하며 패킷 전달 경로를 추적해 라우팅 경로를 확인한다. 

그리고 Router Advertisement라고 되어 있는데, ICMP 질의 메시지 중 하나로, 자신이 라우터임을 알려주기 위해 응답하거나 주기적으로 발송하는 메시지 패킷이라고 한다.

ICMP 패킷의 형태가 이런데, 자세히 보면 와이어샤크와 똑같이 되어 있다.



그리고 두번째 프레임을 살펴보면 ARP 패킷이다. ARP 패킷은 네트워크 계층의 IP주소나 Data Link 계층의 MAC 주소 정보를 조회하거나 전송하는 역할을 한다. 

패킷 구조는 이렇다.


Des MAC 주소는 6바이트로, ARP 요청이면 ffffffff이며, ARP 응답이면 요청한 클라이언트의 MAC 주소라고 한다.

Src MAC 주소도 6바이트로 패킷을 보낸 노드의 MAC 주소이다.

Ethertype은 이더넷 프로토콜 타입으로 ARP는 0x806이고, RARP는 0x0835이다.

하드웨어 타입은 사용중인 하드웨어 주소 타입이며, 프로토콜은 사용 프로토콜으로 IPv4는 0x0800이다.

하드웨어 주소 사이즈는 이더넷은 6이고, 프로토콜 사이즈는 IP주소의 크기로 IPv4는 4, IPv6은 6이다.

Opcode는 Operation Code로 현재 ARP 패킷의 종류를 나타낸다. Request는 1, Reply는 2, RARP Request는 3, RARP Reply는 4라고 한다.

Target 하드웨어 주소는 ARP 요청 패킷의 경우 목적지의 MAC 주소는 주소를 알아내기 위해 패킷을 보내는 것이므로 모두 0이다.


프레임 3은 TCP의 핸드쉐이크에서 첫 번째 SYN을 나타낸다. 

Source port는 송신 노드의 포트번호를 나타내고, Des port는 수신 노드의 포트 번호이다. Sequence num은 송신 데이터의 일련 번호이다.

Ack num은 다음에 수신될 데이터의 예상 일련 번호이고, Data offset은 패킷 내의 데이터 오프셋을 말한다.

TCP flag는 TCP의 연결 및 종료 제어를 나타내는 플래그고, URG는 긴급을 나타내고, ACK는 승인, PSH는 푸쉬기능, RST는 접속 리셋, SYN은 동기화 일련번호, FIN은 데이터 전송 완료를 나타내는 플래그들이다.

window는 메시지 전송 시 흐름 제어를 나타내고, checksum은 에러 체크, urgent position은 TCP 긴급 포인터를 나타낸다.

Options는 TCP 옵션들이 나오는데, SEG_SEQ는 패킷의 일련번호를 나타내고, SEG_ACK는 패킷의 확인번호를 나타내고, SEG_FLAG는 제어비트를 나타낸다.


프레임 4는 프레임 3에 대한 응답 패킷이다.


프레임 5는 ACK 플래그로 보아 승인 패킷인 것을 알 수 있다.


프레임 6은 클라이언트가 보낸 DB-LSP-DISC(Dropbos LAN Sync Discovery Protocol)패킷인데, UDP 패킷 형태로 전송하고 있다.

UDP 패킷은 비연결형이고 비상태정보, 경량 오버헤드, 비정규적 송신률을 특징으로 한다. 따라서 핸드쉐이크가 일어나지 않고 하나의 프레임만으로 이루어진다.


나머지 프레임들은 네트워크 내부의 다른 클라이언트와 제 2, 3의 서버간의 3 way handshake임을 알 수 있다.

자세히 보면 포트가 다른데, HTTP 포트는 80이고, HTTPS 포트는 443이다.

'EVI$I0N > 2019-1' 카테고리의 다른 글

[디지털포렌식] #02  (0) 2019.04.06
[웹보안] #02  (0) 2019.04.01
[딥러닝] #01  (0) 2019.03.25
[디지털포렌식] #01  (0) 2019.03.23
[웹보안] #01  (0) 2019.03.16