snort

agnusdei·2024년 7월 28일

Snort 작성법

Snort는 오픈 소스 침입 탐지 시스템(IDS)으로, 네트워크 트래픽을 실시간으로 모니터링하고 패킷을 분석하여 악의적인 활동을 탐지합니다. Snort의 규칙 구조는 다음과 같습니다:

규칙 구조

action protocol source_ip source_port direction destination_ip destination_port (options)
  • action: alert, log, pass, drop
  • protocol: tcp, udp, icmp
  • source_ip: 출발지 IP 주소
  • source_port: 출발지 포트 번호
  • direction: -> (단방향), <-> (양방향)
  • destination_ip: 목적지 IP 주소
  • destination_port: 목적지 포트 번호
  • options: 추가 조건 및 동작 설정

주요 옵션 설명

  1. content:

    • 패킷의 페이로드 내에서 특정 문자열을 검색합니다.
    • 예: content:"bad";는 페이로드 내에서 "bad"라는 문자열이 포함된 패킷을 찾습니다.
  2. depth:

    • content 옵션과 함께 사용되며, 검색할 바이트 수를 제한합니다.
    • 예: depth:20;는 패킷의 시작부터 20바이트 이내에서만 검색합니다.
  3. offset:

    • content 옵션과 함께 사용되며, 검색을 시작할 위치를 지정합니다.
    • 예: offset:10;는 패킷의 10바이트 이후(10 초과 === 11이상)에서 검색을 시작합니다.
  4. nocase:

    • 대소문자를 구분하지 않고 문자열을 검색합니다.
    • 예: content:"password"; nocase;는 "password", "PASSWORD", "PassWord" 등 모든 조합을 탐지합니다.
  5. pcre:

    • 정규 표현식을 사용하여 패턴을 검색합니다.
    • 예: pcre:"/bad|malicious/i";는 "bad" 또는 "malicious"라는 문자열을 대소문자 구분 없이 검색합니다.
  6. sid:

    • 규칙의 고유 식별자입니다.
    • 예: sid:1000001;은 이 규칙의 고유 ID를 설정합니다.

예시 규칙 및 분석

예시 1: HTTP 트래픽 감지

alert tcp any any -> any 80 (msg:"HTTP traffic detected"; sid:1000001;)
  • 설명: 모든 출발지에서 오는 HTTP 트래픽을 감지하고 경고 메시지를 출력합니다.

예시 2: 특정 IP 차단

drop tcp 192.168.1.100 any -> any any (msg:"Malicious IP blocked"; sid:1000002;)
  • 설명: 192.168.1.100에서 오는 모든 TCP 패킷을 차단합니다.

예시 3: SQL 인젝션 탐지

alert tcp any any -> any 443 (content:"' OR '1'='1"; msg:"SQL Injection Attempt"; sid:1000003;)
  • 설명: HTTPS 트래픽에서 SQL 인젝션 공격을 탐지합니다. 특정 문자열이 포함된 패킷을 발견하면 경고합니다.

예시 4: 패스워드 시도 감지

alert tcp any any -> any 21 (content:"USER "; msg:"FTP User Attempt"; sid:1000004;)
  • 설명: FTP 서버에 대한 사용자 로그인 시도를 감지합니다. 패킷에 USER 문자열이 포함되면 경고를 발생시킵니다.

예시 5: 바이너리 패턴 검색

alert tcp any any -> any any (content:!"|90 90|"; msg:"Non-zero binary content detected"; sid:1000005;)
  • 설명: 패킷 내에서 특정 이진 패턴(여기서는 NOP 명령어인 90)이 아닌 내용을 탐지합니다. 바이너리 분석을 통해 악성 코드 또는 비정상적인 트래픽을 감지할 수 있습니다.

예시 6: Offset과 Depth 활용한 패턴 검색

alert tcp any any -> any any (content:"bad"; offset:10; depth:20; msg:"Bad content detected"; sid:1000006;)
  • 설명: 패킷의 10바이트 이후에서 시작하여 20바이트 내에 "bad"라는 문자열이 포함된 경우 경고를 발생시킵니다. offset은 패킷 데이터에서 검색을 시작할 위치를 지정하고, depth는 검색할 바이트 수를 제한합니다.

profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글