와이어샤크(Wireshark) 활용
와이어샤크(Wireshark)
-자유 및 오픈 소스 패킷 분석 프로그램이다. 네트워크의 문제, 분석, 소프트웨어 및 통신 프로토콜 개발, 교육에 쓰임
[참고] 와이어샤크 필터
- && : AND
- || : OR
- ! : NOT
- == : eq
ip.addr == 172.16.5.254 : 출발지 IP 주소 or 목적지 IP 주소
ip.src == 172.16.5.254 or ip.dst == 172.16.5.254
tcp.port == 80 : 출발지 TCP 포트 번호 or 목적지 TCP 포트 번호
tcp.srcport == 80 or tcp.dstport == 80
udp.port == 53 : 출발지 UDP 포트 번호 or 목적지 UDP 포트 번호
udp.srcport == 53 or udp.dtcport == 53
ip.addr == 172.16.5.254
→ip.src == 172.16.5.254 : Source: 172.16.5.254 (172.16.5.254)
→ip.dst == 172.16.5.254 : Destination: 172.16.5.254 (172.16.5.254)
ip.addr == 172.16.5.254 && tcp
→ ip.src == 172.16.5.254 && tcp : Source Port: 1320 (1320)
→ ip.dst == 172.16.5.254 && tcp : Destination Port: 1320 (1320)
ip.addr == 172.16.5.254 && tcp.port eq 80
→ ip.src == 172.16.5.254 && tcp.srcport == 80
→ ip.src == 172.16.5.254 && tcp.dstport == 80 : Source: 172.16.5.254 (172.16.5.254) | Destination Port: 80 (80)
→ ip.dst == 172.16.5.254 && tcp.srcport == 80 : Destination: 172.16.5.254 (172.16.5.254) | Destination Port: 1980 (1980)
→ ip.dst == 172.16.5.254 && tcp.dstport == 80
ip.addr == 172.16.5.254 && tcp.flags eq 0x02
→ ip.src == 172.16.5.254 && tcp.flags == 0x02 : Source: 172.16.5.254 (172.16.5.254) | .... 0000 0000 0010 = Flags: 0x002 (SYN)
→ ip.dst == 172.16.5.254 && tcp.flags == 0x02
ip.addr == 172.16.5.254 && tcp.flags eq 0x12
→ ip.src == 172.16.5.254 && tcp.flags == 0x10 : Source: 172.16.5.254 (172.16.5.254) | .... 0000 0001 0000 = Flags: 0x010 (ACK)
→ ip.dst == 172.16.5.254 && tcp.flags == 0x10 : Destination: 172.16.5.254 (172.16.5.254) | .... 0000 0001 0000 = Flags: 0x010 (ACK)
ip.addr == 172.16.5.254 && tcp.flags eq 0x10
→ ip.src == 172.16.5.254 && tcp.flags == 0x10 : Source: 172.16.5.254 (172.16.5.254) | .... 0000 0001 0000 = Flags: 0x010 (ACK)
→ ip.dst == 172.16.5.254 && tcp.flags == 0x10 : Destination: 172.16.5.254 (172.16.5.254) | .... 0000 0001 0000 = Flags: 0x010 (ACK)
ip.addr == 172.16.5.254 || tcp.port eq 80
→ ip.src == 172.16.5.254 || tcp.srcport == 80 : Source: 172.16.5.254 (172.16.5.254) | Source Port: 1980 (1980)
→ip.dst == 172.16.5.254 || tcp.srcport == 80
→ip.src == 172.16.5.254 || tcp.dstport == 80
→ip.dst == 172.16.5.254 || tcp.dstport == 80
ip.src == 172.16.5.254
ip.dst == 172.16.5.254
ip.src == 172.16.5.254 && udp
ip.src == 172.16.5.254 && udp.port eq 53
ip.src == 168.126.63.1 && udp.srcport eq 53
ip.src == 172.16.5.254 && udp.dstport eq 53
!arp
ip.addr == 172.16.5.254 && ip && !arp && !tcp && !udp
icmp
icmp[0] == 8
icmp.type eq 8
icmp[0] == 0
icmp.type eq 0
eth.dst eq ff:ff:ff:ff:ff:ff
eth.src eq 00:e0:4c:14:62:ba
arp.src.hw_mac == 00:07:70:a1:3c:02
arp.dst.hw_mac == 00:e0:4c:14:62:ba
http.host eq lm3.cafe.naver.com && tcp
[예제] 와이어샤크
PC---------------------------------------------서버
192.168.1.17 192.168.1.201
MAC D0:50:99:A8:32:73
Ex1) '192.168.1.201' ARP 요청 및 응답 캡처
PC>arp -d
PC>ping 192.168.1.201
→ ip.addr == 192.168.1.201 && arp
arp.src.hw_mac == D0:50:99:A8:32:73 && arp.dst.proto_ipv4 == 192.168.1.201
arp.src.proto_ipv4 == 192.168.1.201 && arp.dst.proto_ipv4 == 192.168.1.17
(arp.src.hw_mac == D0:50:99:A8:32:73 && arp.dst.proto_ipv4 == 192.168.1.201) or (arp.src.proto_ipv4 == 192.168.1.201 && arp.dst.proto_ipv4 == 192.168.1.17)
Ex2) '192.168.1.201' HTTP 및 TCP 3-Way 핸드 쉐이킹 캡처
웹-브라우저 -> http://192.168.1.201
→ ip.addr == 192.168.1.201 && http
→ ip.addr == 192.168.1.201 && tcp.port == 80
ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && tcp.flags eq 0x02 && tcp.dstport == 80
ip.src == 192.168.1.201 && ip.dst == 192.168.1.17 && tcp.flags eq 0x12 && tcp.srcport == 80
ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && tcp.flags eq 0x10 && tcp.dstport == 80 && tcp.seq == 1 && tcp.ack == 1 →→→→→→→→→→→→→→→→→→→ HTTP 전 통신연결 할 때 ACK를 찾기 위해서
(ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && tcp.flags eq 0x02 && tcp.dstport == 80
ip.src == 192.168.1.201 && ip) or (ip.src == 192.168.1.201 && ip.dst == 192.168.1.17 && tcp.flags eq 0x12 && tcp.srcport == 80) or (ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && tcp.flags eq 0x10 && tcp.dstport == 80 && tcp.seq == 1 && tcp.ack == 1)
Ex3) '192.168.1.201' FTP 및 TCP 3-Way 핸드 쉐이킹 캡처
PC>ftp 192.168.1.201 ID/PW -> user01/user01 종료 -> quit
→ ip.addr == 192.168.1.201 && ftp
→ ip.addr == 192.168.1.201 && tcp.port == 21
ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && tcp.flags eq 0x02 && tcp.dstport == 21
ip.src == 192.168.1.201 && ip.dst == 192.168.1.17 && tcp.flags eq 0x12 && tcp.srcport == 21
ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && tcp.flags eq 0x10 && tcp.dstport eq 21 && tcp.seq eq 1 && tcp.ack eq 1
(ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && tcp.flags eq 0x02 && tcp.dstport == 21) or (ip.src == 192.168.1.201 && ip.dst == 192.168.1.17 && tcp.flags eq 0x12 && tcp.srcport == 21) or (ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && tcp.flags eq 0x10 && tcp.dstport eq 21 && tcp.seq eq 1 && tcp.ack eq 1)
Ex4) '192.168.1.201' Telnet 및 TCP 3-Way 핸드 쉐이킹 캡처
PC>telnet 192.168.1.201 ID/PW -> user01/user01 종료 -> exit
→ ip.addr == 192.168.1.201 && telnet
→ ip.addr == 192.168.1.201 && tcp.port == 23
ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && tcp.flags eq 0x02 && tcp.port == 23
ip.src == 192.168.1.201 && ip.dst == 192.168.1.17 && tcp.flags eq 0x12 && tcp.port == 23
ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && tcp.flags eq 0x10 && tcp.port == 23 && tcp.seq == 1 && tcp.ack == 1
(ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && tcp.flags eq 0x02 && tcp.port == 23) or (ip.src == 192.168.1.201 && ip.dst == 192.168.1.17 && tcp.flags eq 0x12 && tcp.port == 23) or (ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && tcp.flags eq 0x10 && tcp.port == 23 && tcp.seq == 1 && tcp.ack == 1)
Ex5) '192.168.1.201' ICMP Echo-Request, ICMP Echo-Reply 캡처
PC>ping 192.168.1.201
→ ip.addr == 192.168.1.201 && icmp[0] == 8
→ ip.addr == 192.168.1.201 && icmp[0] == 0
ip.addr == 192.168.1.201 && icmp
ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && icmp.type == 8
ip.src == 192.168.1.201 && ip.dst == 192.168.1.17 && icmp.type == 0
(ip.src == 192.168.1.17 && ip.dst == 192.168.1.201 && icmp.type == 8) or (ip.src == 192.168.1.201 && ip.dst == 192.168.1.17 && icmp.type == 0)
Ex6) '168.126.63.1' DNS 요청 및 응답 캡처
PC>nslookup www.naver.com
ip.addr == 192.168.1.17 && dns
ip.addr == 192.168.1.17 && udp.port == 53
ip.addr == 192.168.1.17 && dns
ip.addr == 168.126.63.1 && dns
(ip.addr == 192.168.1.17 && dns) or (ip.addr == 168.126.63.1 && dns)
ip.src == 192.168.1.17 && ip.dst == 168.126.63.1 && dns.qry.name == www.naver.com
ip.src == 168.126.63.1 && ip.dst == 192.168.1.17 && dns.qry.name == www.naver.com
(ip.src == 192.168.1.17 && ip.dst == 168.126.63.1 && dns.qry.name == www.naver.com) or (ip.src == 168.126.63.1 && ip.dst == 192.168.1.17 && dns.qry.name == www.naver.com)
@ 패켓 분석-1 문제
- 사용자 시스템 : 192.168.20.202
- 사용자가 접근한 시스템 : www.naver.com(210.89.160.88), 211.216.46.15, 192.168.20.200
1) 네이버로 HTTP 서비스 요청 이전에 실시한 TCP 3-Way 핸드 쉐이킹 과정을 분석한다.
ip.addr == 192.168.20.202 && http
ip.addr == 192.168.20.202 && tcp.port == 80
ip.src == 192.168.20.202 && ip.dst == 210.89.160.88 && tcp.flags eq 0x02 && tcp.dstport eq 80
ip.src == 210.89.160.88 && ip.dst == 192.168.20.202 && tcp.flags eq 0x12 && tcp.srcport eq 80
ip.src == 192.168.20.202 && ip.dst == 210.89.160.88 && tcp.flags eq 0x10 && tcp.dstport eq 80 && tcp.seq == 1 && tcp.ack == 1
(ip.src == 192.168.20.202 && ip.dst == 210.89.160.88 && tcp.flags eq 0x02 && tcp.dstport eq 80) or (ip.src == 210.89.160.88 && ip.dst == 192.168.20.202 && tcp.flags eq 0x12 && tcp.srcport eq 80) or (ip.src == 192.168.20.202 && ip.dst == 210.89.160.88 && tcp.flags eq 0x10 && tcp.dstport eq 80 && tcp.seq == 1 && tcp.ack == 1)
2) Naver에서 검색한 문자열은 무엇인가?
- 네이버에서 직접 검색을 실시하여 URL 정보를 확인한 한다.
- 와이어샤크 -> 파일 -> Export Objects -> HTTP에 가서 네이버 검색 내용을 확인한다.
- 3883 패켓 클릭 -> 와이어샤크 -> 마우스우클릭 -> Follow TCP Stream -> URL 인코딩 복사
- URL 디코딩 사이트에가서 디코딩 실시
3) '211.216.46.15'와 실시한 SSL 3-Way 핸드 쉐이킹 및 SSL 패켓을 분석한다.
ip.addr == 192.168.20.202 && ssl
ip.addr == 192.168.20.202 && tcp.port eq 443
ip.src == 192.168.20.202 && ip.dst == 211.216.46.15 && tcp.dstport eq 443 && tcp.flags eq 0x02
ip.src == 211.216.46.15 && ip.dst == 192.168.20.202 && tcp.srcport eq 443 && tcp.flags eq 0x12
ip.src == 192.168.20.202 && ip.dst == 211.216.46.15 && tcp.dstport eq 443 && tcp.flags eq 0x10 && tcp.seq eq 1 && tcp.ack eq 1
(ip.src == 192.168.20.202 && ip.dst == 211.216.46.15 && tcp.dstport eq 443 && tcp.flags eq 0x02) or (ip.src == 211.216.46.15 && ip.dst == 192.168.20.202 && tcp.srcport eq 443 && tcp.flags eq 0x12) or (ip.src == 192.168.20.202 && ip.dst == 211.216.46.15 && tcp.dstport eq 443 && tcp.flags eq 0x10 && tcp.seq eq 1 && tcp.ack eq 1)
(ip.src == 192.168.20.202 && ip.dst == 211.216.46.15 && ssl) or (ip.src == 211.216.46.15 && ip.dst == 192.168.20.202 && ssl)
4) '192.168.20.200'으로 Telnet 접속시 아이디/패스워드는 무엇이며, 실행했던 명령어 및 내용은 무엇인가?
ip.addr == 192.168.20.202 && telnet
ip.addr == 192.168.20.202 && tcp.port eq 23
(ip.src == 192.168.20.202 && ip.dst == 192.168.20.200 && telnet) or (ip.src == 192.168.20.200 && ip.dst == 192.168.20.202 && telnet)
빨간색: 클라이언트 → 서버
파란색: 서버 → 클라이언트 (서버가 응답을 줬음)
5) '192.168.20.200'으로 SSH 접속시 교환된 패켓들을 분석한다.
(ip.src == 192.168.20.202 && ip.dst == 192.168.20.200 && ssh) or (ip.src == 192.168.20.200 && ip.dst == 192.168.20.202 && ssh)
6) '192.168.20.200'으로 FTP 접속시 아이디/패스워드는 무엇이며, 업로드 또는 다운로드한 파일/내용은 무엇인가?
(ip.src == 192.168.20.202 && ip.dst == 192.168.20.200 && ftp) or (ip.src == 192.168.20.200 && ip.dst == 192.168.20.202 && ftp)
ID: user01 PWD: user01
port 21 사용: ftp+ssl 로 보안적용되서 클라이언트→서버만 진행되어 빨간색만 보임.
키보드를 통해서 입력하였으나, 서버에서 응답하지않아 화면에서 확인되지 않음.
(ip.src == 192.168.20.202 && ip.dst == 192.168.20.200 && ftp-data) or (ip.src == 192.168.20.200 && ip.dst == 192.168.20.202 && ftp-data)