CentOS 8 Http 2.4 에 mod_security 설치하기 (YUM)

리눅스/Security|2020. 11. 12. 10:30
반응형

CentOS 8, yum 으로 설치된 httpd 에 mod_security 를 추가로 설치하는 방법입니다.


1. 모듈 설치

# dnf -y install mod_security


2. OWASP 룰 설치 및 적용

# cd /etc/httpd

# git clone https://github.com/SpiderLabs/owasp-modsecurity-crs.git


# cd owasp-modsecurity-crs

# cp -arp crs-setup.conf.example /etc/httpd/modsecurity.d/crs-setup.conf

# vi /etc/httpd/modsecurity.d/crs-setup.conf

문서 하단부의 pass 를 deny 로 변경

SecAction \

 "id:900990,\

  phase:1,\

  nolog,\

  deny,\

  t:none,\

  setvar:tx.crs_setup_version=320" 


# cd rules

# cp -arp ./* /etc/httpd/modsecurity.d/activated_rules/


# cd /etc/httpd/modsecurity.d/activated_rules/

# cp -arp REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf.example REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf

# cp -arp RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf.example RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf


3. 적용

# systemctl restart httpd


4. 확인

웹브라우저에서 다음과 같이 웹페이지로 공격시도를 해봅니다.


http://도메인/index.html?cmd=rm



반응형

댓글()

CentOS 8 에 YUM 으로 APM 설치하기 (특정 확장자에서 PHP 코드 사용 포함)

리눅스/APACHE|2020. 11. 10. 10:25
반응형

OS 환경 패키지 업데이트

# yum -y update


기본 라이브러리 설치

# yum install -y libjpeg* libpng* freetype* gd-* gcc gcc-c++ gdbm-devel libtermcap-devel


아파치 설치

# yum install -y httpd*


마리아DB 설치

# yum install -y mariadb*


PHP 설치

# yum install -y php php-common php-opcache php-cli php-gd php-curl php-mysqlnd


환경 설정

# vi /etc/httpd/conf/httpd.conf


<IfModule dir_module>

    DirectoryIndex index.html index.php

</IfModule>


# vi /etc/php.ini


short_open_tag = On

date.timezone = "Asia/Seoul"


# vi /etc/my.cnf.d/mariadb-server.cnf


[mysqld] 섹션에 아래 내용 추가 (한글이 웹상에서 잘 표시되도록 설정)

character-set-client-handshake=FALSE

collation-server=utf8_general_ci

character-set-server=utf8 


적용

# systemctl restart httpd

# systemctl restart php-fpm

# systemctl restart mysqld


php 코드를 html 파일에서 사용하려면 아래 작업을 추가로 진행 해줍니다.


# vi /etc/httpd/conf.d/php.conf


<IfModule !mod_php5.c>

  <IfModule !mod_php7.c>

    # Enable http authorization headers

    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1


    <FilesMatch \.(php|phar|html)$>    // 확장자 추가

        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"

    </FilesMatch>

  </IfModule>

</IfModule> 


# vi /etc/php-fpm.d/www.conf


security.limit_extensions = .php .php3 .php4 .php5 .php7 .html    // 주석 해제 및 확장자 추가

 listen.allowed_clients = 0.0.0.0    // 수정


적용

# systemctl restart httpd

# systemctl restart php-fpm





반응형

댓글()

아파치 설치 에러 libaprutil-1.so: undefined reference to `XML_SetElementHandler collect2: error: ld returned 1 exit status apache make

리눅스/APACHE|2020. 11. 9. 16:55
반응형

아파치 2.4.46 설치 도중 아래와 같은 메세지를 만났습니다.


(make 에러)

libaprutil-1.so: undefined reference to `XML_SetElementHandler 

collect2: error: ld returned 1 exit status apache make


이경우 아래와 같이 조치합니다.


# vi build/config_vars.mk


