RASP — とは何か、動作原理、リアルタイム保護

著者: IT Sectr 公開日: 2026-04-03 読了時間: 10 分

RASP(Runtime Application Self-Protection)は、アプリケーションに直接組み込まれ、ランタイムでその動作を分析して攻撃を検出するセキュリティ技術です。ファイアウォールやWAFとは異なり、RASPは内部から動作します。受信リクエストだけでなく、そのリクエストがコードによってどのように処理されているか(どの関数が呼び出され、どのデータがメモリから読み取られ、どのシステムコールが実行されているか)も認識します。OWASP Runtime Protection Project(2025)によると、RASPソリューションは攻撃の最大94%を脆弱なコードに到達する前にブロックします。RASPはインフラストラクチャの変更を必要としません — 必要なものはすべてアプリケーションプロセス内で動作します。

重要なポイント

  • RASP — アプリケーション内部で動作し、各呼び出しの実行コンテキストをリアルタイムで分析する組み込み型保護
  • 動作原理はコードインストルメンテーションに基づく:エージェントが重要な関数(exec、open、read、send)をインターセプトし、異常をチェックする
  • WAFとの違い — RASPはHTTPリクエストだけでなく、処理コンテキスト全体(コールスタック、変数値、メモリ状態)を認識する
  • モバイルRASPはランタイム整合性チェックにより、Frida、Xposed、JDWPデバッグ、エミュレータ、APK改ざんを検出する
  • RASPポリシーには、ブロック(クラッシュ)、サーバー通知付きログ記録、攻撃者を混乱させるための偽データ生成が含まれる

RASPとは?

Runtime Application Self-Protection(RASP)は、ビルド時またはランタイムエージェントを介してアプリケーションに統合されるセキュリティ技術です。RASPは実行中にアプリケーションの動作を分析し、コンテキスト(呼び出し元、渡されるデータ、スタックの状態)に基づいて攻撃をブロックする判断を下します。署名ベースのシステムとは異なり、RASPは既知の攻撃パターンを探すのではなく、期待されるコード実行シナリオから逸脱した異常な動作を検出します。

RASPの概念は2011年にGartnerによって形式化され、最初の商用実装は2014–2015年に登場しました。モバイルプラットフォームでは、2017年に市場が従来の難読化の不十分さを認識し、RASPが積極的に使用され始めました。MarketsandMarkets(2025)のレポートによると、RASPソリューション市場は28億USDで、年間成長率は24.5%です。RASPの導入は、支払いデータを処理するアプリケーションに対してOWASP Mobile Top 10およびPCI DSS 4.0標準で推奨されています。

RASPはインターセプションとアセスメントの2つのレベルで動作します。インターセプションとは、ビルド時または動的インストルメンテーションによるランタイムにコードに埋め込まれたフックを介したシステムコールおよびライブラリコールの傍受です。アセスメントとは、呼び出しコンテキストの分析(入力パラメータ、コールスタック、サンドボックス状態、デバッガの存在のチェック)です。判断は開発者が設定したセキュリティポリシーに基づいて行われます。ポリシーは厳格(ブロック)、ソフト(ログ)、または適応型(脅威レベルに応じて動作を変更)にすることができます。

RASPの仕組み:アーキテクチャとメカニズム

RASPエージェントのアーキテクチャは、インストルメンテーション層、アナライザ、ポリシーの3つのコンポーネントで構成されています。インストルメンテーション層はシステムコールとフレームワークコールをインターセプトします。アナライザは期待されるパターンに対してコンテキストをチェックします。ポリシーが応答を決定します。

コードインストルメンテーション

モバイルアプリケーションでは、コンパイル時インストルメンテーションが使用されます。ビルド時にバイトコードまたはネイティブコードが変更され、危険な呼び出しの前にチェックが挿入されます。RASPエージェントコンパイラは、エントリポイントFileOutputStream.write()、Runtime.exec()、Class.forName()、android.app.Activity.onStart()を変更します。Androidでは、Gradleプラグインを介したDEXバイトコード変換が使用され、iOSでは、ポストリンクスクリプトを介したMach-Oバイナリの変更が行われます。

コンテキスト分析

