hhkb.dev

BLOG

2025-11-10 / 네트워크분석 · 03

네트워크 탐지 룰

1. 실습 환경 구축

이 실습은 웹 취약점 스캔 결과를 네트워크 탐지 룰과 연결해서 보는 흐름이다. 기본 환경은 아래처럼 잡았다.

  • OWASP-ZAP: 브라우저와 웹 서버 사이에서 프록시 역할을 하며, 취약점 스캔을 수행하는 도구
  • MetasploitableV2: 취약한 실습용 서버
  • Security Onion(16.04.x): Snort, Snorby, Squert, ELSA 등을 묶은 IDS/SIEM 실습 환경

2. 웹 스캐너 주요 기능 실습

ZAP에서는 아래 기능을 주로 사용했다.

  • Update/Proxy Setting: 플러그인과 정책을 갱신하고 브라우저 프록시를 ZAP으로 맞춘다.
  • Port Scan/Spider: 열린 포트와 사이트 구조를 먼저 파악한다.
  • Forced Browsing: 숨겨진 디렉터리와 파일을 사전 기반으로 찾는다.
  • Break: 요청과 응답을 가로채고 값을 직접 바꿔본다.
  • Active Scan: SQLi, XSS 같은 취약점을 자동으로 점검한다.
  • Scan Policy Manager: 스캔 강도와 검사 대상을 조절한다.
  • Encode/Decode/Hash: 값 인코딩과 해시를 테스트한다.
  • Report: 결과를 HTML, JSON, XML 등으로 내보낸다.

3. 취약점 진단 및 패턴 분석 실습

실습 흐름은 사이트 구조 파악, 취약점 스캔, 서버 로그 확인, 그리고 결과 비교 순서였다.

  • 사이트맵 획득: Spider로 DVWA 구조를 먼저 본다.
  • 취약점 진단: Active Scan으로 Path Traversal, SQLi, XSS 등 주요 항목을 점검한다.
  • 로그 획득: 피해자 서버의 웹 로그를 수집한다.
  • 로그 분석: 실제 요청이 서버에 어떻게 남았는지 확인한다.
  • 교차 검증: ZAP 결과와 서버 로그를 비교해 패턴을 맞춰본다.
  • 결과 보고서 추출: 최종 결과를 보고서 형태로 저장한다.

4. 분석 도구

분석 확인에는 아래 도구를 썼다.

  • Snorby: Snort 경고를 웹 대시보드로 보여준다.
  • Squert: 시계열과 이벤트 관계를 보기 좋게 정리한다.
  • ELSA: 대규모 로그를 수집, 정규화, 검색하는 SIEM 도구다.

5. 스노트 소개와 규칙 구조 이해

Snort는 실시간 트래픽을 분석하고 경고를 발생시키는 대표적인 NIDS다.

규칙은 크게 두 부분으로 나뉜다.

  • Rule Header: 어떤 트래픽을 볼지 정하는 조건
    • 형식: [Action] [Protocol] [Src IP] [Src Port] [Direction] [Dst IP] [Dst Port]
    • 예: alert tcp $HOME_NET any -> $EXTERNAL_NET 80
  • Rule Option: 어떤 내용을 탐지할지 정하는 세부 조건
    • msg:"경고 메시지";
    • content:"탐지할 문자열";
    • pcre:"/정규표현식/옵션";
    • sid:[규칙 ID];
    • rev:[규칙 버전];

6. 정규표현식(PCRE) 이해

content만으로 잡기 어려운 패턴은 pcre를 쓴다. 인코딩 변형이나 복잡한 공격 문자열을 잡을 때 유용하다.

  • 메타문자: ., ^, $, |, [], ()
  • 수량자: *, +, ?, {n,m}
  • 클래스: \d, \w, \s
  • 추가 옵션: i(대소문자 무시), m(멀티라인)
  • 탐욕적/게으른 수량자:
    • .*: 가능한 가장 긴 문자열 매칭
    • .*?: 가능한 가장 짧은 문자열 매칭

