본문 바로가기

보안 이론/네트워크 보안

WireShark를 이용한 패킷 분석 실습

반응형

네트워크 패킷을 직접 확인하고 패킷 내부의 데이터를 찾아내는 실습을 진행해보았다.


WireShark

가장 대표적인 오픈소스 패킷 분석 도구이다.

윈도우와 유닉스 계열 운영체제 모두에서 사용된다.

프로미스큐어스 모드를 지원하여 주소값을 무시하고 모든 패킷을 받아들일 수 있다.

강력한 필터 기능을 이용하여 여러가지 패킷을 손쉽게 찾아낼 수 있다.

 

자주 사용되는 필터링 예시

tcp.stream eq [number]

패킷들을 tcp stream 단위로 하나씩 확인하여 분석 할 수 있다.

패킷 우 클릭 - follow - TCP Stream 을 이용하면 아래와 같이 스트림 내 데이터 교환을 알기 쉽게 보여준다.

빨간색은 Requset 패킷, 파란색은 Response 패킷이다.

 

http.request.method == [method] 

http 프로토콜 패킷 중 특정한 메소드를 요청한 패킷을 필터링해서 보여준다.

GET 메소드로 찾을 시 페이지 요청이나 검색 결과 등을 찾을 수 있다.

POST 메소드를 찾을 시 로그인이나 어떠한 정보 전달의 내용을 찾을 수 있다.

 

frame contains [string]  / frame matches [string]

패킷의 문자열이 포함되어 있는 패킷만 필터링한다.

contains : 정확하게 일치하는 것만 찾음

matches : 대소문자 구분없이 비슷한 내용을 찾고 정규표현식 사용가능

contains(좌), matches(우)

명령어에 따라 결과가 차등한 모습을 보인다.

 

tcp.flags == [hex]

TCP 패킷의 플래그별로 검색할 수 있다.

https://itwiki.kr/w/TCP_%ED%97%A4%EB%8D%94

위 TCP 헤더의 구조를 보면 강조한 부분이 바로 flags 영역이다.

flags는 각 1bit씩 6bit로 구성되어있으며 URG - ACK - PSH - RST - SYN - FIN 순서로 되어있다.

만일 내가 [SYN, ACK] 패킷을 필터링하고 싶다면 0b010010(2진수) > 18(10진수) > 0x12(16진수)로 표현될 수 있다.

필터링 적용 시 다음과 같이 [SYN, ACK] 패킷만 필터링되었다.

 

두가지 필터를 같이 사용할 때는 &&, ||

여러가지 필터를 함께 사용하기 위해서는 &&(AND), ||(OR) 연산자를 이용할 수 있다.

다음은 tcp flag가 ACK 이면서 출발지 주소가 192.168.5.128인 패킷을 필터링한 내용이다.

 

패킷 내부 문자열 찾기 기능

Edit - Find packet - packet detail  or  Ctrl + F

패킷 찾기 기능을 이용하면 패킷 내부의 문자열을 쉽게 찾아준다. 

다만 앞에 드롭박스에서 packet list를 선택하면 패킷의 info에서만 찾으니 내부까지 확인하기 위해서는 packet detail로 설정해야한다.

또한 필터와 같이 이용할 수 있다.

다음은 find packet 기능으로 password를 검색한 화면이다.

 

포트스캐닝

TCP Connect Scan ( TCP Open Scan )

TCP handshake 과정을 통해 완전한 연결을 이루는 포트 스캔 방법으로 확실한 방법이지만 로그가 남을 수 있다.

열린 포트에서는 SYN+ACK 응답이 오고 ACK를 통해 연결한다.

닫힌 포트에서는 RST+ACK 응답이 온다.

 

TCP SYN Scan ( Half-Open Scan )

TCP Open Scan과 다르게 TCP Handshake로 연결되기전 연결을 종료하는 방식이다.

완전한 연결을 이루지 않아 로그가 남지않는 스텔스 스캔 방법이다.

열린 포트에서는 SYN+ACK 응답이 오고 RST를 통해 연결을 종료한다.

닫힌 포트에서는 RST+ACK 응답이 온다.

 

TCP ACK Scan

ACK 플래그만 설정해서 보내는 방식이다.

기존 포트 스캔과 다르게 포트가 방화벽에 의해 필터링 되고있는지 정책을 확인하기 위해 사용된다.

필터링 된다면 응답이 없거나 ICMP 에러를 받는다.

필터링 되지 않는다RST 응답을 받는다.

 

