웹마스터 팁

http://coffeenix.net/작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
작성일 : 2002.09.14(토)
수정일 : 2003.10.29(수)

nmap은 열린 포트를 확인하여 보안 점검을 위한 대표적인 툴이면서
원치 않는 서버를 대상으로 포트 스캐닝과 시스템의 OS 종류와 버전을 알아내는데 사용되기도 한다.
최근에 나온 nmap 3.45버전은 오픈된 서비스의 버전 정보까지도 확인시켜준다.

------------------------------------------------------------------------------
# nmap -A -T4 -F localhost

Starting nmap 3.45 ( http://www.insecure.org/nmap/ ) at 2003-09-16 22:45 KST
Interesting ports on truefeel (127.0.0.1):
(The 1203 ports scanned but not shown below are in state: closed)
PORT   STATE SERVICE  VERSION
21/tcp  open ftp    vsFTPd 1.2.0
25/tcp  open smtp    Sendmail smtpd Securing..214-2.0.0 This is sendmail version 8.12.
80/tcp  open http    Apache httpd 2.0.44 ((Unix) DAV/2 PHP/4.3.2)
... 중략 ...
Running: Linux 2.4.X|2.5.X
OS details: Linux Kernel 2.4.0 - 2.5.20, Linux kernel 2.4.20
Uptime 0.505 days (since Tue Sep 16 10:38:25 2003)

Nmap run completed -- 1 IP address (1 host up) scanned in 16.859 seconds
------------------------------------------------------------------------------

위에서 보는 것처럼 nmap의 뛰어난 기능으로 어느 OS를 사용하는지 쉽게 알 수 있다.

이러한 nmap의 OS를 알아내는 기능은 7단계(T1~T7)를 거치게 된다.
T1 단계에서 열린 포트로 SYN 패킷을 보내고, T2에서 열린 포트로 null 패킷 전송,
T3에서 열린 포트로 SYN, FIN, URG, PSH 패킷을 전송
T5 부터는 닫혀진 포트로 비슷한 과정을 거치게 된다.

자~ 이제 nmap OS fingerprinting을 막는 방법을 알아보자.

1. iplog 툴

iplog는 포트 스캐닝으 로깅하는 툴이다. TCP 포트, UDP 포트 스캐닝, TCP null 스캔, FIN 스캔,
smurf 공격, Xmas 스캔, ping 플러딩, IP fragment 공격 등을 감지할 수 있다.
procmisc 모드를 지원하여 같은 서브넷으로 들어오는 스캐닝을 감지할 수 있다.
또한 OS 정보를 숨기기한 목적으로도 사용할 수 있다.

1) 설치

http://ojnk.sourceforge.net/ 에서 iplog-2.2.3.tar.gz 을 받아온다.

------------------------------------------------------------------------------
# tar xvfz iplog-2.2.3.tar.gz
# cd iplog-2.2.3
# ./configure
# make
# make install
# cp example-iplog.conf /etc/iplog.conf
------------------------------------------------------------------------------

소스 설치가 귀찮은 분은 http://www.rpmfind.net/ 에서 iplog-2.2.3-fr2.i386.rpm 받아 설치한다.

2) 실행

------------------------------------------------------------------------------
# iplog -o -z -i lo (테스트를 위해 lo interface를 지정함)
------------------------------------------------------------------------------

-o 등의 옵션의 의미는 nmap 테스트 후에 알아본다.

------------------------------------------------------------------------------
# nmap -sS -O localhost

