推測不可能なプライベートURLはパスワードベースの認証と同等ですか?


128

Webでリソースを公開したい。このリソースを保護したい:特定の個人のみがアクセスできるようにするため。

何らかの種類のパスワードベースの認証を設定できました。たとえば、ファイルを提供する前に、(おそらくユーザーのバッキングデータベースに対して)正しい資格情報の着信要求をチェックするWebサーバーを介してのみ、リソースへのアクセスを許可できます。

または、プライベートURLを使用することもできます。つまり、単純に推測できないパスでリソースをホストできhttps://example.com/23idcojj20ijf...ます。たとえば、正確な文字列を知っている人にアクセスを制限します。

このリソースにアクセスしたい悪人の観点から見ると、これらのアプローチは同等ですか?そうでない場合、それらの違いは何ですか?そして、保守性に関しては、どちらか一方を実装する前に私が知っておくべきどちらかのアプローチに賛否両論はありますか?


45
通常、このアプローチは、パスワードのリセットなどの認証なしでのみ使用されます。推測不可能なリンクは通常短期間で期限切れになり、すでに半認証された人(つまり、リンクが送信された電子メールアドレスをWebサイトが既に知っている)のみが使用できます。
ロバートハーヴェイ

6
security.SEの関連ディスカッション:security.stackexchange.com/q/58215/37496
マーク

9
@MonkeyZeusあいまいさによるセキュリティではありません。シークレットは、通常はパスワードですが、この場合はURLです。
-Davidmh

16
@MonkeyZeus:セキュリティによるセキュリティは、不明瞭なキーを使用せずに、メカニズムの実装を秘密にすることを指します。推測できないURLがあいまいさによるセキュリティである場合、強力なパスワードもあります。
ジャックB

1
@GladstoneKeepは、URL短縮サービスに注意してください。悪意のある人がそれらの1つを使用すると、リンクは推測/書き留めるのがはるかに簡単になります。
RookieTEC9

回答:


203

プライベートURLは、URLのビットサイズが資格情報のビットサイズと同じであっても、資格情報を使用した認証よりも若干弱くなります。その理由は、URLがより簡単に「リーク」する可能性があるためです。ブラウザにキャッシュされ、サーバーにログオンします。アウトバウンドリンクがある場合、他のサイトのリファラーヘッダーにプライベートURLが表示される場合があります。(肩越しに見ている人にも見ることができます。)

漏えいした場合(偶然またはユーザーの不注意による)、それは公開され、Googleによってインデックスに登録されることもあります。

このため、プライベートURLは通常、パスワードリセットなどのワンショット操作にのみ使用され、通常は限られた時間だけアクティブになります。


情報セキュリティには関連するスレッドがありますランダムURLはプロフィール写真を保護する安全な方法ですか?-1つの答えはこの話を共有しています納税申告書がGoogleで終わると、Dropboxは古い共有リンクを無効にします。したがって、それは単なる理論上のリスクではありません。


7
些細なことですが、Dropbox(および他のクラウドサービス)がファイルへのアクセスを「保護」するためにそれらを使用していることを考えると、「通常は1回限りの操作にのみ使用されます」。
スティーブジェソップ

4
私は、ユーザーはパスワードを保護するように教えられていますが、成功することは限られていますが、URLを保護することはできないと付け加えます。
-svavil

1
追加する必要があります。技術的な懸念の多くは、プライベートURLのパラメーターを使用してxzy.com/myDoc?auth=8502375を使用し、認証のチェックアウト後にプレーンURLへの自動リダイレクトを使用することで軽減できます。-しかし、これは考えられるすべての問題を解決するわけではありません
ファルコ

3
TL; DR-秘密のURLなどはありません。通常、HTTPS経由でURLを送信した場合でも、WiFiホットスポットで悪意のある攻撃者にURLを公開する現在の攻撃があります。この攻撃はWeb Proxy Autodiscovery(WPAD)を悪用し、ブラウザーがすべてのURLを攻撃者に送信するように強制します。(例)arstechnica.com/security/2016/07/…を
Harald

5
@JacquesBあなたが特定したリスクのいくつかは、URLのフラグメント部分にプライベート部分を置くことによって軽減されていませんか(つまり、Stack ExchangeがOauth認証応答のために行うように "#"の後)。たとえば、リファラーヘッダーにfragmentを含めることできません
ジェイソンC

48

注意:

