WeSeong ログイン
← 記事一覧に戻る
Android

Androidのセキュリティ知識、動的分析と静的分析、およびMultiDexの概要

Androidのセキュリティ知識、動的分析と静的分析、およびMultiDexの概要

Ⅰ. 概要

今回はAndroidのセキュリティに関する基本的な知識について説明します。静的分析と動的分析について説明します。静的分析は、アプリケーションが実行されていない状態でソースコードを分析し、脆弱性を発見する技術です。動的分析は、アプリケーションが実行されている状態でHookingやELF実行ファイルの構造を分析し、脆弱性を発見する技術です。モバイルアプリケーションの主なチェック項目として、第一のOS改ざん検出機能が有効かどうか、第二のプログラム整合性検証が行われているかどうか、重要な情報がメモリ上に露出しているかどうか、重要な情報がデバイスに保存されているかどうか、および画面を強制的に実行させることで認証ステップをバイパスしているかどうかを挙げます。



Ⅱ. Android セキュリティに関するさまざまな知識

主な内容は次のとおりです 動的分析, 静的分析, MultiDexすぐにそうするつもりです。それ以前に、以前の投稿に関連するレビューの形でいくつかのことを書きたいと思います。そのため、冒頭の文章が少し乱雑になっていることをご了承ください。まず、iOS と同じように、Android でも、悪意のあるコードを含むアプリからデバイスを保護することが重要です。 開発者の署名これは必要です。署名がないアプリはインストールまたは実行できず、署名は単なる値として偽造することが困難です。 スミシング(テキストメッセージを通じた個人情報やお金の盗難)同じ攻撃を実行する場合、攻撃者が個人情報を抽出しようとしているときに、Web アドレスからどのデバイスが対象になり、実際に使用されているデバイスなのかをどのように判断することができるでしょうか。これは、Web アプリケーションを開発する際だけでなく、オペレーティング システムを設計する際にも考慮すべきことです。 ユーザーエージェント識別子の値が存在するため、対象デバイスを特定して攻撃を試みることが可能です。そのため、Webサービスの運用において、Webページをレスポンシブに表示するためのユーザーエージェントを使用して、モバイルデバイスとPCデバイスを区別し、オペレーティングシステムに合わせたマルウェアを展開することが可能になります。


※ ヒント: Nox Player や LD Player などの仮想 Android を識別する際には、Bluetooth、通信事業者、電話番号などの追加情報も確認します。


※ ネットワーク環境の導入の観点から、ネットワーク分離を使用して内部ネットワークとゲストネットワークを分離し、セキュリティを維持することもできます。


前回の記事で、iPhoneが高いセキュリティを備えていると紹介しましたが、実際のところ、iPhoneとAndroidの両方にはC言語のコードが含まれているため、セキュリティの侵害に対して脆弱です。特にゲームなどのアプリケーションを作成する際には、iPhoneとAndroidの両方のバージョンを作成する開発会社に共通のC言語のコードが含まれている可能性があるため、注意が必要です。Androidの場合、C言語のコードはNative Librariesで実行されます。


私は、Android APK ファイルを分解して再コンパイルする、コードを分析して操作するなどの作業を実践してきました。そこで、対応する分解とコンパイルのコマンドのみを提供します。また、Android アセンブラである smali に関する参考資料も添付しています。

java -jar apktool_2.5.0.jar(java의 디컴파일, 컴파일 도구) d(디컴파일 옵션) apk(디컴파일 할 apk명) path(저장경로 및 디렉토리명)
java -jar apktool_2.5.0.jar b(컴파일 옵션) directory(컴파일 할 소스 코드 담긴 디렉토리) -o(이 옵션 다음에 apk 저장할 디렉토리) apk(새로 만들 apk명)

Dalvik バイトコード  |  Android オープンソースプロジェクト  |  Android オープン ソース プロジェクト

Dalvik Executable 形式  |  Android オープンソースプロジェクト  |  Android オープン ソース プロジェクト



Ⅲ. 静的分析と動的分析

静的分析アプリケーションが実行されていないとき ソースコードではこれは、不具合を発見するための分析技術です。 解凝縮 ソースコードをアセンブラやapktool、jadxなどのさまざまなツールを使用して分析することができます。Androidでは、AndroidManifest.xml、署名値、その他の情報を調べることで、どのような許可が使用されているか、またそれらが悪意のあるコードであるかどうかを大まかに判断できます。DEX構造では、各関数 classes.dexなぜならそれは縛られているからです


