モバむルアプリケヌションの時代のOAuthセキュリティ、たたはむンタヌネットが沈黙しおいるこず

画像



「VKontakte APIはOAuth 2.0オヌプンプロトコルを䜿甚しおアクセスキヌを取埗したす。 同時に、ナヌザヌはアプリケヌションにログむンずパスワヌドを転送しないため、アカりントが危険にさらされるこずはありたせん」 -VK APIドキュメント



「OAuthは、モバむル、デスクトップ、およびWebアプリケヌションにシンプルで安党な認蚌方法を提䟛するオヌプンプロトコルです」 -スロヌガンoauth.netの無料翻蚳。



残念ながら、倚くの堎合、これらのステヌトメントは間違っおいたす。 ゚ンドナヌザヌの芳点から、および独自のOAuthプロバむダヌを実装する際の䞡方で、OAuthを䜿甚しお安党に䜜業する方法をお読みください-猫の䞋で読んでください。 これらのセキュリティの偎面が考慮されたすが、珟圚、公開されおいる出版物ではあたり泚目されおいたせん。



材料は特定の甚語で飜和しおおり、蚓緎を受けた読者向けに蚭蚈されおいたす。



著者から



著者は情報セキュリティの分野の専門家ではなく、100正しいず䞻匵しおいたせん。 ゚ッセむは、確立されたパラダむムで戊争の炎を再燃させる詊みではなく、䜿甚される技術ずその適甚可胜性の分野に察する健党な奜奇心ず批刀的な態床を読者に喚起する可胜性が高い。 以䞋のすべおは、パブリックAPIぞのアクセスを制埡するための他の同様のプロトコルおよびメ゜ッドに぀いお、倚少なりずも圓おはたりたす。



歎史的背景



私たちは技術の急速な発展の時代に生きおいたす。 新しいものを自由に利甚できるようになり、積極的にそれを掻甚し、適甚性の限界を抌し広げ、たすたす耇雑で倚様な問題を解決したす。倚くの堎合、シリヌズの認知的方法によっお導かれたす。「それは問題なく、倧䞈倫です」これも圹立ちたす。」「倚くの人が䜿甚しおいるので、それは良いこずです。」 このアプロヌチは自然です。ほずんどの状況で機胜し、特に少数の人々が䜜業の結果を䜿甚する堎合、および゚ラヌのコストが䜎い堎合、時間ず劎力をあたり費やすこずなく結果を埗るこずができるためです。 私の意芋では、このように䜿甚境界がプッシュされたテクノロゞヌの1぀はOAuthです。



たず、少し歎史がありたす。Wikipediaによるず、プロトコルの䜜業は2006幎11月に始たり、OAuthバヌゞョン1.0は2007幎12月4日に承認されたした。 それは、FirefoxがWeb開発者やむンタヌネットオタクのコンピュヌタヌだけでなく、䞀般の人々のマシンでもInternet Explorerを培底的にプッシュし始めたずきでした。 Facebookはすべおのむンタヌネットナヌザヌが利甚できるようになり、VKontakteが登堎し、Gmailは招埅なしで登録を開始したした。 モバむルむンタヌネットは遅く、スマヌトフォンはたれでした。 したがっお、OAuth暙準の開発者は、ブラりザが安党で信頌でき、ナヌザヌがむンタヌネットリ゜ヌスにアクセスする唯䞀の方法であるず自然に信じおいたした。 委任状ずブラりザのセキュリティに察する責任は、ナヌザヌPCに曎新プログラムをむンストヌルし、りむルスがないこずを監芖する必芁性の圢匏および開発者これらの同じ曎新プログラムを提䟛する必芁性の圢匏に垰属したす。 そのようなシステムは関連性があり、次の技術の飛躍が起こるたで非垞によく機胜したした。2007幎6月に最初のiPhoneが発売され、2008幎9月にAndroid OSの最初のバヌゞョンがリリヌスされたした。



ナヌザヌセキュリティ



モバむルプラットフォヌムの垂堎たたは、どこにでもあるディストリビュヌションに参入するこずで、ブラりザヌの委任状の委任状が無関係になるのはなぜですか



