Wireshark
와이어샤크(Wireshark)는 자유 및 오픈 소스 패킷 분석 프로그램이다. 네트워크의 문제, 분석, 소프트웨어 및 통신 프로토콜 개발, 교육에 쓰인다. 원래 이름은 Ethereal이었으나 2006년 5월에 상표 문제로 말미암아 와이어샤크로 이름을 바꾸었다.
와이어샤크는 크로스 플랫폼으로, GTK+ 위젯 툴킷을 이용하여 사용자 인터페이스를 제공하며, pcap을 이용하여 패킷을 포획한다. 리눅스, 맥 OS X, BSD, 솔라리스를 포함한 다양한 유닉스 계열 운영 체제와 마이크로소프트 윈도에서 동작한다. GUI가 없는 터미널 기반 버전인 티샤크(TShark)도 제공한다. 와이어샤크, 또 TShark와 같은 프로그램과 함께 배포되는 여러 프로그램들은 자유 소프트웨어로, GNU 일반 공중 사용 허가서의 조건으로 공개된다.
Categories
- Wireshark:PacketDissection - (매뉴얼상의 명칭. Wireshark Message Dissector, Wireshark Custom Dissector 등으로 불린다.)
ETC
- PlcGateway#pandas 패킷 로그 통계 - wireshark 로그를 분석하여 (근데 결국 text 분석임) 통계
- Subtrace - Docker 컨테이너를 위한 Wireshark
CLI Tools
- Wireshark 기타 유틸리티: Mergecap, Editcap, Capinfos
- capinfos - 덤프 파일의 각종 통계(ex., 패킷 수, 전체 데이터 크기, duration, bytes/sec 등)를 산출
- mergecap - 여러 개의 pcap/pcapng 파일을 하나의 덤프 파일로 통합해주는 도구
- dumpcap - 명령 인터페이스 기반 패킷 수집기
- editcap - 패킷 덤프 파일의 일부 영역을 추출하는 도구
- reordercap - pcap/pcapng 파일에 기록된 패킷을 시간(timestamp)순으로 재정렬하는 도구
기능
와이어샤크는 tcpdump와 매우 비슷하지만 그래픽 프론트엔드에 정렬, 필터링 옵션이 몇 가지 추가된 점이 다르다.
와이어샤크는 사용자가 무차별 모드(promiscuous mode)를 지원하는 네트워크 인터페이스를 해당 모드에 추가할 수 있는 기능을 제공한다. 이로써 인터페이스의 구성 주소와 브로드캐스트/멀티캐스트 트래픽을 포함한 모든 트래픽이 해당 인터페이스에 나타난다. 그러나 네트워크 스위치 포트의 무차별 모드에서 패킷 가로채기로 말미암아 포획을 할 때 스위치를 통하는 모든 트래픽이 꼭 포획하는 포트를 거치는 것은 아니다. 그러므로 무차별 모드에서의 포획은 네트워크의 트래픽을 모두 확인하지는 못한다. 포트 미러링이나 다양한 네트워크 탭을 이용하면 네트워크 상의 어느 지점으로까지 포획 범위를 넓힐 수 있다. 단순한 수동 탭(passive tap)은 악성 코드 탬퍼링 방지 기능이 매우 뛰어나다.
리눅스, BSD, 맥 OS X에서 libpcap 1.0.0 이후 버전으로 말미암아 와이어샤크 1.4 이후부터는 와이파이 어댑터를 감시 모드에 추가할 수 있게 되었다.
Display Filter vs Capture Filter
- Display Filter는 네트워크 상에 모든 패킷을 캡처하고 필요한 뷰를 필터링 하는 것이라면
- Capture Filter는 캡처할 패킷 자체를 필터링함으로 캡쳐 패킷 용량을 획기적으로 줄일 수 있다.
Display Filter Expressions
지원 프로토콜
다음 위치에서 확인 가능:
Filter example
Data
- data.len > 0
- Application Protocol Data가 0 보다 큰 패킷 필터 하기
- 프로토콜 헤더만 존재하는 패킷들을 제외하는 목적으로 주로 사용됨
- data[4] == 0x11 and data[10] != 0x01
- Data 특정 영역에 특정 값을 가지는 패킷 필터
- Application Protocol의 Data 4번째 바이트의 값이 0x11이고 10번째 바이트 값이 0x01이 아닌 패킷 필터링 (특정 식별자를 가지는 패킷만 필터링 하는 경우 사용)
- data contains 0A:0B:0C:0D
- Data에 특정 바이트 배열 값을 포함하는 패킷 필터
- Application Protocol의 Data에 16진수로 0A0B0C0D 값을 포함하는 패킷 필터링
- data contains "\"hello\""
- Data에 특정 문자열 값을 포함하는 패킷 필터
- Application Protocol의 Data에 "hello"라는 문자열(쌍따옴표 포함)을 포함하는 패킷 필터링 (역슬러쉬 ('\') 문자는 Escape 문자로 동작해서 쌍따움표('"')를 문자값으로 인식하도록 한다)
Ethernet Protocol
-
eth.addr == 00:12:34:56:78:9A
- eth source & destination 둘 중 하나라도 해당 MAC 주소일 경우
-
eth.src == 00:12:34:56:78:9A
- eth source MAC address
-
eth.dst == 00:12:34:56:78:9A
- eth destination MAC address
IP Protocol
- ip.addr == 10.1.0.1
- 출발지나 목적지 IP주소로 검색
- ip.src == 10.1.0.1
- 출발지 IP주소로 검색
- ip.dst == 13.107.4.50
- 목적지 IP주소로 검색
TCP/UDP Protocol
- tcp.port == 8080
- TCP 출발지나 목적지 포트 번호로 검색
- tcp.srcport == 8080
- TCP 포트 출발지 포트 번호로 검색
- tcp.dstport == 8080
- TCP 포트 목적지 포트 번호로 검색
- tcp or udp
- TCP 또는 UDP 프로토콜
- tcp.flags.syn == 1 or tcp.flags.fin == 1 or tcp.flags.reset == 1
- TCP 연결 or 연결해제 or TCP 서버 포트가 닫혀 있을 때 서버 응답
HTTP Protocol
- http.host == lng1982.tistory.com
- 도메인으로 검색
필터 구문을 몰라서 추가하지 못하는 경우 (확인하는 방법)
특정 프로토콜의 특정 필드 값을 필터에 사용하고 싶은데 관련된 필터 구문을 알지 못한다면 아래와 같이 확인이 가능하다.
- Packet Details 창에서 프로토콜의 특정 필드를 마우스 오른쪽 클릭
- Apply as Filter 선택
- 해당 필드 필터링 위한 구문 확인 가능
- Selected, Not Selected 등을 통해 필터 구문 자동입력 역시 가능
Wireshark_-_apply_as_filter_menu.png
Frame 의 Arrival Time (도착 시간) 컬럼 추가
컬럼이 있는 곳에 마우스 오른쪽 버튼 클릭하면 팝업이 출력되는데 "Column Preferences..." 를 클릭하자.
Wireshark_-_Column_Preferences.png
그럼 Wireshark 의 Column Preferences 화면이 출력되는데 여기서 "+" 버튼을 클릭하여 Type 이 "Absolute date, as YYYY-MM-DD, and time" 라고 적힌 항목을 선택하면 된다.
Wireshark_-Column_Preferences-_Arrival_Time.png
editcap
editcap는 Wireshark에서 제공하는 명령줄 도구로, PCAP 파일을 여러 개로 나눌 수 있습니다.
1시간 단위로 나누기
PCAP 파일을 1시간 단위로 나누려면 아래 명령어를 사용합니다.
-
-i 3600
- 3600초(1시간) 간격으로 파일을 자릅니다. -
input.pcap
- 원본 PCAP 파일 경로. -
output.pcap
- 생성할 파일의 이름. output_00000.pcap, output_00001.pcap 등으로 자동으로 생성됩니다.
복잡한 방법
복잡한 방법은 tshark를 사용해야 할듯.
트래픽 분석 기초
서버 패킷 분석
Tcpdump#서버 패킷 분석 항목 참조.
Troubleshooting
HTTP가 IPA로 출력되는 현상
수집된 패킷 중에 프로토콜 필드가 IPA로 표시된 패킷들이 종종 있다. 이 패킷들은 아래의 설정을 통해 HTTP 패킷으로 확인할 수 있다.
Ubuntu 설치 직후 정상적으로 실행되지 않는 상황
아래와 같은 경고 대화상자가 출력될 수 있다.
Wireshark-ubuntu-install-alert.png
메시지와 같이, 권한 설정 및 그룹 추가를 진행하면 된다.
$ sudo dpkg-reconfigure wireshark-common
## 질문에 대해 <YES>를 입력하면 된다.
$ sudo usermod -a -G wireshark $USERNAME
See also
- libpcap
- netstat
- iPerf
- tcpdump
- Snort
- pcap
- Sniffnet - 오픈소스 네트워크 트래픽 모니터링 도구
- Hetty - 보안 연구를 위한 오픈소스 HTTP 툴킷
- tshark - CLI 에서 사용 가능한 Wireshark.
- vim-rest-console - vim에서
.rest
파일 다루기. - httpie
- GNS3 - 네트워크 입문자를 위한 시뮬레이터
- Kyanos - eBPF 기반의 네트워크 이슈 분석 도구
Favorite site
- Wireshark web site
- Wikipedia (en) WireShark에 대한 설명
- Protocol Analyzer: Wireshark 설치 가이드
- Wireshark wiki - CaptureFilters
- Wireshark wiki - DisplayFilters
- Mac 에서 네트워크 패킷 분석하는 방법 (Wireshark)
- [추천] Wireshark로 내가 만든 프로토콜 분석하기 1
- [추천] Tools - The Wireshark Wiki - This is a place for scripts and tools related to Wireshark / TShark that users may like to share, and for links to related NetworkTroubleshooting tools.
- Setting up a Proxy Server for traffic monitoring with Tshark | by David E Lares S | Nerd For Tech | Medium - 프록시 서버를 사용하여 트래픽 모니터링 하는 방법.
References
-
Meetup_TOAST_Cloud_-_Analyze_my_protocol_with_Wireshark.pdf ↩