글 작성자: nouu

http://www.yes24.com/Product/Goods/43219492

 

오픈소스 도구를 활용한 웹 모의해킹과 침해대응 - YES24

다양한 오픈소스 도구를 활용하여 웹 취약점 진단부터 침입 탐지 분석까지의 실무를 배워보자.『오픈소스 도구를 활용한 웹 모의해킹과 침해대응』은 웹 취약점 점검 도구의 기능을 알아보고

www.yes24.com

 

해당 서적을 바탕으로 작성하였습니다.

 

위의 서적을 참고하여 VM Workstation 16과 Workstation Pro 가상화를 이용해 모의해킹과 침해대응 환경 구축을 완료했다. 호스트 컴퓨터가 CPU 코어가 적은 노트북이라 렉이 무지하게 걸리긴 하지만... 램이 8GB라 동시에 돌아가는데는 문제가 없다. 

 

 

 

 

 

스노트 룰의 규칙옵션(Rule Options)

규칙 옵션이란 규칙 헤더에 해당하는 패킷 중 특정 패턴(문자열이나 HEX)와 매칭되는 영역이다. 규칙 옵션 영역에 사용하는 옵션 종류는 일반 옵션, 흐름 옵션, 페이로드, HTTP 관련 옵션 등이 있다. 이 옵션들은 ';' (세미콜론)으로 구분한다. 

 

룰 헤더가 만약 alert TCP $EXTERNAL_NET any -> $HTTP_SERVERS any 라고 한다면 헤더 다음 규칙 옵션으로 ()괄호를 쳐서 규칙 옵션을 작성한다. alert TCP $EXTERNAL_NET any -> $HTTP_SERVERS any (룰 옵션)

 

 

 

1. 일반 옵션(General Options)

일반 옵션은 규칙에 대한 정보를 제공하는 옵션으로 검색하는 동안은 어떠한 영향도 미치지 않는 옵션이다. 

 

msg(message)

작성한 스노트 규칙이 탐지될 경우에 출력되는 메시지이다. 보통은 공격 유형의 명칭과 정보를 기록하여 탐지 로그에 대한 정보를 쉽게 판단할 수 있다. 공격 유형은 앞쪽에 작성하며 이어서 부연 설명을 작성한다. 보통 공격 유형을 앞쪽에 작성하며 이어서 부연 설명을 뒤에 작성한다.  부연 설명은 취약점이 발생한 위치나 버전, 공격 파일명 등을 적는다.

 

msg: "메시지 내용(공격 유형 + 부연 설명)"

 

 

sid

스노트 규칙을 구별하는 식별자이다. 모든 규칙은 반드시 해당 식별 번호를 가진다. 0 ~ 2,999,999까지는 예약된 식별자(reserved sid)로 local.rules에 작성하는 규칙은 3,000,000 이상부터 사용한다.(포트 원리와 비슷) 값을 지정할 때 "(쌍따옴표)는 사용하지 않는다. 

 

sid: 3,000,000;

 

 

 

rev(revision num)

스노트 규칙의 수정 버전을 나타낸다. 스노트 규칙을 수정했다면 rev 값을 1씩 증가시킨다. 

 

rev: 1;

rev: 2;

 

 

 

classtype

스노트 규칙을 분류하는 옵션으로 옵션 값에 사용하는 클래스 이름은 classification.config 파일에 정의되어 있다. (etc/nsm/센서명/classification.config에 정의되어 있다.)

 

 

해당 파일에 정의된 클래스명을 옵션 값으로 사용하거나 "config classification: 클래스명, 설명, 우선순위"로 작성하여 새로운 클래스를 추가한다.

 

ex) classtype:attempted-admin; // 해당 클래스 종류는 관리자 권한 획득 시도 입니다.

 

 

 

priority(우선 순위 지정 옵션)

스노트 규칙의 우선 순위를 지정하며, 1 ~ 10까지의 수를 사용한다. 숫자가 작을수록 높은 우선 순위를 나타내고, 숫자가 클수록 낮은 우선 순위로 나타낸다. classtype을 사용했다면 classification.config 파일에 정의된 기본 우선 순위가 적용된다. (즉, classtype를 사용했다면 default로 priority도 종속)

 

priority:1;

 

 

 

 

reference(참조 옵션)

작성한 스노트 규칙의 참고가 되는 URL을 지정한다. etc/nsm/센서명(nouu-vm-ens33)/reference.config 파일에 정의된 레퍼런스명을 사용하면 URL 주소를 모두 입력하지 않고 링크로 활성화할 수 있다. 'config reference: [레퍼런스명][인자 값이 제외된 URL]'로 작성한다. 

 

 

만약 reference: cve,2012-1823; 을 썼다면 레퍼런스명은 cve가 될 것이며, 레퍼런스 인자는 http://cve.mitre.org/cgi-bin/cvename.cgi?name=2012-1823

 

CVE - CVE-2012-1823

sapi/cgi/cgi_main.c in PHP before 5.3.12 and 5.4.x before 5.4.2, when configured as a CGI script (aka php-cgi), does not properly handle query strings that lack an = (equals sign) character, which allows remote attackers to execute arbitrary code by placin

cve.mitre.org

이 될 것이다. (해당 취약점은 PHP 5.4.2 버전 이전에서 발견된 원격 코드 실행 관련 취약점)

 

