debugfs 라는 명령어 입니다. (man page 참조)

실제 사용예를 들어 설명하겠습니다.

가정1) /home/pds/portsentry.tar.gz 라는 파일이 있음.
가정2) /home 파티션은 hda8 입니다. (df -h 로 확인)
가정3) rm -f /home/pds/portsentry.tar.gz 명령으로 지웠음.
가정4) root 로 작업.

복구 절차.

1. #debugfs /dev/hda8

=> 설명 : hda8 파티션에 대해서 검사를 한다.

2. debugfs:

=> 대기상태를 뜻함. 이곳에서 lsdel 을 입력하고 엔터.
계속...

debugfs: lsdel
99 deleted inodes found.
Inode Owner Mode Size Blocks Time deleted
108123 0 100644 239 1/ 1 Thu Jan 3 01:25:33 2002
18417 0 100644 426625 420/ 420 Thu Jan 3 01:26:34 2002
45007 0 100644 343 1/ 1 Thu Jan 3 01:29:59 2002
28691 0 100400 879 1/ 1 Thu Jan 3 01:38:29 2002
18394 0 40755 0 1/ 1 Thu Jan 3 01:58:54 2002
..
.
14356 0 100644 2325 3/ 3 Fri Jan 25 16:13:24 2002
61239 0 100644 43034 44/ 44 Fri Jan 25 16:13:31 2002
debugfs:

위와 같은 상태로 나오고 다시 대기상태로 됩니다. 실제로는 너무 많이 나오
더군
요.. (내가 그렇게 많이 지웠었나? '.'a)

이제 이 목록중에서 하나를 선택해서 살려야 합니다. 다행히도 살리고자 하
는 파일
은 가장 최근에 지운 파일이므로 가장 아래쪽에 있는 것이겠죠.

debugfs: dump <61239> /home/debugfs/portsentry.tar.gz

=> Inode 값을 <> 안에 적어줍니다. 뒤에는 복구할 파일 이름을 적어주시면
됩니다.
=> 복구할 파일은 다른 디렉토리로 지정해 주시는게 좋습니다. 별 상관은 없
지만...

#cd /home/debugfs
#tar -zxvf portsentry.tar.gz // 정상적으로 압축이 풀리더군요.

=> 아주 훌륭하게 복구가 되었더군요. ^^v

임의로 portsentry.tar.gz 를 지워서 테스트를 한 것입니다.

debugfs: 상태에서 사용할 수 있는 명령어는 help 를 쳐보면 알 수 있습니
다.
끝내는 것은 q, quit 입니다.



아래는 debugfs: 에서 사용가능한 명령어들 입니다.
---------------------------------------------------------------------

Available debugfs requests:

show_debugfs_params, params
Show debugfs parameters
open_filesys, open Open a filesystem
close_filesys, close Close the filesystem
feature, features Set/print superblock features
dirty_filesys, dirty Mark the filesystem as dirty
init_filesys Initalize a filesystem (DESTROYS DATA)
show_super_stats, stats Show superblock statistics
ncheck Do inode->name translation
icheck Do block->inode translation
change_root_directory, chroot
Change root directory
change_working_directory, cd
Change working directory
list_directory, ls List directory
show_inode_info, stat Show inode information
link, ln Create directory link
unlink Delete a directory link
mkdir Create a directory
rmdir Remove a directory
rm Remove a file (unlink and kill_file, if appropriate)
kill_file Deallocate an inode and its blocks
clri Clear an inode's contents
freei Clear an inode's in-use flag
seti Set an inode's in-use flag
testi Test an inode's in-use flag
freeb Clear a block's in-use flag
setb Set a block's in-use flag
testb Test a block's in-use flag
modify_inode, mi Modify an inode by structure
find_free_block, ffb Find free block(s)
find_free_inode, ffi Find free inode(s)
print_working_directory, pwd
Print current working directory
expand_dir, expand Expand directory
mknod Create a special file
list_deleted_inodes, lsdel
List deleted inodes
write Copy a file from your native filesystem
dump_inode, dump Dump an inode out to a file
cat Dump an inode out to stdout
lcd Change the current directory on your native
filesystem
rdump Recursively dump a directory to the native filesystem
help Display info on command or topic.
list_requests, lr, ? List available commands.
quit, q Leave the subsystem

출처 : http://blog.empas.com/korigin

, .

LINUX FIREWALL

Security 2009. 9. 1. 11:12

리눅스에서의 방화벽 시스템[1]

    이수준 외 BIT NETWORK 67 기
    VIRUSAWALL & SSL APPLICATION 팀

    본 프로젝트는 리눅스상에서 공개된 방화벽 프로그램인 TIS사의 FWTK 프로그램을 중심으로 진행하였다. 이번 호에서는 FWAK를 설치하기 위해서 먼저 익혀야 할 배경 지식들 즉 방화벽과 리우팅의 개념에 대해 개략적으로 알아 보고 실제적으로 리눅스에서 라우터와 베스천 호스트를 만드는 방법을 자세히 적어보고자 한다. 그리고 다음 호에서는 FWTK 설치와 베스천 호스트를 운영하는 방법, 그리고 본 프로젝트에서 실제로 구축한 시스템에 대해 간략히 소개를 하는 것으로 기사를 마칠까 한다.

방화벽의 개요

    인터넷에 대한 관심이 고조됨에 따라 인터넷에 연결하여 다양한 서비스를 제공받으려는 사용자들이 점점 증가하고 있는 추세이다. 실제로 인터넷에 접속이 가능한 사용자들은 인터넷을 통해 다양한 형태의 정보와 서비스를 제공받고 있다.
    그러나, 이와 함께 인터넷을 경유한 불법 사용자나 해커들의 침입으로 인한 피해도 크게 늘어나고 있고, 그 수법 또한 전문적이고 다양해지고 있다. 인터넷으로부터의 불법 사용자나 해커의 침입을 막기 위한 대책으로 각각의 시스템이 가지고 있는 자체 보안 능력에 의존하는 방법이 현재까지 많이 이용되어 왔으나, 현재와 같이 네트워크에 연결된 시스템의 숫자가 폭발적으로 증가하는 현실에서는 많은 수의 시스템 각각을 일일이 점검하고 거기에 맞는 보안 대책을 마련하여 적용하는 일은 쉬운 일이 아니다.

    특히 내부 네트워크상에 여러 시스템들이 존재할 경우에는 모든 시스템에 동시에 보안 대책을 적용하지 않으면 내부 네트워크는 결코 안전하다고 보기 어려우며, 각각의 시스템 마다 적용된 보안 정책이 다를 수 있으므로 보안 정책을 일괄적으로 적용시켜 관리하기란 매우 어렵다. 이러한 문제점을 해결하기 위해서 내부 네트워크와 외부 네트워크의 연결점에서 내부 네트워크 상의 시스템들을 보호할 수 있는 네트워크 구성 요소가 필요하게 되었고, 이러한 기능을 담당하는 시스템이 바로 방화벽 시스템이다. 따라서 내부 시스템 각각에 대해 적용하던 보안 정책을 네트워크 상의 한 곳에서 적용시켜 관리할 수 있게 되었으며, 내부 시스템에 대한 보안 수준을 높일 수 있게 된다. ==>more

방화벽이란?

    외부 네트워크로부터의 침입에 대해 내부 네트워크를 보호하기 위한 네트워크 구성 요소 중의 하나로, 외부의 불법 사용자의 침입으로부터 내부의 전산 자원을 보호하기 위한 정책 및 이를 지원하는 하드웨어와 소프트웨어를 총칭한다. 내부 네트워크가 외부 네트워크(주로 인터넷을 의미)에 연결되어 있지 않을 경우에는 방화벽은 불필요하다.

방화벽의 주요 기능

    방화벽은, 일반적으로 네트워크 서비스별로 해당 서비스를 요구한 호스트의 IP 주소와 포트 번호, 사용자 인증에 기반을 두고 외부 침입을 차단하게 된다. 허용된 네트워크 사용자에게 원하는 서비스를 제공하면서 허용되지 않은 사용자에게는 서비스를 차단하고, 해당 서비스의 허용 또는 실패에 대한 기록을 남긴다.

    *외부 네트워크와 연결된 유일한 창구 (Gateway)
    *서비스 접속 및 거부
    *사용자 인증 포함
    *내외부 상호 접속된 네트워크에 대한 트래픽 감시, 기록

방화벽의 보안 정책

    내부 자원을 보호하기 위한 정책은 크게 다음의 두 가지로 요약할 수 있다.

    *명백히 금지되지 않은 것은 허용한다.
    *명백히 허용되지 않은 것은 금지한다.

    대부분 방화벽 시스템은 기본 보안 개념으로 "명백히 허용되지 않은 것은 금지한다" 의 정책을 따른다. 즉, 보안 규칙에 명백히 허용(설정)되지 않은 네트워크와 호스트가 내부 자원에 접근하는 것을 금지한다.

방화벽의 종류

    패킷 필터링(Packet Filtering) 방식

    패킷 필터링 방식은 네트워크의 OSI 모델에서 네트워크층(IP 프로토콜)과 전송층(TCP 프로토콜)에서 패킷을 필터링 하는 기능으 ㄹ하면서, 패킷에 대한 경로 배정을 위한 자체 프로토콜을 함께 사용하는 형태의 방화벽 시스템이다. 패킷 필터링 방식의 방화벽은 스크리닝 라우터로 구성할 수도 있으며, 베스천 호스트와 패킷 필터링 소프트웨어로도 구현할 수 있다.

    어플리케이션 프락시(APPlication Proxy) 방식

    어플리케이션 프락시 방식의 방화벽은, OSI 7 계층 네트워크 모델에서 제 7계층인 어플리케이션 계층에 방화벽 기능을 구현하게 된다. 이렇게 구현된 게이트웨이는 각 서비스별로 프락시 데몬이 있기 때문에 프락시 게이트웨이 또는 응용 게이트웨이라고 부르기도 한다. 어플리케이션 프락시 방식의 게이트웨이는 각 서비스별 프락시가 서비스 요구자의 IP 주소 및 포트를 기반으로 네트워크 접근 제어를 수행하며, 아울러 사용자 인증 및 기타 부가적인 서비스를 지원할 수 있다.

    서킷 게이트웨이(Circuit Gateway) 방식

    앞에서 알아 본 어플리케이션 프락시 방식의 방화벽에서는, 각 서비스마다 프락시가 존재하지만, 서킷 게이트웨이 방식의 방화벽에서는 OSI 7계층의 네트워크 모델에서 4계층과 5계층에 해당되는 부분에 TCP Proxy 와 UDP proxy가 존재하게 된다.
    본 프로젝트에서는 패킷 필터링 방식과 어플리케이션 프락시 방식을 연결하여 보안의 강도를 높이고자 하였다. 뒤에 소개될 시스템 구성도에서 보듯이 라우터에서 IP 레벨에서 패킷 ==>more

