7

重複の可能性:
access() セキュリティ ホール

man page access(2) から引用します。

警告: access () を使用して、たとえば実際にファイルを開く前にopen (2) を使用してユーザーがファイルを開く権限を持っているかどうかを確認すると、ユーザーがファイルを確認してから開くまでの短い時間間隔を悪用する可能性があるため、セキュリティ ホールが作成されます。それを操作します。このため、このシステムコールの使用は避ける必要があります。

これは何を意味し、どのような状況で問題になるのでしょうか?

4

3 に答える 3

9

これは、古典的な「チェック時から使用時」の競合状態です。

于 2012-07-17T14:52:40.050 に答える
4

これは、Set-user-ID および set-group-ID アプリケーションのみのセキュリティ上の問題です。ユーザー自体として実行されているアプリケーションの場合、問題の操作はいずれにせよオペレーティング システムによって拒否されるため、脅威はありません。

次のシナリオを考えてみましょう: UNIX プログラムがrootset-user-id 経由で実行されているとします。プログラムは を使用accessして別のユーザーのファイル権限をチェックし、ファイルを として実行しますがroot、権限チェックが成功した場合のみです。プログラムが と呼ばれsecurerun、次のように実行するとします。

securerun myfile

攻撃者は、次のアルゴリズムを使用して、このセキュリティ ホールを悪用するプログラムを実行することができます。

  • xyzユーザーが実行権限を持つファイルを書き込む
  • 2 つのスレッドを開始Aし、B
  • スレッドAは数ミリ秒待機し、実行cp norunning xyzして、攻撃者が実行したいファイルに置き換えxyzますが、そのための実行権限はありません。
  • スレッドB呼び出しsecurerun xyz

攻撃者がタイミングを合わせて運が良ければ、securerun古い の実行権限を確認できますが、ハッカーが実行するはずのないxyz新しいxyzのコピーが実行されます。norunningチェックと実行の間には短い時間枠があるため、攻撃者がループ内で何度も戦略を試みると、ある時点で幸運に恵まれることになります。

于 2012-07-17T15:05:28.863 に答える
3

典型的な誤ったコード:

  • access昇格された権限で実行されているプログラムで、ユーザーに代わってファイルを読み取るかどうかを確認するために使用します
  • ここで短いギャップ
  • ファイルを開く

「短いギャップ」の間、ユーザーはファイルシステムを操作できる可能性があります。次に例を示します。

ln -f secret_file.txt non_secret_file.txt

次に、チェックが行われた時点でリンクが配置されていた場合にチェックにopen失敗したとしても、シークレット ファイルを読み取り用に開きます。access

于 2012-07-17T15:06:05.290 に答える