AP_LIBS 으로 시작되는 행을 찾아서 맨 뒤에 -lexpat 를  추가하고 다시 컴파일 합니다.


# make clean

# make

반응형

댓글()

Error 403, 404 를 특정 html 페이지로 출력하기

리눅스/APACHE|2020. 11. 4. 08:17
반응형

없는 파일이나 접근 불가능한 페이지에 접근할 경우 특정 html 파일을 출력할 수 있습니다.

각각의 사이트 VirtualHost 설정에 아래 내용을 추가 합니다.


ErrorDocument 403 /404.html

ErrorDocument 404 /404.html


그리고 DocumentRoot (소스 최상위 디렉토리) 에 404.html 파일을 만들어 안내하고 싶은 내용으로 채우면 됩니다.

아파치 데몬을 재시작 하여 적용합니다.


# systemctl restart apache2



반응형

댓글()

MongoDB 내용을 텍스트 파일로 추출하기

리눅스/MongoDB|2020. 10. 28. 09:03
반응형

MongoDB 내용을 텍스트 파일로 추출해야 할 일이 있어서 알아봤는데

그 방법에는 두 가지가 있습니다.



[ 첫번째 방법 ]


우선 아래와 같이 도큐멘트의 개수를 확인합니다.

# mongo sysdocu -u prince -p --quiet --eval 'db.members.count()'

12


* 설명 : prince 계정으로 sysdocu 데이터베이스의 members 컬렉션 도큐멘트 개수 확인


그리고 출력된 개수와 동일하거나 많은 수의 범위까지 파일로 추출합니다.

저장 형태는 toArray() 로 인해 key 별로 줄바꿈이 되어 예쁘게 출력 되지만,

리눅스에서 텍스트를 가공하고자 할때는 한줄로 표시되는 것이 편하므로 해당 toArray() 는 제외합니다.


# mongo sysdocu -u prince -p --quiet --eval 'DBQuery.shellBatchSize = 20; db.members.find({}).limit(20).toArray()' > result.json


* 설명 : 도큐멘트 개수 조회 결과가 12 이므로 12로 하거나 더 많은 20으로 해도 됩니다.


result.json 파일에 내용이 저장 되었습니다.



[ 두번째 방법 ]


# mongo sysdocu -u prince -p |tee result.txt


위와 같이 실행하면 별다른 반응없이 일반적인 MongoDB 콘솔 로그인이 됩니다.

하지만 MongoDB 콘솔을 빠져 나올때 까지 (exit) 화면에 출력되는 내용은

result.txt 파일에 저장되게 됩니다.

화면 출력이 이루어져야 하므로 도큐멘트 개수가 많은 경우 첫번째 방법보다 속도가 느립니다.


반응형

댓글()

MySQL 중복된 데이터만 조회하기

리눅스/MySQL|2020. 10. 23. 15:59
반응형

아래 쿼리 예제는 contents 테이블에서 title 컬럼의 값이 중복일 때, title 과 개수를 출력 합니다.


SELECT title, count(*) as CNT FROM contents GROUP BY title HAVING CNT > 1;


+--------------+-----+

| title              | CNT |

+--------------+-----+

| family         |   2 |

| other           |   3 |

+--------------+-----+

2 rows in set (0.00 sec)



반응형

댓글()

MongoDB 외부 파일 내용을 불러와서 실행하기

리눅스/MongoDB|2020. 10. 20. 11:05
반응형

쉘스크립트로 MongoDB 쿼리를 실행하기 어려운 경우가 있습니다. (변수 사용 등)

이럴 경우 일반 텍스트 파일을 만들고, mongodb 에서 이를 실행하도록 하면 됩니다.



쿼리 내용을 텍스트로 저장

# vi test.txt

db.sysdocu.insert({"Date": "2020-10-20"})



실행 방법 1

# mongo NEWDB -u sysdocu -p 12345678 --eval 'load("test.txt")'