라우터와 라우팅 테이블

    필터링을 해주고 여길 통과한 패킷은 배스천 호스트에서 어플리케이션 레벨에서 통제하도록 구성하였다.

라우팅과 라우터의 개념

    라우팅 개념을 이해하기 위해서는 TCP/IP 프로토콜에 대한 이해가 있어야만 한다. 라우팅이란 패킷을 전송하기 위한 경로를 선택하는 과정을 말하고 라우터란 다른 어드레스 체계를 가진 네트워크 사이에서 통신을 가능하게 하는 기기를 말한다. 인터넷은 라우터라고 불리는 컴퓨터에 의해 상호 연결된 여러 물리적인 망들로 구성되어 있다. 즉 어떤 망의 컴퓨터(호스트)에서 인터넷에 접속하고자 한다면 하나 이상의 라우터를 거쳐야만 하는 것이다. 한 호스트상의 응용 프로그램이 통신하고자 할 때, TCP/IP 프로토콜은 하나 이상의 IP 데이터그램을 만든다. 호스트는 데이터그램을 어디로 송신하여야 하는지를 선택할 때 자신의 라우팅 테이블을 참조해서 경로 설정을 해야만 한다. 그림으로 나타내면 위와 같다.

라우팅의 종류

    라우팅의 종류는 라우팅 테이블을 어떻게 작성하느냐에 따라서 크게 정적 라우팅과 동적 라우팅으로 나뉜다.

    *정적 라우팅(static routing)
    라우팅 테이블을 직접 작성하는 것이다. 이 방법은 망 구조가 복잡하지 않는 소규모 망에서 주로 쓰는 방법이다. 쉘상에서 route라는 명령으로 작성하면 된다.

    *동적 라우팅(dynamic routing)
    이 방법은 라우터 사이의 망 도달성 정보를 정확하게 자동적으로 교류하는 방식으로 라우터들 간에 라우팅 테이블을 주고 받아 자신의 라우팅 테이블을 수정하는 방식이다. 이 때 쓰

