はじめに

こんにちは。ちょーさんです。
前回のOWASP 第1位のSQLインジェクションに続き、
第2位の項目、認証の不備についてまとめていきます。

認証

まず認証という言葉ですが、世の中のサービスを利用する際にユーザ認証やパスワード認証等の言葉で
何となくセキュリティ用語であることはご認識されていると思います。

認証というのは、何らかの方法で本人であることを証明することを指し、
認証の一連処理はログインと呼ばれます。以下は弊社サービスMetellのログイン画面の例です。

基本的にはユーザIDとパスワードの組み合わせでログインしますが、
上記はユーザID以外に組織IDもありますが、
必須ではなく、ユーザが特定できればユーザIDだけでも問題ありません。
また、認証状態を一旦解除することをログアウトと言います。

認証の不備

タイトルそのままの意味ですが、認証処理に脆弱性があり、
不正な認証を許し、本人のなりすましでログインされてしまうことを指します。
どういった不備があるのか、以下2点を紹介します。

SQLインジェクション可能

Webアプリケーションのセキュリティ対策➀でも紹介しましたが、SQLインジェクションによる、
パスワード不要でログインしてしまう方法です。
また状況次第ではパスワード情報を抜き出すことも可能です。

予測しやすいパスワードと桁数

総当たりでユーザID、パスワードの組み合わせを繰り返してログインを試み、
短時間でログインされてしまいます。
誕生日や会社名、単純な数字の並び(1234等)は予測しやすい部類に入ります。

対策

代表的な対策方法を2点紹介します。
単独でも効果がある方法ですが、組み合わせて使用すればより強固な対策となります。

アカウントロック

どんなに桁数を増やしたり、予測しにくい文字を使用しても、時間をかければ見破られてしまいます。
また、あまりにパスワードを複雑にすると、メモせざる負えない状況になり、
それこそパスワード漏洩につながり、新たなセキュリティリスクを生みます。

対策として、一定回数ログインに失敗した場合、アカウントロックさせ、
それ以上のログイン処理を、パスワードの複雑性から逃れることができます。

二要素認証(MFA)

2種類の異なる認証を行い、ログインさせる方法です。
MFA(Multi-Factor Authentication)と言われます。

単純にユーザID/パスワードの入力だけでなく、
ワンタイムパスワードという一定時間でパスワードが変わる仕組みを使用して、認証させます。
こうすることで一要素目のパスワードが万が一漏洩しても、
二要素目は漏洩しても一定時間経過後に使用できないパスワードになるため、
結果的にログインできません。

また、ワンタイムパスワードはSQLインジェクション等で抜き出すこともできないため、
単純な総当たり攻撃以外にも有効です。以下AWSの二要素認証の例です。

一要素目:ID/パスワードログイン

二要素目:ワンタイムパスワード入力

ワンタイムパスワードについては後述します。

ちなみによく二段階認証と二要素認証を混同して話す人がいますが、
二段階認証は同じ要素の認証の可能性があります。
例えば単純なユーザID/パスワードの要素を最初に行い、
2回目も同じユーザID/パスワードでも良いわけです。
ただし、この方法だと二要素認証のメリットはないため、漏洩した場合のリスクはあります。

代表的な二要素認証ツールして、Microsoft Authenticatorがあります。
Android
iOS

このツールは以下のように一定時間で変わるワンタイムパスワードを生成することができます。

まとめ

今回はOWASP 第2位の認証の不備についてまとめました。
なりすましのログインは大変な損害をWebサービスにも、所属組織にも多大な影響を与えます。
しっかりと今回紹介した対策を行い、システム開発を行っていきましょう。

次回予告

次回はOWASP 2021が発表されたので、その中の上位項目についてまとめたいと思います。

関連社内ページ

難しくない!誰でもわかる情報セキュリティ概要
Webアプリケーションのセキュリティ対策➀