오늘 학습 주제
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 |
- 특수 권한 -
파일이나 디렉터리에 부여되는 추가적인 권한
특수 권한 | 설명 |
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 실행명령어 {}\; |
'SK shieldus Rookies 16기' 카테고리의 다른 글
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(23일차) (0) | 2023.11.22 |
---|---|
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(22일차) - 수정 중 (0) | 2023.11.21 |
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(20일차) - 수정 중 (0) | 2023.11.17 |
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(19일차) - 수정 중 (0) | 2023.11.16 |
[SK shieldus Rookies 16기] 클라우드 기반 스마트 융합 보안 과정 교육 정리(18일차) (0) | 2023.11.15 |