실행 방법 2

(mongodb 로그인 후)

> load("test.txt");


반응형

댓글()

MongoDB 데이터 업데이트 하기 (upsert : 없으면 insert, 있으면 update), $inc 를 이용한 덧셈

리눅스/MongoDB|2020. 10. 20. 09:13
반응형

아래 예제를 통해 결과를 확인하면 이해가 빠릅니다.

upsert 를 사용하게 되면 조건에 맞는 데이터가 없을 경우 insert 되고, 있을 경우 내용이 update 됩니다.

여기에 $inc 를 이용하여 덧셈 까지 적용하였습니다.


> db.Counting.find();

아무 내용 없음


> db.Counting.update({"Date":"2020-10-20"}, {"$inc":{no:1}}, upsert=true);

WriteResult({

"nMatched" : 0,

"nUpserted" : 1,

"nModified" : 0,

"_id" : ObjectId("5f8e2742dce4436d25b4f5a2")

})

no 에 값 1을 입력


> db.Counting.find();

{ "_id" : ObjectId("5f8e2742dce4436d25b4f5a2"), "Date" : "2020-10-20", "no" : 1 }

update 를 사용 했지만 값이 없는 상태 이므로 insert 로 적용 되었습니다.


> db.Counting.update({"Date":"2020-10-20"}, {"$inc":{no:2}}, upsert=true);

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

이번엔 no 에 값을 2 입력


> db.Counting.find();

{ "_id" : ObjectId("5f8e2742dce4436d25b4f5a2"), "Date" : "2020-10-20", "no" : 3 }

처음 입력한 값 1 에 2를 더하여 no 가 3이 되었습니다. 



* 여러개의 key 를 업데이트 하기
> db.Counting.update({"Date": "2020-10-20"}, {"$inc": {man: 1, woman: 1}}, upsert=true);
WriteResult({
"nMatched" : 0,
"nUpserted" : 1,
"nModified" : 0,
"_id" : ObjectId("5f8e40d1dce4436d25b4fec4")
})



반응형

댓글()

MongoDB 도큐멘트를 AND 또는 OR 조건으로 가져오기

리눅스/MongoDB|2020. 10. 16. 11:17
반응형

AND 조건일 때는 아래와 같이 사용 합니다.

db.Date20201015.count({$and: [{Priority:{$regex:"1"}}, {Time:{$regex:" 09:"}}]})


OR 조건일 때는 위 예시에서 아래와 같이 OR 문자로만 바꿔주면 됩니다.

db.Date20201015.count({$or: [{Priority:{$regex:"1"}}, {Time:{$regex:" 09:"}}]})



반응형

댓글()

MongoDB 컬렉션 삭제가 되지 않을때

리눅스/MongoDB|2020. 10. 13. 14:37
반응형

> db.202009.drop()

uncaught exception: SyntaxError: unexpected token: numeric literal :

@(shell):1:2


이와 같이 어떤 사유에서 특정 컬렉션이 삭제되지 않는 경우가 있습니다.

이경우 getCollection 을 이용하여 삭제하면 됩니다.


> db.getCollection("202009").drop()

true




반응형

댓글()

Snort 규칙 (공격 분류, 우선 순위 정보 포함)

리눅스/Security|2020. 10. 6. 15:02
반응형
posted by 초식사자 2010/11/30 13:58

-규칙 헤더

alert tcp $EXTERNAL_NET any -> $HOME_NET 21

 

헤더

내용

alert

alert, log, pass, dynamic, activate

출력 포맷을 의미한다. 이 출력 포맷은 연결리스트 트리 헤더의 맨 상위 부분과 비교된다.

tcp

TCP, UDP, IP,

ICMP

사용되는 프로토콜을 의미하며 연결리스트의 상위 부분과 비교된다.

$EXTERNAL_NET

·

출발지 IP 주소를 가리킨다. (기본 설정은 any)

any

any, 포트 번호