この構造に基づいて、ソースコードの分析を試みます。


動的分析これは、アプリが実行されている環境に不具合を発見する分析技術です。ユーザー入力や実行フローを変更して、脆弱性が生じる可能性を調べます。実行中の環境でデータや実行フローを変更するには、 フッキングこれは必要です。フリーダは、フック機能でよく知られているため、アプリケーションにどのクラスとメソッドが存在するかを調べ、メソッドの動作を理解し、それらを操作することができます。 フリーダJavaScriptをベースとしたフレームワークはありますが、コードのロジックは自分で構築する必要があります。 JEBまた、ELF(Executable and Linkable Format)と呼ばれる商用ソフトウェアも存在するため、もともとUnixスタイルの実行可能ファイルを指す(Shared Object)拡張ファイルは、Android上で動的にロードされることが多いです。これらの拡張ファイルはC/C++で記述されており、Androidの基盤であるLinuxシステムにリンクされているため、Native Libraryを通じて実行されます。

チェック項目

説明

OS変調検出機能が有効になっているかどうか

OSが変更される(ルート化やハックされる)とセキュリティ上の脅威が増大するため、OSが変更された場合でもサービスが利用可能であるかどうかを確認する必要があります。

プログラムの整合性確認

マルウェアの含まれたり再配布されたりするようなセキュリティ上の脅威があるため、変更されたプログラムが正常に動作できるかどうかを確認する必要があります。

機密情報がメモリに露呈しているかどうか

ユーザの機密情報のプレーンテキストがユーザの端末メモリ領域に露呈しているかどうかを確認する

重要な情報がデバイスに保存されているかどうか

アプリケーションのユーザーフォルダや外部ストレージに保存されているファイルに機密情報が含まれていないかを確認します

画面の実行を強制することで、認証段階をバイパスします

認証段階を強制的な画面実行、認証関連ファイルの操作、その他の手法でバイパスできるかどうかを確認します

上の表でご覧いただけるように、モバイルアプリケーションでは、以下の五つの項目を確認する必要があります。まず、 OS変調検出これは、オペレーティングシステムが管理者権限を持っているかどうかを確認するチェックです。管理者権限を持つと、デバイスを完全に制御できます。Androidの場合、 ルーティング, iPhone 用 ジャイルブレイク通常のユーザーがルーティングやジャイルブレイクを行うと、セキュリティシステム「サンドボックス」の機能が失われ、セキュリティ上の脅威に対して脆弱になります。もちろん、マルウェアにより管理者の権限がハックされると、デバイスに保存されているすべてのデータが危険にさらされ、深刻な事態に陥る可能性があります。


※ PCで特定のプログラムを使用する場合、そのプログラムは時としてオペレーティングシステムで高い権限を得ることがあります。これは、プログラムがハックされて PC から情報を抽出される可能性があるためです。たとえば、VMware、Nox Player などのプログラムは、仮想マシンとしてカーネルを直接操作できるため、危険です。


したがって、このOSの変更を検出するには、特定のアプリを使用することができます。 システム構成ファイル(ro.debuggable、service.adb.root) これを確認するか、Android オペレーティングシステムに入って su コマンドが実行されているかどうかを確認できます。 ルーティング中にインストールされたファイル (/sbin/su, /system/su, /system/bin/su, /system/xbin/su, /system/app/Superuser.apk など)それらが存在するかどうかを調べることができます。

getprop | grep debug

次のコマンドを入力すると、


次のような結果が表示されます。ro.debuggable が 0 に設定されている場合、デバイスはルート化されていません。1 に設定されている場合、デバイスはルート化されています。


プログラムの整合性検証これは、一般ユーザーが特に注意すべき領域であり、そのように見えます。 通常のアプリケーションに見えますが、実際には中に悪意のあるコードが実行されている可能性があります。 注意が必要です。公式のGoogle Play Store以外の場所(APKマーケットなど)からダウンロードしたアプリは特に危険です。IOSはApp Store(Apple Store)からしかダウンロードできないため、比較的安全ですが、WindowsではWeb上で流通するプログラムを簡単にダウンロードして使用することができますので、注意が必要です。一度実行すると、その影響は取り返しがつきません。


