10-1 認証システムへの攻撃と防護策 [PHPセキュリティー]
認証システムへの攻撃
データの盗聴
総当り攻撃
- 総当り攻撃は可能な組み合わせをすべて試す手法
総当り攻撃とは、暗号や暗証番号などを解読する方法の1つで、可能な組み合わせをすべて試すやり方です。理論的にありうる全パターンを入力して解読します。
総当り攻撃の防御策
- 認証の時間や回数に制限を掛けることで回避
このような攻撃は、認証の時間や回数に制限を掛けるかけることで回避できます。認証の回数を制限したり、失敗の回数を制限することが防護策となります。
セッションを使用した単純なログイン回数のチェック
login1.php
1 2 3 4 5 6 7 8 9 10 | <?php //初回はカウント1 if(!isset($_SESSION['loginCount'])) $_SESSION['loginCount'] = 0; ?> <form action="login2.php" method="POST"> <input type="text" name="username" size="20"> <input type="password" name="password" size="20"> <input type="submit" value="送信"> </form> |
login2.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php //配列変数初期化 $clean = array(); //フィルタ後代入 $clean['username'] = $_POST['username']; $clean['password'] = $_POST['password']; //ログイン回数チェック 3回以上失敗の場合は処理停止 if($_SESSION['loginCount'] >= 3){ //3回以上失敗 exit; } //認証 $auth = FALSE; $auth = login($clean['username'], $clean['password']); if($auth)){ //認証成功 }else{ //認証失敗 $_SESSION['loginCount']++; //login1.phpへ戻る } ?> |
認証の時間や回数の制限は攻撃者に操作できないよう注意する必要があります。
リプレイ攻撃
- 正規データを再生するリプレイ攻撃
リプレイ攻撃とは、正規ユーザーがログインする時に、ネットワーク上のデータを盗聴し、盗聴データを攻撃者が再生することで不正にシステムへ侵入する攻撃です。プレゼンテーション攻撃とも言われます。この攻撃の場合はネットワーク上の通信データを暗号化するだけでは防護できません。攻撃者は暗号化されたデータそのものを再生して認証サーバーへ送信して浸入を成功させます。
リプレイ攻撃の防御策
- チャレンジ・レスポンス方式で回避
リプレイ攻撃を避けるためには、保護されたリソースへは一時的なアクセス権を提供するデータだけを使用すべきで、このデータが流出するのをできるだけ避ける必要があります。
リプレイ攻撃に対して有効な対策に「チャレンジ・レスポンス方式」があります。
チャレンジ・レスポンス方式では、認証サーバーがログイン毎にランダムなデータ「チャレンジ」をクライアントに送信します。「チャレンジ」を受信したクライアントは「チャレンジ」と「パスワード」を演算したデータ「レスポンス」を算出します。この「レスポンス」をサーバーへ送信します。サーバーではデータベースなどに登録されているクライアントの「パスワード」とクライアントへ送信した「チャレンジ」をクライアントと同じ演算方法で「レスポンス」を作成します。サーバーの「レスポンス」とクライアントの「レスポンス」を照合させ、一致すれば、正規のユーザーであり、パスワードが正しいと判断します。
タグ(=記事関連ワード)
日付
最終更新日:2017年08月09日