engineering/Network Eng.

Ethereal 사용법

theYoungman 2006. 8. 7. 12:11
출처 블로그 > bestkr00님의 블로그
원본 http://blog.naver.com/bestkr00/40012093656
이더리얼은 이와 달리 다양한 기능을 제공하지만 누구나 쉽게 접근할 수 있는 공개용 툴이다. 대부분 윈도우에서 이더리얼을 사용하지만 이더리얼은 원래 리눅스용으로 사용되던 툴이다.

리눅스를 많이 사용하는 사람들은 ‘tcpdump’라는 패킷 덤프 툴에 익숙할 것이다. tcpdump 가 명령어 창에서 패킷의 헤더를 본다면 이더리얼은 GUI 형태에서 프로토콜 포맷을 구분한다. (화면 1)은 똑같은 핑(ping) 패킷을 리눅스는 tcpdump로, 윈도우에서는 이더리얼로 캡처한 것이다. 물론 리눅스용 이더리얼을 사용하면 GUI 형태로 볼 수도 있다.

(화면 1) tcpdump와 이더리얼로 핑 패킷 캡처한 비교 화면. 리눅스의 tcpdump(좌)와 윈도우의 이더리얼(우)

(화면 2) 일반적인 핑 테스트 화면

(화면 2)는 일반적으로 많이 사용하는 간단한 핑 테스트의 결과 화면이다. 이를 보고 우리는 ‘아, 정상적으로 응답이 됐구나’라고 생각할 것이다. 그렇다면 패킷이 실제로 오가는 모습을 보지도 않은 우리가 그와 같이 판단하는 근거는 무엇인가. 그것은 오로지 핑 프로그램의 결과에만 의존해 정상적으로 동작했다고 판단했을 뿐이다.

하지만 패킷 분석기는 다르다. 단순히 결과를 보고 추측하는 것이 아니라 실제 네트워크 를 지나다니는 패킷들을 살펴보고, 분석할 수 있도록 한다. 핑 요청(ping Request)이 가고, 핑 응답(ping Reply)이 되돌아오는 과정을 직접 확인할 수 있는 것이다.

만약에 ‘Request timeout’이 되면 그냥 상대방 컴퓨터가 죽었기 때문이 아니라 왜 그랬는지를 파악해야만 한다. 패킷 분석기는 ‘내 컴퓨터가 못 보냈는지’ 아니면 ‘나는 보냈는데 상대 컴퓨터에서 응답이 안 온것인지’ ‘못 보냈다면 왜 못보냈는지’ 등을 파악하는데 도움을 준다.

이더리얼은 MRTG와 마찬가지로 리눅스, 솔라리스, HP-UX, FreeBSD, 윈도우, 매킨토시 등 다양한 운영체제를 지원한다. 이번 기고에서는 일반적으로 가장 많이 사용하는 윈도우 기반의 이더리얼에 대해서만 소개하도록 한다.

이더리얼은 공식 홈페이지(www.ethereal.com)에서 다운로드 받을 수 있다. 단, 주의할 점은 이더리얼 설치 전에 윈도우에서 패킷을 캡처해 주는 툴인 WinPcap를 먼저 설치해야 한다는 점이다(참고로 리눅스에서는 libpcap가 그 역할을 한다).