출발지 포트를 의미한다.

->

·

패킷의 방향을 가리킨다.

$HOME_NET

·

Snort 규칙에서는 $Variables를 이용한다. 변수는 snort.conf파일의 맨 앞부분에서 정의되며 나머지 부분에서 그 변수를 사용한다. Snort가 실행될 때 Snort 규칙 파서는 $HOME_NET 변수의 값을 snort.conf에 설정된 값으로 치환한다.

21

any, 포트 번호

공격의 목적지 포트이다. 해당 포트에 대한 모든 잠재적 공격을 모니터링 한다.

 

 

-규칙 옵션

(msg : "FTP EXPLOIT wu-ftpd 2.6.0 site exec format string overflow Linux"flow:to_server, establishedcontent: "|31c031db31c9b046cd8031c031db|"reference:bugtraq,1387reference:cve,CAN-2000-0573reference arachnids,287; classtype:attempted-admin; sid:344rev:4;)

 

규칙

내용

msg

경고에서 출력할 메세지이다.

flow

규칙 옵션은 탐지 플러그인과 연결되는 키워드를 포함하고 있는데 flow 옵션은 연결 리스트의 세 번째 축이며 clientserver 탐지 플러그인을 가리킨다.

clientserver 플러그인은 특정 패킷이 기존에 수립된 세션의 일부인지를 검사하기 위해 stream4 전처리기를 이용한다.

content

"|31c031db31c9b046cd8031c031db|" 패킷이 Rule Tree 노드와 일치한다는 것은 기존에 세션이 맺어졌다는 것을 의미한다. Snort는 content 옵션에 나온 문자열을 Boyer-Moore 검색 알고리즘으로 패킷과 비교한다.

Reference

이 키워드는 서드 파티 공격 정보에 대한 참조 정보를 제공한다. 예를 들어 이 부분에는 Bugtraq, McAfee, 각 벤더의 공격 정보에 대한 URL이 들어갈 수 있다.

Classtype

Snort는 사용자가 공격을 쉽게 이해하고 우선 순위를 결정할 수 있도록 공격을 몇가지 종류로 분류해 놓았다. 각 분류는 기본 우선 순위를 가지고 있기 때문에 사용자는 자신이 관찰한 이벤트의 우선 순위를 쉽게 결정할 수 있다. (1: 높음, 2: 중간, 3: 낮음)

Sid