呼び出しをインターセプトする際、RASPは以下を分析します:呼び出し元クラスとメソッド(誰が呼び出しているか)、スタックトレース(呼び出しチェーン)、引数(渡されるデータ)、戻り値(何が返されるか)、タイムスタンプとスレッドID。異常は、例えばRuntime.exec()がUIスレッドやアプリケーションコードからではなく、非標準パスでJNI経由でロードされたライブラリから呼び出された場合に記録されます。または、FileOutputStream.write()が期待されるPNGヘッダーの代わりに実行可能なバイトコードを含むデータを受け取った場合も同様です。

応答ポリシー

RASPは3種類の応答をサポートしています:Block — 攻撃検出時にアプリケーションを強制終了、Log — アプリケーションを停止せずにインシデントの詳細をログ収集サーバーに送信、Deceive — 戻り値を偽の値に置き換えて攻撃者に誤ったデータを渡します。LogとDeceiveの組み合わせにより、検出の事実を明かさずに攻撃者に関する情報を収集できます。

java
// 例:Runtime.exec()呼び出しのRASPチェック
public class RASPAgent {
    public static Object onExecCalled(String command,
            StackTraceElement[] stack) {

        // 呼び出し元をチェック中
        String caller = stack[1].getClassName();

        // 呼び出しが自パッケージからのものでない場合 — 疑わしい
        if (!caller.startsWith("com.example.app")) {
            SecurityPolicy.reportIncident(
                "UNEXPECTED_EXEC", command, stack
            );
            return SecurityPolicy.getAction().execute(command);
        }

        // ブラックリストに対するコマンドのチェック
        String[] blocked = {"su", "frida", "ptrace", "/data/local"};
        for (String pattern : blocked) {
            if (command.contains(pattern)) {
                SecurityPolicy.reportIncident(
                    "BLOCKED_CMD", command, stack
                );
                return new Process(); // deceiving: 空のプロセス
            }
        }

        return null; // 実行を許可
    }
}

RASP vs WAFおよびその他のセキュリティツール

RASPはWeb Application Firewall(WAF)とよく比較されますが、基本的な違いは位置づけにあります。WAFはネットワーク境界に位置し、HTTPリクエストのみを分析します。RASPはアプリケーション内部で動作し、処理ロジックを認識します。

特性WAFRASP
位置ネットワーク境界アプリケーション内部
分析対象HTTPリクエストシステムコール、メモリ、スタック
暗号化トラフィックTLS復号化が必要復号化後に認識
モバイル攻撃認識不可(Frida、デバッグ)直接検出
誤検出高い(正規表現ルール)中程度(コンテキスト分析)
パフォーマンスへの影響最小限分析の深さに応じて3–7%

コードを読み取り不能にする難読化(ProGuard、DexGuard)とは異なり、RASPは攻撃の実行中に積極的に検出します。難読化は受動的な保護であり、攻撃者がリバースエンジニアリングに十分な時間を費やせばコードは読み取られます。RASPは能動的であり、攻撃者がアプリケーションをデバッグしようとしていることを認識し、コードが1行も読み取られる前に対応します。難読化+RASPの組み合わせは多層防御を提供し、難読化が分析を遅らせ、RASPがインストルメンテーション段階で攻撃を中断します。

モバイルアプリケーションにおけるRASP

モバイルRASPソリューションはAndroidとiOSの特性に適応しています。サーバーサイドJavaアプリケーションとは異なり、モバイルRASPエージェントは限られたメモリとバッテリーの条件下で動作するため、軽量なインストルメンテーションが必要です。

AndroidでのRASP

Androidでは、RASPエージェントはビルド時にDEXバイトコードを変更するGradleプラグインを介して組み込まれます。エージェントは50以上のシステムコールをインターセプトします。これには以下が含まれます:Runtime.exec()(suやFridaの実行検出)、Class.forName()(疑わしいクラスのロード識別)、System.loadLibrary()(非標準パスからのネイティブライブラリのロード制御)。さらに、/proc/self/mapsでライブラリfrida-agentfrida-helperlibinjectsubstrateの存在をチェックします。

iOSでのRASP

