man 7 capabilities
ドキュメントは、Linuxシステムのプロセス機能が3つのマスクで記録されていることを示しています。
- 許可された
- 効果的な
- 継承可能
私のアイデア継承可能マスクは機能しますが、許可された機能と有効な機能を分離する必要性/ユースケースがあるような理由は不明です。
許可された機能の一部が無効な状況がありますか?この質問に対する答えを面白いものにするのはどれですか?
ボーナスホイール
一部の機能が無効ですが、許可されている場合、プロセスがその機能を有効にするのを防ぐにはどうすればよいですか?少なくとも私が見ると、悪意のあるプロセスがすべてが有効になることを躊躇せず、しばしばより多くの権限を高めようとします。
答え1
有効な/許可された機能の違いは、setuidプログラムの実際の/有効なUIDの違いと似ています。アイデアは、悪意のあるアプリが権限を拡大するのを防ぐのではなく、(設定されていないように最初に権限を付与しない)、プログラムが最小限の権限で実行され、必要な場合にのみ拡大することを許可することです。これはエラーの影響を最小限に抑えるのに役立ちます。
非常に人為的な例:ユーザーが所有するプロセスにSIGHUPを送信できるプログラムが必要です。またはGodユーザーがSIGHUPをに送信できるようにしますinit
。
このプログラムはファイルにCAP_KILL機能を設定します。
疑似コードは次のとおりです。
drop_effective CAP_KILL
repeat forever:
get_process_id_from user
if process_id==1 and user_is_God:
set_effective CAP_KILL
kill(-1,1)
drop_effective CAP_KILL
else:
kill(-1,process_id)
ここで明らかな間違いは、ユーザーが信号を送信できるかどうかを最初に確認しなかったことです。有効なCAP_KILL権限を削除したため、ユーザーが自分のプロセス以外のプロセスを終了することはできません。
もちろんとても考案されたものです!ただし、できるだけ「最小権限」で実行し、必要な場合にのみ権限を有効にすることをお勧めします。
これで、注入されたコードが許可された権限を有効にできるため、これがバッファオーバーフロー攻撃を必ずしも防止するわけではありません。したがって、機能認識コードは、不要になったときに許可された権限も削除する必要があります。たとえば、Webサーバーはポート80 CAP_NET_BIND_SERVICEにバインドできます。削除されます。許可されていないコンテンツは有効にできません!
答え2
機能できるという簡単な仮説:ユーザーはシステム上のすべてのファイルをコピー(読み取り)できますが、変更(書き込み)できないことを望みます。 .CAP_DAC_OVERRIDE
cp
CAP_DAC_OVERRIDE
追加の質問については、任意のコードを実行できる場合は、コードが再び有効になるのを防ぐ方法はありません。ただし、他の破損が発生した場合に便利です(たとえば、プログラムがシンボリックリンク攻撃を介して任意のファイルを上書きするように誘導する場合など)。