デフォルトのFalcoルールセットは、ルールの記述を開始しやすくするいくつかのマクロを定義します。これらのマクロは、多くの一般的なシナリオのショートカットを提供し、ユーザー定義のルールセットで使用できます。Falcoは、ユーザーの環境に固有の設定を提供するためにユーザーがオーバーライドする必要があるマクロも提供します。提供されたマクロは、ローカルルールファイルに追加することもできます。
書き込み用に開かれたファイル
- 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 Nameがセット
- 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ポート(要塞またはジャンプボックス)に接続できるホストを反映します。
- 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
Kubernetes API Server
ここにKubernetes API ServiceのIPを設定します。
- macro: k8s_api_server
condition: (fd.sip="1.2.3.4" and fd.sport=8080)
Kubernetes APIとの通信を許可されたコンテナ
Kubernetes 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)
Kubernetes Service NodePortsとの通信を許可されたコンテナ
- macro: nodeport_containers
condition: container
Table of contents