알다시피 운영체제의 NIC들은 자신의 인터페이스로 들어오는 패킷 중 목적지 하드웨어 어드레스가 자신이 아닐 경우는 상위로 올려보내지 않고 버리게 돼 있다. 그래서 이런 패킷들을 모두 애플리케이션단까지 올리려면 별도의 툴을 설치해야 한다. 그것이 바로 WinPcap다. WinPcap는 해당 홈페이지(http://winpcap.polito.it)에서 다운로드 받을 수 있다.

WinPcap와 윈도우용 이더리얼은 모두 윈도우용 실행 파일이므로 설치 과정은 쉽다. WinPcap는 설치가 모두 되고 나면 이더리얼에서 캡처를 하는 동안에만 사용하게 되므로 신경쓰지 않아도 된다.


캡처 옵션 사용 방법
자, 이제 이더리얼 설치가 끝났다면 (화면 3)처럼 [시작] → [프로그램] → [Ethereal] → [Ethereal]을 실행시켜보자. 누구라도 어떤 새로운 프로그램을 실행할 때 이 단계까지는 막힘없이 진행할 수 있다. 하지만 그러고 나서는? 그 다음에는 ‘이제 뭘 해야 하지’라고 고민할 것이다.

하지만 이더리얼은 고민할 필요가 없다. 왜냐하면 이더리얼은 패킷을 캡처하고 분석하는 프로그램이므로, 화면 상단에 있는 여러 메뉴 중에서 가장 적합한 의미를 지닌 ‘Capture’라는 메뉴를 바로 찾을 수 있기 때문이다. 'Capture'를 실행하면 (화면 4)와 같은 화면을 볼 수 있다. 여기서 몇 가지 옵션만 설정하고 나면 실제 이더리얼의 90%는 사용했다고 볼 수 있다.
(화면 3) 이더리얼 실행 화면

(화면 4) 필자가 자주 사용하는 캡처 옵션

(화면 4)의 옵션은 특별히 설명할 필요도 없이 간단하다. 가장 먼저 LAN 카드의 종류를 선택하도록 돼 있다. 참고로 화면상에 보이는 필자의 노트북은 Realtek의 8139 칩을 사용하는 LAN 카드가 장착돼 있다.

다음으로 필터링 옵션이 있는데, 이 부분은 옵션 사용 방법을 조금 알아야 한다. 아무것도 넣지 않으면 모든 패킷이 다 캡처돼 출력되기 때문에 원하는 패킷만을 볼 수 없다. 필터 방법에 대해서는 다시 설명하도록 하겠다.

다음으로 ‘파일(File)’ 옵션은 캡처된 파일을 별도의 파일로 저장할 수 있도록 한다. 이 기능을 이용하면 저장했다가 나중에 필요할 때 불러서 다시 사용할 수 있다.

‘화면 옵션(Display Option)’은 캡처된 파일을 실시간으로 보여줄 것인지 아니면 캡처가 끝난 다음에 보여줄 것인지를 결정한다. ‘화면 옵션’은 장단점이 있다. 실시간으로 보게 될 경우 즉각적으로 패킷들을 볼 수 있는 반면, 패킷이 많을 때는 프로그램 구동에 부하를 줄 수도 있다. 하지만 일반적인 네트워크에서는 부하 정도까지는 아니어서 필자의 경우 실시간으로 보여주기 옵션을 주로 이용한다.

‘캡처 제한’ 옵션은 숫자, 시간, 사이즈에 따라 선택할 수 있도록 돼 있으며, ‘이름 해석(name resolution)’ 부분은 패킷을 분석할 때 나타나는 하드웨어 어드레스, IP 어드레스, 포트 번호에 대해서 이름 해석을 할지를 묻는 메뉴이다.
예를 들면 어떤 패킷의 하드웨어 어드레스가 00-06-C4-11-22-33이라면, 이 하드웨어는 필자가 근무하는 ‘파이오링크’의 고유 MAC 어드레스에 속한다. 이때 어드레스 해석 기능을 사용하면 48비트 주소로 보이는게 아니라 piolink_11-22-33이라고 표시된다. TCP 포트 23번의 경우 텔넷(Telnet) 이라고 표시된다. 이 옵션은 자칫하면 캡처된 파일을 보여주는 과정에서 부하를 일으킬 수도 있으니 모든 것을 사용하는 것은 금물이다. 자 여기까지 선택이 끝났다면 그 다음은 ‘OK’를 누르면 된다.

(화면 5) 이더리얼로 캡처된 결과

(화면 5)는 기본 옵션으로 캡처한 결과다. 패킷 덤프된 결과는 크게 3개의 화면에 나타난다. (화면 5)의 맨 윗줄은 순차적으로 캡처된 패킷들의 내용이고, 가운데 창은 첫번째 창에서 선택된 패킷을 사용자가 알아볼 수 있도록 계층 구조로 표현한 내용이다. 마지막으로 맨 아랫줄은 선택된 패킷의 실제 내용으로, 16진수로 구성돼 있다. 16진수로 표시된 부분의 옆을 자세히 보면 사람이 식별할 수 있는 문자가 나와 있긴 하지만 가독성 측면에서 그리 좋지는 않다. 하지만 사용자가 어떤 웹 사이트에 ID와 암호를 넣을 경우 바로 이 부분에 해당 내용이 표시된다(꼭 한번 테스트 해 보자).

실제로 필자가 가장 많이 테스트해 보는 부분은 첫번째와 두번째의 계층 형태로 구분된 부분이다. 이 같이 계층 구조로 표현이 가능한 것은 이더리얼이 해당 프로토콜을 분석할 수 있기 때문이다. 실제 이더리얼 홈페이지에서 확인해 보니 ‘422개의 하위부터 상위계층까지의 다양한 프로토콜을 지원한다’라고 설명돼 있었다. 이 정도라면 어떤 네트워크에서든지 이더리얼을 사용할 수 있을 것이다.


/Tip! Tip! Tip!/  /
대부분의 패킷 분석기는 캡처를 하고 난 후 새로 패킷 캡처를 하면 이전에 캡처한 내용을 그냥 버리는데, 필자는 중요한 패턴이나 특이한 패턴이 있으면 저장하는 습성이 있다. 왜냐하면 자연 상태에서 만들어진 패킷들은 다시 가공해서 만들기가 힘들기 때문이다. 그래서 다른 캡처를 하기 전에 바로 메뉴바에서 ‘File - Save’를 구동시킨다. 그렇게 하면 나중에 다시 필요할 때 재확인할 수 있다. 재확인 하려면 ‘File - Open’을 구동해 저장된 파일을 선택하면 된다.
/
/
이더리얼의 필터링 기능 활용하기
이더리얼은 리눅스의 Tcpdump와 맥락을 같이 한다. 그래서 이더리얼에서 사용하는 필터링 방법은 Tcpdump만 제대로 활용할 수 있다면 보다 쉽게 접근할 수 있다. 앞에서도 잠깐 언급했지만 이더리얼을 아무런 필터링 옵션 없이 사용한다는 것은 그리 유쾌한 일은 아니다. 왜냐하면 네트워크에는 사용자가 원하는 패킷들만 지나다니는게 아니라 아주 다양한 패킷들이 오가고 있기 때문이다. 사실 이더리얼과 같은 패킷 분석기를 실행하고 나면 보고 싶은 패킷보다 그렇지 않은 패킷들을 더 많이 만나게 될 것이다. 이제부터 필터링 설정 방법에 대해 자세히 알아보자.

패킷 필터링은 ‘File-Capture’를 누르고 나면 나타나는 캡처 옵션 중 필터(Filter)에 입력하는 부분을 말한다. 이 외에도 캡처된 내용들이 화면에 뿌려질 때 사용되는 디스플레이 필터(Display Filter)가 있는데 이 부분에 대한 설명은 뒤에서 다시 하겠다. 필터에서 사용 가능한 옵션으로는 and/or/not, ‘host/net, src/dst, tcp/udp/icmp,, less/greater, ip/ether proto, ether/ip broadcast/multicast 등이 있다.

이제부터 www.nemaum.net이라는 사이트를 모델로, 실제 필터를 구동해 캡처된 패킷을 살펴보도록 하자. www.nemaum.net는 도메인을 사용했으므로 DNS가 사용될 것이다. DNS는 보통 UDP 53을 사용하는데, 예제를 든 것은 웹사이트이니 TCP 80을 사용한다. 또한 외부로 통신하기 위해 자신의 게이트웨이의 ARP 요청을 할 수도 있다. 이 경우는 (화면 6)과 같은 필터 방법을 사용할 수 있다. 이 부분은 쉽게 이해할 수 있을 것이다. 왜냐하면 위에 나열된 포트들은 이미 독자들도 이전부터 사용해 왔던 포트들일 것이니 말이다.


/Tip! Tip! Tip!/  /
만약에 ‘or’를 사용하지 않고 ‘and’ 연산을 사용했다면 어떻게 될까? 이더리얼은 실제 캡처를 시작하기 전에 필터 옵션의 문법에 맞는지를 판단한다. ‘and’를 사용할 경우 에러가 나게 된다. 왜냐하면 port 53 and arp인 패킷은 존재할 수 없기 때문이다.
/
/
(화면 6)의 오른쪽에는 실제 DNS 요청과 ARP 요청, TCP 80인 HTTP 패킷들만 보이므로 전체적인 통신을 짐작할 수가 있다. (화면 7)은 전체 패킷 중 192.168.0.0/24에 해당하는 네트워크 패킷만 원할 경우의 필터 룰이다. 이 필터는 출발지와 목적지 구분이 없는 상태이다. 만약에 사용자가 출발지 192.168.0.0/24 네트워크에 해당하는 패킷만 수집하고 싶을 경우는 ‘src net 192.168.0.0/24’로 설정하면 된다. 필터를 잘 사용하려면 원하는 필터링 옵션들을 잘 조합하는 것이 우선이다. 만약 특정 프로토콜만 캡처하고 싶다면 프로토콜 명을 사용해 필터를 적용하면 된다.

(화면 8)의 필터 옵션은 arp이거나 icmp인 패킷을 캡처하는데 사용됐다. 실제 캡처된 내용에도 arp와 icmp들만 캡처된 것을 볼 수 있다.

다음은 조금 더 세밀하게 특정 사이즈를 가진 패킷을 얻고 싶을 때 사용하는 필터에 대해 알아보자. 이런 패턴의 경우, 실제로 많이 사용하지는 않지만 최근에 발생한 ‘Welchia’ 라고 불리는 웜 바이러스가 ‘92바이트’의 사이즈를 가진 데이터를 네트워크에 있는 수많은 장비들로 보내 응답이 되돌아오면 다음 공격을 시도한다. 사실 어제 필자의 사무실 네트워크도 상당히 느려졌는데 바로 이런류의 패킷이 있었다.

/Tip! Tip! Tip!/  /
필터 적용시 종종 사용하는 옵션 중 하나는 바로 ‘not’이다. 이 옵션은 말 그대로 어떤 특정 패킷들은 너무도 당연해서 볼 필요가 없을 경우에 이들을 제외한 나머지 패킷을 보고자 할 때 사용하는 옵션이다.
/
/
그런데 우리가 앞에서 알아봤던 단순한 프로토콜 필터링 만으로는 이런 패킷만을 찾기가 쉽지 않다. 그래서 이번에는 특정 사이즈를 기준으로 필터를 사용해 보는 방법을 익혀보자.

(화면 9)의 필터는 icmp이면서 IP인 패턴인데, IP 뒤에 [2:2]라는 특이한 옵션이 붙었다. 이것은 IP 헤더 중에 전체 길이를 나타내는 필드의 위치를 표시한다. 2는 16비트로 실제 전체 길이를 나타내는 위치이다. 다음으로 나오는 2는 전체길이를 16비트라는 값에 나타내게끔 돼 있어 [2:2]가 된다. 잘 이해가 안된다면 IP 헤더의 포맷에 대해 소개한 책이나 글을 다시 보도록 하자. (화면 10)을 보면 목적지 어드레스가 계속 하나씩 증가하고 있다. 이렇게 수도 없이 핑을 날려버리기 때문에 네트워크 전체가 마비되는 경우가 종종 있다.

다음은 디스플레이에서 사용할 수 있는 필터에 대해 알아보도록 하자. ‘Display Filter’는 이미 다양한 옵션을 사용해 캡처된 파일 중, 다시 화면에 뿌려지는 내용에 필터를 걸고 싶을 때 사용한다. 여기서 사용할 수 있는 필터가 한가지 더 있는데 ‘Color Filter’가 그것이다. 이 기능을 이용하면 실제 특정 패턴의 경우 화면에 색깔을 다르게 표시할 수 있기 때문에 가독성이 좋아진다.

(화면 9) 필터 4. icmp and ip[2:2] = 92

(화면 10) 실제 사이트에서의 Welchia 웜 바이러스

이들 필터 옵션은 기본적으로 캡처할 때 사용했던 필터 옵션들에 추가적으로 사용할 수 있다. 필자의 경우는 애플리케이션 계층에 있는 컨텐츠를 확인할 때 종종 사용한다.

(화면 11)은 예전에 한창 유행했던 코드레드, 님다 웜 바이러스를 ‘Coloer Filter’를 통해 화면상에서 눈에 확 띄도록 표시한 것이다. (화면 11)의 왼쪽 그림은 Color Filter에 추가된 내용을 보여준다. 필자가 사용한 필터는 ‘tcp contains default.ida’ 와 ‘http contains cmd.exe’ 이다. default.ida는 코드레드 유형에서 사용되는 전형적인 패턴이고, cmd.exe는 님다에서 주로 사용한다. 이들을 각각 빨간색과 파란색 배경으로 나타나게 했다. (화면 11)의 오른쪽 화면은 실제 각각의 패턴이 일치했을 때 나타나게 된다. 이더리얼을 이런 방법에 응용하면 아주 유용할 것이다.

(화면 11) Color Filter를 이용해 웜 바이러스 패턴 보기


이더리얼로 네트워크 문제 파악하기
인터넷이 안될 때 가장 먼저 어디에 원인이 있다고 생각하는가. 흔히들 인터넷이 안되면 제일 먼저 상대방 서버가 다운됐거나, 자신이 사용하는 네트워크에 문제가 생겼거나, 라우터에 문제가 생겼다고 짐작할 수도 있다. 하지만 네트워크 관리자라면 짐작 수준에서 그칠 수는 없는 노릇. 지금부터 이더리얼을 이용해 네트워크에 어떤 문제가 발생하고 있는지 알아보도록 하자.

․핑(ping)이 안될 때
내 네트워크에 있는 192.168.0.100이라는 컴퓨터의 생존(?) 여부를 확인하기 위해 핑을 했는데 응답이 없었다(화면 12). 대부분 핑은 ‘ICMP Echo Request’를 날려서 응답을 받는 프로그램이기 때문에 ‘Echo Reply’가 오지 왔기 때문이라고 생각하기 쉽다. 그렇지만 아닐 수도 있다.

(화면 12) 192.168.0.100으로 핑이 안될 때 화면

(화면 13) ICMP 요청이 아니라 ARP 요청에 대한 응답을 못 받고 있는 경우

(화면 13)을 보면 192.168.0.4라는 필자의 컴퓨터는 192.168.0.100에게 ‘ICMP Echo Request’ 조차 보내지 못했음을 알 수 있다. 다만 필자의 컴퓨터는 192.168.0.100의 MAC 어드레스를 얻기 위해 ARP 요청만 반복하고 있을 뿐이다. 대부분 이더넷에서 통신을 하기 위해서는 IP에 대한 ARP 요청을 한다고 생각하지만, 핑에 대한 응답이 오지 않을 때 그렇게 생각하기 보다는 이미 ‘Request’ 됐다고 생각하는 경우가 많다.

․웹 페이지가 안 열릴 때
(화면 14)는 필자의 개인 홈페이지(www.nemaum.net)에 요청을 했는데 응답이 없는 경우다. 이때 웹 서버가 죽은것이 아닐까라고 판단할 수 있지만 방심은 금물이다. (화면 15)에서 이더리얼을 구동시킨 결과를 한번 보자. 필자의 컴퓨터 IP 어드레스 설정시 존재하지 않는 잘못된 DNS 서버들을 입력해 놓았음을 알 수 있다. 즉, www.nemaum.net에 대한 요청을 했을 때 컴퓨터는 우선 이름 풀이를 하고자 설정된 DNS 서버에 요청을 했지만 존재하지 않는 서버들은 응답을 하지 않았다. 결국 웹 서버가 죽은 것이 아니라 DNS의 오류로 접속하지 못했다는 것을 알 수 있다. 네트워크에 문제가 발생했을 때 어림짐작으로 문제의 원인을 추측하는 일은 금물이다. 이더리얼은 그런 측면에서 많은 도움을 준다.


스위치 미러링으로 네트워크 전체 오가는 패킷 캡처하기
이더리얼을 설치한 컴퓨터에서 나오고 들어가는 패킷만 잡으려면 이번 기고는 여기서 끝내면 된다. 하지만 실제 운영되고 있는 네트워크에서 문제를 찾기 위해서는 네트워크 전체를 지나다니는 패킷을 캡처할 수 있어야 한다. 흔히 초보자들이 패킷 분석기를 들고 네트워크 문제를 해결한다는 열정만으로, 문제가 생긴 네트워크에 있는 스위치에 모니터링 장비를 과감히 꽂아 놓고 한참을 들여다 보는 경우가 있는데 패킷 분석기들은 자신에게 온 패킷들만 수집하게 돼 있다.

잘 알다시피 네트워크 스위치들은 ‘MAC Learning’이라는 기능이 있어 각 포트들에 어떤 컴퓨터들이 연결돼 있는지를 알 수 있다. 그래서 목적지 어드레스가 자신이 아닌 모든 패킷을 받을 수가 없다. 이 사실은 반드시 기억하자. 그래서 가장 많이 사용하는 방법이 (그림 2)와 같이 네트워크에 있는 스위치에서 미러링을 하는 것이다.

(그림 2) 스위치의 미러링 기능을 이용한 모니터링

물론 이 방법은 스위치가 이런 기능을 제공해야 가능하다(어느 정도의 스위치들은 대부분 미러링 기능을 제공한다). 한 가지 더 중요한 사실은 미러링을 하고 나면 대부분의 스위치들의 해당 포트(모니터링 장비가 연결된 포트)는 네트워크에 연결될 수 없다는 사실이다. 이런 연결을 할 때 주의할 점은 트래픽이 굉장히 많은 곳에서 모든 패킷이 포워딩될 경우 스위치는 둘째치고 모니터링 장비의 성능에 문제가 있을 수 있다. 네트워크를 설계한다면 이런 점도 고려하기 바란다.

탭과 허브 이용해 모니터링 구현하기
다음으로 최근 많이 사용하는 방법 중 하나인 탭(Tap)이라는 장비를 중간에 두는 것이다.이 장비는 (그림 3)처럼 생겼고 모니터링하고 싶은 지점의 중간에 둬 실제로 지나가는 모든 패킷을 모니터링 장비로 보내주는 역할을 한다. 탭 영업을 하는 사람들은 스위치들은 미러링을 하면서 성능 저하가 많이 일어나기 때문에 탭을 써야 하며, 탭이 패킷 손실을 막아주기도 한다고 설명한다. 실제로 최근 금융권 같이 네트워크에 상당히 민감한 곳에서는 이런 장비를 많이 사용하고 있다.

(그림 3) Tap를 이용한 모니터링

(그림 4)는 허브를 이용한 모니터링을 구현하는 방식이다. 허브는 입력된 모든 패킷을 자신이 갖고 있는 모든 포트로 내보내면서 동작을 한다. 그래서 별도의 옵션 없이도 모니터링 장비로 패킷을 보낼 수 있다. 그렇지만 허브는 구석기 시대 장비로, 포트 네고시에이션(Port Negotiation)이나 성능에 문제를 야기시킬 수도 있다. 개인적으로는 그리 추천하고 싶은 방법은 아니다. 하지만 정말로 다른 장비를 준비하기가 힘들다면 트래픽이 몇 Mbps 수준인 작은 네트워크에서는 대체용으로 사용하는 것은 가능하다.

(그림 4) 허브를 이용한 모니터링 구현


본문에서 미처 다 소개하지 못했지만 이더리얼은 스니퍼나 리눅스의 tcpdump에서 캡처된 파일을 가져다 읽는 기능도 제공한다. 공개용 툴이고 아직 사용자 인터페이스가 많이 부족한 것이 단점이지만, 개인적으로 이더리얼은 아주 쓸만한 툴이라고 생각한다. 혹시 주위에 네트워커를 자칭하면서 네트워크 패킷 하나 확인 못하는 사람이 있다면 자신있게 이더리얼을 추천한다. @

자료출처 : http://blog.naver.com/b2future.do

Reference

Ethereal site : http://www.ethereal.com

WinPcap site : http://winpcap.polito.it