TOCTTOU(Time-of-check to time-of-use)
TOCTTOUは、ソフトウェア開発において、特定の条件を確認した後、その条件を使用する際に発生する変更によって引き起こされる
バグの一つです。この現象は競合条件の一例と言われ、セキュリティ上の
脆弱性を引き起こす可能性があります。
TOCTTOUの基本概念
TOCTTOUは「条件確認から利用までの時間」を指し、条件が確認された後に、その結果に基づいてアクションを取る前に他の変更が行われることが原因で発生します。例えば、ユーザーがページを編集しようとしているとき、管理者がそのページをロックすることが考えられます。ユーザーは編集を始めたものの、管理者がページをロックした後にフォームを送信すると、ユーザーが編集を実行できるという状況が生まれます。これは本来の権限を超えた行為であり、セキュリティ上のリスクを引き起こします。
具体的な例
この問題は
Unixシステムの
ファイルシステムで最もよく見られますが、他の状況でも発生することがあります。例えば、システムやプログラム内に含まれるsetuidプログラムにおいて、ユーザーが書き込み権限を持っているかを確認するコードがある場合、ユーザーの実UIDではなく実効UIDをチェックすることがあります。このような場合、アクセス条件が正しく確認されないまま他の操作が介入し、権限を超えた操作が行えるケースが生じます。
特に、
Unixの事例では、攻撃者がアクセスとファイルオープンの間の
競合状態を悪用し、システムの重要な情報であるパスワードデータベースを上書きすることが可能になります。このように、TOCTTOUは権限昇格攻撃に利用される危険性を秘めています。
攻撃シナリオ
TOCTTOUによる攻撃は非常に巧妙です。攻撃者はタイミングの調整を行い、これらの命令が正確に実行されるように仕向けます。OSによる
ファイルシステム管理が、
システムコール間に状態が変更されることを保証していないため、攻撃者にとっては条件を整えることが比較的容易な場合があります。
TOCTTOUの防止策
TOCTTOUの防止や排除は簡単ではありませんが、いくつかのテクニックがあります。一般的な方法の一つは、例外処理を行うことです。これにより、タイミングの問題によって発生する
競合状態を軽減することができます。他にも、条件チェックとその使用を同一のステップで行うことで、変更による影響を排除することが可能です。
最終的には、TOCTTOUに対する対策を講じることで、アプリケーションのセキュリティを強化し、未然にリスクを低減することが重要です。