라우터와 네트웍간의 연결

    는 라우팅 프로토콜로는 RIP, OSPE등 여러가지 종류가 있다. 여기서는 이글의 범위를 벗어나므로 더 이상 언급하지 않겠다. PC로 라우터를 만들었을 경우에는 routed라는 프로그램을 실행시키면 동적 라우팅을 할 수가 있다.
    지금까지 방화벽과 라우팅의 개념을 개략적으로 살펴보았다. 지금부터는 실제적으로 어떻게 베스천 호스트와 라우터를 셋팅하는지 살펴보자.

    실제 구현 방법

    *리눅스에서 2개의 랜카드를 셋팅하는 방법

    라우터이든 베스천 호스트이던 간에 일단 먼저 해야 할 일은 PC에 랜카드 2개를 설치하는 일이다. 이것은 랜카드의 종류가 같던 다르던 상관 없다. 중요한 것은 랜카드의 IRQ와 I/O주소가 PC의 IRQ와 I/O 주소가 일치하게 세팅 해 주어야 한다는 것이다. 물론 랜카드끼리의 충돌을 피하기 위해선 랜카드의 IRQ와 I/O 주소는 서로 달라야 한다. 이 문제는 랜카드 공급 업체에서 공급해 준 드라이버 디스켓에 IRQ를 조절해 주는 프로그램이 있을 것이므로 이를 이용해 해결하면 된다. 구체적인 방법을 소개하자면 랜카드를 PC에 꼽은 다음 제일 먼저 해야 할 일은 구입 업체에서 제공한 프로그램을 이용해 PnP기능을 제거하는 것이다. 그런 다음 윈도우95에서 제어판 -> 시스템 -> 장치관리자 -> 컴퓨터의 등록정보를 선택하면 현재 시스템에서 쓰고 있는 IRQ와 I/O주소 상태를 알 수 있을 것이다. 이것을 참고로 시스템에서 사용되지 않는 IRQ와 I/O를 메모한 다음 구입 업체에서 제공한 프로그램을 이용

    [표1] 수정된 lilo.conf

    해 프로그램을 이용해 랜카드의 IRQ와 I/O주소를 거기에 맞게 설정하면 된다. 테스트해서 성공적으로 끝났다면 설정된 각각의 랜카드의 IRQ와 I/O를 메모해 두길 바란다. 이제 리눅스로 부팅해 보자. 우선 커널이 자신의 랜카드를 지원하도록 컴파일 해야 한다. 컴파일 옵션 중에서 Network device support 부분에서 자신의 랜카드를 선택하면 된다. 커널 컴파일이 제대로 끝났다면 부팅될 때 랜카드를 선택하면 된다. 커널 컴파일이 제대로 끝났다면 부팅될 때 랜카드 설정 부분이 나타날 것이다. 쉘상에서는 dmesg라는 명령으로 확인할 수 있다. 다음으로 해야할 작업은 /etc/lilo.conf를 [표1]과 같이 수정해야 한다.
    이제 각각 인터페이스(eth0, eth1)에 IP adress를 할당하고 라우팅 테이블에 추가시키는 방법을 알아보자. ==>more

    dislevel#ifconfig eth0 inet 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255 up
    dislevel#ifconfig eth1 inet 192.168.2.1 netmask 255.255.255.0 broadcast 192.168.2.255 up
    dislevel#route add net 192.168.1.0 eth0
    dislevel#route add net 192.168.2.0 eth1

    지금까지는 리눅스에서 랜카드 2개를 설정하는 방법을 알아보았다. 이젠 베스천 호스트와 라우터를 만드는 방법을 알아보겠다.

    *리눅스를 베스천 호스트로 만드는 방법

    리눅스를 베스천 호스트로 만드려면 커널 컴파일을 다시 한번 해야 한다. Network device support 부분은 앞에서 설명했으므로 생략하고 Network options 부분에서 설정해 주어야 할 부분은 <화면1>과 같다.

    여기서 눈여겨 볼 부분은 IP forwarding을 OFF로 셋팅해야 한다는 것이다. 왜냐하면 베스천 호스트에서는 모든 패킷을 일단 차단한 다음 Application Gateway별로 규칙에 부합하는 패킷만을 통과시키도록 정책을 쓰기 때문이다.

    *리눅스를 라우터로 만드는 방법

    베스천 호스트의 차이점을 말한다면 IP 패킷을 forwarding 하느냐, 하지 않는냐에 있다. 즉 라우터는 IP forwarding 을 해야하고 베스천 호스트는 해서는 안된다. 그렇기 때문에 베스천 호스트 만들 때에는 설정했던 컴파일 옵션 중 IP forwarding 부분을 ON 시켜주면 된다. 그리고 추가로 윗그림에서 IP:optimize as router not host 부분을 y로 하면 된다. 커널 컴파일이 끝났으면 routed라는 프로그램을 실행시키면 된다.

    <화면1> 커널 컴파일 옵션에서 네트웍 부분 세팅

    Router를 위한 IP Packet Filter

    이번에는 라우터에 패킷을 필터링 하는 기능을 구현해 보자. 패킷 필터링은 인터넷에 연결된 사설 네트워크에서 인터넷으로 나가거나 사설 네트워크로 들어오는 패킷들의 IP 주소, 포트 번호 등을 기준으로 패킷을 걸러내 허용된 패킷만 받아들이거나 전달되도록 하는 것을 말하며, 일반적으로 다음과 같은 과정을 따라 패킷을 필터링하게 된다.

    *패킷과 연관되는 필터링 규칙이 있는가를 검사한다.

    *처음 발견된 걸맞는 필터링 규칙에 따라 패킷을 처리한다.

    *다음과 같은 3가지 정책중 규칙에 설정된 정책에 따라 패킷을 처리한다.

    -Accept : 패킷을 통과 시킨다.
    -Deny : 패킷을 그냥 버린다.
    -Reject : 패킷을 버리고 ICMP Destination Unreachable 메시지를 패킷 송신자(sender)에게
    보낸다.

    *각 규칙에 걸맞는 패킷 수와 그 바이트를 셈한다.

    *패킷에 관한 정보를 기록한다.

    *걸맞는 필터링 규칙이 없을 경우에는 기본(default)정책에 따라 패킷을 처리한다.

    리눅스에서는 이러한 패킷 필터링의 기능을 ipfwadm이라는 프로그램을 가지고 쉽게 구현 할 수 있다 알짜 레드햇을 설치 하였다면 아마 이 프로그램이 기본으로 설치되어 있을 것이다. 만약 설치 되어있지 않다면 다음 URL에서 최신 버전을 구할 수 있을 것이다.

    Router와 Packet Filter 개념도

    프로그램을 설치하는 것은 별 어려움이 없으리라 본다. 자 그럼 이제 본론으로 들어가서, 우리가 제일 먼저 해야 할 것은 패킷 필터링에 있어서 기본 정책을 세우는 것이다. 일반적으로 기본 정책을 수립하는데 다음과 같은 두가지 철학이 있다.

    *명시적으로 허가되지 않은 것은 금지한다.
    *명시적으로 금지되지 않은 것은 허가한다.

    즉, 기본 정책으로는 일반 모든 패킷을 허용하고 보안상 문제가 되는 패킷들에 대해서는 금지하는 방법과 보안상 문제가 없다고 생각되는 패킷들만 허용하고 나머지 모든 패킷들을 금지하는 방법이 있다. 일반적으로 두번째 방법을 많이 사용한다. 따라서 여기서도 두번째 방법을 가지고 설명을 하겠다. 패킷 필터링의 기본 정책은 다음과 같은 명령으로 설정할 수 있다.

      Ipfwadm -I -p deny
      Ipfwadm -O -p deny

    여기서 -I는 들어오는(input) 패킷을 의미하고 -O는 나가는(output) 패킷을 의미한다. 전달(forward)되는 패킷의 경우는 -F 을 이용하여 정책을 세울 수 있다. -p는 기본 정책(default policy)을 설정하는 옵션이다. 위 두 명령은 들어오고 나가는 모든 패킷에 대하여 기본적으로 패킷을 버리도록 설정이 되어 있다. 이 상태에서는 어떤 패킷도 현재 호스트에 들어오지도 나가지도 않는다. 따라서 어떤 네트워크 서비스도 이용할 수 없다. localhost에 대한 ping 명령을 내려보면 아래 그림과 같을 것이다. 그럼 다시 ping이 가능하게 하려면 어떻게 하면 될까? 다음과 같이 기본 정책을 다시 바꾸면 될 것이다.

    Localhost에 대한 ping 예제

      ipfwadm -I -p accept
      ipfwadm -O -p accept

    하지만 다른 서비스는 다 무시하고 ping만 가능하게 하라면 이 방법으론 안될 것이다. 다음과 같이 하면 ping이 제대로 동작할 것이다.

      ipfwadm -I -a accept -P icmp
      ipfwadm -O -a accept -P icmp

    여기서 -a 옵션은 새로운 필터링 규칙을 추가한다는 것을 나타내고 뒤에 나오는 accept는 허용 규칙을 추가한다는 뜻이고, -P icmp은 프로토콜(protocol) icmp를 의미한다. ping프로그램이 사용하는 프로토콜이 icmp이므로 icmp를 사용한 패킷을 보내고 받을 수 있도록 하면 된다. 여기서 주의 할 점은 'P'가 대문자 라는 것이다.
    필터링 규칙이 제대로 설정 되었는지 알아보려면, 다음과 같이 하면된다. ==>more

      ipfwadm -I -l --- Input packet Filtering rule list 출력
      ipfwadm -O -l --- Output packet Filtering rule list 출력

    그러면 Input packet과 Output packet에 대한 필터링 규칙을 보여준다.

    그럼 이번에는 Telnet 서비스가 가능하도록 해보자. Telnet 서비스는 밖으로 Telnet을 통해 나가는 경우와 밖에서 Telnet을 통해 들어오는 경우, 두 가지가 있다. 먼저 Telnet 서비스를 통하여 밖으로 나가는 경우를 보자. Telnet 서비스를 이용할 경우 TCP 프로토콜을 사용하며, Telnet 서버는 24번 포트를 사용하여 클라이언트의 접속을 기다린다. Telnet 클라이언트는 1024~65535범위 안에서 임의의 포트를 사용하여 Telnet 서버에 연결을 하게 된다. 따라서 Telnet을 이용할 때 전송되는 패킷들의 Source address와 Port는 다음과 같이 요약할 수 있다.

      -클라이언트에서 서버로 가는 패킷

      Source Destination
      Address Port Address Port
      Cllent IP 1024-65535 Server IP 24

      -서버에서 클라이언트로 가는 패킷

      Source Destination
      Address Port Address Port
      Server IP 24 Cllent IP 1024-65535

    따라서, 아래와 같이 필터링 규칙을 추가 해주면 된다. 대소문자에 유의하기 바란다.

      ipfwadm -O -a accept -P tcp -S 192.168.37.1 1024:65535
      \ D 192.168.22.0/24 telnet
      ipfwadm -I -a accept -k -P tcp -S 192.168.22.0/24
      telnet \-D 192.168.37.1 1024:65535

    여기서 -S 192.168.37.1은 패킷은 발송지 주소(Source Address)를 나타낸다. (호스트 IP는 192.168.37.1로 가정) 1024:65535을 Port 번호의 범위를 나타낸다. -D 192.168.22.0/24는 목적지 주소(Destination Address)를 나타낸다. 여기서 192.168.22.0는 네트워크 주소를 나타내고 /24는 netmask 255.255.255.0을 의미한다. 24라는 수는 netmask가 차지하는 상위 비트수를 나타낸다. 위에서 보는 것처럼 TCP 프로토콜에 대해서는 항상 IP address 와 Port 번호를 함께 설정해 주어야 하는데, 이때 IP address 가 호스트일 때는 IP주소만 적고, 네트워크일 때는 netmask를 함께 써주어야 하며, 포트 번호를 생략하게 되면 모든 포트로 설정된다. -k 옵션은 ACL 비트가 포함된 TCP 패킷을 의미한다.

    위와 같이 설정하면 호스트 192.168.37.1에서 192.168.22.0 네트워크로만 Telnet 서비스를 이용할 수 있다. 만약 모든 네트워크로만 Telnet 서비스를 사용가능 하도록 지정하고 싶을땐 192.168.22.0/24를 any/0으로 수정하면 된다. 수정할 때는 앞의 규칙을 삭제하고 새로운 규칙을 다시 설정해야 한다. 필터링 규칙 삭제는 -d 옵션을 사용하여 삭제하고자 하는 규칙을 설정하면 된다. ==>more

      ipfwadm -I -d accept -P tcp -S 192.168.37.1 1024:65535
      \ -D 192.168.22.0/24 telnet
      ipfwadm -I -d accept -k -P tcp -S 192.168.22.0/24
      telnet \-D 192.168.37.1 1024:65535

    모든 필터링 규칙을 삭제하고 처음부터 다시 설정하고 싶다면 다음 명령어를 사용하면 된다.

      ipfwadm -I -f
      ipfwadm -O -f

    이번에는 외부의 호스트가 호스트 192.168.37.1로 Telnet 접속을 할 수 있게 하여 보자. 명령어는 앞에서 한 것과 매우 유사하다. Source Address와 Destination address 그리고 Port번호를 반대로 설정하면 된다.

      ipfwadm -O -a accept -k -P tcp -S 192.168.37.1 telnet
      \ -D 192.168.22.0/24 1024:65535
      ipfwadm -I -a accept -P tcp -S 192.168.22.0/24 1024:
      65535 \-D 192.168.37.1 telnet

    위와같이 설정하면 192.168.22.0 네트워크에 속하는 호스트들만 호스트 192.168.37.1의 Telneet 서버스를 사용할 수 있게 된다. 이상으로 Telnet 접속의 2가지 경우에 대하여 접속을 제어하는 것에 관하여 알아보았다.

    다음으로 우리가 자주 사용하는 FTP에 대한 필터링 규칙을 설정하여 보자. 한가지 주의할 점은 Telnet은 하나의 연결(connection)을 사용하지만 FTP는 두 개의 연결을 가지고 있다는 것이다. 하나는 FTP 명령을 사용하기 위한 연결이고 다른 하나는 데이터를 전송하기 위한 연결이다. 따라서 FTP에 대한 필터링 규칙은 다음과 같다.

      ipfwadm -I -a accept -k -P tcp -S any/0 ftp \
      -D 192.168.37.1 1024:65535
      ipfwadm -O -a accept -P tcp -S 192.168.37.1
      1024:65535 \-D any/0 ftp
      ipfwadm -I -a accept -P tcp -S any/0 ftp-data \
      -D 192.168.37.1 1024:65535
      ipfwadm -O -a accept -k -P tcp -S 192.168.37.1
      1024:65535 \-D any/0 ftp-data

    그외 다른 서비스들도 Telnet 이나 FTP와 마찬가지로 네트워크상에서의 패킷의 발신지 포트와 목적지 포트에 유념하여 필터링 규칙을 설정한다면 특정 패킷을 허용 또는 차단 할 수 있다. 하지만 모든 서비스에 관하여 패킷 필터링의 기능을 설정하는 것은 쉬운 일이 아니다. 각 서비스가 사용하고 있는 프로토콜과 포트 번호를 정확히 알아야 하며, 필터링 규칙이 매우 복잡해진다. 필터링 규칙을 세우는데 있어서 다음과 같은 점을 유의하기 바란다.

    ⇒ 필터링 규칙의 순서를 정하라.
    ⇒ 현재의 패킷에 적용될 수 있는 규칙이 여러 개 있다면 그중 먼저 설정된 규칙이 적용된다.
    ⇒ 가능한한 여러 개의 포트 번호를 묶어서 설정하라.
    - 패킷에 대한 필터링 규칙을 점검하는데 CPU time이 소요되기 때문이다.
    ⇒ 시스템이 시작될 때 필터링 규칙이 설정되게 하라.
    - 시스템이 시작되고 네트워크 장비가 설정되기 전에 필터링 규칙이 설정되도록 하는 것이
    이상적이다.
    ⇒ 호스트 이름이나 네트워크 이름을 사용하지 마라.
    - ipfwadm에서는 호스트 이름이나 네트워크 이름을 사용할 수 있으나 될 수 있으면
    IP 주소를 사용하는 것이 더 좋다.
    ⇒ 현재 운영 중인 시스템에 필터링 규칙을 설정할 경우 다음과 같은 순서로 하라.
    -기본 필터링 규칙을 deny로 설정하라.
    -모든 필터링 규칙을 제거한다. (ipfwadm의 -f 옵션사용)
    -새로운 필터링 규칙을 설정한다.
    -기본 필터링 규칙을 원하는 값으로 설정하라.

    IP traffic accounting

    리눅스에서 ipfwadm을 이용하면 받은 패킷과 보낸 패킷의 수를 셈하여 IP 트래픽을 계산할 수 있다. 로컬 호스트이 IP주소가 192.168.37.1 이고 WWW 서비스를 제공하고 있다면, 다음 명령은 이부로 부터의 WWW 서비스를 이용하는 사람들의 http 패킷을 계산한다. ==>more

      ipfwadm -A -a -d -W ethl -P tcp -D 192.168.37.1 www

    여기서 -A 옵션은 패캣의 수를 세(Account)는 옵션이고, -b옵션은 양방향(bi-directional)의 패킷 모두를 계산하라는 것이다. 192.168.37.1(80)로 들어오는 패킷이나 나가는 패킷의 수만을 계산하고 싶다면,

      ipfwadm -A in -a -W ethl -P tcp -D 192.168.37.1 www
      ipfwadm -A out -a -W ethl -P tcp -S 192.168.37.1 www

    위 명령과 같이 -A 옵션 다음에 방향(in/out)을 지정하고 목적지 또는 발송지 주소를 적어 줌으로서 원하는 패킷의 수만을 계산할 수 있다. -W ethl 은 인터페이스를 의미한다.

    기타 다른 옵션들에 대해서는 man ipfwadm 해서 찾아보기 바란다. 알짜 래드햇의 경우 번역된 맨 페이지가 나오므로 쉽게 알 수 있을 것이다.

    참고 : 정보보안.네트워크.IT자격증 정보공유사이트


