본문 바로가기
SK shieldus Rookies 16기

[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(21일차) - 수정 중

by Challenge programmers 2023. 11. 20.

오늘 학습 주제

1. Snort Rule

2. Detection Rule

3. 리눅스 구조

4. 파일 및 디렉터리 관리

 

 

 

 

 

Snort Rule


- 규칙 옵션 -

• 규칙 헤더에 해당하는 패킷 중 특정 패턴(문자열)을 정의해 놓은 영역

 

• 옵션 종류

- 일반옵션

- 흐름 옵션

- 페이로드

- HTTP 관련 옵션 등

 

• 옵션들은 ‘;’(세미콜론)으로 구분

 

- 일반 옵션 -

 

• 규칙에 대한 정보를 제공하는 옵션

• 검색하는 동안 어떤 영향도 미치지 않음

 

옵션 설명
msg • 규칙이 탐지될 경우 출력되는 메시지

• 공격유형과 정보를 기록
sid  규칙 식별자로 모든 규칙은 반드시 식별 번호를 가짐

• 예약된 식별자 : 0~2,999,999

• Local.rules에는 3,000,000이상부터 사용
rev • 규칙의 수정 버전을 나타냄

• 규칙이 수정 시 1 씩 증가
classtype • 규칙을 분류하는 옵션

• 클래스 명은 classfication.config 파일에 정의
priority • 규칙의 우선순위 지정

• 1 ~10까지의 수 사용, 숫자가 작을수록 높은 우선순위를 가짐

 

 

 

 

- Payload 옵션 -

악성 패킷을 탐지하는 옵션

옵션 설명
content 매칭할 문자열 지정
pcre 문자열로 표현하기 어려운 것들을 정규 표현식을 이용하여 정의 할 경우 사용

 

문자열 지정 content: “administrator”;

숫자 지정 content: “|121212|”;

정규표현식 지정 pcre: “/^select/”;

 

Payload 옵션 설명
content 매칭할 문자열 지정
nocase 대소문자 구별하지 않고 매칭
offset 매칭할 문자열의 위치 지정
depth 문자열의 범위 지정
distance Content 옵션값 이후 탐색할 위치 지정
within Content옵션값 이후의 탐색할 범위를 지정
pcre 문자열로 표현하기 어려운 것들을 정규 표현식을 이용하여 정의 할 경우 사용

 

 

 

Option Role Example
nocase 대/소문자 구별하지 않음  
offset 패킷의 데이터 영역이 시작되는 지점 을 기준으로 검사 시작 위치 지정 (content: “a”; offset:1)
depth Offset으로 시작된 검사의 종료 위치 지정(검사 종료 절대 위치) (content: “a”; offset:1 ; depth:1)

 

< offset >

content 패턴을 검사 할 시작 위치

첫 번째 바이트 위치가 0부터 시작

 

< depth >

offset부터 몇 바이트까지 검사할 것인지 지정

 

 

Option Role Example
distance 이전 패턴 검사가 종료된 시점을 기준으로
검사 시작 위치 지정
(content:“a”; content:“b”; distance:1;)
within Distance로 시작된 검사의 종료 위치 지정
(검사 종료 상대 위치)
(content:“a”; content:“b”; distance:1; within:1;)
rawbytes 인코딩 된 문자열 패턴의 디코딩 전처리기와 관계없이
Hexa 코드로 검사
(content: |3B 20|; rawbytes; )

 

< distance >

이전 content 패턴이 매치된 경우, 매치된 바이트로부터 몇 바이트

떨어진 위치에서 다음 content를 검사 할 것인지 지정

 

< within >

distance부터 몇 바이트 범위 내에서 지정된 패턴을 검사할 것인지 지정

 

 

- Header Rule Option -

Option Role Example
fragbits 단편화 여부 검사
M(More fragment)
D(Don’t fragment)
R(Reserved bit)
fragbits:M;
fragoffset 단편화된 패킷의 위치 검사 fragbits:M gragoffset:0;
ttl ttl값 검사 ttl:=128
tos TOS값 검사 tos:4
id IP 헤더 ID 값 검사 id:12345;

 

Option Role Example
Ipopts IP헤더 옵션 값 검사  
dsize 패킷 데이터 영역 길이(byte) 검사 dsize:<1024
flow TCP stream 전 처리로 패킷 방향 정의 flow:from_client;
from_client(to_server),
from_server(to_client)
established
seq 순서번호  
ack 응답값  
window TCP 헤더 윈도우값 window:55555 or window:!33333
sameip 출발지 목적지가 동일한 IP인지 조사  

 

 

- 흐름 옵션 -

패킷 방향과 세션 연결 상태 조건 검색

to)server, from_serverm to_client, from_client, etablished, stateless

 

 

 

 

Detection Rule Example


- Example 1 -

