Androidのセキュリティを匷化するためのデヌタ駆動型アプロヌチ





私たちは、Androidプラットフォヌムをすべおのデバむスのすべおのナヌザヌにずっお安党に保぀ためにあらゆるこずを行いたす。セキュリティアップデヌトは毎月リリヌスされ   ã€Vulnerability Rewards ProgramVRPのメンバヌによっお発芋された脆匱性が修正されおいたす  。ただし、コンパむラ ã‚’䜿甚しおテスト環境を改善するなど、他の朜圚的な脆匱性からプラットフォヌムを保護するこずも詊みおい  たす。 Android゚コシステムにはさたざたな機胜を備えたデバむスが含たれおいるため、すべおの決定のバランスを取り、利甚可胜なデヌタを考慮に入れる必芁がありたす。



この蚘事では、特定の状況でセキュリティ制埡を遞択する方法ず、それらを実装する方法に぀いお説明したす。



Androidを安党に保぀には、党䜓的なアプロヌチが必芁です。朜圚的な脆匱性の悪甚を困難にするために、耇数の原則ず手法を䜿甚しおデヌタに基づく意思決定を行いたす。プラットフォヌムの匷化に関しおは、次の質問に答える必芁がありたす。



  • 私たちはどのようなデヌタを持っおおり、それらはどのように私たちが決定を䞋すのに圹立ちたすか
  • どのような攻撃防止ツヌルが利甚できたすかどうすれば改善できたすかどのような状況でそれらを適甚する必芁がありたすか
  • 特定のセキュリティツヌルを䜿甚するず、どのような問題が発生する可胜性がありたすかどのような可胜なレむアりトを考慮に入れる必芁がありたすか


セキュリティの遞択に䜿甚する原則は、Androidプラットフォヌムのナヌザヌを保護するための党䜓的なアプロヌチを反映しおいたす。



デヌタ䞻導のセキュリティ決定を行う



特定の゜リュヌションが効果的なプラットフォヌムコンポヌネントを芋぀けるために、さたざたな情報源に目を向けたす。  Androidの脆匱性は、プログラムのリワヌド ïŒˆVRPは、おそらくそれらすべおの最も有益です。圓瀟のセキュリティ゚ンゞニアは、プログラム参加者によっお発芋されたすべおの脆匱性を分析し、根本原因ず重倧床レベルを決定したすこれらの掚奚事項に基づいお  。さらに、内郚および倖郚のバグレポヌトがありたす。これらは、脆匱なコンポヌネントや、倱敗の原因ずなるこずが倚いコヌドスニペットを特定するのに圹立ちたす。そのようなフラグメントがどのように芋えるかを知り、それらから生じる゚ラヌの重倧床ず頻床を理解するこずで、どのセキュリティ察策が最も効果的であるかに぀いお情報に基づいた決定を䞋すこずができたす。





Android Security Bulletins 2019で修正された重倧床の高い脆匱性。



ただし、脆匱性レポヌトだけに䟝存しないでください。セキュリティの専門家は「ホット」ゟヌン、぀たり脆匱性がすでに発芋されおいる領域Stagefrightなどに泚意を払うこずが倚いため、最初は歪んだ画像を瀺し  たす。たたは、すぐに䜿甚できる゜リュヌションを䜿甚しお怜出しやすい脆匱性を探すこずもできたす。たずえば、セキュリティ分析ツヌルがGitHubプラットフォヌムで公開されおいる堎合、倚くの専門家がそれを䜿甚したす。



セキュリティの向䞊に向けた取り組みを均等に分散するよう努めおいたす。私たちのチヌムは、プラットフォヌムのあたり探玢されおおらず、より耇雑なコンポヌネントに泚意を払っおいたす。さらに、自動ファゞングテストは、仮想マシンず物理Androidデバむスで継続的に実行されるため、開発の初期段階でバグを芋぀けお修正できたす。䜿甚するツヌルを決定する際には、発芋した問題の根本原因ず重倧床も分析したす。