7. Path Traversal(디렉터리 탐색)

  • 패턴: ../ (상위 디렉터리 이동) 문자열을 이용해 비인가된 파일( /etc/passwd)에 접근 시도.
  • 우회 패턴: URL 인코딩 (..%2f 또는 ..%5c), 이중 인코딩 (..%252f).
  • 스노트 분석/규칙:
    • content:"../"; (가장 기본적인 탐지)
    • pcre:"/\.\.%2[Ff]/i"; (URL 인코딩 / 탐지)
    • pcre:"/\.\.%5[Cc]/i"; (URL 인코딩 \ 탐지)
    • http_uri; 옵션을 추가하여 URI 영역에서만 검사하도록 한정.

8. SQL Injection

  • 사용자의 입력값이 SQL 쿼리문의 일부로 사용되는 점을 악용.
    • 인증 우회: ' OR '1'='1'--
    • 데이터 탈취: UNION SELECT, information_schema
    • 인코딩: 공백(%20 또는 +), 작은따옴표(%27)
  • 스노트 분석:
    • pcre:"/('|\x27).*(OR|--|#|;)/i"; (따옴표와 함께 주석/OR 구문 탐지)
    • pcre:/UNION\s+SELECT/i; (UNION SELECT 구문 탐지. \s+는 하나 이상의 공백 의미)

9. Directory Browsing

  • 공격이 아닌 서버 설정 오류로, 웹 서버가 인덱스 파일(index.html)이 없는 디렉터리의 파일 목록을 노출하는 현상.
  • 탐지 (서버 응답): 공격자의 요청이 아닌, 서버의 응답 패킷에 포함된 특정 문자열을 탐지.
    • "Index of /"
    • "Parent Directory"
  • 스노트 분석/규칙: 방향성이 중요. (서버 -> 클라이언트)
    • alert tcp $EXTERNAL_NET 80 -> $HOME_NET any (msg:"Directory Browsing"; flow:to_client,established; content:"Index of /"; ...)

10. Remote OS Command Injection

  • 웹 파라미터를 통해 OS 셸 명령어를 주입. 셸 메타 문자 사용.
  • 주요 메타 문자:
    • ; (앞 명령어 종료 후 뒷 명령어 실행)
    • |, || (파이프라인, OR 조건)
    • &, && (백그라운드 실행, AND 조건)
    • command 또는 $(command) (명령어 실행 결과 치환)
  • 스노트 분석/규칙:
    • http_uri; 옵션으로 URI 영역을 검사.
    • pcre:"/[;\|&$()]/";` (URI 내에 셸 메타 문자가 포함되어 있는지 검사)

11. Cross Site Scripting

  • 공격자가 삽입한 악성 스크립트(JavaScript)가 다른 사용자(피해자)의 브라우저에서 실행됨.
    • 기본: <script>alert(1)</script>
    • 우회 (이벤트 핸들러): <img src=x onerror=alert(1)>, <svg onload=alert(1)>
    • 인코딩: %3cscript%3e ( <script> )
  • 스노트 분석/규칙:
    • pcre:"/<script/i"; (단순 <script 태그 탐지)
    • pcre:"/on(error|load|click|mouseover)\s*=/i"; (다양한 이벤트 핸들러 탐지)
    • pcre:"/%3[Cc]script/i"; (URL 인코딩된 <script 탐지)

12. Remote Code Execution - Shellshock

  • CVE-2014-6271
  • GNU Bash 셸에서 발견된 취약점. 특정 형식의 문자열이 환경 변수에 할당될 때, 변수 정의부 뒤에 오는 악성 코드가 의도치 않게 실행되는 원격 코드 실행(RCE) 취약점.
  • 패턴: 주로 HTTP 요청 헤더(User-Agent, Cookie, Referer 등) 영역에 () { :; }; 라는 특정 문자열과 함께 실행할 명령어를 삽입.
    • User-Agent: () { :; }; /bin/cat /etc/passwd
  • 스노트 분석:
    • http_header; 옵션을 사용해 HTTP 헤더 영역 검사.
    • content:"() { :; };"; (Shellshock 고유의 핵심 문자열 패턴 탐지)
    • pcre:"/\(\)\s*\{[^\}]*\};\s*\w+/"; (공백 등 변형을 고려한 정규표현식 탐지)