WireShark란?
오픈 소스 패킷을 분석하는 프로그램으로써 네트워크의 문제, 분석, 소프트웨어 및 통신 프로토콜 개발, 교육에 사용된다.
와이어 샤크 필터를 활용해 패킷을 분석 및 확인
[참고] 와이어샤크 필터
&& AND
|| OR
! NOT
== eq
ip ( addr = 출발지와 목적지, src = 출발지, dst= 목적지)
간단한 연습문제
1. 출발지 IP 주소 or 목적지 IP 주소가 172.16.5.254인 것을 출력
=> ip.addr == 172.16.5.254
2. 출발지 TCP 포트 번호 or 목적지 TCP 포트 번호가 80인 것을 출력
=> tcp.port ==80
3. 출발지 IP 주소가 172.16.5.254 이고 목적지 UDP 포트 번호가 53인 것을 출력
=>ip.src == 172.16.5.254 && udp.dstport eq 53
이런식으로 filter에 검색하는 방식이다.
wireshark 예제들을 통해 설명
wireshark filter를 실습을 통해 연습
[예제] 와이어샤크
PC---------------------------------------------서버
192.168.1.254 192.168.1.201
70:85:C2:0A:E8:F6 00:0C:29:DF:EF:B4
EX1) '192.168.1.201' ARP 요청 및 응답 캡처
PC>arp -d
PC>ping 192.168.1.201
요청
arp.src.hw_mac == 70:85:C2:0A:E8:F6 && arp.dst.proto_ipv4 == 192.168.1.201
: 처음 ARP를 요청하기 위해서는 브로드 캐스트 방식으로 보내고, 내가 요청하는것이기 때문에
출발지 arp mac주소는 나의 주소를 입력 후 더 정확한 결과를 출력하기 위해 보낸 arp 도착지의 ip주소를 입력한다.(mac주소를 알기 위해 arp요청을 하는 것이기 때문에 ip주소를 입력한 것
응답
arp.src.proto_ipv4 == 192.168.1.201 && arp.dst.hw_mac ==70:85:C2:0A:E8:F6
: 요청을 받은 서버는 자신의 ip주소를 출발지로 하고 도착지의 mac주소를 넣는다.
도착지의 ip주소를 입력해도 무방
arp.src.proto_ipv4 ==192.168.1.201 && arp.dst.proto_ipv4 ==192.168.1.254
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.254 && ip.dst == 192.168.1.201 && tcp.flags eq 0x02 && tcp.dstport == 80
ip.src == 192.168.1.201 && ip.dst == 192.168.1.254 && tcp.flags eq 0x12 && tcp.srcport == 80
ip.src == 192.168.1.254 && ip.dst == 192.168.1.201 && tcp.flags eq 0x10 && tcp.dstport == 80 && tcp.seq == 1 && tcp.ack == 1
: 3Way 핸드 쉐이킹의 결과 값을 얻어오기 위해서는 1.(SYN) 2. (SYN, ACK) 3. (ACK) 모두의 결과값을 얻어오기 위해 아래와 같이 묶어 or을 사용한다.
(ip.src == 192.168.1.254 && ip.dst == 192.168.1.201 && tcp.flags eq 0x02 && tcp.dstport == 80) or
(ip.src == 192.168.1.201 && ip.dst == 192.168.1.254 && tcp.flags eq 0x12 && tcp.srcport == 80) or
(ip.src == 192.168.1.254 && ip.dst == 192.168.1.201 && tcp.flags eq 0x10 && tcp.dstport == 80 && tcp.seq == 1 && tcp.ack == 1)
: 마지막 tcp.seq == 1 && tcp.ack == 1을 한 이유는 데이터를 주고 받을 때 TCP는 데이터 스트림을 통해 정보를 나누어 seq 번호를 정해 보낸다. 그렇기 때문에 3Way 핸드 쉐이킹의 과정을 보기 위해서는
처음 데이터를 보내는 것을 봐야 하기 때문에 seq ==1을 하는 것
Ex3) '192.168.1.201' ICMP Echo-Request, ICMP Echo-Reply 캡처
PC>ping 192.168.1.201
ip.addr == 192.168.1.201 && icmp
(ip.src == 192.168.1.254 && ip.dst == 192.168.1.201 && icmp.type == 8) or
(ip.src == 192.168.1.201 && ip.dst == 192.168.1.254 && icmp.type == 0)
Ex4) '168.126.63.1' DNS 요청 및 응답 캡처
PC>nslookup www.naver.com
ip.addr == 192.168.1.254 && dns
ip.addr == 168.126.63.1 && dns
(ip.addr == 192.168.1.254 && dns) or (ip.addr == 168.126.63.1 && dns)
또는 (ip.addr == 192.168.1.254 && dns) or (ip.addr == 168.126.63.1 && udp.port eq 53)
ip.src == 192.168.1.254 && ip.dst == 168.126.63.1 && dns.qry.name == www.naver.com
ip.src == 168.126.63.1 && ip.dst == 192.168.1.254 && dns.qry.name == www.naver.com
- 사용자 시스템 : 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.src == 192.168.20.202 && ip.dst == 210.89.160.88 && tcp.dstport == 80 && tcp.flags == 0x02) or (ip.src == 210.89.160.88 && ip.dst == 192.168.20.202 && tcp.srcport == 80 && tcp.flags == 0x12) or (ip.src == 192.168.20.202 && ip.dst == 210.89.160.88 && tcp.dstport == 80 && tcp.flags == 0x10 && tcp.seq == 1 && tcp.ack == 1)
2) Naver에서 검색한 문자열은 무엇인가?
- 네이버에서 직접 검색을 실시하여 URL 정보를 확인한 한다.
- 와이어샤크 -> 파일 -> Export Objects -> HTTP에 가서 네이버 검색 내용을 확인한다.
- 3883 패켓 클릭 -> 와이어샤크 -> 마우스우클릭 -> Follow TCP Stream -> URL 인코딩 복사
- URL 디코딩 사이트에가서 디코딩 실시~
https://search.naver.com/search.naver?sm=top_hty&fbm=1&ie=utf8&query=%ED%8F%90%EB%A0%B4
url 인코딩(한글 -> %ED%8F%90%EB%A0%B4)
url 디코딩(한글 <- %ED%8F%90%EB%A0%B4)
3) '211.216.46.15'와 실시한 SSL 3-Way 핸드 쉐이킹 및 SSL 패켓을 분석한다.
(ip.src == 192.168.20.202 && ip.dst == 211.216.46.15 && tcp.dstport == 443 && tcp.flags == 0x02) or (ip.src == 211.216.46.15 && ip.dst == 192.168.20.202 && tcp.srcport == 443 && tcp.flags == 0x12) or (ip.src == 192.168.20.202 && ip.dst == 211.216.46.15 && tcp.dstport == 443 && tcp.flags == 0x10 && tcp.seq == 1 && tcp.ack == 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.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)
=> 입력한 아이디와 패스워드를 보기 위해서는 해당 라인에서 라우스 오른쪽 클릭 -> Follow TCP Stream
아이디 : user01
비밀번호 : user01
사용한 명령어 : cat , etc, password || head -5 , exit
인 것을 알 수 있다.
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)
(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)