[SK shieldus Rookies 16기][시스템보안] NSM

Jina·2023년 11월 20일
0

SK shieldus Rookies 16기

목록 보기
20/59
post-custom-banner

보안망 구성도


보안장비 설치모드

  • 모드 종류
    1. Inline 모드
      • 물리적 네트워크 경로 상에 보안장비 설치
      • 패킷 차단 목적의 장비에 적용
      • 장점 : 실시간 패킷을 탐지하고 차단
      • 단점 : 장비에 장애가 발생할 경우 전체 네트워크 장애로 확산될 위험성 有
    2. Out of Path 모드
      • 미러링 장비(ex. TAP)를 통해 복제된 패킷을 받아서 탐지하는 모드
      • 패킷 차단 기능이 없는 탐지 목적의 장비에 적용
      • 네트워크 경로를 벗어난 곳에 위치
      • 장점 : 전체 네트워크 가용성에 영향을 주지 않고, 패킷 탐지 가능
      • 담점 : 복제된 패킷을 탐지하기 때문에 실시간 패킷 차단 불가

내부망
인트라넷 Zone도 Server Zone과 Worker Zone으로 나뉜다.

Security Onion Structure

IPS (Instrusion Prevention System)

정의

  • 침입방지 시스템
  • 네트워크 모니터링, 보고, 차단, 제거 등의 예방 조치를 취하는 네트워크 보안 도구

등장배경

  • 기존 보안 제품의 한계와 공격 유형의 변화에 대응하기 위해 등장

특징

  • 악의적인 트래픽 식별 및 공격 차단, 트래픽 수정하는 역할
  • 네트워크 어느 곳에나 배포 가능하며, 일반적으로 엔터프라이즈 예지, 경계 엔터프라이즈 데이터 센터 등에 배포

IDS와 차이점

IPS와 유사하게 비정상적인 활동을 탐지하지만 실질적으로 활동을 차단하거나 제어하여 보안 위반을 방지한다.

IDS(Intrusion Detection System)

정의

  • 침입 탐지 시스템
  • 방화벽은 IP/Port 기반으로 패킷을 차단하는 네트워크계의 경비원
    IDS/IPS는 비정상 행위 및 악용을 탐지하는 네트워크계의 CCTV ! (IPS는 차단도 가능)
  • 허용되지 않은 IP/Port의 접근을 차단 한 나머지의 행위를 탐지/차단 할 것이냐
    비정상 행위를 차단 한 나머지에 대한 IP/Port 접근을 탐지/차단 할 것이냐

💡 IDS는 시그니처와 일치하는 패킷을 로그로 생성하고 SIEM은 로그를 분석한다.

등장배경

방화벽은 악성코드를 탐지할 수 없기 때문에 등장 ⇒ IDS는 악성코드 감지가능

종류

  • NIDS : 특정 망을 관제
  • HIDS : 특정 호스트의 관제

관제 방법

  • 시그니처 탐지 기법 : 관제 룰을 기반으로 탐지
  • 이상행위 탐지 기법 : 통계치를 기반으로 탐지

관제 대응방법

  • alert : 관리자에게 경고 후 로그로 남기기

Rule

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.ips.port방향d.ipd.port(룰 옵션)

rule header : 액션 ~ d.port
rule option : (룰 옵션)

1) rule header(액션)
탐지 시 패킷을 처리하는 방법에 대한 내용

종류내용
alertalert 발생 + 탐지 정보 로그파일에 기록
log패킷에 대해 로그 기록
pass패킷 무시
active
dynamicactive 시그니처에 의해서 유요하게 된 경우 한 쪽 패킷 기록

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;)

규칙 옵션

규칙 옵션이란?

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

규칙 옵션 종류

  1. 일반 옵션
  2. 흐름 옵션
  3. 페이로드
  4. HTTP 관련 옵션 등
  • 옵션들은 세미콜론 ; 으로 구분

일반옵션

일반옵션이란?

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

일반옵션의 특징

  • 검색하는 동안 어떤 영향도 미치지 않음
  • 무료로 제공되는 rule : 기존에 알려진 공격들의 signiture
  • 유료로 제공되는 rule
  • 실제로 컨텐츠나 시그니처가 들어있는 옵션은 아님

일반옵션 종류

종류설명
msg경고 이벤트 메세지
sid시그니처 아이디 지정
  ✔ 0~99번 예약
  ✔ 3,000,001번 이상 권장