Starting nmap 3.45 ( http://www.insecure.org/nmap/ ) at 2003-10-29 23:37 KST
Insufficient responses for TCP sequencing (2), OS detection may be less accurate
Insufficient responses for TCP sequencing (3), OS detection may be less accurate
Interesting ports on truefeel (127.0.0.1):
(The 1651 ports scanned but not shown below are in state: closed)
PORT     STATE SERVICE
25/tcp   open  smtp
80/tcp   open  http
... 중략 ...
No exact OS matches for host (If you know what OS is running on it, see
http://www.insecure.org/cgi-bin/nmap-submit.cgi).
TCP/IP fingerprint:
SInfo(V=3.45%P=i686-pc-linux-gnu%D=10/29%Time=3F9FD0B9%O=25%C=1)
T1(Resp=Y%DF=Y%W=7FFF%ACK=S++%Flags=AS%Ops=MNNTNW)
T2(Resp=Y%DF=Y%W=100%ACK=O%Flags=BAPRSF%Ops=)
T2(Resp=Y%DF=N%W=0%ACK=O%Flags=BARS%Ops=)
T2(Resp=Y%DF=Y%W=100%ACK=O%Flags=BPRF%Ops=)
T3(Resp=Y%DF=Y%W=7FFF%ACK=S++%Flags=AS%Ops=MNNTNW)
T4(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)
T5(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=)
T6(Resp=Y%DF=Y%W=0%ACK=O%Flags=R%Ops=)
T7(Resp=Y%DF=Y%W=0%ACK=S++%Flags=AR%Ops=)
PU(Resp=N)


Uptime 0.303 days (since Wed Oct 29 16:21:04 2003)

Nmap run completed -- 1 IP address (1 host up) scanned in 21.301 seconds
------------------------------------------------------------------------------

nmap은 T1~T7까지 OS 탐지 테스트 과정을 거쳤지만 OS 종류는 알아내지 못했음을 확인했다.
그럼 도대체 스캐닝 로그는 어디에 있는건가? /etc/iplog.conf 설정에 따라 /var/log/iplog에 저장된다.

------------------------------------------------------------------------------
... 생략 ...
Oct 29 23:37:09 ICMP: echo from truefeel (127.0.0.1) (8 bytes)
Oct 29 23:37:09 TCP: port 5901 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 516 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 657 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 32 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 2044 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 737 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: pop2 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 872 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: port 670 connection attempt from truefeel (127.0.0.1):49574
Oct 29 23:37:09 TCP: SYN scan detected [ports 5901,516,657,32,2044,737,109,872,670,374,...] from
truefeel (127.0.0.1) [port 49574]
Oct 29 23:37:12 TCP: Bogus TCP flags set by truefeel (127.0.0.1):49581 (dest port 25)
Oct 29 23:37:14 TCP: ipp connection attempt from truefeel (127.0.0.1):40509
... 생략 ...
------------------------------------------------------------------------------

3) 옵션과 설정은?

-o : 백그라운드로 실행하지 않는다. (기본 백그라운드)
-z : 이게 바로 핵심이다. nmap로 OS 정보 알아내는 것을 막는다.
-L : log를 화면으로 출력한다.

-i : interface를 지정한다. (기본 eth0)
-u : iplog 실행 사용자 또는 UID를 지정한다. (기본 nobody)
-g : iplog 실행 그룹명 또는 GID를 지정한다. (기본 nobody)
-l : 로그파일을 지정한다. (기본 /var/log/iplog)
-a : promisc 모드로 전환하여 지정한 네트워크 내의 스캐닝을 로깅한다.
-k : iplog 프로세스를 kill한다. 백그라운드, 포그라운드 실행중인 것과 상관없이 kill.
-R : iplog를 재실행한다.

이 많은 옵션을 어떻게 사용하면 좋을까?

화면으로 모니터링한다면

# iplog -o -z -L

파일로 로깅을 한다면 (부팅시 실행되도록 하려면 /etc/rc.d/rc.local 등에 추가)

# iplog -z

/etc/iplog.conf 설정 파일에서는 옵션으로 사용할 것을 미리 지정해 둘 수 있다.
실행 사용자, interface, 감지에서 제외할 포트 등

2. iptables 이용하는 방법

iptables를 이용하는 방법이 있으나 커널 패치+iptables 패치를 해야하는 과정이 필요하며
커널 2.4.19 이후의 버전에 대해서는 더이상의 발표도 있지 않아 간단하게 설명한다.

http://ippersonality.sourceforge.net/ 에서 ippersonality-20020819-2.4.19.tar.gz 를
받아 커널과 iptables 각각 패치를 한 후 컴파일을 한다.

ippersonality-20020819-2.4.19/samples 디렉토리에는 OS를 속이기 위한 총 10개의 파일이 있다.
AmigaOS, Dreamcast, FreeBSD, Linux 2.0x, Linux 2.2, MacOS 9, Solaris 8, Tru64 UNIX,
Win Me 또는 Win 2000, Win 9x 이렇게 10개.

Windows를 사용하는 것 처럼 속이려면 어떻게 해야 하는가?

패치된 iptables를 이용해서

------------------------------------------------------------------------------
# insmod ipt_PERS (모듈을 로딩, 커널 컴파일시에 CONFIG_IP_NF_PERS=m로 했을 때)
# /usr/local/sbin/iptables -t mangle -A PREROUTING -s ! 서버IP  -d 서버IP -j PERS --tweak dst --local --conf win2k.conf
# /usr/local/sbin/iptables -t mangle -A OUTPUT     -s 서버IP -d  ! 서버IP -j PERS --tweak src --local --conf win2k.conf
------------------------------------------------------------------------------

3. 참고 자료

* A practical approach for defeating Nmap OS-Fingerprinting
  http://coffeenix.net/doc/security/nmap_os_fingerprinting.html
* IP Personality 프로젝트
  http://ippersonality.sourceforge.net/
* iplog
  http://ojnk.sourceforge.net/
* nmap 3.45의 새기능, 버전 스캐닝 (글 좋은진호)
  http://coffeenix.net/board_view.php?bd_code=71

제목 글쓴이 날짜
apache_2.0.47 + php-4.3.3 + mysql-4.0.16 + zb41pl4 의 windows xp 설치 [3] 기산 2003.10.28
.htaccess .htpasswd 파일 등을 윈도우에서 만들어서 리눅스에 올려보자. [4] &zeo 2003.10.28
포트 스캐닝 감시 및 OS 정보 숨기기 [3] 좋은진호 2003.10.30
Linux 에서 Mysql 설치법 [4] 화니 2003.10.31
윈도우에 세팅한 서버에 설치된 phpmyadmin 에 인증걸기 [3] 피카추삼겹살 2003.11.05
[C급]Internet Explorer 다중 취약점 ATpple.com 2003.11.12
[C급]Buffer Overrun in the Workstation 취약성 통한 코드 실행 ATpple.com 2003.11.12
[C급]FrontPage Server Extensions 취약점으로 인한 임의코드 실행문제 ATpple.com 2003.11.12
리눅스 커널(kernel)에 심각한 보안 결함 발견 [1] 아치 2003.12.04
APM서버설치-XAMPP v1.2 [14] The Darkness 2003.12.05
iis에서 로그인창 뜨는 문제 해결방법 제시 [3] 함재식 2003.12.12
윈도우 2003에서의 APM+phpMyAdmin+MMCache설치법.. [1] 김수용 2003.12.13
MySQL 퍼포먼스를 top명령어처럼 모니터링 mytop 좋은진호 2003.12.14
유저 자동 셋팅 스크립트 Ver 2.0 [3] 김병철 2003.12.15
VirtualHost 안될때 [1] 이성헌 2003.12.16
Apache 2.X 버전의 한글문제와 새로운 방식의 APM 셋팅 [8] 최종우 2003.12.17
랜카드 상태 확인 및 연결 속도 변경 mii-tool 좋은진호 2003.12.19
apache 1.3.x-2.0.48 의 원격 유저 검색 취약점을 이용한 exploit [2] DearMai 2003.12.27
redhat 9.0에서의 qmail 설치 문서 비츠로 2004.01.04
리눅스 서버 설치 및 관리에 따른 초보경험담을 게시판에 담아... [1] eversun 2004.01.05