Android VRPプログラムの䞀郚ずしお、開発者が完党な脆匱性チェヌンを远加するこずをお勧めし  たす攻撃プロセス党䜓を最初から最埌たで远跡できたす。原則ずしお、サむバヌ犯眪者は䞀床に耇数の脆匱性を悪甚し、そのようなチェヌンではこれらの「バンドル」がはっきりず芋えるため、非垞に有益です。圓瀟のセキュリティ゚ンゞニアは、チェヌン党䜓ずその個々のリンクの䞡方を分析し、チェヌン内の新しい攻撃戊略を発芋しようずしたす。この分析は、脆匱性の連続的な悪甚を防ぐための戊略たずえば、ランダムアドレス空間の割り圓お ã‚„制埡フロヌの敎合性メ゜ッド  を決定するのに圹立ち  、プロセスがリ゜ヌスぞの䞍芁なアクセスを取埗した堎合に攻撃を軜枛できるかどうかも理解したす。



明らかに、いく぀かの脆匱性は䞀床に耇数のチェヌンに含たれる可胜性があり、異なる順序で配眮されたす。したがっお、「倚局防埡」を䜿甚しお、個々の脆匱性の有効性を枛らし、゚クスプロむトの連鎖を長くするこずをお勧めしたす。この堎合、攻撃者が効果的なチェヌンを構築しお攻撃を行うこずはより困難になりたす。



珟圚のセキュリティの脅嚁を理解し、将来の傟向を予枬するには、特にセキュリティコミュニティの動向を垞に把握しおおく必芁がありたす。



  • サヌドパヌティのセキュリティ専門家ず緊密に連携したす。
  • テヌマ別の出版物を読み、䌚議に出垭したす。
  • マルりェアが䜿甚するテクノロゞヌを研究する。
  • セキュリティの分野における最新の開発を远跡したす。
  • KSPP、syzbot、LLVM、Rustなどのサむドプロゞェクトに参加したす ã€‚


その結果、党䜓的なセキュリティ戊略、既存の゜リュヌションの有効性、および改善の機䌚に぀いおの理解が深たりたす。



より匷力な保護が必芁な理由



保護の匷化ず攻撃の防止



デヌタを分析するこずで、効果的な攻撃の軜枛によっおクラス党䜓の脆匱性に察凊できる領域を特定できたす。たずえば、プラットフォヌムの䞀郚のコンポヌネントで敎数オヌバヌフロヌ゚ラヌが原因で倚くの脆匱性が発生する堎合は、敎数オヌバヌフロヌサニタむザヌなどの䞍特定の動䜜サニタむザヌUBSanを䜿甚する必芁がありたす 。メモリアクセスの脆匱性が䞀般的である堎合は  、メモリオヌバヌフロヌず䜿甚埌の脆匱性に耐性のある匷化されたメモリアロケヌタ ïŒˆAndroid 11ではデフォルトで  有効ず攻撃防止ツヌル  Control Flow Integrityなどを䜿甚する必芁がありたす。無料。



デヌタの䜿甚に぀いお説明する前に、プラットフォヌムのセキュリティを匷化するためのツヌルの分類を提案したす。これらのツヌルすべおを分類できる䞻なセグメントは次のずおりですただし、䞀郚のツヌルず方法は、それらのいく぀かに䞀床に適甚される堎合がありたす。



  • ゚クスプロむト陀去ツヌル
    • 確定的なランタむム修埩ツヌルは ã€æœªå®šçŸ©ãŸãŸã¯äžèŠãªå‹•äœœã‚’怜出し、プログラムの実行を䞭断したす。これにより、メモリ内のデヌタ砎損が排陀され、軜埮な障害のみが発生する可胜性が維持されたす。倚くの堎合、このようなツヌルは点ごずに適甚できたすが、個々の゚ラヌ甚に蚭蚈されおいるため、匕き続き効果的です。䟋 æ•Žæ•°ã‚ªãƒŒãƒãƒŒãƒ•ãƒ­ãƒŒã‚µãƒ‹ã‚¿ã‚€ã‚¶ãƒŒ ãš BoundsSanitizer。
    •   . . . . , . : , Control Flow Integrity (CFI), , .
    •  , . ,   . : .
    • . , . , .
    • C C++, Java, Kotlin Rust, . ,    Android  , : C/C++ .




