이것저것

[SK shieldus Rookies 29기] 16일차 본문

SK Shieldus Rookies 29

[SK shieldus Rookies 29기] 16일차

atfield1988 2025. 12. 5. 09:07

저번 시간에 이어서 마저 살피고 추가적으로 Snort까지 달려보자~
오늘은 좀 쉽지 않다. 마음을 단단히 먹고 따라와야 한다.


침입차단시스템(IPS) 필터 상세

IPS 7가지 핵심 필터

순서 필터 명칭 주요 기능
1 방화벽 필터 액세스 제어 및 패킷 필터링 (IP, 포트 등)
2 QoS 필터 프로토콜별, 서비스별, IP 영역별 트래픽 모니터링 및 대역폭 제어
3 무결성 확인 필터 FTP, DNS, Mail, Web 등 프로토콜 동작 표준 위반 패킷 조사
4 Signature 필터 악성코드, 취약성, 웜(Worm)에 대한 탐지 및 차단
5 DoS/DDoS 필터 서비스 거부 공격 및 스캔 공격 탐지/차단
6 L7 필터 TCP/IP 단편화, 웹 우회 공격 등 L7 프로토콜 디코딩을 통한 필터링
7 콘텐츠 필터 데이터 콘텐츠 내용을 기준으로 필터링 여부 결정

🔄 패킷 처리 흐름

유해 패킷 → [공격 검사 필터] → [무결성 검사 필터] → [차단]
정상 패킷 → [공격 검사 필터] → [무결성 검사 필터] → [허용]
결함 패킷 → [공격 검사 필터] → [무결성 검사 필터] → [분석/로그]

WAF (Web Application Firewall)

WAF 개념

정의: 웹 컨텐츠(HTTP/HTTPS)를 분석하여 웹 공격을 탐지 및 차단하는 기능을 가진 방화벽

특징:

  • OWASP Top 10 공격 방어에 특화
  • 요청 파라미터 패턴 분석
  • 기존 방화벽(L3/L4)이 탐지 못하는 웹 애플리케이션 공격 방어

WAF 주요 기능

3대 핵심 기능

1️⃣ 정보 유출 방지 (Data Leakage Prevention)
   └─ 개인정보가 포함된 파일 업로드/다운로드 차단
   └─ 게시판 내 개인정보(주민번호, 전화번호 등) 게시 차단

2️⃣ 부정 로그인 방지 (Anti-Credential Stuffing)
   └─ 무작위 대입(Brute Force) 공격 차단
   └─ 비정상적인 로그인 시도 제어

3️⃣ 웹사이트 위변조 방지 (Anti-Defacement)
   └─ 해킹 후 웹사이트 변조 시도 탐지 및 대응

NAC (Network Access Control)

NAC 개념

정의: 네트워크에 접속하는 단말의 보안 상태를 점검하여 안전한 단말만 네트워크 접속을 허용하는 시스템

🔄 NAC 작동 프로세스

단말기 접속 요청
     ↓
[NAC 정책 서버 점검]
❶ 정상적인 장치/사용자 인증 확인?
❷ 안티바이러스(백신) 설치 여부?
❸ 최신 보안 패치 설치 여부?
     ↓
(NO) → [접근 차단] → [치료 유도]
(YES) → [접근 허용] → [Intranet Servers 접속]

VPN (Virtual Private Network)

VPN 개념

정의: 인터넷과 같은 공중망(Public Network)을 이용하여 마치 사설망(Private Network)을 사용하는 것처럼 안전하게 연결하는 기술

핵심 기술:

  • 터널링 (Tunneling): 가상 경로 생성
  • 암호화 (Encryption): 데이터 보호
  • 캡슐화 (Encapsulation): 암호화 헤더 추가

계층별 VPN 프로토콜

📊 VPN 프로토콜 비교