, .
Red Hat Enterprise Linux 4

보안 가이드

ISBN: N/A
차례
머리글
1. 아키텍쳐 관련 정보
2. 문서 약정
3. 레드햇 네트워크에 구입하신 제품을 등록하십시오
3.1. Red Hat 로그인 아이디 입력하기
3.2. 등록 번호를 입력하십시오
3.3. 귀사의 시스템을 연결하십시오
4. 앞으로 추가될 사항
4.1. 여러분의 의견을 기다리고 있습니다
I. 보안에 대한 기본적인 소개
1장. 보안 개요
1.1. 컴퓨터 보안이란 무엇인가?
1.2. 보안 제어
1.3. 결론
2장. 공격자와 취약점
2.1. 간략한 해커 역사
2.2. 네트워크 보안 위협
2.3. 서버 보안 위협
2.4. 워크스테이션과 가정용 PC 보안 위협
II. Red Hat Enterprise Linux를 보안 설정하기
3장. 보안 업데이트
3.1. 패키지 업데이트하기
4장. 워크스테이션 보안
4.1. 워크스테이션 보안 평가하기
4.2. BIOS와 부트로더 보안
4.3. 암호 보안
4.4. 관리 제어
4.5. 사용 가능한 네트워크 서비스
4.6. 개인 방화벽
4.7. 보안 강화된 통신 도구
5장. 서버 보안
5.1. TCP 래퍼와 xinetd를 사용하여 서비스 보안 강화하기
5.2. Portmap 보안 강화
5.3. NIS 보안 강화
5.4. NFS 보안 강화
5.5. Apache HTTP 서버 보안 강화
5.6. FTP 보안 강화
5.7. Sendmail 보안 강화
5.8. 청취 중인 포트 확인하기
6장. 가상 사설 통신망 (Virtual Private Networks)
6.1. VPN과 Red Hat Enterprise Linux
6.2. IPsec
6.3. IPsec 설치
6.4. IPsec 호스트 간 설정
6.5. IPsec 네트워크 간 설정
7장. 방화벽
7.1. Netfilter와 iptables
7.2. iptables 사용법
7.3. 일반 iptables 필터링
7.4. FORWARDNAT 규칙
7.5. 바이러스와 가짜 IP 주소
7.6. iptables와 연결 추적(Connection Tracking)
7.7. ip6tables
7.8. 추가 자료
III. 보안 평가
8장. 취약성 평가
8.1. 적의 마음으로 생각하기
8.2. 평가와 테스팅 정의하기
8.3. 도구를 평가하기
IV. 칩입과 보안 사고 대응
9장. 침입 탐지
9.1. 침입 탐지 시스템이란
9.2. 호스트 기반 IDS
9.3. 네트워크 기반 IDS
10장. 사고 대응
10.1. 사고 대응이란 무엇인가
10.2. 사고 대응 계획 세우기
10.3. 사고 대응 계획을 실행하기
10.4. 사고 조사
10.5. 자원 복구하기
10.6. 사고 보고하기
V. 부록
A. 하드웨어와 네트워크 보안
A.1. 보안 네트워크 구성 방식
A.2. 하드웨어 보안
B. 일반 보안 취약점과 공격
C. 공용 포트
색인
판권

출처 : http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ko/security-guide/index.html


2장. 공격자와 취약점

좋은 보안 정책을 계획하고 구현하기 위해서는 먼저 공격자가 시스템에 침입하고자 결정하게된 계기와 동기를 알아보아야 합니다. 이를 알아보기에 앞서, 우선 공격자를 지칭하는 여러 용어들에 대하여 설명해 보겠습니다.

2.1. 간략한 해커 역사

오늘날 우리가 알고 있는 해커 (hacker)의 기원은 1960 년대 MIT테크 모델 철도 클럽(TMRC, Tech Model Railroad Club)에서 시작되었습니다. 복잡한 구조의 대형 기차모형을 제작하는 이 동호회에서는 독창적인 요령이나 문제 해결책을 발견한 동호회 회원을 지칭하는데 해커라는 이름을 사용하기시작했습니다.

그 이후 해커라는 용어는 컴퓨터 애호가로부터 능력이 뛰어난 프로그래머까지 모든 것을 포함하는 의미를 갖게 되었습니다.대부분 해커들의 일반적인 특징은 다른 사람의 영향을 받지 않고 스스로 컴퓨터 시스템과 네트워크 기능의 작업 방식에 대하여 자세히알아보고자 하는 정신입니다. 오픈 소스 소프트웨어 개발자들은 종종 자기 자신과 또한 함께 일하는 동료들을 해커로 지칭하며, 해커정신을 존경할 것을 요구합니다.

일반적으로 해커들은 정보와 전문적 기술을 탐구하고 이 정보를 공유하는 것이 사회에 대한 해커의 근본 윤리임을 제시하는 해커 윤리 (hacker ethic)를따릅니다. 이러한 지식을 탐구하는 일환으로 일부 해커들은 컴퓨터 시스템의 보안 침투를 시도하기도 합니다. 이러한 이유로매체에서는 종종 해커라는 용어를 비도덕적이고 악의를 가지고 범죄를 저지를 생각으로 불법으로 시스템과 네트워크에 침입한 사람을지칭하는데 사용합니다. 이러한 유형의 컴퓨터 해커에 대한 보다 적절한 용어는 크래커 (cracker) 입니다 — 1980 년대 중반에 해커들이 해커와 크래커에 차이를 두기 위해 만들어낸 용어입니다.

2.1.1. 다양한 종류의 해커

시스템과 네트워크의 취약점을 분석 파악하고 연구하는 해커들은 여러 다른 그룹으로 나뉘어 집니다. 이 그룹들은 이들이 보안 체계를 연구할 때 "착용하는" 모자의 색으로 구분되며, 이 색은 해킹의 의도를 나타냅니다.

white hat 해커란 네트워크와 시스템을 검사하여 얼마나 외부 침입에취약한지를 연구하는 사람입니다. 일반적으로 white hat 해커는 자신의 시스템이나 보안 검사를 위해 자신을 고용한 고객의시스템에 침투하여 연구합니다. white hat 해커의 대표적인 예로서는 대학 연구원이나 전문 보안 상담자를 들 수 있습니다.

black hat 해커는 크래커와 동일한 의미입니다. 일반적으로 크래커는 연구나 프로그래밍이 보다는 크래킹 프로그램을 사용하거나 잘 알려진 취약점을 이용하여 시스템에 침입한 후 기밀 정보를 빼내거나 목표 시스템이나 네트워크를 손상시킵니다.

반면 grey hat 해커는 대부분의 경우 white hat 해커의 지식과의도를 갖추고 있지만, 가끔씩 자신의 지식을 보다 정당하지 못한 의도로 사용하는 사람을 지칭합니다. grey hat 해커는white hat 해커이지만 가끔씩 자신의 욕심을 채우기 위해 black hat으로 변하는 해커라고 말할 수 있습니다.

Grey hat 해커는 일반적으로 다른 유형의 해커 윤리를 따릅니다. 이 해커 윤리에 따르면 해커가 도둑질이나 기밀을유포하지 않는 한 시스템에 침입하는 것을 허용합니다. 그러나 일부에서는 시스템에 침입하는 것 자체가 윤리적이지 못하다고비난합니다.

침입자의 의도에 상관없이 크래커가 시스템 침입에 사용할 취약점을 알아내는 것이 중요합니다. 이 장의 나머지 부분에서는 이러한 취약점을 중점으로 설명해 보겠습니다.


2.2. 네트워크 보안 위협

다음과 같은 네트워크 설정시 잘못된 설정으로 인해 침입의 위험이 증가될 수 있습니다.

2.2.1. 불안정한 구조

잘못 설정된 네트워크는 허가 없는 사용자들이 시스템에 침입할 수 있게 해주는 주요 시작 지점입니다. 로컬 네트워크를인터넷에 공개해놓는 것은 마치 우범 지역에서 집의 문을 활짝 열어놓는 것과 같습니다 — 얼마 동안은 아무런 일도 일어나지 않을지몰라도, 결국에는 누군가가 그 기회를 이용하여 침입할 것입니다.

2.2.1.1. 브로드캐스트 네트워크

시스템 관리자는 종종 보안 계획을 구상시 네트워크 하드웨어의 중요성을 간과하는 경우가 있습니다. 허브(hub)와 라우터와같이 브로드캐스트나 비교환 원칙에 의존하는 단순 하드웨어; 즉, 네트워크를 통하여 수신자 노드로 데이터를 전송시, 허브나라우터는 수신자 노드가 데이터 패킷을 받아서 프로세스할 때까지 데이터 패킷을 브로드캐스트합니다. 이러한 방법은 지역 네트워크상에서 허가 없는 사용자나 외부 침입자가 주소 결정 프로토콜 (arp)이나 MAC (media access control) 주소 스푸핑을 사용하여 쉽게 침입할 수 있게 해줍니다.

2.2.1.2. 중앙 집중형 서버

또 다른 네트워크 보안 위협으로서 중앙 집중식 컴퓨팅을 들 수 있습니다. 많은 사업체에서 경비를 절감하는 방법으로서 한개의 강력한 컴퓨터에 모든 서비스를 통합하는 경우가 있습니다. 여러 개의 서버를 설정하는 것 보다 상당히 경비도 절감되고관리하기에 편한 이점이 있지만, 이러한 중앙 집중형 서버를 사용하는 경우 만일 중앙 서버가 손상되면 네트워크 전체가 정지되거나또는 데이터 조작이나 도난당하기 쉽습니다. 이러한 경우 침입자는 중앙 서버를 이용하여 전체 네트워크에 접속 가능합니다.


2.3. 서버 보안 위협

서버 보안은 네트워크 보안 만큼 중요합니다. 그 이유는 기업체의 많은 중요한 정보가 서버에 저장되어 있기 때문입니다. 만일서버가 손상되면 크래커가 서버에 저장된 내용물을 모두 빼내거나 마음대로 조작할 가능성이 있습니다. 다음 부분에서는 이와 관련된중요한 문제점에 대하여 설명해 보겠습니다.

2.3.1. 사용되지 않은 서비스와 공개 포트

Red Hat Enterprise Linux를 전체 설치하시면 1000여개에 이르는 응용 프로그램과 라이브러리 패키지가설치됩니다. 그러나 대부분의 서버 관리자 분들은 배포판에 포함된 모든 개별 패키지를 설치하기 보다는, 대신 여러 서버 응용프로그램을 포함한 기본 패키지 설치를 선호합니다.