또한 reference url, url 명으로 입력하여 하나의 URL을 완성시킬 수 있다. EX) reference url, nouu94.tistory.com

 

 

 

 

 

 

 

 

2. 페이로드(PayLoad)

페이로드는 스노트 규칙에서 실질적으로 악성 패킷을 탐지하는 옵션이다. 해당 옵션들을 사용하여 규칙 헤더에 해당하는 패킷 데이터를 1차적으로 선별하고, 선별이 완료된 패킷들을 2차적으로 악의적인 문자열을 매칭한다.

 

 

content

패킷 데이터에서 매칭할 문자열을 지정하는 옵션이다. 텍스트 또는 16진수 형태로 구분해서 지정할 수 있다. 단 16진수로 지정할 경우엔 지정 값을 파이프라인인 | 을 사용한다. content 옵션은 스노트 규칙에 다중으로 사용할 수 있으며 특수 문자인 따옴표, 쌍따옴표, 역슬래시, 슬래시 등을 매칭하려면 이스케이프 문자(\)를 사용해야 한다. 

 

content: "script"

content: "|25 33 43 73 63|"

 

 

 

nocase

content 옵션에서 작성한 패턴은 매칭 시에 대소문자를 구별한다. 예를들어서 content:"abc";로 작성하면 abc는 매칭 가능하지만 ABc나 aBc 등은 매칭이 되지 않는다. 하지만 nocase 옵션을 content 옵션 뒤에 작성하면 대소문자를 구별하지 않고 매칭시킨다. 웹 공격 시에 대소문자를 섞어서 공격하는 경우가 많기 때문에 nocase 옵션은 필히 사용해야 한다.

 

content: "abc"; nocase; //ABC, Abc, abC 모두 탐지가 가능하다.

 

 

 

offset

패킷의 페이로드에서 매칭을 시작할 문자열의 위치를 지정한다. offset 옵션에서 지정한 바이트만큼 떨어진 위치부터 탐색한다. 시작 문자는 0바이트이다. 만약 offset 옵션을 0으로 지정한다면 페이로드 시작부터 탐색하며 1로 지정할 경우 2번째 바이트부터 탐색한다.

 

offset: 숫자;

 

 

 

distance

이전 content 옵션 값 이후에 탐색할 위치를 지정한다. 다음 예에서는 abc를 매칭한 위치부터 10바이트 뒤에 test를 문자열이 있는지 탐색한다. 

 

content:"abc"; nocase; content:"test"; distance:10; 

 

 

 

within

이전 content 옵션 값 이후 탐색할 범위를 지정한다. 다음 예의 경우 abc를 매칭한 위치부터 10바이트 내에 test를 문자열이 있는지 탐색한다. 

 

content:"abc"; nocase; content:"test"; within:10;

 

(distance 옵션과 within 옵션은 서로 상반된 관계이다.)

 

 

 

pcre(Perl Compatible Regular Expressions, 펄 호환 정규표현식)

스노트 규칙은 content 옵션으로 매칭할 문자열을 지정하지만 해당 옵션은 문자열의 집합을 커버하기에 한계가 있다. 이럴 경우를 대비하여 스노트 규칙은 정규 표현식인 PCRE를 지원한다.

 

 

 

 

 

3. HTTP 옵션 

HTTP 옵션은 content 옵션 값이 탐색할 범위를 HTTP 영역으로 한정할 때 사용한다. 

 

 

http_method

패킷 페이로드 중에서 HTTP 메소드 영역에서 content 옵션 값을 매칭한다. 

메서드 : GET, POST, PUT< HEAD, DELETE, TRACE, OPTIONS, CONNECT

content:"GET"; http_method;

 

 

http_uri/http_raw_uri

패킷 페이로드 중 URI 영역을 탐색한다. raw가 포함된 옵션은 디코딩되지 않은 페이로드를 대상으로 탐색한다.

 

 

 

http_cookie/http_raw_cookie

패킷 페이로드 중 쿠키 값을 탐색한다. 

 

 

 

http_header/http_raw_header

패킷 페이로드 중 HTTP 헤더 영역을 탐색한다. HTTP 헤더 영역은 요청 메시지와 응답 메시지에 상관 없이 탐색한다. 

 

 

 

http_client_body

패킷 페이로드 중 HTTP 바디 영역을 탐색한다. POST 방식으로 메시지를 전송할 경우에 바디영역에 변수 값이 작성되어 전송된다. POST 방식으로 전송할 경우 바디 영역에 악성 문자열이 있는지 매칭시킨다. 

 

 

 

http_stat_code

HTTP 응답 메시지에서 상태코드 영역을 탐색한다. 

상태코드 : 1xx(조건부 응답), 2xx (성공에 대한 응답), 3xx (리다이렉션에 대한 처리), 4xx(요청 응답 오류), 5xx(서버 오류)

 

 

 

http_stat_msg

HTTP 응답 메시지에서 상태 메시지 영역을 탐색한다. 

 

 

 

http_user_agent

HTTP 헤더의 user agent의 값을 content 값과 비교한다. 

content:"Mozilla/5.0"; http_user_agent;

 

 

 

 

 

 

4. 흐름 옵션(Flow Option)

패킷의 방향을 정의하는 옵션. 패킷의 방향뿐 아니라 세션 연결 상태의 조건에 해당되는 패킷을 한번 더 걸러내는 역할을 한다.