와이어샤크
와이어샤크는 자유 및 오픈 소스 패킷 분석 프로그램이다.
네트워크의 문제 분석, 소프트웨어 및 통신 프로토콜 개발, 교육에 쓰인다.
와이어샤크가 저장된 추적 파일이나 실제 수집에서 트래픽을 처리하는 방법
네트워크
와이어샤크는 수집과 분석을 위한 트래픽을 전달하기 위해 네트워크 인터페이스 카드와 링크 계층 드라이버에 의존한다. 네트워크 인터페이스 카드가 같더라도 와이어샤크를 사용할 때 2개의 특수 목적 링크 계층 드라이버를 공통적으로 사용한다. 이 특수 목적 링크 계층 드라이버는 WinPcap과 libpcap이다. 이 특수 목적의 드라이버는 네트워크상에서 있는 그대로의 데이터에 접근할 수 있는 기능을 제공한다.
네트워크 인터페이스 카드 (NIC, Network Interface Card) - 네트워크에 접속할 수 있게 하기 위해 컴퓨터 내에 설치되는 확장 카드. 네트워크 카드, 랜카드, 이더넷카드, 이더넷어댑터 등 다양하게 불리나 NIC로 부르는게 가장 적합하다.
WinPcap - 윈도우 호스트에서 사용되는 특수 목적의 링크 계층 드라이버.
Libpcap - NIX 호스트나 OS X에서 사용되는 특수 목적의 링크 계층 드라이버.
수집 필터
와이어샤크로 트래픽 수집을 시작할 때 dumpcap 이라는 도구로 실제 수집을 시작한다. 네트워크에서 온 프레임들은 특수 목적 링크 계층 드라이버 중 하나를 통해 바로 와이어샤크의 수집 엔진으로 전달된다. 수집 필터를 적용하면 수집 필터를 경유해 통과된 프레임은 수집 엔진으로 전달된다. 수집 필터는 버클리 패킷 필터링 문법을 준수한다.
dumpcap - 이 커맨드라인 도구는 '순수 패킷 수집 애플리케이션'이라고 알려졌고 와이어샤크에 포함돼 있다. 커맨드라인에 dumpcap -h를 입력해 덤프캡을 단독으로 구동할 때 어떤 옵션이 가능한지 알아볼 수 있다.
패킷 (Packet) - 네트워크를 통해 보내진 것들을 설명하는 포괄적인 용어. MAC (Media Access Control) 프레임 내부에 있는 내용.
프레임 (Frame) - MAC 계층 헤더부터 MAC 트레일러까지 통신을 언급할 때 사용한다. 장치들 사이의 모든 통신은 프레임을 사용한다.
패킷 목록 창에 있는 N0.(숫자) 칼럼(프레임 숫자) 안의 값을 언급할 때는 '프레임'을 사용한다.
Dumpcap 수집 엔진
Dumpcap 수집 엔진은 수집 프로세스 구동과 정지 조건을 지정한다.
ex) 50MB 파일 단위의 프레임으로 수집해 저장하고, 자동으로 6개의 파일이 기록되면 정지하게 설정할 수 있다. 이 파일은 추적 파일로 간주한다.
코어 엔진
수집 엔진은 프레임을 코어 엔진으로 전달한다. 와이어샤크는 들어오는 바이트를 사람이 읽을 수 있는 형식의 프레임으로 변환하는 수천 개의 해석기를 제공한다. 해석기는 프레임의 필드를 쪼개서 내용에 대한 분석을 수행한다.
그래픽 툴킷 (GTK, Graphic Tool Kit)
GIMP(GNU Image Manipulation Program) 그래픽 툴킷은 와이어샤크를 위한 크로스플랫폼 인터페이스를 제공한다. 거의 예외 없이 하나의 플랫폼에서 동작되는 와이어샤크 시스템에서 다른 플랫폼에서 동작되는 와이어샤크 시스템으로 아무런 문제없이 자연스럽게 변경할 수 있다.
Wiretap 라이브러리
Wiretap 라이브러리는 저장된 추적 파일에 대한 입출력 기능을 위해 사용한다. 추적 파일을 읽을 때 Wiretap 라이브러리는 프레임을 코어 엔진에 전달한다.
프레임과 패킷 구분
프레임
'프레임(frame)'이라는 용어는 MAC(Media Access Control) 계층 헤더(이더넷 헤더와 같은)부터 MAC 드레일러까지 통신을 언급할 때 사용한다. 패킷 상세 창의 내부를 조사하면 맨 위에 있는 프레임 섹션을 볼 수 있다. 이 섹션을 확장하면 시간, 색상, 그리고 와이어샤크가 프레임에 추가한 정보를 볼 수 있다. '이더넷Ⅱ'이라는 이름으로 두 번재 줄에서 시작하는 실제 프레임은 프레임(메타 데이터)과 관련된 정보만을 포함하는 와이어샤크의 프레임 섹션이다. 여기에 프레임의 실제 내용은 들어있지 않다.
이더넷 (Ethernet) - 공유된 매체에 물리적 연결과 비트 전송 메커니즘과 프레임 구조에 관련된 네트워킹 기술을 정의.
이더넷 헤더 (Ethernet header) - 네트워크 계층 헤더 앞에 위치. 근거리 통신망에 있는 한 컴퓨터에서 다른 컴퓨터로 가는 패킷을 얻는다. 이더넷 헤더가 패킷에 위치하면 이를 프레임이라고 한다. 일반적 형식은 EthernetⅡ이고, 목적지 하드웨어 주소(6bite), 발신지 하드웨어 주소(6bite)와 유형 필드(2bite)를 포함한다.
메타 데이터 (metadata) - '추가 데이터'라는 의미. 와이어샤크에서 패킷 상세 창의 맨 꼭대기에 있는 프레임 섹션 안의 메타 데이터를 볼 수 있다.
패킷
패킷은 MAC 프레임 내부에 있는 내용이다. TCP/IP 통신에서 패킷은 IP 헤더에서 시작해 MAC 트레일러 바로 앞까지다. 분석 작업이 대부분 IP 헤더에서 시작하기 때문에 보통 사람들은 네트워크 분석을 '패킷 분석'으로 생각한다.
TCP/IP (Transmission Control Protocol / Internet Protocol) - 전 세계의 컴퓨터 시스템 사이의 연결을 제공하는 모든 프로토콜과 애플리케이션 전체를 말한다. TCP와 IP 단일 프로토콜보다 더 큰 의미로 UDP, ICMP, ARP 등 모든 프로토콜을 포함한다.
세그먼트
세그먼트는 TCP헤더 뒤에 있는 내용이다. 이것은 HTTP 헤더나 데이터만을 포함할 수 있다.
네트워크를 지나가는 HTTP 패킷 따라가기
위 그림은 클라이언트와 2개의 스위치, 하나의 표준 라우터, 네트워크 주소 변환을 수행하는 라우터와 서버를 포함하는 네트워크 경로이다.
클라이언트
모든 장치는 MAC 헤더 안에 있는 로컬 장비의 하드웨어 주소로만 보낼 수 있다. 경로상에 있는 첫 번째 라우터에서 MAC 헤더는 벗겨진다. (MAC 헤더는 임시적이고, 경로상에서 다음 홉에 패킷을 전달하는 데 사용된다). 위의 IP 헤더 예제에서 패킷은 10.1.0.1(클라이언트)에서 74.125.224.143(서버)로 주소 지정이 돼 있다.
스위치
실제 스위치는 프레임의 내용에 영향을 미치지 않는다. switch1은 단순히 목적지 MAC 주소(MAC 주소B)를 살펴보고, 호스트가 스위치 포트에 연결돼 있는지를 판단한다. 스위치 포트가 MAC 주소 B와 관련이 있다는 것을 스위치가 알게 되면 스위치는 프레임을 해당 포트로 보낸다.
라우터
프레임을 수신하자마자 프레임이 변경되지 않았다는 것과 프레임의 주소가 라우터의 MAC 주소로 지정됐다는 것을 검사한 후에 라우터는 이더넷 헤더를 벗겨낸다.
라우터는 패킷 안의 목적지 IP 주소를 조사하고, 그 패킷을 어떻게 처리할지 판단하기 위해 라우팅 테이블을 살펴본다. 라우터가 목적지 IP 주소로 가는 경로를 알지 못하면 라우터는 그 패킷을 폐기할 것이고 라우팅 문제가 발생했다는 메시지를 생성자에게 보낼 것이다.
라우터가 패킷을 전달하는 데 필요한 정보를 가지고 있다면 라우터는 IP 헤더의 TTL 필드 값을 1만큼 줄이고, 그 패킷을 라우터/NAT 장치로 보내기 전에 새로운 이더넷 헤더를 적용한다.
Time to Live(TTL) - 이 IP 헤더 필드는 네트워크 경로를 따라 전달되는 라우터에서 1씩 감소된다. TTL 값이 1인 상태에서 라우터에 도착하면 TTL을 0으로 내릴 수 없기 때문에 그 패킷은 더 이상 전달되지 않는다. 해당 패킷을 제거한다.
라우터/NAT
라우터/NAT 장치는 패킷을 전달하기 전에 앞의 라우터와 동일한 라우팅 프로세스를 갖는다. 게다가 라우터/NAT 장치는 발신지 IP 주소와 발신지 포트 숫자를 변경시키면서 원래의 발신지 IP 주소와 발신지 포트 숫자를 표시해둔다. 라우터/NAT 장치는 이 정보를 새롭게 지정된 출구용 IP 주소와 포트 숫자에 연관시킨다.
서버
이 시점에서 Point4에서 봤던 것과 동일한 프레임을 볼 것이다.
스위치는 MAC 주소를 기반으로 프레임을 전달한다.
위 그림 안에서 스위치에 와이어샤크 시스템을 연결했다면 HTTP 클라이언트와 HTTP 서버 간의 트래픽은 아무것도 볼 수 없을 것이다. 스위치는 브로드캐스트, 멀티캐스트, 그리고 와이어샤크 시스템의 MAC 주소로 지정된 트래픽만을 전달할 것이다.
- 질문(questions) 탭 - All Questions로 돌아가려면 클릭한다.
- 태그(tags) 탭 - 질문과 관련된 태그의 목록을 보려면 클릭한다.
- 사용자(users) 탭 - Q&A 포럼에 참여한 사용자를 보려면 클릭한다. 또한 이 영역은 상태 색상, 카운트, 관리 상태도 포함한다.
- 배지(badge) 탭 - Q&A 포럼에 참여한 참가자들이 얼마나 많은 공헌을 얻었는지를 보려면 클릭한다.
- 응답하지 않은(unanswered) 탭 - 아직 대응하지 못하고 고려중인 질문을 보려면 클릭한다.
- 질문하기(ask a question) 탭 - 질문을 하려면 클릭한다. 아직 무료 계정이 없으면 계정을 생성하고 새로운 신임장으로 로그인하면 질문이 저장될 것이다.
- 검색(search) 영역과 버튼 - 관심 있는 주제를 먼저 검색한다. 이곳은 시작하기 매우 좋은 장소다.
- 투표 개수(vote count) - 포럼 사용자들이 질문에 대한 선호/비선호를 투표할 수 있다.
- 응답 개수(answer count) - 숫자는 질문에 대해 얼마나 많은 응답이 제출됐는지 나타낸다.
- 열람 개수(view count) - 숫자는 질문을 얼마나 많이 보았는지 표시한다. 이것은 주제가 얼마나 관심이 많은지를 결정하는 좋은 지표다.
- 질문 제목(하이퍼링크)과 태그 - 질문 페이지로 점프하려면 질문 제목을 클릭한다. 태그는 질문에서 해소된 토픽(들)을 표시한다.
- 버튼으로 점프하기(active) - 활성 중인 질문의 목록, 새로운 질문, 질문들, 가장 많이 투표한 질문으로 점프하려면 이 버튼을 클릭한다.
- 질문 활동 연혁과 공헌자 정보 - 질문이 얼마나 오래됐는지, 누가 최근에 질문에 공헌했는지, 마지막 공헌자의 정보를 이 영역에서 표시한다. 공헌자 정보는 카르마 수준과 관리 수준을 포함한다.
와이어샤크의 주요 그래픽 인터페이스 요소
- 타이틀 바 (Title Bar) - 추적 파일 이름, 수집 (또는 캡쳐) 장치 이름 또는 와이어샤크 버전 번호
- 메인 메뉴 (Main Menu) - 표준 메뉴
- 메인 툴바 (Main Toolbar) - 이 아이콘 버튼을 사용하려면 학습이 필요
- 디스플레이 필터 영역 (Display Filter Area) - 살펴보는 트래픽의 양을 줄여준다.
- 패킷 목록 창 (Packet List Lane) - 각 프레임 요약
- 패킷 상세 창 (Packet Details Pane) - 분석된 프레임들
- 패킷 바이트 창 (Packet Bytes Pane) - 16진수와 아스키 값으로 표현된 상세한 내용
- 상태 바 (Status Bar) - 전문가, 주석, 패깃 개수, 프로파일에 대한 액세스
메인메뉴
Go와 Capture 메뉴 항목에 있는 모든 기능은 메인 툴바를 사용하는 것보다 빠를 수 있다.
- File 파일 집합을 열고, 패킷의 부분집합을 저장하고, HTTP 객체를 내보낸다.
- Edit 표시된 모든 패킷, 무시된 패킷, 시간 참조를 지운다.
- View 툴바와 창을 보이거나 숨기고, Time 칼럼 설정을 편집하고, 색상을 다시 설정한다.
- Analyze 디스플레이 필터 매크로를 생성하고, 활성화된 프로토콜을 보여주고, 디코드되 내용을 저장한다.
- Statistics 그래프를 만들고, 다양한 프로토콜을 위한 통계 창을 만든다.
- Telephony 관연된 기능(그래프, 차트, 재실행)을 모두 수행한다.
- Tools 패킷 내용에서 방화벽 규칙을 만들고, Lua 스크립팅 도구에 접근한다.
- Internals 해석기 테이블과 지원되는 프로토콜의 목록을 보여준다.
- Help 와이어샤크가 전역 구성과 개인별 구성 파일을 어디에 저장하는지 알려준다.
메인 툴바 & 필터 툴바
메인 툴바
- List the available capture interfaces / Show the capture options / Start a new live capture / Stop the running live capture / Restart the running live capture
- Open a capture file / save this capture file / Close this capture file / Reload this capture file
- Find a packet / Go back in packet history / Go forward in packet history / Go to the packet with number / Go to the first packet / Go to the last packet
- Colorize Packet List / Auto Scroll Packet List in Live Capture
- Zoom in / Zoom out / Zoom 100% / Resize All Columns
- Edit capture filter / Edit or apply display filter / Edit coloring rules / Edit preferences
- Show some helps
필터 툴바
- Number("No.") 칼럼 - 각 프레임은 숫자가 할당된다. 별도로 언급하지 않아도 트래픽은 No. 칼럼을 기준으로 낮은 것에서 높은 순으로 정렬된다.
- Time 칼럼 - 별도로 언급하지 않아도 와이어샤크는 각 프레임을 Time 칼럼 안의 처음 프레임과 비교해 도착했을 때를 보여준다.
- Source와 Destination 칼럼 - 각 프레임 안에서 이용 가능한 최상위 계층 주소를 보여준다. 어떤 프레임은 MAC 주소만 갖고 있는데, 이 MAC 주소는 Source와 Destination 칼럼에 표시된다.
- Protocol 칼럼 - 와이어샤크는 해당 프레임에 적용된 마지막 해석기를 표시한다. 이것은 사용된 애플리케이션을 알아내는 최적의 장소이다.
- Length 칼럼 - 각 프레임의 전체 길이를 표시한다.
- Info 칼럼 - 해당 프레임에 관한 기본적인 정보를 제공한다.
상태바
- Expert Infos 버튼 - 패킷 설명문처럼 추적 파일 안에 보인 여러 가지 네트워크 관심사에 대해 경보할 수 있다.
- Annotation 버튼 - 추적 파일 설명문을 추가하거나, 편집하거나, 보기 위해 이 버튼을 클릭한다. 이 특성은 추적 파일이 .pcapng 형식으로 저장됐을 때만 사용할 수 있다.
- 첫 칼럼 - 필드, 수집, 추적 파일 정보 획득
- 둘째 칼럼 - 패킷 개수(Total과 Displayed)를 획득
- 셋째 칼럼 - 현재 프로파일 결정
실습1
wireshark를 시작하여 File Open 버튼을 클릭하고, general101.pcapng을 더블 클릭한다. 패킷 목록 창을 살펴보자.
프레임 1은 IPv6를 사용한다. 이더넷 안과 패킷 상세창 안에 있는 이 프레임에 대한 IP 헤더를 살펴보면 이것은 IPv6 멀티 캐스트로 보인다.
프레임 2는 ARP 패킷이다. 이 ARP 요청은 목적지 IP 주소의 MAC 주소를 알기 위해 보낸 것이다.
프레임 3은 HTTP 포트에 대한 TCP 핸드셰이크 패킷이다. 다시 한 번 네트워크의 구성도를 완성하기 위해 이더넷 헤더와 IP 헤더를 살펴본다. 대상이 응답하지 않았으므로, 대상이 그곳에 있다고 말할 수 없다. 네트워크 상에서 응답할 때까지 물음표로 표시할 것이다.
프레임 4는 프레임 3에 대한 응답이다. 프레임 4 안의 발신지 MAC 주소를 살펴보면 이것은 발신지 서버가 아닌 라우터에서 온 것을 확인할 수 있다.
새로운 MAC 헤더에는 새로운 발신지 MAC 주소로서 이 네트워크에 있는 라우터의 인터페이스 주소와 새로운 목적지 MAC 주소로서 목적지 장치의 주소를 포함한다. 이것이 라우터가 패킷을 전달하는 방법이다. 로컬 네트워크 상에서 로컬 라우터의 MAC 주소로 오는 많은 서로 다른 IP 주소를 가진 트래픽을 볼 수 있다.
프레임 5는 TCP 3 방향 핸드세이크를 종료한다.
프레임 6은 클라이언트로부터 온 DB-LSB-DISC 패킷이다.
이 패킷은 브로드캐스트 주소로 보낸 것이다.
프레임7은 또 다른 TCP 핸드셰이크 패킷이지만 새로운 발신자와 목적지를 갖는다.
이제 새로운 발신지 MAC과 IP주소와 새로운 목적지 IP 주소를 그릴 수 있다.
대상이 분명하게 거기에 있다고 할 때까지 대상에게 패킷을 보내는 것을 기다려야 한다.
프레임 8은 HTTP 서버(199.59.150.9)에서 오는 응답이다. 이 서버가 유선상에서 대화하는 것을 이제 알 수 있게 됩니다. 프레임9는 TCP 핸드셰이크의 마지막 부분이다.
<프레임9>
프레임10은 또다른 로컬 호스트가 다른 서버에게 연결을 시도한다는 것을 표시한다.
이번에 대상은 HTTPS 포트인 포트 443이다.
프레임11은 대상으로부터 온 응답이다. 이제 대상이 동작 중이라는 것을 가정할 수 있다. 프레임12는 TCP 핸드셰이크와 추적 파일에서 처음 몇 개의 패킷을 조사함으로써 발견될 수 있는 네트워크의 구성도 그리기를 마무리한다.
결과적으로 서로 다른 대화는 대부분 동시에 일어난다. 살펴본 패킷을 기반으로 네트워크의 구성도를 완성할 수 있었다. 트래픽을 기반으로 네트워크의 구성도를 완성하는 것은 분석에서 사용되는 공통 작업이다.
실습2
와이어샤크를 제외하고 자신의 시스템에서 구동되는 모든 정상 백그라운드 어플리케이션을 닫는다.
메인 툴바 위의 Capture Interfaces 버튼을 클릭한다.
활성 중인 트래픽을 보여주는 인터페이스의 전면에 있는 체크박스를 선택한다.
Start를 클릭하고 최소한 5분동안 수집한다.
메인 툴바 위의 Stop Capture 버튼을 클릭한다.
Protocol 칼럼과 Info 칼럼에 집중한다.
대부분 네트워크상의 다른 호스트로부터의 브로드캐스트나 멀티캐스트 트래픽을 볼 수 있다.
실습3
메인 툴바 위의 File Open 버튼을 클릭하여 http-winpcap101.cap를 클릭한다.
이 파일은 마이크로소프트의 네트워크 모니터 v3.4를 사용해 수집됐지만, 와이어샤크는 형식 v3.4로 저장됐으므로 이를 NetMon v2로 표시한다.
열기(O)를 클릭한다.
파일이 열리면 File -> Save As 를 선택하고, 파일 유형 옆의 드롭다운 메뉴 화살표를 클릭한다. Wireshark - pcapng(*.pcapng;*.pcapng.gz;*.ntar;*.ntar.gz) 와 파일 이름 http-winpcap101.pcapng를 선택한다.
도전과제
질문 1-1 이 추적 파일에는 얼마나 많은 패킷이 있는가?
질문 1-2 IP 호스트는 무엇으로 프레임 1, 2, 3 안에서 TCP 연결을 만드는가?
192. 168. 1. 108 과 50. 19. 229. 205 사이의 연결
TCP 연결
1단계 : 호스트1이 호스트2에게 연결요청정보가 담긴 세그먼트 전송
2단계 : 호스트2는 호스트1에게 확인응답 세그먼트 전송 & 연결요청정보가 담긴 세그먼트 전송
3단계 : 호스트1은 호스트2에게 확인응답 세그먼트 전송
질문 1-3 프레임 4로 보낸 HTTP 명령어는 무엇인가?
-> HTTP GET 요청
질문 1-4 이 추적 파일 안에서 가장 긴 프레임 길이는 얼마인가?
-> Length 칼럼을 두번 클릭하면 프레임 길이가 큰 순서부터 패킷을 정렬시킬 수 있다.
질문 1-5 어떤 프로토콜이 Protocol 칼럼에 보이는가?
-> TCP 와 HTTP
질문 1-6 HTTP 서버가 보낸 응답은 무엇인가?
-> 302 Found 응답
질문 1-7 이 추적 파일 안에 IPv6 트래픽이 있는가?
-> 없다. IPv4 만을 디스플레이한다.
'Wireshark' 카테고리의 다른 글
와이어샤크 개론 - 2장 (0) | 2016.11.04 |
---|