대부분의 시스템 관리자들은 실제로 어떠한 프로그램이 설치되는지 주시하지 않은 채 운영 체제를 설치하시는 경우가 많습니다.이러한 경우, 기본 설정에 포함된 필요치 않는 서비스가 설치되어 켜질 수 있으므로 문제가 됩니다. Telnet, DHCP,DNS와 같은 원치 않는 서비스가 관리자가 깨닫지 못한채 서버나 워크스테이션에서 실행되어, 서버에 필요없는 트래픽을 야기시키며심지어는 크래커가 시스템에 침입 가능하게 해줍니다. 포트를 닫거나 사용되지 않는 서비스를 비활성화 시키는 방법을 보시려면 5 장을 참조하시기 바랍니다.

2.3.2. 패치가 설치되지 않은 서비스

기본 설치에 포함된 대부분의 서버 응용 프로그램들은 철저하게 테스트와 검증을 거친 소프트웨어입니다. 여러 해를 거쳐 생산 환경에서 사용되면서, 이 소프트웨어의 코드가 보다 개선되고 발견된 다수의 문제점이 수정되었습니다.

그러나 완벽한 소프트웨어란 있을 수 없으며 언제든지 개선할 요소가 있기 마련입니다. 더우기 새로운 소프트웨어는 기대하는만큼 엄격하게 테스트되지 않는 경우가 종종 있습니다. 그 이유는 이 소프트웨어가 제품 환경에 출시된지 얼마되지 않아서 이거나또는 다른 서버 소프트웨어 만큼 많이 사용되지 않기 때문입니다.