alert tcp $EXTERNAL_NET any ⟶ $HOME_NET any
(msg: “ TEST”; content: “S”; offset:2; depth:2; content: “R”; distance:3; within:2;
sid:1000001;)

 

3번째 byte 부터 2byte 범위에 S 패턴이 있는 지 검사, 패턴이 검사된 이 후 3byte 떨어진 위치에서

2byte 범위 내에서 R이라는 문자가 있는지 검색

 

- Example 2 -

alert tcp $EXTERNAL_NET any ⟶ $HOME_NET any
(msg: “ TEST”; content:|FFFF|; offset:9; depth:2; sid:1000001;)

 

10번째 byte 부터 2byte 범위에 FFFF 바이너리 패턴이 있는지 검사

 

 

- Example 3 -

alert tcp any any ⟶ any 80
(msg: “ Web Scan Detected”; content: “/administrator”;)

 

전송되는 패킷의 내용을 검사하여 “/administrator”란 문자열이 포함 된 경우 “Web Scan Detected”란 메시지로 로깅

 

 

 

- Example 4 -

alert tcp any any ⟶ any 80 (content: “root”; nocase;)

 

목적지 포트가 22인 모두 TCP 패킷에 대하여 페이로드의 첫번째 byte부터 10byte 범위 내에 소문자 login 문자열이 포함한 경우 alert 발생

 

 

- Example 5 -

alert tcp any any ⟶ any 22 (content: “login”; depth:10;)

 

목적지 포트가 22인 모두 TCP 패킷에 대하여 페이로드의 첫번째 byte부터

10byte 범위 내에 소문자 login 문자열이 포함한 경우 alert 발생

 

 

- Example 6 -

HTTP Flooding 공격 특징은 대부분 웹서버 공격 트래픽에서 최초 웹페이지에 대해

웹 접속 요청을 폭주시켜 세션자원을 소진검색 탐지 룰

alert tcp any any ⟶ any any (msg: “Get Flooding”; content:“Get / HTTP1.”; nocase;
depth:13; threshold:type threshold, track by_dst, count 10, seconds 1; sid:1000999)

 

- 첫 번째 바이트부터 13번째 바이트 범위 내에서 검색

(offset을 명시하지 않으면 첫번째 byte부터 검색)

 

- Get : http request line, / : 호스트의 default page , HTTP1. : HTTP 버전

 

- 목적지 IP주소를 기준으로 1초마다 10번째 이벤트마다 alert action을 수행시켜

과도하게 많은 alert event가 발생하는 것을 방지(매크로)

 

 

 

- Example 7 -

drop tcp any any ⟶ any any (msg: “ SYN/FIN Drop”; flags:SF;)

 

- 제어 플래그 중 SYN와 FIN이 동시에 설정되어 있는 TCP 패킷 차단한다

 

- SYN은 연결 요청, FIN는 연결 종료를 위한 플래그이므로 동시에 설정될 수 없는 비정상 패킷이다.

비정상 패킷은 IDS/IPS의 탐지를 우회하여 공격 또는 스캐닝 을 위한 목적으로

사용되므로 이를 탐지 및 차단해야 한다

 

 

- Example 8 -

alert tcp any any ⟶ any any (pcre: “ /POST.*Content\x2dLength\x3a\x20evilstring/”;)

 

- 목적지 주소 및 포트가 모두 any로 설정으로 모든 패킷을 검사한다. 이것은 장비에 많은 부하를 발생시킨다

 

- HTTP 서비스를 제공하는 IP주소 및 PORT 정보를 파악해서 목적지 IP주소와 Port에 대한 검사만

검사룰을 적용시켜 장비의 부하를 줄일 수 있다.

 

 

- Example 9 -

alert tcp any any ⟶ any 80
( msg:“XSS Detect”;
content:“GET”; offset:0; depth:3;
content:“/login.php?id=%3Cscript%3E”; distance:1; sid:1000500 );

 

- 첫바이트~ 세번째 바이트 내에서 GET이라는 문자 검색

 

- 첫번째 매치된 문자열에서 1바이트 떨어진 곳에서부터 해당 문자 검색

→ Detection 이 안 될 경우 ‘대소문자’ 옵션 첨부

 

 

- Example 10 -

OpenSSL 라이브러리의 하드비트(HeartBeat) 확장 모듈의 버그로 인해 발생하는

하트블리드(heartbleed) 취약점을 이용한 공격 탐지

alert tcp any any <> any [443,465,563]
(msg:“SSLv3 Malicious Heartbleed Request V2”;
content: “|18 03 00|”; depth:3;
content: “|01|”; distance:2, within:1;
content:! “|00|”; within:1; sid:100300;)

 

 

ⓐ 첫 바이트부터 3바이트 범위 내에서 패턴 감사

ⓑ 첫 번째 content가 매치 된 이후 2바이트 떨어진 위치에서 1바이트 내에서 지정된 패턴 검사