多くの人が「プライベート」URLと認証を混同しているようです。また、信頼できるエンティティを介してリンクを送信することは、二要素認証の試みであるという混乱があるようです。明確にするために、推測しにくいものではあるが、一般にアクセス可能なリソースについて話している。

プライベートURLを使用する場合、常に侵害される可能性があると想定する必要があります。侵害された場合でも、リソースが攻撃者に情報を漏らさないように、そのようなURLを設計する必要があります。


プライベート/推測困難なURLは、パスワードベースの認証と同等ではありません。本来、プライベートURLはまったくプライベートではなく、一般公開されているリソースです。「プライベート」URLという用語は誤った名前であり、むしろ「あいまいな」URLだと思います。

「プライベート」URLの使用が許容される特定のケースがありますが、パスワード認証やキーベース認証などの従来の認証方法よりも本質的に安全性が低くなります。

「プライベート」なURLがよく使用されるのは、次のような場所です。

  1. パスワードリセットメール
  2. 証明書生成メール
  3. アカウント/メールの確認メール
  4. 購入したコンテンツ(電子書籍など)の配信
  5. フライトチェックイン、搭乗券の印刷、従来の認証に加えてプライベートURLの使用など、その他のさまざまなこと

ここでの共通点は、通常、ランダムURLはワンショット操作にのみ適しているということです。また、従来の認証とランダムURL は相互に排他的ではありません。実際、これらを相互に組み合わせて使用​​して、リソースを配信するときにセキュリティを強化できます。


ロバートハーベイが指摘したように、ランダム/プライベートURLを安全に使用する唯一の方法は、ページを動的に生成し、ユーザーを半認証済みとみなす方法でURLを送信することです。これは、電子メール、SMSなどです。

ランダムに生成された/プライベートURLには通常、いくつかのプロパティがあります。

  1. 妥当な時間の経過後に期限切れになるはずです
  2. これは使い捨てURLである必要があります。IEは、最初にアクセスされた後に有効期限が切れます。
  3. ユーザーを安全に認証するために信頼する他のエンティティへのユーザーの認証を延期する必要があります。(リンクをメールまたはSMSなどで送信することにより)
  4. リソースを公開するAPIのレートを制限するか、推測できないほど十分なエントロピーを持つURLエンドポイントを作成することにより、最新のコンピューターが期限切れ前の時間枠でURLをブルートフォースすることは不可能です。
  5. ユーザーに関する情報が漏洩することはありません。IE:ページがパスワードをリセットする場合:ページはリクエスターのアカウント情報を表示するべきではありません。Aliceがパスワードリセットリンクを要求し、Bobが何らかの方法でURLを推測した場合、Bobがリセットしているパスワードを知る方法がありません。
  6. ユーザーに関する情報が漏れる場合は、従来の認証に加えて使用する必要があります。たとえば、Cookieが設定されている場合、またはsession_idがまだ有効である場合、ページはユーザーを認証済みと見なします。

異なるリソースには異なるレベルのセキュリティが必要です。たとえば、秘密のレシピを友人と共有したい場合、ランダム/プライベートURLを使用して友人と共有することは許容されます。ただし、リソースを使用して誰かのIDを盗んだり、他のサービスプロバイダーのアカウントを侵害したりできる場合は、そのリソースへのアクセスを制限する方がはるかに重要です。


4
製品開発チームとコーラの秘密のレシピを共有したい場合、近所のバーベキューパーティーで隣人に提供したポテトサラダのレシピを共有したい場合とは多少異なるものが必要になります。繰り返しますが、コンテキスト。:-)
CVn

7
@MichaelKjörling誰かが私の投稿とどのように差分を推測するかわからない。非常に明確に、異なるリソースには異なるレベルの認証が必要であると述べました。コーラのレシピは、おばあちゃんのクッキーのレシピよりもはるかに価値があります。
チャールズアディス

9
@CharlesAddis明らかにあなたは私のおばあちゃんのクッキーを味わったことがない!
ブライアン

1
間違っているかもしれませんが、@ Michaelが、秘密のURLが持つべきプロパティの5ポイントの説明は、友人と秘密のレシピを共有するのにすでにやりすぎだと思います。特に、有効期限ある場合は、特に、レシピにアクセスする友人ごとに個別のURLを必要とする(したがって、レシピにアクセスする友人ごとに個別のURLを必要とする)ことは、ほとんど取るに足らないように思えます。「プライベートURLを使用することは許容されますが、プライベートURLにはこれらの5つのプロパティが必要です」という意味の答えを読み、IMOは少し間違っています。
スティーブジェソップ

