AndroidにおけるJNIグローバルリファレンスの脆弱性対策
AndroidにおけるJNIグローバル参照攻撃のリスクと防御策を検討する。
― 1 分で読む
Androidは今、一番人気のあるモバイルOSだよ。この人気だから、いろんな攻撃の標的になっちゃうんだ。特に、AndroidがJava Native Interface (JNI) グローバルリファレンス (JGR) を扱う方法に関連した攻撃があるんだ。これらのリファレンスはJavaとネイティブコードのやりとりを管理するために重要なんだけど、操作されると問題が起きる可能性がある。この文章では、AndroidにおけるJNIグローバルリファレンスの脆弱性、どうやってその脆弱性が悪用されるか、そしてそうした攻撃から守る方法について焦点を当てるよ。
JNIグローバルリファレンスって何?
JNIはJavaコードが他のプログラミング言語で書かれたコード(主にCやC++)とやりとりできるフレームワークなんだ。JNIでは、グローバルリファレンスはJavaオブジェクトへのリンクを維持するために使われる。ローカルリファレンスとは違って、グローバルリファレンスは明示的に削除されるまでメモリに残るから、削除されずにたくさん作られると、メモリを消費して最終的にシステムがクラッシュしちゃうんだ。
脆弱性: JGRE攻撃
Javaグローバルリファレンス枯渇 (JGRE) 攻撃っていう特定の攻撃があって、アプリがグローバルリファレンスを連続して作り続けると起こるんだ。この攻撃は、システムがメモリ不足になってクラッシュしたり再起動を強いられる denial-of-service (DoS) 状態を引き起こすことがあるよ。
JGRE攻撃の仕組み
JGRE攻撃では、悪意のあるアプリが脆弱なシステムサービスをターゲットにするんだ。これらのサービスは他のアプリから呼び出される特定のAPI(アプリケーションプログラミングインターフェース)を公開していて、脆弱なAPIが呼ばれる度にグローバルリファレンスを作っちゃうと、悪意のあるアプリがそのAPIを何度も呼ぶことで大量のグローバルリファレンスを生成できる。最終的に、これらのリファレンスのために予約されたシステムのメモリが枯渇して、クラッシュや再起動を引き起こすんだ。
例えば、悪意のあるアプリが重要なサービスをターゲットにしたら、そのサービスをクラッシュさせるのに十分なグローバルリファレンスを作れるかもしれない。こうした攻撃は特別な権限がなくても行えることが多く、さらに危険なんだ。
過去の防御策
Androidを作ってるGoogleは、この問題を認識して、JGRE攻撃に関連するリスクを減らすためにいろんなパッチを施してきたんだ。これらのパッチには以下が含まれてるよ:
脆弱なインターフェースの削除: Googleは脆弱だと判明したAPIを完全に取り除いちゃった。
権限の引き上げ: 一部のAPIでは、アクセスするために必要な権限を引き上げて、悪意のあるアプリが利用しづらくしてる。
しきい値の制限: 新しいAndroidのバージョンでは、グローバルリファレンスを作りすぎるのを防ぐチェックが実装されてて、メモリの使用量を制御するために上限が設けられてる。
これらの対策があっても、システムのアップデートやAndroidの動作の変化によって新たな脆弱性が見つかってて、前の防御策では不十分かもしれないって懸念があるんだ。
新たな脆弱性の発見
最近の研究で、最新バージョンのAndroidでもグローバルリファレンスに関連する脆弱なAPIがまだ存在してることがわかったんだ。例えば、Android 10にはまだ悪用可能な隠れた脆弱性がいくつかあって、JGREの脅威は続いてるって確認されたよ。
脆弱性の発見
研究では次のことがわかった:
- Android 10では、12のシステムサービスに21の脆弱性が含まれてた。
- その中には、権限がいらずに悪用できるものもあった。
- 以前の防御策は、これらの脆弱性が悪用される方法を十分にカバーしてなかった。
これは、セキュリティを強化する努力はされてるけど、悪意のある行為者に悪用される隙間が残ってることを示してるんだ。
JGREAnalyzerの役割
これらの脆弱性に対応するために、JGREAnalyzerっていうツールが開発されたよ。このツールは、Androidのシステムサービスのコードを分析して、JGRE攻撃に脆弱なサービスやAPIを体系的に検出するんだ。
JGREAnalyzerの使い方
静的分析: この段階では、コードを実行せずにレビューするよ。JGREAnalyzerはソースコードをスキャンして、グローバルリファレンスがどのように作成されて使われているかを調べて潜在的な脆弱性を特定する。
動的分析: 潜在的な脆弱性が特定されたら、ツールが管理された環境でこれらの脆弱性をテストするよ。実際のシナリオで悪用できるかを見るために、小さなテストアプリを自動生成するんだ。
JGREAnalyzerの発見
JGREAnalyzerを使って、さまざまなAndroidバージョンでいくつかの脆弱性が特定された:
- 総計277の脆弱性が報告された。
- ほとんどの脆弱性は、過剰なグローバルリファレンスを作り出してシステムクラッシュを引き起こす可能性があった。
- 既存の防御策がどれだけ効果的か疑問が呈され、多くの脆弱性がまだ悪用可能だったことがわかった。
新たな防御策の提案
継続的な脆弱性を考えると、新しい防御戦略が必要だよ。提案されている防御策の一つがJGRE Purgerだ。
JGRE Purgerって何?
JGRE Purgerは、Androidフレームワーク内でグローバルリファレンスの作成を監視して制限するように設計されてる。アプローチは、グローバルリファレンスを作成する関数をラップして問題の出所で制御メカニズムを実施することなんだ。
JGRE Purgerの利点
リアルタイムモニタリング: JGRE Purgerは、アプリが作成できるグローバルリファレンスの数を追跡して、クラッシュにつながる前に潜在的な悪用を検出できる。
しきい値制限: 作成されたグローバルリファレンスの数が設定された限界を超えた場合、システムはさらなる作成を拒否して、攻撃を未然に防ぐことができる。
互換性: この防御は柔軟に設計されていて、さまざまなAndroidバージョンで機能するから、いろんなデバイスに適してる。
結論
AndroidにおけるJNIグローバルリファレンスに関連する脆弱性は重要で、継続的なリスクをもたらしてる。Googleがシステム内の脆弱性を修正する努力をしても、Androidが進化するにつれて新たな問題が発生してる。JGREAnalyzerのようなツールは、これらの脆弱性を特定するために重要な役割を果たしていて、セキュリティの継続的な監視と改善が必要だって示してる。
ユーザーやデバイスをより良く保護するために、JGRE Purgerのような新たな防御戦略を実施する必要があるんだ。こうした措置があれば、悪意のあるアプリがこれらの脆弱性を悪用する脅威からAndroidエコシステムを安全に保つことができる。
技術が進化するにつれて、セキュリティへのアプローチも進化させて、ユーザーがスマホやアプリの利点を安心して享受できるようにしないといけないね。
タイトル: JNI Global References Are Still Vulnerable: Attacks and Defenses
概要: System services and resources in Android are accessed through IPC based mechanisms. Previous research has demonstrated that they are vulnerable to the denial-of-service attack (DoS attack). For instance, the JNI global reference (JGR), which is widely used by system services, can be exhausted to cause the system reboot (hence the name JGRE attack). Even though the Android team tries to fix the problem by enforcing security checks, we find that it is still possible to construct a JGR exhaustion DoS attack in the latest Android system. In this paper, we propose a new JGR exhaustion DoS attack, which is effective in different Android versions, including the latest one (i.e., Android 10). Specifically, we developed JGREAnalyzer, a tool that can systematically detect JGR vulnerable services APIs via a call graph analysis and a forwarding reachability analysis. We applied this tool to different Android versions and found multiple vulnerabilities. In particular, among 148 system services in Android 10, 12 of them have 21 vulnerabilities. Among them, 9 can be successfully exploited without any permissions. We further analyze the root cause of the vulnerabilities and propose a new defense to mitigate the JGRE attack by restricting resource consumption via global reference counting.
著者: Yi He, Yuan Zhou, Yacong Gu, Purui Su, Qi Li, Yajin Zhou, Yong Jiang
最終更新: 2024-05-01 00:00:00
言語: English
ソースURL: https://arxiv.org/abs/2405.00526
ソースPDF: https://arxiv.org/pdf/2405.00526
ライセンス: https://creativecommons.org/licenses/by/4.0/
変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。
オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。