PreEmptive Protection - DashO v8.1 User Guide

デバッグ チェックとレスポンス

PreEmptive Protection - DashO は、Java および Android アプリケーションをインストルメントすることによって、これらのアプリケーションがデバッグ可能モードで実行されているかどうか、またはアクティブにデバックされているかどうかを検出することができます。デバッグ チェックは、カスタム アノテーションを使用して実装されます。このアノテーションはソース コードに置くか、または Debug Check パネルで構成することができます。

デバッグ チェック

アプリケーションがデバックされているかどうかを検出するには、アプリケーション内の 1 つ以上のメソッドに DebuggingCheck を設定します。DashO は、デバッグされているかどうかを判断するための、ランタイム チェックを実行するコードを追加します。このチェックが、デバッグされていると判断した場合、それに対応するための 1 つ以上の方法を構成することができます。チェックが実行される時点で、次のうちの一方または両方を選択できます。

  • エラー メッセージを送信する。エラー メッセージが PreEmptive Analytics サーバーへ送信されます。メッセージには任意でカスタム データを含めることができます。既定では、メッセージは送信されません。アプリケーションが分析を使用しており、アプリケーションに ApplicationStart が含まれている場合は、これ以上の構成は必要ありません。DebuggingChecks のみを使用している場合は、他のアノテーションを用いて会社とアプリケーションの ID を供給するか、または Injection Options パネルでそれらを提供する必要があります。メッセージは、オプトインの設定と関係なく送信されます。Android アプリケーションにインストルメンテーションを差し込む場合の追加情報については、PreEmptive Analytics の概要を参照してください。

  • メソッドを呼び出すか、またはフィールドを設定する。単一の boolean を取るメソッドを呼び出すか、または boolean 型のフィールドを設定することによって、デバッグの状態をアプリケーションに渡し返すことができます。デバッグ チェックが成功した(デバッグされている)場合の boolean 値は true です。チェックが失敗した(デバッグされていない)場合は、false が使用されます。アプリケーションは、この情報に基づいて直ちに行動するか、あるいは後で DebuggingResponse アノテーションとやり取りするために格納しておくことができます。詳細については、ソースおよび操作の指定を参照してください。

  • レスポンスを実行する。即時に実行できるレスポンスがいくつかあります。

    • exit – ランダムにゼロ以外のリターン コードを生成してアプリケーションを終了する
    • hang – 現在のスレッドをハングさせる
    • error – ランダムに選択されたエラーをスローする
    • exception – ランダムに選択された、チェックされていない例外をスローする
    • none – 操作を実行しない(既定)

メモ:リターン コードおよび Throwable の選択のランダム化は、実行時ではなく、チェックが差し込まれた時点で実行されます。エラーと例外は、その出所を隠すために、空のスタック トレースを伴ってスローされます。

これらの動作を複数選択した場合は、上記の順序で実行されます。これらのうちのどれも要求しない場合は、デバッグ チェックは省かれ、DashO が警告メッセージを生成します。

アプリケーションには、さまざまな用途の DebuggingCheck をさまざまな構成で含めることができます。複数のチェックを使用したり、レスポンスを混合したりすることにより、アタッカーの侵入を妨げられるでしょう。

private static boolean debuggingFlag;

@DebuggingCheck(sendMessage=true, customDataSource="@myProps", action="@debuggingFlag")
public void onCreate(Bundle check){

}

@DebuggingCheck(response=ResponseType.Hang)
private int computeResult(){

}

メモ:Android 以外のプラットフォームの場合、アプリケーションが開始した後にデバッガーが添付されると正しく検出されません。

デバッグのレスポンス

検出とレスポンスを分離すると、アタッカーにとってより困難になります。複数の異なるレスポンスをアプリケーション中に散在させることで、アプリケーションの困難さが増します。それらのレスポンスを非決定的なものにすると、プロセスをイライラさせるものにすることができます。DashO では、デバッグされたアプリケーションへのレスポンスを、単純にでも複雑にでも望みどおりに構成することができます。

DebuggingResponse アノテーションは、検出とレスポンスのコードを分離するために DebuggingCheck と対話するコードを追加します。1 つ以上の DebuggingResponses をアプリケーションに追加することができます。

DebuggingResponse は、boolean 値を介して DebuggingCheck に合わせられます。DebuggingCheck動作を使用する値セットは、DebuggingResponseソースを使って取得されます。取得された値が true であれば、レスポンスが実行されます。詳細については、ソースおよび操作の指定を参照してください。

DebuggingCheck と同様に、DebuggingResponse はメッセージを送信し、かつレスポンスを実行することができます。さらに、レスポンスの動作には、0.0(なし)から 1.0(常時)までの確率係数に基づいて条件を付けることができます。既定値は 1.0 です。

private static boolean debuggingFlag;

@DebuggingCheck(sendMessage=true, action="@debuggingFlag")
public void onCreate(Bundle state){

}

@DebuggingResponse(source="@debuggingFlag", sendMessage=true, customDataSource="customData()", response=ResponseType.Exit, probability=0.05f)
private int computeResult(){

}

@DebuggingResponse(source="@debuggingFlag", sendMessage=true, response=ResponseType.Error, probability=0.1f)
private FileInputStream readInput(){

}

デバッグ有効化チェック

