NHN AppGuardとAndroidコードセキュリティの効果的な改善方法(1)編に続いて作成された文章です。
3. リリース段階(Release)
Androidアプリは配布前にコード強化、難読化およびその他の技術を使用して、APKファイル内のコードが解読されにくいように強化する必要があります。
攻撃しきい値およびリバースエンジニアリングに対する時間コストを増やす方案が必要であり、次のようなコード強化技術が代表的です。
主な技術として、ソースコードパッキング(DEX暗号化、SO強化)と難読化(DEX、C/C++)の2つがあります。
コードパッキング
1. DEX暗号化
DEXファイルにはコンパイルされたコードが入っています。リバースエンジニアリングによって、ハッカーたちはDEXファイルからJARファイルまたはJavaクラスファイルを作成できるため、該当するDEXファイルの暗号化によって原本コードを保護します。
2. SO強化
SOファイルは、Shared Objects library(共有オブジェクトライブラリ)の略で、C/C++ 言語を使用して開発された動的ライブラリです。
SO強化は、ELFファイルの内部コード(C.C++)カスタムパッキング(実行圧縮 + 暗号化)を行い、容易に分析可能なシンボル情報を難読化することで、リバースエンジニアリングによるコード分析から保護します。
コード難読化
1. DEX難読化
DEX難読化は、ソースコード内の文字列を暗号化してNativeで復号化する必要があり、Proguardのようなツールを活用して変数、メソッド、クラス名を識別しにくくするものです。
DexGuardやARXANなどの商用ソリューションは、関数呼び出し関係を再構成して攻撃者の分析を妨害することで、分析所要時間の増加、分析難易度の上昇、パターン検出/類似度比較迂回などの目的で主に使用されます。
2. C/C ++ コード難読化
C/C++ 難読化は、Obfuscator-LLVMツールを使用して効率的に適用可能です。
このツールには、主に次の機能が含まれています。
制御フローの偽造および併合 : if、while、forおよびdoのような制御文をソースコード機能の変更なしで、switch分岐選択文に変換
インライン代替: 複数の位置から呼び出される中央関数に代わり、実関数の本文に代替
文字列暗号化:文字列定数を暗号化して、ランタイムに該当する文字列をネイティブから復号
表現変換: +、&、| 演算子を同一の結果を返す関数に置き換える技法
4. 運営段階(Operation)
運営段階では、改ざんアプリやハッキングツールが流通するブラックマーケットおよびハッキング関連コミュニティをモニタリングする必要があります。ハッキングの兆候を事前に検知し、攻撃パターン把握や収集したセキュリティログなどを活用して、さまざまな方式で対応する必要があります。
要約
アプリサービス開発時のセキュアコーディング要件と配布前段階での脆弱性点検、コード強化およびネットワーク通信階層の整合性チェックなどを考慮することで、事前にリスクのあるセキュリティ脆弱性を最小限に抑え、リリース段階では、アプリ保護技術の適用やコード保護による安全なモバイルサービスが必要です。
Security Development Lifecycle | 開発者 | セキュリティサポート |
開発 | セキュアコーディング適用 | 開発段階のセキュリティ検討、 セキュリティ開発ガイド |
テスト | コード脆弱性スキャン(任意)、 コード脆弱性およびセキュリティ脅威要素除去 | コード脆弱性スキャン、 セキュリティ脆弱性検収 |
リリース | コード強化用のパッキングおよび難読化(AppGuard)適用 | コード保護技術提供、 ガイド |
運営 | ログデータ分析 | 不法複製チャンネルモニタリング、 ログデータ分析 |
Comments