Hello there, ('ω')ノ
💡 インジェクション攻撃とは?
インジェクション(injection)とは、アプリがユーザーからの入力をそのまま信じて処理することで、 攻撃者に本来意図していない命令やコードを注入(injection)されてしまう現象です。
たとえば、SQL文やコマンド、HTML、JavaScriptなどの入力文字列に“悪意ある操作”を混ぜ込むことで、アプリの挙動を乗っ取ったり、データを盗んだりすることができます。
💥 代表的なインジェクションの種類(Android関連)
| 種類 | 説明 | 対象 |
|---|---|---|
| SQLインジェクション | 入力された文字列がSQLクエリの一部として扱われ、意図しないデータベース操作が行われる | SQLiteなど |
| コマンドインジェクション | OSのコマンドに文字列がそのまま使われ、任意の命令を実行される | Runtime.getRuntime().exec() など |
| JavaScriptインジェクション(XSS) | WebView内でJavaScriptコードが実行されてしまう | WebView、HTML表示機能 |
| Intentインジェクション | インテントに不正なデータを入れてアプリを誤作動させる | Activity、Broadcast、Service |
🔍 例:SQLインジェクションの具体例
たとえば以下のようなコードがあるとします:
String query = "SELECT * FROM users WHERE name = '" + inputName + "'";
ここで、inputName に次のような文字列が入力されると…
' OR '1'='1
最終的なSQLはこうなります:
SELECT * FROM users WHERE name = '' OR '1'='1'
→ これですべてのユーザー情報が抽出されてしまう可能性があります。
🧪 Androidアプリでの診断ポイント
✅ 1. ソースコードまたはMobSFでSQL/コマンドの組み立てを確認
db.rawQuery("SELECT * FROM users WHERE id = " + userInput, null);
このように文字列結合でSQLを構築している場合、インジェクションのリスクが極めて高いです。
MobSFでは「SQL Injection」や「Command Injection」の可能性がある箇所を検出できます。
✅ 2. WebViewで不正なJavaScript実行が可能か?
webView.loadData(userInput, "text/html", "UTF-8");
このコードで、userInput に <script>alert(1)</script> を入れると、JavaScriptが実行されてしまう=XSSの発生です。
✅ 3. インテントで異常なデータ注入ができるか?
adb shell am start -a android.intent.action.VIEW -d "malicious://data"
→ 受け取る側がgetData()を検証せず処理すると、想定外の動作を引き起こすことも
🔐 なぜインジェクションが起きるのか?
主な原因は、**「信頼できない入力を検証せずそのまま使ってしまうこと」**です。
| 原因 | 結果 |
|---|---|
| 入力値のバリデーション不足 | 特殊な構文が混ざっても通ってしまう |
| プレースホルダー未使用 | SQLやコマンドが直接構築される |
| WebViewの設定ミス | スクリプト実行を許してしまう |
| 入力の想定範囲が甘い | 異常なフォーマットでも処理してしまう |
🛡️ 対策まとめ
| 対策 | 内容 |
|---|---|
| プレースホルダー使用 | ? を使った SQL構文で PreparedStatement を活用 |
| 入力値の検証・サニタイズ | 数値・文字列の形式を厳格にチェック、HTMLタグの除去 |
| WebViewのスクリプト無効化 | webSettings.setJavaScriptEnabled(false) |
| コマンドの分離 | exec を使うなら引数は配列で明示 |
| エラーメッセージを最小化 | 攻撃者へのヒントを減らす |
✅ まとめ
- インジェクション攻撃とは、信頼できない入力がアプリ内部に“注入”されて悪さをする攻撃
- Androidアプリでは特に、SQL・コマンド・WebView・Intentの4つに注意
- 診断では、コード中の文字列結合処理、Web表示、インテント受信処理などを重点的にチェック
- 対策のキーワードは「バリデーション」「サニタイズ」「分離」「最小化」!
Best regards, (^^ゞ