Falco는 Linux 시스템을 대상으로 개발된 클라우드 네이티브 보안(Cloud-native Security) 툴입니다. Linux 커널 이벤트에 대한 규칙(Rule)을 지정하면 이에 따른 실시간 알림을 보내주는 역할을 수행합니다.

Falco가 지원하는 이러한 행위를 컨테이너 런타임 보안 활동이라고 하는데요. 이와 관련된 자세한 설명은 여기서 확인하실 수 있습니다.

Falco를 사용하는 이유

현재 컨테이너 런타임 보안 활동을 지원하기 위해 다양한 툴이 개발 및 유지보수되고 있습니다. 그 중 Falco는 아래와 같은 장점을 지니고 있습니다.

  • Kubernetes, Docker Swarm과 같은 다양한 Container Orchestration Platform에서 사용 가능
  • Kubernetes의 Daemonset으로 배포 및 실행을 지원하므로 모든 노드에 대한 모니터링이 용이
  • Kubernetes API Call을 활용할 수 있어 클러스터 내 Node 및 Pod의 상태를 모니터링 가능
  • Falco 가 사용할 수 있는 Default Ruleset이 미리 정의되어 있어 컨테이너 런타임 보안 활동을 쉽고 빠르게 시작 가능
  • 특정 조건에 대한 이상 행위를 감지하는 Custom Ruleset을 쉽게 정의 가능

Falco의 동작 방식

Falco의 동작 프로세스는 크게 아래 3단계로 나눌 수 있습니다.

  1. Linux Kernel의 System Call 또는 Kunernetes API Call 포착
  2. 사전 정의된 Ruleset (또는 Default Ruleset)에 따라 표시할 Output 처리
  3. 사전 정의된 채널로 Output 전송

Falco는 동작 중인 컨테이너에서 생성되는 여러 요청을 감시하기 위해 Ruleset을 사용하는데요. Falco의 Ruleset은 아래와 같이 정의됩니다.

- rule: Detect bash in a container # Rule 이름
  desc: You shouldn't have a shell run in a container # Rule 설명
  condition: container.id != host and proc.name = bash # 프로세스의 Call 중 Falco가 포착하는 조건
  output: Bash ran inside a container (user=%user.name command=%proc.cmdline %container.info) # 해당 Rule에 대해 Falco가 표시하는 Output 양식
  priority: INFO # Falco가 표시하는 Output의 Type

Falco다양한 채널을 통해 Output을 전송합니다. 그 중 대표적인 채널은 아래와 같습니다.

  • Standard Output
  • File
  • Syslog
  • HTTP[s]
  • gRPC

Falco 설치 방식

  • Kubernetes 클러스터에 Helm Chart로 설치

    • Kubernetes 클러스터에 Falco를 가장 쉽고 빠르게 설치하는 방법은 Helm을 이용하는 것입니다.
    • Helm으로 Falco를 설치하면, 배포된 Falco Pod의 로그를 확인함으로써 Falco Ouput 모니터링이 가능합니다.
    • Custom Ruleset을 yaml 파일로 정의한 다음, Helm으로 배포되어있는 Falco에 적용하는 것도 가능합니다.
  • Linux 호스트에 패키지로 설치

    • Falco 공식 패키지 저장소에서 각 시스템 아키텍처에 맞는 버전을 직접 설치 가능합니다.
    • 이렇게 설치한 Falco의 Configuration 및 Ruleset 파일 역시 호스트에 저장 및 사용되므로 수정이 필요하다면 호스트 내 파일을 직접 수정해야 합니다.
  • Linux 호스트에 컨테이너 이미지로 배포

References