[C언어] Data Conversion Tool - RawVera

◎ Sig Test 탭이 필요한 이유
- 시그니처 규칙을 만들거나 점검할 때 가장 답답한 순간은 “규칙은 맞는 것 같은데 실제로 걸리는지 확신이 없는 상황”입니다.
- RawVera의 Sig Test 탭은 바로 그 문제를 해결하기 위한 실전형 테스트 공간으로, Snort 2와 Snort 3 규칙을 입력해 보고, 서버/클라이언트 통신을 직접 일으키면서 매칭 여부를 확인할 수 있게 구성되어 있습니다.
- 단순 문자열 비교가 아니라 규칙 구조와 sticky buffer까지 고려하는 점이 특히 눈에 띕니다.
◎ 화면 구성과 기본 흐름
- 이미지 기준으로 화면은 왼쪽의 서버 영역과 오른쪽의 클라이언트 영역으로 나뉘어 있고, 하단에는 전송용 입력창이 배치되어 있습니다.
- 상단에는 Snort 2 / Snort 3 선택 라디오 버튼과 Snort Rule 입력창이 있으며, 가운데에는 Server(Listening)과 Client(Connection) 그룹 박스가 크게 보입니다.
- 서버 쪽에는 포트 입력, Listen/Stop 버튼, 서버 로그가 있고, 클라이언트 쪽에는 서버 IP와 포트, Connect/Disconnect 버튼, 클라이언트 로그가 배치되어 있습니다.
◎ Snort 2와 Snort 3 선택 방식
- 이 탭의 핵심은 Snort 버전 전환이 명확하다는 점입니다.
- 코드에서는 기본값을 Snort 3으로 두고 있으며, Snort 2와 Snort 3 라디오 버튼을 눌러 규칙 작성 방식을 바꿀 수 있습니다.
- Snort 2는 content modifier 중심으로 해석하고, Snort 3은 sticky buffer 개념을 적극 반영하는 구조입니다.
- 그래서 같은 규칙이라도 버전에 따라 문법을 다르게 써야 하는 상황을 바로 비교하면서 점검할 수 있습니다.
◎ 규칙 입력, 매칭 테스트, 로그 확인
- 규칙 입력창은 단순 메모 입력칸이 아닙니다.
- 코드에서는 입력된 규칙을 파싱해서 content, pcre, distance, within, depth, offset 같은 옵션을 분해하고, nocase와 fastpattern도 별도로 처리합니다.
- 또 httpuri, httpmethod, httpheader, httpclientbody, httpcookie, filedata, pktdata, rawdata, emailbody, emailheader, dnsquery, sipheader, sslstate, sslversion, base64data 등 다양한 sticky buffer를 인식합니다.
- 즉, HTTP만 보는 도구가 아니라 여러 프로토콜 영역을 넓게 다루는 규칙 테스트기입니다.
- 분석 흐름은 꽤 체계적입니다.
- content는 최대 10개까지 파싱되며, 각 content 사이의 순서와 거리 조건을 반영해 실제 데이터 매칭을 검사합니다.
- distance와 within은 이전 매치 기준으로 다음 검색 범위를 조정하고, depth와 offset은 검색 시작점과 길이 제한을 제어합니다.
- 이 때문에 “룰은 맞는데 실제 페이로드에서는 왜 안 걸릴까” 같은 문제를 좁혀 보기 좋습니다.
- PCRE도 지원합니다.
- 코드에서는 pcre 패턴과 수식자를 분리해 저장하고, 기본적인 정규식 매칭까지 수행합니다.
- 또한 \xHH 형태의 hex escape를 확장해서 실제 데이터와 비교하므로, 인코딩된 문자열을 포함한 패턴도 확인할 수 있습니다.
- 단순 문자열 룰뿐 아니라 정규식 기반 탐지 룰까지 함께 검증할 수 있다는 점에서 활용 범위가 넓습니다.
◎ 서버 리스닝과 클라이언트 연결 기능
- 서버 기능은 실전 테스트에 상당히 유용합니다.
- StartServer를 누르면 지정한 포트로 TCP 소켓을 열고 리스닝을 시작하며, 접속이 들어오면 서버 로그에 연결 상태가 기록됩니다.
- 수신 데이터는 버퍼 단위로 읽히고, 그 내용을 바로 규칙 매칭에 넣어 “Matching!” 여부를 표시합니다.
- Stop 버튼을 누르면 리스닝 소켓과 수락된 소켓을 닫고 서버 상태를 정리합니다.
- 클라이언트 기능도 마찬가지로 분명합니다.
- 서버 IP와 포트를 입력한 뒤 Connect를 누르면 TCP 연결을 만들고, 연결 성공 시 전송 버튼이 활성화됩니다.
- 이후 Send 입력창에 넣은 텍스트를 UTF-8로 변환해 서버에 보내며, 수신 데이터는 클라이언트 로그에 그대로 출력됩니다.
- Disconnect는 연결을 종료하고 내부 상태를 초기화합니다.
- 이런 구조 덕분에 서버와 클라이언트를 한 프로그램 안에서 동시에 돌려보며 규칙 반응을 실험할 수 있습니다.
◎ 전송 기능과 디버깅 활용법
- 화면 하단의 Send 입력창은 테스트용 페이로드를 넣는 곳입니다.
- 실제 규칙이 어떤 문자열에서 걸리는지 확인하려면, 여기서 HTTP 요청 문자열이나 임의의 탐지 대상 문자열을 직접 넣어 보내면 됩니다.
- 로그에는 전송/수신 내용이 남기 때문에, 어떤 데이터가 지나갔고 어떤 시점에 매칭됐는지를 추적하기 쉽습니다.
- 따라서 단순 데모가 아니라 룰 튜닝용 워크벤치로 쓰기 좋습니다.
- 버튼별 역할도 깔끔합니다.
- Server Listening 영역에는 Listen과 Stop, Clear Log가 있고, Client Connection 영역에는 Connect, Disconnect, Clear Log가 있습니다.
- Snort Rule 입력창은 Ctrl+A로 전체 선택이 되도록 되어 있어 규칙을 빠르게 교체할 수 있습니다.
- 그리고 Snort 2와 Snort 3 버튼을 누르면 예시 규칙도 자동으로 바뀌어서, 버전별 문법 차이를 바로 체감할 수 있습니다.
- 예시 규칙 전환도 꽤 실용적입니다.
- Snort 2 예시는 content와 httpmethod, httpuri 같은 전통적 modifier 조합을 보여 주고, Snort 3 예시는 sticky buffer를 전면에 둔 문법을 보여 줍니다.
- 즉, 같은 탐지 의도를 버전별로 어떻게 써야 하는지 비교 학습하기 좋습니다.
- 입문자 입장에서는 문법 차이를 익히는 데 도움이 되고, 실무자 입장에서는 룰 마이그레이션 검증에 도움이 됩니다.
- 내부 구현을 보면 이 탭은 꽤 많은 보조 로직을 갖고 있습니다.
- 단순 문자열 비교 외에도 대소문자 무시 옵션, OR 패턴 처리, 간단한 범위 반복, quote 처리, sticky buffer 적용, base64 관련 옵션 인식까지 포함합니다.
- 즉, 화면은 단순하지만 실제로는 Snort 룰의 핵심 요소를 꽤 넓게 재현해 테스트하는 구조입니다.
◎ 실무에서 유용한 사용 포인트
- 실무적으로는 다음 같은 상황에서 특히 유용합니다.
- 새로 만든 규칙이 실제로 데이터에 반응하는지 확인할 때, Snort 2와 3 사이 문법 차이를 검증할 때, 특정 sticky buffer 안에서만 content가 먹히는지 볼 때, 그리고 PCRE 기반 탐지가 기대한 대로 동작하는지 확인할 때입니다.
- 규칙 하나를 만들고 외부 장비에 올리기 전에, 로컬에서 먼저 검증해 볼 수 있다는 점이 가장 큰 장점입니다.
◎ 마무리 정리
- 정리하면 RawVera Sig Test는 Snort 규칙 작성, 버전 비교, 서버/클라이언트 통신 테스트, 로그 확인, 패턴 매칭 검증을 한 번에 처리할 수 있는 탭입니다.
- 특히 Snort 2와 Snort 3의 문법 차이, sticky buffer 처리, distance/within/depth/offset, pcre, nocase, fastpattern 같은 핵심 옵션을 실제 데이터로 점검할 수 있어 룰 검증용으로 매우 유용합니다.
- 단순 테스트 창이 아니라, 보안 분석가가 규칙을 다듬는 과정 자체를 돕는 작업대라고 보시면 이해가 빠릅니다.
반응형