iOSでは、RASPはMach-Oバイナリの後処理を通じて実装されます。Appleのバイナリ変更に関する厳格な要件のため、iOSはより複雑です。エージェントはfork()dlopen()ptrace()関数の呼び出しをインターセプトし、ロードされたライブラリ内のCydiaSubstrate.dylibの存在をチェックします。iOS用RASPはApp Storeビルドではコードを変更できません — Enterprise配布のみ可能です。App Storeの場合は、Swift MacroまたはObjective-Cメソッドスウィズリングによるコンパイル時インストルメンテーションが推奨されます。

分析ツールの検出

モバイルRASPは以下を検出します:Frida(/proc/self/mapsおよび/data/local/tmp/frida*のチェックによる)、Xposed Framework(ClassLoader内のde.robv.android.xposed.XposedBridgeのチェックによる)、JDWPデバッガ(Debug.isDebuggerConnected()による)、エミュレータ(Build.FINGERPRINT、Build.HARDWARE、Build.MODELのチェックによる)、AndroidManifestのdebuggableフラグ。NowSecure Mobile Threat Report(2025)によると、RASPエージェントはインストルメント化されたFridaセッションの89–97%を検出します。

RASPエージェントの実践的実装

モバイルアプリケーションにRASPを統合するには、インストルメンテーションの設定、ポリシーの定義、インシデントログ収集のためのSIEMシステムとの統合が必要です。

実装の選択:コンパイル時 vs ランタイム

コンパイル時インストルメンテーション — ビルド時のバイトコード変更であり、ランタイムパフォーマンスに影響しません。ランタイムインストルメンテーション(サーバー上のJava Agentまたはクライアント上のFrida経由)はより柔軟ですが、5–10%のオーバーヘッドが追加されます。モバイルアプリケーションでは、一定のネットワーク接続を必要とせず、分析のためにバッテリーを消費しないコンパイル時アプローチが推奨されます。

既存ライブラリとの統合

RASPエージェントは人気のあるSDKと正しく動作する必要があります。Firebase Crashlytics、Google Analytics、Appseeはブロックされるべきではありません。既知のライブラリのホワイトリスト設定は必須です。エージェント設定では例外が指定されます:com.google.firebaseクラスからの呼び出しの場合 — チェックはスキップされます。ホワイトリストは各SDKリリースで更新されます。

インシデント処理の例

RASPエージェントを介してFridaが検出されると、以下の処理が行われます:コンテキスト収集(スタックトレース、OSバージョン、時刻)、暗号化された形式でのログサーバーへのデータ送信、ポリシーの実行(クラッシュ、ログのみ、またはdeceive)、大量攻撃を特定するためのカウンターの増加。異なるデバイスからのデータはサーバーで集約され、攻撃パターンを特定します。

kotlin
class RASPManager {
    fun analyzeAndReact() {
        val threats = detectThreats()
        if (threats.isNotEmpty()) {
            val report = ThreatReport().apply {
                threats = threats
                timestamp = System.currentTimeMillis()
                deviceId = DeviceInfo.getHashedId()
                stackTrace = Thread
                    .currentThread()
                    .stackTrace
                    .take(10)
                    .toList()
            }

            val policy = SecurityPolicy.getPolicy(threats.maxBy { it.severity })

            when (policy) {
                Policy.BLOCK   -> throw SecurityException("Protection triggered")
                Policy.LOG     -> ServerLogger.sendReport(report)
                Policy.DECEIVE -> DeceptionLayer.activate(report)
            }
        }
    }
}

制限事項と誤検出

RASPは銀の弾丸ではありません。この技術には、保護を設計する際に考慮すべき制限があります。

パフォーマンス

インターセプトされた各呼び出しはコンテキストチェックを追加します。攻撃的な設定(すべてのIOおよびexec呼び出しのインターセプト)では、パフォーマンスが5–15%低下する可能性があります。モバイルアプリケーションでは起動時間が重要であり、RASPの初期化は起動時に200–500ミリ秒追加します。対象を絞ったインストルメンテーション — すべての可能な関数ではなく、重要な関数のみ — が推奨されます。テスト中はRASPエージェントを使用したプロファイリングが必須です。

誤検出