Snort의 규칙을 구분하는 식별자이다. Snort의 모든 규칙은 식별 번호를 가지고 있으며, 리포팅 프로그램에서 규칙을 구분하는데 사용 되기도 한다. (규칙 정보 :http://www.snort.org/snort-db )

 

설명

~99

예약되어 있음

100~1,000,000

www.snort.org에서 배포하는 규칙

1,000,001~

커스텀 규칙

 

rev

규칙의 버전 번호를 가리킨다. 오픈 소스 커뮤니티에서 만든 Snort 규칙은 false-positive를 줄이기 위해 개정 절차를 거치게 됨에 따라 rev의 값이 변한다.

 

-기타 규칙 옵션

 

규칙

내용

depth

패턴을 찾기 위해 검사할 바이트 수를 지정한다.

offset

검색을 시작할 패킷의 특정 위치를 지정한다.

nocase

대소문자를 구별하지 않는다.

session

프로토콜 세션의 평문 데이터를 화면에 출력한다. 값으로 all 또는 printable을 사용한다.

uricontent

content 문자열을 전체 패킷과 비교하는 대신 URI 부분과 비교하게 한다.

priority

classtype에서 설정된 우선순위를 수동으로 덮어쓴다.

logto

해당 규칙의 로그를 특정 파일에 남긴다.

tag

특정 규칙과 관련된 추가 패킷을 로그로 저장한다.

tag:<HOST/SESSION>,<HOW MANY>,<SECONDS/PACKETS>,<SRC/DES>;

dsize

패킷 페이로드의 길이 또는 길이 범위를 명시한다.

rpc

원격지에서 접근 가능한 RPC 서비스를 식별한다. 이 규칙을 제대로 사용하기 위해서는 UDP 프로토콜의 목적지 포트 111를 사용하는 규칙에 포함해야한다.

rpc:<APPLICATION>,<PROCEDURE>,<VERSION>;

resp

능동적으로 프로토콜 연결을 끊는다.

 

TCP 옵션

설명

rst_all

양측 연결을 끊는다.

rst_rcv

수신측 연결을 끊는다.

rst_send

송신측 연결을 끊는다.

 

 

ICMP 옵션

설명

strings:icmp_all

양측 연결을 끊는다.

icmp_host

ICMP host unreachable 메시지를 전송한다.

icmp_net

ICMP network unreachable 메시지를 전송한다.

icmp_port

ICMP port unreachable 메시지를 전송한다.

 

 


공격 우선 순위

 

심각한 공격 (우선 순위 1)

공격 분류

내용

attempted-admin

관리자 권한 획득 시도

attempted-user

일반 사용자 권한 획득 시도

shellcode-detect

실행 가능한 코드 탐지

successful-admin

관리자 권한 획득 성공

successful-user

일반 사용자 권한 획득 성공

trojan-activity

네트워크 트로이 목마 탐지

unsuccessful-user

일반 사용자 권한 획득 실패

web-application-attack

웹 애플리케이션 공격

 

 

중간 수준의 공격 (우선 순위 2)

공격 분류

내용

attempted-dos

DoS 시도

attempted-recon

정보 유출 시도

bad-unknown

잠재적인 악성 트래픽

denial-of-service

DoS 탐지

misc-attack

사소한(miscellaneous) 공격

non-standard-protocol

비표준 프로토콜 또는 이벤트

rpc-portmap-decode

RPC 쿼리 디코드

successful-dos

DoS 공격

successful-recon-largescale

대규모 정보 유출

successful-recon-limited

정보 유출

suspicious-filename-detect

수상한 파일 이름 탐지

suspicious-login

수상한 사용자 로그인 탐지

system-call-detect

시스템 콜 탐지

unusual-client-port-connection

클라이언트가 비정상적인 포트를 사용함

web-application-activity

잠재적으로 취약한 웹 애플리케이션 접근

 

 

위험도가 낮은 공격 (우선 순위 3)

공격 분류

내용

icmp-event

일반 ICMP 이벤트

misc-activity

사소한 행위

network-scan

네트워크 스캔

not-suspicious

의심스러운 트래픽이 아님

protocol-command-decode

일반적인 프로토콜 명령 디코드

string-detect

수상한 문자열 탐지

unknown

알 수 없음

 

 

Flow Control

-Flow Control 옵션은 패킷의 방향을 클라이언트 서버 통신 스트림과 관련해서 정의 할 수 있도록 한다. 이 옵션은 Snort의 TCP 재조합 모듈과 함께 동작하며 패킷 content와 방향을 클라이언트 서버 구조와 관련해서 파악할 수 있도록 한다.

 -Flow Control 옵션

 

옵션

내용

to_server

서버로 전송된 패킷에 대해 true를 리턴한다.

from_server

서버로부터 받은 패킷에 대해 true를 리턴한다.

to_client

클라이언트로 전송된 패킷에 대해 true를 리턴한다.

from_client

클라이언트로부터 받은 패킷에 대해 true를 리턴한다.

only_stream

재구성된 패킷 또는 연결이 맺어진 스트림에 속한 패킷에 의해서만 활성화된다.

no_stream

only_stream과 반대의 의미를 가진다.

established

연결이 수립된 TCP 연결 또는 세션에 속한패킷에 의해서만 활성화 된다.

stateless

상태와 관계없이 규칙을 활성화할 때 사용된다. stateless 옵션을 사용할 때는 “flow:” 접두사를 붙이지 않는다.

 

 

IP옵션

 

옵션

내용

sameip

출발지와 목적지 ip주소가 동일한 패킷을 찾는다.

fragbits

IP 헤더의 분할 비트와 예약 비트를 분석한다.

 

설명

D

분할하지 않음 (Don't Fragment)

M

분할 패킷이 남아있음 (More Fagments)

R

예약 비트 (Reserved Bit)

 

ipopts

패킷을 비교하기위해 IP옵션을 지정한다. 한 규칙에서 한 가지 IP옵션만 적용 가능하다.

 

설명

eol

IP목록의 마지막을 지정한다.

lsrr

느슨한 소스 라우팅 (loose source routing)

ssrr

엄격한 소스 라우팅 (strict source routing)

rr

라우트 기록 (Record route)

satid

IP 스트림 식별자

sec

IPSec

ts

타임스탬프

nop

옵션이 없음

 

ID

패킷의 정적 IP ID값을 검사한다.

tos

TOS (Type of Service) 값을 검사한다.

TTL

TTL(Time to Live) 값을 검사한다. >, <, = 연산자도 지원한다.

 

 

TCP옵션

 

옵션

내용

seq

패킷의 정적 TCP 순서번호를 검사한다.

flags

특정 플래그가 설정되어 있는지 설정되어 있지 않은지, 다른 플래그와 함께 사용되는지를 판단한다.

 

설명

A

ACK 플래그

F

FIN 플래그

P

PSH 플래그

R

RST 플래그

S

SYN 플래그

U

URG 플래그

0

아무 플래그도 설정 되어 있지 않음

1

예약 비트1

2

예약 비트2

+

특정 플래그가 켜져있고 그 밖에 다른 플래그도 켜져 있는지 검사한다. ex:) A+

*

명시된 플래그 중 하나의 플래그라도 일치하는지 검사한다. ex:) *AS