アプリケーションがデバッグされるようにセットアップされているかどうかを検出するには、アプリケーション内の 1 つ以上のメソッドに DebugEnabledCheck を設定します。DashO は、デバッグを許可するようにセットアップされているかどうかを判断するための、ランタイム チェックを実行するコードを追加します。このチェックが、許可するようセットアップされていると判断したら、1 つ以上の方法でそれに対応することができます。チェックが実行される時点で、次のうちの一方または両方を選択できます。

  • エラー メッセージを送信する。エラー メッセージが PreEmptive Analytics サーバーへ送信されます。メッセージには任意でカスタム データを含めることができます。既定では、メッセージは送信されません。アプリケーションが分析を使用しており、アプリケーションに ApplicationStart が含まれている場合は、これ以上の構成は必要ありません。DebugEnabledChecks のみを使用している場合は、他のアノテーションを用いて会社とアプリケーションの ID を供給するか、または Injection Options パネルでそれらを提供する必要があります。メッセージは、オプトインの設定と関係なく送信されます。Android アプリケーションにインストルメンテーションを差し込む場合の追加情報については、PreEmptive Analytics の概要を参照してください。

  • メソッドを呼び出すか、またはフィールドを設定する。単一の boolean を取るメソッドを呼び出すか、または boolean 型のフィールドを設定することによって、デバッグ有効化の状態をアプリケーションに渡し返すことができます。デバッグ有効化チェックが成功した(デバッグ用にセットアップされている)場合の boolean 値は true です。チェックが失敗した(デバッグ用にセットアップされていない)場合は、false が使用されます。アプリケーションは、この情報に基づいて直ちに行動するか、あるいは後で DebugEnabledResponse アノテーションとやり取りするために格納しておくことができます。詳細については、ソースおよび操作の指定を参照してください。

  • レスポンスを実行する。即時に実行できるレスポンスがいくつかあります。

    • exit – ランダムにゼロ以外のリターン コードを生成してアプリケーションを終了する
    • hang – 現在のスレッドをハングさせる
    • error – ランダムに選択されたエラーをスローする
    • exception – ランダムに選択された、チェックされていない例外をスローする
    • none – 操作を実行しない(既定)

メモ:リターン コードおよび Throwable の選択のランダム化は、実行時ではなく、チェックが差し込まれた時点で実行されます。エラーと例外は、その出所を隠すために、空のスタック トレースを伴ってスローされます。

これらの動作を複数選択した場合は、上記の順序で実行されます。これらのうちのどれも要求しない場合は、デバッグ有効化チェックは省かれ、DashO が警告メッセージを生成します。

アプリケーションには、さまざまな用途の DebugEnabledCheck をさまざまな構成で含めることができます。複数のチェックを使用したり、レスポンスを混合したりすることにより、アタッカーの侵入を妨げられるでしょう。

private static boolean debuggingFlag;

@DebugEnabledCheck(sendMessage=true, customDataSource="@myProps", action="@debuggingFlag")
public void onCreate(Bundle check){

}

@DebugEnabledCheck(response=ResponseType.Hang)
private int computeResult(){

}

メモ:Android のデバッグ有効化チェックは、アプリケーションのコンテキストへのアクセスを必要とし、チェックが差し込まれるクラスに getApplicationContext() メソッドの存在が必要です。ApplicationService クラスのような android.context.Context を拡張するクラスにデバッグ有効化チェックを差し込むのであれば、問題ありません。そうでない場合は、getApplicationContext() メソッドを追加して、適切な Context が返されることを確認してください。また、メッセージを送信する予定で、オフライン メッセージのサポートが必要な場合には、追加した getApplicationContext() メソッドを名前の変更対象から除外する必要が生じます。

デバッグ有効化のレスポンス

検出とレスポンスを分離すると、アタッカーにとってより困難になります。複数の異なるレスポンスをアプリケーション中に散在させることで、アプリケーションの困難さが増します。それらのレスポンスを非決定的なものにすると、プロセスをイライラさせるものにすることができます。DashO では、デバッグが有効になっているアプリケーションへのレスポンスを、単純にでも複雑にでも望みどおりに構成することができます。

DebugEnabledResponse アノテーションは、検出とレスポンスのコードを分離するために DebugEnabledCheck と対話するコードを追加します。1 つ以上の DebugEnabledResponses をアプリケーションに追加することができます。

DebugEnabledResponse は、boolean 値を介して DebugEnabledCheck に合わせられます。DebugEnabledCheck動作を使用する値セットは、DebugEnabledResponseソースを使って取得されます。取得された値が true であれば、レスポンスが実行されます。詳細については、ソースおよび操作の指定を参照してください。

DebugEnabledCheck と同様に、DebugEnabledResponse はメッセージを送信し、かつレスポンスを実行することができます。さらに、レスポンスの動作には、0.0(なし)から 1.0(常時)までの確率係数に基づいて条件を付けることができます。既定値は 1.0 です。

private static boolean debuggingFlag;

@DebugEnabledCheck(sendMessage=true, action="@debuggingFlag")
public void onCreate(Bundle state){

}

@DebugEnabledResponse(source="@debuggingFlag", sendMessage=true, customDataSource="customData()", response=ResponseType.Exit, probability=0.05f)
private int computeResult(){

}

@DebugEnabledResponse(source="@debuggingFlag", sendMessage=true, response=ResponseType.Error, probability=0.1f)
private FileInputStream readInput(){

}

PreEmptive Protection - DashO Version v8.1.0. Copyright © 2017 PreEmptive Solutions, LLC