한빛출판네트워크

IT/모바일

IDS Reloaded - 침입 탐지 시스템의 모든 것 II

한빛미디어

|

2003-08-22

by HANBIT

저자: 강유(SecurityMap, CTO)

IDS Reloaded - 침입 탐지 시스템의 모든 것 두 번째 이야기에 들어가기 전에 요즘 논란이 되고 있는 IDS와 IPS간의 관계를 간단히 살펴보고 들어가겠습니다.
IDS 인가 IPS 인가?

요즘 IDS가 아닌 IPS(Intrusion Prevention System, 침입 방지 시스템)가 사람들의 주목을 받고 있습니다. 많은 사람들이 IDS와 IPS의 차이가 무엇인지, IPS가 나오면 IDS는 쓸모없는 것이 아닌지에 대한 질문을 합니다. 그 질문에 대한 답을 해 드리겠습니다.

먼저 IPS는 IDS에 능동적인 대응 기능을 넣은 프로그램입니다. 즉 IDS가 침입을 발견하는 일을 한다면 IPS는 그 침입 결과를 바탕으로 뭔가 침입을 막기 위한 행동을 더 한다는 얘기입니다. 즉, IPS가 IDS보다 좀더 강력한 기능을 제공한다는 주장이지요. 그렇지만 사실 IPS는 아직 표준이 명확히 정의되지 않았습니다. 그래서 각 회사에서 나오는 IPS의 기능 및 구현이 매우 다르며, 서로 전혀 다른 얘기를 하는 경우도 많습니다. 외국의 어떤 보안 전문가는 IPS가 단지 말장난에 불과한 것이라고 주장하기도 합니다.

사실, IDS도 일부 대응 기능을 가지고 있습니다. 예를 들어, Snort는 공격 세션의 TCP 연결을 끊는 기능을 제공합니다. Snort의 이런 기능과 실시간 로그 분석 기법을 결합하면 IPS의 기능을 구현하는 것도 어려운 일이 아닙니다. 그렇기 때문에 IPS가 나온다고 해서 기존의 IDS가 없어지는 것은 전혀 사실이 아닙니다. 만약, IPS가 기존 IDS의 패턴-매칭 비교 방식이나 비정상-기반 비교 방식을 뛰어넘은 획기적인 방식으로 표준화 된다면 IDS를 대체할 수 있겠지만 아직은 IDS에 기반한 기초적인 수준이기 때문에 앞으로 상당 기간 동안 IDS와 IPS는 공존할 것입니다.
그러면 다시 본 얘기로 들어가겠습니다. 지난 글에서 예고한 대로 이번 글에서는 여러분들에게 Snort를 소개하고자 합니다. Snort 는 아마도 오픈 소스 소프트웨어라는 면에서 가장 많이 알려졌을 것입니다. 하지만 Snort의 진정한 강점은 결코 상업용에 뒤지지 않는 뛰어난 기능을 갖춘 IDS라는데 있습니다. Snort는 원래 패킷 스니퍼로 쓸 목적으로 만든 프로그램입니다. 1998년 11월, Marty Roesch는 자신이 사용하던 TCPDump 프로그램의 몇 가지 단점을 보완한 APE라는 리눅스 전용 패킷 스니퍼를 만들었습니다. 그리고 1998년 12월, Packet Storm 사이트에 Snort라는 이름으로 이 패킷 스니퍼를 사람들에게 공개했습니다. 이때 Snort 소스 코드는 1600줄이었습니다.

Snort에 처음으로 서명-기반 분석 기능이 추가된 것은 1999년 1월이었습니다. 이때부터 비로소 Snort는 침입 탐지 시스템의 길을 걷기 시작했으며 그 당시 Snort는 경량 IDS로 쓰일 수 있었습니다. 그 뒤 1999년 12월에 나온 Snort 1.5부터 오늘날의 Snort 구조의 근간이 되는 플러그-인 구조를 사용하기 시작했고, 마침내 2003년 4월 Snort 2.0이 나왔습니다. 현재 최신 버전인 2.0은 약 75,000 줄의 코드로 작성됐으며, Marty가 만든 회사인 Sourcefire에서 만들었습니다. Sourcefire는 Snort의 상업용 버전을 만드는 회사이지만 앞으로도 계속 오픈 소스(GNU) 버전의 Snort를 발표할 계획입니다.

