내부망
인트라넷 Zone도 Server Zone과 Worker Zone으로 나뉜다.
IPS와 유사하게 비정상적인 활동을 탐지하지만 실질적으로 활동을 차단하거나 제어하여 보안 위반을 방지한다.
💡 IDS는 시그니처와 일치하는 패킷을 로그로 생성하고 SIEM은 로그를 분석한다.
방화벽은 악성코드를 탐지할 수 없기 때문에 등장 ⇒ IDS는 악성코드 감지가능
snort 시그니처 기반의 IDS의 Detection Rule 기본구조
alert tcp 192.168.10.30/32 40090 -> 192.168.10.20/32 23
cd /etc/nsm/rules/local.rules
편집기로 파일 열기
nano local.rules
vi local.rules # vi 편집기 이용 시 하이라이팅 적용됨
액션 | 프로토콜 | s.ip | s.port | 방향 | d.ip | d.port | (룰 옵션) |
rule header : 액션 ~ d.port
rule option : (룰 옵션)
1) rule header(액션)
탐지 시 패킷을 처리하는 방법에 대한 내용
종류 | 내용 |
---|---|
alert | alert 발생 + 탐지 정보 로그파일에 기록 |
log | 패킷에 대해 로그 기록 |
pass | 패킷 무시 |
active | |
dynamic | active 시그니처에 의해서 유요하게 된 경우 한 쪽 패킷 기록 |
2) rule header(프로토콜)
탐지할 프로토콜 tcp, udp, icmp, ip
3) rule header(IP/PN)
형식) ip주소
+포트번호
4) rule header(방향)
패킷방향 송신지 -> 목적지
송수신자 구별 X 모든 패킷 탐지 <>
예제
alert icmp any any -> any any ( msg:"Ping Test"; sid:3000001;)
규칙 헤더에 해당하는 패킷 중 특정 패턴(=문자열)을 정의해놓은 영역
;
으로 구분규칙에 대한 정보를 제공하는 옵션
종류 | 설명 |
---|---|
msg | 경고 이벤트 메세지 |
sid | 시그니처 아이디 지정 ✔ 0~99번 예약 ✔ 3,000,001번 이상 권장 |
dsize | 버퍼 오버플로우 탐지 시 사용 |
nocase | 패턴 매칭 시 대소문자 구분 X |
rev | 규칙 버전 |
priority | 우선순위(값이 작을 수록 먼저 매칭) |
classtype | snort 규칙 분류 |
reference | 취약점 참고 URL정보 |
악성 패킷을 탐지하는 옵션
매칭할 문자열 지정
# 문자열 지정
cotent: "admire";
# 숫자 지정
content: "|121212|";
문자열로 표현하기 어려운 것들을 정규 표현식을 이용하여 정의 할 경우 사용
# 정규표현식 지정
pcre: “/^select/”;
문자열의 범위 지정
Content 옵션값 이후 탐색할 위치 지정
Content 옵션값 이후의 탐색할 범위 지정
탐지 룰 예제
alert tcp 192.168.10.40/32 40090 -> 192.168.10.20/32 23 (
msg: "Hacker Detection";
content: "hacker";
nocase;
sid: 3000001)
pcre:"/a.a/"
총 3글자에 첫번째 자리와 세번째자리가 a
인 것만 탐지
pcre:"/(one|two)apple/"
pcre:"/boan?"
여기서 ?
는 n이 안나오거나 1개만 나와야 한다.
pcre:"/pro*ject/"
여기서 *
은 o가 안나와도 되고 여러 개가 나와도 된다.
pcre:""
여기서 +
은 적어도 n이 1개 이상 나와야한다.
pcre:"/bo2.4an/"
bo 뒤에 문자가 2개 이상 4개 미만까지만 나와도 된다.
pcre:"/[A-Z]{3}/"
A-Z 중 아무거나 문자 3개 이상 나오면 탐지된다.
# rules파일이 있는 rules 디렉토리로 이동
cd /etc/nsm/rules
# nano 편집기로 .rules 파일 수정
nano local.rules
# 3계층은 포트번호를 달고 있을 수 없기 때문에 any로 쓴다.
alert icmp any any -> any any ( msg:"Ping Test"; sid:3000001;)
# 1번 옵션만 구성
# vi 편집기로 열면 문법이 맞는지 하이라이팅되어 나온다.
작성 완료하면 Ctrl
+ O
→ Ctrl
+ X
# .rules 파일에 작성한 내용 확인
cat local.rules
# snort만 재실행
nsm --sensor --restart --only-snort-alert
패스워드를 알아내는 공격
공통적으로 나타나는 문자열
102.168.168.10.20
의 텔넷 패스워드 크래킹 시그니처 만들어놓기login incorrect
메세지 발생(=dection 발생) alert
/ log
발생텔넷 접속
# msf
telnet 192.168.10.20
Trying 192.168.10.20...
Connected to 192.168.10.20.
Escape character is '^]'.
_ _ _ _ _ _ ____
_ __ ___ ___| |_ __ _ ___ _ __ | | ___ (_) |_ __ _| |__ | | ___|___ \
| '_ ` _ \ / _ \ __/ _` / __| '_ \| |/ _ \| | __/ _` | '_ \| |/ _ \ __) |
| | | | | | __/ || (_| \__ \ |_) | | (_) | | || (_| | |_) | | __// __/
|_| |_| |_|\___|\__\__,_|___/ .__/|_|\___/|_|\__\__,_|_.__/|_|\___|_____|
|_|
Warning: Never expose this VM to an untrusted network!
Contact: msfdev[at]metasploit.com
Login with msfadmin/msfadmin to get started
metasploitable login:
Password:
로그인 3회 실패
metasploitable login: root
Password:
Login incorrect
metasploitable login: root
Password:
Login incorrect
metasploitable login: root
Password:
Connection closed by foreign host.
와이어샤크로 텔넷 감지 해보면 텔넷은 평문으로 비밀번호를 저장한다. 그래서 회사에서 텔넷을 사용하지 않는다.
여기서 시그니처는 Login incorrect
다. 왜? 텔넷 패스워드 크래킹 시 공통적으로 나타나는 문자열 이기 때문이다.
Security Onion 접속
Snort 규칙 업데이트
# rules파일이 있는 rules 디렉토리로 이동
cd /etc/nsm/rules
# nano 편집기로 .rules 파일 수정
nano local.rules
alert icmp any any -> any any ( msg:"Telnet Fail";content:"login incorrect"; nocase; sid:3000002;)
# 1번 옵션만 구성
# vi 편집기로 열면 문법이 맞는지 하이라이팅되어 나온다.
작성 완료하면 Ctrl
+ O
→ Ctrl
+ X
# .rules 파일에 작성한 내용 확인
cat local.rules
# rule 업데이트
rule-update
# snort만 재실행
nsm --sensor --restart --only-snort-alert
공격이 Detection 됐는지 확인
But 항상 Detection이 됐다고 다 공격이라고 판단할 수 없다. 왜? 오랜만에 접속한 경우 로그인에 실패할 수도 있기 때문에 그래서 Threshold를 사용한다.
특정 패킷양, 임계시간, IP가 잡힐 경우 로그를 발생시켜주는 옵션
패킷양 기준 - 발생 건당 로그 생성
threshold:type threshold, count 100, seconds 2;
임계시간 기준 - 시간 증가에 따른 로그 생성
threshold:type limit, count 100, cesonds 2;
IP 기준
threshold:type both, count 100, seconds 2;
Telnet Attack 관련 Detection rule 생성
1. cd /etc/nsm/rules/local.rules
# 단순패스워드
alert tcp 192.168.10.20/32 23 -> any any (
msg: "Password Crack";
# 30초 안에 'login incorrect'가 3번 발생하면 출발지를 기준으로 로그 발생
threshold:type both, track by_src, count 3, secounds 30;
content:"login incorrect"; nocase; sid:3000004;
)
cat local.rules
로 제대로 작성됐는지 확인rule-update
룰 생성 완료했으면 룰 업데이트패킷방향
과 세션 연결 상태
조건 검색
# 예시
flow:to_client established;
$ sudo su -
$ hping3 --icmp --rand-source 192.168.10.20 -d 2000 --flood
Data: 585858 ...
[Length: 2000]
sudo su
cd /etc/nsm/rules
vi local.rules
룰 추가
# alert icmp any any -> 192.168.10.20 any
alert icmp any any -> any any (
msg:"Ping of Death 8 Class";
content:"|58585858|";
sid:3000004;
threshold:type both, track by_src, count 50, seconds 10;
)
룰 업데이트
rule-update