.. | ||
drozer-tutorial | ||
frida-tutorial | ||
adb-commands.md | ||
android-applications-basics.md | ||
android-burp-suite-settings.md | ||
android-task-hijacking.md | ||
apk-decompilers.md | ||
avd-android-virtual-device.md | ||
bypass-biometric-authentication-android.md | ||
content-protocol.md | ||
exploiting-a-debuggeable-applciation.md | ||
google-ctf-2018-shall-we-play-a-game.md | ||
inspeckage-tutorial.md | ||
intent-injection.md | ||
make-apk-accept-ca-certificate.md | ||
manual-deobfuscation.md | ||
react-native-application.md | ||
README.md | ||
reversing-native-libraries.md | ||
smali-changes.md | ||
spoofing-your-location-in-play-store.md | ||
tapjacking.md | ||
webview-attacks.md |
Androidアプリのペンテスト
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- サイバーセキュリティ会社で働いていますか? HackTricksで会社を宣伝したいですか?または、PEASSの最新バージョンにアクセスしたり、HackTricksをPDFでダウンロードしたいですか?SUBSCRIPTION PLANSをチェックしてください!
- The PEASS Familyを見つけてください。独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksのグッズを手に入れましょう。
- 💬 Discordグループまたはtelegramグループに参加するか、Twitterでフォローしてください🐦@carlospolopm。
- ハッキングのトリックを共有するには、PRを hacktricks repo と hacktricks-cloud repo に提出してください。
HackenProofはすべての暗号バグバウンティの場です。
遅延なしで報酬を受け取る
HackenProofのバウンティは、顧客が報酬予算を入金した後にのみ開始されます。バグが検証された後に報酬を受け取ることができます。
Web3ペンテストの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!その成長期におけるweb3セキュリティをマスターしましょう。
Web3ハッカーレジェンドになる
各検証済みのバグごとに評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
HackenProofでサインアップして、ハッキングから報酬を得ましょう!
{% embed url="https://hackenproof.com/register" %}
Androidアプリの基礎知識
Androidセキュリティに関連する最も重要な部分やAndroidアプリの中で最も危険なコンポーネントについて知るために、このページを読むことを強くお勧めします:
{% content-ref url="android-applications-basics.md" %} android-applications-basics.md {% endcontent-ref %}
ADB(Android Debug Bridge)
これはAndroidデバイス(エミュレートまたは物理)に接続するために必要な主要なツールです。
これにより、コンピュータからデバイスをUSBまたはネットワークで制御し、ファイルをコピーしたり、アプリをインストールまたはアンインストールしたり、シェルコマンドを実行したり、バックアップを作成したり、ログを読んだりすることができます。
adbの使用方法については、次のADBコマンドのリストを参照してください。
Smali
時には、アプリケーションのコードを変更して、隠された情報(おそらくよく難読化されたパスワードやフラグ)にアクセスすることが興味深い場合があります。その場合、APKを逆コンパイルしてコードを変更し、再コンパイルすることが興味深いかもしれません。
このチュートリアルでは、APKを逆コンパイルし、Smaliコードを変更し、新しい機能を持つAPKを再コンパイルする方法を学ぶことができます。これは、動的解析中に行われるいくつかのテストの代替手段として非常に役立つ場合があります。常にこの可能性を念頭に置いてください。
その他の興味深いトリック
- Playストアでの位置のスプーフィング
- APKのダウンロード: https://apps.evozi.com/apk-downloader/, https://apkpure.com/es/, https://www.apkmirror.com/, https://apkcombo.com/es-es/apk-downloader/
- デバイスから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
静的解析
まず、APKを解析するためには、デコンパイラを使用してJavaコードを確認する必要があります。ここで利用可能なさまざまなデコンパイラに関する情報を読んでください。
興味深い情報を探す
APKの文字列を見るだけで、パスワード、URL (https://github.com/ndelphit/apkurlgrep)、APIキー、暗号化、Bluetooth UUID、トークンなど、興味深い情報を検索できます...コード実行のバックドアや認証バックドア(アプリへのハードコードされた管理者資格情報)さえも探してください。
Firebase
特にFirebaseのURLに注意し、それが誤って設定されていないか確認してください。Firebaseとその悪用方法についての詳細情報はこちらを参照してください。
アプリケーションの基本的な理解 - Manifest.xml、strings.xml
ここで言及されているいずれかのデコンパイラを使用すると、_Manifest.xml_を読むことができます。また、apkファイルの拡張子を**.zipに変更**し、解凍することもできます。
マニフェストを読むことで、以下の脆弱性を見つけることができます。
- まず、アプリケーションがデバッグ可能かどうかを確認してください。本番のAPKはデバッグ可能ではないはずです(そうでなければ他の人が接続できます)。マニフェストで属性
debuggable="true"
を探すことで、アプリケーションがデバッグ可能かどうかを確認できます。例:<application theme="@2131296387" debuggable="true"
- ここで、電話でデバッグ可能なアプリケーションを見つけて悪用する方法を学びます。
- バックアップ:
android:allowBackup
属性は、USBデバッグを有効にしたユーザーがアプリケーションデータをバックアップおよび復元できるかどうかを定義します。バックアップフラグがtrueに設定されている場合、デバイスがルート化されていなくても、攻撃者はadbを介してアプリケーションデータのバックアップを取得できます。したがって、カードの詳細、パスワードなどの機密情報を処理および保存するアプリケーションは、この設定を明示的にfalseに設定する必要があります。デフォルトでは、これを防ぐためにtrueに設定されています。 <application android:allowBackup="false"
- NetworkSecurity: アプリケーションのネットワークセキュリティは、**
android:networkSecurityConfig="@xml/network_security_config"
**でデフォルト値を上書きできます。その名前のファイルは、_res/xml._に配置される場合があります。このファイルでは、証明書ピンやHTTPトラフィックを許可するかどうかなど、重要なセキュリティ設定を構成します。ここで構成できるすべての設定についての詳細情報はこちらを参照してくださいが、次の例は特定のドメインのHTTPトラフィックを構成する方法についてのものです: <domain-config cleartextTrafficPermitted="true"> <domain includeSubdomains="true">formation-software.co.uk </domain></domain-config>
- エクスポートされたアクティビティ:マニフェスト内のエクスポートされたアクティビティをチェックしてください。これは危険な場合があります。後で動的解析でこの動作を悪用する方法を説明します。
- コンテンツプロバイダー:エクスポートされたプロバイダーが公開されている場合、興味深い情報にアクセス/変更できる場合があります。動的解析では、これらを悪用する方法を学びます。
android:name="android.support.FILE_PROVIDER_PATHS"
という属性内のFileProvidersの設定を確認してください。FileProvidersについての詳細はこちらを読んでください。- 公開されたサービス:サービスが内部で何を行っているかによって、脆弱性が悪用される可能性があります。動的解析では、これらを悪用する方法を学びます。
- ブロードキャストレシーバー:悪用の可能性がある方法を学びます。
- URLスキーム:スキームを管理するアクティビティのコードを読み、ユーザーの入力を管理する際の脆弱性を探してください。URLスキームについての詳細情報はこちら。
- minSdkVersion、targetSDKVersion、maxSdkVersion:これらはアプリが実行されるAndroidのバージョンを示しています。セキュリティの観点から、古いバージョンをサポートすることは、既知の脆弱性のあるAndroidのバージョンで実行されることを許可することを意味します。
resources.arsc/strings.xmlを読むことで、いくつかの興味深い情報を見つけることができます。
- APIキー
- カスタムスキーマ
- 他の開発者がこのファイルに保存した興味深い情報
タップジャッキング
タップジャッキングは、悪意のあるアプリケーションが起動し、被害者アプリケーションの上に配置される攻撃です。被害者アプリを視覚的に隠し、ユーザーがそれと対話するように見せかけながら、実際には被害者アプリに対して対話を行っています。
実際には、ユーザーは自分が実際のアプリを使用していると思っている間に、被害者アプリ上で操作を実行していることを知ることができません。
詳細については、以下を参照してください:
{% content-ref url="tapjacking.md" %} tapjacking.md {% endcontent-ref %}
タスクハイジャッキング
launchMode
がsingleTask
であり、taskAffinity
が定義されていないアクティビティは、タスクハイジャッキングの脆弱性があります。つまり、**アプリケーショ
破損したTLS
すべての証明書を受け入れる
何らかの理由で、開発者は時々すべての証明書を受け入れます。たとえば、ホスト名が次のようなコード行と一致しない場合でもです。
SSLSocketFactory sf = new cc(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
このテストを行う良い方法は、デバイス内でBurp CAの承認をせずに、Burpのようなプロキシを使用してトラフィックをキャプチャしようとすることです。また、Burpを使用して異なるホスト名の証明書を生成し、それを使用することもできます。
破損した暗号化
鍵管理プロセスの不備
一部の開発者は、機密データをローカルストレージに保存し、コード内でハードコード/予測可能なキーで暗号化します。これは行ってはいけません。リバースエンジニアリングによって攻撃者が機密情報を抽出することができる可能性があるためです。
安全でないおよび/または非推奨のアルゴリズムの使用
開発者は、非推奨のアルゴリズムを使用して認証のチェック、データの保存または送信を行うべきではありません。これらのアルゴリズムのいくつかは、RC4、MD4、MD5、SHA1などです。たとえば、パスワードを保存するためにハッシュが使用される場合、ソルトを使用したハッシュブルートフォース耐性が必要です。
その他のチェック
- APKを難読化することをお勧めします。これにより、逆向きエンジニアリングの作業が攻撃者にとって困難になります。
- アプリが機密情報(銀行アプリなど)である場合、モバイルがルート化されているかどうかを独自にチェックし、それに応じて動作する必要があります。
- アプリが機密情報(銀行アプリなど)である場合、エミュレータが使用されているかどうかをチェックする必要があります。
- アプリが機密情報(銀行アプリなど)である場合、実行する前に独自の整合性をチェックする必要があります。それが変更されたかどうかを確認するためです。
- APKのビルドに使用されたコンパイラ/パッカー/難読化ツールをチェックするために、APKiDを使用します。
React Nativeアプリケーション
ReactアプリケーションのJavaScriptコードに簡単にアクセスする方法を学ぶには、次のページを読んでください:
{% content-ref url="react-native-application.md" %} react-native-application.md {% endcontent-ref %}
Xamarinアプリケーション
XamarinアプリケーションのC#コードに簡単にアクセスする方法を学ぶには、次のページを読んでください:
{% content-ref url="../xamarin-apps.md" %} xamarin-apps.md {% endcontent-ref %}
スーパーパックされたアプリケーション
このブログ記事によると、スーパーパックはアプリケーションのコンテンツを1つのファイルに圧縮するメタアルゴリズムです。このブログでは、この種のアプリを解凍するアプリを作成する可能性について説明しています...そして、アプリケーションを実行し、ファイルシステムから解凍されたファイルを収集するより速い方法もあります。
自動静的コード分析
ツールmariana-trenchは、アプリケーションのコードをスキャンして脆弱性を見つけることができます。このツールには、既知のソース(ユーザーによって制御される入力の場所をツールに示す)とシンク(悪意のあるユーザーの入力が損害を引き起こす可能性のある危険な場所をツールに示す)が含まれています。また、これらのルールは、脆弱性を示すソース-シンクの組み合わせを示しています。
この知識を活用して、mariana-trenchはコードをレビューし、可能な脆弱性を見つけます。
漏洩した秘密情報
アプリケーションには、発見できるかもしれない秘密情報(APIキー、パスワード、隠されたURL、サブドメインなど)が含まれている場合があります。https://github.com/dwisiswant0/apkleaksのようなツールを使用してこれらの情報を発見できます。
バイオメトリック認証のバイパス
{% content-ref url="bypass-biometric-authentication-android.md" %} bypass-biometric-authentication-android.md {% endcontent-ref %}
その他の興味深い機能
- コードの実行:
Runtime.exec(), ProcessBuilder(), native code:system()
- SMSの送信:
sendTextMessage, sendMultipartTestMessage
native
と宣言されたネイティブ関数:public native, System.loadLibrary, System.load
- ネイティブ関数をリバースエンジニアリングする方法については、こちらを読んでください
その他のトリック
{% content-ref url="content-protocol.md" %} content-protocol.md {% endcontent-ref %}
HackenProofはすべての暗号バグバウンティの場所です。
遅延なしで報酬を受け取る
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
Web3ペントestingの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
Web3ハッカーレジェンドになる
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
HackenProofでサインアップして、ハッキングから報酬を得ましょう!
{% embed url="https://hackenproof.com/register" %}
動的解析
まず、アプリケーションとすべての環境(Burp CA証明書、Drozer、Fridaなど)をインストールできる環境が必要です。したがって、ルート化されたデバイス(エミュレートされているかどうかに関係なく)が非常におすすめです。
オンライン動的解析
https://appetize.io/で無料アカウントを作成できます。このプラットフォームでは、APKをアップロードして実行することができるため、APKの動作を確認するのに便利です。
ウェブ上でアプリケーションのログを表示し、adbを介して接続することもできます。
ADB
物理デバイスを使用する
デバッグオプションを有効にする必要があります。また、ルート化できると良いです。
- 設定を開きます。
- (Android 8.0以降) システムを選択します。
- 端末についてを選択します。
- ビルド番号を7回押します。
- 戻り、開発者オプションを見つけます。
アプリケーションをインストールした後、最初に行うべきことは、それを試して調査し、それが何をするのか、どのように動作するのかを調べ、それに慣れることです。
MobSFの動的解析+pidcatを使用して、この初期の動的解析を実行することをお勧めします。これにより、MobSFが後で確認できる多くの興味深いデータをキャプチャしながら、アプリケーションの動作を学ぶことができます。
意図しないデータ漏洩
ログ
開発者はデバッグ情報を公開することがよくあります。そのため、READ_LOGS
権限を持つアプリケーションは、それらのログにアクセスし、それを通じて機密情報を取得することができます。
アプリケーションを操作する際には、作成されたログを読むためにpidcat_(おすすめ、使用しやすく読みやすい)_またはadb logcatを使用して、機密情報を探します。
{% hint style="warning" %}
Android 4.0以降の後のバージョンでは、アプリケーションは自分自身のログにのみアクセスできるようになりました。したがって、アプリケーションは他のアプリのログにアクセスすることはできません。
それでも、機密情報をログに記録しないことをお勧めします。
{% endhint %}
コピー/ペーストバッファのキャッシュ
Androidは、Androidアプリケーションでコピー&ペースト機能を提供するためのクリップボードベースのフレームワークを提供しています。しかし、これにより、他のアプリケーションが一部の機密データを含むクリップボードにアクセスできるという深刻な問題が発生します。機密な部分のコピー/ペースト機能は無効化する必要があります。たとえば、クレジットカードの詳細をコピーすることを無効にします。
クラッシュログ
アプリケーションが実行中にクラッシュし、ログをどこかに保存する場合、それらのログは、特にAndroidアプリケーションが逆アセンブルできない場合に、攻撃者にとって役立つことがあります。そのため、アプリケーションがクラッシュしたときにログを作成しないようにし、ログがネットワーク経由で送信される場合は、SSLチャネルを介して送信されることを確認してください。
ペンテスターとして、これらのログを確認してみてください。
サードパーティへの解析データの送信
ほとんどのアプリケーションは、Google AdSenseなどの他のサービスをアプリケーションで使用しますが、時には機密データやそのサービスに送信する必要のないデータが漏洩することがあります。これは、開発者が機能を適切に実装していないために発生する可能性があります。アプリケーションのトラフィックを傍受して、サードパーティに機密データが送信されているかどうかを確認できます。
SQLiteデータベース
ほとんどのアプリケーションは、情報を保存するために内部のSQLiteデータベースを使用します。ペンテスト中に作成されたデータベース、テーブルとカラムの名前、および保存されているデータを確認してください。そこには機密情報が含まれている可能性があります(これは脆弱性です)。
データベースは、/data/data/the.package.name/databases
のように/data/data/com.mwr.example.sieve/databases
に配置されるべきです。
データベースが機密情報を保存しており、暗号化されているが、アプリケーション内にパスワードが見つかる場合、それは依然として脆弱性です。
.tables
を使用してテーブルを列挙し、.schema <table_name>
を使用してテーブルの列を列挙します。
Drozer(エクスポートされたアクティビティ、コンテンツプロバイダ、サービスの攻撃)
Drozerを使用すると、Androidアプリの役割を仮定し、他のアプリと対話することができます。Androidのプロセス間通信(IPC)メカニズムを利用したり、基礎となるオペレーティングシステムと対話したりするなど、インストールされたアプリケーションができることは何でもできます。Drozerガイドから。
Drozerは、以下のセクションで学ぶように、エクスポートされたアクティビティ、エクスポートされたサービス、コンテンツプロバイダを攻撃するための便利なツールです。
エクスポートされたアクティビティの攻撃
Androidアクティビティとは何かを思い出したい場合は、こちらを読んでください。
また、アクティビティのコードはonCreate
メソッドで始まります。
認証バイパス
アクティビティがエクスポートされている場合、外部のアプリからその画面を呼び出すことができます。したがって、機密情報を含むアクティビティがエクスポートされている場合、認証メカニズムをバイパスしてアクセスすることができます。
Drozerを使用してエクスポートされたアクティビティを攻撃する方法を学びましょう。
また、adbからエクスポートされたアクティビティを起動することもできます:
- パッケージ名はcom.example.demoです。
- エクスポートされたアクティビティ名はcom.example.test.MainActivityです。
adb shell am start -n com.example.demo/com.example.test.MainActivity
注意: MobSFは、アクティビティのandroid:launchMode
としての_singleTask/singleInstance_の使用を悪意のあるものとして検出しますが、こちらによると、これは古いバージョン(APIバージョン<21)ではのみ危険です。
{% hint style="info" %} 注意:認証バイパスは常に脆弱性ではありません。バイパスの動作方法と公開される情報によって異なります。 {% endhint %}
機密情報の漏洩
アクティビティは結果を返すこともできます。エクスポートされて保護されていないアクティビティが、**setResult
**メソッドを呼び出し、機密情報を返す場合、機密情報の漏洩が発生します。
タップジャッキング
タップジャッキングが防止されていない場合、エクスポートされたアクティビティを悪用して、ユーザーに予期しない操作を実行させることができます。タップジャッキングとは何かについての詳細は、リンクを参照してください。
コンテンツプロバイダの悪用 - 機密情報へのアクセスと操作
コンテンツプロバイダとは何かを思い出したい場合は、こちらを読んでください。
コンテンツプロバイダは基本的にはデータの共有に使用されます。アプリに利用可能なコンテンツプロバイダがある場合、それらから機密データを抽出することができるかもしれません。また、SQLインジェクションやパストラバーサルの可能性もテストすることが重要です。これらは脆弱性のある可能性があります。
Drozerを使用してコンテンツプロバイダを悪用する方法を学びましょう。
サービスの悪用
サービスとは何かを思い出したい場合は、こちらを読んでください。
サービスのアクションは、onStartCommand
メソッドで開始されます。
サービスは基本的にはデータを受け取り、処理し、応答(またはしない場合もあります)するものです。したがって、アプリケーションがいくつかのサービスをエクスポートしている場合は、コードをチェックして何をしているのかを理解し、機密情報の抽出、認証手段のバイパスなどを動的にテストする必要があります。
Drozerを使用してサービスを悪用する方法を学びましょう。
ブロードキャストレシーバの悪用
ブロードキャストレシーバとは何かを思い出したい場合は、こちらを読んでください。
ブロードキャストレシーバのアクションは、onReceive
メソッドで開始されます。
ブロードキャストレシーバは特定のタイプのメッセージを待機しています。レシーバがメッセージをどのように処理するかによって、脆弱性がある可能性があります。
Drozerを使用してブロードキャストレシーバを悪用する方法を学びましょう。
スキーム/ディープリンクの悪用
MobSFのようなツールやこのスクリプトなどを使用して、ディープリンクを手動で検索できます。
adbまたはブラウザを使用して、宣言されたスキームを開くことができます。
{% code overflow="wrap" %}
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
{% endcode %}
パッケージ名を省略することができることに注意してください。モバイルは自動的にそのリンクを開くべきアプリを呼び出します。
{% code overflow="wrap" %}
<!-- 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>
{% endcode %}
実行されるコード
アプリで実行されるコードを見つけるためには、ディープリンクによって呼び出されるアクティビティに移動し、**onNewIntent
**という関数を検索します。
機密情報
ディープリンクを見つけるたびに、URLパラメータを介して機密データ(パスワードなど)が送信されていないかを確認してください。なぜなら、他のアプリケーションがディープリンクをなりすましてそのデータを盗む可能性があるからです。
パス内のパラメータ
URLのパス内にパラメータを使用しているディープリンクがあるかどうかも確認する必要があります。例えば、https://api.example.com/v1/users/{username}
のような場合、example://app/users?username=../../unwanted-endpoint%3fparam=value
のようにパストラバーサルを強制することができます。
ただし、アプリケーション内で正しいエンドポイントを見つけることができれば、オープンリダイレクト(パスの一部がドメイン名として使用される場合)、アカウント乗っ取り(CSRFトークンなしでユーザーの詳細を変更できる場合)、その他の脆弱性を引き起こす可能性があります。詳細はこちらを参照してください。
その他の例
リンクに関する興味深いバグ報奨金レポートはこちらです。
不十分なトランスポート層保護
- 証明書の検査の不足: Androidアプリケーションは、自己署名証明書を受け取ることができる任意の証明書を無視して受け入れることがあります。一部のアプリケーションは、トラフィックをHTTP接続経由で送信します。
- 弱いハンドシェイクの交渉: アプリケーションとサーバーはSSL/TLSハンドシェイクを実行しますが、MITM攻撃に対して脆弱な暗号スイートを使用します。したがって、攻撃者はその接続を簡単に復号化できます。
- プライバシー情報の漏洩: アプリケーションはセキュアなチャネルを介して認証を行うことがありますが、その他の接続は非セキュアなチャネルを介して行われます。これは、セッションクッキーやユーザーデータなどの他の機密データが悪意のあるユーザーによって傍受される可能性があるため、アプリケーションのセキュリティには貢献しません。
提示された3つのシナリオのうち、証明書の正当性を検証する方法について説明します。他の2つのシナリオは、サーバーのTLS設定とアプリケーションが暗号化されていないデータを送信しているかどうかに依存します。ペンテスターは、サーバーのTLS設定を自分でチェックし、こちらで機密情報が暗号化されていない/脆弱なチャネルを介して送信されていないかを検出する必要があります。
この種の脆弱性を発見し修正する方法の詳細はこちらを参照してください。
SSLピニング
デフォルトでは、SSL接続を行う際に、クライアント(Androidアプリ)はサーバーの証明書が信頼された(ルート)証明書に対して検証可能な信頼チェーンを持ち、要求されたホスト名と一致するかどうかをチェックします。これにより、**中間者攻撃(MITM)**の問題が発生します。
証明書ピニングでは、Androidアプリケーション自体がサーバーの証明書を含み、同じ証明書が提示された場合にのみデータを送信します。
機密情報が送信される可能性のあるサイトには、SSLピニングを適用することをお勧めします。
HTTPトラフィックの検査
まず、使用するプロキシツール(おそらくBurp)の証明書をインストールする必要があります。プロキシツールのCA証明書をインストールしない場合、プロキシで暗号化されたトラフィックは表示されません。
カスタムCA証明書をインストールする方法については、このガイドを読んでください。
**APIレベル24以上を対象とするアプリケーションの場合、デバイスにBurp CA証明書をインストールするだけでは不十分です。この新しい保護をバイパスするには、ネットワークセキュリティ構成ファイルを変更する必要があります。したがって、このファイルを変更してCA証明書を承認するか、こちらのページを読んで、アプリケーションがデバイスにインストールされたすべての証明書を再度受け入れるようにする方法について学んでください。
SSLピニング
すでに2つ前でSSLピニングについて説明しました。アプリケーションでSSLピニングが実装されている場合、HTTPSトラフィックを検査するためにはそれをバイパスする必要があります。
ここでは、この保護をバイパスするために使用したいくつかのオプションを紹介します。
- apk-mitmを使用して、自動的にapkを変更してSSLピニングをバイパスします。このオプションの最大の利点は、SSLピニングをバイパスするためにルート化が必要ないことですが、アプリケーションを削除して新しいものを再インストールする必要があり、これが常に機能するわけではありません。
- この保護をバイパスするためにFrida(以下で説明)を使用することもできます。Burp+Frida+Genymotionの使用方法については、こちらのガイドを参照してください。
- objectionを使用して、自動的にSSLピニングをバイパスすることもできます:
objection --gadget com.package.app explore --startup-command "android sslpinning disable"
- MobSFの動的解析を使用して、自動的にSSLピニングをバイパスすることもできます(以下で説明)。
- まだキャプチャしていないトラフィックがあると思う場合は、iptablesを使用してトラフィックをburpに転送することもできます
メモリのダンプ - Fridump
アプリケーションがパスワードやニーモニックなど、保存すべきでない機密情報をメモリ内に保存していないかを確認します。
Fridump3を使用して、アプリのメモリをダンプすることができます。以下のコマンドを実行します。
# With PID
python3 fridump3.py -u <PID>
# With name
frida-ps -Uai
python3 fridump3.py -u "<Name>"
これにより、./dumpフォルダにメモリがダンプされます。そこで、次のようにgrepを使用して検索できます:
{% code overflow="wrap" %}
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]+$"
{% endcode %}
Keystoreにおける機密データ
Androidでは、Keystoreは機密データを保存するための最適な場所ですが、特権を持っていればそれにアクセスすることができます。アプリケーションはここに機密データを平文で保存する傾向があるため、ペントテストではrootユーザーまたはデバイスへの物理的アクセスを持つ人物がこのデータを盗むことができるかどうかを確認する必要があります。
たとえアプリが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アプリケーションが実行している特定の機密領域を保護するために行っている指紋認証をバイパスすることができるかもしれません。
{% code overflow="wrap" %}
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
{% endcode %}
背景画像
アプリケーションをバックグラウンドに置くと、Androidはアプリケーションのスナップショットを保存します。そのため、アプリがフォアグラウンドに復元されると、アプリよりも先に画像の読み込みが開始されるため、アプリがより速く読み込まれたように見えます。
ただし、このスナップショットには機密情報が含まれている場合がありますので、スナップショットにアクセス権限を持つ人物がその情報を盗む可能性があります(アクセスするにはルート権限が必要です)。
スナップショットは通常、以下の場所に保存されます:/data/system_ce/0/snapshots
Androidは、FLAG_SECUREレイアウトパラメータを設定することで、スクリーンショットのキャプチャを防止する方法を提供しています。このフラグを使用すると、ウィンドウの内容はセキュアとして扱われ、スクリーンショットに表示されたり、非セキュアなディスプレイで表示されたりすることが防止されます。
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
Androidアプリケーションアナライザー
このツールは、動的解析中にさまざまなツールを管理するのに役立ちます:https://github.com/NotSoSecure/android_application_analyzer
インテントインジェクション
この脆弱性は、Webセキュリティのオープンリダイレクトに似ています。クラスIntent
はParcelable
であるため、このクラスに属するオブジェクトは、別のIntent
オブジェクトの追加データとして渡すことができます。
多くの開発者は、この機能を利用して、startActivity(...)
、sendBroadcast(...)
などの危険なメソッドに埋め込まれたIntent
を受け取り、それを渡すプロキシコンポーネント(アクティビティ、ブロードキャストレシーバー、サービス)を作成します。
これは危険です。なぜなら、攻撃者はアプリを強制的に起動させることができる非公開コンポーネントを起動させることができず、または攻撃者にコンテンツプロバイダへのアクセス権限を与えることができるからです。WebView
は、Intent.parseUri(...)
メソッドを使用して、文字列からIntent
オブジェクトにURLを変更し、それをstartActivity(...)
に渡すこともあります。
Androidクライアントサイドインジェクションとその他
おそらく、Webからこの種の脆弱性については知っているでしょう。Androidアプリケーションでは、特に次の脆弱性に注意する必要があります:
- SQLインジェクション: 動的クエリやコンテンツプロバイダを扱う場合は、パラメータ化されたクエリを使用していることを確認してください。
- JavaScriptインジェクション(XSS): 任意のWebViewでJavaScriptとプラグインサポートが無効になっていることを確認してください(デフォルトで無効になっています)。詳細はこちら。
- ローカルファイルインクルージョン: 任意のWebViewでファイルシステムアクセスが無効になっていることを確認してください(デフォルトで有効になっています)(
webview.getSettings().setAllowFileAccess(false);
)。詳細はこちら。 - 永続的なクッキー: Androidアプリケーションがセッションを終了する場合、クッキーが取り消されない場合があります。また、クッキーがディスクに保存される場合もあります。
- クッキーのセキュアフラグ
HackenProofはすべての暗号バグ報奨金の場所です。
遅延なしで報酬を受け取る
HackenProofの報奨金は、顧客が報奨金予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
Web3ペントテストの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長するWeb3セキュリティをマスターしましょう。
Web3ハッカーレジェンドになる
各検証済みのバグで評判ポイントを獲得し、週間リーダーボードのトップを制覇しましょう。
HackenProofでサインアップしてハッキングから報酬を得ましょう!
{% embed url="https://hackenproof.com/register" %}
自動解析
MobSF
静的解析
アプリケーションの脆弱性評価を行うための素晴らしいWebベースのフロントエンド。動的解析も実行できます(ただし、環境を準備する必要があります)。
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スクリプトによって生成されたログを表示するには "Frida Live Logs" を押し、フックされたメソッドの呼び出し、渡された引数、および返された値を表示するには "Live API Monitor" を押します(これは "Start Instrumentation" を押した後に表示されます)。
MobSFはまた、独自のFridaスクリプトをロードすることもできます(MobSFに結果を送信するためにFridayスクリプトの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"で確認できます。
シェル
MobSFには、動的分析ページの一番下に、いくつかのadbコマンド、MobSFコマンド、および一般的なシェルコマンドが含まれています。いくつかの興味深いコマンド:
help
shell ls
activities
exported_activities
services
receivers
HTTPツール
HTTPトラフィックがキャプチャされると、キャプチャされたトラフィックの見た目は「HTTP(S) Traffic」の下にある醜いビューで表示されます。または、「Start HTTPTools」の緑色のボタンでより見やすいビューを表示することもできます。2番目のオプションから、キャプチャされたリクエストをBurpやOwasp ZAPのようなプロキシに送信することができます。
そのためには、Burpを起動してください --> Interceptをオフにしてください --> MobSB HTTPToolsでリクエストを選択 --> "Send to Fuzzer" を押してください --> (http://127.0.0.1:8080\) のようなプロキシアドレスを選択してください。
MobSFで動的解析を終えたら、「Start Web API Fuzzer」を押して、HTTPリクエストをファズし、脆弱性を探すことができます。
{% hint style="info" %} MobSFで動的解析を行った後、プロキシの設定が誤っている場合、GUIから修正することができません。プロキシの設定を修正するには、以下の手順を実行してください:
adb shell settings put global http_proxy :0
{% endhint %}
Inspeckageによるアシストされた動的解析
Inspeckageからツールを入手できます。
このツールは、フックを使用して、動的解析を実行する際にアプリケーションで何が起こっているかを知ることができます。
{% content-ref url="inspeckage-tutorial.md" %} inspeckage-tutorial.md {% endcontent-ref %}
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の分析
- 一般的な脆弱性と動作のための静的ソースコード分析
- デバイス情報
- インテント
- コマンドの実行
- SQLiteの参照
- ロギングの参照
- コンテンツプロバイダー
- ブロードキャストレシーバー
- サービスの参照
- ファイルの参照
- 暗号の参照
- ハードコードされた秘密情報
- URL
- ネットワーク接続
- SSLの参照
- WebViewの参照
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は、Mobile Application Reverse engineering and Analysis Frameworkの略称です。このツールは、一般的に使用されるモバイルアプリケーションの逆向きエンジニアリングと分析ツールを組み合わせて、OWASPモバイルセキュリティの脅威に対するモバイルアプリケーションのテストを支援します。その目的は、モバイルアプリケーション開発者とセキュリティ専門家にとって、このタスクをより簡単かつ使いやすくすることです。
以下のことができます:
- 異なるツールを使用してJavaおよびSmaliコードを抽出する
- smalisca、ClassyShark、androbugs、androwarn、APKiDを使用してAPKを分析する
- 正規表現を使用してAPKからプライベート情報を抽出する
- マニフェストを分析する
- pyssltest、testssl、whatwebを使用して見つかったドメインを分析する
- apk-deguard.comを介してAPKの難読化を解除する
Koodous
マルウェアを検出するのに便利です:https://koodous.com/
コードの難読化/難読化解除
コードを難読化するために使用するサービスと設定によっては、秘密情報が難読化される場合とされない場合があります。
ProGuard
ProGuardは、Javaコードを縮小、最適化、難読化するためのオープンソースのコマンドラインツールです。バイトコードを最適化し、未使用の命令を検出して削除することができます。ProGuardは無料のソフトウェアであり、GNU General Public License、バージョン2で配布されています。
ProGuardはAndroid SDKの一部として配布され、リリースモードでアプリケーションをビルドする際に実行されます。
参照元:https://en.wikipedia.org/wiki/ProGuard_(software)
DexGuard
APKの難読化を解除するためのステップバイステップガイドはhttps://blog.lexfo.fr/dexguard.htmlにあります。
(そのガイドから)最後に確認したとき、Dexguardの動作モードは次のようでした:
- リソースをInputStreamとしてロードする
- 結果をFilterInputStreamを継承したクラスにフィードして復号化する
- いくつかの無駄な難読化を行い、リバースエンジニアから数分間の時間を無駄にする
- 復号化された結果をZipInputStreamにフィードしてDEXファイルを取得する
- 最終的に、
loadDex
メソッドを使用して生成されたDEXをリソースとしてロードする
DeGuard
DeGuardは、Androidの難読化ツールによって実行された難読化のプロセスを逆転させます。これにより、コードの検査やライブラリの予測など、さまざまなセキュリティ分析が可能になります。
難読化されたAPKをプラットフォームにアップロードすることができます。
Simplify
これは汎用のAndroid難読化解除ツールです。Simplifyはアプリを仮想的に実行してその動作を理解し、コードを最適化して、動作は同じままで人間にとって理解しやすくします。各最適化タイプはシンプルで汎用的なため、特定の難読化タイプは問題ありません。
APKiD
APKiDは、APKの作成方法に関する情報を提供します。コンパイラ、パッカー、難読化ツール、その他の奇妙なものを識別します。これはAndroidのPEiDです。
マニュアル
このチュートリアルを読んで、カスタムの難読化を解除するためのトリックを学びましょう
ラボ
Androl4b
AndroL4bは、ubuntu-mateをベースにしたAndroidセキュリティ仮想マシンであり、リバースエンジニアリングとマルウェア分析のためのさまざまなセキュリティギークと研究者からの最新のフレームワーク、チュートリアル、ラボを含んでいます。
OWASP
{% embed url="https://github.com/OWASP/owasp-mstg%0Ahttps://mobile-security.gitbook.io/mobile-security-testing-guide/ios-testing-guide/0x06g-testing-network-communication" %}
Gitリポジトリ
https://github.com/riddhi-shree/nullCommunity/tree/master/Android
https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec
参考文献
詳細については、以下を参照してください:
- https://appsecwiki.com/#/ リソースの素晴らしいリストです
- https://maddiestone.github.io/AndroidAppRE/ Androidクイックコース
- https://manifestsecurity.com/android-application-security/
- https://github.com/Ralireza/Android-Security-Teryaagh
テストするために
HackenProofは、すべての暗号バグバウンティの場所です。
遅延なしで報酬を受け取る
HackenProofのバウンティは、顧客が報酬予算を入金した後に開始されます。バグが検証された後に報酬を受け取ることができます。
Web3ペントestingの経験を積む
ブロックチェーンプロトコルとスマートコントラクトは新しいインターネットです!成長する日々のWeb3
- The PEASS Familyを発見しましょう。これは私たちの独占的なNFTのコレクションです。
- 公式のPEASS&HackTricksグッズを手に入れましょう。
- 💬 Discordグループに参加するか、Telegramグループに参加するか、私をTwitterで🐦@carlospolopmをフォローしましょう。
- 自分のハッキングテクニックを共有するために、hacktricksリポジトリとhacktricks-cloudリポジトリにPRを提出しましょう。