Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

의미없는 블로그

Part 04. 침해사고 분석 및 대응 - snort, iptables 본문

# 나/pentest (WEB)

Part 04. 침해사고 분석 및 대응 - snort, iptables

SaltLee 2019. 5. 8. 17:05

<Snort> p.453

 

alert tcp any any -> any 1:2023 ...  (1~2023 포트)

alert tcp any any <> any 1024: ...  (2024 포트 이상)

 

alert : alert 발생, 로그 남김

log : 로그 남김

pass : 패킷 무시

drop : 패킷 차단, 로그 남김

sdrop(silent) : 패킷 차단, 로그 안남김

reject : 패킷 차단, 로그 남김, TCP면 TCP Reset 전송, UDP면 ICMP Unreachable 전송

activate : alert 발생, dynamic rule 활성화

dynamic : 로그 남김

 

$EXTERNAL_NET : 외부 네트워크를 의미, 기본 any

$HOME_NET : 내부 네트워크를 의미

-> snort.conf 에 적절한 대역 설정하면 된다

 

이러한 룰들은 local.rules 에 작성한다

msg: 이벤트 이름

flow: 활성화 조건
 - established; TCP 연결 수립일 때
 - stateless; 상태와 상관없이 규칙 활성화, 얘는 flow: stateless; 아니고 그냥 stateless; 로 쓴다
 - to_server; 서버로 가는 패킷일 때
 - from_server; 서버에서 온 패킷일 때
 - to_client; 클라이언트로 가는 패킷일 때
 - from_client; 클라이언트에서 온 패킷일 때
 - only_stream; 재구성된 패킷, 연결이 맺어진 스트림에 속한 패킷일 때 (뭔소리?)
 - no_stream; only_stream 의 반대

 

content: 탐지할 내용
 - "/etc/passwd"; 이 문자열 탐지

 - !"/etc/passwd"; 이 문자열 안탐지
 - nocase; 소문자 구분 없이
 - "|2f6574632f706173737764|"; 바이너리로도 가능
 - "|2f6574632f|passwd"; 바이너리랑 텍스트도 가능

 - "\"pentest\""; 특수문자 탐지할때는 \ 붙임

 

offset:2; depth:3; 3번째부터 3개에
distance:6; within3; 7번째부터 3개에 (이전 패턴 매칭 후)

 

http_method; GET/POST

http_uri; /index.php

http_header; User-Agent: Mozilla/5.0

http_cookie; Cookie: craft_uid=6367fa21077a2a0b1575d7bec4ef7288

http_client_body; 요청값의 body 부분에서 확인 (POST 요청에서)

http_stat_code : 200 OK

http_stat_msg : 200 OK

 

flag: 

 - S; SYN

 - A; ACK

 - F; FIN

 - R; RST

 - P; PSH

 - U; URG

 - 0; NULL

flag:SF; SYN, FIN 플래그만flag:SF+; SYN, FIN 플래그에 다른것 추가flag:SF*; SYN 또는 FIN에다가 다른것 추가flag:!SF; SYN, FIN을 포함하지 않는

 

reference: cve-2019-xxxx; 외부 취약점 참조 시

classtype : 공격 유형 분류, 우선순위로 쓸 수도 있고

priority : 룰의 우선순위, classtype 우선순위 덮어쓴다

sid : 99 이하는 시스템에 예약된 것, 100~백만 이하는 snort 에서 제공하는 룰셋, 백만 이상은 사용자가 지정

rev : 룰의 버전번호, 수정 횟수

 

잡힌 로그를 보면.. 로그는 snort.log 에 남는다

tcpdump -r snort.log 로 본다

1) sid

2) rev

3) msg

4) classtype

5) priority

6) 탐지한 내용

7) reference : 알아서 관련 URL 링크 제공해주나 보다

 

