탐지 룰셋과 시그니처
Rule set · 룰셋 · IDS 탐지 규칙 · Snort 규칙
은 탐지 엔진이 어떤 입력·상태·내용을 의심 조건으로 판단할지 정의한 규칙 모음이다. 주소·방향·프로토콜·검사 버퍼·임계값과 규칙 버전이 함께 탐지 결과를 결정한다.
밑줄 용어에 마우스를 올리거나, 키보드로 선택하거나, 터치하면 설명을 볼 수 있습니다.
01무엇이고, 어떤 일을 하나
- 알려진 위협 조건을 반복 가능한 검사로 표현한다.
- 경보의 식별자·개정·분류·우선순위를 관리한다.
- 정상·경계·공격 표본에서 오탐과 미탐을 비교한다.
02어떤 순서로 동작하나
- 절대 시작
offset은 선택된 검사 버퍼 시작을 기준으로 검색 위치를 옮긴다. depth는 그 시작점에서 검사할 범위를 제한한다.
- 상대 시작
distance는 이전 일치가 끝난 위치를 기준으로 다음 검색 시작을 이동시킨다. 같은 버퍼에서의 검색 문맥이 필요하다.
- 상대 범위
within은 다음 가 일치해야 할 상대 검색 범위를 제한한다. 문자열 전체가 허용된 범위 안에 들어오는지 계산해야 한다.
- 버퍼 전환
http_uri 같은 를 선택하면 비교 대상과 커서 문맥이 달라진다. raw payload의 오프셋을 정규화 URI의 오프셋으로 재사용하지 않는다.
- 조건 결합
여러 는 모두 일치해야 하지만 작성 순서만으로 바이트의 등장 순서가 제한되지는 않는다. 위치 옵션이 없으면 기본·선택 버퍼의 처음부터 검색한다. 앞선 일치 뒤의 상대 위치·범위는 으로 지정한다.
03먼저 알아둘 용어와 구성요소
- action·프로토콜·주소·포트·방향 같은 적용 범위.
- 선택한 검사 버퍼에서 찾을 바이트 조건.
- 앞선 일치 뒤 상대 검색 시작과 범위를 제한하는 옵션.
- 규칙의 식별 번호와 개정 번호.
- 버퍼 시작 기준의 검색 위치와 검사 범위를 제한하는 옵션.
- 연결 방향·수립 상태 등의 규칙 조건.
- URI·본문 등 이후 조건이 검사할 논리적 영역.
- 경보 생성과 패킷 차단을 지정하는 동작으로 실제 집행은 배치 방식에 의존한다.
SPAN 수신 위치와 TCP 플래그 규칙을 연결하기
센서 가시성을 확인한 뒤 저장된 패킷의 조건을 규칙 헤더·옵션으로 옮긴다.
실습 구성과 전제
- 와 Lua 설정을 사용하는 격리 센서, 스위치, 허가된 PCAP 작업 사본을 준비한다. 2의 .conf·실행 옵션을 그대로 섞지 않는다.
- 사진의 구성도와 프로브 캡처는 관측 배치와 규칙 조건을 비교하는 자료이며 하나의 경보 발생을 자동으로 증명하지 않는다.
복제할 방향과 센서 연결 포트를 확인한다
- source interface f1/2 both는 양방향 프레임을 복제한다는 뜻이며 destination interface f1/1은 복제본을 받는 포트다.
- 센서의 실제 캡처 NIC와 이 포트가 연결됐는지 확인한다. HOME_NET 설정이 맞아도 패킷이 들어오지 않으면 규칙을 평가할 수 없다.
원본 크기로 보기 ↗- 도해 오른쪽에 source f1/2 both와 destination f1/1이 표시된다.
- Snort VM 연결이 f1/1 쪽에 그려져 있다. 이는 복제 수신 구성으로, 인라인 차단 구성과 구분해야 한다.
확인 기준show monitor 출력과 센서 캡처 양쪽을 확인한다.
패킷 조건을 필요한 필드로 좁힌다
- 캡처에는 FIN·SYN·PSH·URG가 함께 있는 데이터 없는 프로브가 보인다. 이 조합과 Len=0을 규칙 조건으로 옮길 수 있다.
- 의 재전송·중복 ACK 문구는 분석 표시이며 flags 옵션의 값이 아니다. flags와 payload 길이는 각각 검사한다.
textalert tcp $EXTERNAL_NET any -> $HOME_NET any (msg:"LAB unusual TCP flags"; flags:FSUP; dsize:0; sid:1000201; rev:1;)교육용 패킷 조건 예시. 규칙 일치는 이상 플래그 조합의 관찰이며 도구나 공격 성공을 확정하지 않는다.
원본 크기로 보기 ↗- 일부 행에 [FIN, SYN, PSH, URG]와 Len=0이 표시된다.
- 다른 행에는 <None> 플래그와 중복 ACK 표시가 있다. 서로 다른 조건을 하나의 룰로 무작정 합치지 않는다.
확인 기준정상 표본도 함께 넣어 경보 범위를 비교한다.
문법과 실제 일치를 별도 시험한다
- 설정 검증은 규칙을 읽을 수 있는지 확인하고, PCAP 재현은 실제 표본이 조건에 맞는지 확인한다. 검증이 성공해도 경보가 반드시 생기는 것은 아니다.
- alert_json의 rule·action·src_ap·dst_ap·pkt_num을 패킷과 연결한다. 아래 alert 규칙과 오프라인 재생은 탐지 시험이다. would_drop 같은 표시가 나오더라도 실제 인라인 통신 차단 증거와 구분한다.
shellsnort -c snort.lua -R local.rules -T snort -c snort.lua -R local.rules -r lab.pcap -A alert_json의 재현용 예시 명령이다. 사진에 나온 실행 결과를 전재한 것이 아니며, 설치에 맞는 .lua와 자신의 PCAP를 사용한다.
확인 기준기대 패킷 번호와 경보 SID를 연결하고 음성 표본의 결과도 남긴다.
실습에서 확인한 동작 원리
- 센서 배치가 규칙보다 먼저 충족해야 하는 조건이다.
- 규칙 문법·표본 일치·실제 차단은 각각 다른 증거를 요구한다.
미탐 원인 표를 재현 가능한 시험 보고서로 바꾸기
규칙을 바꿨다는 기록에 입력 조건·관찰 증거·재시험·한계를 보태어 설명 가능한 결과를 만든다.
실습 구성과 전제
- 격리 PCAP 또는 승인된 실습 요청과 규칙 버전을 보관하고, 정상 트래픽 표본도 함께 준비한다.
- 문제·원인·해결 표는 당시 관찰을 요약한 자료다. 표의 해결 문구를 모든 공격에 적용되는 완성된 탐지 규칙으로 확대하지 않는다.
증상과 탐지하려는 사건을 같은 문장에 적기
- 리버스 셸 연결 성립과 연결 뒤 특정 명령이 오가는 것은 다른 사건이다. 후속 명령 문자열만 찾는 규칙이 연결 순간을 탐지하지 못했다고 해서 패킷 수집 자체가 실패했다고 결론낼 수 없다.
- 보고서에는 시험 ID, 입력 PCAP, 센서 위치, 규칙 SID·개정 번호, 기대 경보를 적는다. '탐지 안 됨'을 '어떤 조건의 어떤 사건이 어디에서 보였으나 어느 규칙과 불일치했는가'로 구체화한다.
원본 크기로 보기 ↗- 표의 한 행은 특정 후속 명령에만 반응하는 규칙과 리버스 셸 탐지 기대 사이의 차이를 문제로 기록한다.
- 다른 행은 10초·50개 조건의 스캔 규칙과 관찰된 느린 패킷 빈도의 차이를 원인으로 설명한다. 시간 창과 건수 조건이 탐지 결과에 영향을 준다.
확인 기준주장에 대응하는 패킷·로그를 제시할 수 있는지 확인한다. 일반 셸 문자열 하나를 추가했다고 암호화·분할·다른 셸까지 모두 탐지한다고 쓰지 않는다.
한 조건만 바꿔 원인 가설을 시험하기
- 임계값을 낮추는 시험이라면 시간 창·규칙 내용·PCAP·실행 옵션은 고정한다. 바꾼 조건과 결과가 연결돼야 '어느 변경이 영향을 주었는가'를 설명할 수 있다.
- 예를 들어 50에서 20으로 기준을 낮춘 결과는 해당 관찰 빈도의 표본에 대한 결과다. 경계 아래·위의 표본과 정상 연결 폭주 표본으로 미탐 개선과 오탐 증가를 함께 확인한다.
확인 기준재시험 명령·입력 해시·규칙 차이·출력 시각을 한 시험 ID에 묶는다. 한꺼번에 여러 조건을 바꿨으면 원인을 단일 항목으로 확정하지 않는다.
전체 결과와 남은 한계를 같은 표에 남기기
- 시험별 실제 정답과 경보 결과를 모아 TP·FN·FP·TN을 센다. 경보가 나오지 않은 시험도 결과표에서 빠뜨리지 않아야 규칙 개선 전후를 공정하게 비교할 수 있다.
- 결론은 확인한 범위로 한정한다. '특정 평문 패턴을 포함한 격리 PCAP에서 탐지'와 '실시간 암호화 통신 전체를 탐지'는 증명 부담이 다르며 후자는 별도 근거 없이는 쓰지 않는다.
원본 크기로 보기 ↗- 실제 사건과 예측을 교차한 네 칸 중 FN과 FP가 별도로 표시된다. 보고서에는 미탐과 오탐을 다른 실패 유형으로 남긴다.
- 양성·음성의 두 축이 있으므로 경보 건수만 제시하는 표보다 시험 표본의 구성을 드러낼 수 있다.
확인 기준보고서를 읽는 사람이 같은 표본·설정으로 재현할 수 있고, 관찰 사실과 원인 추정과 미검증 범위를 구별할 수 있으면 증거 묶음이 완성된다.
실습에서 확인한 동작 원리
- 의 핵심은 바꾼 설정 목록보다 가설을 확인하거나 배제한 증거다.
- 탐지 개선은 정상 표본의 영향과 아직 시험하지 않은 조건을 함께 보고해야 설명 가능하다.
동작·명령 참고 문서
04예제로 따라가기
- 버퍼 고정: 8바이트 ASCII 버퍼 ABC12XYZ를 가정한다. 위치는 0부터 시작하며 ABC는 0~2, XYZ는 5~7이다.
- 첫 검색: ABC에 offset=0·depth=3을 적용하면 첫 세 바이트에서 일치한다. 검색 커서는 ABC 끝 다음인 위치 3을 기준으로 한다.
- 다음 시작: 두 번째 XYZ에 distance=2를 적용하면 위치 3에서 두 바이트를 건너뛰어 위치 5부터 찾는다.
- 범위 판정: within=3인 검색 범위에 XYZ 세 바이트가 정확히 들어오므로 조건이 맞는다. 이는 문서의 상대 범위 동작을 설명하는 무해한 표본이다.
- 실패 비교: ABC123XYZ에서는 XYZ 시작이 위치 6이어서 같은 3바이트 검색 범위에 전부 들어오지 않는다. 문자열 존재 여부만 비교한 결과와 달라진다.
05혼동하기 쉬운 점과 확인 기준
- 서로 다른 엔진이나 2·3의 문법·버퍼·정규화가 완전히 같다고 가정하고 규칙을 복사하면 결과가 달라질 수 있다.
- 문자열이 패킷에 있어도 방향· 상태·앱 파서·선택 버퍼·검사 깊이가 맞지 않으면 규칙은 일치하지 않는다.
06상세 노트 · 실습 자료
헤더 구조, 설정 예시, 수치 계산과 수업 캡처는 아래 노트에서 이어집니다.
공식 문서 · 표준
기초 개념과 동작 설명을 대조한 자료입니다. 제품 버전과 실제 설정에 따른 차이는 본문 및 원문에서 확인하세요.