RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
소개
-----
이것은 긴 인스톨 매뉴얼이다. 만일 여러분이 뒤에 이어질 모든 것과 프로그램 로직안에 깃든 나의 광기어린 방법을 이해하길 원한다면, 여러분은 이 매뉴얼 파일을 읽어야만 한다. 만일 여러분이 이런 것에 대해 관심이 없다면 아래의 내용들을 뛰어넘어라.

PortSentry는 Abacus 프로젝트 도구프로그램중의 하나이다. Abacus 프로젝트는 인터넷 공동체에 유지비용이 적게 들며, 포괄적이고 믿을 만한 호스트 기반 침입탐지소프트웨어를 배포한 선구자이다. 더 많은 정보는 www.psionic.com에서 얻을 수 있다.

PortSentry는 포트스캔을 탐지하기 위한 많은 옵션들을 가지고 있다. 포트스캔이 발견되면, PortSentry는 다음과 같은 방식들로 반응한다.
- 사건을 나타내는 log 는 syslog()를 통해 만들어진다.
- 타겟 호스트(포트 스캔 공격을 한 컴퓨터)는 TCP Wrappers를 위해서 자동적으로 /etc/hosts.deny에 기록된다.
- 로컬 호스트에서는 타겟 시스템을 데드 호스트(인터넷상에 없는 컴퓨터)로 간주하여, 타겟 호스트를 경유하는 모든 경로가 자동적으로 재구성된다.
- 로컬 호스트는 로컬패킷필터를 통하여, 타겟 호스트로부터 오는 모든 패킷을 무시하기 위하여 자동적으로 재구성된다.

이러한 의도는 관리자에게 그들의 호스트가 스캔되고 있다는 것을 확신시켜주기 위함이다. 이미 이러한 동작을 하는 유사한 프로그램들이 있다.( klaxon 등등) 나는 단지 전체적인 아이디어에 작은 변화(auto blocking 과 같은)를 더했을 뿐이다. 더하여, 스텔스 스캔 탐지(stealth scan detection)를 위한 포괄적인 지원까지...

PortSentry는 4개의 스텔스 스캔 탐지모드를 가지고 있다. 첫번째 방법은 감시를 위해 미리 정의된 포트목록을 사용하는 것이다. 누군가가 포트에 접근하면 활성화되는 것이다.
두 번째 방법은 내가 소위 "inverse port binding"이라고 부르는 것이다. PortSentry가 시작될 때 시스템이 네트워크 데몬을 위해 할당한 포트나 또는 여러분이 임의로 제외시킨 포트를 제외하고 일련의 범위내에 있는 모든 포트들은 감시를 받게 된다. 이는 포트 스캔을 찾기 위한 매우 민감한 방법이지만 동시에 잘못된 경고들을 너무 자주 일으킬 수도 있다.

잠시동안 내 마음속에 놓아두었던 이 프로그램은 절호의 찬스로 진정으로 만들어졌다. 나의 본래 생각은 단지 스캔 공격중인 타겟 호스트를 TCP wrapper가 사용하는 hosts.deny 파일에 가져다 놓는 것이었다. 하지만 TCP wrapper와 함께 작동을 하지 않는 많은 데몬이 있다는 것과 많은 시스템이 TCP wrapper를 내장하지 않고 설치된다는 것에 문제가 있었다.

나는 Kai의 스팸쉴드(스팸메일 방어소프트웨어)를 인스톨하면서 휴식을 취하고 있었다.
http://spamshield.conti.nu/

스팸쉴드는 시스템 로그를 통해 스팸을 탐지해주고 타겟의 경로를 locally하게 차단해서 모든 패킷이 절대 스패머(스팸메일 보낸사람)에게 되돌아가지 않게 한다. 나는 이 아이디어가 마음에 들었고 이와 같은 생각을 포트스캔 탐지에 적용하기로 결정했다.

설치
--------------------------------------------------------------------------
첫 단계
여러분의 에디터로 portsentry_config.h 파일을 가져와서 다음사항이 여러분이 원하는 바와 맞는지 확인해라.

