Shikata Ga Nai

Private? There is no such things.

第5回:Androidアーキテクチャ図を読み解いてみよう

Hello there, ('ω')ノ

🧱 Androidは“4階建てのビル”のような構造

Androidシステムは、以下のような「階層構造(アーキテクチャ)」で成り立っています。

┌────────────────────────────┐
│ アプリケーション層(Apps)       ← 私たちが操作するアプリたち       │
├────────────────────────────┤
│ アプリケーションフレームワーク層  ← アプリが使う便利な道具箱         │
├────────────────────────────┤
│ ライブラリ / Androidランタイム層 ← 共通の処理部品と実行環境         │
├────────────────────────────┤
│ Linuxカーネル層                 ← ハードを制御するOSの核           │
└────────────────────────────┘

では、それぞれの層で「何が動いているのか」を順に見ていきましょう。


① アプリケーション層:ユーザーが触れる世界

  • ホーム画面
  • LINEや地図アプリ、業務アプリ

ユーザーが直接操作する部分。ここで動くアプリは、下の層の機能を呼び出して使っています。 診断では、この層にあるアプリがどんな命令を出しているかを重点的に調べます。


② アプリケーションフレームワーク層:アプリの裏方

ここには、アプリが使うための共通機能(API)がそろっています。

たとえば:

機能モジュール 説明
Activity Manager 画面の切り替えやアプリのライフサイクル管理
Content Provider データ共有(DBやファイル)
Location Manager 位置情報取得
Notification Manager 通知機能の管理
Package Manager アプリのインストールや権限確認

診断では、「アプリがこの層のAPIをどう使っているか?」「余計なデータを他アプリに渡していないか?」といった視点で確認します。


③ ライブラリ / ランタイム層:部品と実行環境

この層は、アプリの動作に必要な共通ライブラリ(C/C++など)と、Java/Kotlinで書かれたコードを実行するAndroidランタイム(ART)で構成されます。

  • SSL通信やSQLite、画像処理などの部品はここに
  • Javaバイトコードをネイティブで実行するのもこの層の役割

診断者にとっては、「古いライブラリを使っていないか?」「脆弱なランタイム関数を呼び出していないか?」をチェックする重要ポイントになります。


④ Linuxカーネル層:スマホの司令塔

Androidの最下層は、Linuxカーネル。 この部分が、実際のハードウェア(メモリ、CPU、Wi-Fi、カメラなど)とのやり取りを担当しています。

カーネルがあるからこそ、スマホ全体が安定して動いています。

セキュリティ診断の視点では、以下の点が重要です:

  • 各アプリに割り振られたユーザーID(UID)の分離が守られているか
  • アプリがカーネル機能を直接呼び出していないか(Root取得など)
  • 古いカーネルや未修正の脆弱性が存在しないか

🧠 アーキテクチャ図を使って脆弱性の位置を考える

診断では、「どの層に脆弱性があるのか?」を理解することで、調査範囲や使用するツールが変わってきます

よくある脆弱性 使用ツール例
アプリ層 Exported設定、誤った権限 MobSF, Drozer
フレームワーク層 Content Providerのミス Drozer, ADB
ライブラリ層 暗号化ライブラリの誤用 jadx, strings
カーネル層 古い脆弱性、Root奪取 Frida, Rooted実機

✅ まとめ

  • Androidは4つの層で構成されており、それぞれ明確な役割がある
  • アーキテクチャ図を理解することで、診断時の「着目点」が明確になる
  • アプリは上層のAPIを通じて下の層とやり取りしている(直接アクセスはしない)
  • 診断対象の脆弱性が“どの層にあるか”を意識することで、正確な調査ができる

Best regards, (^^ゞ