ⓒ 두 번째 content가 매치된 이후 1바이트 떨어진 위치에서 지정된 패턴 검사

 

 

 

 

리눅스 구조


- 리눅스 구성 요소 -

 

구성요소 기능
커널(kernel) 운영체제의 핵심 역할 프로세스, 메모리, 입출력(I/O), 파일 관리 등을 수행
쉘(shell) 명령어 해석기 사용자 명령의 입출력을 수행하며 프로그램을 실행
파일시스템(file system) 시스템을 관리를 위한 기본 환경 제공 정보를 저장하는 구조 제공

 

- 리눅스 커널(Linux Kernel) -

 

• 하드웨어와 응용 프로그램간의 다리 역할을 하는 커널(Kernel)을 의미

 

• 시스템이 부팅 될 때 load 되며 주된 역할은 시스템의 하드웨어 제어이다

 

. • 메모리, CPU, 디스크, 단말기, 프린터 등 시스템 자원 활용도를 높이기 위한

스케쥴링과 프 로그램 관리, 자료 관리 등을 수행

 

 

- 리눅스 배포판 -

리눅스 배포판 = ‘Kernel + GNU 소프트웨어(shell) + 자유 소프트웨어'

유료버전

무료버전

 

 

 

 

파일 및 디렉터리 관리


- 권한 설정 -

 

 

< 명령어 chmod / chown / chgrp >

명령어 설명
chmod 파일 허가권 변경 명령어

# chmod 777 sample.txt
chown / chgrp 파일의 소유권을 바꾸는 명령어

# chown centos.centos sample.txt

# chown centos sample.txt

# chgrp centos sample.txt

 

 

< 명령어 umask >

명령어 설명
umask • 명령어 umask는 디폴트 권한 값을 변경

• 새로 생성되는 파일이나 디렉터리의 기본 허가권 값을 지정

• 파일의 기본 권한 666, 디렉터리의 기본 권한 777

 

umask가 0075인 경우( 허가권 umask 값에 보수를 취한 다음에 AND 연산으로 권한 설정)

 

 

- 특수 권한 -

파일이나 디렉터리에 부여되는 추가적인 권한

특수 권한 설명
Set-UID Set-UID가 부여된 파일을 실행 시, 파일 소유자권한으로 인식
Set-GID Set-GID가 파일에 설정되어 있을 경우 소유한 그룹 권한으로 인식

Set-GID는 주로 디렉터리에 설정
- 사용자가 속한 그룹에 상관없이 디렉터리 소유 그룹권한으로 만들어짐
Sticky-Bit 공유디렉터리로 사용 ex) 게시판, 자료실

S == 실행 권한 없음

s == 실행 권한 있음

특수 권한과 일반은 공생

 

특수 권한 (권한 상승)
SetUID, SetGID • 프로세스가 실행되는 동안 해당 프로세스의 root 권한을 임시 가져오는 기능

• 프로세스가 사용자 보다 높은 수준의 접근을 요구 할 때 사용

 

  코드 절대값 특수권한 설정 특수파일 검색
SetUID(4) s 4000 chmod 4777 find / -perm 4000 –print
SetGID(2) s 2000 chmod 2777 find / -perm 2000 –print
Sticky bit(1) t 1000 chmod 1777 find / -perm 1000 –print

 

                                                      

- Hard link와 Symbolic link -

 

 

 

- 명령어 stat -

 

 

- 파일 및 디렉터리 관리 명령어 -

< touch >

touch
정의 • 파일의 최종 접근 시간, 수정시간 등 타임스탬프(Timestamp)를 변경

• 파일의 크기가 0인 빈(empty) 파일을 생성
사용 touch [option] 파일명
예시 ❶ touch a.txt
→ 파일이 존재하면 파일의 수정 시간(Modify Time)을 바꾸고 파일이 없을 경우에는 크기가 0인 빈 파 일 생성

❷ touch -t 201212222105 /etc/passwd
→ /etc/passwd 파일의 수정 시간(Modify Time)을 지정된 시간으로 변경

❸ touch -r a.txt b.txt
→ a.txt의 Access time 및 Modify time으로 b.txt 파일의 시간을 변경

 

 

< find >

find
정의 파일 또는 디렉터리 검색 명령어
사용 find [경로] [조건] [아규먼트] [액션]
조건 -name 이름으로 검색

-type → 파일 타입으로 검색( d : 디렉터리, f:파일)

-perm 권한으로 검색

-user 소유자로 검색

-size  파일 크기로 검색 (+: 이상, -:이하) C, K, M , G

-atime   파일의 마지막 접근 시간으로 검색

-mtime   파일의 마지막 수정 시간으로 검색
액션 -ls 결과 출력

-exec →
검색한 파일을 특정 명령어로 실행 -exec 실행명령어 {}\;