1
@BenjaminHodgsonはまさにアイテム#5の理由です=>リンク/ URLが間違った手に渡った場合、それを要求したユーザーに関する情報を漏らしてはいけません。
チャールズアディス

8

ほとんどすべての認証スキームは、あなたが秘密を知っていることを証明することに要約されます。秘密のパスワード、または秘密のURL、または...

より高度なプロトコル(OAUTH、Kerberosなど)を使用すると、実際にシークレットを送信することなく、シークレットを知っていることを証明できます。これは重要です。なぜなら、推測する以外にも「利用できない」秘密を取得する方法が他にもあるからです。

自分と同じインターネットカフェに座って、「利用できない」URLを入力すると、WiFi接続を盗聴される可能性があります。その時点で、SSLを使用していない場合、またはSSL実装の最新の新しいバグを悪用できる場合は、その秘密も知っています。


1
公平を期すために、これは、認証、またはのためにも当てはまる任意の通信。
アンディ

「WiFi接続の盗聴」は、URL、CSRFで保護された<form>s、JavaScript軍事グレードの暗号化されたデータ(アクティブなスニッフィングが必要な場合があります)で動作します。簡単に修正できます:HTTPSを使用します。
グスタボロドリゲス

@GustavoRodriguesまず第一に、盗聴が本当に「何でも動作する」場合、HTTPSで動作します。それ以外の場合、「何か」とはどういう意味ですか?または、HTTPSで他の何よりも優れているのはどのような魔法だと思いますか?
ソロモンスロー

2
...しかし、そこにある盗聴をオフ病棟魔法:それは、公開鍵暗号方式です。簡単な例を次に示します。サービスから、乱数とタイムスタンプを含むチャレンジが送信されます。私は秘密鍵でチャレンジに署名し、それを返します。登録された公開鍵で応答を検証できる場合、それは秘密を知っていることを証明します(秘密は秘密鍵です)が、潜在的な盗聴者にそれを明らかにすることなく証明しました。サービスが同じチャレンジを2回送信することはないため、盗聴者が私の応答を再生するのに役立ちません。
ソロモンスロー

HTTPS(つまりHTTP over SSL)は公開キー暗号を使用しますが、SSLの最も一般的な実装であるFYIには、暗号化にもかかわらず盗聴者が侵入できるバグの履歴があります。新しいバグ(別名、「エクスプロイト」)は毎年2、3回発見されているようで、SSLを使用するすべての製品の開発者は全員、最新のエクスプロイトがパッチされるまで走り回らなければなりません。(私に知っている方法を聞かないでください!)
ソロモンスロー

3

このスレッドにはすでに多くの良い答えがありますが、質問に直接対処するには:

このリソースにアクセスしたい悪人の観点から見ると、これらのアプローチは同等ですか?そうでない場合、それらの違いは何ですか?

定義を確立させてください。「認証」とは、身元の主張を証明する資格情報を提供することです。通常、アクセス制御はユーザーの識別に基づいています。

シークレットURLは特定のユーザーにバインドされていません。他の人が指摘したように、プロキシのログファイル、Googleによってインデックス付けされた検索リクエスト、または他の多くの方法で漏洩する可能性があります。

一方、パスワードは一意のユーザーアカウントに関連付けられています。これをリセットするか、ユーザーのホームロケーション、既知のIPアドレス、または他の任意のコントロールからのみ使用できるようにすることができます。

ユーザー名/パスワードを使用すると、アクセスをより詳細に制御できます。

アクセス制御により、リソース(オブジェクト)へのID(サブジェクト)アクセスが許可されます。URLの例では、IDは「何らかの方法でURLを取得した人」です。

可能であれば、ユーザー名/パスワードを入力してください。URLは、時間の経過とともに、あらゆる種類の予期しない方法でリークします。


1

秘密のURLは、秘密のパスワードと同じくらい安全です。ただし、パスワードはURLよりも秘密にする方が簡単です。これは、すべての人とそのプログラムがパスワードを秘密にする必要があることを知っているためです。