CONFIG_FILE - PortSentry 구성파일의 경로
WRAPPER_HOSTS_DENY - TCP wrapper의 hosts.deny 파일의 경로와 이름
SYSLOG_FACILITY - PortSentry가 사용할 syslog 프로그램
SYSLOG_LEVEL - 메시지를 보내기 위한 syslog level

나는 여러분이 무엇을 하고 있는지 알지 못한다면 이러한 옵션들을 절대 바꾸지 말 것을 제안한다.

※ 참고 : 고급사용자들은 SYSLOG_FACILITY를 LOG_DAEMON에서 LOG_LOCAL0로 바꾸고 싶어할 수도 있을 것이다.(아니면, 또 다른 LOCAL log 감시프로그램) 여러분은 syslog.conf 파일을 편집할 수도 있고, 분리된 모니터링을 위해 PortSentry 메시지를 직접 시스템에 있는 PortSentry 자신만의 파일에 가져다 놓을 수도 있다.

두 번째 단계

이어서, portsentry.conf를 여러분의 에디터로 가져와서 다음의 옵션을 체크하고 바꿔라.

TCP_PORTS - 콤마(,)로 분리된 PortSentry가 감시하기를 원하는 TCP포트의 문자열. 이 스트링은 그 안에 어떠한 공백문자도 가져서는 안된다. 여러분은 여러분이 원하는 만큼의 소켓을 집어넣을 수 있다. PortSentry는 기본제한(default limit)인 64까지 그것들을 묶으려 시도할 것이다.

스텔스 스캔 탐지모드에서는 포트들이 스스로 묶여지지 않고, 연결을 위한 socket레벨에서 감시된다.
고급 스텔스 스캔 탐지모드에서 이 목록은 무시되어진다.(좀더 아래를 보아라.)

UDP_PORTS - UDP ports라는 것을 제외하고는 TCP_PORTS와 같다. 여러분은 UDP모드를 아주 신중하게 다루어야 한다. 왜냐하면, 공격자가 포트스캔을 위조하여 여러분으로 하여금 무한한 호스트들을 block시켜 버리도록 할 수 있기 때문이다. 이 옵션은 아주 주의를 요하며 만약 여러분의 호스트가 인터넷에 연결된 유명한 시스템이라면 결코 사용해선 안된다.

고급 스텔스 스캔 탐지모드에서 이 목록은 무시되어진다.(좀더 아래를 보아라.)

ADVANCED_PORTS_TCP - 가장 높은 포트번호를 지칭하는 숫자, 이 포트번호이하의 모든 포트가 감시된다. 디폴트는 1024이지만(일반적인 지정 포트번호 대역), 시스템 최대값인 65535까지 지정할 수도 있다. 나는 이 값이 1024를 넘지 않을 것을 권장한다.

ADVANCED_PORTS_UDP - UDP라는 것을 제외하곤 ADVANCED_PORTS_TCP와 같다.

ADVANCED_EXCLUDE_TCP - 콤마(,)로 분리된 TCP포트의 문자열로서 advanced 모드상에서 반드시 감시대상포트로부터 제외되어야 할 포트들이다. 여기의 포트들은 일반적으로 원격 client들이 실수로 접근하게 되어도, 경고를 발생시키지 말아야 할 것들이다.(ident, SSL 등)

ADVANCED_EXCLUDE_UDP - UDP라는 것을 제외하곤 ADVANCED_EXCLUDE_TCP와 같다.

IGNORE_FILE - 여러분이 항상 무시하길 바라는 호스트의 IP 주소들의 목록이 기록된 파일의 경로. 이것은 나중에 설명될 것이다.

BLOCKED_FILE - 접속금지(blocked)된 호스트의 IP 주소들의 목록이 기록된 파일의 경로

