본문 바로가기
정보보안

snort 룰 바디 설정, 페이로드/ 범위 관련 옵션

by 나석정 2022. 8. 17.
반응형

 

 

 

 

 

 

Snort 룰 바디 설정, 페이로드/범위 관련 옵션

 

저번 시간에는 snort 룰 바디 일반 옵션에 대해 알아보았습니다. 이번 시간에는 snort 룰 바디 설정 중 페이로드나 범위 관련 옵션에 대하여 알아보도록 하겠습니다. 바디 옵션에는 content, uricontent, offset, depth, distance, within, nocase가 있습니다. content는 페이로드에서 검사할 문자열을 지정해줍니다. text형식일 수도 있으며 binary 형식일 수도 있고 두 가지 형식이 복합되었을 수도 있습니다.

text 형식과 binary 형식은 다음과 같은 차이를 가지고 있습니다.

text 형식 content: "pattern", 해당 pattern 문자열 검사합니다
binary 형식 content: "|FF FF|", 파이프 기호 사이에 헥사값으로 표현합니다

!은 부정연산자입니다. content: !"pattern" 일 경우 해당 pattern 문자열이 없는지 검사합니다. ; \ " 세가지 틀수문자는 이스케이프 처리해서 사용해줍니다. 

uricontent는 content문자열을 전체 패킷과 비교하는 대신 HTTP 클라이언트 요청 URI 정보를 검사할 문자열을 지정합니다.

offset은 페이로드에서 content패턴을 검사할 시작위치를 나타냅니다. 페이로드의 첫 번째 바이트 위치는 0부터 시작합니다. depth는 offset부터 몇 바이트까지 검사할 것인지 지정합니다. distance는 이전 content패턴에 매치된 경우, 매치된 이후 바이트부터 몇 바이트 떨어진 위치에서 다음 content를 검사할 것인지를 지정해줍니다. within은 이전 content에 매치된 경우, distance로 부터 몇 바이트 범위 내에서 다음 content를 검사할 것인지 지정해줍니다. nocase는 페이로드 검사 시 대문자나 소문자를 구분하지 않는다는 뜻입니다. 바이너리 형식에도 마찬가지로 적용됩니다.

snort에서 offset, depth, distance, within등 페이로드 범위를 지정해주는 옵션을 사용하고 있습니다. 이렇게 지정 옵션을 사용하는 이유는 전체의 페이로드에 대하여 일일이 패턴 매치를 수행하는 것보다 페이로드의 일부분에 대해서 패턴 매치를 수행하는 것이 성능향상에도 도움을 주고 오탐도 줄여주는 장점이 있기 때문입니다. 페이로드에서 검사할 범위를 지정할 경우에는 미탐(false negative)이 발생하지 않도록 적절한 범위를 설정해야합니다.

 

 

 

snort룰 바디 설정, 페이로드/정규표현식 관련 옵션

 

정규표현식 관련 옵션에 대하여 알아보도록 하겠습니다. ^ 다음에 오는 문자가 문자열의 시작을 의미합니다. $ 바로 앞에 있는 문자가 문자열의 끝을 의미합니다. .은 임의의 문자 한 개를 의미합니다. [ ]는 집합 안에 지정한 문자들 중 하나와 일치합니다. 예를 들어 [abc]일 경우 a,b,c 문자 중 하나를 나타냅니다. 또 [a-zA-Z]일 경우 a에서 z사이 또는 A에서 Z사이의 문자 중 하나를 나타냅니다. [0-9]일 경우 0에서 9 사이의 숫자 중 하나입니다. [^]는 집합 안에 지정한 문자들을 제외한 임의의 문자 하나와 일치합니다. 이해하기 쉽도록 예를 들어보겠습니다. [^0-9]는 숫자를 제외한 임의의 문자 하나라는 의미를 가진 정규표현식 입니다.  | 는 | 앞에 오는 문자열과 뒤에 오는 문자열 중 하나와 일치합니다. 일반적으로 항목들을 묶어주는 ()와 함께 사용하는데요. 예시를 통해 알아보도록 하겠습니다. (one|two|three)는 one, two, three 문자열 중 하나를 나타냅니다. *는 * 앞에 오는 문자가 0회 이상있음을 나타냅니다. 예를 들어 He*llo는 Hllo(o), Heello(o), Hello(o)는 형식에 맞습니다. Hallo(x), ello(x)는 형식에 맞지 않습니다. +는 + 앞에 오는 문자가 1회 이상 나타납니다. ?는 ? 앞에 오는 문자가 0회 또는 1회 나타납니다. {x}는 {x} 앞에 오는 문자가 정확히 x회 나타납니다. 예를 들어 He{2}llo라면 Heello가 맞는 해석이 되겠지요. {x,}는 {x,} 앞에 오는 문자가 x회 이상 나타납니다. He{1,}llo : Hello와 Heello 등이 해당되겠네요.

 

snort는 문자열 탐지의 유연성을 갖도록 pcre 옵션을 지원합니다. (정규표현식 문법을 지원한다는 뜻) snort에서 pcre 옵션은 슬래시(/) 기호 사이에 정규 표현식을 입력합니다.

반응형

댓글