UDP Scan

UDP 패킷이 전달되지 못하면 ICMP Unreachable 메시지가 반환되는 것을 이용한 스캐닝 방법이다.

UDP는 다른 방식으로도 소실될 가능성이 있으므로 신뢰도가 낮다.

열린 포트에서는 아무 응답이 없고 닫힌 포트에서는 ICMP 응답이 온다.

 

TCP 엉터리 스캔

TCP FLAG를 모두 1로 설정하거나 아무 플래그도 설정하지 않는 등 정상적이지 않은 패킷을 보내는 방식이다.

엉터리인 패킷을 보내기 때문에 정상 포트에서는 응답이 없으나 닫힌 포트에서는 RST를 응답하는 점을 이용하였다.

서버와 직접 연결되지 않기 때문에 로그를 남기지 않는 스텔스 스캔 방식이다.

 

TCP X-mas Scan

플래그를 전부 설정하거나 URG, PSH, FIN 제어 플레그를 설정한 패킷을 전송한다.

 

TCP FIN Scan

FIN 패킷을 전송한다.

 

TCP NULL Scan

플래그가 전부 0인 패킷을 전송한다.

 

패킷 내부 데이터 분석 실습

내부 스파이를 찾는 문제와 예제 pcap파일을 이용해 실습을 진행해보았다.

문제 1번 - 192.168.1.158의 IP를 가진 스파이가 유출시킨 파일을 찾아라.

주어진 .pcap 파일을 열어 주어진 IP를 가진 패킷을 찾아 TCP stream을 열어본다.

내용을 정확히 해석할 수는 없지만 어렴풋이 보이는 문자열들이 있다. 

우리는 여기서 Sec558user1 이라는 사용자와 비밀 레시피를 전달하려는 징조를 볼 수 있다.

더 많은 정보를 수집하기 위해 우리는 오른쪽아래의 stream을 눌러 다음 Stream을 볼 수 있다.

 

알아볼 수 없는 정보들을 넘기고 5번 Stream에 도착해서 유의미한 정보를 찾을 수 있었다.

우리는 recipe.docx라는 파일명을 찾아내었고 그 다음 PK라는 파일 시그니처를 볼 수 있다. 

PK는 바로 docx 파일의 시그니쳐이다. 

파일 시그니처에 대한 내용은 다음 게시글에서 찾을 수 있다.

2022.09.19 - [보안 이론/웹 보안] - 파일 업로드 우회 - File Signature

 

파일 업로드 우회 - File Signature

파일 업로드 시 파일의 시그니처를 확인하는 필터링을 우회하여 업로드시키는 방법을 실습한다. File Signature (= File Magic Number) 파일 시그니쳐란 파일의 내용을 해석하기 위해 포함하고 있는 고유

taesam.tistory.com

 

우리는 이 파일의 값을 찾았으므로 해당 내용을 가지고 다시 파일의 형태로 복원할 수 있다.

현재 스트림을 Raw data로 보여지도록 바꾼 후 Save as 를 이용해 recipe.docx 파일로 저장한다.

하지만 여기에는 위 아래 불필요한 내용이 포함되어있기 때문에 이를 지워줘야 정상적인 파일로 작동할 수 있다.

바이너리를 수정하기 위해서 HxD라는 프로그램을 사용하였다.

 

파일 시그니쳐가 맨 앞으로 오도록 내용을 수정하고 뒷 부분에 파일이 아닌 부분을 지워준 뒤 저장한다.

이제 파일을 실행하면 정상적으로 동작하는 것을 확인할 수 있다.

이를 통해 우리는 패킷에서 의심스러운 동작을 찾아 파일을 추출해내는데 성공했다.

 

문제 2번 - 스파이가 도주하려는 곳을 찾아내라

스파이는 조력자 X와 함께 도주하려고 하는 중이다. 

조력자와 어떤 대화를 나누고 목적지가 어디인지 찾아내야 한다.

 

첫번째 TCP 패킷을 찾아 스트림을 열어보자

쉽게 알아볼 수 있는 문자로 되어있으며 SMTP 프로토콜을 이용한 것으로 보아 이메일을 보냈다는 걸 알 수 있다.

그리고 강조 표시를 한 부분에는 base64 인코딩으로 의심되는 문자열이 보인다. 한번 디코딩을 진행해보자.

VXNlcm5hbWU6  =>   Username:
c25lYWt5ZzMza0Bhb2wuY29t  =>   sneakyg33k@aol.com
UGFzc3dvcmQ6  =>   Password:
NTU4cjAwbHo=  =>   558r00lz