BLOCK_UDP -이 옵션은 UDP탐지에 있어 모든 자동적인 반응을 불가능하게 한다.
왜냐면 UDP는 쉽게 위조될 수 있기 때문에, 정상적으로 존재하여야 할 모든 호스트들을 접근금지시킴으로써, 공격자가 보호받는 호스트에 대해 DOS공격(서비스거부공격)을 할 수 있다. 이 옵션을 0으로 하면 연결이 아직 log된 상태로 유지되어 있을지라도, 모든 응답을 불가능하게 될 것이다. 이 옵션은 주로 인터넷에 노출되어있는 호스트에 유용하다. 내부 호스트에 대해서 나는 이 옵션을 사용가능하게 남겨 놓을 것이다. 그러나, 만약 누군가 내부적으로 여러분에게 스푸핑된(spoofed) 패킷을 보낸다면 여러분은 서비스거부보다 더 큰 문제점에 직면하게 될 것이다.

BLOCK_TCP - TCP라는 것을 제외하곤 BLOCK_UDP와 같다. 패킷 위조는 그리 큰 문제가 아니다. 왜냐면 PortSentry가 완전한 접속이 이루어지를 기다리고 있고, 이것은 베이직모드에 있어 패킷위조를 하는 것보다 더 힘들기 때문이다. 나는 이것을 인터넷에 연결된 호스트에 대해서도 사용가능하도록 남겨둘 것이다. 스텔스 스캔 탐지모드에 있어서 UDP 경고는 다음과 같다.
공격자는 패킷 위조를 통하여, 여러분이 막지 않길 원하는 호스트에 대해서 접근금지(block)시킬 수 있다. 나는 이것이 문제가 될 때까진 걱정하지 않지만 여러분은 이것에 대해 인식하고 있어야 한다.

KILL_ROUTE - 여기에는 공격이 탐지되었을 때, 공격자가 타고온 경로를 없애기(drop) 위해 실행될 명령을 정의할 수 있다. 정상적인 실행을 위해서는, 절대경로 전체와 필요한 옵션을 다 붙인 route 명령이 필요하다. $TARGET$ 문자열은 공격하고 있는 호스트 IP주소로 대체될 것이며, 반드시 이 옵션안에서 존재해야 한다. 자신의 gateway는 subnet상에서 죽어있는 호스트가 될 것이다. 어떤 시스템에서는 로컬호스트 주소인 (127.0.0..1)을 넣더라도 아마 작동을 할 것이다. 공격중인 호스트로부터의 모든 패킷은 이 주소로 보내질 것이며, 호스트를 엉망으로 만들지 않을 것이다.
좀 더 현대적인(발전된) route 명령어는 "-blackhole" or "-reject" 옵션을 포함할 것이다.
여러분의 man 페이지를 체크해 보라. 만약 route 명령어가 이런 기능을 지원한다면 이것을 사용할 수 있다.(비록 그럴지라도 나는 그 대신에 패킷필터링을 사용할 것을 권장한다. 아래를 참조하라.)
또한 "asynchronous route"라고 알려진, 기본적으로는 하나의 루트를 통해 여러분의 호스트에 들어가고 다른(죽은)루트에 보내져버리는 패킷을 의미하는, 것이 생길 수 있음을 알고 있어야 한다. 이것은 완전한(full) TCP 접속요구에는 잘 동작하지만, UDP나 스텔스 스캔모드에 있어서는 이것은 패킷이 PortSentry를 활성화시키는 것을 여전히 허용하고 여러분은 PortSentry가 보내주는 "already blocked"라는 경고를 계속하여 받게 될 것이다. UDP 스캔에 대해서 이 방법은 ICMP message들이 공격자에게 되돌아가는 것을 막아서 모든 포트가 open 된 상태로 나타나게 된다. 그러나, 만약 공격자가 실제 공격소스 exploit를 실행하고 있다면, 앞의 drop route 방법은 소용이 없다. asynchronous route는 만약 공격자가 대응되는 응답이 어떻게 진행될지 알고 있으면, 패킷이 시스템에 도달하게 되고, 공격자가 UDP를 이용하여 장님상태의 (blind) 공격을 할 수 있도록 허용할 것이다.
이것을 막는 최선의 방법은 Linux ipfwadm/ipchains 나 *BSD ipfw와 같은 로컬 패킷필터를 사용하는 것이다. 이것은 매우 깔끔한 방법이며 config 파일안에 자세하게 설명되어 있다. $PORT$ 문자열은 공격자에 의해 연결된 포트로 대체될 것이지만, 이 옵션이 항시 요구되는 것은 아니다.

