By 드루 라빈(Dru Lavigne)
포트 컬렉션에 있는 유틸리티 중에서 내가 좋아하는 것 중 하나는 네트워크 분석기인 이더리얼(Ethereal)이다. 나는 그동안 NT의 네트워크 모니터와 노벨의 Lanalyzer를 사용해왔지만 그 두 가지 중 어떤 것도 이더리얼의 기능에는 부합하지 않았다.
만약 이전에 네트워크 분석기를 사용해본 경험이 없다면 아마도 왜 이와 같은 유틸리티를 사용해야 하는지 궁금할 것이다. 그 이유는 네트워크 수행 속도가 느려진 것을 경험할 때 이와 같은 유틸리티가 네트워크 관리자에게 도움을 주기 때문이다. 특히 네트워크 분석기는 어떤 NIC와 케이블 세그먼트 그리고 어떤 프로토콜이 트래픽을 가장 많이 발생시키는지 정확히 알려준다. 그리고 분석기의 결과는 네트워크 관리자가 케이블을 업그레이드 해야 할지, 결점이 있는 NIC를 교환해야 할지, 브릿지를 설치해야 할지, 네트워크 바인딩을 재배열해야 할지, 대화가 덜 발생하는 프로토콜을 사용해야 할지를 결정하는데 사용될 수 있다.
보안 엔지니어는 방화벽 시스템이 보안 정책에 따라 요청에 응답했는지 결정하는데 분석기의 결과를 사용할 수 있다.
그리고 마지막으로 네트워크 분석기의 결과는 OSI 모델의 실무적인 이해 및 프로토콜이 상호 교류하는 방법을 얻을 수 있는 가장 좋은 학습 환경을 제시한다.
네트워크 분석기를 사용하기 전에 단 한 가지 주의할 사항이 있다면 이러한 유틸리티들은 케이블 세그먼트를 통과하는 모든 프레임의 내용을 캡처하고 살펴보기 위해 설계되었다는 것이다. 그렇게 해도 된다는 명백한 퍼미션이 없다면 LAN 에 속한 케이블 세그먼트를 모니터 해서는 안된다.
이더리얼을 사용하기 전에 X 서버와 윈도우 관리 프로그램의 초기 설정을 할 필요가 있다. 일단 설정을 하고 나면 이더리얼을 구축하는 가장 쉬운 방법은 포트 컬렉션에 있다. 인터넷에 접속하는 동안 루트로 하면 된다.
cd /usr/ports/net/ethereal
make && make install
|
일단 이 작업이 끝나면
/usr/X11R6/bin/ethereal
네트워크 분석기를 실행시키는 것은 관리 작업이다. 만약 여러분이 좋아하는 윈도우 관리자 메뉴에 이더리얼을 추가하고 싶다면 루트로 X 윈도우 세션을 시작해야만 한다. 교대로X 윈도우 세션을 정규 사용자로서 시작할 수도 있다. xterm, su를 루트로 열고 xterm에서 이더리얼을 시작한다. 만약 정규 사용자로 이더리얼을 시작했다면 유틸리티는 시작되지만 모니터에 인터페이스를 보여주지는 않는다.
이더리얼은 필터를 디스플레이하고 캡처하는 사용 능력이 있다. 이러한 것을 만드는 것은 이 기사의 범주를 벗어나는 것이지만 다음과 같은 코드를 실행함으로써 사용중인 필터에 대한 더 자세한 정보를 얻을 수 있다.
또한 이더리얼의 메인 웹사이트인
http://www.ethereal.com/를 방문해도 더 자세한 정보를 얻을 수 있다. 특히 여러분이 프로토콜과 네트워크 분석에 대해 더 자세한 리서치를 하고싶다면 FAQ로 리서치를 시작할 수 있을 것이며 유용한 관련 페이지도 잘 연결되어 있다. 그리고
http://www.protocols.com/ 사이트를 방문했을 때 무료 프로토콜 포스터를 주문할 것을 잊지말길…
그러면 이제 예제 캡처를 시작해보도록 하자. 우리는 간단한 핑으로부터 시작할 것이다. 나에게는 IP 주소가 10.0.0.1인 알파라고 불려지는 컴퓨터와 IP 주소가 10.0.0.3인 감마라고 불려지는 컴퓨터가 있다. 나는 감마에서 이더리얼의 시동을 걸어 캡처 메뉴를 클릭한 후 시작 버튼을 눌렀다. 나는 루트 상태이기 때문에 감마에 있는 인터페이스 리스트의 상태로 제시되어 있다. 나는 LAN 케이블에 첨부되어 있는 것을 선택해서 OK를 클릭했다. 점점 더 흥미진진한 상태를 만들기 위해 나는 알파 컴퓨터의 전원을 고의로 켜지 않을 것이다.
이러한 작업을 하는 것을 두려워 하지 말아라. 다운되거나 존재하지 않는 것을 호스트로 단지 핑하는 것뿐이다. 나는 xterm을 열어서 아래와 같이 타이핑을 했다.
그리고 기다렸다. 놀라울 것도 없이 아무 일도 일어나지 않았다. 나는 ping과 xterm을 끝내기 위해
Ctrl-C을 누르고 아래와 같은 메시지를 받았다.
PING 10.0.0.1 (10.0.0.1): 56 data bytes
ping: sendto: Host is down
^C
--- 10.0.0.1 ping statistics ---
7 packets transmitted, 0 packets received, 100% packet loss
|
이더리얼로 돌아가서 나는 캡처를 멈추고 그 결과를 살펴보았다. 나는 리스트된 7개의 패킷을 갖고 있지만 그것들은 모두 ARP(address resolution protocol) 패킷이었으며 핑으로 기대하고 있던 ICMP echo/reply 패킷이 아니었다.
OSI 모델에 대한 강의를 통한 방법을 넓혀주는 기회를 가져본 적이 없는 사람들을 위해 TCP/IP 네트워크에 대한 전송의 첫 번째 규정을 방금 시연해 보였다. 패킷을 받게될 NIC의 MAC 주소를 알게 될 때까지 어떤 유니캐스트 패킷도 들어갈 수 없다. 이것이 ARP 및 주소 분해 프로토콜의 역할이다.
여러분이 캡처에서 보듯이 ARP는 그렇게 복잡하고 어려운 프로토콜은 아니다. 그것은 10.0.0.3과 구별되는 10.0.0.1을 누가 갖고 있느냐고 묻는 케이블 위로 브로드캐스트(ff:ff:ff:ff:ff:ff의 목적지)를 보낸다. 혼잡스러운 방안을 "엄마 어디 있어요?"라고 외치며 돌아다니는 네 살짜리 꼬마아이를 상상해볼 때 위와 같은 상황과 그 꼬마가 처한 상황은 거의 똑같다고 볼 수 있다.
그것은 작업을 수행하는 가장 고상한 방법은 아니지만 대개의 경우 꽤 효율적인 방법이기는 하다.
왜냐하면 10.0.0.1이 응답할 수 없기 때문에 패킷에 보낼 MAC 주소가 없으며 ping은 ICMP 패킷을 보낼 수 없다.
알파 컴퓨터의 시동을 걸어 또다른 캡처를 시작해보자. 그리고 10.0.0.1로의 핑을 다시 한 번 시도해보자.
ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1): 56 data bytes
64 bytes from 10.0.0.1: icmp_seq=0 ttl=255 time=0.675 ms
64 bytes from 10.0.0.1: icmp_seq=1 ttl=255 time=0.522 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=255 time=0.508 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=255 time=0.498 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=255 time=0.509 ms
64 bytes from 10.0.0.1: icmp_seq=5 ttl=255 time=0.524 ms
^C
--- 10.1.0.2 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.498/0.539/0.675/0.061 ms
|
내가 캡처를 종료시키면 14개의 패킷이 캡처되었음을 볼 수 있을 것이며 이러한 것들 중 두 개가 ARP 패킷일 것이다. 그리고 이러한 패킷 중 첫번째 패킷은 10.0.0.3과 구별되는 10.0.0.1을 누가 갖고 있는가를 묻고있다. 두 번째 패킷은 MAC 주소와 함께있는 10.0.0.1로부터 온 응답이다. 이외의 12개의 패킷들은 ICMP패킷으로 이들 중 절반은 Echo (ping) 요청이고 나머지 절반은 Echo (ping) 응답이다.
이때 여러분이 이 캡처를 다시 한 번 반복하고 6개의 패킷을 전송시킨다면 캡처는 단지 12개의 ICMP 패킷들만을 보여줄 것이다. 그렇다면 2개의 ARP 패킷에 무슨 일이 일어난 것인가? 이에 대한 해답을 알아내기 위해 xterm 타입에서 알아보자.
arp -a
alpha (10.0.0.1) at 0:0:b4:3c:56:40 [ethernet]
|
ARP는 최근에 분해된 MAC 주소들의 리스트를 유지시켜주는 캐시(메모리 영역)를 이용한다. 이것은 브로드캐스트의 숫자를 감소시킨다. ARP가 이미 알파의 MAC 주소를 알고있기 때문에 ARP는 그것을 위한 또 다른 요청을 발행해야 할 필요는 없다.다음과 같이 타이핑하면
arp -d -a
ARP 캐시에 있는 모든 엔트리들을 제거할 것이며
arp -a
프롬프트로 다시 환원할 것이다.
지금 캡처와 핑을 반복한다면 2개의 여유 ARP 엔트리가 다시 나타나는 것을 보게 될 것이며
arp -a
알파의 MAC 주소를 다시 한 번 더 보여줄 것이다.
이제 FTP 트래픽을 살펴보자. 감마에서 나는 캡처를 시작했다. 그리고 알파에서는 아래와 같은 코드를 타이핑했다.
ftp 10.0.0.3
Connected to 10.0.0.3
220 gamma FTP server (Version 6.00LS) ready.
Name (10.0.0.0:genisis): anonymous
530 User anonymous unknown.
ftp: Login failed.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
|
나는 감마에서 익명의 FTP 로그인 계정을 설정하지 않았기 때문에 로그인에 실패하였다. 내가 캡처를 중지했을 때 나에게는 총 10개의 패킷이 있었다.
첫 3개의 패킷은 TCP 프로토콜에 사용되었으며 플래그가 [SYN] (핸드셰이크의 1단계), [SYN, ACK] (핸드셰이크의 2단계), [ACK] (핸드셰이크의 3단계)로 설정됨에 따라 TCP의 3가지 핸드셰이크를 대표한다. 핸드셰이크 프로세스가 성공적으로 마무리될 때까지 어떤 FTP 패킷도 보내어지지 않는다.
첫 FTP 패킷이 알파 컴퓨터로 보내지고 알파 컴퓨터의 스크린에 첫번째로 나타나는 정보는 아래의 메시지를 포함한다.
220 gamma FTP server (Version 6.00LS) ready.
|
이것은 실제로 첨부된 데이터 페이로드를 갖고 있어야 하는 우리가 이미 캡처한 첫번째 패킷이다. 이더리얼에서 이것을 강조하고 이더리얼 스크린의 두 번째 섹션을 살펴보자.
+ Frame4
+ Ethernet II
+ Internet Protocol
+ Transmission Control Protocol
+ File Transfer Protocol
|
이 섹션은 물리적인 층에서 애플리케이션 층에 이르기까지 최초의 데이터 패킷에 추가되는 OSI 모델의 각 층을 캡슐화하는 것이 보이도록 한다. 만약 층에 + next를 클릭한다면 여러분은 IP 해더로 추가되는 층을 철저하게 다루는 모든 지루한 설명을 예상할 수도 있다. 만약 흥미로운 것에 강조를 한다면 이더리얼 제 3 섹션에 있는 데이터 일부분이 더 어둡게 될 것이라는 것에 주의를 기울여야 한다. 이더리얼의 이 섹션은 NIC로 보내진 실질적인 1초와 0초(hex 함수로 쓰여진)를 보여준다. NIC가 실제적으로 0초와 1초 사이에서 이러한 모든 것을 전송하는 케이블의 전압을 높이고 낮추는 역할을 한다는 것에 유념해야 한다.
네트워킹이란 것이 정말 놀라운 일이지 않은가?
다음 2개의 FTP 패킷은 알파 컴퓨터의 로그인 정보와 감마 컴퓨터의 응답에 대한 것이다.
530 User anonymous unknown.
ftp: Login failed.
|
마지막 2개의 FTP 패킷은 시스템 정보에 대한 알파 컴퓨터의 요청과 감마 컴퓨터의 응답에 대한 것이다.
Remote system type is UNIX.
Using binary mode to transfer files.
|
감마 컴퓨터의 응답이 알파 컴퓨터의 스크린에 디스플레이 되었을 때 알파 컴퓨터에 대한 FTP 유틸리티가 감마 컴퓨터의 실제적인 응답을 약간 수정했다는 사실에 주의해야 한다.
TCP가 신뢰성 높은 데이터의 운송을 확실히 해줄 책임이 있기 때문에 TCP 패킷의 나머지는 확인 메시지로 될 것이다. 나는 알파 컴퓨터에서 FTP 프롬프트를 유지해왔다.
그러면 이제 또 다른 캡처를 시작해보자.
ftp> quit
ftp 10.0.0.3
Connected to 10.0.0.3.
220 gamma FTP server (Version 6.00LS) ready.
Name (10.0.0.3:genisis): genisis
331 Password required for genisis.
Password:
230 User genisis logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
|
내가 캡처와 패킷 분석을 마치면 첫 2개의 패킷은 실패한 FTP 세션으로 끝난 TCP 패킷일 것이다. 닫혀진 연결을 요청하기위해 알파 컴퓨터가 [FIN, ACK]를 보내고 다른 잠재적인 TCP 세션에서도 이용할 수 있게 연결을 재설정 하기위해 감마 컴퓨터는 [RST]으로 응답한다는 것에 유의해야 한다.
이것은 3개의 TCP 패킷에 또다른 3가지 방법의 핸트셰이크가 뒤따른다는 것을 의미한다. FTP 반응/응답을 자세히 살펴보자. 유저 genisis가 알파 컴퓨터에서 패스워드를 타이핑할 때 FTP 클라이언트는 터미널에서 패스워드를 보여주지 않는다. 그러나 이 정보는 감마 컴퓨터로 확실하게 전송되며 패킷 분석기로부터 감추어지지 않는다(왜 다른 사람의 네트워크에 대한 트래픽을 분석하지 않는 많은 이유 중 하나).
이러한 예제들은 이더리얼을 사용하기 위한 시작점에 대한 자료로 제공되어야 한다. 만약 여러분이 다양한 운영 체제에서 네트워크 트래픽을 주고 받는 방법에 대해 흥미가 있다면 여기 여러분 스스로 시도해 볼만한 흥미로운 예제가 있다. NT 서버와 NT 워크스테이션으로 케이블에 대한 캡처를 시작해보자. NT 워크스테이션의 전원을 켜고 일단 네트워크에 성공적으로 로그인 된 상태라면 캡처를 종료해라.
노벨 서버와 노벨 클라이언트로 케이블에 대한 캡처를 시작해보자. 노벨 클라이언트로부터 서버로 첨부하고 네트워크 운전의 지도를 만들어 보자.
NFS 서버로 케이블에 대한 캡처를 시작해보자. NFS 클라이언트가 NFS 서버에 의해 외부로 나간 파일시스템을 탑재하고 탑재 시점에서부터 데이터를 복사하도록 해보자.
드루 라빈(Dru Lavigne)는 캐나다 온타리오주 킹스턴에 있는 공과 전문대학교에서 네트워크를 가르치고 있으며 그녀의 테스트 머신에 몇 개의 운영체제를 멀티 부트로 실행시킬 수 있는지 알아보는 것으로 악명 높다.