기본 매크로
기본 팔코 규칙 집합은 규칙 작성을 보다 쉽게 시작할수 있도록 여러 매크로를 정의한다. 이런 매크로는 여러 일반적인 시나리오에 대한 바로가기를 제공하며 모든 사용자 정의 규칙 집합에서 사용할 수 있다. 팔코는 사용자 환경에 특정한 설정을 제공하기 위해 사용자가 재정의해야 하는 매크로도 제공한다. 제공된 매크로를 로컬 규칙 파일에 추가할 수도 있다.
쓰기 작업을 위해 열린 파일
- macro: open_write
condition: (evt.type=open or evt.type=openat) and evt.is_open_write=true and fd.typechar='f' and fd.num>=0
읽기 작업을 위해 열린 파일
- macro: open_read
condition: (evt.type=open or evt.type=openat) and evt.is_open_read=true and fd.typechar='f' and fd.num>=0
언제나 참(True)이 아님
- macro: never_true
condition: (evt.num=0)
항상 참(True)
- macro: always_true
condition: (evt.num=>0)
Proc 이름이 설정됨
- macro: proc_name_exists
condition: (proc.name!="<NA>")
파일 시스템 객체 이름이 변경됨
- macro: rename
condition: evt.type in (rename, renameat)
새로운 디렉토리가 생성됨
- macro: mkdir
condition: evt.type = mkdir
파일 시스템 객체가 제거됨
- macro: remove
condition: evt.type in (rmdir, unlink, unlinkat)
파일 시스템 객체가 수정됨
- macro: modify
condition: rename or remove
새로운 프로세스가 생성됨
- macro: spawned_process
condition: evt.type = execve and evt.dir=<
바이너리용 공통 디렉터리
- macro: bin_dir
condition: fd.directory in (/bin, /sbin, /usr/bin, /usr/sbin)
셸이 시작됨
- macro: shell_procs
condition: (proc.name in (shell_binaries))
알려진 민감한 파일
- macro: sensitive_files
condition: >
fd.name startswith /etc and
(fd.name in (sensitive_file_names)
or fd.directory in (/etc/sudoers.d, /etc/pam.d))
새로 생성된 프로세스
- macro: proc_is_new
condition: proc.duration <= 5000000000
인바운드 네트워크 연결
- macro: inbound
condition: >
(((evt.type in (accept,listen) and evt.dir=<)) or
(fd.typechar = 4 or fd.typechar = 6) and
(fd.ip != "0.0.0.0" and fd.net != "127.0.0.0/8") and (evt.rawres >= 0 or evt.res = EINPROGRESS))
아웃바운드 네트워크 연결
- macro: outbound
condition: >
(((evt.type = connect and evt.dir=<)) or
(fd.typechar = 4 or fd.typechar = 6) and
(fd.ip != "0.0.0.0" and fd.net != "127.0.0.0/8") and (evt.rawres >= 0 or evt.res = EINPROGRESS))
인바운드 혹은 아웃바운드 연결
- macro: inbound_outbound
condition: >
(((evt.type in (accept,listen,connect) and evt.dir=<)) or
(fd.typechar = 4 or fd.typechar = 6) and
(fd.ip != "0.0.0.0" and fd.net != "127.0.0.0/8") and (evt.rawres >= 0 or evt.res = EINPROGRESS))
객체가 컨테이너인 경우
- macro: container
condition: container.id != host
대화형 프로세스 생성
- macro: interactive
condition: >
((proc.aname=sshd and proc.name != sshd) or
proc.name=systemd-logind or proc.name=login)
재정의할 매크로
아래 매크로에는 사용자의 특정 환경에 대해 재정의할 수 있는 값이 포함되어 있다.
공통 SSH 포트
SSH 서비스를 제공하는 환경의 포트를 반영하도록 매크로를 재정의한다.
- macro: ssh_port
condition: fd.sport=22
허용된 SSH 호스트
알려진 SSH 포트(예: 배스천(bastion) 혹은 점프박스)에 연결할 수 있는 호스트를 반영하도록 매크로를 재정의한다.
- macro: allowed_ssh_hosts
condition: ssh_port
사용자가 허용한 컨테이너
권한모드에서 실해이 허용된 컨테이너를 화이트 리스트에 추가한다.
- macro: user_trusted_containers
condition: (container.image startswith sysdig/agent)
셸 생성이 허용된 컨테이너
컨테이너가 CI/CD 파이프라인에서 사용되는 경우, 필요할 수 있는 셸 생성이 허용된 컨테이너를 화이트리스트에 추가한다.
- macro: user_shell_container_exclusions
condition: (never_true)
EC2 메타 데이터 서비스와 통신할 수 있는 컨테이너
EC2 메타 데이터 서비스와 통신할 수 있는 컨테이너를 화이트리스트에 추가한다. 기본값: 모든 컨테이너
- macro: ec2_metadata_containers
condition: container
쿠버네티스 API 서버
여기에서 쿠버네티스 API 서비스의 IP를 설정한다.
- macro: k8s_api_server
condition: (fd.sip="1.2.3.4" and fd.sport=8080)
쿠번네티스 API 와 통신할 수 있는 컨테이너
쿠버네티스 API 서비스와 통신할 수 있는 컨테이너를 화이트리스트에 추가한다. k8s_api_server 를 설정해야 한다.
- macro: k8s_containers
condition: >
(container.image startswith gcr.io/google_containers/hyperkube-amd64 or
container.image startswith gcr.io/google_containers/kube2sky or
container.image startswith sysdig/agent or
container.image startswith sysdig/falco or
container.image startswith sysdig/sysdig)
쿠버네티스 서비스 NodePort와 통신할 수 있는 컨테이너
- macro: nodeport_containers
condition: container
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.
최종 수정 October 22, 2020: Update default-macros.md (a905ad6)