Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
kafel — システムコールフィルタリングポリシーを指定するための言語とライブラリ。 | Kitploit
ツール/GitHubGitHub/google/kafel
静的分析コード分析ユーティリティとフレームワーク
GitHubgoogle/kafel

kafel

システムコールフィルタリングポリシーを指定するための言語とライブラリ。

リポジトリを見るウェブサイト
3635935ヶ月前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

これは何ですか?

Kafel は、システムコールフィルタリングポリシーを指定するための言語とライブラリです。 ポリシーは BPF コードにコンパイルされ、seccomp-filter と共に使用できます。

これは Google の公式製品ではありません。

使い方

詳細なエラー報告あり

root@kitploit:~
struct sock_fprog prog;
kafel_ctxt_t ctxt = kafel_ctxt_create();
kafel_set_input_string(ctxt, seccomp_policy);
if (kafel_compile(ctxt, &prog)) {
  fprintf(stderr, "policy compilation failed: %s", kafel_error_msg(ctxt));
  kafel_ctxt_destroy(&ctxt);
  exit(-1);
}
kafel_ctxt_destroy(&ctxt);
prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog, 0, 0);
free(prog.filter);

詳細なエラー報告なし

root@kitploit:~
struct sock_fprog prog;
if (kafel_compile_string(seccomp_policy, &prog)) {
  fputs("policy compilation failed", stderr);
  exit(-1);
}
prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, &prog, 0, 0);
free(prog.filter);

ポリシー言語

ポリシーを定義するために、シンプルな言語が使用されます。

ポリシーファイルはステートメントで構成されます。

ステートメントは次のいずれかです:

  • 定数定義
  • ポリシー定義
  • ポリシー定義ステートメント
  • デフォルトアクションステートメント

ファイルスコープに配置されたポリシー定義ステートメントは、暗黙のトップレベルポリシーに追加されます。 このトップレベルポリシーがコンパイルされます。

デフォルトアクションステートメント

root@kitploit:~
DEFAULT the_action

どのルールにも一致しなかった場合に the_action アクションを実行することを指定します。

デフォルトアクションは一度だけ指定する必要があります。

ポリシーファイルでデフォルトアクションが指定されていない場合、デフォルトアクションは KILL になります。

数値

Kafel は以下の数値表記をサポートしています:

  • 10進数 42
  • 16進数 0xfa1
  • 8進数 0777
  • 2進数 0b10101

定数定義

ポリシーをより読みやすくするために、数値定数を定義できます。 定数定義はポリシーファイルのほぼどこにでも配置できます。 定数定義はポリシー定義の内部には配置できません。 定義された定数は、数値が期待される場所であればどこでも使用できます。

root@kitploit:~
#define MYCONST 123

ポリシー定義

ポリシー定義は、アクションブロックと use ステートメントのリストをカンマで区切ったものです。

samples/ には、サポートされている機能を示すサンプルポリシーがいくつか含まれています。

Use ステートメント

USE someOtherPolicy は、someOtherPolicy の本体がその場所にペーストされたかのように動作します。use ステートメントより前に定義されたポリシーのみを使用できます。

use ステートメントを使用すると、より大きなポリシーの構成要素となる意味のあるフィルタリングルールのグループを作成できます。

アクションブロック

アクションブロックは、ターゲットと、カンマで区切られたシステムコール一致ルールのリストで構成されます。

最初に一致したルールのターゲットがポリシーの決定となります。

次の表は、Kafel のターゲットとそれに対応する seccomp-filter の戻り値の一覧です。

システムコール一致ルール

ルールは、システムコール名と、オプションのブール式のリストで構成されます。

ブール式のリストはカンマで区切られます。カンマは意味的に || と同等ですが、優先順位が最も低いため、読みやすい場合があります。

システムコールの命名

通常、システムコールは Linux カーネルで定義された名前で指定されます。ただし、標準のシステムコールリストにない カスタムシステムコール をフィルタリングすることもできます。 定数を定義してシステムコール名の代わりに使用するか、SYSCALL キーワードを利用できます。

root@kitploit:~
#define mysyscall -1

POLICY my_const {
  ALLOW {
    mysyscall
  }
}

POLICY my_literal {
  ALLOW {
    SYSCALL[-1]
  }
}

アーキテクチャ固有のフィルター