계층 (OSI Layer) VPN 종류 암호화 프로토콜 비고
2계층 (Data Link) L2TP VPN, PPTP VPN L2TP, PPTP 예전 방식, 보안성 낮음
3계층 (Network) IPSec VPN IPSec 사이트 간 연결(Site-to-Site)에 주로 사용
4계층 (Transport) SSL VPN TLS 웹 브라우저 기반, 별도 클라이언트 불필요
5계층 (Session) SSL SSL -
7계층 (App) - HTTPS, SSH 애플리케이션 레벨 보안

Cisco ASA VPN 유형

주요 VPN 구성 방식

1️⃣ Clientless SSL VPN
   └─ 별도 클라이언트 설치 없이 웹 브라우저로 접속
   └─ 포털 접속 방식

2️⃣ Client-Based Full-Tunnel SSL VPN (AnyConnect)
   └─ 전용 클라이언트 설치
   └─ 모든 트래픽이 VPN 터널을 통과

3️⃣ Site-to-Site IPsec VPN
   └─ 본사(Enterprise)와 지사(Remote Site) 간의 상시 연결
   └─ 라우터/방화벽 간의 터널링

UTM (Unified Threat Management)

UTM 개념

정의: 다양한 보안 기능을 하나의 장비로 통합하여 제공하는 통합 위협 관리 시스템

장점:

  • 투자 비용 절감
  • 관리 편의성 증대
  • 중소 규모 네트워크(SMB)에 적합

📦 UTM 통합 기능

[ UTM 장비 하나로 해결 ]
Firewall + VPN + IPS/IDS + Antivirus + URL Filtering + Anti-Spam


보안망 구성도 - 물리적 배치

Worker Zone & Server Zone 구성

[Worker Zone] (사용자 영역)
     ↓
   Switch
     ↓
[Intranet Zone] (내부망)
     ↓
   IPS (침입방지)
     ↓
   Router
     ↓
   TAP 장비 → IDS (침입탐지)
     ↓
   Web Proxy

DMZ Zone 구성

DMZ 서비스 영역 구성


전사적 통합 보안 아키텍처

엔터프라이즈급 보안망 구성

[Internet]
    ↓
DDOS 차단 시스템
    ↓
외부 방화벽 (L2)
    ↓
백본 스위치 (Backbone)
    │
    ├─ [DMZ Zone]
    │    Web Server / Mail Server / DNS
    │    WAF / IPS 적용
    │
    ├─ [Server Zone] (통합 서버존)
    │    L4 Switch (로드밸런싱)
    │    WAS (Web Application Server)
    │    DB Server (DB 방화벽 적용)
    │    Storage (SAN Switch)
    │
    ├─ [Management Zone]
    │    ESM (통합 보안 관제)
    │    SMS (서버 관리)
    │    NMS (네트워크 관리)
    │    VPN Gateway
    │
    └─ [User Zone] (업무망)
         L3 Switch
         내부 방화벽
         NAC / 백신 관리 서버
         사용자 PC

핵심 암기 사항

✅ 보안 장비 핵심

  1. IPS: 7가지 필터(방화벽, QoS, 서명, DoS, L7 등)로 능동적 방어
  2. WAF: 웹 전용 방화벽 (OWASP Top 10, 정보유출, 부정로그인 방지)
  3. NAC: 단말 무결성 검사 (백신, 패치, 인증 확인 후 접속 허용)
  4. UTM: 방화벽+IPS+VPN+백신 등을 하나로 통합 (비용 절감)

✅ VPN 프로토콜

  • 2계층: PPTP, L2TP (보안 약함)
  • 3계층: IPSec (사이트 간 연결 표준)
  • 4계층: SSL (웹 브라우저 기반, 원격 접속 용이)

✅ 망 분리 및 존(Zone) 구성

  • DMZ: 외부 서비스(Web, Mail) 위치, WAF/IPS 필수
  • Server Zone: 중요 데이터(DB, WAS) 위치, DB접근제어 필수
  • Worker Zone: 내부 사용자, NAC/백신 필수

