* iptables 를 이용한 네트워크 계층 헤더의 기록
iptables 로 만든 방화벽은 iptables 의 LOG 타겟을 이용해서 IPv4 헤더의 거의 모든 항목에 대한 로그 데이터를 syslog 에 작성할 수 있다.
– IP 옵션의 기록
IP 옵션은 IP 통신에 다양한 제어 기능을 제공하는데, 이러한 기능에는 타임스탬프(timestamp), 보안 기능, 특수 라우팅 기능을 위한 규정등이 있다. IP 옵션은 가변 길이를 가지며 인터넷에서 상대적으로 드물게 사용된다. IP 옵션이 없으면 IP 패킷 헤더는 언제나 정확히 20바이트이다. iptables 가 IP 헤더의 옵션을 기록하게 하려면 다음의 명령어를 사용한다.
# iptables -A INPUT -j LOG –log-ip-options
– ICMP의 기록
iptables LOG 타겟은 ICMP를 기록하기 위한 코드를 가지며, ICMP 는 네트워크 계층에 존재한다. ICMP(RFC 792 에서 정의)는 32비트에 불과한 단순한 헤더를 가진다. 이 헤더는 유형(8비트), 코드(8비트), 체크섬(16비트) 의 세 가지 항목으로 구성된다. 나머지 항목은 ICMP 패킷의 데이터 부분에 속한다.
데이터 부분의 특정 항목은 ICMP유형과 코드 값에 따라 달라진다. 예를 들어 ICMP 에코 요청(유형8, 코드0)과 관련된 항목에는 ID 와 순서 번호(sequence) 값이 포함된다.
IP 헤더와 마찬가지로 LOG 타겟은 항상 ICMP 유형과 코드 항목을 기록하며 ICMP 체크섬 항목은 절대 기록하지 않는다. iptables에는 LOG 타겟이 ICMP 패킷의 데이터 부분에 속한 항목을 출력하게 할 수 있는 명령 행 인자가 없다.
* 네트워크 계층 공격 정의
네트워크 계층 공격은 말단 호스트의 네트워크 스택 구현에 존재하는 취약점을 공격하거나 네트워크 계층 자원을 소비하거나 상위 계층에 대한 공격 전달을 숨기기 위해 네트워크 계층의 헤더 항목을 악용하는 패킷들로 정의된다.
네트워크 공격은 아래와 같이 세 종류로 나뉜다.
– 헤더 악용 : 악의적으로 구성됐거나 깨진, 또는 변조된 네트워크 계층 헤더를 포함하는 패킷. 예를 들어 스푸핑된 출발지 주소를 가지는 IP 패킷과 비현실적 인 단편화 오프셋(fragment offset) 값을 포함하는 패킷이 있다.
– 네트워크 스택 공격 : 말단 호스트의 네트워크 스택 구현에 존재하는 취약점을 공격하게 설계된 특수 컴포넌트를 포함하는 패킷. 즉, 네트워크 계층 정보를 처리하는 코드 자체가 공격 목표다. 대표적인 예로는 리눅스 커널(버전 2.6.9와 그 이전 버전)에서 발견된 인터넷 그룹 관리 프로토콜(IGMP, Internet Group Management Protocol) 서비스 거부(DoS, Denial of Service) 취약점이 있다
– 대역 폭포화 : 목표 네트워크에서 사용 가능한 모든 대역폭을 포화시키게 설계된 패킷. ICMP 를 통해 전송되는 분산 서비스 거부(DDoS, Distributed Denial of Service) 공격이 대표적인 예이다.
* 네트워크 계층 악용
네트워크 계층은 전 세계 어디서든지 출발지에서 목적지까지 패킷을 라우팅할 수 있으며, 이를 이용하면 전 세계의 모든 목표를 공격할 수 있다. IPv4는 어떤 인증 기법도 제공하지 않기 때문에(인증은 IPSec 프로콜이나 상위 계층 매커니즘의 역할로 남겨두었다) 공격자는 쉽게 조작된 헤더나 데이터를 가지는 IP 패킷을 만들어내고 이를 네트워크로 퍼뜨릴 수 있다. 이런 패킷은 의도된 목표에 도달하기 전에 방화벽이나 접근 제어 목록(ACL: Access Control List)을 사용하는 라우터와 같은 인라인 필터링 장치에 의해 필터링될 수 있지만 그렇지 않은 경우도 많다.
– Nmap ICMP Ping
동인한 서브넷이 있지 않는 시스템을 스캔하기 위해 Nmap이 사용되면 목표 호스트의 포트 80에 ICMP 에코 요청과 TCP ACK를 전송하는 방법으로 호스트 발견을 수행한다(호스트 발견은 Nmap -P0 명령 행 인자를 사용해서 비활성화할 수 있지만 기본적으로는 활성화돼있다). Nmap 에코 요청은 ICMP 헤더 외에는 어떤 데이터도 포함하지 않는다는 점에서 Nmap이 생성하는 ICMP 에코 요청은 ping 프로그램이 생성하는 에코 요청과 다르다. 그러므로 이런 패킷이 iptables에 기록되면 IP 길이 항목은 반드시 28이 된다.
– IP 스푸핑
IP 를 통한 통신의 경우 패킷의 출발지 주소에는 제한이 전혀 없다. 원시 소켓(특정 기준에 따라 패킷을 생성하는 저수준 프로그래밍 API)을 사용하면 임의의 출발지 주소를 가지는 IP 패킷을 전송할 수 있다. 출발지 주소가 로컬 네트워크 문맥에서 봤을 때 말이 안 되는 경우 해당 패킷은 스푸핑됐다고 한다. 관리자는 내부 네트워크의 범위에 속하지 않는 출발지 주소를 가진 패킷은 포워딩하지 않게 라우터와 방화벽을 설정할 수 있지만 많은 네트워크가 이런 식의 제어를 하지 않는다.
보안 관점에서 스푸핑된 패킷(과 보통 IP 패킷)에 대해 알아야 할 가장 중요한 것은 출발지 주소를 믿을 수 없다는 것이다. 사실 완전한 공격이 단 하나의 스푸핑된 패킷을 통해 전달될 수도 있다.
많은 보안 소프트웨어(공격과 방어 모두 포함)가 출발지 IP 주소를 스푸핑할 수 있다. 분산 서비스 거부(DDos)도구는 일반적으로 IP 스푸핑을 필수적인 것으로 간주하며, hping이나 Nmap과 같이 잘 알려진 도구 역시 출발지 주소를 스푸핑할 수 있다.
– IP 단편화
IP 패킷을 좀 더 작은 패킷으로 쪼개는 것은 IP의 주요 기능 중 하나다. IP 패킷을 쪼개는 과정을 단편화(fragmentation)라고 하며, 단편화는 데이터 링크 MTU 크기가 너무 작아 패킷을 처리할 수 없는 네트워크로 IP 패킷이 라우팅될 때마다 필요하다. 한 데이터 링크 계층에서 다른 데이터 링크 계층으로 전송되는 IP 패킷이 MTU를 초과하지 않게 MTU 크기가 서로 다른 두 데이터 링크 계층을 연결하는 것은 라우터의 역할이다. 목적지 호스트의 IP 스택은 패킷 내부에 캡슐화된 프로토콜이 다음 계층의 스택으로 전달될 때 본래의 패킷을 생성하기 위해 IP 단편을 재조립한다.
공격자는 공격을 구성한 후 이를 다수의 IP 단편으로 정교하게 쪼개는 방법으로 IP 단편화를 IDS 회피 매커니즘으로 이용할 수 있다. 완전히 구현된 IP 스택은 모두 단편화된 트래픽을 재조립할 수 있지만 공격을 탐지하기 위해 IDS가 목적지 IP 스택이 사용하는 것과 동일한 알고리즘을 사용해서 트래픽을 재조립할 수도 있다. IP 스택의 재조립 알고리즘 구현이 약간씩 다르기 때문에(예를 들어 중복된 단편화에 대해 시스코 IOS IP 스택은 마지막 단편화 정책에 따라 트래픽을 재조립하는 반면 윈도우 XP의 스택은 첫 번째 단편화 정책에 따라 재조립한다) IDS가 동일한 알고리즘을 사용하는 것은 힘든 일이다. 단편화된 트래픽을 생성하는 최고의 표준은 덕 속으이 fragroute 도구다.(http://www.monkey.org 참조)
– 작은 TTL 값
모든 라우터는 IP 패킷이 다른 시스템으로 포워딩될 때마다 IP 헤더의 TTL 값을 1씩 감소시켜야 한다. 로컬 서브넷 내에 TTL 값이 1인 패킷이 나타나면 누군가 로컬 서브넷이나 로컬 서브넷을 통해 라우팅되는 서브넷에 존재하는 IP 주소에 대해 traceroute 프로그램(또는 tcptracerouote 와 같은 변형)을 사용하고 있을 가능성이 높다. 이는 보통 네트워크 연결 문제를 해결하려는 사람인 경우가 많지만 잠재적 공격 목표로의 홉(hop)을 알아내기 위해 네트워크를 정탐하고 있는 사람일 수도 있다.
– 스머프 공격
스머프(Smurf) 공격은 공격자가 ICMP 에코 요청을 네트워크 브로드캐스트 주소로 스푸핑하는 기술로 오래됐지만 뛰어난 것이다. 스푸핑된 주소는 의도된 목표이며, 이 공격의 목적은 브로드캐스트 주소를 통한 에코 요청에 응답하는 시스템으로부터 목표에 가능한 많은 ICMP 에코 요청 패킷이 전송되게 하는 것이다. 네트워크가 브로드캐스트 주소에 대한 ICMP 에코 요청을 적절히 제어(예를 들어 시스코 라우터에서 no ip directed-broadcast 명령어를 사용)하지 않은 채 동작한다면 에코 요청을 수신하는 모든 호스트는 스푸핑된 출발지 주소로 응답할 것이다. 공격자는 대규모 네트워크의 브로드캐스트 주소를 사용해서 목표를 향해 생성되는 패킷의 수를 증가시킬 수 있다.
스머프 공격은 전용 제어 채널을 사용하며 대응할 수 있는 쉬운 라우터 설정이 없는 DDoS 공격을 수행하는 도구에 비하면 구식이다. 그러나 스머프 공격은 수행하기 매우 쉬우며, 최초의 소스 코드(http://www.phreak.org)를 쉽게 구할 수 있기 때문에 언급할만한 가치는 있다.
– DDoS 공격
네트워크 계층의 DDoS 공격은 동시에 목표 IP 주소로 패킷을 플러딩(flooding)하기 위해 많은 수의 시스템(잠재적으로 수천 개)을 사용한다. 이 공격의 목적은 정당한 통신을 막기 위히ㅐ 목표 네트워크의 대역폭을 쓰레기 데이터로 최대한 잠식시키는 것이다. 너무나 많은 시스템이 광대역을 통해 인터넷에 연결돼 있기 때문에 DDoS 공격은 좀 더 대처하기 어려운 네트워크 계층 공격 중 하나다. 공격자가 빠른 인터넷 연결을 가진 일부 시스템에 성공적으로 침투하면 대부분의 사이트에 손해를 끼치는 DDoS 공격을 수행할 수 있다.
DDoS 에이전트가 생성하는 각 패킷을 스푸핑할 수 있기 때문에 패킷이 공격 목표에 도달한 시점에 이런 패킷의 출발지 IP 주소에 어떤 값을 할당하는 것은 일반적으로 무의미한다.
일반적으로 DDoS 에이전트와 관련된 제어 통신을 탐지하는 것이 플러딩 패킷 자체를 탐지하는 것보다 더 효과적이다. 예를 들어 불분명한 포트 번호를 통해 제어 노드에서 좀비 노드로 전송되는 명령어를 탐지하는 것은 좋은 전략이다.(스노트 규칙집합의 여러 서명이 이런 유형의 통신을 찾는다) 이런 전략은 제어 통신을 통해 감염된