GoogleがAndroidカーネルのセキュリティメカニズムを改善

Androidカーネルの大部分がLinuxカーネルに基づいており、セキュリティモデルを繰り返していることは周知の事実です。 Linuxや他のデスクトップオペレーティングシステムの場合と同様に、Androidはアプリケーションに閉じた仮想アドレススペースを提供します。これにより、アプリケーション間でリソースを効率的に分散し、セキュリティを管理できます。 Androidは、アプリケーションの脆弱性の悪用を防ぐDEPおよびASLRセキュリティテクノロジーも備えています。 サンドボックスのメカニズムと権限により、実行中のアプリケーションは、対象のデータとリソースにのみアクセスできることが保証されます。







Android開発者は最近、アドレス空間で動作し、簡単なアプリケーションにはアクセスできないカーネルコンポーネントの保護対策に取り組んでいると発表しました。 今年公開されたAndroidセキュリティ速報は、カーネルモードでのアプリケーションのコード実行を可能にするカーネルお​​よびドライバーのLPE脆弱性を繰り返し示しています。



著者によると、Androidの新しいバージョンはカーネルモードでDEPテクノロジーを提供し、LPEの脆弱性の悪用とそこへのシェルコードの配置を複雑にします。 このような手法は、セグメンテーション、つまりカーネルメモリを特別なセクションに分割し、それらのパーミッションを設定することにより実行されます。 コードの保存を目的としたセクションは読み取り専用および読み取り専用としてマークされ、データセクションはNX実行禁止としてマークされます。



この機能は、カーネルメモリを論理セクションに分割し、各セクションに制限的なページアクセス許可を設定します。 コードは読み取り専用としてマークされ、実行されます。 データセクションは実行不可としてマークされ、読み取り専用セクションと読み取り/書き込みセクションにさらに分割されます。


別のセキュリティ機能は、Intelデスクトップマイクロプロセッサで使用されるスーパーバイザーモードアクセス防止(SMAP)セキュリティ対策に似ており、カーネルモードコードがアドレススペースのユーザー部分にアクセスすることを防ぎます。 Androidには、カーネルをそのようなメモリへの直接アクセスから隔離する制限的な手段が導入されています。



この機能は、カーネルがユーザー空間のメモリに直接アクセスするのを防ぐことにより、カーネルの保護を改善します。 これにより、特にCONFIG_DEBUG_RODATAが有効になっている場合、実行可能なカーネルメモリに対する攻撃者の制御が大幅に低下するため、多くの攻撃がより困難になります。


別の保護対策は、バッファオーバーフローなどのカーネルスタックのメモリに対する攻撃を防ぐことを目的としています。



その前身であるスタックプロテクター、スタックプロテクターストロングと同様に、スタックバッファーオーバーフローから保護しますが、元の唯一の保護された文字配列として、さらに多くの配列タイプをカバーします。 Stack-protector-strongはHan Shanによって実装され、gcc 4.9コンパイラに追加されました。


これらの保護対策は、メモリで実行されるAndroidカーネルに関連しています。新しい保護対策のもう1つのカテゴリは、攻撃面削減(ASR)と呼ばれます。つまり、攻撃クラス全体の正常な使用を即座に遮断する概念的な保護対策が含まれます。



ASRはデフォルトでデバイスのデバッグ機能を無効にしますが、これは以前はすべてのユーザーが利用できました。



カーネルのパフォーマンスシステムは、パフォーマンス測定のためのインフラストラクチャを提供し、カーネルとユーザー空間の両方のアプリケーションの分析に使用できます。 Perfは開発者にとって貴重なツールですが、大多数のAndroidユーザーにとって不要な攻撃対象領域を追加します。 Android Nougatでは、perfへのアクセスはデフォルトでブロックされます。


ASRは、アプリケーションがioctl()システムコールを介してデバイス上のIOCTL操作にアクセスすることも制限します。 ioctlはある種の脆弱性を悪用するために使用されるため、ASRはアプリケーションが使用を許可されるIOCTL操作のホワイトリストの概念を導入します。



Android Nougatでは、ソケットioctlコマンドの小さなホワイトリストのみがアプリケーションで利用できます。 一部のデバイスでは、アプリケーションのGPU ioctlへのアクセスも同様に制限されています。


ASRはSeccompと呼ばれる新しい機能を導入します。これは、サンドボックスと呼ばれるアプリケーション分離メカニズムの追加のセキュリティ設定です。 Seccompを使用すると、Androidで実行されているアプリケーションが特定のシステムコールを実行したり、特別なフィルターを使用して特定の引数を渡したりすることを制限できます。 この関数は、 指定 win32k syscallsフィルタリング関数に似ていることは注目に値します。この関数は、このOSの大きな更新とともに来週Windows 10ユーザーに表示されます。



Seccompは、プロセスが構成可能なフィルターを使用して使用可能なsyscallsおよびsyscall引数を制限できる追加のサンドボックスメカニズムを提供します。 syscallの可用性を制限すると、カーネルの露出した攻撃対象領域を劇的に削減できます。 seccompがLollipopのNexusデバイスに初めて導入されて以来、Androidエコシステム全体での可用性は着実に向上しています。 Android Nougatでは、すべてのデバイスでseccompサポートが必要です。 Android Nougatでは、メディア強化の一環として、mediaextractorおよびmediacodecプロセスでseccompを使用しています。


これらのセキュリティ機能は、Android 7.0(Nougat)の新しいリリースに表示されるはずです。



画像

安全である。



All Articles