ブログ

FFRI BLOG

2014-09-03 Monthly Research 「SELinux再入門-Android編-

Android 4.4では、一部のシステムサービスがSELinuxのenforcingモードで保護されています。今後、このenforcingモードの対象が拡大し、3rd-partyのアプリケーションも例外なくenforcingで動作する方向で開発が進められています。いわゆるサーバ用途では、積極的にdisabled にされてしまうSELinuxですが、Androidではenforcingが当たり前になっていくでしょう。

今月のMonthly Researchでは、SELinuxの応用編その1ということで、AndroidにおけるSELinux利用についてまとめました。

まず最初に、2012年に公開されたSE Androidと、Android Open Source Project(AOSP)との関連、そして現行のAndroidにおける利用状況などを簡単に説明しています。次に、本来はカーネルレベルのセキュリティモジュールとして実装されているSELinuxと、Androidプラットフォームのセキュリティギャップを埋めるためのMidddleware MAC(MMAC)について紹介しています。Androidミドルウェアに対してSELinuxのセキュリティ機能を挿入するMMACでは、従来のLinuxとはまた違った形のアクセス制御を記述することが可能になります。これらMMACの機能は現在もアグレッシブに実装が進められており、Android 4.3以降を対象とした、MMACの最新の実装についても解説しています。

MMAC

MMACは、上の図で示している通り、本来はSELinuxの範囲外であるユーザーランドにもアクセス制御メカニズムを挿入しています。従来、Linuxシステムにおいては、ユーザーランドアプリケーションは容易に侵害されうるため、アクセス制御メカニズムは極力カーネルで行うことが不文律になっていました。しかし、Androidではアプリケーション間の隔離によってある程度侵害に対しても対抗できることと、カーネルで捉えられる情報とアプリにかけたい制限の対応付けが難しいことから、MMACのようなミドルウェアレベルでのアクセス制御も必要である、という流れになっているようです。

カーネルとアプリケーションプラットフォームのセマンティックギャップ(意味論の差)が非常に大きいことは、LinuxベースのモバイルアプリケーションプラットフォームやPaaSのようなサーバアプリケーションプラットフォームでも同様の問題を抱えています。今後、SELinuxのセキュリティ機構が言語のランタイムに入っていくということも、十分に考えられます。実際に、AOSPでは、Androidのruntime(dalvik, ART)にSELinuxとの連携機能が入っています。

このような状況から、まず、Android端末の開発者にとって、SELinuxを用いたSE for Androidの機能の理解は必要不可欠になってきていると感じました。

また、Androidアプリ開発者にとっても、今後、アプリの設定に関係なくSELinuxからパーミッションが剥奪されたり、intentが自由にできなくなるというような影響を受ける可能性もあります。今回のリサーチが、AndroidでもSELinuxに悩まされることになる方々の一助になれば幸いです。


Monthly Researchのダウンロードはこちら


関連記事

Monthly Research 「アンチウイルスの検知率の一例と未検知検体の類似度」

Monthly Research 「SELinux再入門(基礎編)」

Monthly Research 「実行環境に応じて動作を変えるマルウェアに関する調査」

pagetop