1. 概要
昨今、構築されたシステムへの不正アクセスが原因で社外秘の内部情報が漏えいするニュースが後を絶ちません。しかし、不正アクセスの対策として認証の分野では二段階認証という方法を用いることも多くなってきました。
一方で、当社が実施しているWebアプリケーション脆弱性診断において、対策として用いている二段階認証機能を回避する脆弱性を検出することがあります。
今回の記事では、二段階認証を回避する脆弱性の一例と対策について紹介します。
2. 二段階認証とは
二段階認証は、下記のような攻撃者による不正アクセスに対する代表的な対策として実装されます。
・ 正規のユーザが設定してしまったセキュリティ強度の弱いパスワードの推測
・ Webアプリケーション内に潜在してしまった脆弱性を突いた攻撃による認証情報の漏えい
・ 漏えいした別のアプリケーションのパスワードを流用するパスワードリスト攻撃 など
ここでログイン後の重要処理(個人情報の修正や決済処理など)の前に二段階認証を行う実装の一例を紹介します。
1. 正規の利用者は通常通り、IDとパスワードでログインします。
2. 正規の利用者が重要処理を実行する前に、Webアプリケーションは二段階認証の画面を表示します。
3. Webアプリケーションは、事前に登録されている正規の利用者のメールアドレスやSMSなどに認証コードを送信します。
4. 正規の利用者は送信された認証コードを入力します。
5. Webアプリケーションは3.で送信した認証コードと4.で入力された認証コードが一致する場合のみ重要処理を実行します。
攻撃者が前述したような何らかの方法でIDとパスワードを取得し、不正ログインを成功させていたとしても、3.にて送信される認証コードを受け取れる人は「正規の利用者のみ」のため、攻撃者は重要処理を実行/完了できず、不正アクセスによる被害を軽減できます。
流れとしては特別に難しい処理はなく、二段階認証が成功した場合のみ重要処理を実行するような実装をすることが大事です。次は、このような二段階認証を回避できてしまう実装の例を紹介します。
3. 二段階認証が迂回できてしまう不十分な実装の一例
二段階認証で重要視するべき処理は、前述の流れの5.で認証コードを検証した後にどのような流れで重要処理を実行するかです。ここに不備があると二段階認証を実装していたとしても、その役割を十分に発揮できず回避されてしまいます。
下記にその流れの一例を提示します。まずは正規の利用者が重要処理として個人情報の修正を行う際の流れを提示します。(正常処理Step)
1-1. 正規の利用者は自身のIDとパスワード(認証情報)でログインします。
1-2. 個人情報編集画面へ移動後、必要情報を入力し更新処理を実行しようとします。
1-3. Webアプリケーションは更新処理実行前に、二段階認証画面を表示し、正規の利用者に認証コードを送信します。
1-4. 正規の利用者は認証コードを入力し、Webアプリケーションに送信します。
1-5. Webアプリケーションは認証コードの検証後、更新画面を再表示します。
1-6. 正規の利用者は更新完了ボタンを押下し、Webアプリケーションは更新処理を実行し、更新完了画面を表示します。
次に二段階認証を回避する攻撃の流れを提示します。(攻撃Step)
2-1. 攻撃者は何らかの方法(パスワードリスト攻撃等)で不正入手したIDとパスワード(認証情報)で不正ログインします。
2-2. 個人情報編集画面へ移動後、必要情報を入力し更新処理を実行しようとします。
2-3. Webアプリケーションは更新処理実行前に、二段階認証画面を表示し、正規の利用者に認証コードを送信します。
2-4. 攻撃者は認証コードを受け取れないため、二段階認証画面が表示されても無視し、二段階認証後の更新画面にて更新完了ボタンを押下した際のHTTPリクエスト(Step1-6.で発生するリクエスト)を作成し、送信します。
2-5. Webアプリケーションは更新処理を実行し、更新完了画面を表示します。
攻撃者はStep2-4.にて、二段階認証を無視して更新完了処理を実行できてしまいました。次の章ではなぜ実行できたのか、その原因と対策を紹介します。
4. 原因と対策
攻撃Stepにて二段階認証を回避して重要処理を完了させることができてしまった理由は、Webアプリケーション側で攻撃Step2-5.の更新処理を「二段階認証を正常にクリアした後のHTTPリクエストなのかどうか」を検証していない実装だったためです。
正常処理Stepのように、正規の利用者は画面のボタンなどブラウザに表示される画面に沿って処理を実行します。それに対し、攻撃者は攻撃Step2-4.のように任意のタイミングでリクエストを作成し、Webアプリケーションに送信して攻撃を実行します。
この任意のタイミングでリクエストを作成する方法ですが、さほど難しいものではありません。JavaScriptやHTTPリクエストを作成できるツール(Burp Suiteなど)、プログラミング言語を使用することで任意のリクエストを誰でも作成し、送信することが可能です。
この攻撃に対するWebアプリケーションの利用者側の根本的な対策は、残念ながらありません。正常処理Step1-1.におけるIDとパスワード(認証情報)をより強固なものにして、攻撃Step2-1.の発生を抑えることが利用者側にできる最低限の対策になると考えます。
Webアプリケーションの開発側では、「重要処理を実行する際に二段階認証をクリアしたHTTPリクエストかどうか」を検証することで根本的な対策になります。今回の一例では処理の流れを重視したため、「二段階認証をクリアした後でないと重要処理を実行できない」と誤認識してしまい、重要処理実行時の認証状態の検証が抜けています。HTTPリクエストは誰でも、任意のタイミングで、任意のリクエストを送信することができてしまうことを把握しておくことも必要です。
また、利用者側ができる「認証情報を強固なものにする」対策の補助として、パスワード設定の際の文字数や記号、大文字小文字などで入力値検証を実装し、自然な流れで利用者に強固な認証情報を設定するように促すこと重要な対策になると考えます。
5. まとめ
不正アクセス対策として二段階認証を実装したが、その役割が十分に果たされず、二段階認証機能を回避できてしまう例を紹介しました。
前述しましたが、Webアプリケーションにおいて二段階認証を実装する際には、「その重要処理を実行、完了するときにHTTPリクエストを実行するユーザ」の認証状態をWebアプリケーション側できちんと検証することが重要です。
Webアプリケーションに対して実装したセキュリティ対策/脆弱性対策が十分にその役割を発揮しているか、またはそもそも未対策の脆弱性が潜在していないかなど、セキュリティ面で気になることがありましたら、是非弊社サービスの脆弱性診断のご利用をご検討ください。
6. SSKのセキュリティ運用監視サービスおよび脆弱性診断サービスについて
コロナ禍を経て急速なデジタルシフトやDXの進展により、サイバー攻撃の標的となりうる範囲は大きく広がっています。更にランサムウェアをはじめとするサイバー攻撃の脅威は増す一方となり、企業活動においてサイバーセキュリティ対策は必要不可欠な課題となっています。
SSKのセキュリティ運用監視サービスでは、24時間365日、リアルタイムでセキュリティログの有人監視をおこなっております。セキュリティ対策として様々なセキュリティ機器やサービスを導入するケースも増加しており、当社ではUTM製品をはじめ、SASE、EDR等、新しいセキュリティソリューションも監視対象としてサービス展開を行っています。また、脆弱性診断サービスでは、診断経験豊富なセキュリティエンジニアがお客様のシステムを診断し、検出された脆弱性への対策をご提案しております。Webアプリケーションだけでなくネイティブアプリケーション診断やクラウドサービス設定診断も行っています。
セキュリティ運用監視サービス:
https://www.ssk-kan.co.jp/e-gate#e-gate--02
脆弱性診断サービス:
https://www.ssk-kan.co.jp/vulnerability-assessment
※本資料には弊社が管理しない第三者サイトへのリンクが含まれています。各サイトの掲げる使用条件に従ってご利用ください。
リンク先のコンテンツは予告なく、変更、削除される場合があります。
※掲載した会社名、システム名、製品名は一般に各社の登録商標 または商標です。
≪お問合せ先≫
サービス&セキュリティ株式会社
〒150-0011
東京都渋谷区東3丁目14番15号 MOビル2F
TEL 03-3499-2077
FAX 03-5464-9977
sales@ssk-kan.co.jp