Azure上のWebシステムにおいて、ユーザーが任意のURLのショートカットを登録できる機能を導入しました。
この機能では、URLを登録する際にシステムがサイトのファビコンを取得し、ショートカットのアイコンとして表示します。
ファビコン(favicon)とは、ウェブサイトのアイコンとしてブラウザのタブやアドレスバーなどに表示される、小さな画像のことです。
ウェブサイトのロゴなどを表示することで、サイトの識別やブランド認知に役立ちます。
この機能はユーザーが任意のURLを指定できるという特徴から、さまざまなセキュリティに関する懸念がありしっかりとした対策を検討する必要がありましたので、本記事で一部ご紹介させていただきます。
セキュリティに関する懸念点 今回の機能はユーザーが任意のURLを登録できるため、仮に悪意のあるアクセス先のURLが登録されると以下のような懸念が発生します。
① Azureの内部リソースへの不正アクセス
Azureの内部には、Webシステムのサーバー以外にも他のサーバーやストレージアカウントなどさまざまなリソースがあり、それらにも内部的にURLが振られています。
このURLは通常外部からのアクセスができないようセキュリティ設定をしていますが、ファビコンの取得先としてこれらのURLが指定されると、本来閲覧できないファイルやメタデータが読み取られるなど、不正アクセスの恐れがあります。
このような攻撃は、SSRF(サーバーサイド・リクエストフォージェリ)攻撃と呼ばれます。
➁ 外部へのリクエスト露出
悪意のあるURLを登録しWebシステムからのリクエストを解析することで、Webシステムのサーバーの情報が漏洩する可能性があり、例えばOSやフレームワークの情報などが読み取られると、脆弱性をついた攻撃のヒントを与えることになってしまいます。
App Serviceを利用した対策例
上記の2つの懸念に対応する方法の一つとして、ファビコン取得機能をWebシステムのサーバーとは別のサーバーで実装する方法が考えられます。
別のサーバーにはApp Serviceなどを利用することができます。
加えて、App Serviceに対してアクセス制限を設定し、Azureの内部リソースへのアクセスを禁止することで、もし悪意のある攻撃者が内部リソースのURLを入力したとしてもアクセスが不可能なため攻撃を防ぐことができます。

上記のような対策を行わずに、Webシステムのサーバー上から直接ファビコンを取得する場合、ファビコン取得以外の機能でAzureリソースへのアクセスが必要なため細かいアクセス制御が必要になります。
一方、App Serviceに機能を切り出すことで、App Service全体に対してAzureリソースへのアクセスを拒否するシンプルな設定をすることができます。
また、App Serviceを介してWebサイトにアクセスが行われることにより、要求の実態となるWebシステムのサーバーの情報が直接露出しなくなるため、情報漏洩の懸念を緩和することができます。

今回は、Webサーバーがユーザー指定のURLに直接アクセスすることによるリスクとして、内部リソースへの不正アクセスとサーバー情報の露出についてご紹介しました。
これらのリスクに対しては、専用のサーバーを用意する案が効果的でした。
今回ご紹介した方法にも、踏み台攻撃への対策として外部サーバーへのアクセス制限を設けるなど考慮すべき点があります。
これらの対策を適用することで、システムのセキュリティをさらに強化することが重要です。

