한빛출판네트워크

IT/모바일

IDS 패킷 필터링

한빛미디어

|

2004-08-06

by HANBIT

저자: Don Parker, 역 한동훈(traxacun at unitel.co.kr)
원문: http://www.onlamp.com/pub/a/security/2004/06/17/ids_filtering.html

침입 탐지 시스템을 사용한 사람이라면 엄청난 양의 데이터가 생성된다는 것을 아실겁니다. 정밀한 조사를 재빨리 수행해야하는 네트워크 보안 분석가들에게 이렇게 방대한 패킷들은 분명 길들여지지 않은 야수와도 같습니다. 어떻게 하면 이 야수를 길들일 수 있을까요?

패킷을 기록하는 데이터베이스는 계속해서 크기가 증가하기 때문에 필요한 데이터를 추출하는 가장 단순하고 효율적인 방법이 필요합니다. 이를 위해 버클리 패킷 필터(bpt)와 비트마스크(bitmask) 패킷을 이용할 수 있습니다. 200MB의 패킷을 한 번에 한 패킷씩 작업하는 대신 필요한 500KB 정도의 패킷만 추려낼 수 있다면 시간과 노력을 절약할 수 있지 않을까요?

필터링 도구 Ethereal

대부분의 사람들이 bpf나 bitmask 같은 도구들이 있다는 것조차 모르며, 사용법을 알고 있는 사람은 더욱 드뭅니다. 제가 아는 사람들중에는 이런 도구들의 사용법이 어려워보이기 때문에 사용하는 것 자체를 꺼리기도 합니다. 그도 그럴것이 이런 도구들은 보통 도스창, 유닉스나 리눅스의 터미널 창과 같은 명령줄 인터페이스를 이용하는 것이 보통합니다. 그러나 대부분의 사람들은 GUI 환경에서 작업하는 것을 편하게 생각합니다.

bpf와 bitmask 필터를 사용하는 데 가장 좋은 도구는 Etheral(이서리얼)입니다. Ethereal을 사용하면 패킷을 해석할 수 있고 bpf 구문을 사용할 수 있습니다. 게다가, 취향에 따라 명령줄 인터페이스나 GUI를 사용할 수 있기 때문에 분석 작업도 쉽게 할 수 있습니다.

TCP/IP 기본 지식

검색 범위를 줄이기 위해 사용하는 bpf와 netmask는 TCP 패킷 정보를 이용하기 때문에 TCP/IP에 대한 지식도 어느 정도 필요합니다. 일단, 여기서는 TCP/IP의 기본인 3-Way 핸드쉐이크(3-Way Handshake)와 TCP 패킷 플래그에 대해 설명하겠습니다.

역주: 보통 3-Way Handshaking이라고 이야기하는 것으로, TCP/IP는 응답요청/응답수신/응답허락과 같은 3단계를 거쳐서 연결이 생성되는 것을 의미한다.

다른 컴퓨터와 통신하기 위해서 출발지(source)에서는 TCP SYN 패킷을 보냅니다. 이 패킷의 목적은 일련 번호(sequence number)를 동기화하는 것입니다. 목적지(destination) 컴퓨터는 SYN 패킷을 받았음을 알려주고 SYN/ACK 패킷을 보냅니다. 마지막으로, 출발지 컴퓨터는 ACK 패킷을 보냅니다. 이 과정이 완료되면 두 컴퓨터는 PSH(push) 패킷을 사용하여 데이터를 교환할 준비가 끝납니다.

요약하자면, 통신을 설정하는 패킷 순서는 SYN, SYN/ACK, ACK입니다. 그 다음에 실제 데이터 교환을 위해 PSH/ACK 패킷을 보내게 됩니다.

TCP 헤더의 13번째 바이트는 위에서 설명한 플래그를 모두 포함합니다. 각 플래그는 이진값(binary value)이며, 다음 표와 같은 값을 갖습니다.

표