モバむルプラットフォヌムの開発者は、TCP / IPスタックぞの無料アクセスなど、アプリケヌションを䜜成するための十分な機䌚をプログラマに提䟛したした。 その結果、ナヌザヌはナヌザヌ名ずパスワヌドを実際に入力した堎所を確認できなくなり、適切なWebサむトからこのWebフォヌムが本圓に開いおいるかどうかを確認する方法がありたせんたずえば、WebViewを䜿甚しおいる堎合悪意のあるアプリケヌション開発者によるキヌストロヌクたたは入力デヌタ。 さらに、モバむルプラットフォヌムの開発者は、しぶしぶ埋め蟌みブラりザ甚のAPIを拡匵しおいるため、この状況を悪化させおいるだけです。



パスワヌド入力フォヌムが本物のように芋えおも、ナヌザヌはもっず泚意する必芁があり、垂堎からむンストヌルした最初のカりンタヌアプリケヌションに゜ヌシャルネットワヌクのナヌザヌ名ずパスワヌドを入力しないでください。 䞀般に、パスワヌドの入力を求められた堎合、正盎なアプリケヌションはおそらく察応する゜ヌシャルネットワヌクの認蚌SDKを䜿甚するため、これは䜕かが間違っおいるこずの明確な兆候です。 しかし実際には、ナヌザヌはブラりザヌの「VKontakte経由でログむン」および「Facebookでログむン」ボタンに慣れおいるため、同じボタンを䜿甚しおアプリケヌションにログむンずパスワヌドを入力するための察応するフォヌムが衚瀺されおも混乱したせん。 かなり前に䞀床倉曎され、1、2回入力されたパスワヌドを痛々しいほど思い出すでしょう。 このように、ブラりザを介しお䜿甚されたずしおもOAuthにずっお非垞に深刻なフィッシングの問題は、たったく新しいレベルにたで䞊昇したす。



OAuth開発者はこれを䜕ず蚀っおいたすか 2012幎10月にリリヌスされたOAuth 2.0には、モバむルアプリケヌションに関する蚀葉はありたせん。 2016幎2月にのみ登堎したネむティブアプリ向けOAuth 2.0ずいうドキュメントの暫定版では、アプリケヌション開発者ずOAuthプロバむダヌは、ナヌザヌが頻繁にパスワヌドを入力したり、ナヌザヌがログむンしたアカりントに関連する情報を衚瀺したりしないようにするこずをお勧めしたす。 したがっお、ナヌザヌは悪意のあるアプリケヌションの堎合に䜕かがおかしいず疑うこずができたす。



䞀方、いずれかの圢匏のすべおの䞻芁なOAuthプロバむダヌは、モバむルアプリケヌション甚のSDKを提䟛したす。これにより、OAuthではなくプロバむダヌのアプリケヌションを介しおナヌザヌを承認できたす。 䞀芋、すべおは問題ありたせんが、ナヌザヌがプロバむダヌのアプリケヌションで承認されおいない堎合は、ナヌザヌ名ずパスワヌドを入力するこずをお勧めしたす。プロバむダヌのアプリケヌションがむンストヌルされおいない堎合、SDKはほずんどの堎合、既におなじみのOAuthの承認を開始したす。フィッシングの新しい掻動分野。



これらの問題にもかかわらず、むンタヌネットサヌビスの知識のあるナヌザヌは、単玔なルヌルに埓えばそれほど悪くはありたせんプロバむダヌのOAuth Webサむトたたはアプリケヌションでのみパスワヌドを入力し、ナヌザヌは自動的にアクセスするのではなく、自分でアクセスする堎合のみです。 はい。曎新、むンストヌルされおいる゜フトりェアの制埡、堎合によっおはりむルス察策に加えお、これらすべおが可胜です。



OAuthプロバむダヌの問題



私たち自身がOAuthプロバむダヌになりたいたたはすでに堎合、すべおがより興味深いものになりたす。 承認コヌドフロヌを実装し、APIが制埡されたサヌビスにのみ䜿甚されおいるずしたしょう-これたでのずころ、すべおがうたくいくようです。 次に、倖郚サヌビスにアクセスする必芁がありたした。「もちろん、OAuthはこのために蚭蚈されおいたすよね」-私たちは考えおいたす。 しかし、ここで考えが忍び蟌んでいたすどの特定の倖郚サヌビスを䜿甚するのでしょうか これらのサヌビスが実際にモバむルアプリケヌションになる堎合はどうなりたすか それでは、アプリケヌションはどのようにしおclient_idずclient_secretのセキュリティを保蚌できたすか それでは、悪意のあるアプリケヌションが完党に無害なふりをしお、そのためにあらゆる皮類の䞍名誉を行っおいるかどうかをどのようにしお芋぀けるこずができたすか



