📄 2026.01.21 (Day 60) - Security Onion IDS/IPS 및 SQLMap 공격 탐지 실전


1. 핵심 개념 정리

IDS/IPS 기초 개념

# 핵심 개념 설명 실무/보안 관점
1 IDS Intrusion Detection System, 침입 탐지 시스템 네트워크 또는 호스트 기반으로 비정상 활동을 탐지하여 알림
2 IPS Intrusion Prevention System, 침입 방지 시스템 IDS 기능에 더해 실시간으로 공격 패킷을 차단
3 Inline Mode IPS가 네트워크 경로 중간에 위치하여 트래픽 통제 차단 기능 수행 가능하나 장애 시 전체 네트워크 영향
4 Mirror Mode 트래픽 복사본을 받아 분석하는 수동 모니터링 방식 탐지만 가능하며 실시간 차단 불가
5 Snort 오픈소스 기반 네트워크 침입 탐지/방지 시스템 시그니처 기반 룰셋으로 알려진 공격 패턴 탐지

Security Onion 플랫폼

# 핵심 개념 설명 실무/보안 관점
6 Security Onion Snort/Suricata 기반 통합 네트워크 보안 모니터링 플랫폼 IDS, 전체 패킷 캡처, 로그 분석을 하나의 시스템에 통합
7 Sguil Security Onion의 이벤트 분석 GUI 도구 실시간 알림 확인 및 패킷 상세 분석 가능
8 Suricata Snort의 후속 IDS 엔진, 멀티스레드 지원 고성능 환경에서 Snort 대비 우수한 성능
9 tcpreplay PCAP 파일을 네트워크 인터페이스로 재생 과거 트래픽으로 IDS 룰 테스트 및 검증
10 Rule Update IDS 규칙 파일 변경 후 엔진 재시작 없이 적용 rule-update 명령으로 신규 룰 즉시 반영

웹 취약점 스캐닝

# 핵심 개념 설명 실무/보안 관점
11 OWASP ZAP Zed Attack Proxy, 웹 애플리케이션 취약점 스캐너 자동/수동 스캔으로 OWASP Top 10 취약점 진단
12 Spider 웹 사이트 구조를 크롤링하여 사이트 맵 생성 모든 페이지와 파라미터 자동 수집
13 Active Scan 실제 공격 페이로드를 전송하여 취약점 탐지 SQL Injection, XSS 등 능동적 진단
14 Passive Scan 트래픽 관찰만으로 취약점 힌트 탐지 서비스 영향 없이 안전하게 정보 수집
15 DVWA Damn Vulnerable Web Application, 의도적 취약점 실습 환경 웹 공격 실습 및 방어 기법 학습용

2. 실습 내용 정리

실습 1-1: Security Onion 설치 및 초기 설정

목표: VMware 기반 Security Onion 16 환경 구축

실습 환경:

  • VMware Workstation, Security Onion 16 ISO
  • CPU 4코어, RAM 8GB, Disk 100GB

실습 단계:

  1. VMware 가상머신 생성: Custom > Linux/Ubuntu 64-bit > 4코어, 8192MB, NAT, 100GB SCSI
  2. ISO 마운트 및 설치 진행
  3. 설치 완료 후 ip addr show 로 네트워크 인터페이스 확인
  4. Sguil 접속 테스트
  5. IDS 정상 작동 테스트: curl http://testmynids.org/uid/index.html 후 Sguil에서 알림 확인

보안 인사이트:

  • IDS 구축 시 인라인 모드는 네트워크 장애 위험이 있어 미러 모드로 먼저 검증 필요
  • Security Onion은 Snort/Suricata 외에도 Bro, OSSEC 등 다양한 도구 통합
  • 초기 룰셋은 보수적으로 설정하여 오탐지 최소화 후 점진적 강화

실습 1-2: PCAP 파일을 이용한 IDS 룰 검증

목표: 과거 트래픽을 재생하여 IDS 탐지 능력 확인

