top of page

[コラム]NHN AppGuardとAndroidコードセキュリティの効果的な改善方法(1)

開発者のSecurity Development Lifecycle段階別の保護措置方案について共に悩み、活用する技術を紹介します。

コード改ざんの脅威

ご存じのように、コードセキュリティはAndroid開発作業において非常に重要な要素です。しかし、アプリの初期開発段階からコードセキュリティに対して、あまり考慮されていないのも事実です。このような部分を効果的に改善するさまざまな方法に関してお話しします。Androidモバイルアプリは次のようにソースコードの漏洩および改ざんセキュリティの脅威に晒されています。


1. 逆コンパイル(Decompile)

コンパイルされたAndroidコード(DEX)は、簡単な逆コンパイル関連ツール(apktool, jadx..)で原本と同じJavaソースコード形式に簡単に戻すことができます。

逆コンパイルされたソースコードを活用して、プログラムロジックを簡単に検索・分析でき、重要なデータを難なく得られます。例えば、認証に使用されたキー値や漏洩してはならないバックグラウンド管理サーバーアドレスのような重要なデータが流出することもあります。


2. デバッグ(Debugging)

GDB、IDA、JDB動的デバッグツールを活用して、ランタイムにアプリデータとロジックを動的に抽出し、修正が可能です。

重要関数の引数および戻り値を簡単に取得して、ログ情報を基に固定されているハードコードされた対象暗号化やCBCモードの固定IVを取得して、暗号化された重要データ(認証、決済、個人情報など)の復号化が可能です。


3. リパッケージ(Repackaging)

APKファイルは逆コンパイルすることで、アプリ内の重要ロジックを修正して改ざんされたAPKファイルでリパックおよび配布が容易です。

セキュリティネットワーク通信(HTTPS、SSH)でサーバーと暗号化通信をしても原本コードを変更して、解読できます。

当社のサービスであるUnsudowon Androidアプリに不法広告SDKを挿入され、改ざんされたアプリがマーケットに流通した代表的な事例があります。


セキュリティ開発(Security Development Lifecycle)

コードセキュリティを効果的に改善するには、アプリ開発ライフサイクル全体で、次のようなさまざまな方式によってセキュリティ脅威を減らしながら、ソフトウェア的なセキュリティ欠陥を最小限に抑える必要があります。また、上記のようなコード改ざん脅威に備えるためには、アプリビルドする際にNHN AppGuard (NHN AppGuard)が自動適用されるように開発プロセス内のリリース段階に統合しなければなりません。




1. 開発段階(Development)

開発者は、Androidアプリ開発段階で次のようなセキュリティ項目を理解し、実装しながら適用を検討する必要があります。


  • セキュリティキーボード :重要な入力に対する悪性コードによるキーロギングを防止するために、セキュリティキーボードを有効にする必要があります。

  • 暗復号化:コードでハードコーディングされたキー、ローカルセグメンテーション暗号化保存を避け、ホワイトボックスキーの使用を考慮する必要があります。

  • 通信セキュリティ: 中間者攻撃(man-in-the-middle attack)、証明書弱点確認(weak check)などにより通信プロトコル分析後にクラックされるため、通信データ暗号化およびチェックサムなどの認証有効性検証が必要です。

  • データ検証:署名確認、検証されたJNIローディング、ネットワーク段階でAPKのファイルが改ざんされたかチェックする必要があります。

  • ログの漏洩防止:デバッグログを残すことなく、ログメッセージにJava難読化適用を検討する必要があります。

  • 機密データ流出:通常テキストでの機密データ保存は避け、ローカル記憶装置(sharedPreferences、sqliteなど)暗号化を考慮する必要があります。

  • 重要なロジック開発:重要ロジックはjniレイヤー実装を推奨しており、コード難読化と結合すれば分析難易度を向上させられます。


​開発およびテスト段階ではセキュリティリスクコストが低いのに対して、配布および運営段階のセキュリティ問題コストが高いため、開発者は開発段階からコードセキュリティの確保に対する重要性を認識する必要があります。


​2. テスト段階(Test)

テスト段階ではソフトウェア欠陥だけでなく、自動化された脆弱性スキャンツールを活用してセキュリティ欠陥に対しても、持続的にコード修正および補完をする必要があります。


​脆弱性スキャン(Vulnerability Scan)

脆弱性スキャンにおけるブラックボックステストは一般的な方法の1つであり、従来のテストプロセスでも簡単に統合できます。自動化された脆弱性スキャンツールにより脆弱性の細部情報、脆弱なコードライン、リスクレベル、修正提案などを簡単に得ることができます。Android APKさえアップロードすれば自動的に脆弱性スキャンを実施してくれるモバイルアプリセキュリティテストフレームワークであるMobile Security Frameworkは、素晴らしいツールです。




 

3. リリース段階(Realease)と4. 運営段階(Operation)は、NHN AppGuardとAndroidコードセキュリティの効果的な改善方法(2)編にてご確認ください。


Comments


bottom of page