NIDS 개요 (Snort && Suricata)

📌 Snort (스노트)

정의: 1998년 마틴 로쉬가 개발한 오픈소스 시그니처 기반 NIDS

특징:

  • 네트워크 패킷을 수집하여 트래픽 모니터링
  • 준비된 규칙(Rule)과 비교하여 침입 탐지 및 경고 발생
  • 시그니처(Signature) 기반: 악의적인 문자열(패턴)을 탐지하여 판단

📌 Suricata (수리카타)

정의: 2010년 OISF에서 개발한 차세대 오픈소스 NIDS/IPS

특징:

  • 멀티코어 및 멀티스레드 지원 (대용량 트래픽 처리에 유리)
  • Snort Rule과 완벽 호환
  • 하드웨어 가속 및 Lua 스크립트 지원

플젝할 때 수리카타 때문에 속이 확실하게 썩어서 기억이 안 날 수가 없네...


Snort 아키텍처

출처: ResearchGate(uploaded by Biju Issac)

5단계 처리 과정

  1. Sniffer (스니퍼)

    • 네트워크 인터페이스에서 패킷을 수집 (Promiscuous Mode)
  2. Packet Decoder (패킷 디코더)

    • 수집된 패킷을 데이터 링크 계층부터 상위 계층까지 파싱 및 정규화
  3. Preprocessor (전처리기)

    • 패킷을 탐지 엔진이 처리하기 좋게 가공 (예: 단편화된 패킷 재조립, 인코딩된 URL 디코딩)
    • 플러그인 형태로 동작 (HTTP, FTP, SSH 등)
  4. Detection Engine (탐지 엔진)

    • 정의된 룰(Rule)과 패킷을 비교 매칭
    • 가장 핵심적인 부분 (부하가 가장 많이 발생)
  5. Alert/Log (경고/로그)

    • 매칭된 룰에 따라 경고 발생 또는 로그 파일 저장

Snort Rule 구조

📌 기본 구조

출처: ResearchGate(uploaded by Youksamay Chanthakoummane)

  • Rule Header: 처리 방식(Action), 프로토콜, IP/Port 주소, 방향 결정
  • Rule Option: () 괄호 안에 탐지할 패턴과 세부 조건 정의

Rule Header 상세

1) Action (처리 방식)

Action 설명 비고
alert 경고를 발생시키고 로그 저장 가장 일반적
log 패킷을 로그로 저장 (경고 없음)
pass 패킷을 무시하고 통과
drop 패킷을 차단하고 로그 저장 IPS 모드 (In-line)
reject 차단 + 로그 + TCP Reset(RST) 또는 ICMP Unreachable 전송 적극적 차단
sdrop 차단하지만 로그는 남기지 않음

2) Protocol

  • tcp, udp, icmp, ip

3) IP Address & Port

  • any => 모든 주소/포트
  • ! => 부정 연산자 (예: !80 -> 80번 포트 제외)
  • [ ] => 여러 IP 지정 (예: [192.168.1.1, 192.168.1.2])
  • : => 포트 범위 (예: 1:1024 -> 1~1024번)

4) Direction (방향)

  • ->: 단방향 (왼쪽이 출발지, 오른쪽이 목적지)
  • <>: 양방향 (상호 간 통신)

Rule Option - 일반 옵션

옵션 설명 예시
msg 경고 발생 시 출력할 메시지 msg:"Malicious Traffic";
sid 룰 식별 번호 (고유 ID) sid:1000001;
rev 룰 버전 (수정 횟수) rev:1;
classtype 공격 유형 분류 classtype:web-application-attack;
priority 룰 우선순위 (1이 가장 높음) priority:1;