비트 위치 128과 64는 혼잡(congestion) 통지를 위해 사용됩니다. 이 설명이 정확하게 사실인 것은 아니지만 CWR과 ECN 플래그 집합이 있는 패킷을 발견할 수도 있습니다. 이 패킷 집합은 네트워크 조사 시도를 하는 동안 자주 나타나게 되므로 이런 종류의 패킷을 살펴보는 것도 좋은 생각입니다.

TCP 플래그를 이해했다면 필터링 예제를 몇 개 살펴보겠습니다. 또, bpf와 bitmask 필터가 필요한 시나리오도 설명하겠습니다. 이러한 필터를 구성할 때 복잡한 논리적 순서를 어떻게 구성하는지도 살펴보겠습니다.

필터링 시나리오 예제

신참 IDS 분석가였을때는 스캐너가 생성한 큰 파일의 모든 패킷을 일일이 검토했었다. 분석가가 각 패킷을 모두 살펴볼 시간은 없습니다. 대신에, 관심있는 패킷만을 뽑아내야한다. 이 과정을 설명하기 위해 다음 시나리오를 생각해보자.

독자가 주말을 보내고 방금 회사에 출근했습니다. IDS 로그를 훑어보는 동안 특정 IP로부터 매우 많은 스캐닝이 있었다는 것을 발견했습니다. 공격 대상이 된 컴퓨터는 회사 네트워크에 다양한 서비스를 제공하고 있습니다. 이제, 알고 싶은 것은 스캐닝을 당하는 동안 어떤 컴퓨터가 응답을 했는가, 더 중요하게는 응답으로 무엇을 보냈는가 하는 것입니다. 공격자가 서버의 서비스에 특별히 고안된 패킷을 보냄으로서 다른 포트를 여는 것도 가능합니다. 스캔을 하는 컴퓨터는 대상 컴퓨터의 해당 포트와 연결될 수도 있습니다.

이런 가능성을 기억하면서 공격자의 IP를 알아내기 위해 간단한 로그 체크를 수행할 수 있습니다. 공격자 IP를 알아내기 위해 다음과 같은 필터를 만들 수 있습니다.

-nXvs 0 ip and host 192.168.1.100

여기에 사용된 스위치를 설명한 적이 없으므로 여기서 간단히 요약하겠습니다.

- : 모든 bpf 스위치는 - 과 함께 사용합니다.
n: IP 주소를 숫자 형식으로 유지하며, 도메인 네임으로 변환하지 않습니다.
X: 패킷 정보를 16진수와 아스키(ASCII) 형식으로 표시합니다.
v: 로그를 상세 표시합니다. 모든 헤더 메트릭을 출력합니다.
s: 패킷의 캡쳐 길이를 지정합니다.(이더넷 패킷은 1540 바이트입니다)
0: 패킷 캡쳐 길이를 10진수로 표기한 크기이며, 바이트로 표기됩니다.
ip: 유효한 IP 헤더를 가지는 모든 패킷을 표시합니다.
and host: 전체 서브셋 대신에 단일 호스트만 추적합니다.
192.168.1.100: 패킷을 캡쳐하길 원하는 IP 주소

위 필터를 적절하게 적용하면 패킷 데이터베이스에서 다양한 정보들이 나타납니다. 이 예제는 매우 간단한 필터를 보여줍니다. IP 주소와 관련된 모든 트래픽을 보여주는 것은 현실적으로 유용한 것은 아닙니다. 따라서 syn, psh/ack 등의 플래그를 추가하여 필요한 정보들을 더 추려낼 수 있습니다.

필터 개선하기

예를 들어, 해당 호스트가 DNS 서버와 통신하는 경우 DNS는 통신에 TCP와 UDP 두 가지 프로토콜을 모두 사용하기 때문에 UDP 트래픽도 관찰할 수 있습니다. 따라서 쿼리를 보다 더 자세하게 필터링할 수 있는 능력이 무엇보다 중요합니다.