실습 단계:

  1. 네트워크 인터페이스 확인: ip addr show
  2. PCAP 파일을 Security Onion으로 scp 전송
  3. tcpreplay로 트래픽 재생: sudo tcpreplay –intf1=ens33 /tmp/2015-08-31-traffic-analysis-exercise.pcap (367초 소요)
  4. Sguil에서 AlphaCrypt/TeslaCrypt C2 통신, Evil Redirector, Vulnerable Java 등 이벤트 확인
  5. 특정 이벤트 우클릭 > Transcript 또는 Wireshark로 상세 분석

실습 2-1: OWASP ZAP을 이용한 DVWA 취약점 스캔

목표: 웹 애플리케이션 자동 취약점 진단 수행

실습 환경:

  • Windows 10 (ZAP 설치), Metasploitable2 (DVWA 호스팅)
  • DVWA Security Level: Low

실습 단계:

  1. ZAP 실행, 프록시 포트 8080 설정
  2. DVWA 로그인 후 Security Level을 “Low"로 설정 (모든 보안 메커니즘 비활성화)
  3. Spider로 vulnerabilities 디렉토리 하위 모든 페이지 자동 발견
  4. Active Scan 실행 후 High/Medium/Low 취약점 확인
  5. 스캔 전 웹 로그 초기화 후 access.log 분석으로 ZAP 공격 패턴 확인

실습 2-2: SQLMap을 이용한 SQL Injection 자동화 공격

목표: Kali Linux에서 SQLMap으로 DVWA SQL Injection 취약점 자동 공격

실습 환경:

  • Kali Linux (공격자), Metasploitable2 DVWA (피해자)
  • Security Level: Low

실습 단계:

  1. DVWA SQL Injection 페이지 접속 (User ID 입력란에 “1” 입력)
  2. F12(개발자 도구) > Application > Cookies 에서 PHPSESSID와 security 쿠키 값 복사
  3. Kali Linux에서 SQLMap으로 기본 취약점 테스트:
  4. 현재 데이터베이스 이름 확인 (–current-db 옵션): 결과 - current database: ‘dvwa’
  5. 데이터베이스 내 테이블 목록 조회 (-D dvwa –tables): guestbook, users 테이블 발견
  6. users 테이블 데이터 전체 덤프 (-D dvwa -T users –dump):
    • user_id, first_name, last_name, user, password(해시), avatar 등 출력
    • 예시: admin / admin / 5f4dcc3b5aa765d61d8327deb882cf99 (MD5 해시)

SQLMap 자동화 공격 과정:

  1. 취약점 탐지: 다양한 SQL Injection 페이로드 자동 전송 (UNION, Boolean-based, Time-based 등)
  2. 데이터베이스 핑거프린팅: 응답 시간, 에러 메시지 분석으로 DBMS 종류 파악 (MySQL, PostgreSQL 등)
  3. 데이터 추출: UNION SELECT를 이용한 데이터베이스 정보 수집
  4. 자동 파싱: 테이블, 컬럼, 데이터를 구조화하여 출력

발견 가능한 민감 정보:

  • 사용자 계정 정보 (ID, 패스워드 해시)
  • 개인정보 (이름, 이메일 등)
  • 데이터베이스 구조 (테이블명, 컬럼명)
  • 시스템 정보 (DBMS 버전, OS 정보)

방어 방법:

  • Prepared Statement (파라미터화된 쿼리) 사용 필수
  • 입력값 화이트리스트 기반 검증
  • 최소 권한 원칙 (DB 계정 권한 제한)
  • WAF 룰셋으로 SQL Injection 패턴 차단
  • 에러 메시지 노출 차단 (프로덕션 환경)

실습 2-3: AI를 활용한 취약점 분석 보고서 작성

목표: ZAP 스캔 결과를 체계적인 보고서로 변환

실습 단계:

  1. ZAP 리포트 생성: Report > Generate HTML Report
  2. 리포트 파일을 AI에게 업로드
  3. AI 프롬프트: 발견된 취약점 요약(High/Medium/Low), 기술적 상세 설명, 공격 시나리오, 권장 조치사항, 위험도 평가
  4. 생성된 보고서 검토 및 수정

실습 3-1: Snort 룰 작성 기초

목표: 사용자 정의 탐지 규칙 작성 및 적용