dsize버퍼 오버플로우 탐지 시 사용
nocase패턴 매칭 시 대소문자 구분 X
rev규칙 버전
priority우선순위(값이 작을 수록 먼저 매칭)
classtypesnort 규칙 분류
reference취약점 참고 URL정보

payload 옵션

payload 옵션이란?

악성 패킷을 탐지하는 옵션

payload 옵션 종류

cotent

매칭할 문자열 지정

# 문자열 지정
cotent: "admire";
# 숫자 지정
content: "|121212|";

pcre

문자열로 표현하기 어려운 것들을 정규 표현식을 이용하여 정의 할 경우 사용

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

depth

문자열의 범위 지정

diistance

Content 옵션값 이후 탐색할 위치 지정

within

Content 옵션값 이후의 탐색할 범위 지정

탐지 룰 예제

alert tcp 192.168.10.40/32 40090 -> 192.168.10.20/32 23 ( 
						msg: "Hacker Detection";
						content: "hacker";
                        nocase;
                        sid: 3000001)

pcre

예제1

pcre:"/a.a/" 

총 3글자에 첫번째 자리와 세번째자리가 a인 것만 탐지

예제2

pcre:"/(one|two)apple/"

예제3

pcre:"/boan?"

여기서 ?는 n이 안나오거나 1개만 나와야 한다.

예제4

pcre:"/pro*ject/"

여기서 *은 o가 안나와도 되고 여러 개가 나와도 된다.

예제5

pcre:""

여기서 +은 적어도 n이 1개 이상 나와야한다.

예제6

pcre:"/bo2.4an/"

bo 뒤에 문자가 2개 이상 4개 미만까지만 나와도 된다.

예제7

pcre:"/[A-Z]{3}/"

A-Z 중 아무거나 문자 3개 이상 나오면 탐지된다.


Snort 규칙 업데이트

# 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 + OCtrl + X

# .rules 파일에 작성한 내용 확인
cat local.rules

# snort만 재실행
nsm --sensor --restart --only-snort-alert

텔넷 패스워드 크래킹

패스워드 크래킹이란?

패스워드를 알아내는 공격

시그니처란?

공통적으로 나타나는 문자열

관제사 시나리오

  1. 패스워드 크래킹 관련 rule → 시그니처 파악
  2. 102.168.168.10.20의 텔넷 패스워드 크래킹 시그니처 만들어놓기
  3. login incorrect 메세지 발생(=dection 발생)
  4. alert / log 발생

[ Kali ]

텔넷 접속

# 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 다. 왜? 텔넷 패스워드 크래킹 시 공통적으로 나타나는 문자열 이기 때문이다.

[ NIDS ]

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 + OCtrl + X

# .rules 파일에 작성한 내용 확인
cat local.rules

# rule 업데이트
rule-update

# snort만 재실행
nsm --sensor --restart --only-snort-alert

[ Sguil ]

공격이 Detection 됐는지 확인

But 항상 Detection이 됐다고 다 공격이라고 판단할 수 없다. 왜? 오랜만에 접속한 경우 로그인에 실패할 수도 있기 때문에 그래서 Threshold를 사용한다.


Threshold

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;
)
  1. cat local.rules 로 제대로 작성됐는지 확인
  2. rule-update 룰 생성 완료했으면 룰 업데이트

Flow 옵션

Flow 옵션이란?

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

Flow 옵션 종류

  • 패킷 방향
    • to_server
    • from_server
    • to_client
    • from_client
  • 세션 연결 상태
    • etablished
    • stateless
# 예시
flow:to_client established;

프로토콜 옵션

프로토콜 옵션 종류

  • IP header 필드
  • TCP header 필드
  • HTTP header 필드
    ...

과제

  1. [Kali] Ping of Death 공격
  2. [Kali] wireshark로 해당 공격에 대한 시그니처를 발견
  3. [NIDS] 관제 룰 생성
  4. [Kali] 공격
  5. [NIDS] sguil에서 공격탐지 확인

[Kali] Ping of Death 공격

$ sudo su -
$ hping3 --icmp --rand-source 192.168.10.20 -d 2000 --flood

[Kali] 와이어샤크에서 시그니처 확인

Data: 585858 ...
[Length: 2000]

[NIDS] 룰 생성

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

[Kali] Ping of Death 공격

profile
공부 기록
post-custom-banner

0개의 댓글