💡 SID 범위 참고

  • 0 ~ 99: 예약됨
  • 100 ~ 1,000,000: Snort 공식 룰
  • 1,000,001 ~: 사용자 정의 룰 (Local Rules)
    <이따가 실습 시간에 신나게 쓴다>


신나는 실습 시간 ㅠㅠ

우선 Ubuntu 설치를 시작하자!
설치는 구글링 뒤지면 고수형님들이 잘 알려주니까 그걸 참고하자.
설치된 걸로 알고 이제 실습 준비를 하자! 그리고 지금 정신이 나갈 것 같기 때문에 의식의 흐름대로 말을 편하게 쓰겠다.

기본적인 우분투 세팅을 마쳤으면 국룰의 명령어를 입력하기

sudo apt-get update

이것도 설치를 진행

sudo apt install -y net-tools 

설치 잘 됐는지 확인 진행

dpkg -l net-tools

막간을 이용한 상식

  • dpkg는 .deb 파일로 이루어진 패키지를 관리한다.
    주로 패키지를 직접 다운로드하여 설치할 때 사용되며, 이를 통해 패키지를 수동으로 설치,삭제,정보 확인 등이 가능하다.
  • 옵션 :
    • dpkg -i [패키지 이름]: 패키지 설치
    • dpkg -r [패키지 이름]: 패키지 삭제
    • dpkg -l [패키지 이름]: 패키지 설치 여부 확인
    • dpkg --list: 설치된 패키지 목록 확인
    • dpkg --configure [패키지 이름]: 설치 중 중단된 패키지 설정

이제

ifconfig

를 입력해보면 사소한 문제 하나를 느낄 수 있다. 바로 ens33으로 설정이 되어 있다. 이것이 왜 문제냐!

너무 힘들어서 드립 한 번 함

사실 그냥저냥 쓰려면 별 상관 없지만 이상하게 Snort는 eth0일 때 좀 더 수집을 잘한다 카더라...
구글링을 해봤지만 너무 케바케라 외국 쪽은 그냥 ens33쓰던데..?

아무튼 변경을 하라고 하니까 일단 변경을 진행하자!

nano /etc/default/grub
#나노 편집기 안에서 편집을 하자!

GRUB_CMDLINE_LINUX="find_pressed=/preseed.cfgauto noprompt priority=critical locale=en_US net.ifnames=0 biosdevname=0"
#편집하고 저장하고 아래 명령어 입력
grub-mkconfig -o /boot/grub/grub.cfg

명령어에 대한 간단 설명

  • Snort의 랜카드를 항상 동일하게 인식시키는 과정

    • eth0, eth1 형태의 옛 네이밍유지 => net.ifnames=0

      • BIOS가 자동으로 네트워크 장치이름 지정하는것을 비활성화 =>biosdevname=0
    • 설정파일을갱신 => grub-mkconfig-o /boot/grub/grub.cfg

reboot #재부팅해야 적용된다.


화면과 같이 진행하면 된다!!
리부트 때리고 ip 설정을 다시 진행해야 한다.
왜? ->랜 카드를 다시 설정했으니깐(어차피 연결 안된다고 친절하게 알려줌)

전에 했던 설정 그대로 진행시켜!

이제 바뀌었는지 확인을 해보자
)

굳굳 잘 바뀌었다!


이렇게 나오면 이렇게 설정주고 탭치고 ok버튼 때리라
인자 잘 깔았는지 확인 타임

반가운 돼지새끼가 보인다!

정상적이다.
혹시 모르니까 다시 한 번 확인 때리고

이제 본격적으로 실습을 위한 세팅을 드가자

그렇다면 이 snort.conf 파일이 무엇이냐
✓ Snort의 주요 설정파일
✓ Snort의 전체 동작 방식을 제어
✓ Snort가 동작 시 필요한 환경변수 정의, 로그위치, rule파일, 탐지옵션 등을 지정
✓ 네트워크 주소범위나 포트 등의 환경변수 지정
✓ Rule 포함 영역정의, 어떤 rule 파일을 사용할 지를 지정하는부분
✓로깅 경로설정, snort가 탐지로그를 저장할 기본경로
라고 한다.
궁금하면 확인하면 됨