alert tcp any any -> any any (logto:test; ....

해당 규칙의 로그를 test 에 저장

 

pcre 표현식

\ 특수문자 표현

^ 시작을 알림

$ 끝을 알림

. 임의의 문자 한개

[a-z] 괄호 내 문자 한개

[^0-9] 괄호 내 문자 제외하고 한개

| 또는 조건

* 바로 앞에 문자가 0번 이상

+ 바로 앞에 문자가 1번 이상

? 바로 앞에 문자가 0 또는 1번

{x} 바로 앞에 문자가 x번

{x,} 바로 앞에 문자가 x번 이상

{x,y} 바로 앞에 문자가 x번 이상 y번 이하

 

pcre:"/^(GET|POST)/";

GET 또는 POST 로 시작하는 문자열

 

tcp any any -> any any PCRE(/^POST.*Content\x2dLength\x2a\x20evilstring)

문제 : Rule에는 HTTP 프로토콜에 대한 정규식(POST, Content-Length가 포함)이지만 모든 포트 any로 설정되어 있어 HTTP서비스가 아닌 불필요한 트래픽에 대해서도 감시를 수행함. 시스템에 오버헤드 유발

해결방안 : tcp any any -> 웹서버IP 80 으로 바꾸어 시스템 부하를 감소

 

threshold 는 로그 발생량을 조절하는

threshold type limit, track by_src, count 2, seconds 10;

출발지 IP를 기준으로(by_src) 매 10초동안 2번째 이벤트까지(limit) action을 수행한다

threshold type threshold, track by_src, count 10, seconds 5;

출발지 IP를 기준으로(by_src) 매 5초동안 10번째 이벤트마다(threshold) action을 수행한다

threshold type both, track by_dst, count 10, seconds 1;

목적지 IP를 기준으로(by_dst) 매 1초동안 10번째 이벤트 시 한번 action을 수행한다 (Only 한번)

 

TCP SYN Flooding 공격의 예시

 

[iptables] - 474p

 

INPUT 체인 : 방화벽으로 들어오는 경로

OUTPUT 체인 : 방화벽에서 나가는 경로

FORWARD 체인 : 방화벽을 통과하는 경로

 

iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT 

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j LOG --log-prefix "[CONNLIMIT]"

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP 

iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

 

-A : append, 제일 마지막에 룰을 추가

-I : insert, 첫 행에 룰을 추가 -I n 은 n 행에 룰 추가

-D : delete, 룰 삭제, -D n 은 n 행에 룰 삭제

 

- 룰은 

-s : source IP

-d : destination IP

--sport : 출발지 포트

--dport : 도착지 포트

--icmp-type [메시지타입] : ICMP 메시지 타입

--tcp-flags [검사할 플래그] [설정되어야 할 플래그] : --tcp-flags ALL SYN,FIN 모든 플래그를 검사해서 SYN, FIN 플래그만 설정된 패킷을 탐지한다

 

-m state --state NEW : 최초로 들어온 패킷, TCP의 SYN 같은

-m state --state ESTABLISHED : 연결된 이후에 송수신 되는 패킷

-m state --state RELATED : 연관된 연결정보, FTP의 21/tcp, 20/tcp 같은

-m state --state INVALID : 어떤 상태에도 해당되지 않는 패킷

 

-m connlimit --conlimit-above 5 : 동시 연결 5개 초과 시 

 

-j ACCEPT : 해당 패킷을 허용

-j DROP : 해당 패킷을 차단한 후 아무런 응답 메시지도 전송하지 않는다

-j REJECT : 해당 패킷을 차단한 후 ICMP 에러 메시지로 응답

-j LOG : 탐지 로그를 남긴다 /var/log/messages 에 남긴다

 

 

 

 

 

[FDS]

 

FDS 는 이상감지시스템, 이상거래감지시스템, 이상금융거래탐지시스템

책에는 없는데 필기에 나온거라서..

 

보안솔루션의 한 종류라고 보면 될 것 같은데

금융거래에 대한 Data를 빅데이터로 축적하고 분석해서 이상거래를 탐지하는 것 같다

Back-End 블럭에서 단말기정보, 거래내용 등을 분석하고 탐지하여 차단한다고 한다

FDS의 4가지 주요 기능

1) 이용자의 정보 및 행위에 대한 정보수집

2) 분석 및 탐지 기능 : 이상거래행위를 탐지

3) 대응기능 : 이상거래행위에 해당하는 경우 거래 차단, 추가 인증

4) 모니터링 및 감사기능 

 

 

DBD p.526

 

 

<악성코드 종류> p.539

다운로더 - 다운로더 자체가 악의적이라기 보단 외부에서 추가 악성코드를 다운받는 기능

드롭퍼 - 자신 내부에서 추가 악성코드를 생성하여 드롭

인젝터 - 드롭퍼의 유형인데 자신의 데이터를 이용해 메모리에 악성코드 상주시키는

키로거 - 키보드 메시지 가로채는

백도어 - 특정 포트 열어두고 악의적인 행위 할 수 있는

트로이목마 - 일반적인 프로그램으로 가장하여 악의적인 행위 수행하는

랜섬웨어 - 파일 암호화

애드웨어 - 광고 목적으로 만들어진 악성코드

스파이웨어 - 사용자 동의없이 설치되어 행동하는 악성코드

 

 

 

<윈도우 레지스트리> p.543

 

 

<APT 공격> p.556

초기정찰 - 정보 수집 단계

초기침입 - 스피어 피싱, 워터링 홀, USB 등을 통한 침입

거점마련 - 백도어를 통한 공격도구 다운로드

권한상승 - 시스템 관리자로 권한상승

내부정찰 - 내부 네트워크 정보 수집

내부침투 - 내부의 다른 시스템을 공격하여 침투

지속성유지 - 레지스트리 조작, 서비스 등록, 작업 스케쥴러 등록 등 지속성 유지

목표달성 - 정보유출, 시스템 파괴 등

 

스피어 피싱

특정인을 표적(APT)으로 조작된 이메일 등을 보내서 악성 웹 사이트로 유도

 

워터링 홀

공격 대상(APT)이 주로 방문하는 웹사이트 등에 제로데이 취약점 등을 악용하여 악성코드 심기

ex) 웹사이트에 리다이렉트 코드 심고 사용자가 방문하길 기다림

 

<사이버 킬 체인> p.558

사이버 표적 공격을 단계별로 탐지/차단/대응하는 방어시스템

APT 공격 대응에 효과적이라고 하네

 

우선 단계별 공격절차가 있는데

정찰  ->  무기화  ->  전달  ->  Exploit  ->  설치  ->  명령 및 제어(C&C)  ->  목적수행

          (무기준비) (무기유포) (무기작동) (악성프로그램)

 

이를 방어하는 대응유형이 있는데

탐지(Detact) - 공격을 탐지하는 것

거부(Deny) - 공격자 접근을 차단하는 것

교란(Disrupt) - 공격을 위한 정보 흐름을 방해

저하(Degrade) - 공격 효과를 감소

기만(Deceive) - 정보를 조작해서 공격자가 착각하게해 공격자를 기만ㅋㅋ

억제(Contain) - 공격자 또는 공격도구를 파괴

 

Comments