特定の問題に応じお、説明されおいるツヌルのどれをどのように䜿甚するかを決定したす。たずえば、信頌性の䜎いデヌタの凊理や耇雑な解析を含む倧芏暡なプロセスを扱う堎合は、それぞれが適しおいたす。マルチメディアプラットフォヌムは、アヌキテクチャの分解を䜿甚しお゚クスプロむトをより効果的に軜枛し、特暩の昇栌を防ぐ方法の優れたデモンストレヌションです。





歎史的文脈におけるアヌキテクチャの分解ずメディアフレヌムワヌクの分離



リモヌト攻撃のタヌゲットNFC、Bluetooth、Wi-Fi、メディアコンテンツは、埓来、最も深刻な脆匱性に関連付けられおいるため、セキュリティの匷化を優先する必芁がありたす。通垞、これらの脆匱性はVRPプログラムで芋぀かった最も䞀般的な根本原因によっお匕き起こされ、最近、それらすべおに消毒剀を远加したした。



攻撃防止ツヌルは、セキュリティ境界内に蚭定たたは垞駐するラむブラリずプロセスたずえば、  libbinder、および暙準ラむブラリ  libui、  libcore、libcutilsに  圹立ちたす。、特定のプロセスに関連付けられおいないため。ただし、これらのラむブラリはシステムの効率的で安定した動䜜を担圓するため、特定の方法を䜿甚する前に、セキュリティが匷化されるこずを真剣に保蚌する必芁がありたす。



最埌に、高レベルの特暩を考えるず、カヌネルを保護するこずが重芁です。すべおのコヌドベヌスには異なる特性ず機胜があるため、それらの脆匱性の可胜性は異なりたす。ここでの䞻な基準は、安定性ずパフォヌマンスです。ナヌザヌの䜜業を劚げない効果的なセキュリティ察策のみを䜿甚しおください。したがっお、保護を匷化するための最適な戊略を遞択する前に、カヌネルに関連するすべおの利甚可胜なデヌタを泚意深く分析したす。

デヌタ䞻導のアプロヌチは、具䜓的な結果をもたらしたした。2015幎にStagefrightの脆匱性が発芋された埌、 Androidメディアプラットフォヌムにおける他の倚数の重倧な脆匱性の報告を受け始めたした  。問題を耇雑にするために、それらの倚くはリモヌトアクセス可胜でした。我々が行った  アンドロむドヌガヌシステムの倧芏暡な分解をし、  マルチメディアコンポヌネントの脆匱性の定着を促進したした。これらの倉曎のおかげで、2020幎には、むンタヌネット経由でアクセスできるマルチメディアプラットフォヌムの重倧な脆匱性の報告はありたせんでした。



展開の決定方法



圓然のこずながら、最も効果的な攻撃防止ツヌルに焊点を圓おるこずは理にかなっおいたす。それらを特定するために、各ツヌルがパフォヌマンスにどのように圱響するか、ツヌルを展開しおサポヌトするために必芁な䜜業量、およびシステムの安定性に悪圱響を䞎えるかどうかを調べたす。



パフォヌマンス



攻撃防止ツヌルを遞択するずきは、それがデバむスのパフォヌマンスにどのように圱響するかを理解する必芁がありたす。䞀郚のコンポヌネントたたはシステム党䜓が負荷を凊理できない堎合、バッテリヌの寿呜ず党䜓的なパフォヌマンスが䜎䞋する可胜性がありたす。これは、セキュリティを匷化する必芁がある゚ントリヌレベルのデバむスに特に圓おはたりたす。したがっお、デバむスのパフォヌマンスに圱響を䞎えない最も効果的な゜リュヌションを優先したす。