Snort는 스니퍼, 전처리기, 탐지 엔진, 출력 모듈의 4 가지 구성 요소로 이뤄져 있습니다.
  • 스니퍼 스니퍼(sniffer) 또는 패킷 스니퍼는 네트워크에서 데이터를 수집하는 소프트웨어나 하드웨어를 의미합니다. Snort는 원래 스니퍼 용도로 만든 프로그램이기 때문에 기본적으로 네트워크를 돌아다니는 패킷을 잡아낼 수 있습니다.
  • 전처리기(preprocessor) 스니퍼에서 캡처한 네트워크 패킷은 전처리기로 이동합니다. Snort의 전처리기는 패킷을 탐지 엔진에서 비교하기 전에 사전 처리 작업을 해 주는 역할을 합니다. 예를 들어, stream 전처리기는 여러 TCP 패킷을 하나로 모음으로써 여러 패킷에 걸친 공격을 잡아내는 역할을 합니다. Snort의 다른 부분과 마찬가지로 전처리기도 플러그-인 방식으로 되어 있습니다. 플러그-인 방식의 장점은 그때그때 필요한 플러그-인을 추가하거나 삭제하기가 쉽기 때문에 훨씬 유연한 소프트웨어를 운영할 수 있다는데 있습니다.
  • 탐지 엔진 탐지 엔진은 Snort의 핵심 모듈로서 패킷과 규칙을 비교하여, 패킷에 해당하는 규칙이 있을 경우 경고를 발생합니다. Snort의 규칙은 Snort에서 가장 중요한 부분으로 Snort에는 나름대로 규칙 문법이 있습니다. 규칙 문법은 프로토콜의 종류, 컨텐트, 길이, 헤더, 기타 여러 요소(버퍼 오버플로우를 정의하기 위한 쓰레기 문자 등)를 포함하고 있습니다. 규칙을 잘 설정하면 Snort를 자신의 환경에 맞게 커스터마이징하는 것이 가능한 것입니다.
  • 출력 모듈 Snort가 발생시킨 경고는 출력 모듈로 전송됩니다. 출력 모듈도 플러그-인 구조로 되어 있으며, 현재 Snort는 로그 파일, 네트워크 연결, UNIX 소켓 또는 윈도우 팝업(SMB), 또는 SNMP 트랩, MySQL과 Postgres와 같은 SQL 데이터베이스로 경고를 보낼 수 있습니다. 그리고 Snort의 경고를 분석하기 위한 여러 툴이 나와 있습니다. 그 중 대표적인 툴로 SnortSnarf와 Swatch, ACID 등을 들 수 있습니다.
그러면 Snort에서 실제로 사용하는 규칙의 예를 들어서 Snort의 규칙과 침입 탐지 기능을 살펴봅시다. 다음은 Code Red 웜을 잡기 위한 규칙 중 하나입니다.
alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS 
  (msg:"WEB-IIS ISAPI .ida attempt"; flow:to_server,established; 
  uricontent:".ida?"; nocase; reference:arachnids,552; 
  classtype:web-application-attack; reference:bugtraq,1065; 
  reference:cve,CAN-2000-0071; sid:1243; rev:8;)
위 규칙은 외부 네트워크에서 내부 네트워크의 HTTP 포트로 오는 패킷 중에서 ".ida?" 라는 컨텐트를 포함한 모든 패킷에 대해 경고를 발생시킵니다. 규칙은 많은 옵션이 있지만, 위 규칙에서 중요한 것은 uricontent:".ida?"라는 규칙 옵션입니다. 이것은 패킷에 들어 있는 URI에서 찾을 패턴을 지정합니다. Snort를 잘 사용하기 위해서는 Snort 자체의 동작 방식과 규칙도 잘 이해해야 하지만 Snort를 어디에 어떻게 설치해야 하는지, Snort에서 얻은 결과를 어떻게 분석할지도 잘 알아야 합니다. IDS를 설치하는 방법은 여러 가지가 있지만 가장 전형적인 환경은 다음과 같습니다.

위 그림은 스크리닝 라우터와 방화벽, DMZ를 갖춘 전형적인 기업 네트워크의 구조입니다. 위 그림에서 IDS는 각 네트워크 세그먼트에 위치해서 공격을 모니터링하고 있습니다.

이상으로 Snort 와 IDS에 대해 알아보았습니다. 더 자세한 내용은 세미나 때 설명할 것을 약속 드리며 다음 글에서는 강의의 세부적인 내용을 말씀 드리겠습니다.

관련기사 보기
IDS Reloaded - 침입 탐지 시스템의 모든 것 I
IDS Reloaded - 침입 탐지 시스템의 모든 것 II
IDS Reloaded - 침입 탐지 시스템의 모든 것 III
TAG :
댓글 입력