작성자 : 김상철 <ksch [at] certcc [dot] or [dot] kr>
Introduction
본 기술문서에서는 비정상적인 IP 패킷에 관한 특징들에 대하여 기술할 것이다. 이 문서는 IDS(침입탐지 시스템)의 개발자나 관리자에게 많은 도움이 되리라 사료된다. 최근 보안 문제 때문에 많은 사이트에서 침입탐지시스템 및 Firewall(침입차단시스템)등의 보안도구 사용이 확산되고 있다. 이러한 보안도구들을 효율적으로 사용하기 위해서는 비정상적인 IP 패킷들이 어떠한 원리에 의하여 동작되는지 알아야 할 필요가 있다. 불행하게도 많은 Admin(네트워크 및 시스템관리자)들은 IP에 관하여 해박한 지식을 보유하고 있지 않다. 심지어 IDS가 특별한 스캔 및 공격에 대하여 경고(Alert)를 알려줄지라도 Admin들은 경고가 무엇을 의미하는지 모르는 경우도 있다.
IP 프로토콜 표준들은 RFC(Request for Command) 문서에서 정의되어진다. 다음의 사이트(http://www.ietf.org/rfc.html)를 방문하면 확인할 수 있을 것이다. 본 문서에서는 RFC에서 정의하는 표준들에 위배되는 비정상적인 패킷들에 대하여 기술하였다. 비정상적인 패킷들이 라우터 등의 네트워크 장비의 오동작 등에 의하여 발생되기도 하지만 주로 공격자들에 의하여 발생된다. 이러한 비정상적인 패킷들은 Firewall에 의해 패킷이 차단되는 것을 우회하기 위하여 사용되기도 하고 IDS에 의하여 공격 패킷이 탐지되는 것을 방지하기 위하여 생성된다. 뿐만 아니라 시스템들이 정상적인 동작을 방해하기 위한 Crash방법으로도 많이 사용되고 있다.
IP Protocol Types
많은 IP 프로토콜들의 종류가 있지만 적어도 다음의 세 가지 프로토콜에 대하여는 많이 익숙할 것이다. 3가지의 프로토콜은
TCP(Transmission Control Protocol), UDP(User Datagram Protocol), ICMP(Internet
Control Message Protocol)이다. IGRP, EIGRP, OSPF, RIP등의 라우팅 프로토콜 등을 포함하여 IP 프로토콜은
번호에 의하여 정의되는데 여러 종류의 IP 프로토콜이 존재한다. 일부 시스템들은 위에서 정의되는 약어대신에 IP 프로토콜 번호에 의하여 시스템
로그 패킷들을 처리하기 때문에 알아둘 필요가 있다. 본 장에서는 가장 많이 사용되는 프로토콜인 ICMP(1 : IP Protocol
Number), TCP(6), UDP(17)들의 특징들에 대하여 기술할 것이다. 모든 IP 프로토콜 번호들의 리스트는 다음 사이트를 참조하기
바란다.
(ftp://ftp.isi.edu/in-notes/iana/assignments/protocol-numbers)
IP Address
어떤 IP 주소들은 사설, 내부 네트워크 사용만을 위하여 RFC 1918(http://www.isi.edu/in-notes/rfc1918.txt)에서 예약된 IP로 지정하였다. 이러한 IP 주소들의 범위는 다음과 같다. (10.0.0.0~10.255.255.255, 172.16.0.0~172.31.255.255, 192.168.0.0~192.168.255.255) 이러한 예약된 사설 IP주소들은 ISP의 WAN구간에서 라우팅 IP주소로서 사용되어지기도 하지만 인터넷상에서는 볼 수 있는 IP 주소체계가 아니다. 가끔 Firewall, DHCP서버 등의 잘못 구성된 장비에 의하여 이러한 IP 주소가 보여질 수도 있다. 이러한 사설 IP가 발견되는 경우는 대부분 공격자에 의해 조작된 IP 주소이다. 이러한 기법은 IP 스푸핑(spoofing)으로 더 잘 알려져 있다.
공격자가 IP Spoofing을 하는 주요한 이유는 실제 IP 주소를 사용함으로 인한 역추적을 어렵게 하기 위함이다. 물론 공격자는 사설 IP를 사용하기보다는 다른 네트워크의 공인된 IP를 사용하여 특정 대상의 네트워크나 서버를 공격하는 경우가 더 많이 보고되고 있다. 그래서 만약 당신의 시스템이 공격당하고 있다면 아마도 당신은 피해자인 제삼자를 역추적하고 있는 것이다. 또 다른 IP Spoofing 공격 형태는 출발지 주소와 목적지 주소가 같은 경우이다. 이러한 공격을 Land Attack이라 한다. 패킷은 출발지와 목적지의 주소가 반드시 다르게 정의되어져야 한다. 그래서 당신의 네트워크 장비는 동일한 주소를 가지고 있는 패킷들은 반드시 차단하도록 설정 운영하여야만 한다.
공격자에 의해 유도된 IP Spoofing으로부터 당신의 네트워크를 보호하기 위해서는 당신의 네트워크 영역에 있지 않은 IP 패킷들만을 Incoming Permit 보안정책에 의해 운영되어야만 하며, 당신의 네트워크 영역의 출발지 주소를 갖고 있는 패킷들만이 Outgoing Permit보안정책에 의해 적용되어 져야 한다. 또한 위에서 언급된 IP 출발지와 목적지 주소영역을 갖는 패킷들은 인터넷 기반의 장비들에 의해 반드시 차단되어져야 한다.
Top
TCP Packets
TCP 프로토콜은 연결이 시작되어지고 있는지, 종료되고 있는지 또는 높은 우선순위를 갖고 패킷들이 전송되고 있는지 등에 관한 다양한 플래그(Flag)를 사용한다. 많은 공격 패킷들이 이러한 TCP플래그들을 이용하여 조작되어 진다. 뿐만 아니라 TCP 플래그의 조작된 패킷을 통하여 Firewall이나 IDS에 의하여 패킷들의 탐지를 어렵게 한다. 이렇게 불법 조작된 패킷들을 사용하여 운용시스템(Operation system)을 크래쉬(Crash)하기도 한다. TCP에 대한 상세한 기능정의는 RFC 793에 정의되어 있다. RFC에서는 시스템들이 이러한 정상적인 패킷에 대하여 어떻게 처리되어져야 하는지에 대하여만 언급되어 있고 불법적인 TCP플래그의 사용에 대한 시스템이 어떻게 처리되어져야 하는지에 대하여 설명하고 있지 않다. TCP 패킷들은 적어도 아래의 6개의 플래그 중에서 하나 이상이 설정되어 있어야만 한다. 각각의 플래그는 TCP헤더에 비트단위로 설정되어 진다.
? SYN (Synchronization) : 초기 TCP 연결 요청
? ACK (Acknowledgement): ACK 번호 필드에 값이 타당한지를 알려줌
? FIN (Finish): TCP연결을 정상적으로 종료
? RST (Reset): TCP연결을 즉시 종료
? PSH (Push): 수신측에 가능한 빨리 데이터를 전달
? URG (Urgent): Interrupt를 처리
비정상적인 플래그의 조합을 검토하기 전에 정상적인 플래그 조합들을 미리 보면 다음과 같다.
? SYN, SYN ACK, ACK은 정상적인 TCP연결을 맺을 때 사용 (3-Handshake 방식)
? 초기 SYN패킷을 제외하면, 연결을 맺은 모든 패킷들은 ACK 비트가 설정되어야만 함
? FIN ACK, ACK는 연결을 정상적으로 종료할 때 사용
? RST ACK는 연결을 즉시 종료할 때 사용
? 연결후에 송수신되는 패킷들은 디폴트로 ACK비트를 포함하고 있다. 가끔씩 PSH and/or URG포함 될 수도 있다.
위에서 언급하지 않은 조합된 플래그들을 가진 패킷들은 비정상적인 패킷으로 분류될 수 있다.
다음은 자주 발생되는 비정상적인 플래그들을 갖는 패킷들은 의미한다.
? SYN FIN은 잘 알려진 비정상적인 조합된 플래그를 갖는 패킷이다. SYN과 FIN을 동시에 수행하는 정상적인 패킷은 없다. 과거의 많은 IDS제품들이 이러한 패킷들 탐지하지 못했기 때문에 많은 스캐닝 도구 들이 SYN FIN패킷들을 사용하였다.
? SYN FIN PSH, SYN FIN RST, SYN FIN RST PSH와 같은 SYN FIN들의 다양한 변형들이 존재한다. 이러한 경우는 SYN FIN만을 탐지하는 IDS의 탐지를 피하기 위하여 공격자에 의해 조작된 패킷이다.
? 정상적인 패킷은 FIN플래그만을 포함하고 있지 않다. FIN패킷들은 주로 Port Scan, Network Mapping, Stealth 활동 등을 하기 위하여 사용된다.
? 플래그가 설정되지 않은 패킷들이 있을 수 있는데 이러한 패킷들을 Null패킷이라 한다. 이러한 Null 패킷 또한 비정상적인 패킷이다.
여기서 언급한 6개의 플래그 비트 외에 TCP패킷은 미래의 사용을 위해 예약된 2개의 비트 필드를 가지고 있다.
예약된 2개의 비트 필드 중에 하나라도 설정되어 있는 패킷 또한 비정상적인 패킷이다.
TCP 트래픽 중에서 보여지는 비정상적인 패킷들이 더 있을 수 있다.
다음은 이러한 패킷들을 기술한 것이다.
? 정상적인 패킷들은 출발지 및 목적지의 포트가 0으로 설정되어 사용되지 않는다.
? ACK 플래그가 설정되어 있을 때 ACK 번호는 0으로 설정되면 비정상적인 패킷이다.
? SYN만 설정된 패킷은 어떤 Data를 포함하고 있지 않으며, 새로운 연결이 시도될 때만 설정된다.
? TCP 연결은 목적지 주소로서 Broadcast주소(xxx.xxx.xxx.255)를 사용하지 않는다. 정상적으로 Broadcast는 TCP 프로토콜을 사용하지 않는다.
공격하고자 하는 네트워크나 서버를 탐색하기 위하여 공격자들은 비정상적인 TCP패킷들을 사용한다. IDS에 의해 탐지된 다수의 경고(alert)들이 이러한 형태의 패킷들을 포함하고 있다. 따라서 위와 같은 비정상적인 패킷에 대한 많은 이해와 지식의 습득이 필요하다. 뿐만 아니라 모든 비정상적인 TCP패킷들에 대하여 IDS가 탐지하여 경고하도록 설정함으로써 악성의 공격 및 활동들을 탐지 할 수 있을 것이다.
UDP Packets
TCP와는 달리 UDP는 비연결지향(connectionless) 프로토콜이다. UDP는 TCP처럼 플래그 비트를 사용하지 않는다. 하지만 TCP처럼 UDP도 출발지 및 목적지의 주소와 포트에 의하여 동작된다. TCP 패킷처럼 UDP 패킷은 출발지와 목적지의 포트를 0으로 설정하여 사용되지 않는다. UDP패킷은 악성적인(Malicious) 의도로 프래그먼트(Fragment)되어 질 수 있다. 이 기법에 대한 자세한 기술은 "Fragmentation" 섹션을 참조하기 바란다.
Top
ICMP Packets
ICMP는 두 호스트(Host)간에 또는 하나의 호스트와 라우터같은 네트워크 장비사이에서 에러 메시지를 주고 받을 때 사용된다. UDP와 IP는 비연결지향 프로토콜이기 때문에 에러 메시지를 전송할 때 ICMP에 의존한다. 그리고 ICMP는 잠재적인 에러 메시지 루프(Loop)를 방지하기 위하여 응답으로서 ICMP에러 메시지를 보내지 않는다. ICMP는 TCP와 UDP처럼 Port번호를 사용하지 않고 대신에 Type과 Code를 사용한다. 또 다른 특징은 ICMP가 Broadcast 트래픽을 지원한다는 점이다. ICMP패킷은 복잡하지 않기 때문에 공격자에 의하여 비정상적으로 만들어져 사용될 수 있다.
악성으로 사용되어 지는 ICMP메시지의 타입 중에 한가지는 "ICMP redirect"이다. ICMP Redirect메시지는 호스트가 목적지 주소로 연결하고자할 때, 해당 라우터가 최적의 경로임을 호스트에게 알려주기 위하여 라우터로부터 호스트로 보내어진다. WinFreeze와 같은 어떤 공격들은 한 호스트에게 최적의 라우터로서 지정된 시스템이 사용되도록 하기 위하여 거짓된 ICMP redirect메시지를 사용한다. 분명히 하나의 장치로 모든 것을 라우팅하도록 지시하는 모든 패킷은 비정상적인 패킷이라고 간주되어야 한다.
대부분의 ICMP패킷들은 작은 헤더와 payload로 구성되어 있다. 예를 들어 ICMP Echo Request패킷들은 8-바이트의 헤더와 56-바이트의 payload를 갖는다. 정상적인 ICMP패킷들보다 큰 패킷들은 의심스러운 패킷으로 처리되어야만 한다.
Fragmentation
하나의 패킷이 너무 커서 하나의 엔터티(entity)로서 전송되어질 수 없을 때, 네트워크를 통해 보내어질 수 있는 두 개 이상의 더 작은 패킷조각(piece)으로 분리되어져야 한다. 이때 각 패킷 각각의 조각을 프래그먼트(fragment)라 하며 시스템 및 네트워크 장비에서 이러한 패킷을 조각내는 작업을 Fragmentation이라 한다. Fragmentation은 TCP에서 가장 빈번하게 이루어지지만, 이 문서에서 논의되었던 UDP, ICMP 프로토콜 등에서도 Fragmentation이 이루어진다. 하지만 공격자들은 인공적으로 시스템의 기능장애를 발생시키거나, Firewall의 보안정책을 우회시키거나, IDS의 탐지 정책을 피하기 위하여 fragment된 패킷들을 만들어낼 수 있다. 이러한 보안정책을 피할 수 있는 이유는 일부 Firewall이나 IDS는 패킷 재구성(Reassemble)작업을 수행하지 않기 때문이다.
악성 Fragmentation중의 한가지 형태는 비정상적으로 Offset처리된 Fragment들을 포함한다. 하나의 Offset값은 프래그먼트된 패킷들이 재구성되어질 때 어디에 위치되어져야 하는지에 대한 위치정보를 갖고 있다. 첫 번째 Fragment 패킷은 정상적이고, 두 번째 Fragment패킷은 첫 번째 패킷의 데이터의 길이보다 더 작은 Offset값을 갖고 있을 때 즉 첫 번째 Fragment는 24바이트의 데이터를 갖고, 두 번째 Fragment가 20-바이트의 Offset값을 갖는다고 하자. 그리고 Fragmentation이 이루어진 프로토콜이 TCP라고 하면, 첫 번째 Fragment된 패킷은 TCP헤더를 갖고 있을 것이다. 두 번째 Fragment된 Offset값이 잘못 처리되어 첫 번째 TCP헤더의 목적지 포트번호 같은 일부 데이터에 Overwrite를 할 것이다. 그래서 공격자는 Firewall(웹서버의 웹서비스 포트인 80번 포트가 Permit인 보안정책 사용)을 통하여 80번 포트를 사용하는 웹서버로 Fragment된 패킷을 전송할 수 있을 것이다. 이때 웹서버가 Fragment된 패킷을 재구성한 후의 최종 패킷은 실제적으로 완전히 다른 서비스포트로 처리될 것이다.
위와 비슷한 방식으로 Firewall을 우회하여 특정 시스템을 크래쉬(Crash)할 때도 사용될 수 있다. 일부 구버전의 O/S는 Fragment된 패킷을 재구성하려 할 때 두 번째 Fragment된 패킷의 Offset값을 음의 값으로 처리하도록 유도할 수 있다. 즉 이러한 Offset값을 통해 메모리 복사(copy)작업을 수행하게 된다. 메모리 복사는 음의 값을 가지고 수행될 수 없기 때문에 작은 음의 값을 처리하게 유도하여 많은 양의 메모리 복사작업을 수행하게 한다. 이러한 방식으로 시스템의 기능장애가 발생하게 되는 것이다.
Fragment를 이용한 두 번째 공격형태는 "tiny Fragment Attack"으로 알려진 공격이다. 이 공격은 두 개의 TCP Fragment을 이용하는 방법이다. 첫 번째 Fragment는 목적지 포트번호 등을 포함시키지 않는 등의 TCP헤더를 구성시킨다. 그 다음 두 번째 패킷에 첫 번째 패킷의 TCP헤더를 포함시키어 전송시킨다. 패킷 재구성작업을 수행하지 않는 firewall이나 IDS는 하나 또는 두 개의 패킷을 통과시킬 수 있을 것이다.
또 다른 공격의 형태는 비정상적으로 Fragment된 대량의 패킷을 전송시키는 방법이다. 공격자는 목표시스템이 대량의 Fragment된 패킷을 받아 패킷을 재구성하는 작업을 수행하는 동안 해당 시스템이 장애를 일으키도록 유도시킬 것이다. 이러한 예로 모든 Fragment된 패킷에 비정상적인 Offset값을 주는 경우이다. 이러한 공격의 형태 중에서 우리에게 잘 알려진 "Ping of Death Attack"은 패킷의 최대 크기인 65535-바이트보다 더크게 ICMP Echo Request 패킷을 생성하여 목표시스템으로 전송시키는 것이다.
Fragment 패킷에 대한 공격으로부터 네트워크를 보호하기 위해서는 이전에 언급된 것처럼 Firewall이나 IDS가 패킷 재구성을 수행할 수 있도록 하여야만 한다. 그리고 IDS에서는 최종 Fragment 패킷 외에는 작은 Fragment 패킷에 대하여 경고할 수 있도록 IDS 환경을 구성하여야만 한다. 그리고 항상 패치(Patch)와 업데이트(Update)상태로 모든 시스템을 운영하여야만 한다.
Conclusion
IDS나 Firewall을 운영하는 관리자는 정상적이고 비정상적인 트래픽에 대하여 구체적인 지식을 보유하고 있어야만 한다. 그래야만 IDS 및 Firewall을 안전하게 운영할 수 있고, IDS의 경고에 대하여 이러한 경고가 무엇을 의미하는지 파악하고 대처할 수 있다. 희망적으로 관리자들은 이 문서에서 제공된 개념들을 이해하고, IP에 관하여 더욱더 많은 지식습득을 통하여 Firewall 및 IDS의 경고가 무엇을 의미하는지, 네트워크에서 실제 무엇이 일어나고 있는지를 분석할 수 있을 것이다.
Reference
[1] http://www.ietf.org/rfc.html
[2] ftp://ftp.isi.edu/in-notes/iana/assignments/protocol-numbers
[3] http://www.isi.edu/in-notes/rfc1918.txt
[4] http://www.securityfocus.com/focus/ids/articles
관련 링크: http://certcc.or.kr
'Security' 카테고리의 다른 글
IP 네트워크 scanning 기법 (0) | 2002.04.26 |
---|---|
procmail + hcode를 이용한 spam 메일 차단 방법 (0) | 2002.04.24 |
SSH CRC32보안취약점에 관한... (1) | 2002.04.17 |
whowatch (로그인한 유저의 상황 모니터링툴) (7) | 2002.04.13 |
LIDS (Linux Intrusion Detection System) (5) | 2002.04.11 |