저자: 한동훈(traxacun @ unitel.co.kr)
네트워크 분석을 위해 사용할 수 있는 명령줄 도구를 살펴보겠습니다. GUI 도구에 비해서 명령줄 도구가 유용한 것은 원격으로 연결하여 작업하기 편하다는 점, 관리 작업의 자동화가 가능하다는 점이 있습니다.
네트워크를 분석하는 것은 다른 한편으로 보안 위협에 대비하기 위한 것이기도 합니다. 여기서는 약간의 기본적인 설명과 도구의 사용법에 대해서 설명하겠습니다. 보다 자세한 내용은 "
IT CookBook, 정보 보안 개론과 실습: 네트워크 해킹과 보안"을 참고하기 바랍니다. 여기서 소개하는 도구들은 원리는 동일하지만 책에서 소개하지 않았던 것들입니다.
ipEye
TCP/IP는 연결요청/요청허락/연결성립과 같은 3단계(3-Way) 계약과정을 거쳐 연결을 생성합니다. 이와 같이 3단계 연결을 설정하여 다른 시스템을 검색하게 되면 연결이 성립되므로 로그에 흔적을 남기게 됩니다. 스캐닝 흔적을 남기지 않고 검색하는 방법으로 연결이 성립되기 전에 RST(리셋-초기화) 신호를 보내 연결이 성립하지 않도록 하는 방법(TCP Half Open Scan)과 이해할 수 없는 플래그(FIN, NULL, XMAS)를 설정하여 스캐닝하는 방법이 있습니다.
ipEye는 SYN, FIN, NULL, XMAS를 이용한 TCP 포트 스캐너이며, 각 유형별 스캔 방법을 지정하기 위해 -syn, -fin, -null, -xmas을 사용할 수 있습니다.
FIN, NULL, XMAS 스캔이 윈도우 시스템에서는 동작하지 않는다는 것에 유의해야 합니다.
간단한 사용방법은 다음과 같습니다.
ipEye 127.0.0.1 -syn -p 80
ipEye 127.0.0.1 -syn -p 20 80
포트 스캔 결과에 대한 각 메시지의 의미는 다음과 같습니다.
WPSweep
WPSweep은 간단한 핑 스위퍼로 특정 IP 또는 특정 범위의 IP를 스캔할 수 있습니다.
ICMP(Internet Control Message Protocol,
http://terms.co.kr/ICMP.htm)를 이용한 방법에는 크게 4가지가 있습니다.
1. 시스템이 살아 있는지 확인하기 위한 Echo Request/Reply, 이것은 주로 ping 명령이 사용합니다.
2. 원격지 시스템의 시간을 확인하기 위한 Echo Timestamp Request/Reply
3. 디스크가 없는 시스템에서 부팅시에 시스템의 IP 설정을 위해 사용하는 Information Request/Reply
4. 자신이 속한 네트워크의 서브넷을 알아내기 위해 사용하는 Address Request/Reply
WPSweep은 여기서 1번의 방법을 사용합니다. 즉, 일반적인 ping 명령과 다를바 없으나 특정 IP 범위를 빠르게 스캔할 수 있습니다.
웜 바이러스가 걸린 시스템을 알아내기 위해 랜 선을 모두 뽑아놓아야 하는 상황에서 뽑아놓지 않은 사람을 찾아낼 때도 유용하며, 사용중인 IP 대역을 확인하는 데도 유용합니다.
네트워크 패킷 캡쳐 프로그램 Ethereal(http://www.ethereal.com/)의 결과에서 알 수 있는 것처럼 WPSweep은 Echo Request/Reply를 이용하는 것으로 이는 일반적인 PING 프로그램과 동일한 방법을 이용하는 것을 알 수 있습니다. 이 프로그램의 장점은 특정 IP 대역을 스캔할 때 빠른 속도로 스캔할 수 있다는 겁니다. 이외에 fping, sing과 같은 도구들이 있습니다.
winfo
winfo는 NULL Session을 이용하여 원격으로 사용자 계정, 웍스테이션, 도메인간 또는 서버간 트러스트 계정, 일반/숨겨진 공유, 로그인 중인 사용자, 비밀번호 정책에 대한 정보를 알아낼 수 있습니다. 관리자 계정인 Administrator나 손님 계정 Guest를 다른 ID로 변경한 경우에도 이를 보여줄 수 있습니다.
널세션이란 다음과 같이 비밀번호와 사용자 계정에 대한 정보를 아무것도(NULL) 넣지 않고 만든 연결을 의미합니다.
net use \\192.168.0.22\IPC$ "" /u:""
윈도우 XP SP2에서는 이 널세션을 이용할 수 없게 금지될 것이며, 앞으로의 모든 윈도우 제품에도 이와 같은 널세션을 이용할 수 없게 변경될 것입니다.
winfo는 널세션을 이용한 것으로 원격지 시스템의 정보를 알아내는데 유용하게 사용할 수 있습니다. enum과의 차이점은 winfo는 -n 옵션을 통해 널세션을 통한 정보의 목록화가 가능하며, -n 옵션이 없을 때는 이미 설정된 연결을 통해 정보의 목록화가 가능하다는 점이다.
winfo -n 192.168.0.1 (널 세션을 이용한 목록화)
winfo 192.168.0.1 (기존 세션을 이용한 목록화)
dbprobe
DBProbe는 Directed Broadcast ping amplification factor를 검사하는 도구입니다.
다이렉트 브로드캐스트(Directed Broadcast)를 이용한 공격을 Smurf 공격이라 합니다. 만화속 스머프들이 "가가멜이 나타났다"라고 외치면 이것이 일파만파가 되어 번져나가는 것을 연상시키는 공격방법입니다.
다이렉트 브로드캐스팅이 허용되는 라우터에 연결된 PC들은 Broadcast ping 요청을 받게 되면 모두 공격 대상에게 핑을 보내게 됩니다. 따라서 네트워크에 연결된 PC수가 40대이면 40개의 핑이 공격자에게 보내지게 됩니다.
예를 들어, 28.8k 모뎀을 쓰는 사용자가 다이렉트 브로드캐스트 공격에 취약한 네트워크를 발견했습니다. 이 네트워크에는 40대의 PC가 연결되어 있습니다. 모뎀 사용자가 28.8k 크기의 패킷을 보내면 공격대상은 한번에 많은 패킷을 전송받게 됩니다.
28.8k * 40 = 1152.0k = 1.1M
이는 T1 라인의 2/3에 해당하는 대역폭을 차지한다는 것을 의미합니다. 여기서 숫자 40을 확장 인자(amplification factor)라 합니다.
dbprobe는 네트워크가 Smurf와 Fraggle 공격에 취약한가를 검증하는 도구로 해당 네트워크의 Amplification Factor를 보여줍니다.
이와 같이 다이렉트 브로드캐스트를 이용한 인터넷 대란을 예방하기 위해 이런 공격에 취약한 네트워크를 검사하여 목록에 올리고, 해당 네트워크 관리자에게 메일을 보내는 사이트도 있습니다.
1.
Powertech는 Smurf 공격에 취약한 네트워크를 관리하고 있으며 방문하면 발견된 취약한 네트워크를 볼 수 있습니다.
2.
NetScan도 Powertech와 같은 목적으로 운영되는 비영리 사이트입니다.
Netscan에서는 Smurf의 업그레이드 버전인 Papasmurf(파파스머프)를 제공하며 다음 링크에서 이용할 수 있습니다.
http://www.netscan.org/papasmurf.c
http://www.netscan.org/papasmurf-linux.c (리눅스 버전)
dumpusers
dumpusers는 NetBIOS 취약점을 이용하여 사용자 계정 정보를 스캐닝하는 도구입니다. restrictanonymous의 값이 1로 설정된 경우에도 스캐닝이 가능하므로 enum, winfo를 사용할 수 없는 경우에도 이용할 수 있습니다.
실제 사용예는 다음과 같습니다.
dumpusers -target 127.0.0.1 -type notdc -start 500 -stop 600 -mode verbose
-start와 -stop에는 RID를 지정해야 한다. 윈도우 NT/XP/2000/2k3등의 운영체제등은 사용자 계정에 대해서 SID라는 고유한 값을 사용하며, SID의 뒷부분 숫자를 RID라 합니다.
SID: S-1-5-21-1129831383-946464757-3783250696-500
RID: 500
-type은 notdc와 dc가 있으며 이것은 Domain Controller와 비 Domain Controller인지를 지정하는 것입니다.
이에 대한 대비책으로 레지스트리의 HKLM\SYSTEM\CurrentControlSet\Control\Lsa의 restrictanonymous 값을 1로 설정하라고 되어있습니다. 그러나 dumpusers는 레지스트리 값이 1인 경우에도 위와 같은 덤프를 수행할 수 있습니다. 이에 대한 대비책은 restrictanonymous 값을 2로 설정해야 합니다.
getsid
윈도우 NT 계열 이상의 운영체제에서 각 사용자 계정은 고유의 SID 값을 가지고 있습니다. 이 SID 값을 알아보기 위해 윈도우 리소스 킷에 있는 getsid를 이용했으며, 위의 dumpusers를 사용하기 전에 RID 값을 알아내기 위해 getsid를 이용했습니다.
getsid의 간단한 사용법은 다음과 같습니다.
getsid \\192.168.0.1\administrator \\192.168.0.1\administrator
getsid를 다운받을 수 있는 위치는 다음과 같습니다.
http://www.microsoft.com/windows2000/techinfo/reskit/tools/existing/getsid-o.asp
Inzider
시스템에 어떤 포트가 열려있으며, 이들 포트를 사용하는 응용 프로그램의 위치를 알려주는 프로그램입니다. fport가 매우 간략한 정보를 알려주고, 적은 정보만을 제공하는데 비해 Inzider는 보다 자세한 정보를 제공합니다. fport와 inzider의 결과를 비교하면 fport에서는 상당수의 정보가 누락되는 것을 알 수 있습니다.
가끔 다음과 같은 결과를 볼 수 있습니다.
Checked C:\Program Files\Internet Explorer\IEXPLORE.EXE (PID=1244)
- Found UDP port 1056 bound at 127.0.0.1 [UDP client]
위와 같은 결과는 루프백(loopback) 즉,127.0.0.1을 이용하여 자신의 PC에서 수행하는 웹 브라우저의 결과를 살펴본다거나 할 때 UDP 포트를 열어 데이터를 주고 받는 것을 나타내는 것으로 IE에서 몰래 프로그램을 열어 MS로 어떤 정보를 보내거나 하는 것은 아닙니다. 그러나 루프백이 아닌 경우에 특정 응용 프로그램이 사용자 몰래 포트를 열어 서버와 데이터를 주고 받는다면 그것은 백도어가 아닌지 의심해 보아야 합니다.
PStoreView
PStoreView는 Protected Storage의 내용을 보여주는 프로그램입니다. Protected Storage에 저장되는 내용으로는 IE의 사용자 이름, 비밀번호, 자동완성 기능을 사용하는 경우 저장된 내용, 아웃룩/아웃룩 익스프레스의 사용자 계정과 비밀번호입니다. 메신저의 비밀번호를 저장하고 있다면 그 비밀번호 역시 레지스트리나 파일로 존재하는 것이 아닌 Protected Storage에 있는 것입니다.
위 결과는 아웃룩 익스프레스에서 계정 비밀번호를 1234로 설정하고 PStoreView를 관찰한 것입니다.
위 결과는 비밀번호를 "asdf1234"로 변경한 다음에 수행한 결과입니다. 여기서는 이것만을 보여주고 있으나 실제로는 어디서 저장되었는지도 모를만큼 많은 내용들이 덤프되는 것을 볼 수 있습니다.
netcap
netcap은 윈도우 XP를 비롯한 윈도우 제품 CD의 Support\Tools에 들어 있습니다. 이를 실행하여 설치하면 netcap도 함께 설치됩니다.
netcap /?를 사용하여 간단한 사용방법을 볼 수 있습니다.
netcap /n:3 과 같이 이용할 수 있는 네트워크 인터페이스 중에 한가지를 선택할 수 있으며 덤프된 결과는 Microsoft Network Monitor로 살펴볼 수 있습니다.
Network Monitor, netcap, Ethereal은 네트워크 패킷 캡쳐를 위해서 살펴볼 수 있는 유용한 툴입니다.
이와 같이 네트워크 패킷을 캡쳐하는 것을 스니퍼링(sniffering)이라고 합니다.
스니퍼링 도구는 단순히 다른 사용자의 정보를 훔쳐보기 위한 용도로 쓰이는 것이 아니라, 자신의 시스템에서 오고가는 네트워크를 관찰하여 의심가는 부분을 찾아내기 위한 용도로 사용될 수 있으며, 기업체에서 사용하는 많은 방화벽, 사내 보안 정책을 위한 네트워크 모니터링 시스템 등에 사용되고 있습니다.