근데 이 위에 rules라는 디렉이 보인다 뭐가 있는지 확인해보자

무슨무슨 rules가 엄청 많다.
그럼 이게 다 뭐냐?
지금까지 알려진 공격들에 대한 탐지 룰을 Snort에서 탑재해놓은 것이다. 이중에서 우리가 봐야 하는 것은 local.rules임
local.rules는 사용자 지정으로 탐지 룰을 지정할 수 있다 이말임
그렇다면 뭐냐 실습용으로 딱이지
그러면 안에 뭐가 들어잇나 보자

싹 까보니까 이래 나온다 뭐 전부 주석이라 별 의미도 없다.

이제 명령어 드가자 나노편집기 신나게 열고 명령어 입력한다.

alert icmp any any -> any any (msg:"First Test"; sid:3000001;)

이제 잘 됐는지 확인을 해야 한다.

# Rule 테스트 및 오류 검사
sudo snort -T -c /etc/snort/snort.conf   


성공했단다. 다행히 명령어를 똑바로 입력했다

sudo snort -i eth0 -c /etc/snort/snort.conf 
# Rule 을 인터페이스에 적용


좋아 이제 rule에 문제가 없으니까 어제 설정했던 거 싹 다 키자

아까 했던 이거는 꺼두지 말고 새로 터미널을 하나 더 열자

그리고 아래 명령어를 입력하자

#탐지 로그확인
sudo tail -f /var/log/snort/snort.alert.fast 

그럼 우분투에서는 2개의 터미널에서 모두 돌아가고 있있어야 한다잉

이제 칼리 드가서 핑 한 번 때리자

# <공격자  Kali>  #root로 진행하자
ping 192.168.10.20


이제 우분투로 돌아오면 로그가 찍히는 것을 확인할 수 있다

굳굳 성공했다!!



이제 고작 rule 하나 했을 뿐이다. 이제 추가 드간다.

alert tcp any any -> 192.168.10.0/24 21 (msg:"FTP Admin Access";content:"USER msfadmin";nocase; sid:3000002;)


추가된 것을 확인할 수 있다.

아까 했던 거 반복하자 기억이 안나면 위로 올라가서 다시 보고와라

sudo snort -T -c /etc/snort/snort.conf             # Rule 테스트 및 오류 검사 
sudo snort -i eth0 -c /etc/snort/snort.conf        # Rule 을 인터페이스에 적용

하지만 난 친절하니까...


성공적으로 완료했다

잠깐 우분투는 멈추어놓고 칼리로 돌아가자

# <공격자 kali> 
ftp 192.168.10.20

이번에는 metasploitable에 ftp 서비스를 이용해보려고 한다.

위에 명령어 칼리에다 박아주기 전에 와이어샤크 켜서 수집 한 번 해보자


그동안 배웠던게 보인다 3-way handshake도 보인다. 안 보이면 다시 복습을 하자

이렇게 전체로 보지 말고 저번에 배웠던 display filter을 이용해보자

빨간색 밑줄을 보자

칼리창에서 입력했던게 전부 노출된다.

이런 노출을 탐지하기 위해서 우리가 지금 snort rule을 만들었다.
이제 왜 이런 snort rule을 정한 건지 알 수 있당

그러면 이제 이해를 모두 했으니까 snort로 로그를 한 번 찍어서 탐지를 진행해보자

아까 rule 1처럼 ubuntu에 터미널 2개 키고

sudo snort -i eth0 -c /etc/snort/snort.conf 

위에 명령어로 킨 터미널은 계속 실행되게 두고 나머지 터미널에서

sudo tail -f /var/log/snort/snort.alert.fast

이 명령어를 실행해보자

이제 다시 칼리에게 했던 명령어를 다시 입력하자

전에 했던 로그의 잔재가 많이 있지만 빨간 밑줄을 보면 잘 탐지를 한 것을 알 수 가 있다.

이제 rule 2가 끝이 났다. 그치만 뒤에 3개나 더 있어

rule 3 들어가자. 일단 여기서 한 번 끊고


rule 3를 ~ 작 하겠습니다.

alert tcp 192.168.10.10 any -> 192.168.10.20 any (msg:"Xmas Port Scan Detection";flags:UPF;sid:3000003;)

보면 알겠지만 저번에 배웠던 포트스캔을 감지할 것이다.
아까처럼 우분투 터미널 2개 돌리고

sudo snort -i eth0 -c /etc/snort/snort.conf 

위에 명령어로 킨 터미널은 계속 실행되게 두고 나머지 터미널에서

sudo tail -f /var/log/snort/snort.alert.fast

이 명령어를 실행해보자

그리고 칼리 드가서 때리자

<공격자  Kali>  
nmap –sX 192.168.10.20

엄청 잘 잡힌다!! 이 정도면 관제하다 깜놀할 듯...

rule 3은 성공적으로 로그를 탐지하였다. 이제 rule 4 드가자!

alert tcp 192.168.10.20 23 -> any  any  (msg: "Telnet Fail"; content:"login incorrect"; nocase; sid:3000004;)

다시 한 번 신나게 나노 편집기 열고 변경 뒤 저장

rule 4는 Password Cracking Attack Detection Rule이다.
그리고 그거.. 그래 그거 2개 돌리자

와 ! 에러다....하하하
문구를 보니까 sid를 id라고 적었다....
후다닥 수정했다....(위 명령어는 수정했음)


바꾸니까 성공했다. 식겁했네

칼리 들어가서 때리자

telnet 192.168.10.20


텔넷에 접속했다고 나온다.


화면이 작아서 잘 안 보이지만 착한 눈 뜨면 다 보인다.
정상적으로 Telnet Fail이 출력되는 것을 확인할 수 있다.

아직 한 발 남았다....

찐막 rule 5 시작
rule 5는 SYN Flooding Attack Detection Rule이다.

alert tcp any any -> 192.168.10.0/24 80 (msg:"TCP SYN Flooding Attack"; flags:S; threshold:type threshold, track by_src, count 2, seconds 10; sid:3000005;)


이쯤 왔으면 뭐 해야 될 지 아시죠?
그러면 돌리시고 칼리로 갑니다.

hping3 --rand-source 192.168.10.20 –p 80 –S --flood

익숙하시죠..어제 했으니까요

칼리 때리니까 무섭게 로그가 찍힌다. 근데 아무리 봐도 우리가 원하는 메시지가 출력이 안 될 것 같아서 중단을 했다.

어케 해야 되누..?

그럴 땐 grep을 쓰자

sudo tail -f /var/log/snort/snort.alert.fast | grep "TCP SYN Flooding Attack"

이걸로 변경하고 다시 칼리를 때리자!

Great ! 내가 원하는 것만 아주 잘 나온다~~
마지막까지 완벽하게 로그 탐지를 성공!!!!!!!!!!!!!!!!!!!


alert tcp any any -> 192.168.10.0/24 80 (msg:"TCP SYN Flooding Attack"; flags:S; threshold:type threshold, track by_src, count 2, seconds 10; sid:3000005;)

이 명령어를 잘 보면 위에서 복습을 안 한게 있는데 이건 내일 Snort 마무리 할 때 같이 정리하도록 하겠다. 오늘은 장표가 너무 길어... 어제도 길었던 것 같은데..

다들 고생하셨고 저도 고생하셨고 내일도 달릴 기운은 없지만 달리기는 해야죠ㅠㅠ
벌써 00시 40분이다.
이제 자격증 공부해야겠지... 하하하하