ON ガードを使用して、システムコールルールを一部のアーキテクチャに制限できます。ガードは単一のアーキテクチャ名、または波括弧で囲まれたカンマ区切りのリストを受け入れます。名前は kafel_set_target_archs が認識するターゲットに対応します(例:x86_64、x86、arm、aarch64、mips64、riscv64、m68k)。

root@kitploit:~
ALLOW {
  io_uring_setup ON x86_64,
  arm_fadvise64_64 ON arm
}

ガード外のアーキテクチャ向けにコンパイルする場合、そのシステムコールルールは無視されるため、クロスアーキテクチャポリシーでシステムコールの可用性の違いを考慮してポリシー全体を複製する必要がなくなります。

引数フィルタリング

ブール式は、引数に基づいてシステムコールをフィルタリングするために使用されます。式は C 言語の構文に似ていますが、算術演算子はありません。

root@kitploit:~
some_syscall(first_arg, my_arg_name) { first_arg == 42 && my_arg_name != 42 }

ビット単位の AND (&) および OR (|) 演算子を使用してフラグをテストできます。

root@kitploit:~
mmap { (prot & PROT_EXEC) == 0 },
open { flags == O_RDONLY|O_CLOEXEC }

よく知られたシステムコールの引数を宣言する必要はなく、Linux カーネルや man ページで指定されている通常の名前をそのまま使用できます。

root@kitploit:~
write { fd == 1 }

include ディレクティブ

ポリシーの再利用と構成を簡素化するために、kafel は include をサポートしています。

root@kitploit:~
#include "some_other_file.policy"

Kafel は、検索パスに明示的に追加されたディレクトリ内のインクルードファイルのみを検索します。

root@kitploit:~
kafel_add_include_search_path(ctxt, "includes/path");

includes/path を検索パスに追加します。上記の include ディレクティブは includes/path/some_other_file.policy を参照します。

include ディレクティブは改行またはセミコロンで終了します。1 つのディレクティブで、空白で区切られた複数のファイルを指定できます。

root@kitploit:~
#include "first.policy" "second.policy"; #include "third.policy"

例

nsjail と組み合わせて使用すると、以下のコマンドでシェル用のかなり制限された環境を作成できます。

root@kitploit:~
$ ./nsjail --chroot / --seccomp_string 'POLICY a { ALLOW { write, execve, brk, access, mmap, open, newfstat, close, read, mprotect, arch_prctl, munmap, getuid, getgid, getpid, rt_sigaction, geteuid, getppid, getcwd, getegid, ioctl, fcntl, newstat, clone, wait4, rt_sigreturn, exit_group } } USE a DEFAULT KILL' -- /bin/sh -i
root@kitploit:~
[2017-01-15T21:53:08+0100] Mode: STANDALONE_ONCE
[2017-01-15T21:53:08+0100] Jail parameters: hostname:'NSJAIL', chroot:'/', process:'/bin/sh', bind:[::]:0, max_conns_per_ip:0, uid:(ns:1000, global:1000), gid:(ns:1000, global:1000), time_limit:0, personality:0, daemonize:false, clone_newnet:true, clone_newuser:true, clone_newns:true, clone_newpid:true, clone_newipc:true, clonew_newuts:true, clone_newcgroup:false, keep_caps:false, tmpfs_size:4194304, disable_no_new_privs:false, pivot_root_only:false
[2017-01-15T21:53:08+0100] Mount point: src:'/' dst:'/' type:'' flags:0x5001 options:''
[2017-01-15T21:53:08+0100] Mount point: src:'(null)' dst:'/proc' type:'proc' flags:0x0 options:''
[2017-01-15T21:53:08+0100] PID: 18873 about to execute '/bin/sh' for [STANDALONE_MODE]
/bin/sh: 0: can't access tty; job control turned off
$ set
IFS='
'
OPTIND='1'
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'
PPID='0'
PS1='$ '
PS2='> '
PS4='+ '
PWD='/'
$ id
Bad system call
$ exit
[2017-01-15T21:53:17+0100] PID: 18873 exited with status: 159, (PIDs left: 0)
ツールをダウンロード
Kafelseccomp-filter
ALLOWSECCOMP_RET_ALLOW
LOGSECCOMP_RET_LOG
KILL, KILL_THREAD, DENYSECCOMP_RET_KILL
KILL_PROCESSSECCOMP_RET_KILL_PROCESS
USER_NOTIFSECCOMP_RET_USER_NOTIF
ERRNO(number)SECCOMP_RET_ERRNO+number
TRAP(number)SECCOMP_RET_TRAP+number
TRACE(number)SECCOMP_RET_TRACE+number