!

특정 플래그가 꺼져 있는지 검사한다.

 

ack

ack 값이 0인지 검사한다.

 

 

ICMP 옵션

 

옵션

내용

icmp_id

ICMP ID 값을 검사한다.

icmp_seq

ICMP Sequence 값을 검사한다.

icode

ICMP Code 값을 검사한다.

itype

ICMP type 값을 검사한다.

 

 

Snort 규칙 트리 구성 요소

-규칙 사슬 집합

 

규칙

설명

Activation

경고를 발생시키고 또 다른 dynamic 규칙을 활성화한다.

Dynamic

Activation 규칙에 의해 활성화 되며 트래픽을 로그로 저장한다.

Alert

경고를 발생시키고 패킷을 로그로 남긴다.

Pass

패킷을 무시한다.

Log

트래픽을 로그로 저장한다. (경고를 발생시키지 않는다. )

 

 

-Rule Tree Nodes(RTN)

규칙 사슬 각각에 대하여 프로토콜별 연결리스트가 존재하는데 프로토콜별 연결 리스트의 맨 상당 노드를 RTN이라고 부른다.

 

규칙

설명

TCP

TCP 프로토콜

UDP

UDP 프로토콜

ICMP

ICMP 프로토콜

IP

IP 프로토콜

 

 

-Option Tree Nodes(OTN)

프로토콜 연결리스트 안에는 OTN이라고 불리는 규칙 옵션이 존재한다.

 

규칙

설명

Content

Boyer-Moore 패턴 비교 알고리즘에서 검사하는 컨텐츠

Flow

탐지 플러그인으로의 링크

 

 

패킷 비교

alert tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS

(msg:"WEB-IIS..\.. access"; flow:to_server,established; content : "|2e2e5c2e2e|"; reference: bugtraq,2218; reference:cve, CAN-199-0299; classtype:web-application-attack; sid:974; rev:6;)

 
 

 

 

 

과정

설명

규칙 헤더 검색