대다수의 기업들은 외부로 전송되는 패킷들중에 플래그가 있는 것들을 중앙 데이터베이스에 보관합니다. 네트워크와 평균 트래픽 전송량에 따라 이 데이터베이스 크기는 상당히 커질 수 있습니다. 이상적인 방법은 이런 레코드를 잠시동안만 보존하는 겁니다. 로그에 기록된 악의적인 행위를 한 누군가를 추적하기 위한 법률적인 요건들을 고려할 수 있습니다. 다양한 로그 경로를 추적하는 것은 곧잘 관리 문제가 될 수 있기 때문에 중앙 집중화된 로깅은 좋은 생각입니다.

예상되는 정황을 포함시킨 스캔은 종종 엄청난 양의 트래픽을 유발할 수 있습니다. 어떻게 하면 패킷의 망망대해에서 적절한 데이터를 발견할 수 있을까? TCP 커뮤니케이션은 3-웨이 핸드쉐이크를 요구하므로 TCP 트래픽만 발견하도록 bpf 필터를 구축할 수 있습니다. 만약에 컴퓨터가 네트워크 컴퓨터의 다양한 포트에 SYN 태핏을 전송하고 있다면 응답으로 SYN/ACK 패킷을 돌려주는 패킷만을 모니터링할 수 있습니다. 다음 결과는 이러한 요구사항을 반영한 것입니다.

-nXvs 0 tcp and host 192.168.1.100

이 필터는 IP 주소 192.168.1.100에서 컴퓨터로 응답하는 모든 TCP 트래픽을 보여줍니다. 이제, 이 거대한 패킷 파일을 실제로 이용할 수 있을만한 크기로 줄인 파일로 만들었습니다. 분석을 위해 이 결과를 다시 추려낼 수 있을까요? 네!!

이 단계에서는 TCP/IP 지식에 필터를 만드는데 있어 중요한 요소가 됩니다. TCP/IP 패킷 또는 비인기 프로토콜인 ICMP와 ARP든지 간에 전송되는 모든 패킷은 특별한 헤더를 포함하고 있습니다. 패킷 구조는 프로토콜마다 다르지만 각 프로토콜의 패킷은 모두 특정 정보를 포함하는 필드를 갖고 있습니다. TCP 기반 패킷을 위해 만든 필터는 UDP나 다른 프로코톨에서는 동작하지 않을겁니다. 입맛에 따라 직접 bpf 필터를 생성하려면 각 프로토콜 패킷의 구조와 필드들을 이해가 선행되어야 합니다. 이러한 지식은 데이터베이스에서 필요한 데이터를 추려내기 위해 이러한 필터와 비트 마스크를 직접 생성할 때 큰 효과를 볼 수 있게 해줍니다.

많은 사람들이 여러분의 네트워크 자산에 행해지는 공격들이 형태와 크기 면에서 다양하다는 것을 이미 알고 있습니다. TCP 패킷만 위험 요소로 고려되는 것은 아닙니다. 다양한 사이트에 올라와있는 호스트 공격 코드(exploit code)들을 보면 코드를 전달하거나 시스템 취약점을 이용하기 위해 다른 프로토콜을 사용한다는 것을 알 수 있습니다.

다음 기사에서는 네트워크에서 사용되는 주요 프로토콜들의 다양한 필드들을 차례대로 설명할 것입니다. 또한, 출발지 컴퓨터와 대상 컴퓨터, 포트들을 구별하는 방법에 대해서도 살펴볼 것입니다. 이러한 지식들을 직접 이용함으로써 자신의 목적에 맞는 복잡한 필터들을 생성할 수 있게될 것입니다. 독자가 직접 자신의 작업 환경에서 사용할 수 있을만한 실제 예제들을 사용할 것입니다.

Don Parker는 Rigel Kent Security and Advisory Services에서 근무하는 침입 탐지 전문가(Intrusion Detection Specialist)입니다.
TAG :
댓글 입력