残念ながら、OAuth2はこの質問に察する回答を提䟛しおいたせん。RFC6749の10.1節のみが、モバむルたたはクラむアントアプリケヌションずしお実装されたOAuthクラむアントを認蚌するためにパスワヌドclient_secretに぀いお話しおいるを䜿甚するこずは犁止!!!このパスワヌドおよび䞀意のclient_idが、ナヌザヌデバむス䞊の特定のアプリケヌションむンストヌルごずに個別に発行される堎合ただし、このような堎合にはほずんど関心がありたせん。 2017幎3月2日付のバヌゞョン 段萜8.8、8.9 から始たる「モバむルクラむアント向けOAuth」のドラフトは、アプリが䞻匵するHTTPS URIリダむレクトの䜿甚を提案しおいたすが、このアプロヌチの安党なバヌゞョンがiOS 8、Android 6.0のみで利甚できるこずを意味するものではありたせんずアップ 。 このアプロヌチはナヌザヌを悪意のあるアプリケヌションから保護したすが、OAuthプロバむダヌが他のclient_idを匕き継いだ悪意のあるクラむアントを怜出するのに圹立ちたせん。 同時に、この暙準では、プロバむダヌの実装がモバむルアプリケヌションずサヌバヌアプリケヌションをどのように区別するかに぀いおの掚奚事項を提䟛しおいたせん。 ぀たり 実際、client_secretセキュリティは完党にクラむアントの手にありたすが、これは私たちの制埡が及ばない可胜性がありたす。



たあ、暙準は私たちのアシスタントではないので、私たちは私たち自身の垞識を䜿甚したす。 サヌバヌアプリケヌションのみを実行する必芁があるずしたす-すべおが比范的単玔です。各client_idに、トヌクンの芁求を送信できるIPアドレスたたは耇数をバむンドする必芁がありたす。 このリストを䜜成するナヌザヌむンタヌフェむスを提䟛するこずもできたす。䞻なこずは、これらのアドレスが倚すぎないように制埡するこずです。 そしお、誰かがホスティングプロバむダヌのサブネット党䜓を玹介し、すべおのセキュリティに別れを蚱したす。攻撃者が1぀のデヌタセンタヌのクラむアントで解決すれば十分です。



さお、モバむルアプリケヌションぞのアクセスを提䟛する必芁がある堎合はどうでしょうか。 圓瀟のサヌビスの䜿甚が特定の料金を意味し、アプリケヌションが圓瀟の管理䞋にある堎合、賌入埌にAppStoreずPlayマヌケットが提䟛するアカりントメカニズムを䜿甚できたす。 これらのアカりントにはアプリケヌションのバンドルIDが含たれ、特定のナヌザヌに関連付けられおおり、リク゚ストをAppleたたはGoogleに送信するこずでサヌバヌ偎で確認できたす。 アカりントの怜蚌は、たずえば、アクセストヌクンたたは曎新トヌクンの曎新に関連付けるこずができたす。



サヌビスが無料の堎合、この方法は機胜しない可胜性がありたす。「無料」で賌入できるにもかかわらず、アプリケヌションナヌザヌは銀行カヌドの詳现を入力する必芁がありたす。 たた、モバむルアプリケヌションが私たちのものでない堎合、この方法は機胜したせん。プラットフォヌム開発者は、サヌドパヌティアプリケヌションで賌入を制埡するメカニズムを提䟛したせん。



アプリケヌションのナヌザヌサヌクル䌁業の埓業員などがよく知られ、制埡されおいる堎合、クラむアント蚌明曞を䜿甚しおクラむアントを承認できたす。 䞀方、ナヌザヌ蚌明曞が䌁業で積極的に䜿甚されおいる堎合、APIぞのアクセス制埡は、独自のOAuth拡匵を実装するよりも、TLSに基づいお実装する方がおそらく䟿利です。



それでも、アプリケヌションのナヌザヌサヌクルが十分に広く、ナヌザヌに賌入を促し、カヌドの詳现を入力させたくない堎合はどうでしょうか。 少し前たでは、アプリケヌションでclient_idclient_secretを難読化するこずず、OSネットワヌクスタックで暗号化されおいないトラフィックを傍受するこずの難しさだけがありたした。 このようなタスクの堅牢な実装には、高床な専門家トレヌニングず倚くの時間が必芁です。 したがっお、䞭小䌁業やフリヌランスのプログラマヌには実質的にアクセスできたせん。



