snort를 이용한 네트워크 침입 탐지
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 7,999 조회
- 0 추천
- 목록
본문


(Network Intrusion Detection Using Snort)
번역 / 이국현(errai@hitel.net) | |||||
이 문서는 독자들에게 기초적인 침입탐지 시스템을 구축하도록 도와준다. Snort는 Martin Roesch가 개발한 소프트웨어 기반의 리얼타임 침입탐지 시스템으로써, 가능성있는 침입시도에 대해서 관리자에게 알려주는 기능을 가지고 있다. 지금까지의 침입탐지 장치들은 상용으로 돈을 지불해야 하거나, 리얼타임이 아니고, 혹은 설치하기 힘들었다. Snort는 비상용인데다가 소규모의 TCP/IP 네트워크를 모니터링 해주는 솔루션을 제공한다. 또 사용하기 쉽고 , 작은 용량에 많은 기능을 대신할 수 있다.
* 네트워크 침입 탐지 시스템이란 무엇인가? Network Intrusion Detection System(네트워크 침입탐지 시스템 / 이하 NIDS)는 네트워크에 부당한 접속자나, 권한이 없는 데이타가 생겼을 때 그것을 탐지해 낸다. 이것은 Firewall과는 다른데, Firewall은 특정한 규칙(rule)을 적용하여 특별한 서비스나 호스트를 허락하고 거부하는 설정을 한다. 만약 네트워크 트래픽이 허락된 패턴과 일치한다면 그 서비스나 접속을 허락하고, 그것이 어떤 패킷을 포함하고 있는지는 고려하지 않는다. 그러나 NIDS는 모든 트래픽을 캡쳐하고 면밀히 살핀다. 그리고 그것이 허락되었는지 아닌지는 고려하지 않는다. IP나 application level에서 모든 자료를 기반으로 하여 경고를 산출해 낸다. Snort는 소용량 NIDS으로 다른 프로그램에 영향을 미치지 않고, 쉬운 설정에 쉽게 실행되고, 인스톨하는데 오직 몇 분만이 소요된다. Snort는 현재 1100개 이상의 가능성 있는 취약점을 탐지해 내는 기능을 포함하고 있다. 침입탐지 장치는 다른 보안 장치와 함께 동작한다. 침입탐지장치가 다른 좋은 보안 프로그램을 대체할 수 없다는 것을 기억해야 한다. Snort는 다음과 같은 기능을 포함하고 있다. - buffer overflow, stealth port scans, CGI 공격, SMB probe, NetBIOS query, - syslog를 이용해 SMB “WinPopUp” 메세지나 화일을 관리자에게 경고해줌. - 취약점이 알려졌을 때 빠르게 새로운 rule을 개발시킬 수 있다. - 위반된 IP address로부터 사람이 읽을 수 있는 상태로 패킷을 저장함 - NFS나 Napster 접속같이 네트워크에서 발견되지 않는 트래픽을 저장하기 위해 - 가정의 DSL 접속 모니터를 위해 워크스테이션에서 사용 및, 법인 웹싸이트를 모니터하기 Snort는 libpcap 라이브러리를 사용하는데, 이 라이브러리는 tcpdump에서 패킷 스니핑을 하는데도 사용되었다. Snort는 promiscous mode를 이용하여 네트워크를 지나가는 모든 패킷을 해석한다. 그 각각의 패킷과 설정화일 안에 정의된 룰을 기반으로 하여, 경고를 산출해 낸다.
* 왜 침입탐지를 사용하는가? 침입탐지 장치는 어떤 네트워크에서도 없어서는 안된다. 인터넷은 끊임없이 발전하고 있고, 새로운 취약점과 exploit들이 규칙적으로 발견되고 있다.
* Snort를 설치하기 전에 여러분이 Snort를 설치하기 전에 결정해야 할 몇 가지 것들이 있다. - 여러분의 네트워크 그룹에서 침입탐지 장치를 동작하기 위한 동의를 얻었는가? - 여러분이 Snort를 인스톨하려고 하는 시스템은 보안이 잘 되어있는 시스템인가? - 어디서 넣을 것인가? 만약 여러분이 간단하게 여러분의 집 컴퓨터로 행해지는 - 날짜와 시간은 올바른가? Snort가 동작할 호스트의 날짜와 시간은 올바르게 해야 한다. 00 * * * * root /usr/sbin/ntpdate -u
* 침입 탐지장치의 배치 장치는 외부의 신뢰하지 못하는 네트워크와 firewall 사이, 네트워크 조직의 firewall 바깥쪽에 위치할 것이다. 이는 snort가 firewall을 통해 들어온 침입자뿐만 아니라 firewall에 의해 막히는 것까지 탐지해 낼 수 있도록 한다. switch, router firewall들은 올바르게 배치되어질 것이다. 결정은 여러분이 실제로 원하는 네트워크 모니터링에 달려있다. firewall의 내부 local side에 배치하면 firewall에 의해 이미 허락되어진 트래픽을 모니터링 할 것이다. 물론 firewall이 이미 막아버린 잠재적인 마스커레이딩 port scan 이나, 탐색, 다른 타입의 공격들에 대해서는 트래픽을 잡아내지 않을 것이다.
* Single Interface single interface 박스가 가장 쉬운 설정이다. 동일한 인터페이스가 네트워크 트래픽에 listen하고있는 동일한 인터페이스는 관리자 시스템이 있는 장소와 같은 장소에서 동작할 것이다. 이것은 전형적인 홈 네트워크 유저와 관리자가 내부 네트워크를 모니터링 하는 설정이다.
* Dual Interface dual-interface 설정은 하나의 인터페이스는 promiscuous mode에서 네트워크 트래픽에 대해 listen하고있고, 다른 하나는 remote 관리에 사용되는 것이다. 이 설정 타입은 같은 인터페이스가 네트워크 트래픽에 대해 listening하는 것이 가능하지 않은 환경에 사용된다. 이 설정은 외부 인터페이스는 잘 보호되어져야만 한다. 내부 인터페이스는 오직 ssh를 제외하고는 어떤 네트워크 서비스도 제공하지 않아야만 한다. <Images Courtesy Network Flight Recorder >
* Snort의 설치 snort프로그램을 source code로 다운받으면 INSTALL파일에 배포판이 포함하고 있는 설치와 설정에 대한 설명이 적혀있다. 쉽게 컴파일할 수 있고 설정하고 설치할 수 있을 것이다.
* Snort Ruleset의 설치 Snort를 인스톨 한 후에는 최신 rule 파일을 다운받아야 한다. 현재 두 가지의 ruleset이 있다. Jim Forster에 의해 개발되고 있는 ruleset을 다운받는 곳은 다른 ruleset은 Max Vision의 ArachNIDS 에서 개발하고 있다. 이것은 http://dev.whitehats.com/ ids/ vision.conf 에서 다운받을 수 있고, 시간단위로 업데이트 된다. Max Vision ruleset은 공통적인 취약점들에 관한 (CVE) 데이타베이스를 따르고 있기 때문에 특별히 좋다. 일관된 이름을 이용하여 특별한 취약점에 대한 제공을 해준다. “CVE는 보안 취약점과 위험한 부분에 대한 정보 리스트이다. 알려진 문제에 대하여 일관된 이름으로 정보를 제공한다. CVE의 목적은 각각의 취약점에 대해 데이타베이스를 만듦으로써 보안 툴들이 이것을 공통적인 표같은 것으로 이용하여 좀더 쉽게 보안기능을 행할 수 있도록 하기 위함이다.” 만약 snort를 RPM으로 설치했다면 Dave Dittrich가 만든 스크립트인 /usr/sbin/snort-update 를 이용하면 Max Vision의 최신 ruleset을 다운 받을 수 있다. cron에 다음을 추가해도 된다. 00 00 * * * root /usr/sbin/snort-update -q 이 스크립트 또한 http://www.linuxsecurity.com/programs/snort-update 에서 다운받을 수 있다. 이 스크립트는 wget 패키지가 설치되어있어야 동작할 것이다. 직접 다운받으려면 http://dev.whitehats.com/ ids/vision.conf 를 다운받으면 된다. 이것은 성공적으로 메일을 관리자에게 배달할 것이다. snort-update 스크립트는 vision.conf 를 대신할 vision.conf.new를 다운 받는다. 그리고 local의 root(이전버젼에서는 다른 이름)에게 통지문을 메일로 보낸다. vision.conf.new를 vision.conf로 바꾸는 것을 잊지 말도록 하자. 여러분은 아마 Max Vision ruleset에서 덧붙여진 snort.org ruleset을 사용하고 싶을지도 모른다. 그럼 다음의 주소에서 다운받으면 된다. The backdoor-lib, misc-lib, overflow-lib 그리고 다른 유사한 화일은 소스코드를 포함하고 있지만, 많은 데이터가 있지만 일반적으로 사용하지 않는다. ( 역자주: snort-update를 시도하려했지만 dev.whitehats.com 에 접속이 되지 않았다.
* 운영되는 변수 선언하기 snort 를 시작하기 전에 몇 가지 변수를 선언해 주어야 한다. 또한 snort RPM안에는 rules.base라고 부르는 화일을 포함하고 있는데 Max Vision의 vision.conf 화일에서 파생된 것이다. 이 작은 화일은 몇 가지 변수를 포함하고 있는데 여러분의 내부와 외부 네트워크, 호스트에서 무시해야 할 portscan들과 탐지해야 할 portscan들에 대한 정의를 하고 있다. portscan은 T초 동안에 P port보다 더 많이 TCP 접속 시도를 하는 것이다. 여러분의 내부 와 외부 네트워크에 대한 정보를 제공할 필요가 있다. 그리고 DNS 서버로부터 portscan 탐지를 어디서 시작해야 할지를 제공해야 한다. rules.base 화일은 다음과 같다.
만약 dialup machine을 사용하고 있다면 여러분의 dialup 인터페이스를 /32 subnet mask로 호스트 그 자체를 나타내도록 해야 한다. 덧붙여서, 여러분은 snort 로그를 포함한 다른 보안 사건에 대한 특정한 로그파일을 남기기 위해 syslogd를 설정할 필요가 있을지도 모른다. /etc/syslog.conf 를 에디트해서 snort 경고에 대한 log도 설정하도록 하자. /etc/syslog.conf file: authpriv.* /var/log/secure.log [root@krypton ~]# /usr/bin/killall -HUP syslogd
* Preprocessor 사용하기 preprocessor는 침입탐지 엔진이 패킷에 대한 ruleset을 적용하기 전에 data flow를 검사하기 위해 리스트로 적혀진 것이다. 이것은 패킷의 내용을 고칠 수 있고, 탐지 엔진에 특정한 패킷에 대해 진행하지 않도록 신호를 보낼 수 있다. The preprocessor httpd_decode : web 서버가 돌아가고 있는 port 에 대한 적용.(역자주: 이 내용밖에 이해하기가 힘드네요. URI도 오타 같고) The preprocessor portscan : 호스트 나 네트워크에 대한 직접적인 정의를 내린다. 호스트 그 자체에 대해서는 32-bit subnet으로 IP address를 나타낸다. /32 라고 표시하면 되겠고, 예를 들어 Class C인 경우에는 /24 라고 적어주면 된다. The portscan-ignorehosts preprocessor는 바로 알 수 있듯이 무시할 호스트 적어주면 된다. space로 구분한다. preprocessor portscan-ignorehosts: 63.87.101.90/32 63.87.101.92/32 만약 필요하지 않다면 위 부분을 적어주지 않아도 된다. minfrag preprocessor 는 fragmented packet(http://www.faqs.org/rfc/rfc1858.txt)을 체크한다.
* Snort의 동작 테스트! 이제 여러분이 설정한 파일에 대한 일반적인 테스트를 해보자.
snort의 동작을 멈추려면 ctrl-C를 누르면 된다. 이것은 기본적인 snort의 실행방법이고, 수동으로 실행시키려면 다음과 같이 하면 된다. [root@krypton ~]# /usr/sbin/snort -s -d -D -i eth0 -l /var/log/snort \ -D 스위치는 snort를 데몬과 마찬가지로 백그라운드로 실행시키는 것이다. [root@krypton ~]# /etc/rc.d/init.d/snortd
* 침입 시도 관찰하기 snort가 정확하게 동작한다고 믿은 후에는 , 여러분 스스로 공격자가되어 네트워크를 공격해보자. “오직 여러분 소유!의 네트워크” 에 말이다. 나의 공격 호스트(krypton)는 192.168.100.189이고 제물이 될 호스트는 192.168.200.189이다. nmap을 이용하였고, 루트권한으로 실행해야 할 것이다. [root@krypton ~]# nmap -p 25,53 -sX -P0 -D 1.2.3.4,5.6.7.8 192.168.200.189 Starting nmap V. 2.54BETA1 by fyodor@insecure.org (www.insecure.org/nmap/) Nmap run completed -- 1 IP address (1 host up) scanned in 19 seconds 192.168.200.189 대신에 여러분 네트워크의 호스트 IP 주소를 적어넣자. (역자주: 리눅스에서 기본적인 syslog 설정에 따르면 /var/log/secure 화일을 보면 다음과 [root@krypton ~]# /usr/bin/snort2html /var/log/auth.log /var/log/snort 디렉토리에는 각각의 호스트에 대한 자세한 침입 시도 정보가 저장되어있다.
TCP:57554-32771화일이 나타내는 것을 보자.
syslog entry는 다음과 유사할 것이다. Jun 18 00:48:31 krypton snort[8757]: MISC-Attempted Sun RPC high port 덧붙여서 Dan Swan이 perl로 만든 snort2html(http://www.linuxsecurity.com/programs/snort2html) 프로그램을 이용하면 HTML 형식으로 정보를 볼 수 있으니 참고 하기 바란다.
이 글의 원문은 http://www.linuxsecurity.com/using-snort.html 에 있습니다. |
관련자료
-
이전
-
다음