시큐아이
닫기
SECUI Information

PR CENTER

보기
제목 Snort_httpinspect 우회 취약점 해결방법
작성자 관리자 작성일 2016.10.18
 
 
업무 편의 위해 설정한 임의 정책, 공격자 악용해 공격 시도
Snort_httpinspect 우회 취약점, IDS/IPS 벤더 패치 배포 안돼 … 자체 패치 수행·정책 변경해야

방화벽, IPS/IDS와 같은 보안 솔루션의 도입에 따라 이를 회피하기 위한 우회 공격 시도는 계속되고 있고, 이러한 우회 기술(EvasionTechnique)은 갈수록 다양해지고 있다.
HTTP Verb Tampering은 이러한 우회 기술 중, 하나로 HTTP 요청 패킷 헤더의 메소드(Method) 필드를 조작해 보안 솔루션이나 웹 서버의 보안 정책을 우회하는 기술이다.
 일부 웹 서버 플랫폼은 터널링이나 게이트웨이 등 다양한 기능을 수행하기 위해, RFC에 규정되지 않은 임의의 메소드를 일반적인 웹 통신에서 사용되는 GET 메소드와 동일하게 처리하도록 설계되어 있다. 하지만 공격자들은 이를 악용해 보안 정책을 우회하는 공격을 시도하는 사례가 종종 발생하고 있다.
 네트워크 보안 솔루션에서 이러한 HTTP Verb Tampering을 적절히 처리하지 못할 경우, 웹 공격 탐지 룰이 적용돼 있더라도 해당 공격을 탐지하지 못하는 경우가 발생한다

스노트 룰 기반 패턴 매칭 우회 공격 주의
 
스노트(Snort)는 룰 기반의 패턴 매칭을 통해 네트워크 트래픽을 분석하고 로깅 및 차단하는 오픈 소스 네트워크 침입 탐지 시스템(IDS)으로, 다양한 상용보안 솔루션에서 탐지 엔진으로도 널리 사용된다. 이 프로그램은 잠재적인 악성 트래픽을 탐지하기 위해 전송된 네트워크 트래픽에 스노트 룰을 매칭한다.
 스노트의 Snort_httpinspect 모듈은 룰 매칭 전, 수신된 HTTP 트래픽에 대한 사전 처리를 수행하는 전처리 모듈이다. 이 모듈은 수신된 HTTP 패킷의 헤더에서 메소드. URI, User-Agent, cookie, HTTP Body 등의 필드를 분류해 <그림 1>과 같이 각 필드의 값을 각 각의 버퍼에 저장한다.
 

Snort_httpinspect 모듈은 HTTP 패킷의 헤더를 필드 별로 분류하기 전에 헤더의 처음 시작 위치에 특정 특수 문자가 존재할 경우, 해당 특수 문자를 헤더에서 제외한다. HTTP 헤더의 처음 시작위치에 ‘0x0E’보다 작고 ‘0x08’보다 크거나, ‘0x20’인 값이 존재하면 헤더의 처음 시작 위치를 가리키는 포인터를 다음 위치로 이동하는데, 이는 2004년 일본의 보안 전문가 카나토코(Kanatoko)가 발견한 HTTP 탐지 룰 우회 취약점을 패치한 코드다.
 해당 취약점은 등과 같은 특수 문자를 HTTP 헤더의 처음 시작 위치에 삽입해 uricontent 옵션을 사용한 스노트 룰의 탐지를 우회한다.
 하지만 여전히 스노트의 Snort_httpinspect 모듈에 HTTP탐지 룰 우회 취약점이 존재한다. 이 취약점은 카나토코는 취약점 패치 코드에서 임의로 조작된 HTTP 메소드 필드를 적절히 처리하지 못하기 때문에 발생한다.
 Snort_httpinspect 모듈은 HTTP 헤더의 처음 시작 위치를 가리키는 포인터를 설정한 후, HTTP 헤더의 처음 시작 위치를 가리키는 포인터로부터 공백(Whitespace| x20)이나 nonascii문자까지의 값을 HTTP 메소드 필드로 분류한다.
 RFC에 따르면 HTTP 리퀘스트 헤더의 첫 번째 라인은 메소드, URI, 버전 필드가 순서대로 위치하고, 각 필드는 공백 (‘ x20’)으로 구분된다. 만약 HTTP 헤더의 메소드 필드에 값이 존재하지 않는다면, 헤더의 처음 시작이 공백(‘ x20’) 으로 시작되고, 카나토코 취약점 패치 코드에 의해서 HTTP 헤더의 처음 시작 위치 포인터가 메소드 필드를 건너뛴 URI 필드의 처음 위치로 설정된다.
 이로 인해 <그림 2>와 같이 메소드 버퍼에 URI가 URI 버퍼에 버전이 저장되는 등 HTTP 헤더의 각 필드의 값이 잘못 분류돼 제 버퍼에 저장되지 않는다. 이에 따라 스노트 룰에서 uricontent, http_method, http_uri 등과 같이 Snort_httpinspect 모듈에 의해서 전처리된 HTTP 버퍼의 값을 참조하는 옵션을 사용할 경우, HTTP 메소드 필드가 빈 값으로 설정된 패킷을 제대로 탐지하지 못한다.
 

 
 원격의 공격자는 HTTP 헤더의 메소드 필드를 빈 값으로 조작한 HTTP Verb Tampering을 통해 Snort의 HTTP 관련 탐지 룰을 우회할 수 있다. 공격에 성공한다면, 스노트의 HTTP관련 탐지 룰을 우회해 의도한 공격 트래픽을 목표 시스템에 전송할 수 있다. <그림 3>은 <그림 2>에 해당하는 공격 트래픽이다.
 

2016년 09월 현재 벤더에서 배포하는 스노트 프로그램의 최신 정식 버전인 스노트 2.9.8.3는 패치가 이뤄지지 않은 상태이다. 취약한 스노트 버전을 사용하는 침입 탐지 시스템은 해당 취약점에 대한 자체 패치를 수행하거나 해당 취약점에 영향받는 옵션을 사용하는 스노트 룰들을 content 옵션을 사용하도록 수정하고, 관련 Modifier를 삭제할 것을 권고한다.


- 영향받는 스노트 옵션
uricontent, http_method, http_uri, http_raw_uri, http_header, http_raw_header, http_cookie, http_raw_cookie, http_client_body, PCRE
‘U’ Modifier, PCRE ‘I’ Modifier, PCRE ‘H’ Modifier, PCRE ‘D’ Modifier, PCRE ‘M’ Modifier, PCRE ‘C’ Modifier, PCRE ‘K’ Modifier


시큐아이 시큐아이 R&D센터 개발2팀 송병걸




 
이전글 시큐아이, 사랑의 김장 나누기 행사 2016-12-06
다음글 한국교육전산망 서울지역협의회 세미나 참가 2016-09-26
목록