Falco는 CNCF 인큐베이팅 프로젝트로, Linux 커널에서 시스템 콜을 실시간 분석하여 이상 행위를 탐지하는 런타임 보안 엔진입니다. Kubernetes, 컨테이너, 클라우드 환경에서 위협 탐지의 사실상 표준으로 자리잡고 있습니다.
eBPF 또는 커널 모듈로 시스템 콜을 후킹하여 프로세스, 파일, 네트워크 활동을 모니터링합니다.
YAML 기반 규칙으로 위협 시그니처를 정의. Falco는 기본 제공 규칙 세트(침투, 권한 상승 등)를 포함합니다.
표준 출력, Syslog, gRPC, Slack, PagerDuty 등으로 경보를 전송. 보안 오케스트레이션과 자연스럽게 연동됩니다.
기존 보안 솔루션(SELinux, AppArmor, auditd)과 비교한 Falco의 장점을 표로 정리했습니다.
| 기능 | Falco | auditd / SELinux | AppArmor |
|---|---|---|---|
| 컨테이너 인식 | ✅ 네이티브 (k8s 메타데이터) | ❌ 제한적 | ❌ 프로파일 필요 |
| 규칙 언어 | YAML + 매크로 (가독성 높음) | 복잡한 감사 규칙 | 텍스트 프로파일 |
| 클라우드 지원 | K8s audit log, AWS, GCP | ❌ | ❌ |
| 배포 용이성 | Helm, DaemonSet, Docker | 커널 파라미터 | 패키지 설치 |
| 실시간 경보 | 다중 출력(표준, gRPC, Slack 등) | syslog 기반 | syslog |
Falco는 커널 이벤트 → 규칙 엔진 → 출력 파이프라인으로 구성됩니다. 아래 다이어그램은 데이터 흐름을 단순화한 것입니다.
로컬 Docker 환경에서 Falco를 빠르게 경험해봅니다.
# 최신 Falco 이미지 pull & 실행 (권장: eBPF 드라이버)
docker run -d --name falco \
--privileged \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
-v /etc:/host/etc:ro \
falcosecurity/falco:latest
# 테스트 컨테이너 실행 & 쉘 획득
docker exec -it falco bash
# Falco 로그 확인 (호스트에서)
docker logs falco --tail 20
# 테스트: 새 컨테이너에서 'whoami' & 'curl' 실행
docker run --rm alpine sh -c "whoami; curl http://example.com"
# custom_rules.yaml (호스트에 저장)
- rule: AI Model Access Outside Allowed Path
desc: 모델 가중치 파일을 예상치 못한 프로세스가 읽음
condition: >
evt.type=open
and fd.name startswith /models/weights
and proc.name not in (python3,tritonserver)
output: >
비정상 모델 접근 (user=%user.name command=%proc.cmdline file=%fd.name)
priority: WARNING
tags: [ai, model-security]
# Falco 실행 시 규칙 추가 (볼륨 마운트)
docker run -d --name falco-custom \
--privileged \
-v $(pwd)/custom_rules.yaml:/etc/falco/rules.d/custom.yaml:ro \
-v /proc:/host/proc:ro \
-v /boot:/host/boot:ro \
-v /lib/modules:/host/lib/modules:ro \
-v /usr:/host/usr:ro \
-v /etc:/host/etc:ro \
falcosecurity/falco:latest
helm install falco falcosecurity/falco
| 옵션 (falco.yaml) | 기본값 | 설명 |
|---|---|---|
json_output | false | JSON 형식 로그 (프로그램 파싱에 유용) |
log_level | info | debug / info / warning / error |
time_format_iso_8601 | false | ISO 8601 타임스탬프 |
buffered_outputs | true | 출력 버퍼링 (성능 향상) |
rules_file | /etc/falco/rules.d/ | 사용자 정의 규칙 디렉터리 |
grpc_output | enabled: false | gRPC 출력 활성화 (Falco-sidekick) |
syscall_event_drops | threshold: 0.1 | 이벤트 드롭 허용 비율 |
modern_ebpf | false | 최신 eBPF 기능 사용 (커널 5.19+) |
syscall_event_drops.threshold를 0.2까지 높여도 탐지 정확도에 큰 영향 없음. 다만 priority가 INFO인 규칙은 알림 피로도를 낮추기 위해 필터링하세요.
커널 모듈보다 eBPF가 안전하고 업데이트가 쉬움. 최신 커널(5.19+)에서는 modern_ebpf: true를 활성화하세요.
falcosidekick를 통해 Slack, PagerDuty, S3 등으로 경보 전달. AI 모델 서빙 클러스터에 필수.
falco --stats 로 드롭률 확인. syscall_event_drops.threshold 조절 또는 CPU/메모리 증설.
기본 규칙 중 일부는 AI 학습 파이프라인에서 오탐 발생. 규칙 우선순위 조정 또는 exceptions 사용.
| 증상 | 원인 | 해결 |
|---|---|---|
| Falco가 시작되지 않음 | eBPF 헤더 누락 | falco-driver-loader 실행 또는 Docker 호스트 커널 헤더 설치 |
| 경보가 너무 많음 | 기본 규칙 + AI 워크로드 | 우선순위 WARNING 이상만 알림, 매크로 조건에 프로세스 예외 추가 |
| CPU 100% | 이벤트 폭주 | syscall_event_drops.threshold 증가, 드롭 허용 |
| K8s Audit Log 탐지 안 됨 | Falco 설정 누락 | falco.yaml 에 k8s_audit 섹션 활성화 및 webhook 설정 |