KILL_HOSTS_DENY - 이것은 TCP wrappers가 사용하는 hosts.deny 파일에 적기 위한 스트링의 포맷이다. 다시말해 $TARGET$ 문자열은 공격자의 IP로 대체되기 위해 확장되며 반드시 요구된다. 여러분은 (%h, twist 등)뿐만 아니라 어떠한 TCP wrapper의 escape 코드들을 넣을 수 있다. $PORT$ 문자열은 공격자에 의해 연결된 포트로 대체될 것이지만, 이 옵션이 항시 요구되는 것은 아니다.

KILL_RUN_CMD - 이것은 공격자를 향한 route를 제거하기 전에 작동시키기 원하는 명령이다.
공격이 탐지되었을 때, 여러분이 실행하기 원하는 어떠한 program이나 script를 집어넣을 수 있다. 나는 절대 ATTACKING HOST(공격하는 호스트)에 대해서 보복공격 작업을 집어넣지 않길 권고한다. 실제로, 포트스캔을 하고 있는 호스트는 해킹을 당한 임의의 호스트이다. 그러므로, 만약 여러분이 보복을 한다면, 아마도 여러분은 선량한 사람들을 공격하는 것이 될 것이다.
보안의 목적은 쫓아버리는 것이다. 여러분은 그들을 화나게 해서 여러분에게 개인적인 복수를 하게 되기를 원치 않을 것이다. 유념하라. 비록 13살 어린이도 그들의 윈도우 컴퓨터에서 DoS(서비스거부) 공격을 실행하여서, 여러분의 인생을 비참하게 만들 수 있다는 것을...
위에서 보았듯이 $TARGET$ 과 $PORT$ 문자열은 유용하지만 이 옵션에 반드시 요구되는 것은 아니다.

SCAN_TRIGGER - PortSentry는 자신의 호스트에 접속하였던 호스트를 기억하는 state engine를 가지고 있다. 이 값의 설정은 PortSentry가 반응동작하기 전에 PortSentry에게 감시되는 port의 몇 번까지의 접속을 허용하도록 말해줄 것이다. 이것은 순차인 것과 임의적인 포트스캔을 둘 다 탐지한다. 디폴트값은 0이며, 이는 즉각 반응한다. 그 값을 1 또는 2로 해주면 잘못된 경고를 줄일 것이다. 그리고 이보다 높은 값들은 3회이상 다른 포트들에 접근했을 때와 같은 경우, 아주 수상한 행동을 감지하게 될 것이다. 조심성없이 (머리카락 감응기)"hair trigger"를 만들 수 있는 advanced 스텔스 스캔 탐지모드의 경우를 제외하고, 일반적으로 여러분은 아무런 생각없이, 이 값을 0으로 놔둘 수 있다.
여러분의 판단에 따라 값을 정하라.

PORT_BANNER - 만약 PortSentry가 작동하는 동안에 접속하는 host에게 보여주기를 원하는 text banner를 말한다. 만약 여러분이 이를 원치 않으면 이것을 주석 처리된 채로 그냥 두라. 만약 여러분이 이를 사용하길 원하면 사람들을 아주 나쁘게 조롱하려고 시도하지 말라. 나는 이것을 반드시 지킬 것을 권고한다. 배너는 스텔스스캔 탐지모드가 사용될 때는 보이지 않는다.