メモリ内の機密情報の漏洩これはセキュリティ上の問題です。すべてのデバイスには攻撃を受ける可能性のあるメモリがあります。事実上、すべてのアプリケーションにメモリが割り当てられており、データが保存および削除されています。誰かがこのメモリにリアルタイムでアクセスできる場合、 メモリ情報をダンプするそうすると、私のアカウント、パスワード、カード番号、およびアカウント情報すべてが漏えいする可能性があります。ですから、記憶に入れた重要な情報は 平文で存在している場合、それは脆弱性ですそして 暗号化メモリ情報が漏えいしたとしても、識別不可能なものにする必要があります。特に、JavaScriptはセキュリティ上の脆弱性を抱えており、そのまま公開されると危険です。 個人情報をDBに保存する際にも暗号化が行われます。それは複雑で、簡単に解読できないものでなければなりません。


デバイスに重要な情報を保存する一般的なケースでは、それほど多くはありません。 機密性の高い個人情報が公開ディレクトリまたは外部ストレージに保存されていますもしそうであったら、デバイスが一度でもハッキングされるとすべての個人情報が盗まれてしまいます。ゲームの場合、ユーザーデータが残っていると、ゲームを楽しむために操作することができますが、これはまれなことでしょう。ゲームだけでなく、銀行も同様です。 サーバ上の重要情報を管理し、サーバのセキュリティに特に配慮しているため、 一般的に、安全であると考えることができます。ユーザーが機器に機密情報を個別に保存していない限り、比較的リスクが低いと言えます。


画面の実行を強制することで、認証手順をバイパスしますログインやキーの入力など 認証プロセスに関連するファイルオーディオを操作することで、セキュリティ対策を回避し、ユーザーのアプリにアクセスして個人情報を抽出することができます。 Androidmanifext.xml許可とコンポーネントの設定が定義されており、エクスポートされた値が true の場合、他のアプリケーションやシステムから直接アクセスできます。false の場合は、アプリケーション内でのみアクセスできます。設定によって、アプリケーションへの外部アクセスが許可されている場合、 ログインアクティビティログインアクティビティでアクセスします 別のアクティビティを呼び出す これにより、認証手順をバイパスでき、通常のログイン関連機能の代わりに他の悪質なコードが実行される可能性があります。



Ⅳ. MultiDex

MultiDex簡単に言えば、Dex の構造を複製していると考えるのが良いです。


上の画像でご覧いただけるように、この構造の背景は 方法の制限 単純なアプリケーションを作成する場合は問題にはなりませんが、アプリケーションが多くの機能を提供している場合や、開発中に複数のライブラリを参照して多くのメソッドを使用している場合、Dex の数に制限があります。 64K の参照制限これは、65,536メソッドを超えることはできないため、「64Kの参照制限」と呼ばれており、値の数は64 X 1,024と同じです。したがって、上の図のように、 メインDEXそして サブデックス各コンポーネントを動的にメモリにロードすることでアプリケーションを動作させます。しかし、この構造は制約からではなく、その利点から使用されないケースもあります。 Sub Dex の場合、コードを隠すことができるため、 重要なコードは Sub Dex に隠されて実行され、通常のコードは Main Dex で実行されます。この構造の apk ファイルをデコンパイルすると、Main と Sub Dex が異なる領域にあることがわかります。


ELF(実行可能ファイルおよびリンク可能な形式)それでは、Android での呼び方と動作について簡単に見てみましょう。


Android の構造内のネイティブライブラリを参照し、C/C++ で書かれたコードを実行します。また、DEX 構造内で CLASS の METHOD が実行される際に参照する必要がある ELF メソッドがある場合は、そのメソッドを実行します。 PLT(プロシージャリンクテーブル)PLT は、外部プロシージャを接続し、プロシージャのアドレスを格納するテーブルです。 GOT(グローバルオフセットテーブル)GOT は、PLT で参照されるプロシージャのアドレスを含むテーブルであり、図のように ELF ファイルに含まれています。つまり、Android の DEX 構造では、CLASS の METHOD にそのロジックを実行するために必要な ELF メソッドが含まれており、PLT は GOT を参照してロードできます。



apk ファイルを開くと、さまざまな構成が表示されますが、lib ディレクトリもあります。このディレクトリ内には ELF ファイルがあります。中を見ると、次のようなものが表示されます。


これは lib[name].so (共有オブジェクト)の形式で含まれています。'.so'拡張子は Linux の実行可能ファイルを指し、ELF は Windows の PE と同様に Linux の実行可能ファイル構造を指します。



レビュー

実は、この記事を書く前にレビューを書いていました。今週は特に投稿数が減りました。ハック技術を学んでいるので何も書けないと思います…😆 ということで、脆弱性評価のセクションはこの投稿で終わりにします。投稿数が減ったので少し安心しています。😆