2

access(2) のマニュアルページには、

警告 Access() は潜在的なセキュリティ ホールであり、決して使用しないでください。

しかし、セキュリティ ホールとは何ですか? なぜ使用してはいけないのでしょうか?

4

3 に答える 3

5

私のシステムのマニュアルページから:

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

したがって、問題は、ユーザーが他のファイルにアクセスするために悪用できる競合状態を作成することです。

次のシナリオ例を想像してください。/tmp/file書き込みを許可されたファイルを作成します。次に、uid-0 プログラムを呼び出しaccess()て、このファイルへの書き込みアクセスを許可する前に、このファイルを書き込み用に開くことが許可されているかどうかを確認します。

access()との呼び出しの間の短いスペースでopen()、それを削除/tmp/fileして へのシンボリック リンクに置き換えることができ/etc/crontabます。アプリケーションが喜んで への書き込みアクセスを許可してくれるので、好きなプログラムをシステムで実行できるようになりました/etc/crontab

于 2013-01-15T07:47:55.053 に答える
4

Linux のマニュアルページで明確に説明されています

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

また、注意してください。セキュリティ上の理由から、セキュリティ エクスプロイトは一般に公開されていません。

于 2013-01-15T07:45:42.247 に答える
0

チェックアウト: http://www.kernel.org/doc/man-pages/online/pages/man2/access.2.html

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

以下も参照してください。

http://www.csl.sri.com/~ddean/papers/usenix04.pdf

access() の何が問題になっていますか?

于 2013-01-15T07:46:12.717 に答える