概要
正規サイトにログインした状態で、
攻撃者が罠サイトにユーザーを誘導しiframeや透明なレイヤーを使ってリンクやボタンを重ねて配置し、ユーザーに意図しない操作をさせる攻撃手法。
ユーザーが一見無害に見えるサイトのボタンをクリックすると、
実際には背後にあるiframe内のボタンをクリックさせられている。
発生しうる脅威
金銭的被害
不正送金やクレジットカードの不正利用、ECサイトで意図しない商品購入など登録情報の漏洩・改ざん
利用者情報の公開範囲の変更や退会処理プライバシー侵害
カメラやマイクへのアクセス許可をユーザーに気づかれずにONにさせる
原因
ログイン後の重要な操作や設定を、クリック操作のみで実行可能にしている仕様
iframeで埋め込めるページに、重要な操作の処理ができる機能の実装
対策
根本的解決
1.frameやiframeによるページの読み込みを制限する
HTTPレスポンスヘッダにX-Frame-Options: DENY(またはSAMEORIGIN)と設定すると、
X-Frame-Optionに対応したブラウザでは、frame要素やiframe要素によるページの埋め込みができなくなる。
IE7など対応していないブラウザもあるため、CSPとあわせて対策するといい。
SAMEORIGIN ・・・同一オリジンのときのみ表示を許可する
ALLOW-FROM・・・指定したオリジンのみ表示を許可する
2.処理の直前に再度パスワードを入力させる
重要な操作の直前のページでユーザーに再度パスワードを入力させ、 そのパスワードが正しい場合のみ処理をする。
ただし画面設計の仕様変更が必要となる。
保険的対策
3.重要な処理はクリックのみで実行できないような仕様にする
ユーザーに複雑な操作をさせることは難しいため、
重要な操作にキーボード操作や複数の確認ステップを挟む仕様にすることで、攻撃の成功率を下げることができる。
Lalavelでの実装例
1.自作ミドルウェアでX-Frame-Optionsを追加する
レスポンスヘッダにX-Frame-Optionsオプションを指定する。
AddXFrameOptions.phpファイルに
class AddXFrameOptions //AddXFrameOptionsクラスを作成
{
public function handle($request, Closure $next)
{
$response = $next($request);
$response->headers->set('X-Frame-Options', 'deny'); //すべてのウェブページでフレーム内の表示を禁止
return $response;
}
}
☀︎全リクエスト(全ページ)でフレーム内の表示が禁止になる。