PAM_FAIL_DELAY(3)

名称
pam_fail_delay - エラー時に遅延を要求

書式
#include <security/pam_appl.h>
または
#include <security/pam_modules.h>

int pam_fail_delay(pam_handle_t *pamh, unsigned int usec);

解説
申請ユーザのアクセスをスキームが拒否する場合にかかる時間を悪用することで、 しばしば認証スキームに攻撃可能です。 タイムアウトが 短い 場合、 腕力による 辞書攻撃が可能な場合があります。 自動処理により考えられるパスワードをすべて試して、攻撃者がシステムに アクセスしようとするのです。 一方、個々の失敗が (失敗の性質を示すような) 計測可能な時間を費す場合、 認証処理に関する有用な情報を攻撃者が取得可能です。 後者の攻撃は、重要な情報の 隠れ通信路 (covert channel) である、手続き遅延を使用することです。
このような攻撃の効果を最低限に抑えるには、エラーとなった認証プロセスで ランダムな遅延を導入することが有効です。 PAM には、ランダムな遅延を導入する機能があります。遅延は、 pam_authenticate(3) 関数と pam_chauthtok(3) 関数の エラー時に発生します。すべての認証モジュールが呼び出された 後 で、制御がサービスアプリケーションに戻る 前 に発生します。
pam_fail_delay(3) 関数を使用すると、エラー遅延に必要な最低時間 ( usec 引数) を指定できます。この関数は、ユーザによるサービスの再申請を 遅らせることが重要となるサービスアプリケーションや認証モジュールから呼び 出せます。遅延の長さは必要なときに算出されます。 長さは、 最大 要求値に対する擬似ガウシアン分布になります。 最大要求値の上下 25% までに分散されるのです。
pam_authenticate(3) や pam_chauthtok(3) から戻る場合、問題の有無に関係なく、新しい要求遅延は デフォルト値の 0 にリセットされます。

例
ログイン アプリケーションで約 3 秒間のエラー遅延が必要となる場合、 このアプリケーションには以下のコードが含まれます。

pam_fail_delay(pamh, 3000000 /* micro-seconds */ );
pam_authenticate(pamh, 0);

モジュールが遅延を要求しない場合、エラー遅延は 2.25 秒と 3.75 秒の 間になります。
認証プロセスで呼び出されるモジュールでも、以下のような遅延が 要求されることがあります。

(モジュール #1) pam_fail_delay(pamh, 2000000);

(モジュール #2) pam_fail_delay(pamh, 4000000);

この場合、実際のエラー遅延の算出に使用されるのは最大要求値です。 ここでは 3 秒から 5 秒です。

戻り値
pam_fail_delay(3) で問題が発生しなかった場合は、 PAM_SUC-CESS が戻されます。その他すべての戻り値は、重大なエラーとみなしてください。

エラー
pam_strerror(3) でテキストに変換できます。

準拠
X/Open グループが、PAM RFC. 1996/1/10 に組み込むことを検討中です。

バグ

見つかっていません。

関連項目
pam_start(3), pam_get_item(3), pam_strerror(3) システム管理者 、 モジュール開発者 、 アプリケーション開発者 用の Linux-PAM ガイドも参照してください。