패킷이 탐지 엔진에 도착하면 Snort는 Activation, Dynamic, Alert, Pass, Log 순으로 규칙 헤더를 검색한다. 위 규칙의 출력 포맷은 Alert이기 때문에 Snort는 Activation과 Dynamic에서는 이 규칙을 찾지 못한다.

RTN 검색

그 다음에 Alert 사슬로 이동하는데 패킷을 비교하는 방법은 패킷의 프로토콜에 따라 다르다. TCP 노드 리스트에서는 IP와 Port 정보가 일치하는 규칙을 찾는다.

OTN 검사

일치하는 규칙을 찾았으면 그 RTN의 열을 따라가면서 각 OTN을 검사하여 일치하는 규칙을 찾는다.

옵션노드에는 탐지 플러그인을 가리키는 포인터와 문자열 검색 알고리즘을 사용하여 검사할 패턴이 존재한다.

※flow 플러그인은 패킷이 기존에 연결된 세션에 일치하는지를 검사한다.

패킷 내용 검색

규칙이 content 옵션을 포함하고 있을 경우 문자열 검색 알고리즘을 이용하여 패킷의 내용을 검색한다. content 옵션에는 2진, 텍스트, 그리고 2가지를 혼합한 형식의 데이터가 들어올 수 있다.

※Snort 2.0은 Aho-corasick, Wu-Manber, Boyer-Moore 세가지 패턴 매칭 알고리즘이 사용가능하다.

경고 발생

일치하는 규칙을 찾았으면 트리 구조를 빠져 나온 뒤 Alert 트리의 맨 꼭대기로 돌아와서 명시된 출력 포맷을 상용하여 경고를 발생시키고 모든 과정이 종료된다.

 

 

Pass 규칙

-특정 트래픽을 무시하고 싶은 경우 BPF 필터 언어를 사용하거나 Pass 규칙을 사용한다.

-Pass 규칙을 활성화 하려면 Snort 규칙 처리 순서를 변경해야하기 때문에 -o 옵션을 사용하여 규칙 처리 순서를 Pass, Activation, Dynamic, Alert, Log 순으로 바꾸어주어야 한다.

-Pass 규칙을 사용하는 경우 서명과 일치하는 모든 패킷은 무시한다.

※Pass 규칙은 모든 패킷을 통과시킬 우려가 있기 때문에 조심하여 사용해야 한다.

 

pass tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS

(flow:to_server,established; content:"|2e2e5c2e2e|";)

 

Log 규칙

-Log 규칙은 규칙과 일치하는 모든 패킷을 경고를 발생시키지 않고 단지 정의된 출력 포맷으로 로그로 저장하기 위해 사용된다.

※Log 규칙은 2진 모드로 실행된 Snort에서 제대로 동작하지 않는다.

 

log tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS

(flow:to_server,established; content:"|2e2e5c2e2e|";)

 

Dynamic, Activation 규칙

dynamic, Activation 규칙을 사용하면 패킷에 대한 경고를 발생시킨 뒤, 그 후에 따라오는 패킷들을 로그로 저장할 수 있다.

-activate 규칙의 activates 값과 dynamic 규칙의 activated_by 값이 두 규칙을 이어주는 역할을 한다.

 

EXTERNAL_NET에서 HTTP 서버로 향하는 트래픽 128개를 로그로 저장

activate tcp $EXTERNAL_NET any -> $HTTP_SERVERS $HTTP_PORTS

(msg:"WEB-IIS ..\.. aceess";flow:to_server,established; activates:25;content : "|2e2e5c2e2e|"; reference:bugtraq,2218;reference:cve,CAN-199-0229;classtype:web-application-attack;sid:974;rev:6;)

dynamic tcp $EXTERNAL_NET any -< $HTTP_SERVERS $HTTP_PORTS

(activated_by:25; count:128;)

 


[출처] http://leekyu.net/board_03/522

반응형

댓글()