디코딩을 통해 스파이의 메일서버 아이디, 비밀번호를 탈취하였다. 

이렇듯 통신에서 쉬운 인코딩을 암호화의 성격으로 이용하면 쉽게 원문을 탈취할 수 있으니 주의하여야 한다.

 

하지만 우리의 목적은 도주 장소를 찾는 것이기 때문에 다음 스트림을 찾아보자

우리는 다음 스트림에서 X에게 보내는 메일 스트림을 찾을 수 있었다. 내용으로는 주소를 첨부했다고 나와있으며 첨부파일도 존재하였다.

그러나 파일 부분을 확인하면 시그니처를 식별하기에는 어려움이 있다. 이 파일을 보려면 어떻게 해야할까?

 

우리는 이 메시지가 메일로 보내진다는 사실을 알고 있다. 

그렇다면 이 스트림 자체를 메일 파일로 저장하여 열면 원래 형식대로 볼 수 있는 것이다.

데이터를 RAW로 바꾼 후 ".eml" 파일로 저장한다.

그리고 해당 파일을 Outlook이나 메일로 열면 다음과 같이 메일 형식을 갖춘 내용을 확인할 수 있다.

내부에 삽입된 파일을 살펴보니 스파이의 목적지를 확인할 수 있었다.

 

문제 3번 - 스파이가 서버에 침투하여 알아낸 내부 네트워크 정보를 분석하라

스파이는 네트워크에 침투하여 스캐너를 이용했다고 한다. 더 자세한 정보를 밝혀보자

패킷 캡쳐 파일을 열자마자 많은 량의 SYN 패킷과 RST, ACK 패킷이 보인다. 

이를 통해 우리는 대량의 SYN을 보낸 10.42.42.253이 스캐너일 것이라고 유추할 수 있다.

또한 SYN 패킷을 보냈기 때문에 스캔 방식은 Open scan과 Half Open scan 중 하나일 것이다.

정확하게 확인하기위해 서버가 SYN ACK를 보낸 패킷을 찾아보자

필터에 tcp.flags == 0x12 를 입력한다.

많은 SYN ACK 패킷이 탐지되었다. 이제 253에게 보낸 패킷 하나의 스트림을 확인하여 무슨 답을 내렸는지 확인한다.

스캐너는 ACK를 응답해주고 있다. 고로 TCP Connect Scan(Open Scan)을 진행하고 있다는 것을 알아내었다.

 

스캐너는 어떤 IP에 어떤 포트가 열렸다는 것을 확인했는지 알아보자

이때는 스캐너의 IP(253)가 SYN ACK를 받은 패킷을 찾아보면 될 것이다.

ip.dst eq 10.42.42.253 && tcp.flags eq 0x12 을 필터에 적용해보자

10.42.42.50135, 139번 포트가 열려있는 것을 알아낸 것으로 보인다. 

135, 139 포트는 smb를 사용하는 포트로 버전에 따라 취약점이 존재할 수 있는 포트다.

 

또한 패킷들을 살펴보면 ICMP ping scan을 진행한 정황이 보인다.

우리는 여기서도 타겟에 대한 정보를 알아낼 수 있는데 바로 ttl 값이다.

TTL 값OS마다 초기값이 다르며 Window는 128, 리눅스 계열은 64로 설정된다.

이를 이용하면 10.42.42.50 의 OS는 Window일 것이라고 유추할 수 있다.

 

또한 Apple의 MAC OS서버의 MAC 주소로 알아낼 수 있다.

Apple은 하드웨어와 OS를 같이 생산 판매하기 때문에 MAC 주소의 OUI를 확인하면 알 수 있기 때문이다.

10.42.42.25의 이더넷 패킷을 보면 다음과 같이 적혀있다.

 

결론적으로 스파이는 서버에 침투하여 10.42.42.253 ip를 이용하여 TCP Connect Scan과 Ping Scan을 진행하였으며 10.42.42 네트워크에서 25, 50, 56 호스트를 발견하였고 25의 운영체제가 MAC OS 이고 50의 운영체제가 Window인 것과 135, 139 포트가 열려있다는 것을 탐지했다.


우리는 시나리오를 통해 와이어샤크 실습을 진행하였고 암호화 없는 패킷의 취약성포트 스캔이 어떻게 진행되는 지에 대해 눈으로 직접 알 수 있었다.

반응형


Calendar
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Visits
Today
Yesterday