PreEmptive Protection - DashO v8.2 User Guide

改ざんチェックとレスポンス

PreEmptive Protection - DashO は、アプリケーションが改ざんされているかどうかを検出し、改ざんされている場合には PreEmptive Analytics サーバーへメッセージを送信するようにアプリケーションをインストルメントすることができます。改ざんチェックでは、アプリケーションが DashO によって、あるいは DashO によるインストルメンテーションに続く別のプロセスによって署名されている必要があります。改ざんチェックとレスポンスの構成は、Tamper Check UI パネルを使って、またはコード アノテーションを追加することにより行います。

改ざんチェック

改ざんを検出するには、アプリケーション内の 1 つ以上のメソッドに TamperCheck を設定します。DashO は、コードが特定の証明書によって著名されていることを検証する、ランタイム チェックを実行するコードを追加します。このチェックは、概要の説明に従って構成できますが、署名情報が必要になる場合もあります。

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

private static boolean tamperFlag;
private static Properties myProps;

@TamperCheck(sendMessage=true, customDataSource="@myProps", action="@tamperFlag")
public static void main(final String[] args){

}

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

}

署名との相互作用

改ざんチェックは、実行時に、コードが特定の証明書によって署名されているかどうかを検証することにより実行されます。結果として生じる jar ファイルへの署名に DashO が使われる場合は、これ以上の構成は必要ありません。DashO を使って難読化した後、別のプロセスによって jar ファイルが署名される場合は、TamperCheck の追加属性を使用して、署名情報について DashO へ伝える必要があります。これにより、DashO はランタイム改ざんチェックを行うために必要なキー情報を取得することができます。指定された情報は、Output Signing パネルで見られる内容と同様です。

@TamperCheck(sendMessage=true, action="@tamperFlag", storepass="${master.psw}",
    storetype="JKS", alias="ProdKey")
public static void main(final String[] args){

}

ユーザー インターフェイスを使用して storepass 値のパスワードを入力したとき、パスワードにプロパティ参照が含まれていない場合は、DashO は暗号化された形式でパスワードを格納します。

メモ:

アプリケーションがカスタムのクラス ローダーを使用している場合は、署名証明書を読み込んでいるかどうかを確認してください。

たとえば、OSGI(Eclipse Equinox)ベースのアプリケーションでは、osgi.signedcontent.support を構成する必要があります。少なくとも certificate を許可する必要があり、osgi.support.class.certificatefalse に設定することはできません。

アプリケーションがコード生成を利用している場合は、改ざん検出を追加する前に、署名済みの jar ファイルで正しく動作しているかどうかを確認してください。同じ証明書を使用してコードを生成する jar ファイルに署名する必要があるかもしれません。
たとえば、Spring ベースのアプリケーションでは、spring-core-4.0.1.RELEASE.jar(または類似する jar ファイル)に署名する必要があります。

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

改ざんのレスポンス

TamperResponse アノテーションは、TamperCheck と情報をやり取りします。このレスポンスは、概要の説明に従って構成できます。

private static boolean tamperFlag;

private Properties customData(){...}

@TamperCheck(action="@tamperFlag")
public static void main(final String[] args){

}

@TamperResponse(source="@tamperFlag", sendMessage=true, customDataSource="customData()")
private void init() {

}

@TamperResponse(source="@tamperFlag", response=ResponseType.Exit, probability=0.05f)
private int computeResult(){

}

@TamperResponse(source="@tamperFlag", response=ResponseType.Error, probability=0.1f)
private FileInputStream readInput(){

}

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