Shikata Ga Nai

Private? There is no such things.

第6回:脆弱性とは何か?よくあるパターンを知る

Hello there, ('ω')ノ

🛠 そもそも「脆弱性」とは?

✅ 脆弱性(ぜいじゃくせい)とは:

プログラムやシステムに存在する「予期せぬすき間」や「ミスのある設計・設定」のこと。

このすき間を使って、悪意のある第三者(攻撃者)は次のようなことができる可能性があります:

  • アプリの内部データに不正アクセス
  • 他人になりすました操作
  • スマホや会社のシステム全体への侵入
  • 情報の漏洩、改ざん、破壊

たとえるなら、「家のカギを閉めたと思ったら、裏口が開けっぱなしだった」状態ですね。


🔍 Androidアプリに多い脆弱性のパターン

では、実際のアプリではどのようなミスが「脆弱性」として狙われやすいのでしょうか? ここでは、診断の現場でよく見かけるパターンを5つに絞って紹介します。


① Exported設定のミス(不適切な機能公開)

Androidアプリの「Activity」「Service」「BroadcastReceiver」などは、本来他のアプリから呼び出されないように設定する必要があります。

ところが、次のような設定があると…

<activity android:name=".SecretActivity" android:exported="true" />

→ 他のアプリがこのアクティビティを勝手に起動できる!

つまり、本来見せてはいけない機能が、他人に使われてしまう危険性があります。


② Content Providerの設定ミス(データベースの無防備公開)

Androidアプリの内部にあるSQLiteデータベースなどを共有用に公開することがありますが、設定ミスで誰でも読み書きできる状態になっている場合があります。

例:

<provider android:authorities="com.example.app.provider" android:exported="true" />

→ 他のアプリが中のデータを読み取れる/削除できる


③ 不適切なファイル保存(外部ストレージ利用)

ユーザー情報や社内データなどを**外部ストレージ(SDカード相当)**に保存してしまうと、他のアプリから自由に読めてしまう可能性があります。

外部保存は便利ですが、機密情報は保存してはいけないルールがあります。


④ WebViewの取り扱いミス(JavaScriptの実行)

アプリ内でWebページを表示できる「WebView」を使う際、JavaScriptがONになっていてかつ外部URLを読み込んでいると、攻撃者が仕込んだコードが実行される危険性があります。

特に次のようなコードは注意:

webView.getSettings().setJavaScriptEnabled(true);

webView.loadUrl("http://攻撃者のサイト");

→ アプリが“乗っ取られる入口”になることも。


⑤ ハードコーディングされた秘密情報(ソースコード漏洩)

開発者がうっかり、アプリ内に以下のような情報を「直接書いてしまう」ケース。

String API_KEY = "abcd1234-secret-key";

これが残っていると、通信先のAPIをなりすましで使われたり、社内サーバーに不正アクセスされる恐れがあります。

MobSFやjadxなどのツールを使えば、これらの情報は比較的簡単に抽出できます。


💣 脆弱性があると何が起きる?

  • 顧客の個人情報が漏れる
  • アプリが意図しない動作をする(勝手に送信、表示など)
  • 不正請求や成りすまし行為が可能になる
  • 社内データが漏洩・改ざんされる
  • アプリストアから削除される(審査不合格)

つまり、会社の信用、ユーザーの安全、法的なリスクすべてに影響してしまいます。


✅ まとめ

  • 脆弱性とは、「セキュリティのすき間や設定ミス」のこと
  • Androidアプリには、設定ミスや機能の公開が原因で脆弱性が発生することがある
  • よくあるパターンを知っておくことで、診断の精度が上がる
  • 情報漏洩や操作乗っ取りなど、実際に大きな事故につながるケースもある

Best regards, (^^ゞ