기본 규칙 예시:

  • alert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:“Snort Test Rule”; content:"/etc/passwd”; nocase; sid:3202411200; rev:1;)

룰 적용:

  • sudo rule-update (룰 문법 검증 및 적용)
  • 오류 발생 시: sudo nsm –sensor –restart –only-snort-alert

실습 3-2: PCRE 정규표현식을 활용한 고급 룰 작성

실전 PCRE 룰 예시:

예제 1: SQL Injection 탐지

  • alert tcp any any -> any 80 (msg:“SQL Injection Attempt - UNION SELECT”; pcre:"/union\s+select/Ui”; flow:to_server,established; sid:3202411201; rev:1;)

예제 2: 신용카드번호 유출 탐지

  • alert tcp any any -> any any (msg:“Possible Credit Card Number Leak”; pcre:"/[0-9]{4,}/"; sid:3202411202; rev:1;)

예제 3: HTTP 응답 코드 탐지

  • alert tcp any 80 -> any any (msg:“HTTP Response 200 or 404”; pcre:"/(200|404)/S"; flow:from_server,established; sid:3202411203; rev:1;)

실습 3-3: 실전 시나리오 - SQLMap 공격 탐지 및 대응

목표: Kali의 SQLMap 공격을 Security Onion으로 실시간 탐지

실습 환경:

  • Kali Linux (공격자), Metasploitable2 DVWA (피해자, Security Level: Low)
  • Security Onion (탐지 시스템)

Security Onion에서 커스텀 룰 작성:

SQLMap User-Agent 탐지:

  • alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:“SQLMap Automatic SQL Injection Tool Detected”; flow:to_server,established; content:“User-Agent|3a| sqlmap/”; nocase; http_header; classtype:web-application-attack; sid:3202501210; rev:1; reference:url,sqlmap.org;)

UNION SELECT 패턴 탐지:

  • alert tcp any any -> any $HTTP_PORTS (msg:“SQL Injection - UNION SELECT Pattern”; flow:to_server,established; content:“union”; nocase; http_uri; content:“select”; nocase; distance:0; within:20; http_uri; pcre:"/union\s+select/Ui"; classtype:web-application-attack; sid:3202501211; rev:1;)

Boolean Based Blind 탐지:

  • alert tcp any any -> any $HTTP_PORTS (msg:“SQL Injection - Boolean Based Blind”; flow:to_server,established; pcre:"/(' OR 1=1–|AND 1=1)/Ui"; http_uri; classtype:web-application-attack; sid:3202501212; rev:1;)

Kali에서 SQLMap 공격 실행:

Sguil에서 실시간 탐지 이벤트 확인:

  • “SQLMap Automatic SQL Injection Tool Detected” (sid:3202501210)
  • “SQL Injection - UNION SELECT Pattern” (sid:3202501211)
  • “SQL Injection - Boolean Based Blind” (sid:3202501212)

이벤트 분석:

  • 이벤트 우클릭 > Transcript 로 HTTP 요청 전문 확인
  • Wireshark로 전체 TCP 스트림 재구성하여 공격 전 과정 확인
  • 로그에서: GET /dvwa/vulnerabilities/sqli/?id=1’ UNION SELECT null,null– HTTP/1.1, User-Agent: sqlmap/1.7.2#stable 확인

공격 -> 탐지 -> 분석 -> 대응 흐름:

  1. 공격 발생 (Kali SQLMap 실행): HTTP GET 요청에 SQL Injection 페이로드 포함
  2. IDS 탐지 (Security Onion Snort): 커스텀 룰에 매칭되어 Alert 생성
  3. 이벤트 확인 (Sguil): 보안 분석가가 실시간 알림 확인
  4. 상세 분석 (Wireshark, 로그): 공격 벡터, 페이로드, 피해 범위 파악
  5. 대응 조치 (차단, 패치): IP 차단, 취약점 제거, 로그 보관

발견 가능한 탐지 이벤트:

  • User-Agent에 “sqlmap” 문자열 (자동화 도구 시그니처)
  • URI에 “union select” 패턴 (UNION 기반 공격)
  • Boolean-based 페이로드 (’ OR 1=1–, AND 1=1 등)
  • 짧은 시간 내 동일 IP에서 수백 개 요청 (자동화 특징)

보안 인사이트:

  • SQLMap은 User-Agent를 위조할 수 있으므로 페이로드 패턴 탐지가 더 중요
  • DVWA Security Level Low는 의도적으로 모든 방어 기능 비활성화 상태
  • 실무에서는 WAF와 IDS를 함께 운영하여 다층 방어
  • Snort 커스텀 룰은 조직의 특수한 위협에 맞춤 대응 가능

3. Snort 룰 문법 비교표

Action 타입 비교

항목 기능 로그 기록 패킷 차단 사용 시기/적용 방안
alert 알림 생성 O X 탐지만 필요한 경우, 대부분의 IDS 운영
log 로그만 기록 O X 통계 수집용, 오탐지 검증 단계
pass 무시 X X 화이트리스트, 특정 트래픽 예외 처리
drop 차단 및 기록 O O (Inline) IPS 모드, 명확한 악성 트래픽
reject 차단 + RST 전송 O O (Inline) TCP 공격 즉시 차단, ICMP unreachable 응답
sdrop 조용히 차단 X O (Inline) 스텔스 차단, 로그 부하 감소

IP 주소 지정 방법

문법 설명 예시 적용 방안
any 모든 IP any 프로토콜 전체 모니터링
특정 IP 단일 호스트 192.168.1.100/32 중요 서버 타겟팅
네트워크 대역 CIDR 표기 192.168.1.0/24 내부망 전체
! (부정) 제외 !192.168.1.0/24 특정 대역 제외
$변수 사전 정의 변수 $HOME_NET, $EXTERNAL_NET 설정 파일에서 중앙 관리

4. 심화 분석

IDS 이벤트 분석 - 실제 케이스

구분 Event 내용 시그니처 위협 분석 대응 방안
Event 3.1394 Possible Evil Redirector Leading to EK 64.20.39.203 -> 192.168.137.239:80 Exploit Kit으로 리디렉션하는 중간 매개 공격 출발지 IP 평판 조회 후 차단, 엔드포인트 검사
Event 3.1400 AlphaCrypt CnC Beacon 192.168.137.239 -> 72.55.148.19:80 랜섬웨어 C2 서버 통신 즉시 네트워크 차단, 파일 복구 불가
Event 3.1404 Vulnerable Java Version 1.8.x Detected 192.168.137.239 -> 23.60.139.27:80 취약한 Java 플러그인 사용 Java 업데이트 또는 브라우저 플러그인 차단
Event 3.1408 AlphacryptTeslaCrypt Ransomware CnC Response 72.55.148.19:80 -> 192.168.137.239 C2 서버로부터 암호화 키 수신 호스트 즉시 격리, 침해사고 대응팀 투입

PCRE 정규표현식 연습 문제 풀이

  • pcre:"/a.a/” -> 정답: aTa (. 은 임의의 한 문자)
  • pcre:"/(one|two) apple/" -> 정답: one apple (| 는 OR 연산)
  • pcre:"/boan?/" -> 정답: boan, boa (? 는 0회 또는 1회)
  • pcre:"/project/" -> 정답: project, prject ( 는 0회 이상)
  • pcre:"/[A-Z]{3}/" -> 정답: ABC (대문자 3개 연속)
  • 숫자 9가 4개 이상: pcre:"/9{4,}/"
  • pcre:"/bo{2,4}an/" -> 정답: booan (o가 2~4개)
  • 200 또는 404 응답 코드: pcre:"/(200|404)/S"
  • 요청 헤더에서 select: pcre:"/select/Hi"

5. 실무/보안 적용

SOC 분석가 관점 - IDS 이벤트 대응 포인트

단계/유형 탐지 포인트 로그 예시 대응 방안
초기 탐지 IDS 알림 발생, 이벤트 심각도 확인, 출발지/목적지 IP 식별 ET TROJAN AlphaCrypt CnC Beacon, Src: 192.168.137.239 이벤트 상세 정보 확인, Wireshark로 패킷 분석, 위협 인텔리전스 조회
영향 범위 파악 동일 출발지 IP의 다른 이벤트, 시간대별 활동 패턴 192.168.137.239 -> Multiple External IPs 해당 호스트 네트워크 격리, 공격 타임라인 재구성
침해 확인 C2 응답 성공 여부, 악성 파일 다운로드 HTTP/1.1 200 OK, PE EXE Download Detected 호스트 즉시 차단, 포렌식 이미징, KISA 침해사고 신고 준비

Snort 룰 작성 베스트 프랙티스

기본 구조 템플릿:

  • alert tcp $EXTERNAL_NET any -> $HOME_NET $HTTP_PORTS (msg:"[카테고리] 공격명"; flow:to_server,established; content:“악성패턴”; nocase; http_uri; pcre:"/정규표현식/Ui"; classtype:trojan-activity; sid:3YYYYMMDD##; rev:1;)

HTTP 특화 탐지 (SQL Injection in URI):

  • alert tcp any any -> any $HTTP_PORTS (msg:“SQL Injection in URI”; flow:to_server,established; content:“union”; nocase; http_uri; content:“select”; nocase; distance:0; within:20; http_uri; sid:3202501201; rev:1;)

다단계 탐지 (Webshell Upload Attempt):

  • alert tcp any any -> any 80 (msg:“Webshell Upload Attempt”; flow:to_server,established; content:“POST”; http_method; content:“Content-Type”; http_header; content:“multipart/form-data”; http_header; distance:0; content:".php"; http_client_body; nocase; sid:3202501202; rev:1;)

IDS/IPS 운영 체크리스트

룰셋 관리:

  • 일일 룰셋 업데이트 (ET Open, Snort VRT)
  • 커스텀 룰 테스트 환경 검증 후 프로덕션 적용
  • 주간 오탐지 룰 검토 및 튜닝
  • 월간 룰 히트율 분석 및 불필요 룰 제거

이벤트 대응:

  • High 심각도 이벤트 즉시 알림 (SMS, 이메일)
  • Medium 이벤트 시간당 집계 리포트
  • 동일 이벤트 반복 발생 시 자동 티켓 생성
  • 주간 TOP 10 이벤트 분석 리포트

6. 배운 점 및 인사이트

새로 알게 된 점

  • Security Onion의 통합 플랫폼 강점: Snort, Suricata, Bro, OSSEC, Sguil 등을 하나의 시스템에서 운영하여 침해사고 분석 효율 극대화
  • SQLMap의 강력함과 위험성: 단 몇 줄의 명령어로 DB 전체 정보를 자동 탈취할 수 있어, SQL Injection 방어가 얼마나 중요한지 체감
  • DVWA Security Level의 교육적 가치: Low/Medium/High로 단계적 방어 수준 조정하며 각 보안 통제의 효과 직접 확인 가능
  • Snort 룰의 계층적 구조: content로 1차 필터링 후 pcre로 정밀 탐지하는 방식이 성능과 정확도 균형
  • 실시간 공격-탐지 연동의 중요성: Kali의 SQLMap 공격을 Security Onion이 실시간 탐지하는 과정을 직접 보며 IDS의 실전 가치 확인

이전 학습과의 연결고리

  • Wireshark 패킷 분석 확장: 수동 분석을 넘어 IDS로 자동화된 대규모 트래픽 모니터링 체계 구축
  • 웹쉘 공격 탐지 연계: 이전에 학습한 웹쉘 업로드 패턴을 Snort 룰로 작성하여 실시간 탐지
  • ISMS-P 기술적 보호조치 실현: IDS/IPS는 침입 탐지 및 대응 요구사항의 핵심 기술적 통제 수단

실무 적용 아이디어

SOC 분석가 관점:

  • 계층적 탐지 체계 구축: Snort(시그니처) + Suricata(프로토콜 이상) + SIEM(상관분석)으로 다층 방어
  • 위협 헌팅 워크플로우: IDS 이벤트를 트리거로 Wireshark 상세 분석 -> 위협 인텔리전스 조회 -> 커스텀 룰 작성
  • False Positive 관리 프로세스: 오탐지 룰은 별도 파일로 분리하고 suppression list로 관리

보안 컨설턴트 관점:

  • 취약점 진단 자동화: ZAP을 CI/CD 파이프라인에 통합하여 코드 배포 전 자동 스캔
  • 맞춤형 룰셋 개발: 고객 환경의 특수한 공격 벡터를 Snort 룰로 제작하여 제공

7. Quick Reference

Snort 룰 관리 명령어

  • sudo nano /etc/nsm/rules/local.rules (룰 파일 편집)
  • sudo rule-update (룰 적용, 문법 검증 포함)
  • sudo nsm –sensor –restart –only-snort-alert (Snort 재시작)
  • snort -c /etc/nsm/templates/snort/snort.conf -T (룰 문법 수동 검증)
  • snort -c /etc/nsm/templates/snort/snort.conf -r test.pcap -A console (PCAP 파일로 룰 테스트)

Snort 룰 옵션 요약표

구분 항목 핵심 키워드 주요 내용 적용 방법
일반 msg 메시지 알림 이벤트 제목 msg:“공격 설명”;
sid 시그니처 ID 규칙 고유 번호 (300만 이상) sid:3202501201;
classtype 분류 공격 유형 분류 classtype:trojan-activity;
흐름 flow 방향/상태 트래픽 방향 및 세션 상태 flow:to_server,established;
페이로드 content 문자열 탐지할 패턴 content:“악성문자열”;
nocase 대소문자 대소문자 무시 nocase;
pcre 정규표현식 PCRE 패턴 매칭 pcre:"/pattern/Ui";
HTTP http_uri URI 요청 경로 http_uri;
http_header 헤더 요청/응답 헤더 http_header;

PCRE 정규표현식 치트시트

메타문자: (이스케이프), ^(문자열 시작), $(문자열 끝), .(임의의 한 문자), |(OR 연산), ?(0회 또는 1회), *(0회 이상), +(1회 이상)

수량자: {n}(정확히 n개), {n,}(n개 이상), {n,m}(n개 이상 m개 이하)

클래스: [abc](a,b,c 중 하나), a-z, A-Z, 0-9, [^0-9](숫자 아닌 것)

PCRE 옵션: /i(대소문자 무시), /U(URI 정규화), /H(HTTP 헤더), /P(HTTP 본문), /S(HTTP 상태 코드)


8. 트러블슈팅

문제 원인 해결 방법
rule-update 실패 “Syntax Error” 룰 문법 오류, 괄호 누락, 세미콜론 빠짐 오류 메시지에서 라인 번호 확인, 괄호 쌍 점검, snort -T 로 상세 오류 확인
Sguil에서 이벤트가 안 보임 Snort 프로세스 중지, 네트워크 인터페이스 미설정 ps aux 로 프로세스 확인, ip addr show 인터페이스 점검, nsm –sensor –restart
tcpreplay 실행 안 됨 인터페이스명 오류, 권한 부족 ip addr 로 인터페이스명 확인, sudo 권한으로 실행
ZAP 스캔 시 타겟 서버 무응답 과도한 요청으로 서버 과부하 Scan Policy에서 스레드 수 감소, 스캔 속도 조절

Today’s Insight:

IDS/IPS는 단순히 룰셋을 적용하는 것을 넘어, 지속적인 튜닝과 분석가의 전문성이 결합되어야 효과를 발휘한다는 것을 깨달았습니다. 오늘 Kali에서 SQLMap으로 공격하고 Security Onion에서 직접 작성한 Snort 룰로 실시간 탐지하는 전 과정을 경험하며, 이론과 실전의 간극을 메울 수 있었습니다. DVWA Security Level을 Low로 설정하여 의도적으로 취약하게 만든 상태에서 SQLMap이 단 몇 줄의 명령어로 전체 DB를 덤프하는 것을 보며, SQL Injection 방어가 얼마나 치명적인지 체감했습니다. Sguil에서 내가 만든 룰이 실제로 작동하는 것을 보며 보안 전문가로서의 성취감을 느꼈습니다.