세 번째 단계
portsentry.ignore 파일을 가져와서 그 안에 감시되고 있는 포트에 접근해도 무시해 버릴 호스트를 추가하라.
이것은 적어도 localhost(127.0.0.1)와 내부 네트워크의 IP주소를 포함해야만 한다.
나는 절대 여러분과 동일네트워크상에 있는 모든 호스트 IP 주소를 집어넣는 것을 권장하지 않는다.
왜냐면 네트워크 수가 많을 수 있기 때문입니다. 아주 신뢰관계에 있는(friendly) 호스트일지라도 여러분에게 있어 누가 여러분에게 연결을 하고 있는지를 보는 것은 아주 중요한 일이다. 이것은 여러분이 내부 호스트의 결탁(외부의 해킹에 의한)을 보다 빨리 탐지하는데 도움을 줄 것이다.

네 번째 단계
컴파일(Compile). make 명령을 내리면, 여러분은 여러분의 시스템타입을 고르고, build하고 인스톨할 수 있게 된다. 원래 default directory는 /usr/local/psionic/portsentry이다. 만약 여러분이 이 디렉토리가 마음에 들지 않는다면 Makefile을 수정하고 새로운 경로에 영향을 주는 여러분의 portsentry.conf 와
portsentry_config.h 파일들을 확인하라.
make install 명령은 여러분이 지정한 인스톨 디렉토리에 복사본 파일들을 만들어 준다.

다섯 번째 단계
PortSentry를 작동시켜라. PortSentry는 작동하는데 있어 여섯 가지 모드가 있다. 오직 하나의 프로토콜 모드만이 실행될 수 있다. (예를 들어, 하나의 TCP mode와 하나의UDP mode).
사용가능한 모드는 다음과 같다.
portsentry -tcp (basic port-bound TCP mode)
portsentry -udp (basic port-bound UDP mode)
portsentry -stcp (Stealth TCP scan detection)
portsentry -atcp (Advanced TCP stealth scan detection)
portsentry -sudp (Stealth UDP scan detection)
portsentry -audp (Advanced Stealth UDP scan
detection)
 
-tcp - Basic port-bound TCP mode (기본 포트 제한 TCP 모드)
PortSentry는 설정파일들을 확인하고 나서, 백그라운드에 있는 모든 TCP포트들을 묶을 것이다. 만약 여러분이 init 상태를 점검하길 원한다면, 단지 여러분은 메시지가 저장되어지는 local syslog 파일을 살펴보면 된다.

-udp - Basic port-bound UDP mode (기본 포트 제한 UDP 모드)
PortSentry는 설정파일들을 확인하고 나서, 백그라운드에 있는 모든 UDP포트들을 묶을 것이다. 만약 여러분이 init 상태를 점검하길 원한다면, 단지 여러분은 메시지가 저장되어지는 local syslog 파일을 살펴보면 된다.
UDP/스텔스 스캔 경고가 적용된다. (README.stealth파일을 읽어보라.)

-stcp - Stealth TCP scan detection mode (스텔스 TCP 스캔 탐지 모드)
PortSentry는 호스트로 들어오는 모든 패킷들을 감시하기 위해서 raw 소켓을 사용할 것이다. 만약 호스트로 들어오는 패킷이 감시되고 있는 포트로 향한다면, PortSentry는 호스트를 방어하기 위해 작동할 것이다. 이 방법은 connect() 스캔과 SYN/half-open 스캔과 FIN 스캔을 탐지할 것이다.
UDP/스텔스 스캔 경고가 적용된다. (README.stealth파일을 읽어보라.)

-sudp - "Stealth" UDP scan detection mode (스텔스 UDP 스캔 탐지 모드)
이것은 위의 TCP stealth mode와 작동방법은 동일하다. UDP 포트들을 나열하면, 그 포트들은 감시된다. 이것은 어떠한 소켓도 묶지 않으며, 실제 스텔스 스캔 탐지 모드가 아닌 중에도 거의 동일하게 동작한다.( 모든 UDP 패킷에 반응한다.)
UDP/스텔스 스캔 경고가 적용된다. (README.stealth파일을 읽어보라.)