パフォヌマンスを評䟡するずきは、プロセッサ時間だけでなく、メモリ䜿甚量、コヌド長、バッテリ寿呜、およびむンタヌフェむスのフリヌズのケヌスにも泚意を払い  たす。..。ツヌルがAndroid゚コシステム党䜓で適切に機胜しおいるこずを確認するには、リストされおいるパラメヌタヌを゚ントリヌレベルのデバむスでテストするこずが特に重芁です。



どのコンポヌネントに保護察策を適甚するかは非垞に重芁です。たずえば、バむンディングはプロセス間通信に最も䞀般的に䜿甚されたす。したがっお、過床の負荷は即座にデバむスの動䜜に圱響を䞎えたす。元のレヌトでフレヌムのみを凊理するメディアプレヌダヌの堎合、状況は異なりたす。ビデオ速床が衚瀺速床よりもはるかに速い堎合、远加の負荷はそれほど重芁ではありたせん。



ベンチマヌクを䜿甚しお、特定の゜リュヌションのパフォヌマンスぞの圱響を刀断したす。コンポヌネントのベンチマヌク結果がない堎合は、たずえば、圱響を受けるコヌデックを呌び出しおメディアファむルをデコヌドするこずにより、ベンチマヌク結果を取埗する必芁がありたす。テストで蚱容できない負荷が瀺された堎合、いく぀かのオプションがありたす。



  • パフォヌマンスに倧きな圱響を䞎える機胜の攻撃防止を遞択的に無効にしたす。通垞、実行時にリ゜ヌスを消費する関数はごくわずかです。それらに攻撃軜枛を適甚しないこずで、パフォヌマンスを維持し、セキュリティぞの圱響を最倧化できたす。  ã“れは、メディアコヌデックの1぀に察するこのアプロヌチの䟋です。リスクを排陀するために、前述の機胜に゚ラヌがないか事前に確認する必芁がありたす。
  • 攻撃防止の䜿甚を最適化したす。倚くの堎合、これにはコンパむラの倉曎が必芁です。たずえば、私たちのチヌムが䜿甚しおに切り替え  æ•Žæ•° ã‚ªãƒŒãƒãƒŒãƒ•ãƒ­ãƒŒã® æ¶ˆæ¯’ã‚„ å¢ƒç•Œ æ¶ˆæ¯’を。
  • Scudoに組み蟌たれおいるヒヌプの埩元力など、䞀郚の攻撃軜枛オプションは、  ãƒ‘フォヌマンスを向䞊させるために調敎できたす。


これらの改善の倚くは、LLVM蚭蚈の倉曎を必芁ずしたす。その結果、Androidプラットフォヌムだけでなく、LLVMコミュニティの他のメンバヌも勝ちたす。



展開ずサポヌト



攻撃防止ツヌルを遞択するずきは、セキュリティずパフォヌマンスの考慮事項だけでなく、展開ず長期的なサポヌトのコストも考慮する必芁がありたす。



システムの安定運甚に察するセキュリティ察策の圱響



特定の攻撃防止ツヌルを誀っおトリガヌする可胜性があるかどうかを理解するこずが重芁です。たずえば、Boundsサニタむザヌが゚ラヌをスロヌした堎合、それは間違いなく拒吊されたアクセスです䜿甚されおいない可胜性がありたす。敎数オヌバヌフロヌサニタむザヌの堎合、敎数オヌバヌフロヌは完党に正垞で無害なプロセスであるこずが倚いため、誀怜知が発生する可胜性がありたす。



したがっお、攻撃防止ツヌルがシステムの安定性に䞎える圱響を考慮するこずが重芁です。誀怜知があったか、実際のセキュリティ脅嚁があったかは関係ありたせん。いずれにせよ、ナヌザヌは䞍䟿を感じたす。ここでも、どのコンポヌネントに1぀たたは別のセキュリティ察策を䜿甚する必芁があるかを明確に理解する必芁があるこずに泚意しおください。䞀郚のコンポヌネントの障害は、システムの安定性に倧きな圱響を䞎えるためです。攻撃防止がメディアコヌデックをクラッシュさせた堎合、ビデオは単に再生を停止したす。ただし、プロセスで゚ラヌが発生した堎合  netd



 ã‚¢ãƒƒãƒ—デヌトをむンストヌルするず、デバむスの電源が入らなくなる堎合がありたす。誀怜知によっお䞀郚の攻撃防止ツヌルで問題が発生しない堎合でもたずえば、Boundsサニタむザヌの堎合のように、デバむスが安定しおいるこずを確認するために広範なテストを実斜しおいたす。たずえば、バむアス゚ラヌが1぀でも正垞にクラッシュしない可胜性があり、Boundsサニタむザヌがプロセスを䞭断しおシステムの安定性を損ないたす。



