본 프로젝트는 GoLang으로 작성된 실시간 eBPF 시스템콜 로그 분석 및 보안 룰 엔진입니다. 본 프로젝트는 중앙집중형 stateful set pod으로 배포되어 eBPF 에이전트(Collector)에 의해 수집된 시스템콜 이벤트를(현재 PoC 단계에서는 로그 파일, 최종적으로는 Kafka 스트림) 입력받아, YAML에 정의된 보안 룰셋과 비교 분석합니다.
분석 결과, 룰을 위반하는 행위(예: 민감 파일 접근, 권한 상승 시도)가 감지되면 즉시 알림(현재 콘솔 출력, 추후 웹훅 부착)을 발생시키는 것을 목적으로 합니다.
-
파일 기반 분석(PoC에서만 적용) : main.go가 로그 파일을 직접 읽어 한 줄씩 파싱하고 룰 위반 여부를 즉시 분석합니다.
-
동적 로그 파싱 : eBPF가 생성하는 다양한 구조의 JSON 로그(시스템콜마다 필드가 다름)를 처리하기 위해 map[string]interface{}를 사용하여 유연하게 파싱합니다.
-
YAML 기반 룰셋 : ruleset_config.yaml 파일을 통해 보안 탐지 룰을 유연하게 정의하고 수정할 수 있습니다.
-
룰 평가 엔진 : equals, contains_any, not_contains_any, starts_with_any 등 다양한 operator를 지원하며, flags 필드에 대한 비트 연산(Bitwise operation) 평가를 지원합니다.
-
확장 가능한 아키텍처 : Alerter (알림) 및 Source (입력) 인터페이스를 정의하여, 향후 Kafka Consumer, Slack/Webhook 알림 등 새로운 모듈을 쉽게 추가할 수 있도록 설계되었습니다.
-
GoLang : Go 1.21 이상
-
Go 의존성 : gopkg.in/yaml.v3 (룰셋 파싱용)
gopkg.in/check.v1 (yaml.v3의 하위/간접 의존성) go mod download {의존성 패키지} "github.com/segmentio/kafka-go" (카프카 라이브러리) -
(향후) 스트리밍 : Apache Kafka (실시간 분석 모드 시)
-
(향후) 배포 : Kubernetes (StatefulSet 배포 시)
현재 PoC(Proof of Concept)는 로컬 로그 파일을 인자로 받아 실행됩니다.
# PoC 모듈 빌드
go build -o rule-engine ./cmd/engine/
go run 으로 빌드와 실행
# test_logs.txt 파일을 인자로 전달
go run ./cmd/engine/main.go test_logs.txt
1.의 바이너리 빌드를 수행한 경우
./rule-engine test_logs.txt
ruleset_config.yaml 파일의 룰을 수정한 뒤, 분석기를 다시 실행하여 변경된 룰이 적용되는지 확인할 수 있습니다.
/rule-engine
|
|-- go.mod # Go 모듈 파일
|
|-- cmd/engine/
| |-- main.go # (✔️ PoC) 현재의 실행 파일. 로그 파일 파싱 및 엔진 실행
|
|-- pkg/
| |-- config/
| | |-- rules.go # (✔️ PoC) ruleset_config.yaml 로딩
| |
| |-- models/
| | |-- models.go # (✔️ PoC) 'Event' (map[string]interface{}) 및 'Violation' 정의
| |
| |-- engine/
| | |-- engine.go # (✔️ PoC) 룰 엔진 코어 (이벤트 정규화, 룰 평가 요청)
| | |-- evaluator.go # (✔️ PoC) 룰 조건(operator) 실제 평가 로직
| |
| |-- input/
| | |-- input.go # (Staged) 향후 Kafka/File 소스용 인터페이스 (현재는 비어있음)
| | |-- kafka.go # (Stub) 향후 Kafka Consumer 구현을 위한 스텁
| |
| |-- alerter/
| | |-- alerter.go # (✔️ PoC) 알림용 인터페이스
| | |-- print.go # (✔️ PoC) PoC용 콘솔(print) 알림 구현
| | |-- slack.go # (Stub) 향후 Slack 알림 구현을 위한 스텁
|
|-- ruleset_config.yaml # (✔️ PoC) 제공해주신 룰셋
|
|-- test_logs.txt # (✔️ PoC) PoC 테스트용 샘플 로그