-atcp - Advanced TCP stealth scan detection mode (advanced TCP 스텔스 스캔 탐지 모드)
PortSentry는 ADVANCED_PORTS_TCP 옵션에 지정된 최상의 포트번호이하의 모든 열려진 포트에 대한 목록을 만들면서 시작하고, 이러한 포트들을 기초로 제외(exclusion)목록을 만들 것이다. 제외되지 않은( 예를 들어, [SMTP, HTTP, 등의] 열려진[listening] network daemon이 아닌, ) 영역내의 임의의 포트에 연결된 호스트들은 접속이 금지된다. 이것은 여러분이 반드시 알고 있어야 할 몇몇 아주 강력한 함축적 의미들을 가지고 있다.

1) 이 모드는 모든 방어 옵션중에서 가장 효과적이고 민감한 것이다. 여러분은 그들이 감시되고 있는 port를 건드릴 때까지 기다릴 필요가 없기 때문에, PortSentry는 굉장히 빠른 속도로 포트 스캔에 반응한다.

2) 이것은 매우 갑자기 작동하기 때문에 여러분은 정상적인 패킷흐름을 끊을 수도 있다. FTP 사이트는 여러분에게 ident 요청을 할 수도 있다. 만약 여러분이 ident port (113 TCP)를 감시하고 있다면 여러분은 여러분이 접근하고자했던 FTP site와의 접속을 끊어버리게 된다. 결과적으로 여러분은 제외목록에 이런 상황에 생길 수 있는 포트들을 집어 넣어야한다.

** Advanced Logic Mode **
-PortSentry는 포트들을 감시하는 방법이 아주 뛰어나다. FTP와 같은 몇몇 프로토콜에 있어서, 클라이언트는 실제적으로 ephemeral range인 1024번에서 65535번까지의 범위에서 포트들을 연다. 그리고 서버는 역으로 여러분에게 접속한다. 보통은 이런 방식이 포트스캐너가 동작할 수 있게 해준다. 그러나 PortSentry는 호스트로 들어오는 접속을 감시할 것이고, 이러한 임의적인 접속연결(binding)로 향하는 것인지 아닌지를 결정할 것이다. 만약 임의적인 접속연결로 향한다면, 그 한번의 접속이 무시된다. 접속이 끊어지자마자 window는 닫히고 모든 방어체계가 다시 활동한다.
이것은 실제로 초보적인 stateful inspection engine이다.
UDP/스텔스 스캔 경고가 적용된다. (README.stealth파일을 읽어보라.)

-audp - Advanced UDP "stealth" scan detection mode (advanced UDP 스텔스 스캔 탐지 모드)
UDP protocol을 제외하고는 위와 같다. 이것은 아주 고급옵션이고 여러분은 잘못된 경보를 초래할 충분한 가능성이 있다. 이것은 PortSentry가 broadcast와 direct traffic의 구분을 하지 않기 때문이다. 만약 여러분이 local network에 RIP broadcasts를 발생시키는 라우터를 가지고 있다면, 여러분은 그 RIP broadcasts를 막아버릴 가능성이 있다.
이 옵션은 극도로 주의를 기하여 사용하라.
여러분은 이러한 예외(exclusions)들을 ADVANCED_EXCLUDE_UDP 옵션에 넣었음을 확인할 필요가 있다.( 예를 들어, 520 [RIP] )
UDP/스텔스 스캔 경고가 적용된다. (README.stealth파일을 읽어보라.).


인스톨을 확인하라.
local log 파일의 마지막부분에 PortSentry의 초기화 메시지가 있어야 한다. 성공적인 PortSentry의 초기화 메시지는 아래와 같이 나타날 것이다.

Oct 9 09:11:35 nemesis portsentry[1644]: adminalert: portsentry is starting.
Oct 9 09:11:36 nemesis portsentry[1644]: adminalert: Going into listen mode on TCP port: 143
. . .
Oct 9 09:11:37 nemsis portsentry[1644]: admin alert: PortSentry is now active and listening.

