[CKS] Monitoring, Logging and Runtime Security - Falco
Monitoring, Logging and Runtime Security (20%)
- Perform behavioral analytics of syscall process and file activities at the host and container level to detect malicious activities
- Detect threats within physical infrastructure, apps, networks, data, users and workloads
- Detect all phases of attack regardless where it occurs and how it spreads
- Perform deep analytical investigation and identification of bad actors within environment
- Ensure immutability of containers at runtime
- Use Audit Logs to monitor access
Falco
리눅스 기반의 Cloud Native Runtime Security Tool
Falco는 컨테이너 및 오케스트레이션 환경에서 실시간으로 시스템 및 애플리케이션 활동을 모니터링하고 이벤트를 감지하는 오픈 소스 보안 도구. Falco는 이벤트 기반의 보안 모델을 사용하여 시스템 내에서 발생하는 이상 징후나 잠재적인 보안 위협을 식별하고 경고. 주로 컨테이너화된 환경에서 사용되며, Kubernetes, Docker, Containerd 등과 통합하여 사용될 수 있다.
Falco의 특징과 동작 방식
1. 시스템 및 컨테이너 이벤트 감지
- Falco는 커널 이벤트, 시스템 콜, 파일 시스템 활동, 네트워크 활동 등 다양한 시스템 및 컨테이너 활동을 실시간으로 모니터링하고 감지
2. 사용자 정의 규칙 및 시그니처
- 사용자는 Falco에서 감지하고 싶은 특정 이벤트에 대한 규칙 및 시그니처를 정의할 수 있음. Falco는 정의된 규칙을 기반으로 이벤트를 분석하고 경고를 생성함.
3. 이벤트 처리 및 알림
- Falco는 이벤트를 수집하고 이벤트를 처리하여 경고를 생성. 경고는 다양한 방법으로 전달될 수 있으며, 예를 들어 로그, 이메일, Slack, HTTP 등을 통해 알림을 제공.
4. 컨테이너 오케스트레이션 통합
- Falco는 Kubernetes 및 Docker와 같은 컨테이너 오케스트레이션 플랫폼과 통합될 수 있음. 이를 통해 환경에 대한 전반적인 보안 모니터링을 수행할 수 있음.
5. 친숙한 언어 및 레이아웃
- Falco는 강력한 규칙 시스템을 제공하면서도 간단하고 사용하기 쉬운 언어를 사용. 또한 출력된 경고 및 이벤트는 일반적인 로그 형식을 따르므로 분석 및 시각화가 용이.
6. 확장성 및 커스터마이징
- Falco는 유연한 확장성을 제공하며, 사용자가 필요에 따라 확장하고 사용자 정의 규칙을 추가하여 자신의 환경에 맞게 커스터마이징할 수 있음.
Falco는 클라우드 환경 및 컨테이너 기반의 아키텍처에서 보안 이벤트를 탐지하고 조치하는 데 사용되는 강력한 도구로, 시스템 보안을 강화하고 실시간으로 잠재적인 위협을 감지하는 데 도움이 됩니다.
Falco 사용 예제
worker node 에 falco가 설치되었다고 가정.
1. control-plane 노드에 테스트용 pod생성
# falco-test-pod.yml
apiVersion: v1
kind: Pod
metadata:
name: falco-test-pod
spec:
nodeName: k8s-worker1
containers:
- name: falco-test
image: busybox:1.33.1
command: ['sh', '-c', 'while true; do cat /etc/shadow; sleep 5; done']
2. worker-1 node에 Falco rules 파일 생성
# falco-rules.yml
- rule: spawned_process_in_test_container
desc: A process was spawned in the test container.
condition: container.name = "falco-test" and evt.type = execve
output: "%evt.time,%user.uid,%proc.name,%container.id,%container.name"
priority: WARNING
3. Run falco for 45 seconds using the rules file
falco -r falco-rules.yml -M 45
Falco 명령어
Falco는 명령줄 도구(CLI)와 설정 파일(yaml)을 통해 사용자가 정의한 규칙에 따라 이벤트를 실시간으로 탐지하고 통지할 수 있음.
https://falco.org/zh-cn/docs/reference/daemon/cli-arguments/
- Falco 설치 확인
falco --version
- Falco 도움말
falco -h
- Falco 실행 with rule file
falco -r <rule-files>
flaco -r falco-rule.yml
- Falco output format 설정
- -pc : container details
- -pk : container and kubernetes detail
falco -p <output_format>
falco -p "k8s_pod_uid=%k8s.pod.uid proc_pexepath=%proc.pexepath"
- Falco output fileds 조회
- output formatting 설정 : https://falco.org/ja/docs/outputs/formatting/
falco --list
- Falco data 수집시간 설정
- 45초 이후 falco 점검 종
falco -M <num-seconds>
falco -M 45
Falco Rule 파일
Falco Rule 파일은 Falco에서 이벤트를 감지하기 위한 규칙을 정의함.
규칙 파일은 YAML 형식으로 작성되며, 각 규칙은 이벤트를 어떻게 탐지할지를 설명함.
각 규칙은 조건(condition)과 액션(action)으로 구성됨.
- Rule 파일 형식
# rule.yaml
- rule: 예제 프로세스 실행 규칙
desc: 새로운 프로세스 실행 감지
condition: evt.type = execve
output: "새로운 프로세스 실행 - ProcName=%proc.name User=%user.name"
priority: WARNING
tags:
- 프로세스 실행
- 필드 정의
- rule: 규칙의 이름
- desc: 규칙에 대한 설명
- condition: 이벤트를 탐지하기 위한 조건을 지정. 여기서는 evt.type = execve로 설정되어 "execve" 이벤트를 감지하고 있음.
- output: 규칙이 만족될 때 출력되는 메시지를 정의. 여기서는 새로운 프로세스 실행에 대한 정보를 출력.
- priority: 규칙의 우선 순위. 가능한 값 : EMERGENCY, ALERT, CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG 등
- tags: 규칙에 대한 태그를 정의. 생략 가능.
- 예제 :
- 이름이 nginx 인 컨테이너에 대하여 spawned process가 존재하는지 탐지하는 룰 생성
- 출력 : timestamp, process name, UID, container ID, container name, container image name
#nginx-rules.yml
- rule: spawned_process_in_nginx_container
desc: A process was spawned in the Nginx container.
condition: container.name = "nginx" and evt.type = execve
output: "%evt.time,%proc.name,%user.uid,%container.id,%container.name,%container.image"
priority: WARNING
Falco Rule - 대표적인 이벤트 유형
- Process Execution (프로세스 실행):
- 이벤트 유형: execve
- 특징: 새로운 프로세스가 실행될 때 탐지. 프로세스의 실행에 대한 모든 세부 정보를 제공
- File Open (파일 오픈):
- 이벤트 유형: open, openat
- 특징: 파일이 열릴 때 탐지. 파일 경로와 함께 어떤 프로세스가 어떤 목적으로 파일을 열었는지에 대한 정보를 제공
- Network Connection (네트워크 연결):
- 이벤트 유형: connect, accept
- 특징: 네트워크 연결이 발생할 때 탐지. 특정 프로세스가 어떤 주소와 포트로 연결을 시도하거나 수락했는지에 대한 정보를 제공
- File Write (파일 쓰기):
- 이벤트 유형: write, pwrite
- 특징: 파일에 쓰기 작업이 수행될 때 탐지. 어떤 프로세스가 어떤 파일에 어떤 내용을 쓰고 있는지에 대한 정보를 제공
- Privilege Escalation (권한 상승):
- 이벤트 유형: setuid, setgid
- 특징: 프로세스가 사용자 ID나 그룹 ID를 변경하여 권한 상승을 시도할 때 탐지. 특권을 가진 프로세스의 행동을 감지
- Container Events (컨테이너 이벤트):
- 이벤트 유형: container, run, exec, attach
- 특징: 컨테이너 생명주기 관련 이벤트를 감지. 컨테이너가 실행되거나 종료되는 등의 상태 변화를 탐지할 수 있음.
- Unexpected Kernel Module Loading (예상치 못한 커널 모듈 로딩):
- 이벤트 유형: insmod, rmmod
- 특징: 예상치 못한 커널 모듈 로딩을 감지. 커널에 로드되는 모듈에 대한 이벤트를 제공.