プログラマーではなくIT担当者に説明できる人はいますか?保証する?
例:「xterm」などのプログラムがあります。ステーキングをどのように安全にすることができますか?プログラムコードの内部にありますか、オペレーティングシステム自体の外部にありますか?
約束はどこにありますか?プログラムコードにありますか?それとも、オペレーティングシステムにxyシステムコールのみを呼び出すことができるバイナリのリストはありますか?
ベストアンサー1
誓約とは何ですか?
pledge
システムコールです。
プログラムを呼び出すことpledge
は、プログラムが特定のリソースのみを使用するという約束です。
これを別の方法で表現することは、プログラムの動作を必要に応じて制限することです。
"私は、
port 63
"
"を除いて他のシステムコールを使用しないことを約束します。lseek()
fork()
プログラムをより安全にする方法は?
プログラムの動作を制限します。例:
- システム
xyz
コールのみが必要なプログラムを作成します。read
- その後、
pledge
目的だけを追加しread
、他は追加しません。 root
その後、悪意のあるユーザーがシェル呼び出しを許可するプログラムの脆弱性を発見します。- プログラムでシェルを開くと、カーネルは
root
プロセスを終了しSIGABRT
(キャッチまたは無視できません)、ログを生成します(を使用して見つけることができますdmesg
)。
これは、プログラムコードの残りの部分を実行する前に、最初にシステムコール以外のものを使用しないpledge
ために発生します。read
ただし、root
シェルを開くと他のいくつかのシステムコールが呼び出されますread
。
約束はどこにありますか?
通常、プログラム内にあります。以下で使用OpenBSD 6.5 マニュアルページ:
#include <unistd.h>
int pledge(const char *promises, const char *execpromises);
サンプルコード:コマンドのサンプルコードはcat
以下に提供されています。cat.c
........
#include <unistd.h>
........
int ch;
if (pledge("stdio rpath", NULL) == -1)
err(1, "pledge");
while ((ch = getopt(argc, argv, "benstuv")) != -1)
..........