Android Applications Pentesting
Reading time: 62 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
Android Applications Basics
このページを読むことを強くお勧めします。Androidセキュリティに関連する最も重要な部分と、Androidアプリケーション内の最も危険なコンポーネントについて知るためです:
ADB (Android Debug Bridge)
これは、Androidデバイス(エミュレートされたものまたは物理的なもの)に接続するために必要な主なツールです。
ADBは、コンピュータからUSBまたはネットワーク経由でデバイスを制御することを可能にします。このユーティリティは、ファイルのコピー、アプリのインストールとアンインストール、シェルコマンドの実行、データのバックアップ、ログの読み取りなど、さまざまな機能を提供します。
以下のADB Commandsのリストを確認して、adbの使い方を学んでください。
Smali
時には、隠された情報(おそらくよく難読化されたパスワードやフラグ)にアクセスするために、アプリケーションコードを修正することが興味深い場合があります。そのため、apkを逆コンパイルし、コードを修正して再コンパイルすることが興味深いかもしれません。
このチュートリアルでは、APKを逆コンパイルし、Smaliコードを修正して、新しい機能を持つAPKを再コンパイルする方法を学ぶことができます。これは、動的分析中に提示されるいくつかのテストの代替手段として非常に役立つ可能性があります。したがって、この可能性を常に念頭に置いておいてください。
Other interesting tricks
- Play Storeでの位置情報の偽装
- APKのダウンロード: https://apps.evozi.com/apk-downloader/, https://apkpure.com/es/, https://www.apkmirror.com/, https://apkcombo.com/es-es/apk-downloader/, https://github.com/kiber-io/apkd
- デバイスからAPKを抽出:
adb shell pm list packages
com.android.insecurebankv2
adb shell pm path com.android.insecurebankv2
package:/data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
adb pull /data/app/com.android.insecurebankv2-Jnf8pNgwy3QA_U5f-n_4jQ==/base.apk
- APKEditorを使用して、すべてのスプリットとベースAPKをマージします:
mkdir splits
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
java -jar ../APKEditor.jar m -i splits/ -o merged.apk
# after merging, you will need to align and sign the apk, personally, I like to use the uberapksigner
java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
静的分析
まず、APKを分析するためには、デコンパイラを使用してJavaコードを確認する必要があります。
詳細なデコンパイラについては、こちらをお読みください。
興味深い情報の探索
APKの文字列を確認するだけで、パスワード、URL (https://github.com/ndelphit/apkurlgrep)、APIキー、暗号化、Bluetooth UUID、トークン、およびその他の興味深いものを検索できます... コード実行のバックドアや認証バックドア(アプリへのハードコーディングされた管理者資格情報)も探してください。
Firebase
FirebaseのURLに特に注意を払い、設定が不適切でないか確認してください。Firebaseとは何か、どのように悪用するかについての詳細情報はこちら。
アプリケーションの基本理解 - Manifest.xml, strings.xml
アプリケーションの**Manifest.xmlおよびstrings.xmlファイルの検査は、潜在的なセキュリティ脆弱性を明らかにすることができます**。これらのファイルは、デコンパイラを使用するか、APKファイルの拡張子を.zipに変更してから解凍することでアクセスできます。
Manifest.xmlから特定された脆弱性には以下が含まれます:
- デバッグ可能なアプリケーション: _Manifest.xml_ファイルでデバッグ可能として設定されたアプリケーション(
debuggable="true"
)は、接続を許可するため、悪用のリスクがあります。デバッグ可能なアプリケーションを見つけて悪用する方法については、デバイス上のデバッグ可能なアプリケーションを見つけて悪用するチュートリアルを参照してください。 - バックアップ設定: 機密情報を扱うアプリケーションには、
android:allowBackup="false"
属性を明示的に設定して、特にUSBデバッグが有効な場合にadbを介した不正なデータバックアップを防ぐ必要があります。 - ネットワークセキュリティ: _res/xml/_内のカスタムネットワークセキュリティ構成(
android:networkSecurityConfig="@xml/network_security_config"
)は、証明書ピンやHTTPトラフィック設定などのセキュリティ詳細を指定できます。特定のドメインに対してHTTPトラフィックを許可することが一例です。 - エクスポートされたアクティビティとサービス: マニフェスト内のエクスポートされたアクティビティとサービスを特定することで、悪用される可能性のあるコンポーネントを明らかにできます。動的テスト中のさらなる分析により、これらのコンポーネントを悪用する方法が明らかになります。
- コンテンツプロバイダーとファイルプロバイダー: 公開されたコンテンツプロバイダーは、不正なアクセスやデータの変更を許可する可能性があります。ファイルプロバイダーの構成も注意深く確認する必要があります。
- ブロードキャストレシーバーとURLスキーム: これらのコンポーネントは悪用される可能性があり、特にURLスキームが入力脆弱性に対してどのように管理されているかに注意を払う必要があります。
- SDKバージョン:
minSdkVersion
、targetSDKVersion
、およびmaxSdkVersion
属性は、サポートされているAndroidバージョンを示し、セキュリティ上の理由から古い脆弱なAndroidバージョンをサポートしないことの重要性を強調します。
strings.xmlファイルからは、APIキー、カスタムスキーマ、およびその他の開発者ノートなどの機密情報が発見される可能性があり、これらのリソースの注意深いレビューの必要性を強調しています。
タップジャッキング
タップジャッキングは、悪意のある アプリケーションが起動され、被害者アプリケーションの上に位置する攻撃です。被害者アプリを視覚的に隠すと、そのユーザーインターフェースはユーザーを騙してそれと対話させるように設計されており、実際には被害者アプリに対してその対話を渡しています。
実際には、ユーザーが被害者アプリでアクションを実行していることを知らないようにしています。
詳細情報は以下を参照してください:
タスクハイジャック
launchMode
がsingleTask
に設定され、taskAffinity
が定義されていないアクティビティは、タスクハイジャックに対して脆弱です。これは、アプリケーションがインストールされ、実際のアプリケーションの前に起動されると、実際のアプリケーションのタスクをハイジャックする可能性があることを意味します(つまり、ユーザーは悪意のあるアプリケーションを使用していると思い込んでいる)。
詳細情報は以下を参照してください:
不適切なデータストレージ
内部ストレージ
Androidでは、内部ストレージに保存されたファイルは、作成したアプリのみがアクセスできるように設計されています。このセキュリティ対策はAndroidオペレーティングシステムによって強制され、ほとんどのアプリケーションのセキュリティニーズには一般的に十分です。しかし、開発者は時折、MODE_WORLD_READABLE
やMODE_WORLD_WRITABLE
のようなモードを利用して、ファイルを異なるアプリケーション間で共有できるようにします。しかし、これらのモードは、他のアプリケーション(潜在的に悪意のあるものを含む)によるこれらのファイルへのアクセスを制限しません。
- 静的分析:
MODE_WORLD_READABLE
およびMODE_WORLD_WRITABLE
の使用が注意深く精査されるべきです。これらのモードは、意図しないまたは不正なアクセスにファイルをさらす可能性があります。
- 動的分析:
- アプリによって作成されたファイルに設定された権限を確認します。特に、ファイルが全世界に対して読み取りまたは書き込み可能に設定されているかをチェックします。これは重大なセキュリティリスクを引き起こす可能性があり、デバイスにインストールされた任意のアプリケーションが、出所や意図に関係なく、これらのファイルを読み取ったり変更したりできるようになります。
外部ストレージ
外部ストレージ上のファイルを扱う際には、いくつかの注意が必要です:
- アクセス可能性:
- 外部ストレージ上のファイルは全世界に対して読み取りおよび書き込み可能です。つまり、任意のアプリケーションやユーザーがこれらのファイルにアクセスできます。
- セキュリティの懸念:
- アクセスの容易さを考慮すると、機密情報を外部ストレージに保存しないことが推奨されます。
- 外部ストレージは取り外し可能であり、任意のアプリケーションによってアクセスされる可能性があるため、セキュリティが低下します。
- 外部ストレージからのデータ処理:
- 外部ストレージから取得したデータに対しては常に入力検証を行う必要があります。これは、データが信頼できないソースからのものであるため、重要です。
- 外部ストレージに実行可能ファイルやクラスファイルを保存して動的に読み込むことは強く推奨されません。
- アプリケーションが外部ストレージから実行可能ファイルを取得する必要がある場合、これらのファイルが署名され、暗号的に検証されていることを確認してから動的に読み込む必要があります。このステップは、アプリケーションのセキュリティの整合性を維持するために重要です。
外部ストレージは/storage/emulated/0
、/sdcard
、/mnt/sdcard
でアクセス可能です。
note
Android 4.4(API 17)以降、SDカードには、アプリ専用のディレクトリに対するアクセスを制限するディレクトリ構造があります。これにより、悪意のあるアプリケーションが他のアプリのファイルに対して読み取りまたは書き込みアクセスを得ることが防止されます。
平文で保存された機密データ
- 共有設定: Androidは各アプリケーションが
/data/data/<packagename>/shared_prefs/
パスにXMLファイルを簡単に保存できるようにしており、そのフォルダ内に平文で機密情報が見つかることがあります。 - データベース: Androidは各アプリケーションが
/data/data/<packagename>/databases/
パスにSQLiteデータベースを簡単に保存できるようにしており、そのフォルダ内に平文で機密情報が見つかることがあります。
TLSの破損
すべての証明書を受け入れる
何らかの理由で、開発者は時々、ホスト名が一致しない場合でもすべての証明書を受け入れます。例えば、以下のようなコード行がある場合です:
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
A good way to test this is to try to capture the traffic using some proxy like Burp without authorising Burp CA inside the device. Also, you can generate with Burp a certificate for a different hostname and use it.
Broken Cryptography
Poor Key Management Processes
一部の開発者は、ローカルストレージに機密データを保存し、コード内にハードコーディングされた/予測可能なキーで暗号化します。これは行うべきではなく、リバースエンジニアリングにより攻撃者が機密情報を抽出できる可能性があります。
Use of Insecure and/or Deprecated Algorithms
開発者は、認証チェック、データの保存または送信を行うために非推奨のアルゴリズムを使用すべきではありません。これらのアルゴリズムには、RC4、MD4、MD5、SHA1などがあります。例えば、パスワードを保存するためにハッシュが使用される場合、ソルトを使用したハッシュのブルートフォース耐性が必要です。
Other checks
- APKを難読化することを推奨します。これにより、攻撃者のリバースエンジニアリング作業が困難になります。
- アプリが機密性の高いものである場合(銀行アプリなど)、モバイルがルート化されているかどうかを確認する独自のチェックを実行し、適切に対処する必要があります。
- アプリが機密性の高いものである場合(銀行アプリなど)、エミュレーターが使用されているかどうかを確認する必要があります。
- アプリが機密性の高いものである場合(銀行アプリなど)、実行前に自身の整合性を確認し、変更されていないかを確認する必要があります。
- APKiDを使用して、APKをビルドするために使用されたコンパイラ/パッカー/難読化ツールを確認します。
React Native Application
Read the following page to learn how to easily access javascript code of React applications:
Xamarin Applications
Read the following page to learn how to easily access C# code of a xamarin applications:
Superpacked Applications
According to this blog post superpacked is a Meta algorithm that compress the content of an application into a single file. The blog talks about the possibility of creating an app that decompress these kind of apps... and a faster way which involves to execute the application and gather the decompressed files from the filesystem.
Automated Static Code Analysis
The tool mariana-trench is capable of finding vulnerabilities by scanning the code of the application. This tool contains a series of known sources (that indicates to the tool the places where the input is controlled by the user), sinks (which indicates to the tool dangerous places where malicious user input could cause damages) and rules. These rules indicates the combination of sources-sinks that indicates a vulnerability.
With this knowledge, mariana-trench will review the code and find possible vulnerabilities on it.
Secrets leaked
An application may contain secrets (API keys, passwords, hidden urls, subdomains...) inside of it that you might be able to discover. You could us a tool such as https://github.com/dwisiswant0/apkleaks
Bypass Biometric Authentication
Bypass Biometric Authentication (Android)
Other interesting functions
- Code execution:
Runtime.exec(), ProcessBuilder(), native code:system()
- Send SMSs:
sendTextMessage, sendMultipartTestMessage
- Native functions declared as
native
:public native, System.loadLibrary, System.load
- Read this to learn how to reverse native functions
Other tricks
Dynamic Analysis
First of all, you need an environment where you can install the application and all the environment (Burp CA cert, Drozer and Frida mainly). Therefore, a rooted device (emulated or not) is extremely recommended.
Online Dynamic analysis
You can create a free account in: https://appetize.io/. This platform allows you to upload and execute APKs, so it is useful to see how an apk is behaving.
You can even see the logs of your application in the web and connect through adb.
Thanks to the ADB connection you can use Drozer and Frida inside the emulators.
Local Dynamic Analysis
Using an emulator
- Android Studio (You can create x86 and arm devices, and according to this latest x86 versions support ARM libraries without needing an slow arm emulator).
- Learn to set it up in this page:
- Genymotion (Free version: Personal Edition, you need to create an account. It's recommend to download the version WITH VirtualBox to avoid potential errors.)
- Nox (Free, but it doesn't support Frida or Drozer).
note
When creating a new emulator on any platform remember that the bigger the screen is, the slower the emulator will run. So select small screens if possible.
To install google services (like AppStore) in Genymotion you need to click on the red marked button of the following image:
Also, notice that in the configuration of the Android VM in Genymotion you can select Bridge Network mode (this will be useful if you will be connecting to the Android VM from a different VM with the tools).
Use a physical device
You need to activate the debugging options and it will be cool if you can root it:
- Settings.
- (FromAndroid 8.0) Select System.
- Select About phone.
- Press Build number 7 times.
- Go back and you will find the Developer options.
Once you have installed the application, the first thing you should do is to try it and investigate what does it do, how does it work and get comfortable with it.
I will suggest to perform this initial dynamic analysis using MobSF dynamic analysis + pidcat, so we will be able to learn how the application works while MobSF captures a lot of interesting data you can review later on.
Unintended Data Leakage
Logging
開発者は、デバッグ情報を公開することに注意すべきです。これは機密データの漏洩につながる可能性があります。アプリケーションログを監視して機密情報を特定し保護するために、pidcatとadb logcat
が推奨されます。Pidcatは使いやすさと可読性のために好まれます。
warning
Android 4.0以降、アプリケーションは自分のログにのみアクセスできることに注意してください。したがって、アプリケーションは他のアプリのログにアクセスできません。
それでも、機密情報をログに記録しないことが推奨されます。
Copy/Paste Buffer Caching
Androidのクリップボードベースのフレームワークは、アプリ内でのコピー&ペースト機能を可能にしますが、他のアプリケーションがクリップボードにアクセスできるため、機密データが露出するリスクがあります。クレジットカードの詳細など、アプリケーションの機密セクションに対してコピー/ペースト機能を無効にすることが重要です。
Crash Logs
アプリケーションがクラッシュし、ログを保存する場合、これらのログは攻撃者に役立つ可能性があります。特にアプリケーションがリバースエンジニアリングできない場合はそうです。このリスクを軽減するために、クラッシュ時にログを記録しないようにし、ログをネットワーク経由で送信する必要がある場合は、SSLチャネルを介して送信されることを確認してください。
ペンテスターとして、これらのログを確認することをお勧めします。
Analytics Data Sent To 3rd Parties
アプリケーションは、Google Adsenseのようなサービスを統合することが多く、開発者による不適切な実装により機密データが漏洩する可能性があります。潜在的なデータ漏洩を特定するために、アプリケーションのトラフィックを傍受し、第三者サービスに送信される機密情報がないかを確認することが推奨されます。
SQLite DBs
ほとんどのアプリケーションは、情報を保存するために内部SQLiteデータベースを使用します。ペンテスト中は、作成されたデータベース、テーブルとカラムの名前、保存されたすべてのデータを確認してください。機密情報を見つけることができるかもしれません(これは脆弱性となります)。
データベースは/data/data/the.package.name/databases
に位置し、例えば/data/data/com.mwr.example.sieve/databases
のようになります。
データベースが機密情報を保存しており、暗号化されているが、アプリケーション内にパスワードが見つかる場合、それでも脆弱性です。
.tables
を使用してテーブルを列挙し、.schema <table_name>
を使用してテーブルのカラムを列挙します。
Drozer (Exploit Activities, Content Providers and Services)
From Drozer Docs: Drozer allows you to assume the role of an Android app and interact with other apps. It can do anything that an installed application can do, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .
Drozer is s useful tool to exploit exported activities, exported services and Content Providers as you will learn in the following sections.
Exploiting exported Activities
Read this if you want to refresh what is an Android Activity.
Also remember that the code of an activity starts in the onCreate
method.
Authorisation bypass
Activityがエクスポートされると、外部アプリからその画面を呼び出すことができます。したがって、機密情報を含むActivityがエクスポートされている場合、認証メカニズムをバイパスしてアクセスすることができます。
Learn how to exploit exported activities with Drozer.
You can also start an exported activity from adb:
- PackageName is com.example.demo
- Exported ActivityName is com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity
注意: MobSFは、アクティビティのandroid:launchMode
として_singleTask/singleInstance_の使用を悪意のあるものとして検出しますが、これによると、これは古いバージョン(APIバージョン< 21)でのみ危険なようです。
注意
認証バイパスは常に脆弱性ではないことに注意してください。バイパスの動作とどの情報が公開されているかによります。
機密情報の漏洩
アクティビティは結果を返すこともできます。もし、**setResult
**メソッドを呼び出し、機密情報を返すエクスポートされた保護されていないアクティビティを見つけることができれば、機密情報の漏洩があります。
タップジャッキング
タップジャッキングが防止されていない場合、エクスポートされたアクティビティを悪用してユーザーに予期しないアクションを実行させることができます。タップジャッキングについての詳細はこちらのリンクを参照してください。
コンテンツプロバイダーの悪用 - 機密情報へのアクセスと操作
コンテンツプロバイダーについて復習したい場合はこれをお読みください。
コンテンツプロバイダーは基本的にデータを共有するために使用されます。アプリに利用可能なコンテンツプロバイダーがある場合、そこから機密データを抽出できるかもしれません。また、SQLインジェクションやパストラバーサルの可能性をテストすることも興味深いです。これらは脆弱である可能性があります。
Drozerを使用してコンテンツプロバイダーを悪用する方法を学びましょう。
サービスの悪用
サービスについて復習したい場合はこれをお読みください。
サービスのアクションはonStartCommand
メソッドで開始されることを覚えておいてください。
サービスは基本的にデータを受信し、処理し、応答(またはしない)を返すものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合は、コードを確認して何をしているのかを理解し、機密情報を抽出したり、認証手段をバイパスしたりするために動的にテストする必要があります。
Drozerを使用してサービスを悪用する方法を学びましょう。
ブロードキャストレシーバーの悪用
ブロードキャストレシーバーについて復習したい場合はこれをお読みください。
ブロードキャストレシーバーのアクションはonReceive
メソッドで開始されることを覚えておいてください。
ブロードキャストレシーバーは、特定のメッセージを待機しています。レシーバーがメッセージをどのように処理するかによって、脆弱である可能性があります。
Drozerを使用してブロードキャストレシーバーを悪用する方法を学びましょう。
スキーム / ディープリンクの悪用
MobSFやこのスクリプトのようなツールを使用して、手動でディープリンクを探すことができます。
adbやブラウザを使用して宣言されたスキームを開くことができます:
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
パッケージ名を省略することができ、モバイルは自動的にそのリンクを開くべきアプリを呼び出します。
<!-- Browser regular link -->
<a href="scheme://hostname/path?param=value">Click me</a>
<!-- fallback in your url you could try the intent url -->
<a href="intent://hostname#Intent;scheme=scheme;package=your.package.name;S.browser_fallback_url=http%3A%2F%2Fwww.example.com;end">with alternative</a>
実行されるコード
アプリで実行されるコードを見つけるために、ディープリンクによって呼び出されるアクティビティに移動し、関数**onNewIntent
**を検索します。
機密情報
ディープリンクを見つけるたびに、URLパラメータを介して機密データ(パスワードなど)を受信していないか確認してください。他のアプリケーションがディープリンクを偽装してそのデータを盗む可能性があります!
パス内のパラメータ
URLのパス内にパラメータを使用しているディープリンクがあるかどうかも確認する必要があります。例えば、https://api.example.com/v1/users/{username}
のように。この場合、example://app/users?username=../../unwanted-endpoint%3fparam=value
のようにパスのトラバーサルを強制することができます。
アプリケーション内で正しいエンドポイントを見つけた場合、オープンリダイレクト(パスの一部がドメイン名として使用される場合)、アカウント乗っ取り(CSRFトークンなしでユーザーの詳細を変更でき、脆弱なエンドポイントが正しいメソッドを使用している場合)、およびその他の脆弱性を引き起こす可能性があります。詳細はこちらを参照してください。
さらなる例
リンクに関する興味深いバグバウンティレポート (/.well-known/assetlinks.json)。
トランスポート層の検査と検証の失敗
- 証明書はAndroidアプリケーションによって常に適切に検査されるわけではありません。これらのアプリケーションは警告を見落とし、自己署名証明書を受け入れたり、場合によってはHTTP接続に戻ったりすることが一般的です。
- SSL/TLSハンドシェイク中の交渉は時々弱く、安全でない暗号スイートを使用しています。この脆弱性により、接続が中間者攻撃(MITM)に対して脆弱になり、攻撃者がデータを復号化できるようになります。
- プライベート情報の漏洩は、アプリケーションが安全なチャネルを使用して認証するが、他のトランザクションのために非安全なチャネルで通信する場合にリスクがあります。このアプローチは、セッションクッキーやユーザーの詳細などの機密データを悪意のあるエンティティからの傍受から保護できません。
証明書の検証
証明書の検証に焦点を当てます。サーバーの証明書の整合性を確認することは、セキュリティを強化するために重要です。これは、安全でないTLS構成や暗号化されていないチャネルを介して機密データを送信することが重大なリスクをもたらすため、重要です。サーバー証明書の検証と脆弱性への対処に関する詳細な手順は、このリソースで包括的に説明されています。
SSLピンニング
SSLピンニングは、アプリケーションがサーバーの証明書をアプリケーション内に保存された既知のコピーと照合するセキュリティ対策です。この方法は、MITM攻撃を防ぐために不可欠です。機密情報を扱うアプリケーションには、SSLピンニングの実装が強く推奨されます。
トラフィックの検査
HTTPトラフィックを検査するには、プロキシツールの証明書をインストールする必要があります(例:Burp)。この証明書をインストールしないと、暗号化されたトラフィックはプロキシを通じて表示されない可能性があります。カスタムCA証明書のインストールに関するガイドは、こちらをクリックしてください。
APIレベル24以上をターゲットとするアプリケーションは、プロキシのCA証明書を受け入れるためにネットワークセキュリティ構成を変更する必要があります。このステップは、暗号化されたトラフィックを検査するために重要です。ネットワークセキュリティ構成の変更に関する指示は、このチュートリアルを参照してください。
SSLピンニングのバイパス
SSLピンニングが実装されている場合、HTTPSトラフィックを検査するためにそれをバイパスする必要があります。この目的のために利用できるさまざまな方法があります:
- apkを自動的に修正してSSLピンニングをバイパスするには、apk-mitmを使用します。このオプションの最大の利点は、SSLピンニングをバイパスするためにrootが必要ないことですが、アプリケーションを削除して新しいものを再インストールする必要があり、これが常に機能するわけではありません。
- Frida(下記で説明)を使用してこの保護をバイパスすることもできます。Burp+Frida+Genymotionを使用するためのガイドはこちらです:https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/
- objectionを使用してSSLピンニングを自動的にバイパスすることも試みることができます:
objection --gadget com.package.app explore --startup-command "android sslpinning disable"
- MobSF動的分析を使用してSSLピンニングを自動的にバイパスすることも試みることができます(下記で説明)。
- まだキャプチャしていないトラフィックがあると思われる場合は、iptablesを使用してトラフィックをburpに転送することを試みることができます。このブログを読んでください:https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62
一般的なWeb脆弱性の検索
アプリケーション内で一般的なWeb脆弱性を検索することも重要です。これらの脆弱性を特定し、軽減するための詳細な情報はこの要約の範囲を超えていますが、他の場所で広範にカバーされています。
Frida
Fridaは、開発者、リバースエンジニア、セキュリティ研究者のための動的インスツルメンテーションツールキットです。
実行中のアプリケーションにアクセスし、実行時にメソッドをフックして動作を変更したり、値を変更したり、値を抽出したり、異なるコードを実行したりできます...
Androidアプリケーションをペンテストするには、Fridaの使い方を知っておく必要があります。
- Fridaの使い方を学ぶ:Fridaチュートリアル
- Fridaでのアクション用の「GUI」:https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security
- OjectionはFridaの使用を自動化するのに最適です:https://github.com/sensepost/objection , https://github.com/dpnishant/appmon
- ここでいくつかの素晴らしいFridaスクリプトを見つけることができます:https://codeshare.frida.re/
- https://erfur.github.io/blog/dev/code-injection-without-ptraceに示されているようにFridaを読み込んで、アンチデバッグ/アンチFridaメカニズムをバイパスしてみてください(ツールlinjector)。
メモリダンプ - Fridump
アプリケーションがパスワードやニーモニックのような機密情報を保存していないか確認してください。
Fridump3を使用して、アプリのメモリをダンプできます:
# With PID
python3 fridump3.py -u <PID>
# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"
これは、./dump フォルダーにメモリをダンプします。そこで、次のように grep できます:
strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+$"
Keystore内の機密データ
Androidでは、Keystoreは機密データを保存するのに最適な場所ですが、十分な権限があればアクセスすることが可能です。アプリケーションはここに平文で機密データを保存する傾向があるため、ペンテストはルートユーザーとしてこれをチェックする必要があります。さもなければ、デバイスに物理的にアクセスできる誰かがこのデータを盗むことができるかもしれません。
アプリがKeystoreにデータを保存していても、そのデータは暗号化されているべきです。
Keystore内のデータにアクセスするには、このFridaスクリプトを使用できます: https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
指紋/生体認証バイパス
次のFridaスクリプトを使用することで、Androidアプリケーションが特定の機密領域を保護するために行っている指紋認証をバイパスすることが可能になるかもしれません:
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
バックグラウンド画像
アプリケーションをバックグラウンドに置くと、Androidはアプリケーションのスナップショットを保存します。これにより、フォアグラウンドに復帰したときに、アプリがより早く読み込まれているように見えます。
しかし、このスナップショットに機密情報が含まれている場合、スナップショットにアクセスできる誰かがその情報を盗む可能性があります(アクセスするにはルート権限が必要です)。
スナップショットは通常、次の場所に保存されます: /data/system_ce/0/snapshots
Androidは、FLAG_SECUREレイアウトパラメータを設定することでスクリーンショットのキャプチャを防ぐ方法を提供します。このフラグを使用すると、ウィンドウの内容は安全と見なされ、スクリーンショットに表示されたり、非安全なディスプレイで表示されたりすることを防ぎます。
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
Android Application Analyzer
このツールは、動的分析中に異なるツールを管理するのに役立ちます: https://github.com/NotSoSecure/android_application_analyzer
Intent Injection
開発者は、これらのインテントを処理し、startActivity(...)
やsendBroadcast(...)
などのメソッドに渡すプロキシコンポーネント(アクティビティ、サービス、ブロードキャストレシーバーなど)を作成することがよくありますが、これはリスクを伴います。
危険は、攻撃者がこれらのインテントを誤って誘導することによって、非エクスポートアプリコンポーネントをトリガーしたり、機密コンテンツプロバイダーにアクセスしたりできることにあります。注目すべき例は、WebView
コンポーネントがURLをIntent
オブジェクトに変換し、Intent.parseUri(...)
を介して実行することで、悪意のあるインテント注入につながる可能性があることです。
Essential Takeaways
- Intent Injectionは、ウェブのオープンリダイレクト問題に似ています。
- 脆弱性は、
Intent
オブジェクトをエクストラとして渡すことに関与し、これが不安全な操作を実行するためにリダイレクトされる可能性があります。 - 攻撃者に非エクスポートコンポーネントやコンテンツプロバイダーを露出させる可能性があります。
WebView
のURLからIntent
への変換は、意図しないアクションを促進する可能性があります。
Android Client Side Injections and others
おそらく、あなたはウェブからこの種の脆弱性について知っているでしょう。Androidアプリケーションにおいては、これらの脆弱性に特に注意する必要があります:
- SQL Injection: 動的クエリやコンテンツプロバイダーを扱う際は、パラメータ化されたクエリを使用していることを確認してください。
- JavaScript Injection (XSS): すべてのWebViewに対してJavaScriptとプラグインのサポートが無効になっていることを確認してください(デフォルトで無効)。 More info here.
- Local File Inclusion: WebViewはファイルシステムへのアクセスを無効にする必要があります(デフォルトで有効) -
(webview.getSettings().setAllowFileAccess(false);)
。 More info here. - Eternal cookies: Androidアプリケーションがセッションを終了するとき、クッキーが取り消されない場合や、ディスクに保存されることがあります。
- Secure Flag in cookies
Automatic Analysis
MobSF
Static analysis
アプリケーションの脆弱性評価を行うための素晴らしいウェブベースのフロントエンドを使用します。動的分析も実行できますが、環境を準備する必要があります。
docker pull opensecurity/mobile-security-framework-mobsf
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
MobSFはAndroid(apk)、IOS(ipa) およびWindows(apx)アプリケーションを分析できます(WindowsアプリケーションはWindowsホストにインストールされたMobSFから分析する必要があります)。
また、AndroidまたはIOSアプリのソースコードを含むZIPファイルを作成すると(アプリケーションのルートフォルダーに移動し、すべてを選択してZIPファイルを作成)、それも分析できます。
MobSFはdiff/Compare分析を行い、VirusTotalを統合することも可能です(_MobSF/settings.py_にAPIキーを設定し、次のように有効にする必要があります: VT_ENABLED = TRUE
VT_API_KEY = <Your API key>
VT_UPLOAD = TRUE
)。VT_UPLOAD
をFalse
に設定すると、ハッシュがファイルの代わりにアップロードされます。
MobSFによる支援された動的分析
MobSFはAndroidにおける動的分析にも非常に役立ちますが、その場合はホストにMobSFとgenymotionをインストールする必要があります(VMやDockerでは動作しません)。注: まずgenymotionでVMを起動し、その後MobSFを起動する必要があります。
MobSF動的アナライザーは以下のことができます:
- アプリケーションデータをダンプ(URL、ログ、クリップボード、あなたが撮ったスクリーンショット、"Exported Activity Tester"によって作成されたスクリーンショット、メール、SQLiteデータベース、XMLファイル、その他の作成されたファイル)。これらはすべて自動的に行われますが、スクリーンショットは撮りたいときにボタンを押す必要があります。または、すべてのエクスポートされたアクティビティのスクリーンショットを取得するために"Exported Activity Tester"を押す必要があります。
- HTTPSトラフィックをキャプチャ
- Fridaを使用してランタイムの情報を取得
Androidのバージョン > 5では、Fridaが自動的に起動し、トラフィックをキャプチャするためのグローバルプロキシ設定が行われます。テストされたアプリケーションからのトラフィックのみをキャプチャします。
Frida
デフォルトでは、SSLピンニング、ルート検出、デバッガ検出をバイパスし、興味深いAPIを監視するためにいくつかのFridaスクリプトを使用します。
MobSFはまた、エクスポートされたアクティビティを呼び出し、それらのスクリーンショットを取得し、レポート用に保存することもできます。
動的テストを開始するには、緑のボタン"Start Instrumentation"を押します。"Frida Live Logs"を押すとFridaスクリプトによって生成されたログが表示され、"Live API Monitor"を押すとフックされたメソッドへのすべての呼び出し、渡された引数、返された値が表示されます(これは"Start Instrumentation"を押した後に表示されます)。
MobSFは自分のFridaスクリプトを読み込むこともできます(Fridaスクリプトの結果をMobSFに送信するにはsend()
関数を使用します)。また、読み込むことができるいくつかの事前に書かれたスクリプトもあります(MobSF/DynamicAnalyzer/tools/frida_scripts/others/
に追加できます)、それらを選択し、"Load"を押して"Start Instrumentation"を押すと、そのスクリプトのログを"Frida Live Logs"内で見ることができます。
さらに、いくつかの補助的なFrida機能があります:
- 読み込まれたクラスを列挙: すべての読み込まれたクラスを表示します
- 文字列をキャプチャ: アプリケーションを使用中にキャプチャされたすべての文字列を表示します(非常にノイジーです)
- 文字列比較をキャプチャ: 非常に便利です。比較されている2つの文字列と結果がTrueかFalseかを表示します。
- クラスメソッドを列挙: クラス名(例:"java.io.File")を入力すると、そのクラスのすべてのメソッドが表示されます。
- クラスパターンを検索: パターンでクラスを検索します
- クラスメソッドをトレース: クラス全体をトレースします(そのクラスのすべてのメソッドの入力と出力を確認します)。デフォルトではMobSFは興味深いAndroid APIメソッドをいくつかトレースします。
使用したい補助モジュールを選択したら、"Start Intrumentation"を押すと、すべての出力が"Frida Live Logs"に表示されます。
Shell
Mobsfは、動的分析ページの下部にいくつかのadbコマンド、MobSFコマンド、および一般的なシェルコマンドを持つシェルも提供します。いくつかの興味深いコマンド:
help
shell ls
activities
exported_activities
services
receivers
HTTPツール
HTTPトラフィックがキャプチャされると、"HTTP(S) Traffic"の下にキャプチャされたトラフィックの醜いビューが表示されるか、"Start HTTPTools"の緑のボタンでより良いビューが表示されます。2番目のオプションから、キャプチャされたリクエストをプロキシ(BurpやOwasp ZAPなど)に送信できます。
そのためには、Burpを起動 --> インターセプトをオフにする --> MobSBのHTTPToolsでリクエストを選択 --> "Send to Fuzzer"を押す --> プロキシアドレスを選択 (http://127.0.0.1:8080\)。
MobSFで動的分析を終えたら、"Start Web API Fuzzer"を押してHTTPリクエストをファズし、脆弱性を探すことができます。
note
MobSFで動的分析を行った後、プロキシ設定が誤って構成される可能性があり、GUIから修正できなくなることがあります。プロキシ設定を修正するには、次のコマンドを実行します:
adb shell settings put global http_proxy :0
Inspeckageを使用した支援動的分析
ツールはInspeckageから入手できます。
このツールは、動的分析を行っている間にアプリケーションで何が起こっているかを知らせるためにいくつかのフックを使用します。
Yaazhini
これはGUIを使用した静的分析を行うための優れたツールです。
Qark
このツールは、ソースコードまたはパッケージ化されたAPKのいずれかで、いくつかのセキュリティ関連のAndroidアプリケーションの脆弱性を探すように設計されています。このツールは、発見された脆弱性(公開されたアクティビティ、インテント、タップジャッキングなど)を悪用するための**「Proof-of-Concept」デプロイ可能APKとADBコマンドを作成することも可能です**。Drozerと同様に、テストデバイスをルート化する必要はありません。
pip3 install --user qark # --user is only needed if not using a virtualenv
qark --apk path/to/my.apk
qark --java path/to/parent/java/folder
qark --java path/to/specific/java/file.java
ReverseAPK
- 参照用にすべての抽出ファイルを表示
- APKファイルを自動的にJavaおよびSmali形式にデコンパイル
- 一般的な脆弱性と動作のためにAndroidManifest.xmlを分析
- 一般的な脆弱性と動作のための静的ソースコード分析
- デバイス情報
- その他多数
reverse-apk relative/path/to/APP.apk
SUPER Android Analyzer
SUPERは、Windows、MacOS X、Linuxで使用できるコマンドラインアプリケーションで、脆弱性を探すために_.apk_ファイルを分析します。これは、APKを解凍し、脆弱性を検出するための一連のルールを適用することによって行われます。
すべてのルールはrules.json
ファイルに集中しており、各企業やテスターは自分たちの必要に応じて分析するための独自のルールを作成できます。
最新のバイナリはダウンロードページからダウンロードしてください。
super-analyzer {apk_file}
StaCoAn
StaCoAnは、開発者、バグバウンティハンター、倫理的ハッカーがモバイルアプリケーションに対して静的コード分析を行うのを支援するクロスプラットフォームツールです。
このコンセプトは、モバイルアプリケーションファイル(.apkまたは.ipaファイル)をStaCoAnアプリケーションにドラッグアンドドロップすると、視覚的でポータブルなレポートが生成されるというものです。設定やワードリストを調整して、カスタマイズされた体験を得ることができます。
ダウンロード最新リリース:
./stacoan
AndroBugs
AndroBugs Frameworkは、Androidアプリケーションの潜在的なセキュリティ脆弱性を開発者やハッカーが見つけるのを助けるAndroid脆弱性分析システムです。
Windowsリリース
python androbugs.py -f [APK file]
androbugs.exe -f [APK file]
Androwarn
Androwarnは、Androidアプリケーションによって開発された潜在的な悪意のある動作を検出し、ユーザーに警告することを主な目的としたツールです。
検出は、アプリケーションのDalvikバイトコードの静的解析を使用して行われ、Smaliとして表現されます。androguard
ライブラリを使用しています。
このツールは、次のような「悪い」アプリケーションの一般的な動作を探します: テレフォニー識別子の流出、音声/ビデオフローの傍受、PIMデータの変更、任意のコード実行...
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
MARA Framework
MARAはモバイルアプリケーションの逆アセンブルおよび分析フレームワークです。これは、OWASPモバイルセキュリティ脅威に対してモバイルアプリケーションをテストするために、一般的に使用されるモバイルアプリケーションの逆アセンブルおよび分析ツールをまとめたツールです。その目的は、この作業をモバイルアプリケーションの開発者やセキュリティ専門家にとってより簡単で親しみやすくすることです。
以下のことが可能です:
- 異なるツールを使用してJavaおよびSmaliコードを抽出する
- smalisca、ClassyShark、androbugs、androwarn、APKiDを使用してAPKを分析する
- 正規表現を使用してAPKからプライベート情報を抽出する
- マニフェストを分析する
- pyssltest、testssl、whatwebを使用して見つかったドメインを分析する
- apk-deguard.comを介してAPKをデオブフスケートする
Koodous
マルウェアを検出するのに役立ちます: https://koodous.com/
コードの難読化/デオブフスケート
使用するサービスと設定によって、コードを難読化する際に秘密が難読化される場合とされない場合があります。
ProGuard
[Wikipedia](https://en.wikipedia.org/wiki/ProGuard_(software)より): ProGuardは、Javaコードを縮小、最適化、難読化するオープンソースのコマンドラインツールです。バイトコードを最適化し、未使用の命令を検出して削除することができます。ProGuardはフリーソフトウェアで、GNU一般公衆ライセンスのバージョン2の下で配布されています。
ProGuardはAndroid SDKの一部として配布され、アプリケーションをリリースモードでビルドする際に実行されます。
DexGuard
APKをデオブフスケートするためのステップバイステップガイドはhttps://blog.lexfo.fr/dexguard.htmlで見つけることができます。
(そのガイドから)最後に確認したとき、Dexguardの動作モードは次のとおりでした:
- リソースをInputStreamとして読み込む;
- 結果をFilterInputStreamから継承したクラスに渡して復号化する;
- リバースエンジニアに数分の時間を無駄にさせるために無駄な難読化を行う;
- 復号化された結果をZipInputStreamに渡してDEXファイルを取得する;
- 最後に、
loadDex
メソッドを使用して結果のDEXをリソースとして読み込む。
DeGuard
DeGuardは、Androidの難読化ツールによって行われた難読化プロセスを逆転させます。これにより、コード検査やライブラリの予測を含む多数のセキュリティ分析が可能になります。
難読化されたAPKを彼らのプラットフォームにアップロードできます。
Deobfuscate android App
これは、Androidアプリの潜在的なセキュリティ脆弱性を見つけ、AndroidアプリのコードをデオブフスケートするためのLLMツールです。GoogleのGeminiパブリックAPIを使用します。
Simplify
これは一般的なAndroidデオブフスケーターです。Simplifyはアプリを仮想的に実行してその動作を理解し、その後コードを最適化しようとします。最適化の各タイプはシンプルで一般的であるため、使用される特定の難読化のタイプは関係ありません。
APKiD
APKiDはAPKがどのように作成されたかに関する情報を提供します。多くのコンパイラ、パッカー、難読化ツール、およびその他の奇妙なものを特定します。これはAndroid用のPEiDです。
Manual
カスタム難読化を逆アセンブルする方法に関するいくつかのトリックを学ぶためにこのチュートリアルを読んでください
Labs
Androl4b
AndroL4bは、Ubuntu-mateに基づいたAndroidセキュリティ仮想マシンで、リバースエンジニアリングやマルウェア分析のための最新のフレームワーク、チュートリアル、ラボのコレクションを含んでいます。
References
- https://owasp.org/www-project-mobile-app-security/
- https://appsecwiki.com/#/ これは素晴らしいリソースのリストです
- https://maddiestone.github.io/AndroidAppRE/ Androidのクイックコース
- https://manifestsecurity.com/android-application-security/
- https://github.com/Ralireza/Android-Security-Teryaagh
- https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec
Yet to try
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。