************************************************************************
마지막 줄은 PortSentry가 적절하게 초기화되었음을 나타낸다.
만약 여러분이 이런 메시지를 보지 못했다면 무언가가 틀린 것이다.
************************************************************************

여러분은 로그를 통해 PortSentry가 감시하게 한 모든 포트들을 살펴보아야 한다. 만약 포트가 사용중이면 PortSentry는 bind(연결접속)할 수 없다는 경고를 여러분에게 보낼 것이다. 그리고 다른 포트들이 bind 될 때까지 이러한 동작은 계속될 것이다. 만약 어떠한 포트들과도 bind 되지 못한다면 PortSentry는 에러가 발생하고 종료될 것이다.
Advanced stealth scan detection mode에서 PortSentry는 감시하기를 원하지 않는 포트들에 대해 목록을 작성할 것이다. 이것이 inverse binding이다.
이제 다른 컴퓨터에서, booby-trapped port(PortSentry가 감시하고 있는 포트)로 telnet접속을 시도해 보아라.
여러분은 즉시 다음과 같은 것을 로그파일에서 볼 수 있을 것이다.

Oct 9 09:12:44 nemesis portsentry[1644]: attackalert: Connect from host: 123.345.56.78 to TCP port: 143
Oct 9 09:12:46 nemesis portsentry[1644]: attackalert: Host server.haxor.org/123.345.56.78 has been blocked via dropped route.
Oct 9 09:12:46 nemesis portsentry[1644]: attackalert: Host server.haxor.org/123.345.56.78 has been blocked via wrappers.

advanced mode에서 여러분은 경고를 발생시키기 위해 정의한 포트를 제외한 어떠한 포트에도 telnet 접속을 할 수 있다.
만약 여러분이 연결 거부되었거나 다시 telnet으로 접속하기를 시도한다면 여러분은 방금 전의 호스트에 접근할 수 없음을 확인해야 한다. 이러한 동작이 확인된다면, 축하한다! 여러분은 PortSentry를 제대로 작동시킨 것이다.
만약 여러분의 로그체크 데몬이 띄워져 있다면 여러분이 서버에 접속할 때, 위의 접근거부 상황에 대한 경고 메시지 내용이 로그파일에 나타나는 것을 확인할 수 있을 것이다.
만약 여러분이 netstat -rn 명령을 하면 여러분은 이전에 동작하던 의심가는 호스트로의 죽은 경로를 보게 될 것이다.( 내가 이전에 권장했던 것과 같이, 패킷필터를 사용하지 않으면...)
PortSentry 명령들을 리눅스 시작 스크립트파일(startup file)에 쓰고 나서, 여러분이 한 작업으로 돌아와라.
이게 어떻게 도움이 될 것인가 하면??
여기 몇몇 좋은 생각들이 있다.
- Run as a UDP service on port 69 to catch TFTP probes.
(TFTP 침입을 잡기 위해서는 포트 69에 UDP 감지모드를 가동하라.)
- Run as a UDP service on port 161,162 to catch SNMP probes.
(SNMP 침입을 잡기 위해서는 포트 161,162에 UDP 감지모드를 가동하라.)
- Run as a UDP service in the port range 32000-33000 to catch RPC probes.
(RPC 침입을 잡기 위해서는 포트범위 32000-33000 에 UDP 감지모드를 가동하라.)
- Run as a TCP service on port 143 to catch IMAP probes.
(IMAP 침입을 잡기 위해서는 포트 143에 TCP 감지모드를 가동하라.)
- Run as a TCP service on ports 11,15 to catch netstat/systat probes.
(netstat/systat 침입을 잡기 위해서는 포트 11,15에 TCP 감지모드를 가동하라.)
- etc. 등등

