簡単に言えば、OpenBSDの約束は何ですか?

簡単に言えば、OpenBSDの約束は何ですか?

プログラマーではなく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)
..........

おすすめ記事