たとえば、ブラウザは画面にパスワードを表示せず、許可されたパスワードのみを保存し、そのパスワードストレージ(マスターパスワードでロック解除された暗号化ストレージなど)を保護する手段を提供します。対照的に、それは常に画面上にURLを表示し、リファラーヘッダーを介してURLをリークする可能性があり、さらに保護することなくブラウジング履歴に自動的に保存します。

同様に、HTTPプロキシは通常パスワードを記録しませんが、URLは一般に記録されます。

また、認証にURLを使用すると、URLを共有することで認証が共有されるため、アクセスを個別に取り消す(または記録する)のが難しくなります。

そしてもちろん、シークレットURLはシークレットパスワードのすべての弱点を継承します。特に、認証にパスワードを使用すると、そのパスワードがサーバーおよび通信を読み取ることができるすべてのユーザーに明らかになります。


3
この答えは間違っている多くの仮定をします。HTTPSを使用してサイトにログインし、ユーザー名とパスワードを入力すると、その間のホップとプロキシはパスワードを知りません。
ピーターB

「通信を傍受する」とは、コンテンツを再構築する機能を意味します。これは、HTTPSによって防止される場合とされない場合があります。特に、単一の不正な証明書を信頼する(たとえば、すべてのインストールに同じ秘密キーを使用する企業のHTTPSプロキシによる)と、攻撃者はHTTPSトラフィックを介在させることができます。
メリトン

2
ただし、URLにシークレットをエンコードすると、基本的にHTTPSをまったく使用できなくなります。クライアントとサーバー間のすべてのホップには秘密があります。妥協された証明書は必要ありません。
ピーターB

4
ナンセンス; HTTPSでは、URLは暗号化されたストリームでのみ送信されます。DNSルックアップフィールドとIPヘッダーフィールドにそれぞれ表示されるドメインまたはIPと混同する必要があります。
メリトン

1

どこにも記載されていないもう1つの項目は、「推測」の抑制です。ほとんどのパスワード認証システムでは、ユーザーのパスワードを推測する試行回数が制限されてから、さらに認証試行がロックアウトされるか、制限されます。

URLスキームに対して「推測」を使用して同様のことを行うことはできますが、実装は多少難しくなります。URL生成に認識可能なパターンがある場合、誰かが「ランダムな」URLスペースを処理するように設定するのを止めるのは難しいかもしれません。


0

まだ言及されていない別の側面があります-URL短縮。

最近の出版物(2016年4月)で、URL短縮サービスは、ランダムに生成された「使用できない」URLによって提供されるセキュリティの強化を完全に無効にしていると主張されました。短縮サービスのURLスペースは、ランダムに生成されたURLよりもかなり小さくなります。つまり、短縮サービスと共有されるこのような「セキュアな」URLは、予想よりも簡単に推測できます。

説明のために、ランダムなURLが128ビット長(つまり、guid)であると仮定しましょう。また、乱数ジェネレーターが本当に強力であり、それらのビットを均一な方法で生成すると仮定します。128ビットの数値を推測するのは非常に難しく、かなり時間がかかる可能性があります。URLは事実上128ビットのキーで保護されています。

次に、誰かがこのURLをGoogle URL Shorterで共有したと仮定しましょう。今日、このサービスは、文字と数字で構成される10文字のIDを発行します。(26 + 10)^ 10〜= 3.6 * 10 ^ 15 <2 ^ 52-キー強度を128ビットから52ビットに効果的に半減しました。

ジェネレーターが他の考慮事項のためにスペース全体を使用しないという事実に加えて、ブルートフォースとサイドチャネル(ほとんどの場合、事前に割り当てられたランダムURLバッファー)を組み合わせた効果的な攻撃を仕掛けることができます。

元の記事:http : //arxiv.org/pdf/1604.02734v1.pdf記事を
要約したブログ投稿(著者による):https : //freedom-to-tinker.com/blog/vitaly/gone-in- 6文字の短いURLを考慮した有害なクラウドサービス/


2
ええ、しかし、機密データにそのようなサービスを使用している人は、短縮サービスを含むどこにでも URLを投稿するよりもよく知っていることを望みます。これはGah! My password/private key is too long and complex. I know! I'll just write it in a text document and put that in a zip file with an easier password.、両方とも透明な失敗と言うのと実際には違いはありません。しかし、はい、実際には、悲しいことにあなたの警告がおそらく必要です;)
underscore_d

@underscore_dまさにそうです-この主題についてコメントするのに十分な詳細を知っているなら、これはブログに値するポイントではありません。
ロバートグラント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.