
Suricata eve.json 로그를 CLI 도구로 파싱, 필터링, 시각화하여 알림, 흐름, DNS 및 페이로드를 처리합니다. Suricata 학습 및 규칙 테스트를 위한 튜토리얼을 포함합니다.
Suricata 사용법을 배우기 시작했을 때, eve.json 파일을 검사할 도구가 필요하다는 것을 금방 깨달았습니다. 대부분의 튜토리얼과 문서에서는 다음과 같은 작업을 수행하기 위해 스택을 설치할 것을 권장했습니다:
매우 유용하지만, 이벤트를 빠르게 확인만 하면 되는 경우는 어떨까요?
조만간 여러분은 다음과 같은 작업에 지겨워 죽을 것입니다:
cat eve.json | jq -r -c 'select(.event_type=="alert")|.payload'| base64 --decode
SuricataLog는 Suricata 로그 파일(예: /var/log/suricata/eve.json)을 파싱하고 표시하는 도구/스크립트 모음입니다.
Eve JSON 형식은 그렇게 복잡하지 않아서, 제 홈 네트워크 분석에 가장 유용할 것 같은 기능들을 몇 가지 스크립트로 작성했습니다.
보너스로, 제 학습 경험을 튜토리얼로 작성했으니 Suricata에 대해 배우고 테스트하는 방법을 익히는 데 활용할 수 있습니다.
시작하기 전에 환경이 준비되었는지 확인하세요:
python3 -m venv ~/virtualenv/suricatalog
. ~/virtualenv/suricatalog/bin/activate
python3 -m pip install --upgrade pip setuptools wheel
pip3 install --upgrade SuricataLog
git clone [email protected]:josevnz/SuricataLog.git
cd SuricataLog
python3 -m venv ~/virtualenv/suricatalog
. ~/virtualenv/suricatalog/bin/activate
python3 -m pip install --upgrade build
python3 -m build
pip3 install dist/SuricataLog-X.Y.Z-py3-none-any.whl
기여하고 싶으신가요? 또는 버그를 발견했고 패치를 제출할 수 있다고 생각하시나요? 좋습니다! 개발 모드로 실행하려면 다음을 수행하세요:
git clone [email protected]:josevnz/SuricataLog.git
cd SuricataLog
python3 -m venv ~/virtualenv/suricatalog
. ~/virtualenv/suricatalog/bin/activate
pip install --upgrade pip
python -m pip install --upgrade build
pip install textual-dev
pip install --editable .
그 후 단위 테스트를 실행하는 것은 매우 쉽습니다:
(SuricataLog) [josevnz@dmaf5 SuricataLog]$ python -m unittest test/*.py
.........
----------------------------------------------------------------------
Ran 9 tests in 0.334s
OK
단위 테스트가 실패하면, 문제를 해결할 첫 번째 장소가 될 가능성이 높습니다.
또한 textualize 콘솔을 실행하고 콘솔 메시지를 모니터링하는 것을 권장합니다:
# textual console
textual console --exclude SYSTEM --exclude EVENT
그런 다음 다른 터미널에서:
textual run --dev --command eve_log --timestamp '2015-01-01 10:41:21.642899' test/eve.json
이렇게 하면 디버그 메시지도 콘솔에 출력됩니다(콘솔을 '--exclude DEBUG'로 다시 시작하면 제외할 수 있습니다).
자세한 내용은 DOCKER.md를 확인하세요.
가상 환경에 모든 것이 설치되면 스크립트를 호출할 수 있어야 합니다.
자동 완성을 사용하여 설치된 애플리케이션을 확인할 수 있습니다. 가상 환경을 활성화한 후:
eve_[tab][탭]
Bash 자동 완성 확장을 설치하면 플래그에 대한 제안도 받을 수 있습니다.
직접 확인해 보세요(--help를 사용하여 지원되는 옵션을 확인하는 것을 잊지 마세요).

eve_log --timestamp '2015-01-01 10:41:21.642899' --formats TABLE test/eve.json
(suricatalog) [josevnz@dmaf5 SuricataLog]$ eve_json --help
usage: eve_json [-h] [--nxdomain | --payload | --flow | --netflow NETFLOW | --useragent] eve [eve ...]
이 스크립트는 [15.1.3. Eve JSON 'jq' 예제](https://suricata.readthedocs.io/en/suricata-6.0.0/output/eve/eve-json-
examplesjq.html)에서 제공된 예제에서 영감을 받았습니다. 몇 가지 참고 사항: * 출력은 컬러화된 JSON을 사용합니다.
positional arguments:
eve 파싱할 하나 이상의 /var/log/suricata/eve.json 파일 경로.
optional arguments:
-h, --help 이 도움말 메시지를 표시하고 종료합니다.
--nxdomain NXDOMAIN이 있는 DNS 레코드 표시
--payload 인쇄 가능한 페이로드가 있는 알림 표시
--flow 프로토콜 및 대상 포트별 집계된 플로우 보고서
--netflow NETFLOW 주어진 IP 주소에 대한 넷플로우 가져오기
--useragent HTTP 트래픽에서 상위 사용자 에이전트
아래 몇 가지 예제를 확인하세요:

eve_json --nxdomain test/eve.json

eve_json --payload ~/Downloads/eve.json

eve_json --flow test/eve_udp_flow.json

eve_json --netflow 224.0.0.251 test/eve_udp_flow.json

eve_json --useragent test/eve.json

eve_server 래퍼를 사용하여 브라우저에서 Suricata Log 애플리케이션을 실행할 수 있습니다:
# eve.json 파일에서 플로우 보고서 표시
eve_server --application eve_json -- --flow ~/eve.json
# NX 도메인 보고서 표시
eve_server --application eve_json -- --nxdomain ~/eve.json
# eve.json 레코드 검사
eve_server --applications eve_log -- ~/eve.json
'--'를 전달하여 해당 옵션이 호출하려는 기본 eve_*에 속한다는 것을 서버에 알려야 합니다.
Docker 컨테이너에서 SuricataLog를 실행하는 것도 가능합니다. 자세한 내용은 DOCKER.md를 참조하세요.
uv가 있다면 다음과 같이 간단히 실행할 수 있습니다:
uvx --from SuricataLog eve_log /var/log/suricata/eve.json
uvx --from SuricataLog eve_json --useragent /var/log/suricata/eve.json
uvx --from SuricataLog eve_server --application eve_json -- --flow /var/log/suricata/eve.json
원리를 이해하셨을 것입니다.
8.6 프로그램 가능 완성을 최대한 따르려고 노력했습니다.
가장 일반적인 플래그에 대한 자동 완성을 제공했습니다. 모든 플래그를 확인하려면 스크립트 중 하나에 '--help'를 전달하면 됩니다.
모든 SuricataLog 스크립트에 대해 Bash 자동 완성을 설치할 수 있습니다. 'eve_autocomplete'를 실행하고 지시를 따르세요:
eve_autocomplete --help
이 프로젝트는 개인 시간에 작업하며, 모든 Linux/Python 조합을 지원할 수 없습니다. 다음은 현재 테스트 환경이며, 예고 없이 변경될 수 있습니다.
다음은 언제든지 환영합니다:
| SuricataLog | 지원 여부 | OS | Python | Suricata |
|---|
| <= 0.8 | 아니오 | NA | < 3.8 | 6.04 |
| 0.9+ | 아니오 | fedora 37 | => 3.11.4 | 6.04 |
| 0.9+ | 아니오 | Armbian 23.02.2 Jammy | => 3.10.6 | 6.04 |
| 0.9+ | 아니오 | Ubuntu 20.04.4 LTS (Focal Fossa) | => 3.8.10 | 6.04 |
| 1.0.3+ | 예 | fedora 40 | => 3.11.4 | 7.0.6 |