はじめに
プログラムの認証に問題が発生すると、さまざまな深刻な影響が生じる可能性があります。例えば、推測やブルートフォース攻撃で容易に破られる弱いパスワードポリシーのケースや、パスワードを暗号化せず平文で保存してしまう重大な問題が挙げられます。この場合、データベースにアクセスしたサイバー犯罪者は、すべてのパスワードを容易に把握でき、大きなセキュリティリスクとなります。多くの利用者が複数のサイトで同じパスワードを使用しているため、複数のアカウントが同時に危険にさらされる恐れがあります。こうした脆弱性は容易に悪用され、大規模な被害に繋がる可能性があるため、アプリと利用者をしっかり守る対策が欠かせません。記事後半では、企業にとって大規模な侵害からの回復が困難になるケースについても言及します。
A2: 壊れた認証
攻撃者/攻撃手法 | セキュリティの弱点 | 影響 |
---|---|---|
サイバー犯罪者は、ブルートフォース、パスワードスプレー、クレデンシャルスタッフィングなどの攻撃に使用するため、大量の認証情報にアクセスできます。セッション管理は、特に有効なトークンに関しては広く理解されている仕組みです。 | この種の脆弱性は広範に存在します。認証とアクセス制御の基盤はセッション管理です。不備は手動で確認できるものの、完全な攻撃にはツールや自動化が用いられることもあります。 | 発見された場合、その影響は数百万のアカウントに及ぶことも、1つに留まることもあります。対象によって異なりますが、一つの管理者アカウントでもシステム全体が危険にさらされる可能性があります。さらに、資金洗浄や個人情報の盗用といった犯罪にも利用される恐れがあります。 |
認証とは、本人確認のための手続きです。多くのウェブサイトでは、ログイン時にユーザ名とパスワードの組み合わせが用いられます。APIの場合は、アクセストークンと呼ばれるトークンが使われることもあります。一方、セッション管理は認証に成功した後に機能します。ログイン時に、通常はクッキーやJWT(json web tokenの略)などの形で一意のセッションキーが生成され、このキーによりアプリ内を移動しても再認証する必要がなくなります。
前述の通り、認証の不備とは、認証プロセスやセッションの管理方法に問題がある状態を指します。これはアプリのログイン機能に限らず、APIセキュリティにも大きな影響を与えます。原因として、URLに漏れるセッショントークン、弱いまたは存在しない通信の暗号化、さらにはデータ流出後に変更されなかった認証情報の露出などが考えられます。
前述の通り、ログイン時に一意のセッションキーが生成されます。通信が暗号化されずキーが平文で送信されると、盗聴している攻撃者がそのキーを入手し、ユーザのセッションを乗っ取る可能性があります。これはセッションハイジャックとも呼ばれます。
アカウントロックアウト規定やレート制限がない場合、攻撃者は特定のアカウントのパスワードをブルートフォース攻撃できる恐れがあります。さらに、受信トラフィックを検査・フィルタリングするWAFが存在しないと、攻撃成功の可能性が高まります。
ログイン後のセッションが一定時間で自動的に切れないと問題です。例えば、大学のパソコンで正しくログアウトせずブラウザを閉じた場合、後で攻撃者が同じブラウザを利用すると、セッションが継続している恐れがあります。
大きな影響を及ぼす事例として、CVE-2021-38513が挙げられます。netgearのデバイスで、認証が回避可能な重大な脆弱性が確認されました。攻撃手法はまだ不明ですが、この脆弱性による被害は甚大な恐れがあり、古いファームウェアを使用している場合は最新バージョンへの更新が推奨されています。詳細はCVEのページに掲載され、攻撃手法も公表され次第更新されます。 https://www.cvedetails.com/cve/CVE-2021-38513/
次の事例では、電力管理やホームオートメーション関連の製品を提供するCircutor社について紹介します。同社の製品の一つで、クッキーの取り扱いの不備により認証回避が可能な脆弱性が発見されました。認証対策を講じるだけでなく、効果的に運用することが非常に重要です。 https://www.cvedetails.com/cve/CVE-2021-33842/
こうした脆弱性を防ぐために、いくつかの対策が考えられます。
厳格なパスワードポリシーを採用することで、ブルートフォース攻撃の成功率を大幅に下げ、推測されやすい認証情報を排除できます。12文字以上で数字、記号、大文字・小文字を含むパスワードのみを許可するのが有効な対策です。
全ての通信は暗号化されるべきです。これにより、攻撃者はパスワードやセッションキーを盗み見ることができず、中間者攻撃を防止できます。また、暗号化手法は常に強力なものを採用し、弱い暗号化は避けるべきです。
ログイン失敗時に詳細な情報を表示してはいけません。例えば「パスワードが間違っています」と表示すると、攻撃者に該当ユーザが存在することが知られてしまいます。代わりに「ログイン失敗」といった汎用のメッセージを用いるべきです。
その他の対策として、二要素認証の利用を強制する方法があります。これにより、パスワードが漏れても第二の認証要素がなければ攻撃者は利用できません。また、APIの安全性を高めるため、APIで使用されるアクセストークンが推測やブルートフォース攻撃にさらされないよう努める必要があります。さらに、WAFを設置し、送信されるトラフィックを検査・フィルタリングすることで、セッションキーの偽造を防ぐ対策も有効です。加えて、クロスサイトスクリプティングの防止や、漏洩したパスワードの使用制限といった対策も講じることで、OWASPトップ10に挙げられる脆弱性に対する防御力を高めることができます。
最新情報を購読