以下の内容はhttps://cysec148.hatenablog.com/entry/2025/08/28/140502より取得しました。


第46回:メモリ破壊の基礎知識(Buffer Overflowなど)

Hello there, ('ω')ノ

🧠 メモリ破壊とは?

メモリ破壊(Memory Corruption)とは、アプリが本来書き込んではいけない領域にデータを書き込んでしまうことによって、 データの異常や意図しないコード実行が起こる状態を指します。

最も代表的なものが:

  • バッファオーバーフロー(Buffer Overflow)
  • Use After Free(解放後使用)
  • Heap Overflow(ヒープオーバーフロー)
  • Format String Attack(フォーマット文字列攻撃)

などです。


💣 Buffer Overflow(バッファオーバーフロー)とは?

簡単に言うと、「用意された箱より大きなデータを詰め込んで、隣の箱まで壊してしまう」ことです。

📦 例:C言語の危険なコード

char name[8];
strcpy(name, "1234567890ABCDEF");

name という配列は8文字までしか入らないのに、16文字も入れてしまうと、 その隣にある別の変数や、戻り先アドレスまで書き換えられる可能性があります。

結果として、任意のコードが実行される「コードインジェクション」に繋がるのです。


📱 Androidでの発生ポイント

AndroidアプリのJavaコードでは基本的にメモリ破壊は起きませんが、 NDK(Native Development Kit)を使ってC/C++のコードを含むアプリでは以下のケースで発生します:

発生場所 具体例
ネイティブライブラリ(.so) 画像処理・音声解析・暗号処理などでよく使われる
JNI呼び出し JavaとC/C++をつなぐ部分で境界チェックをミス
外部ライブラリとの連携 OpenSSLやlibpngなど脆弱性が報告されているライブラリの古いバージョン

🧪 実例:脆弱なコードと悪用シナリオ

脆弱なCコード(JNIで呼ばれる関数)

void process_input(char* userInput) {
  char buffer[64];
  strcpy(buffer, userInput); // 入力チェックなし!
}

この関数に長すぎる文字列を送ると、スタックの中身(関数の戻り先など)を上書きできてしまう可能性があります。

悪用結果

  • アプリがクラッシュする(DoS)
  • 任意のコードが実行される(RCE)
  • ルート権限の奪取に繋がる(特権昇格)

🔍 診断方法

✅ 1. MobSFやapktoolで.soファイルの存在を確認

アプリにネイティブライブラリが含まれているかどうか確認:

  • lib/armeabi-v7a/xxx.so
  • lib/x86/xxx.so などのファイルがAPKにあるか?

✅ 2. GhidraやIDA Proで解析

.soファイルを逆コンパイルし、strcpy、memcpy、sprintfなど危険な関数の使用箇所を調査。

✅ 3. 動的診断(fuzzing)

  • ネイティブ関数に長すぎるデータやランダムなバイト列を送信
  • 異常終了やメモリ破壊を起こすかを観察

※FridaやValgrindなどの動的解析ツールが有効です。


🛡️ 対策方法

対策 内容
安全な関数を使う strcpystrncpy, sprintfsnprintf
境界チェックを徹底 入力長のチェックを必ず行う
コンパイラレベルの保護を使う Stack Canary, PIE, NX Bit などを有効に
ASLR, DEPの利用 実行ファイルにアドレスランダム化と実行保護を設定
C/C++での書き直しを最小限に Java/Kotlinでできる処理はネイティブにしない

🧠 実際にあった脆弱性の例

  • Stagefright(2015年):Androidのメディア処理ライブラリに存在したメモリ破壊バグ。MMS受信だけでリモートコード実行が可能になった。
  • OpenSSL Heartbleed(2014年):ライブラリのバグにより、隣のメモリ領域を読み取れてしまい、機密情報が漏洩した。

✅ まとめ

  • メモリ破壊は、ネイティブコードを含むアプリでは常に警戒すべきリスク
  • 特にバッファオーバーフローは、不正コード実行に直結する深刻な脆弱性
  • 診断では、ネイティブ関数・危険な関数の使用・入力チェックの有無を確認する
  • 開発段階からの防御策(セーフAPI、ASLR、Stack Canaryなど)が重要

Best regards, (^^ゞ




以上の内容はhttps://cysec148.hatenablog.com/entry/2025/08/28/140502より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14