개발자와 시스템 관리자는 서버 응용 프로그램에서 문제점을 발견한 경우 그 정보를 Bugtraq 메일링 리스트 (http://www.securityfocus.com)나 컴퓨터 비상 대응팀 (Computer Emergency Response Team: CERT) 웹사이트 (http://www.cert.org)와 같은 버그 추적과 보안 관련 웹사이트에 공개합니다. 이러한 방법은 커뮤니티에 보안 취약점을 빠르게 알려줄 수 있는 효율 적인방법이기는 하지만, 시스템 관리자들은 즉시 시스템을 패치를 설치하셔야 합니다. 크래커는 동일한 취약점 추적 서비스를 볼 수 있기때문에 재빠르게 패치가 설치되지 않은 시스템에 침입하여 정보를 빼내올 가능성이 있기 때문입니다. 훌륭한 시스템 관리자라면 보다안전한 컴퓨팅 환경을 만들기 위하여 항상 경계하며 지속적으로 버그 (문제점)을 추적하고 적절한 시스템 관리 작업을 수행해야합니다.

항상 업데이트된 시스템을 유지하는 방법에 대한 자세한 정보는 3 장을 참조하시기 바랍니다.

2.3.3. 부주의한 관리

관리자가 시스템에 패치를 설치하지 않는 것은 서버 보안에 있어서 가장 큰 위험 요소입니다. SANS (System Administration Network and Security Institute)에 따르면 컴퓨터 보안에 취약점을 가져오는 가장 주된 원인은 "재대로 교육 받지 않는 미숙한 사람을 보안 관리하도록 맡겨놓고 작업을 수행할 수 있는 시간이나 교육도 제공하지 않기 때문이다."[1]라고 합니다. 이러한 상황은 미숙한 관리자 뿐만 아니라 너무 자만하거나 의욕을 상실한 관리자에게도 적용됩니다.

일부 관리자들은 서버와 워크스테이션에 패치를 설치하는 것을 잊어버리는 경우가 있는 반면, 다른 어떤 관리자들은 시스템커널의 로그 메시지나 네트워크 트래픽을 잊고 살펴보지 않는 경우도 있습니다. 또 다른 흔한 실수로 서비스의 기본 암호나 키를변경하지 않고 그대로 사용하는 것을 들 수 있습니다. 예를 들어 일부 데이터베이스에는 시스템 관리자가 설치 후 암호를 즉시변경할 것이라는 가정 하에 기본 관리 암호가 할당됩니다. 만일 데이터베이스 관리자가 이 암호를 변경하지 않으면, 경험이 없는크래커도 잘 알려진 기본 암호를 사용하여 데이터베이스에 관리자 허가를 얻을 수 있습니다. 앞에서 설명된 것은 부주의한 관리가서버 침입에 미치는 영향을 보여주는 몇가지 예시일 뿐입니다.

2.3.4. 본질적으로 안전하지 못한 서비스

가장 경계가 투철한 기업체에서도 선택한 네트워크 서비스가 원래 안전하지 못하다면 공격당하기 쉽습니다. 예를 들어 신뢰하는네트워크 하에서 사용될 것이라는 가정 하에서 개발된 서비스가 많습니다; 그러나 이러한 가정은 서비스가 본질적으로 신뢰할 수 없는— 인터넷 상에서 사용 가능해지면 더 이상 적용되지 않습니다.

이러한 안전하지 못한 네트워크 서비스의 한 예로서 인증을 위해 암호화되지 않는 사용자명과 암호를 요구하는 서비스를 들 수있습니다. Telnet과 FTP가 이러한 서비스의 두 예입니다. 만일 패킷 스니핑 소프트웨어가 원격 사용자와 이러한 서비스사이의 트래픽을 감시 중이라면 서비스 사용자명과 암호를 쉽게 가로챌 수 있습니다.

이러한 서비스는 본질적으로 보안 산업에서 소위 말하는 man-in-the-middle공격의 대상이 되기 쉽습니다. 이러한 유형의 공격은 크래커가 네트워크 상의 이름 서버에 침입하여 자신의 컴퓨터를 원래 수신서버로 오인하게 하여 네트워크 트래픽을 방향 변경시키는 것을 말합니다. 누군가 서버로 원격 세션을 시작하면, 공격자의 컴퓨터는보이지 않는 관로 역할을 하며 원격 서비스와 아무것도 알아채지 못한 사용자 사이에서 조용히 정보를 빼내갑니다. 이러한 방법을사용하여 크래커는 서버나 사용자가 모르게 관리자 암호와 원자료를 가로챌 수 있습니다.

안전하지 못한 서비스에는 네트워크 파일 시스템인 NFS와 NIS 정보 서비스가 포함됩니다. 이러한 서비스는 LAN 사용을위해 만들어졌지만, 불행히도 원격 사용자를 위하여 WAN도 포함하도록 확장되었습니다. NFS는 기본적으로 크래커가 NFS 공유를마운트한 후 그 공유에 속한 자료에 접근하는 것을 방지할 수 있는 어떠한 인증이나 보안 메커니즘도 갖추고 있지 않습니다. NIS또한 평문 ACSII 또는 (ASCII에서 파생된) DBM 데이터베이스에 네트워크 상 모든 컴퓨터에 알려진 중요한 정보 (암호와파일 권한)를 보관합니다. 만일 크래커가 이 데이터베이스에 접속할 수 있게 된다면 네트워크 상 모든 사용자 계정을, 심지어는관리자의 계정까지도 사용 가능하게 됩니다.

Red Hat Enterprise Linux은 이러한 서비스를 사용하지 않도록 기본 설정되어 있습니다. 그러나 관리자들은종종 이러한 서비스를 불가피하게 사용해야할 경우가 있으므로, 신중하게 설정하는 것이 중요합니다. 안전한 방법으로 서비스를설정하는 방법에 대한 자세한 정보를 원하신다면, 5 장을 참조하시기 바랍니다.

주석

[1]

출처: http://www.sans.org/newlook/resources/errors.html


2.4. 워크스테이션과 가정용 PC 보안 위협

워크스테이션과 가정용 PC는 네트워크나 서버 만큼 자주 공격의 대상이 되지는 않습니다. 그러나 신용 카드 정보와 같이 기밀정보가 저장되어 있을 경우가 있으므로, 시스템 크래커들의 공격 대상이 되기도 합니다. 워크스테이션은 사용자가 모르게 공격자에의해서 준비된 공동 공격에 "종속" 컴퓨터로 사용될 수 있습니다. 이러한 이유로 사용자는 워크스테이션의 취약점을 미리 알아두시는 것이 이후 운영 체제를 재설치해야하는 번거러움을 줄일 수 있으며 더 나아가 자료를 도난당하는 사태를 방지할 수 있습니다.

2.4.1. 너무 단순한 암호

너무 단순한 암호는 공격자가 시스템에 접근할 수 있는 가장 쉬운 기회를 제공합니다. 암호 생성시 흔히 발생하는 실수를 피할 수 있는 방법은 4.3 절에 설명되어 있습니다.

2.4.2. 공격 당하기 쉬운 클라이언트 응용 프로그램들

관리자가 아무리 서버를 안전하게 패치를 설치한다고 해도, 그 서버에 접속하는 원격 사용자가 안전하다는 것을 의미하지는않습니다. 예를 들어 서버가 공개 네트워크 상에서 Telnet이나 FTP 서비스를 제공하는 경우, 공격자는 평문으로된 사용자명과암호를 네트워크 상에서 가로챌 수 있으며, 그 가로챈 계정 정보를 사용하여 원격 사용자의 워크스테이션에 접속할 수 있습니다.

SSH와 같이 보안 프로토콜을 사용하는 경우에도, 원격 사용자가 클라이언트 응용 프로그램을 항상 업데이트하지 않는다면이러한 공격을 당할 가능성이 있습니다. 예를 들어 v.1 SSH 클라이언트는 악의를 가진 SSH 서버로부터X-forwarding 공격을 받을 수 있습니다. 클라이언트가 서버에 연결되면, 공격자는 조용히 클라이언트가 네트워크 상에서누르는 키조합이나 마우스 클릭을 캡쳐할 수 있습니다. 이러한 문제점은 v.2 SSH 프로토콜에서는 고쳐졌지만, 이러한 응용프로그램의 취약점을 알고 필요한 경우 업데이트하는 것은 사용자의 몫입니다.

4 장에서는 관리자와 사용자가 컴퓨터 워크스테이션의 취약점을 보완하기 위하여 따르셔야할 단계들을 보다 자세하게 설명하고 있습니다.


....



5장. 서버 보안

시스템이 공중 네트워크에서 서버로 사용될 경우 공격의 대상이 되기 쉽습니다. 이러한 이유로 시스템 보안을 보강하고 서비스를 잠그는 것은 시스템 관리자에게 무엇보다 중요합니다.

특정 사항에 대하여 깊이 파고들기 이전에 서버 보안을 강화시킬 수 있는 일반적인 힌트를 다음에서 간략히 살펴보도록 하겠습니다:

  • 최신 침입 유형에 대비하여 모든 서비스를 항상 업데이트 시키십시오.

  • 가능한 보안 프로토콜을 사용하십시오.

  • 가능한 한 기계당 한가지 유형의 네트워크 서비스를 사용하십시오.

  • 모든 서버에서 수상한 행동이 발견되는지 주의깊게 감시하십시오.

5.1. TCP 래퍼와 xinetd를 사용하여 서비스 보안 강화하기

TCP 래퍼(wrappers)는 다양한 서비스에 접근 제어를 제공합니다. SSH, Telnet, FTP와 같은 대부분의 최신 네트워크 서비스는 들어오는 요청과 요청된 서비스 사이에서 감시 역할을 하는 TCP 래퍼를 사용합니다.

추가 액세스, 기록, 바인딩, 방향 전환 및 자원 활용 제어와 같은 기능을 제공하는 수퍼 서비스인 xinetd를 함께 사용하면 TCP 래퍼가 제공하는 보안 기능이 보다 강화됩니다.

힌트힌트

TCP 래퍼와 xinetd와 함께 IPTables 방화벽 규칙을 사용하여 서비스 접근 제어에 중복성을 갖는 것이 좋습니다. IPTables 명령을 사용하여 방화벽을 구현하는 방법에 대한 자세한 정보는 7 장을 참조하시기 바랍니다.

TCP 래퍼와 xinetd를 설정하는 방법에 대한 추가 정보는 Red Hat Enterprise Linux 참조 가이드TCP 래퍼와 xinetd 장에서 찾으실 수 있습니다.

다음 부분에서는 여러분이 각 주제에 대한 기본적인 지식을 갖추고 계신다고 간주하고 특정 보안 옵션에 중점을 두고 설명해 보겠습니다.

5.1.1. TCP 래퍼를 사용하여 보안 강화하기

TCP 래퍼는 서비스로의 액세스를 거부하는 것 이외에도 다른 많은 기능을 제공합니다. 이 부분에서는 TCP 래퍼를 사용하여연결 배너를 보내고, 특정 호스트에서 침입자에게 경고 메시지를 보내며, 기록 기능을 강화하는 방법에 대하여 설명하고 있습니다.TCP 래퍼의 기능과 제어 언어에 대한 전체적인 목록을 보시려면 hosts_options 메뉴얼 페이지를 참조하시기 바랍니다.

5.1.1.1. TCP 래퍼와 연결 배너

서비스에 접속하는 클라이언트에 경고성 배너를 보내는 것이 서버가 어떠한 시스템을 운영 중인지 보여주지 않으면서 동시에침입자에게 시스템 관리자가 감시 중이라고 알려줄 수 있는 좋은 방법입니다. 서비스에 TCP 래퍼 배너를 구현하시려면 banner 옵션을 사용하십시오.

이 예시는 vsftpd에 배너를 사용합니다. 먼저 배너 파일을 생성하셔야 합니다. 시스템 상 어디에서든 생성하실 수 있지만 이 파일을 사용될 데몬과 동일한 이름을 가져야 합니다. 이 예시에서 파일 이름은 /etc/banners/vsftpd 입니다.

파일의 내용은 다음과 같습니다:

220-Hello, %c 220-All activity on ftp.example.com is logged. 220-Act up and you will be banned.

%c 토큰은 사용자명, 호스트명 또는 연결 메시지에 보다 효과가 있도록 사용자명과 IP 주소와 같은 다양한 클라이언트 정보를 제공합니다. Red Hat Enterprise Linux 참조 가이드에서는 TCP 래퍼에 사용 가능한 다른 토큰 목록을 찾으실 수 있습니다.

이 배너가 들어오는 접속에 보여지도록 하시려면 /etc/hosts.allow 파일에서 다음 줄을 추가하시면 됩니다:

vsftpd : ALL : banners /etc/banners/

5.1.1.2. TCP 래퍼와 침입 경고

만일 특정 호스트나 네트워크가 서버를 침입하는 것이 발견되었다면 TCP 래퍼에 spawn 지시자를 사용하여 침입이 시도된 호스트나 네트워크의 관리자에게 경고 메시지를 보낼 수 있습니다.

예를 들어 206.182.68.0/24 네트워크에서 크래커가 서버에 침입 시도하려는 것이 발견되었다고 가정해봅니다. /etc/hosts.deny 파일에 다음과 같은 줄을 추가하시면, 연결 시도가 거부되며 특별 파일에 기록될 것입니다:

ALL : 206.182.68.0 : spawn /bin/ 'date' %c %d >> /var/log/intruder_alert

%d 토큰은 침입자가 접근하려고 시도한 서비스의 이름을 보여줍니다.

연결을 허용 후 기록하기 위해서는 /etc/hosts.allow 파일에 spawn 지시자를 추가하시기 바랍니다.

알림알림

spawn 지시자는 모든 쉘 명령을 실행하므로, 특정 클라이언트가 서버에 접속을 시도할 경우 관리자에게 알리거나 여러 명령을 수행할 특수 스크립트를 작성하십시오.

5.1.1.3. TCP 래퍼와 향상된 기록 기능

만일 특정 유형의 접속이 다른 유형 보다 중요하다면 severity 옵션을 사용하여 해당 서비스에 대한 여러 다른 기록 수준을 설정하실 수 있습니다.

이 예시에서는 FTP 서버 포트 23 (Telnet 포트)로 접속을 시도하는 사용자를 크래커라고 가정합니다. 크래커가 침입하는 것을 방지하기 위하여 로그 파일에서 기본 플래그(flag)인 info 대신 emerg 플래그를 지정하시고 이 포트로 들어오는 연결을 거부합니다.

연결을 거부하기 위해서는 /etc/hosts.deny 파일에 다음 줄을 추가하시면 됩니다:

in.telnetd : ALL : severity emerg

이러한 설정은 기본 authpriv 기록 기능을 사용하지만 기록 심각성 수준을 기본 값인 info에서 emerg 수준으로 높여서 로그 메시지를 콘솔에 바로 보여줍니다.

5.1.2. xinetd를 사용하여 보안 강화하기

xinetd 수퍼 서버는 종속 서비스로의 접근을 제어하는데 유용하게 사용되는 또 다른 도구입니다. 이 부분에서는 xinetd를 사용하여 트랩(trap) 서비스를 설정하는 방법과 서비스 거부 공격을 좌절시키기 위하여 xinetd 서비스가 사용할 수 있는 자원의 양을 제어하는 방법에 대하여 중점적으로 설명해 보겠습니다. 모든 사용 가능한 옵션의 목록을 보시려면 xinetdxinetd.conf의 메뉴얼 페이지를 참조하시기 바랍니다.

5.1.2.1. 트랩(Trap) 설정하기

xinetd의 중요한 기능 중 하나는 전역 no_access 목록에 호스트를 추가할 수 있는 기능입니다. 이 목록에 포함된 호스트는 xinetd가 관리하는 서비스에 정해진 기간 동안 또는 xinetd가 재시작될 때까지 연결을 거부당합니다. 이 기능은 SENSOR 속성을 통해 실행 가능하며, 서버에서 포트를 스캔하려고 시도하는 호스트를 손쉽게 막을 수 있는 방법입니다.

SENSOR를 설정하기 위한 첫번째 단계는 사용할 계획이 없는 서비스를 선택하는 것입니다. 이 예에서는 Telnet이 사용됩니다.

/etc/xinetd.d/telnet 파일에서 flags 줄을 다음과 같이 수정하시기 바랍니다:

flags = SENSOR

괄호 내에 다음 줄을 추가하십시오:

deny_time = 30

이 설정은 포트로 연결을 시도하는 호스트를 30 분 동안 거부할 것입니다. deny_time 속성에 사용 가능한 다른 값에는 FOREVER와 NEVER가 있습니다. FORVER는 xinetd가 재시작될 때까지 연결을 거부하며, NEVER는 연결을 허용한 후 기록합니다.

마지막 줄을 다음과 같이 수정하십시오:

disable = no

SENSOR를 사용하여 보안을 위협하는 호스트로부터 연결을 검색하여 정지시키는 것이 좋은 방법이기는 하지만, 다음과 같은 두가지 결점이 있습니다:

  • 스텔스 스캔 (쉽게 발견되지 않도록 한 스캔)을 찾아내지 못합니다.

  • 만일 침입자가 SENSOR가 실행 중인 사실을 이미 알고 있다면 자신의 IP 주소를 위장하여 특정 호스트에 서비스 거부 공격을 마운트한 후 금지된 포트에 연결할 수 있습니다.

5.1.2.2. 서버 자원을 제어하기

xinetd의 또 다른 중요한 기능은 서비스가 활용 가능한 자원의 양을 제어할 수 있는 기능입니다.

다음 지시자를 통하여 이 기능을 사용 가능합니다:

  • cps = <number_of_connections> <wait_period> — 1초당 서비스에 허용되는 연결 수를 지정합니다. 이 지시자는 반드시 정수값으로 설정하셔야 합니다.

  • instances = <number_of_connections> — 한 서비스에 허용되는 총 연결 수를 지정합니다.이 지시자는 정수값이나 UNLIMITED 값을 수용합니다.

  • per_source = <number_of_connections> — 각 호스트마다 서비스에 연결할 수 있는 수를 지정합니다. 이 지시자는 정수값이나 UNLIMITED으로 지정하셔야 합니다.

  • rlimit_as = <number[K|M]> — 서비스가 차지할 수 있는 메모리 주소 공간의 용량을 킬로바이트 또는 메가바이트 단위로 지정합니다. 이 지시자는 정수값이나 UNLIMITED로 설정하셔야 합니다.

  • rlimit_cpu = <number_of_seconds> — 서비스가 CPU를 사용할 수 있는 시간을 초 단위로 지정합니다. 이 지시자는 정수값이나 UNLIMITED으로 설정하셔야 합니다.

이러한 지시자를 사용하시면, 서비스 거부 공격을 통해 xinetd 서비스가 시스템을 마비시키는 상황을 방지하는데 도움이 됩니다.


5.2. Portmap 보안 강화

portmap 서비스는 NIS와NFS와 같은 RPC 서비스에 사용되는 동적 포트 할당 데몬입니다. 이 데몬은 허술한 인증 메커니즘을 갖추고 있으며 데몬이제어하는 서비스에 광범위한 포트를 할당 가능합니다. 따라서 보안 관리가 쉽지 않습니다.

알림알림

portmap을 보안 강화하게 되면 NFSv2와 NFSv3만 영향을 받습니다. NFSv4는 더 이상 portmap을 사용하지 않으므로 영향을 받지 않습니다. NFSv2 이나 NFSv3 서버를 구현할 계획이라면, portmap이 사용되므로 다음 부분에서 설명된 내용을 따르십시오.

RPC 서비스를 실행하신다면 다음과 같은 기본 규칙을 따르십시오.

5.2.1. TCP 래퍼를 사용하여 portmap 보호하기

portmap 서비스에는 내장된 인증 방식이 없으므로 TCP 래퍼를 사용하여 이 서비스를 사용할 수 있는 네트워크나 호스트를 제한하는 것이 중요합니다.

또한 서비스로 접근을 제한하실 때는 IP 주소만 사용하셔야 합니다. 호스트명은 DNS poisoning이나 다른 방법으로 위조가 가능하므로 사용하지 마십시오.

5.2.2. IPTables를 사용하여 portmap 보호하기

portmap 서비스로 접근을 더 제한하시려면 서버에 IPTables 규칙을 추가하여 특정 네트워크로 접근하는 것을 제한하시는 것이 좋습니다.

다음은 (포트 111을 청취하는) portmap 서비스로 192.168.0/24 네트워크와 로컬호스트에서 TCP 연결을 허용하는 두가지 IPTables 명령 예시입니다. (Nautilussgi_fam 서비스를 사용하는데 필요한 설정입니다). 모든 다른 패킷은 버립니다(drop).

iptables -A INPUT -p tcp -s! 192.168.0.0/24 --dport 111 -j DROP iptables -A INPUT -p tcp -s 127.0.0.1 --dport 111 -j ACCEPT

이와 유사한 방식으로 UDP 트래픽을 제한하기 위해서는 다음 명령을 사용하십시오.

iptables -A INPUT -p udp -s! 192.168.0.0/24 --dport 111 -j DROP
힌트힌트

IPTables 명령과 함께 방화벽 규칙을 구현하는 방법에 대한 보다 자세한 정보를 원하신다면 7 장을 참조하시기 바랍니다.

, .
출처 : http://hanaduri.egloos.com/1150985


네트워크 scanning tool의 대명사 nmap입니다.
리눅스 및 unix계열 윈도우용 다양한 platform을 지원합니다.
다운로드 받는 곳
아래는 간단한 사용법입니다. (펌입니다. 좀 더 좋은 사용법을 따로 만들어야 할 tool인데..흠..)

Nmap을 이용한 네트워크 스캐닝과 방어하기
(Scanning and Defending Networks with Nmap)


원문 http://www.linuxsecurity.com/feature_stories/feature_story-4.html

    최근 들어 인터넷 침입사고에 관한 이야기들이 언론에 많이 소개되고 있다. 하지만 기사를 보면 간단한 컴퓨터 조작만으로 신기하게시스템 접근권한을 얻어내는, 영리한 도둑의 이야기 정도로 과장하고 있다. 그러나 실제로 간단한 방법은 거의 없다. 한 컴퓨터시스템을 크래킹하기 위해서는 우선 계획이 필요하다. 크래커는 목표로 하는 서버를 찾아야 하고, 그 다음에 머신에 어떤 port가열려있는지, 시스템이 문제를 해결하기 전에 찾아야 한다.
    이것은 일반적으로 스캐닝이라고 하는 것으로, 스캐닝을 통하여 네트워크상에 있는 머신을 찾고, 무슨 port가 열려있는가를 보기위해 그 머신들을 테스트하는 작업(art)을 하게 된다. 크래커가 공격을 시작하기 전 첫번째 전략은 바로 네트워크와 호스트들을스캐닝하는 것이다. Nmap과 같은 툴을 이용한 스캐너들 즉, “나쁜 놈들(bad guys)”은 네트워크를 둘러보고 취약한목표를 찾는다. 한번 이런 목표들이 확인되면, 침입자는 열린 port를 스캔 할 수 있다. Nmap은 또한 TCP stackfingerprinting을 이용하여 정확하게 스캔당한 머신의 타입을 결정할 수 있다.
    이문서는 각각의 네트워크에 대한 크래커의 시야를 파악하고, 보안 관리자가 자신의 싸이트를 조사할 수 있도록 , Nmap의 사용법에대해 다루고 있다. 침입자 또한 같은 툴을 이용하고 있으므로, 관리자는 그들처럼 자신의 싸이트가 어떻게 보이는지 알 수 있을것이다. 하나하나 설명해 나가면서 여러분의 시스템보안에 이 문서가 도움이 될 수 있길 바란다.
    Nmap은 GNU General Public License(GPL) 에 속하며, http://www.insecure.org/nmap에서 무료로 다운로드 받을 수 있다. tar로 묶인 소스화일, 혹은 rpm으로 된 것도 있다. 필자가 이 문서를 쓰는 시점에서안정버젼은 2.12 이다. 약간의 그래픽이 첨가된 프로그램도 있지만, 이 문서에서는 command-line에서의 Nmap사용법에 대해서만 중점을 두겠다.
    Nmap의 사용법은 꽤 단순하다. command-line에서의 Nmap의 옵션(flag)은 -s 를 붙이는데 스캔의 타입에 따라다르다. 예를 들어 ping scan에서는 “-sP” 이다. 옵션 다음에는 목표 호스트 또는 네트워크를 명시해 준다. Nmap의성능은 루트로 실행했을 때 가장 최고가 된다. 왜냐하면 일반유저는 Nmap이 활용하는 custom packet을 만들 수 있는능력이 없기 때문이다.
    Nmap은 타겟을 설정함에 있어 매우 유연한 동작을 보인다. 네트워크 주소 값을 지정할 때 /mask를 덧붙여서 써주면 간단하게는하나의 호스트, 혹은 전체 네트워크를 스캔 할 수 있다. 만약 “victim/24” 라고 목표를 지정한다면 네트워크 Cclass를 검색하고, 또한 “victim/16”이라고 한다면 B class를 검색하게 된다.
    덧붙여서 Nmap은 wild cards(*)를 이용하여 네트워크 검색이 가능하다. 예를 들어 192.168.7.* 는192.168.7.0/24 이라고 했을 때와 같은 결과 값을 얻을 수 있게 된다. 혹은 192.168.7.1,4,8-12 와같이 subnet에 있는 호스트를 선택적으로 스캔하는 것도 가능하다.
** Ping Sweeping **
    침입자들은 Nmap을 가지고 전체네트워크의 타겟 들을 훑어볼 수 가 있다. 이는 보통 “-sP” 라고 써줌으로써 pingscan을 하는 것이다. 일반적으로 Nmap은 ICMP echo와 TCP ACK를 각 호스트에 보내어 검색을 한다. 그러면Nmap이 보낸 패킷에 반응을 한 호스트들이 나타나게 된다.
    # nmap -sP 192.168.7.0/24
    Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
    Host (192.168.7.11) appears to be up.
    Host (192.168.7.12) appears to be up.
    Host (192.168.7.76) appears to be up.
    Nmap run completed -- 256 IP addresses (3 hosts up) scanned in 1 second
    아마도 때때로 여러분은 단지 ICMP echo request를 보낼 필요없이 시스템이 동작하는지 만을 파악하길 원할 것이다. 이런 경우 목표 네트워크를 스캔하기 위해서 TCP “ping” 을 사용한다.
    TCP“ping”은 목표 네트워크의 각각의 머신에게 ACK 를 보낸다. 각 머신들은 TCP RST를 이용하여 응답하게 된다. TCP“ping”을 이용한 스캔을 위해서는 “-PT”라는 옵션을 첨가해주면 된다. 이번의 예제에서는 80번 tcpport(http)를 target port 로 이용해 보도록 하겠다. 이것은 목표의 라우터들 심지어 firewall 조차도 아마통과할 수 있을 것이다. 주의할 것은 머신이 살아있는지 죽어있는지를 결정하는데 호스트의 target port가 열려있을 필요가없다는 것이다. 다음에 보이는 것이 실행의 예이다.
    # nmap -sP -PT80 192.168.7.0/24
    TCP probe port is 80
    Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
    Host (192.168.7.11) appears to be up.
    Host (192.168.7.12) appears to be up.
    Host (192.168.7.76) appears to be up.
    Nmap run completed -- 256 IP addresses (3 hosts up) scanned in 1 second
    침입자들은 목표 네트워크의 머신이 살아있는지 알 때, 으레 다음 단계로 port scanning을 한다.
    port scanning의 여러가지 타입들이 Nmap을 통해 제공된다.( Tcp connect, Tcp SYN, Stealth FIN, Xmas Tree, Null, UDP scan등 )
** Port Scanning **
    Nmap은 connect() system call을 이용해 목표 호스트의 지정한 port에 접속을 하고, TCP 의 3-wayhandshake를 완결 짓기 때문에 TCP 접속을 이용한 침입자는 쉽게 탐지된다. 호스트 머신의 Log기록들에 침입자에 의해열려진 port들이 나타날 것이다. TCP connect scan은 “-sT” flag를 이용하여 사용한다.
    # nmap -sT 192.168.7.12
    Starting nmap V. 2.12 by Fyodor
    (fyodor@dhp.com, www.insecure.org/nmap/)
    Interesting ports on (192.168.7.12):
    Port State Protocol Service
    7 open tcp echo
    9 open tcp discard
    13 open tcp daytime
    19 open tcp chargen
    21 open tcp ftp
    ...
    Nmap run completed -- 1 IP address (1 host up) scanned in 3 seconds
** Stealth Scanning **
    만약 공격자가 목표 머신의 시스템 로그 기록에 그가 요청한 것들을 남기지 않고 스캔하길 원한다면 무엇을 해야 할까? TCP SYNscans는 목표 머신에 log기록을 거의 남기지 않는다. SYN scan은 TCP 연결경로의 첫번째 패킷으로 SYNpacket 을 보냄으로써 시작한다. 열린 port들은 SYN|ACK 로 응답을 할 것이다. 그러나 이때 공격자가 ACK대신RST를 전송하면 연결은 종료되게 된다. 장점은 3-way handshake가 절대 완성되지 않는다는 것과 이런 타입의 로그기록을 남기는 싸이트는 거의 없다는 것이다. 한편 닫혀있는 port들은 RST와 함께 처음의 SYN에 응답할 것이고 Nmap은그 호스트의 port가 닫혀 있다는 것을 결정할 수 있게 된다. SYN scan은 “-sS” flag를 이용하여 실행한다.
    # nmap -sS 192.168.7.7
    Starting nmap V. 2.12 by Fyodor
    (fyodor@dhp.com, www.insecure.org/nmap/)
    Interesting ports on saturnlink.nac.net
    (192.168.7.7):
    Port State Protocol Service
    21 open tcp ftp
    25 open tcp smtp
    53 open tcp domain
    80 open tcp http
    ...
    Nmap run completed -- 1 IP address (1 host up) scanned in 1 second
    비록 SYN scan이 더 알아챌 수 없을지라도, 몇 가지 침임 탐지 대책들을 이용하여 탐지해 낼 수 있다. StealthFIN, Xmas Tree, 그리고 Null scan들은 packet filter나 firewall들을 피하는데 사용되어진다.이런 3가지 스캔들은 닫힌 port들을 위해 RST를 리턴하고, 열린 포트들은 packet를 버린다. FIN “-sF” 스캔은FIN packet을 각각의 port로 보낼 것이고, 한편 Xmas Tree scan “-sX”는 FIN, URG, PUSHflag를 모두 켠다. 그리고 Null scan “-sN”은 모든 flag를 끈다.
    TCP 표준들에 Miscrosoft는 순종하고 있지 않기 때문에 FIN, Xmas Tree, 그리고 Null scan은 오직 Miscrosoft 운영체제가 아닌 경우에서만 영향을 발휘한다.
** UDP Scanning **
    만약 침입자가 exploit(역자 주: 크래커들이 시스템을 침입하기 위해 사용하는 특정한 프로그램들을 지칭함 )를 위해 특정rpcbind hole이나 cDc Back Orifice 같은 UDP hole을 찾는다면, 그/그녀는 어떤 UDP port가열려있는지 알기를 원할 것이다.
    침입자는 UDP scan “-sU” 를 사용하여 호스트에 어떤 UDP port가 열려있는지알 수 있다. 만약 호스트에서 “port unreachable” 메세지를 리턴하면 그 포트는 닫혀있는 것으로 간주된다. 대부분의UNIX 호스트들은 ICMP 에러의 비율을 제한하고 있기 때문에 이런 방법은 시간을 많이 소비하게 된다. 다행히도 Nmap은이런 비율을 탐지하고 그 자신의 속도를 낮추어 거부했을 때의 메시지로 인해 목표가 오버플로어 되지 않도록 한다. 다음은 UDPscan의 실행결과이다.
    # nmap -sU 192.168.7.7
    WARNING: -sU is now UDP scan -- for TCP FIN scan use -sF
    Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
    Interesting ports on saturnlink.nac.net (192.168.7.7):
    Port State Protocol Service
    53 open udp domain
    111 open udp sunrpc
    123 open udp ntp
    137 open udp netbios-ns
    138 open udp netbios-dgm
    177 open udp xdmcp
    1024 open udp unknown
    Nmap run completed -- 1 IP address (1 host up) scanned in 2 seconds
** OS Fingerprinting
    종종 침입자는 특정한 플랫폼에서만 실행되는 exploit를 실행하기 위해 그와 유사한 운영체제를 찾을 것이다. 일반적으로TCP/IP fingerprinting은 “-O” 옵션을 포함하여 원격으로 운영체제를 탐지해낸다. 이것은 ping scan을제외한 port scan과 결합하여 사용해야만 한다. Nmap은 호스트에 다른 타입의 조사를 행하여 OS를 찾아낸다. 원격으로OS를 탐지해내기 위한 다른 방법과 마찬가지로 ICP initial Sequence Number(ISN)의 패턴을 찾기 위해SYN packet과 함께 선언하지 않은 flag를 리모트 호스트로 보내고, BOGUS flag는 원격 호스트의 그 반응이 어떤종류인가를 입증하기 위해 FIN 조사같은 기능을 사용한다. 그것은 TCP stack에서 포함하고 있고 이를Fingerprinting 하게 된다. 본 문서에서 stack fingerprinting 까지 논의하는 것은 한계가 있으므로관심이 있는 사람은 Nmap의 저자인 Fyodor에 의해 쓰여진 문서를 찾아보기 바란다.(http://www.insecure.org/nmap/nmap-fingerprinting-article.html )
    Nmap의 OS 탐지기능의 특징은 매우 정확하며, SYN scan을 포함하여 솔라리스 2.7 머신의 stack을 fingerprin-ting 해서 증명하는 것과 같은 일에 효과적인 도구이다.
    # nmap -sS -O 192.168.7.12
    Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
    Interesting ports on comet (192.168.7.12):
    Port State Protocol Service
    7 open tcp echo
    9 open tcp discard
    13 open tcp daytime
    19 open tcp chargen
    21 open tcp ftp
    ...
    TCP Sequence Prediction: Class=random positive increments
    Difficulty=17818 (Worthy challenge)
    Remote operating system guess: Solaris 2.6 - 2.7
    Nmap run completed -- 1 IP address (1 host up) scanned in 5 seconds
    TCPSequence Prediction 부분을 주의해서 보기 바란다. -O 옵션을 주어 Nmap을 실행시키게 되면 TCPSequence Prediction이 얼마나 어려운지도 알려준다. 이것은 침입자가 호스트의 공격할 수 있는 위험성에 대한정도로써 얼마나 침입할 가치가 있는가를 포함하고 있기도 하다.
** Ident Scanning **
    침입자는 종종 root로 돌아가는 web server와 같은 프로세스를 공격 대상으로 삼을 때가 있다. 만약 타켓이 identd를돌리고 있다면 침입자는 Nmap을 사용하여 httpd 데몬이 어떤 소유자로 실행되고 있는지 찾아낼 수 있다. 이는 TCPconnect scan에 “-I” 옵션을 포함하여 실행한다. 아래에 한 리눅스 웹서버를 스캔 한 예가 있다.
    # nmap -sT -p 80 -I -O www.yourserver.com
    Starting nmap V. 2.12 by Fyodor (fyodor@dhp.com, www.insecure.org/nmap/)
    Interesting ports on www.yourserver.com (xxx.xxx.xxx.xxx):
    Port State Protocol Service Owner
    80 open tcp http root
    TCP Sequence Prediction: Class=random positive increments
    Difficulty=1140492 (Good luck!)
    Remote operating system guess: Linux 2.1.122 - 2.1.132; 2.2.0-pre1 - 2.2.2
    Nmap run completed -- 1 IP address (1 host up) scanned in 1 second
    만약 당신의 웹서버가 실수로 root로 실행되도록 설정되었다면, 당신에게 회사에서 밤샐 일이 생길지도 모른다.
    루트로 아파치를 실행시키는 것은 나쁜 보안 습관이다. /etc/inetd.conf 에서 auth 부분을 주석 처리해서 ident요청을 막아두어야 한다. 그리고 inetd를 재 실행 시킨다. ident 요청을 막는 다른 방법은 ipchains나 다른firewall을 이용하여 당신의 네트워크에 장벽을 설치하는 것이다. 이것은 어떤 데몬이 누구의 소유로 동작하는지 당신의싸이트를 조사해보려는 호기심 많은 무뢰한들을 막을 수 있을 것이다.
** Options **
    이런 scan들에 덧붙여서 Nmap이 제공하는 무수한 옵션들을 소개하겠다. 그 중 하나가 “-PT” 이다. 우리는 이미 위에서다루었다. 이 옵션은 타겟 머신이나 네트워크의 일반적으로 filter되지않은 port들을 TCP ping으로 직접 pingscan할 때 사용된다. 유용한 옵션으로 “-P0”가 있다. Nmap은 port scan을 하기전에 TCP “ping”과 5ICMP echo 모두를 이용하여 타겟을 ping 할것이다. 만약 싸이트에서 ICMP와 TCP 검색을 막아 놓았을 경우 보통스캔되지 않을 것이다. 그래서 “-P0” 옵션을 이용하면 처음에 ping을 하지 않고 호스트를 스캔 하도록 Nmap에서 지원하고있다.
    한가지, 독자가 한번 사용하면 습관처럼 사용하게 될 옵션이 있다. 바로 “-v” 자세한 옵션이다. 이 옵션은 모든 스캔타입들과함께 사용할 수 있다. 이 옵션을 한번 혹은 두 번 사용해서 타켓 머신에 관한 보다 더 자세한 정보를 얻을 수 있다.
    특정한 port를 타겟으로 삼는 기능은 “-p” 옵션을 이용하여 실행된다. 예를 들어 침입자가 당신의 웹서버를 ftp(port21), telnet(port 23), name service(port 53),그리고 http(port 80) 에 관해조사하고, 어떤 OS를 쓰는지 까지 알길 원한다면 다음과 같은 SYN scan을 이용할 것이다.
    # nmap -sS -p 21,23,53,80 -O -v www.yourserver.com
    인기있는 exploit들이 모아져 있는 데이타베이스들에 의해, 풋내기 크래커일지라도 당신의 머신에서 루트권한을 얻을 수 있는 방법을 곧 잘 찾아낼 수 있을 것이다.
** 결론 **
    침입자가 Nmap을 사용하여 어떤 측정을 했겠는가? Scanlogd, Courtney, 그리고 Shadow와 같은 수많은 툴 들이존재한다. 그러나 이런 툴을 사용하는 것이 실무에서 일하는 관리자들의 지식을 대신할 순 없다. 스캔은 종종 침입의 전조로나타나기 때문에 싸이트들은 그들의 머신에 대해 감시와 제어를 우선시해야 한다.
    Nmap을 이용해 각자의 싸이트를 감시함으로써, 시스템과 네트워크 관리자들은 잠재적인 침입자들이 당신의 싸이트를 조사하는 것들을 발견할수 있다. 자..이제 당신의 라우터들 구석에 Nmap과 함께 리눅스박스를 설치하고, 펭귄 군단의 하나로써 스캐닝을 시작하자!
    이국현님은 숭실대 컴퓨터학부에 재학 중이며 숭실대 파워리눅스 유저모임 (SPLUG) 에서 활동하고 있습니다 .

, .