たた、攻撃防止ツヌルで無効にできるすべおのコンポヌネントを事前に特定できるかどうかを理解するこずも重芁です。たずえば、敎数オヌバヌフロヌサニタむザヌの堎合、どの敎数オヌバヌフロヌが意図的蚱可であり、どの敎数オヌバヌフロヌが脆匱性を匕き起こす可胜性があるかを刀断するこずが難しいため、広範なテストを行わずにリスクを予枬するこずは非垞に困難です。



サポヌト



攻撃防止ツヌルの展開で起こりうる問題だけでなく、長期的なサポヌトの詳现も考慮する必芁がありたす。ツヌルを既存のシステムず統合し、アクティブ化しおデバッグし、デバむスに展開しおから、起動埌にサヌビスを提䟛するのにかかる時間を芋積もりたす。 SELinuxテクノロゞヌは良い䟋です。䞀連のルヌルを䜜成するには、倚くの時間ず劎力がかかりたす。たた、このセットは、コヌドの倉曎や個々の機胜の远加たたは削陀に関係なく、䜕幎も維持する必芁がありたす。



攻撃防止ツヌルが安定性に䞎える圱響を最小限に抑え、開発者が必芁なすべおの情報を入手できるように努めおいたす。これらの目暙を達成するために、珟圚のアルゎリズムを改善しお誀怜知の数を枛らし、source.android.comでドキュメントを公開しおいたす  。障害発生時のデバッグを容易にするこずで、開発者のメンテナンス負担を軜枛できたす。たずえば、UBSanサニタむザヌのバグを芋぀けやすくするために、 ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§UBSanの最小ランタむムサポヌトをAndroidビルドシステムに远加したした  。最初に最小実行時間が  远加されたした ç‰¹ã«ã“の目的のための他のGoogle開発者。敎数オヌバヌフロヌサニタむザヌが原因でプログラムがクラッシュした堎合、次のスニペットがSIGABRT゚ラヌメッセヌゞに远加されたす。



Abort message: 'ubsan: sub-overflow' 
      
      





このメッセヌゞを芋た埌、開発者は、障害に関する情報を出力するために蚺断モヌドを有効にする必芁があるこずを理解し  たす。



frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp:2188:32: runtime error: unsigned integer overflow: 0 - 1 cannot be represented in type 'size_t' (aka 'unsigned long')
      
      





同時に、SELinuxにはaudit2allowツヌルがあり、特定のブロックされた操䜜を蚱可するルヌルを提案できたす。



adb logcat -d | audit2allow -p policy
 #============= rmt ==============
 allow rmt kmem_device:chr_file { read write };
      
      





audit2allowが垞に正しいオプションを提案するずは限りたせんが、SELinuxを初めお䜿甚する開発者にずっおは非垞に圹立ちたす。



結論



Androidがリリヌスされるたびに、゚コシステム党䜓を保護する新しいツヌルが提䟛され、必芁なパフォヌマンスず安定性が確保されたす。これにはデヌタ分析が重芁な圹割を果たしたす。この蚘事が、新しい攻撃防止ツヌルの実装の課題ずその察凊方法をよりよく理解するのに圹立぀こずを願っおいたす。






同僚ず䜜者に感謝したすKevin Deus、Joel Galenson、Billy Lau、IvanLozano-Androidのセキュリティずプラむバシヌの専門家。この蚘事の䜜成に協力しおくれたZviadKardavaずJeffVan DerStupに特に感謝したす。



All Articles