실제로 PortSentry는 빠르게 반응해서, 공격자에 의한 호스트 포트스캔은 감시대상 포트에 접근이 있은 후 1초이내에 차단될 것이고, 더욱이 Advanced TCP stealth scan detection mode에서는 더욱 빠르게 반응할 것이다.
UDP 스캔에 대해서는 모든 포트가 열려진 상태로 나타나게 함으로써 여러분을 스캔하는 이들을 매우 짜증스럽게 만들 것이다. TCP 스캔에서 공격자는 어떠한 응답도 얻을 수 없을 것이다.

안전성
=-=-=-
만약 내가 프로그램의 안전에 대한 고려사항 중 잊고 놓친 것이 있다면, 여러분이 그 내용을 BugTraq에 올리기 전에 나에게 알려주기를 원한다.

메시지
=-=-=-=-
가능한 모든 states/errors/successes and unknowns(상태/오류/성공 그리고 알 수 없는 것들)는 syslog 파일에 쓰여진다.
다음의 tag들이 의미하는 바는 :
adminalert: - PortSentry의 상태를 나타내는 메시지.
securityalert: - 보안 관련 사건들이 일어났음을 나타내는 메시지
attackalert: - 스캔을 감지했다는 것과 그에 따른 동작이 실행되었다는 것.

파일들
=-=-=
현 상태로는, 모든 호스트들은 그들이 접속금지(blocked) 되었을 때 portsentry.history 파일뿐만 아니라 portsentry.blocked 파일에 기록된다. blocked file은 PortSentry가 다시 시작될 때마다 지워진다. history file은 간단히 덧붙여지며 일정한 기한까지 접속금지(blocked)된 호스트들의 기록으로 사용할 수 있다.
접속경로를 막아버리는(blocking) 작업방식은 공격하는 호스트에서 들어오는 경로(incoming route)를 막는 것이 아니라 되돌아가는 경로(return route)를 막아 버리는 것이다.
만약 공격자가 여러분의 호스트에 대해 UDP 스캔을 하고 있다면 패킷들은 감시되는 포트로 계속 도달할 것이지만, 그에 대한 응답들은 되돌아 가지 않을 것이다. 만약 blocked file 이 존재하지 않았다면 호스트는 hosts.deny 파일에 수백번, 혹은 수천번씩 쓰여질 것이다. 이것은 좋지 않다.
좋은 방법은 real 패킷필터로 통합하는 것이다. (리눅스 ipfwadm(지원되는 것) 방식의).
때로는 공격했던 호스트들에 대해 죽은 경로를 삭제하고, 호스트를 hosts.deny 파일에 저장하길 원할 수도 있다. 이것은 전적으로 여러분의 결정에 달려있다.
만약 여러분이 공격자가 다시 접근할 때 접근금지(blocking)을 작동시키기를 원한다면, 단지 PortSentry를 재시작하거나 혹은 blocked file에서 개개의 호스트를 제거하면 된다. 이것이 바로 내가 말하고자 한 것이다. 로그파일의 내용을 보는 것뿐만이 아니라 여러분이 다른 문제점들도 알 수 있도록 하기 위해서, 나는 여러분이 Abacus 프로젝트의 Logcheck를 사용하길 강력히 권장한다. 그리고 PortSentry가 여러분에게 무엇을 알리려고 하는지 살펴보길 권장한다.
여러분은 이 프로그램을 http://www.psionic.com/abacus 에서 찾을 수 있다

출처 : Tong - NoFATE님의 LINUX통

이올린에 북마크하기
2007/09/15 00:07 2007/09/15 00:07
http://jiny.kr/trackback/243
전체 (406)
지니소식 (4)
자료실 (4)
정보|뉴스 (5)
SmartPhone (1)
Languages (206)
Server (153)
Database (27)
Design (4)
Gallery (0)
분류하기귀찬.. (2)
«   2012/02   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29      
  1. 창의력과 상상력을 넘어서  2009
    Tomcat 6.0 기본 환경 설정
  2. 닥공  2009
    서블릿 tomcat 6.0 실행시 에러
  1. 2010/07 (1)
  2. 2010/05 (1)
  3. 2010/02 (3)
  4. 2010/01 (3)
  5. 2009/05 (2)
Statistics Graph