はじめに
こんにちは。脆弱性診断員のYOSHIIです。
ログイン機能があるWebシステムを診断する際に、診断用のアカウントを複数ご提供いただけるようにお願いすることがあります。
「なぜアカウントが1つではダメなのか。複数アカウントで何をするのか。」
このような質問をいただくことがよくあります。
わかります。お忙しいなか、お手数をおかけして心苦しい思いです。
必要とする理由はいくつかありますが、一言で言うと、よりよい診断結果をご報告するためです。
ということで、今回は複数のアカウントを使ってどういうことをやっているのか、一部ですが簡単にご紹介します。
診断の例
一般ユーザーで管理者機能が利用できるか
とあるWebアプリに管理者ユーザーでログインした場合、以下のような画面が表示されるとします。
一番下の「利用者一覧」リンクをクリックします。
システムの利用者が一覧表示されるようです。
変更や削除もできます。いかにも管理者向けの機能といった感じです。
次に、一般ユーザーでログインした場合は、以下のような画面が表示されました。
先ほどあった「利用者一覧」リンクが表示されません。
これで「利用者一覧」は管理者のみが利用できる機能であることが確認できました。
では、このまま一般ユーザーで「利用者一覧」画面にアクセスできるか試してみます。
URL「localhost:8080/accounts」をブラウザに直接入力します。
利用者一覧が表示されました。
ということで、脆弱性になります。
以上のように、権限の異なるアカウントで動作を比較して、出来ること出来ないことを洗い出して診断します。
このWebアプリの診断には、管理者ユーザーと一般ユーザー、2つのアカウントが必要になります。
一般ユーザーで他のユーザーの情報が閲覧できるか
とあるWebアプリに一般ユーザー「Taro」でログインします。
「利用者情報」リンクをクリックすると、以下の画面が表示されました。
ログインユーザーの情報が表示されるようです。
この時のURLは「localhost:8080/accounts/2」となっています。
末尾の数字が怪しいです。ユーザーのIDっぽい値に見えます。
試しに「2」を「3」に変更してアクセスしてみます。
「Jiro」の情報が表示されました。
ということで、情報漏えいの脆弱性になります。
この例だとユーザーIDが連番の数値になっており、容易に推測が可能です。
しかし、これが推測の難しい値だった場合は脆弱性の発見が難しくなります。
例えば「Taro」のIDが「c81e728d9d4c2f636f067f89cc14862c」だった場合、ここから「Jiro」のIDを推測することは難しいでしょう。
診断用に「Taro」と「Jiro」の両方が利用できれば、ログインしてIDの値を確認できるので、確実に診断できることになります。
まとめ
権限に関する診断内容の一部を簡単にですが紹介しました。
このように、複数のアカウントで動作を比較し、診断を行っています。
また、XSSなどの脆弱性があった場合、上位の権限をもつユーザーに攻撃が可能だと、危険度を上げてご報告することもあります。
詳細な診断作業を行うために、診断用のアカウントを複数ご提供いただけると幸いです。
そうすることで、よりよい診断結果をご報告できると思います。
おわりに
権限に関しては以下の記事もご覧いただくと、より一層理解が深まるかと思います。
未読の方は、ぜひご一読ください。
本音
複数アカウントが欲しい一番の理由は、「ここめっちゃ怪しいけど、他アカウントで確認できないからよくわからんなあ…」というようなモヤモヤを残して診断を終えたくないという気持ちだったりします。