Port Scan과 Ping Sweep에 대해서
네트워크 탐침(이하 Probing)은 네트워크 침입(Intrusion)을 하기 위한 중요한 단서가 된다. 이 글은 "Lawrence Teo"라 저자가 가장 흔한 2가지 네트워크 Probing에 대해서 소개하고 이를 탐지(Detection) 할 수 있는 툴들에 대한 소개를 다루고 있다.
이 글은 Lawrence Teo가 리눅스저널에 올린 내용을 번역한 것으로 본 글의 내용에 대한 질의나 자세한 사항은 저자를 통해 직접
해결하길 바라며, 이 내용의 오탈자나 잘못된 번역문구는 직접 메일을 주십시오. 그리고 새로운 내용을 더욱 추가하실 수 있는 분은 연락주시면
지속적으로 갱신하도록
하겠습니다.
////////////////////////////////////////////////////////////////////////////////////////////////////////////
저자
: Lawrence Teo <lawrenceteo [at] usa [dot] net>
번역 : <leechs [at] linucos [dot] com>
////////////////////////////////////////////////////////////////////////////////////////////////////////////
대부분의 시스템 관리자들이 자신들의 네트워크가 전에 누군가로부터 Probing을 당한적이 있다고 말을 할 것이다. 크래킹(Cracking) 툴이 점점 대중화되고 다양해짐에 따라 이러한 일들이 쉽고 빈번해 지고 있다.
기술적으로 엄밀하게 말해서 모든 네트워크 Probing이 항상 시스템에 대한 침입을 의미하지는 않는다. 즉, 향후에 시스템 침입으로 이어질 수 있는 발판이 될 가능성이 있다는 것을 말한다.
항상 하는 말처럼 침입을 당하고 미안하다고 하는 것보다는 안전한 것이 더 좋다. 이 글에서 나는 가장 흔히 사용되는 2가지 네트워크 Probing의 뒷면에 숨겨진 개념들을 설명하고 그들이 어떻게 실행되는지 그리고 어떻게 그들을 탐지해 낼 수 있는지를 설명할 것이다.
포트 스캔(Port Scan)
가장 흔한 네트워크 Probing이 포트 스캔이다. 포트 스캔은 침입자(Intruder)들이 침입 대상 시스템에서 실행되고 있는 서비스들을 알아내기 위해 사용되는 수단이다. 침입자들은 포트 스캔을 통해 발견한 보안 취약성이 있는 서비스에 대한 공격 계획을 세우고 이에 대한 공격을 감행하게 된다.
예를 들어, 침입자가 포트 143번(IMAP 포트)이 개방(open)되어 있다는 것을 발견하면, 그는 침입 대상 시스템에서 실행되는 IMAP 서버의 버전을 알아내는 단계를 수행하게 된다. 만약 현재 IMAP의 버전에 보안 취약성이 있다면 "exploit"(시스템 침입이 가능한 보안 구멍-Security Hole-을 찾아내어 공격하는 프로그램)을 사용해서 시스템의 슈퍼유저의 권한을 얻을 수 있게 된다.
포트 스캔을 하는 방법은 아주 간단하다. 침입 대상 시스템의 일련의 포트에 접속(connect)을 시도하고 접속을 시도한 포트중에서 어는 포트가 응답(respond)을 하는지, 하지 않는 지를 구분해 내기만 하면 된다. 간단한 포트 스캔 도구(port scanner)의 경우 특정 프로그래머의 경우 자바(java)나 펄(perl)을 이용하여 15분내에 만들 수 있다.
그러나 이러한 간단한 포트 스캔은 침입 대상 시스템(target system)의 운영체제에 의해 쉽게 탐지된다. <보기 1>은
이러한 포트 스캔후에 시스템 로그 파일(보통 /var/log/messages)에 남겨진 기록들을 보여준다. 이는 단 3초만에 다양한 서비스들에
대한 일련의 접속상황을 보여준다. 하지만 이러한 포트 스캔은 너무나 탐지가 쉬워서 대부분의 침입자들은 이러한 스캔방법을 사용하지
않는다.
<보기 1> 포트 스캔후의 시스템 로그
Jul 18 02:42:25 target sshd[2370]: log:
Connection from 192.168.0.1 port 2107
Jul 18 02:42:25 target sshd[2370]:
fatal: Did not receive ident string.
Jul 18 02:42:25 target wu.ftpd[2369]:
Connect form root@attacker
Jul 18 02:42:25 target in.telnetd[2368]: Connect
form root@attacker
Jul 18 02:42:26 target imapd[2366]: Connect form
root@attacker
Jul 18 02:42:26 target sshd[2370]: log: Connection from
192.168.0.1 port 2107
Jul 18 02:42:26 target sshd[2370]: log: Connection from
192.168.0.1 port 2107
Jul 18 02:42:25 target sshd[2370]: log: Connection from
192.168.0.1 port 2107
또다른 비밀스럽고, 보이지 않는 포트 스캔 방식으로 "half-open" SYN 스캔이 있다. 이는 포트 스캐너가 대상 시스템의 포트에 접속후 완전한 접속과정을 거치지 않고 중간에 접속을 끊는 방식이다. "half-open"이란 이름이 이렇게 해서 붙여진 것이다.
완전한 접속과정이 이루어지지 않기 때문에 침입 대상 시스템의 운영체제가 그 스캔에 대한 로그를 남길 수 없게 된다. 이러한 개념들은 TCP/IP 네트워킹에 대해 알고 있다면 쉽게 이해가 될 것이다. 정상적인 TCP/IP 접속에서는 양쪽의 시스템간에 3-way Handshaking이 발생하여 완벽한 접속이 이루어지고나서 최초의 데이터 전송이 이루어지게 된다.
"half-open" SYN 스캔은 이러한 3-way handshaking이 일어나지 않게 중간에 접속을 끊고 단지 그 포트가 개방되어 있는지 아닌지만 응답을 통해 체크하는 방식이다.
지금까지 포트 스캔에 대한 기본적인 개념들을 설명했다. 이제부터 요즘은 가장 많이 사용되고 강력한 네트워크 Probing 툴들을 만나보자.
가장 먼저 Nmap(Network mapper)이 있다. Nmap은 지금까지 설명한 포트 스캔 방법들을 모두 이용할 수 있는 툴이다.
<보기 2>가 Namp을 이용한 네트워크 Probing을 한 결과를 보여주고 있다.
<보기 2> Nmap 포트 스캔 결과
root@attacker# nmap -sS -O
target.example.com
Starting namp V. 2.53 by fyodor AT insecure.org/(http:/www.insecure.org/nmap/)
Interesting
ports on target.example.com (192.168.0.2):
(The 1507 ports scanned but not
shown below are in state: closed)
Port State Service
21/tcp open
ftp
22/tcp open ssh
23/tcp open telnet
25/tcp open smtp
37/tcp open
time
79/tcp open finger
110/tcp open pop-3
111/tcp open
sunrpc
113/tcp open auth
143/tcp open imap2
515/tcp open
printer
901/tcp open samba-swat
2049/tcp open nfs
6000/tcp open
X11
7100/tcp open font-service
TCP Sequence Prediction:
Class=random positive
increments
Difficulty=2135704 (Good luck!)
Remote operating system
geuss:
Linux 2.1.122 - 2.2.14
Nmap run completed -- 1 IP address
(1 host up) scanned in 3 seconds
그럼 위에서 말한 보이지 않는 "Stealth" 포트 스캔은 과연 어떻게 탐지해 낼 것인가? 이러한 포트 스캔은 특별한 툴을 이용하여 탐지해 낼 수 있다. "Solar Designer"가 개발한 "scanlogd"가 그러한 툴중의 하나이다. 이 툴은 백그라운드로 실행되면서 "stealth" 스캔이 발행하면 이를 네트워크 인터페이스로부터 감지하고 이를 "syslog" 매커니즘을 사용하여 로깅하게 된다. <보기 3>은 이러한 "scanlogd"가 생성한 로그이다.
<보기 3> scanlogd가 생성한 로그
Jul 18 02:56:22 target scanlogd: 192.168.0.1
to 192.168.0.2 ports 38681, 18, 1127, 1486, 966, 1493, 682, 401, 211, ...,
f??payxy, TOS 00 @02:56:21
이러한 툴외에도 다른 많은 포트 스캔을 탐지할 수 있는 툴들이 있다. 관심 있는 사람은 이 글의 마지막 부분에 있는 리소스 섹션을 참조하십시오. 이 중에서 "tcplogd"는 패킷의 종류를 지정할 수 있으며, 신뢰할 수 있는 호스트들을 지정할 수 있는 등의 기능을 가지고 있기 때문에 한번 사용해 볼 만한 툴이라고 생각한다.
핑 스윕(Ping Sweep)
Ping Sweep은 또다른 종류의 네트워크 Probing이다. Ping Sweep은 특정 네트워크에 있는 호스트들(일정 IP 주소 영역에 있는 모드 호스트들)을 대상으로 ICMP ECHO 패킷의 묶음을 전송하고 이에 대한 응답을 기다리게 된다. 만약 응답이 오면 그 호스트가 동작을 하고 있고, 응답이 없으면 그렇지 않은 것이다라는 사실을 알 수 있게 된다.
일단 침입자가 침입할 대상 시스템이 동작하고 있다는 사실을 알게 된 순간부터 그 시스템에 대한 공격을 준비하고 이를 위한 활동들을 시작하게 된다. 합법적인 사유로 Ping Sweep을 하게 되는 경우는 특정 조직의 시스템 관리자가 내부 네트워크에 있는 호스트들을 대상으로 동작유무를 체크하기 위해 일괄적으로 실행하여 시스템을 진단하는 경우가 될 것이다.
Ping Sweep을 하기 위한 툴로 "fping"이 있다. "fping"은 IP 주소 목록을 만들고 이들을 대상으로 한 IP 주소에 해당하는 시스템에 Ping 패킷을 보낸 다음 바로 Round-Robin 방식으로 다음 IP 주소의 시스템에 차례대로 Ping 패킷을 보내게 된다. <보기 4>는 C 클래스의 IP 주소 목록(192.168.0.1 ~ 192.168.0.20)을 발생시키기 위한 간단한 Perl 스크립트이다.
<보기 4> IP 주소 목록 생성 Perl 스크립트 (gen.pl)
#!/usr/bin/perl
$networkid = "192.168.0.";
$begin = 1;
$end = 20;
for ($hostid = $begin; $hostid <= $end; $hostid++){
print
"$networkid.$hostid"n;
}
<보기 5>는 위의 Perl 스크립트를 통해 생성되는 IP 주소들이 "fping"과 어떻게 결합되어 사용될 수 있는지를 보여준다. "fping"의 -a 스위치는 동작되고 있는 시스템들만을 출력하도록 한다.
<보기 5> fping을 이용한 Ping Sweep
root@attacker# perl gen.pl | fping
-a
192.168.0.17
192.168.0.15
192.168.0.12
192.168.0.10
192.168.0.1
192.168.0.16
192.168.0.11
192.168.0.5
192.168.0.14
192.168.0.9
192.168.0.3
포트 스캔과 마찬가지로 Ping Sweep에 대한 탐지툴이 있다. "ippl"(IP protocol logger"는 TCP, UDP,
ICMP 패킷들을 로깅할 수 있다. 이 툴은 scanlogd와 유사하게 백그라운드로 실행되며 패킷들을 탐지하게 된다. <보기 6>은
"ippl"이 Ping 패킷을 가로채기하여 로깅한 것을 보여준다.
<보기 6> ippl에 의한 Ping Sweep
로그
Jul 19 04:19:37 ICMP message type echo request form attacker.example.com
(192.168.0.1)
(192.168.0.1 -> 192.168.0.2)
"ippl"을 사용할 때 주의해야할 사항이 있습니다. 네트워크 트래픽이 많은 네트워크에서 여러분이 이 툴을 사용하실 경우에는 "ippl"이 남기는 로그(/var/log/ippl/*) 파일의 양이 많으므로 이를 고려해야 할 것입니다.
"ippl" 외에도 Ping Sweep을 탐지하는 여러 가지 툴들이 있습니다. 모든 툴들을 설명하지 못하므로 이 글의 마지막에 리소스 섹션을 참조하십시오. 가장 관심을 끄는 것중에 "pingd"가 있습니다. 이 툴은 호스트 레벨에서 ICMP 패킷을 처리할 수 있는 기능이 있다고 합니다.
"pingd"의 한가지 독특한 특징으로 이 툴은 "TCP Wrapper"와 결합되어 사용될 수 있는데, TCP Wrapper의 접근 제어 파일(/etc/hosts.deny, /etc/hosts.allow)에서 Ping을 할 수 있는 시스템과와 그렇지 않은 시스템을 정의하고 이와 결합되어 사용될 수 있다는 특징이 있습니다.
네트워크 Probing의 다른 특징들
포트 스캔과 Ping Sweep은 이 글에서 설명하고자 했던 많은 네트워크 Probing중의 단 2가지 사례에 불과합니다. 현재 네트워크 Probing 툴들은 아주 많은 성숙단계에 이르렀고 계속해서 개발이 진행될 것이며, 이를 이용할 수 있는 대상들도 점차 대중화 될 것입니다. 이는 시스템 관리자에게는 미래에 아주 유용한 네트워크 Probing 패턴들을 제시하게 될 것입니다.
이러한 몇가지 네트워크 Probing의 다른 형태들을 살펴보기 위해 Nmap을 다시 한번 살펴보면, Nmap은 "decoy" 스캔이 가능합니다. 이러한 스캔이 발생하게 되면 여러분은 여러분 시스템에 있는 특정 IP 주소로부터의 스캔을 보게 될 것입니다. 하지만 여러분의 시스템의 시스템을 스캔한 시스템이 어느 것인지 알아낼 수 없게 됩니다. 이러한 점이 시스템 관리자들을 혼란에 빠뜨리게 됩니다.
"decoy" 스캔외에도 Nmap을 이용하여 원격에서 침입 대상 시스템에서 운영되고 있는 운영체제를 식별할 수 있습니다. 여기에는 "TCP/IP stack fingerprinting"이란 기술을 사용하게 됩니다. 이 기술은 <보기 2>의 마지막 부분에서 본 것처럼 침입 대상 시스템에서 운영중인 운영체제를 식별해 내게 됩니다.
이 글을 저술할 당시에 Nmap은 2.53버전이 출시되었으며 시스템, 라우터 및 디바이스에서 운영되는 465가지의 버전별 운영체제를 식별할 수 있는 기능이 내재되어 있었다. 침입자들은 이러한 기능을 이용하여 시스템에서 운영되는 운영체제에 있는 보안 구멍을 찾아내어 공격하게 된다.
여러분이 다른 네트워크 Probing에 관심이 있다면 이 글의 마지막 부분의 참고자료 섹션을 참고하십시오. "Stephen Northcutt"의 ""An Analysts's Handbook"과 "Fyodor"의 Phrack 매거진에 소개된 "Remote OS detection via TCP/IP STack Fingerprinting"을 참조하시길 권장합니다.
보안은 지속적으로 진행되어야 한다.(Onging Process)
나는 이 글이 2가지의 가장 흔한 네트워크 Probing을 이해하는데 도움이 되었길 바라며, 그러한 네트워크 Probing이 여러분의 시스템에서 발생시 여러분이 탐지할 수 있기를 바란다. 보안의 문제는 일정기간에 완전히 끝나는 것이 아니다. 항상 새로운 보안 구멍들이 발견되고 이들에 대한 대안들이 제시되며, 또한 이러한 보안의 헛점들을 탐지해낼 수 있는 툴들과 이들을 탐지해 낼 수 있는 툴들이 마치 창과 방패와 같이 서로 보완적으로 개발되고 있다는 점을 항상 인식해야 할 것이다.
<리소스>
Port Scanner :
Nmap
http://www.insecure.org/nmap
queso:
http://www.apostols.org/projectz/queso/
Ping Sweep Tool:
fping:
http://www.stanford.edu/~schemers/docs/fping/fping.html
Pinger(for
Windows);
http://www.technotronic.com/rhino9/software/pinger.htm
Port Scan & Ping Sweep Detection Tool:
scanlogd:
http://www.openwall.com/scanlogd/
ippl:
http://pltplp.net/ippl/
iplog:
http://ojnk.sourceforge.net/
PortSentry:
http://sourceforge.net/projects/sentrytools/
<참고자료>
Hacking Exposed: Network Security Secrets and Solutions,
Stuart McClure, Joel Scambray, and George Kurtz, McGraw-Hill, 1999.
Network
Intrusin Detection: An Analyst's Handbook, Stephen Northcutt, New Riders
Publishing, 1999.
"Linux Ping Daemon", by Fyodor, Phrack Magazine, Volume 8,
Issue 52, January 26, 1998, Article 7.
http://phrack.infoexus.com/search.phtml?view$article=p52-7
"The Art of Port
Scanning", by , Phrack magazine, Volme
7, Issue 51, September 1, 1997, Article 11. http://phrack.onfonexus.com/search.phtml?view&article=p51-11
"Remote
OS detection via route AT infoexus.com TCP/IP Stack Fingerprinting", by Fyodor, Phrack Magazine,
Volume 8, Issue 54, December 25, 1998, Article 9. http://phrack.onfonexus.com/search.phtml?view&article=p54-9
Lance
Spitzer's whitepapers and publications: http://www.enteract.com/~lspitz/pubs.html
BUGTRAQ Mailing List
http://www.securityfocus.com
관련 링크: http://www.securityfocus.com
'Security' 카테고리의 다른 글
Tripwire (파일시스템 무결성 검사) (0) | 2001.08.21 |
---|---|
ftp 와 telnet 사용자 제한 (0) | 2001.08.21 |
nmap 포트스캔 유틸리티 (0) | 2001.08.10 |
소유권과 소유자파일 점검하기 (0) | 2001.08.09 |
ipchains 설정예제(마스커레이딩) (0) | 2001.08.08 |