RASPは正当な動作をブロックする可能性があります:ネットワークコールを介してエラースタックを送信するFirebase Crashlyticsはデータ外部流出と誤認される可能性があり、デバイスの整合性をチェックするGoogle Play Integrity APIは疑わしい呼び出しとして識別される可能性があります。誤検出を減らすために、7–14日間の学習モード期間が必要であり、その間RASPはログのみを行いブロックはしません。

RASPの回避

攻撃者がカーネルレベルのアクセスを取得した場合(カーネルエクスプロイト経由)、RASPは自身のチェックすら信頼できません — エージェントはユーザースペースで動作し、カーネルが許可するものだけを認識します。カーネルレベルでの回避を防ぐために、サーバー側アテステーションと組み合わせたSecure Boot Chainチェックが使用されます。さらに、RASPエージェント自体が難読化され、デバッグから保護される必要があります — そうでなければ、攻撃者は攻撃を開始する前にRASPを削除または無効化します。

よくある質問

RASPはウイルス対策ソフトとどう違うのですか?

ウイルス対策ソフトはOSレベルで動作し、シグネチャによってファイルやプロセスをスキャンします。RASPは特定のアプリケーション内部で動作し、その行動コンテキストを分析します。ウイルス対策ソフトは特定のアプリケーションがどのように動作すべきかを知りませんが、RASPはアプリケーションに組み込まれてすべての内部呼び出しと状態を認識しているため、それを知っています。

RASPはGoogle PlayやApp Storeで利用できますか?

はい、ただし制限があります。AppleはApp Storeでのランタイムコード変更を許可していないため、RASPのiOSバージョンはSwift Macroを介したコンパイル時インストルメンテーションを使用します。Gradleプラグインを介したRASPのAndroidバージョンはGoogle Playと完全に互換性があります。両方のプラットフォームで、RASPがユーザーのプライバシーを侵害せず、同意なしにデータを収集しないことが要求されます。

RASPはサーバーサイドJavaアプリケーションで使用できますか?

はい、RASPは元々Javaスタックで登場しました。java.lang.instrumentを介したJavaエージェントはJVMレベルで呼び出しをインターセプトします。オープンソースソリューション:OpenRASP(Baidu)とjRASP。商用ソリューション:Contrast Security、Hdiv、Prevoty。マイクロサービスアーキテクチャの場合、RASPは各サービスに個別に導入されます。

RASPソリューションの費用はいくらですか?

モバイルアプリケーション向けの商用RASPソリューションは、アプリケーションの数とサポートレベルに応じて、年間3,000〜15,000 USDです。OpenRASP(Baidu)はサーバーアプリケーション向けの無料のオープンソースオプションです。モバイルRASP SDKは、難読化ツール(DexGuard + RASP、Arxan、Promon)と一緒に販売されることがよくあります。

RASP保護をテストするには?

テスト方法論には以下が含まれます:アプリケーションへのFrida接続の試行とRASPの応答の確認、root化/脱獄デバイスでのアプリケーションの実行、jadxによるAPKの逆コンパイルとRASPコードが削除されていないことの確認。テストツール:Frida、Objection、テスト自動化のためのMobSF(Mobile Security Framework)。

まとめ

  • RASP — 内部から動作し、各重要な呼び出しの実行コンテキストをリアルタイムで分析する能動的なアプリケーション保護技術
  • RASPアーキテクチャは、インストルメンテーション層(呼び出しインターセプト)、コンテキストアナライザ(スタック、引数、スレッド)、応答ポリシー(block、log、deceive)で構成される
  • モバイルRASPは/proc/self/mapsのチェックとシステムコールを介してFrida、Xposed、デバッグ、エミュレータ、APK改ざんを検出する
  • コンパイル時インストルメンテーションはモバイルアプリケーションに推奨 — ランタイムパフォーマンスに影響せず、ネットワーク接続も不要
  • 難読化(受動的保護)とRASP(能動的)の組み合わせは多層防御を提供し、各層がもう一方の弱点をカバーする
  • 制限事項には、パフォーマンスへの影響(3–7%)、誤検出のリスク(学習モード必須)、カーネルレベルエクスプロイトへの脆弱性が含まれる
  • RASPは機密データおよび支払いデータを処理するアプリケーションに対し、OWASP Mobile Top 10およびPCI DSS 4.0標準で推奨されている

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください