Snort 관리 & 사용법

보안노트·2024년 5월 16일
0

Snort

  • 네트워크 침입 탐지/차단 시스템 (NIDS,NIPS)
  • 스니퍼, 패킷 로거, 침입 탐지가 주요 모드이다.




Snort Rule 구성


{ Action }.{ Protocol }.{ S_IP (송신자 IP) }.{ S_Port }.{ ->, <> }.{ D_IP (목적지 IP) }.{ D_Port }.{ Options }


  • Action

    • alert : 룰에 일치하는 경우, 경고를 발생 시키며 로그를 기록한다.

    • log : 로그를 기록한다.

    • pass : 패킷을 무시한다.

    • drop : 패킷을 차단하고 로그로 남긴다.

    • reject : 패킷을 차단하고 로그를 남기지 않는다.

      • tcp 패킷 : rst(Reset TCP) 응답

      • udp 패킷 : icmp unreachable 패킷 응답

    • sdrop : 패킷을 차단하고 로그를 남기지 않는다.


  • Protocol

    • TCP, UDP, ICMP, IP

  • IP Address

    • any : 모두

    • 논리부정연산 사용 가능 (!)

    • [] : 여러 IP 주소 지정 가능


  • Port Number

    • 1:1024 = 1 ~ 1024

    • :1024 = 1024 port 이하

    • 1024: = 1024 port 이상

    • !1:1024 = 1 ~ 1024 제외 나머지


  • Packet 방향

    • -> : outgoing

    • <- : 존재 X

    • <> : 양방향


  • Options

    • genaral : 룰에 대한 정보를 포함해 탐지

      • msg : alert 엔진을 통해 전달하는 메세지를 설정
        • msg:"<Message Text>";
      • sid : Snort ID의 약자, 룰 식별로 사용
        • sid:<Snort Rules ID>;

    • payload : Protocaol의 내용으로 탐지

      • content : 페이로드 내 존재하는 문자열을 판별
      • depth : 탐지하는 패킷의 길이를 지정
      • offset : 탐지 시작의 위치를 지정
        • ex) content:"cgi-bin/phf"; offset:4; depth:20;

    • non-payload : 페이로드가 없는 데이터에서 사용

      • fragoffset : Fragment 오프셋 필드 값 비교

        • fragoffset:[!]<|>]<number>;
      • ttl : traceroute 명령어 탐지 키워드

        • ttl:[<,>,=,<=,>=]<number>; , ttl:[<number>]-[<number>];
      • fragbits : 단편화 패킷이나 IP Header 내 Flags 필드에 비트 설정 확인

        • fragbits:MD+;
      • flags : TCP Flag 비트 확인 시 사용 (U, A, P, R, S, F, 0)

        • U : URG (Urgent): 긴급한 데이터 전송을 요청할 때 사용.

        • A : ACK (Acknowledgment): 수신측이 데이터를 받았음을 확인하는 데 사용.

        • P : PSH (Push): 버퍼의 데이터를 즉시 수신측에게 전송하라는 의미로 사용.

        • R : RST (Reset): 연결을 강제로 종료하고 초기화할 때 사용.

        • S : SYN (Synchronize): 연결을 초기화하고 통신을 시작할 때 사용.

        • F : FIN (Finish): 연결을 종료할 때 사용.

        • 0 : 특정 TCP 플래그가 설정되지 않은 모든 패킷을 탐지.

        • flags:SF;

      • seq : TCP Sequence Number 확인

        • seq:0;
      • ack : TCP Acknowledge Number 확인

        • ack:0;

    • Post-detection : 사후탐지에 대한 옵션, 룰 실행 후의 규칙

      • react : 패킷을 차단하거나 경고 메세지를 출력
        • react:block;

    • nocase : 패턴을 매칭할 때 대문자와 소문자를 구분하지 않는다.


    • threshold : 동일한 특정 패킷에 대해서 설정한 시간 내에 일정 수가 발생하면 탐지한다.

      • both : 매 seconds마다, count 동안 횟수만큼 트래픽이 탐지 될 시에 한번만 탐지.

      • threshold : 매 seconds마다, count 횟수에 해당 시 마다 계속 탐지한다.

      • limit : 매 seconds마다, count 동안에 횟수 번째 트레픽까지 계속 탐지한다.

      • by_src : 출발지 패킷만 탐지한다.

      • by_dst : 목적지 패킷만 탐지한다.




예제

1. 비정상적인 SSH 로그인 시도 탐지 시나리오 (Brute Force Attack : 30초안에 5번 로그인 시도 공격 탐지)

  • alert tcp any any -> any 22 (msg:"SSH Brute Force Attack"; content:"SSH-2.0"; nocase; threshold:type both, track by_src, count 5, seconds 30; sid:1000001;)

2. XMAS 스캔 탐지 시나리오

  • alert tcp any any -> any 22 (msg:"XMAS scan detected"; flags:FPU+; threshold:type both, track by_src, count 1, seconds 30; sid:1000002;)

3. HTTP Get Flooding 탐지 시나리오

  • alert tcp any any -> any 80 (msg:"HTTP GET Flooding detected"; content:"GET"; offset:0; depth:3; nocase; threshold:type threshold, track by_src, count 5, seconds 30; sid:1000003;)

0개의 댓글

관련 채용 정보