Yama (Yama LSM)
LinuxカーネルのLSM (Linux Security Module) フレームワーク向けの実装の一つ。Kees Cookが開発し、2010〜2011年頃にパッチが提出された。symlink/hardlink保護やptrace制限など、以前からOpenwallやgrsecurityといった別配布・パッチセットで個別に存在していたDAC(Discretionary Access Control)強化機能を、メインラインカーネルに統合する形でまとめたモジュール。ptraceの制限ロジックは元々grsecurityの「子プロセスのみ」制限がベースになっている。
主な目的: ptraceの制限
同一ユーザーが自分の任意のプロセスのメモリ・実行状態を検査できてしまう既定の挙動を制限する。あるアプリケーションが侵害された場合でも、攻撃者が同じユーザー権限の別プロセスにptraceでアタッチして機密情報を抜き取ったり処理を改ざんしたりするのを防ぐのが狙い。
ptrace_scope の4モード
/proc/sys/kernel/yama/ptrace_scopeで設定する。
- 0(従来型): dumpableであれば、同一uidの任意のプロセスに
PTRACE_ATTACH可能 - 1(制限型、Yamaのデフォルト): 親子関係などあらかじめ定義された関係を持つプロセスのみアタッチ可能。
prctl(PR_SET_PTRACER, pid, ...)で明示的に許可するプロセスを指定できる。KDE・Chromium・Firefoxのクラッシュハンドラや、Wineが同種プロセス間のptraceのみ許可する用途で使用 - 2(管理者のみ):
CAP_SYS_PTRACE権限を持つプロセスのみ利用可能 - 3(禁止): ptrace使用を完全禁止。この設定にすると、再起動までリバート不可
設定方法
ビルド時はCONFIG_SECURITY_YAMAで有効化を選択する。実行時は/proc/sys/kernel/yama配下のsysctlで制御し、変更にはCAP_SYS_PTRACEが必要。
出典
- Yama — The Linux Kernel documentation
- Protect against ptrace of processes: kernel.yama.ptrace_scope - Linux Audit
- security: Yama LSM [LWN.net]