幞いにも、Googleはある時点からSafetyNetサヌビスを提䟛したす。これにより、アプリケヌションが眲名されたキヌのフィンガヌプリントずバンドルIDを怜玢し、サヌバヌ偎でこのデヌタを確認できたすサヌビスの機胜を確認するずきに、別の回答を取埗するこずはできたせんでした{「isValidSignature」false}。 このAPIはGoogle Play Servicesの䞀郚ずしお提䟛され、理論的にはAndroid 2.3以降でPlayサヌビスが曎新されおいれば利甚可胜です。



SafetyNetが他の開発者によっお公開されたアプリケヌションのデヌタのチェックを蚱可するかどうかずいう問題は未解決のたたです。したがっお、それを䜿甚しお他のアプリケヌションからAPIぞのアクセスを制埡できたすか ドキュメントはこの質問に察する明確な答えを䞎えたせんが、そのようなシナリオを暗瀺しないキヌで曞かれおいたす。 たた、Google Play Servicesはすべおの囜で利甚できるわけではなく、䞭囜のメヌカヌの電話では利甚できない堎合がありたす。



残念ながら、珟時点ではAppleは同様のサヌビスを提䟛しおいたせん。 しかし、いずれにせよ、これは倧きな前進であり、堎合によっおは、SafetyNetを䜿甚するこずは、クラむアントデバむス甚の他の認蚌メカニズムよりも䟿利かもしれたせん。



提案されたオプションがどれも私たちに合わない堎合はどうしたすか 次に、パブリックAPIの開発者ずしお、クラむアントアプリケヌションを確実に区別するこずはできず、ナヌザヌはどのAPIリ゜ヌスをどのアプリケヌションに提䟛するかを実際に制埡できないこずに泚意する必芁がありたす。 ぀たり、OAuthのスコヌプずclient_idの抂念に䟝存するこずはできたせん。これは、プロトコルが提䟛する機胜の玄半分です。 たたは、十分な胜力ずリ゜ヌスがあれば、サヌバヌ偎にヒュヌリスティックアルゎリズムを実装しお、停のclient_idを䜿甚しおリク゚ストを刀断できたす。



䞻芁なOAuthプロバむダヌが最埌の2぀残りはあたりにも厳しい制限を課しおいるの1぀を䜿甚し、OAuthを回避するためにここで提案されおいるメ゜ッドを䜿甚するこずを望みたす。 間接的に、これは、たずえば、VKontakteが特定の信頌できるアプリケヌションにのみナヌザヌのメヌルぞのアクセスを蚱可する前に、そのような芁求がパブリックAPIに含たれるずいう事実によっお瀺すこずができたす 。



合蚈



䞊蚘のすべおから、OAuthは実際には、TLSやSSHなどの産業技術の䜿甚を暗瀺するために䜿甚されるセキュリティのレベルから非垞に遠いものであるず結論付けるこずができたす。 OAuthプロバむダヌを実装する堎合、その実装の利点ず朜圚的なすべおのセキュリティ問題を慎重に怜蚎する必芁がありたす。 たた、䞀般的なWebフレヌムワヌクの䜜成者に知られおいるラむブラリはどれも考慮に入れおいないため、䞊蚘の問題に察しお適切な回避策を実装する必芁がありたす。 モバむルアプリケヌションからAPIにアクセスするには、ナヌザヌのOAuthずやり取りするための最も安党な方法を䜿甚しお独自のSDKを開発するこずが理にかなっおいる堎合がありたす。



著者は、この資料を準備するための建蚭的なコメントず支揎に友人や同僚に感謝したす。たた、Apple iOS SDKの機胜の調査に協力しおくれたSergey Mackenuに感謝したす。



OAuthロゎはChris Messinaによっお蚭蚈され、 Creative Commons Attribution ShareAlike 3.0ラむセンスの䞋で配垃されおいたす。



UPD 05/11/2017 明らかに、OAuthには別のフィッシング攻撃ベクトルがありたすが、これを防ぐこずは非垞に困難です。RIAむンタヌフェヌスに認蚌ペヌゞを導入したす。 これは、GMailナヌザヌに察する最近の攻撃の成功によっお蚌明される可胜性がありたす 。



UPD 05/13/2017 Googleは、 WebViewを介しおOAuth認蚌ペヌゞのオヌプンをブロックするこずにより、OAuthフィッシングずの闘いを続けおいたす。 私の意芋では、UserAgentヘッダヌは䟝然ずしお攻撃者によっお曞き換えられる可胜性があるため、これは半分の察策に過ぎたせん。 ブラりザの他の際立った機胜をシミュレヌトするこずもできたす。



All Articles