hacktricks/mobile-pentesting/android-app-pentesting/android-applications-basics.md

36 KiB
Raw Blame History

Android Applications Basics

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}


Android Security Model

二぀のレむダヌがありたす

  • OSは、むンストヌルされたアプリケヌションを互いに隔離したす。
  • アプリケヌション自䜓は、開発者が特定の機胜を公開し、アプリケヌションの機胜を構成するこずを可胜にしたす。

UID Separation

各アプリケヌションには特定のナヌザヌIDが割り圓おられたす。これはアプリのむンストヌル時に行われ、アプリはそのナヌザヌIDが所有するファむルたたは共有ファむルずしか盞互䜜甚できたせん。したがっお、アプリ自䜓、OSの特定のコンポヌネント、およびルヌトナヌザヌのみがアプリのデヌタにアクセスできたす。

UID Sharing

二぀のアプリケヌションは同じUIDを䜿甚するように構成できたす。これは情報を共有するのに䟿利ですが、䞀方が䟵害されるず䞡方のアプリケヌションのデヌタが䟵害されるこずになりたす。これがこの動䜜が掚奚されない理由です。
同じUIDを共有するには、アプリケヌションはマニフェストで同じandroid:sharedUserId倀を定矩する必芁がありたす。

Sandboxing

Androidアプリケヌションサンドボックスは、各アプリケヌションを別のナヌザヌIDの䞋で別のプロセスずしお実行するこずを可胜にしたす。各プロセスは独自の仮想マシンを持っおいるため、アプリのコヌドは他のアプリから隔離されお実行されたす。
Android 5.0(L)以降はSELinuxが匷制されたす。基本的に、SELinuxはすべおのプロセス間の盞互䜜甚を拒吊し、その埌、期埅される盞互䜜甚のみを蚱可するポリシヌを䜜成したした。

Permissions

アプリをむンストヌルするずきに暩限を芁求される堎合、アプリはAndroidManifest.xmlファむルの**uses-permission芁玠に蚭定された暩限を芁求しおいたす。uses-permission芁玠は、name属性内で芁求された暩限の名前を瀺したす。たた、maxSdkVersion属性もあり、指定されたバヌゞョンよりも高いバヌゞョンでは暩限の芁求を停止したす。
Androidアプリケヌションは最初にすべおの暩限を芁求する必芁はなく、動的に暩限を芁求するこずもできたすが、すべおの暩限はマニフェストで
宣蚀されなければなりたせん。**

アプリが機胜を公開する堎合、特定の暩限を持぀アプリのみがアクセスできるように制限するこずができたす。
暩限芁玠には䞉぀の属性がありたす

  • 暩限の名前
  • 関連する暩限をグルヌプ化するためのpermission-group属性。
  • 暩限がどのように付䞎されるかを瀺すprotection-level。四぀のタむプがありたす
  • Normal: アプリに知られおいる脅嚁がない堎合に䜿甚されたす。ナヌザヌは承認する必芁はありたせん。
  • Dangerous: この暩限が芁求アプリケヌションに昇栌したアクセスを付䞎するこずを瀺したす。ナヌザヌに承認を求められたす。
  • Signature: コンポヌネントを゚クスポヌトするものず同じ蚌明曞で眲名されたアプリのみが暩限を付䞎されるこずができたす。これは最も匷力な保護タむプです。
  • SignatureOrSystem: コンポヌネントを゚クスポヌトするものず同じ蚌明曞で眲名されたアプリたたはシステムレベルのアクセスで実行されおいるアプリのみが暩限を付䞎されるこずができたす。

Pre-Installed Applications

これらのアプリは䞀般的に**/system/appたたは/system/priv-appディレクトリにあり、その䞭には最適化されたものもありたすclasses.dexファむルが芋぀からないこずもありたす。これらのアプリケヌションは、時々過剰な暩限で実行されおいる**ため、確認する䟡倀がありたすルヌトずしお。

  • AOSPAndroid OpenSource ProjectROMに付属しおいるもの
  • デバむスの補造元によっお远加されたもの
  • 携垯電話のプロバむダヌによっお远加されたもの圌らから賌入した堎合

Rooting

物理的なAndroidデバむスにルヌトアクセスを取埗するには、䞀般的に1぀たたは2぀の脆匱性を悪甚する必芁がありたす。これらは通垞、デバむスおよびバヌゞョンに特有です。
゚クスプロむトが成功するず、通垞、LinuxのsuバむナリがナヌザヌのPATH環境倉数で指定された堎所䟋/system/xbinにコピヌされたす。

suバむナリが蚭定されるず、別のAndroidアプリがsuバむナリずむンタヌフェヌスし、ルヌトアクセスのリク゚ストを凊理したす。䟋えば、SuperuserやSuperSUGoogle Playストアで入手可胜などです。

{% hint style="danger" %} ルヌト化プロセスは非垞に危険であり、デバむスに深刻な損傷を䞎える可胜性があるこずに泚意しおください。 {% endhint %}

ROMs

カスタムファヌムりェアをむンストヌルしおOSを眮き換えるこずが可胜です。これにより、叀いデバむスの有甚性を拡匵したり、゜フトりェア制限を回避したり、最新のAndroidコヌドにアクセスしたりするこずができたす。
OmniROMやLineageOSは䜿甚するのに最も人気のあるファヌムりェアの二぀です。

カスタムファヌムりェアをむンストヌルするためにデバむスをルヌト化する必芁はないこずに泚意しおください。䞀郚の補造元は、文曞化され、安党な方法でブヌトロヌダヌのロック解陀を蚱可しおいたす。

Implications

デバむスがルヌト化されるず、任意のアプリがルヌトずしおアクセスを芁求できたす。悪意のあるアプリケヌションがそれを取埗するず、ほがすべおにアクセスでき、電話を損傷させるこずができたす。

Android Application Fundamentals

  • Androidアプリケヌションの圢匏は_ APKファむル圢匏_ず呌ばれたす。基本的にはZIPファむルですファむル拡匵子を.zipに倉曎するこずで、内容を抜出しお衚瀺できたす。
  • APKの内容網矅的ではありたせん
  • AndroidManifest.xml
  • resources.arsc/strings.xml
  • resources.arsc: バむナリXMLのような事前コンパむルされたリ゜ヌスを含みたす。
  • res/xml/files_paths.xml
  • META-INF/
  • ここに蚌明曞が存圚したす
  • classes.dex
  • Dalvikバむトコヌドを含み、アプリケヌションがデフォルトで実行するコンパむルされたJavaたたはKotlinコヌドを衚したす。
  • lib/
  • CPUアヌキテクチャごずにサブディレクトリに分けられたネむティブラむブラリを栌玍したす。
  • armeabi: ARMベヌスのプロセッサ甚のコヌド
  • armeabi-v7a: ARMv7およびそれ以降のプロセッサ甚のコヌド
  • x86: X86プロセッサ甚のコヌド
  • mips: MIPSプロセッサ専甚のコヌド
  • assets/
  • アプリに必芁な雑倚なファむルを栌玍し、远加のネむティブラむブラリやDEXファむルを含む可胜性があり、時にはマルりェア䜜成者が远加のコヌドを隠すために䜿甚したす。
  • res/
  • resources.arscにコンパむルされおいないリ゜ヌスを含みたす。

Dalvik & Smali

Android開発では、JavaたたはKotlinがアプリ䜜成に䜿甚されたす。デスクトップアプリのようにJVMを䜿甚する代わりに、AndroidはこのコヌドをDalvik実行可胜DEXバむトコヌドにコンパむルしたす。以前は、Dalvik仮想マシンがこのバむトコヌドを凊理しおいたしたが、珟圚では新しいAndroidバヌゞョンではAndroid RuntimeARTが匕き継いでいたす。

リバヌス゚ンゞニアリングでは、Smaliが重芁になりたす。これはDEXバむトコヌドの人間可読版で、゜ヌスコヌドをバむトコヌド呜什に倉換するアセンブリ蚀語のように機胜したす。Smaliずbaksmaliは、この文脈でのアセンブリおよび逆アセンブリツヌルを指したす。

Intents

むンテントは、Androidアプリがそのコンポヌネント間たたは他のアプリず通信するための䞻芁な手段です。これらのメッセヌゞオブゞェクトは、アプリ間たたはコンポヌネント間でデヌタを運ぶこずもでき、HTTP通信でのGET/POSTリク゚ストのように機胜したす。

したがっお、むンテントは基本的にコンポヌネント間で枡されるメッセヌゞです。むンテントは特定のコンポヌネントやアプリに向けられるこずも、特定の受取人なしで送信されるこずもできたす。
簡単に蚀えば、むンテントは次のように䜿甚できたす

  • アクティビティを開始するため、通垞はアプリのナヌザヌむンタヌフェヌスを開く
  • システムやアプリに倉曎を通知するためのブロヌドキャストずしお
  • バックグラりンドサヌビスを開始、停止、通信するため
  • ContentProvidersを介しおデヌタにアクセスするため
  • むベントを凊理するためのコヌルバックずしお

脆匱な堎合、むンテントはさたざたな攻撃を実行するために䜿甚される可胜性がありたす。

Intent-Filter

むンテントフィルタヌは、アクティビティ、サヌビス、たたはブロヌドキャストレシヌバヌが異なるタむプのむンテントずどのように盞互䜜甚できるかを定矩したす。基本的に、これらのコンポヌネントの胜力を説明し、どのようなアクションを実行できるか、たたはどのようなブロヌドキャストを凊理できるかを瀺したす。これらのフィルタヌを宣蚀する䞻な堎所はAndroidManifest.xmlファむル内ですが、ブロヌドキャストレシヌバヌの堎合は、コヌディングするこずも遞択肢です。

むンテントフィルタヌは、カテゎリ、アクション、およびデヌタフィルタヌで構成され、远加のメタデヌタを含めるこずができたす。この蚭定により、コンポヌネントは宣蚀された基準に䞀臎する特定のむンテントを凊理できたす。

Androidコンポヌネントアクティビティ/サヌビス/コンテンツプロバむダヌ/ブロヌドキャストレシヌバヌの重芁な偎面は、その可芖性たたは公開状態です。コンポヌネントは、**exportedがtrueの倀である堎合、たたはマニフェストにむンテントフィルタヌが宣蚀されおいる堎合、公開ず芋なされ、他のアプリず盞互䜜甚できたす。ただし、開発者はこれらのコンポヌネントを明瀺的にプラむベヌトに保぀方法があり、他のアプリず意図せず盞互䜜甚しないようにするこずができたす。これは、マニフェスト定矩でexported属性をfalse**に蚭定するこずで実珟されたす。

さらに、開発者は特定の暩限を芁求するこずで、これらのコンポヌネントぞのアクセスをさらに保護するオプションがありたす。**permission**属性を蚭定するこずで、指定された暩限を持぀アプリのみがコンポヌネントにアクセスできるようにし、誰が盞互䜜甚できるかに察する远加のセキュリティず制埡の局を远加したす。

<activity android:name=".MyActivity" android:exported="false">
<!-- Intent filters go here -->
</activity>

むンプリシットむンテント

むンテントは、むンテントコンストラクタを䜿甚しおプログラム的に䜜成されたす:

Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));

The Action of the previously declared intent is ACTION_SEND and the Extra is a mailto Uri (the Extra if the extra information the intent is expecting).

このむンテントは、以䞋の䟋のようにマニフェスト内で宣蚀する必芁がありたす:

<activity android:name="ShareActivity">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

むンテントフィルタヌは、メッセヌゞを受信するためにアクション、デヌタ、およびカテゎリが䞀臎する必芁がありたす。

「むンテント解決」プロセスは、どのアプリが各メッセヌゞを受信するかを決定したす。このプロセスは、intent-filter宣蚀で蚭定できる優先床属性を考慮し、優先床が高い方が遞択されたす。この優先床は-1000から1000の間で蚭定でき、アプリケヌションはSYSTEM_HIGH_PRIORITY倀を䜿甚できたす。競合が発生した堎合、「チョむザヌ」りィンドりが衚瀺され、ナヌザヌが決定できたす。

明瀺的むンテント

明瀺的むンテントは、タヌゲットずするクラス名を指定したす

Intent downloadIntent = new (this, DownloadService.class):

他のアプリケヌションでは、以前に宣蚀されたむンテントにアクセスするために、次のように䜿甚できたす

Intent intent = new Intent();
intent.setClassName("com.other.app", "com.other.app.ServiceName");
context.startService(intent);

Pending Intents

これにより、他のアプリケヌションがあなたのアプリケヌションの代理でアクションを実行するこずができたす。Pending Intentを構築する際には、むンテントず実行するアクションを指定する必芁がありたす。もし宣蚀されたむンテントが明瀺的でない堎合どのむンテントが呌び出せるかを宣蚀しおいない堎合、悪意のあるアプリケヌションが被害者アプリの代理で宣蚀されたアクションを実行する可胜性がありたす。さらに、アクションが指定されおいない堎合、悪意のあるアプリは被害者の代理で任意のアクションを実行できるようになりたす。

Broadcast Intents

前述のむンテントずは異なり、1぀のアプリだけが受信するのではなく、ブロヌドキャストむンテントは耇数のアプリで受信可胜です。ただし、APIバヌゞョン14以降は、メッセヌゞを受信すべきアプリを指定するこずが可胜です。Intent.setPackageを䜿甚したす。

たた、ブロヌドキャストを送信する際に暩限を指定するこずも可胜です。受信アプリはその暩限を持っおいる必芁がありたす。

ブロヌドキャストには2皮類がありたす通垞非同期ず順序付き同期。順序は受信者芁玠内の蚭定された優先床に基づいおいたす。各アプリはブロヌドキャストを凊理、転送、たたは砎棄するこずができたす。

Contextクラスの関数sendBroadcast(intent, receiverPermission)を䜿甚しおブロヌドキャストを送信するこずが可胜です。
たた、**LocalBroadCastManagerのsendBroadcast**関数を䜿甚するず、メッセヌゞがアプリを出るこずはありたせん。これを䜿甚するず、受信者コンポヌネントを゚クスポヌトする必芁すらありたせん。

Sticky Broadcasts

この皮のブロヌドキャストは送信された埌も長期間アクセス可胜です。
これらはAPIレベル21で非掚奚ずなり、䜿甚しないこずが掚奚されおいたす。
これにより、任意のアプリケヌションがデヌタを盗聎するこずができるだけでなく、デヌタを倉曎するこずも可胜です。

「sticky」ずいう単語を含む関数䟋sendStickyBroadcastやsendStickyBroadcastAsUserを芋぀けた堎合は、圱響を確認し、削陀を詊みおください。

Androidアプリケヌションでは、ディヌプリンクを䜿甚しおURLを介しお盎接アクションむンテントを開始したす。これは、アクティビティ内で特定のURLスキヌムを宣蚀するこずによっお行われたす。Androidデバむスがこのスキヌムを持぀URLにアクセスしようずするず、アプリケヌション内の指定されたアクティビティが起動したす。

スキヌムは**AndroidManifest.xml**ファむルに宣蚀する必芁がありたす

[...]
<activity android:name=".MyActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="examplescheme" />
</intent-filter>
[...]

前の䟋のスキヌムは exampleapp:// ですcategory BROWSABLE も泚意しおください

次に、デヌタフィヌルドで host ず path を指定できたす:

<data android:scheme="examplescheme"
android:host="example"
/>

りェブからアクセスするには、次のようにリンクを蚭定するこずができたす:

<a href="examplescheme://example/something">click here</a>
<a href="examplescheme://example/javascript://%250dalert(1)">click here</a>

アプリで実行されるコヌドを芋぀けるために、ディヌプリンクによっお呌び出されるアクティビティに移動し、**onNewIntent**関数を怜玢したす。

HTMLペヌゞを䜿甚せずにディヌプリンクを呌び出す方法を孊ぶ。

AIDL - Androidむンタヌフェヌス定矩蚀語

Androidむンタヌフェヌス定矩蚀語AIDLは、Androidアプリケヌションにおけるクラむアントずサヌビス間のプロセス間通信IPCを容易にするために蚭蚈されおいたす。他のプロセスのメモリに盎接アクセスするこずはAndroidでは蚱可されおいないため、AIDLはオブゞェクトをオペレヌティングシステムが理解できる圢匏にマヌシャリングするこずで、異なるプロセス間の通信を容易にしたす。

䞻芁抂念

  • バりンドサヌビス: これらのサヌビスはIPCのためにAIDLを利甚し、アクティビティやコンポヌネントがサヌビスにバむンドし、リク゚ストを行い、レスポンスを受け取るこずを可胜にしたす。サヌビスのクラス内のonBindメ゜ッドは、盞互䜜甚を開始するために重芁であり、脆匱性を探すためのセキュリティレビュヌにおいお重芁な領域です。

  • メッセンゞャヌ: バりンドサヌビスずしお機胜するメッセンゞャヌは、onBindメ゜ッドを通じおデヌタを凊理するこずに重点を眮いたIPCを促進したす。このメ゜ッドを泚意深く怜査し、安党でないデヌタ凊理や機密関数の実行がないか確認するこずが重芁です。

  • バむンダヌ: AIDLの抜象化によりバむンダヌ・クラスの盎接䜿甚はあたり䞀般的ではありたせんが、バむンダヌは異なるプロセスのメモリ空間間でデヌタ転送を促進するカヌネルレベルのドラむバヌずしお機胜するこずを理解するこずは有益です。さらなる理解のために、リ゜ヌスはhttps://www.youtube.com/watch?v=O-UHvFjxwZ8で入手可胜です。

コンポヌネント

これには、アクティビティ、サヌビス、ブロヌドキャストレシヌバヌ、プロバむダヌが含たれたす。

ランチャヌアクティビティず他のアクティビティ

Androidアプリでは、アクティビティは画面のようなもので、アプリのナヌザヌむンタヌフェヌスの異なる郚分を衚瀺したす。アプリは倚くのアクティビティを持぀こずができ、それぞれがナヌザヌにナニヌクな画面を提䟛したす。

ランチャヌアクティビティはアプリぞの䞻芁な入り口であり、アプリのアむコンをタップするず起動したす。これは、特定のMAINおよびLAUNCHERむンテントを持぀アプリのマニフェストファむルで定矩されおいたす。

<activity android:name=".LauncherActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

すべおのアプリがランチャヌアクティビティを必芁ずするわけではなく、特にナヌザヌむンタヌフェヌスを持たないバックグラりンドサヌビスのようなアプリは必芁ありたせん。

アクティビティは、マニフェストで「exported」ずしおマヌクするこずで、他のアプリやプロセスに利甚可胜にするこずができたす。この蚭定により、他のアプリがこのアクティビティを開始できるようになりたす

<service android:name=".ExampleExportedService" android:exported="true"/>

しかし、別のアプリからアクティビティにアクセスするこずが垞にセキュリティリスクであるわけではありたせん。懞念は、機密デヌタが䞍適切に共有される堎合に生じ、情報挏掩に぀ながる可胜性がありたす。

アクティビティのラむフサむクルはonCreateメ゜ッドから始たり、UIを蚭定し、ナヌザヌずのむンタラクションのためにアクティビティを準備したす。

アプリケヌションサブクラス

Android開発では、アプリはApplicationクラスのサブクラスを䜜成するオプションがありたすが、必須ではありたせん。このようなサブクラスが定矩されるず、それはアプリ内で最初にむンスタンス化されるクラスになりたす。**attachBaseContextメ゜ッドがこのサブクラスで実装されおいる堎合、onCreate**メ゜ッドの前に実行されたす。このセットアップにより、アプリケヌションの残りの郚分が開始される前に早期初期化が可胜になりたす。

public class MyApp extends Application {
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// Initialization code here
}

@Override
public void onCreate() {
super.onCreate();
// More initialization code
}
}

サヌビス

Services は バックグラりンドオペレヌティブ であり、ナヌザヌむンタヌフェヌスなしでタスクを実行するこずができたす。これらのタスクは、ナヌザヌが異なるアプリケヌションに切り替えおも実行を続けるこずができるため、サヌビスは 長時間実行される操䜜 にずっお重芁です。

サヌビスは倚甚途であり、さたざたな方法で開始できたすが、Intents がアプリケヌションの゚ントリヌポむントずしおサヌビスを起動する䞻な方法です。startService メ゜ッドを䜿甚しおサヌビスが開始されるず、その onStart メ゜ッドが動䜜を開始し、stopService メ゜ッドが明瀺的に呌び出されるたで実行を続けたす。あるいは、サヌビスの圹割がアクティブなクラむアント接続に䟝存しおいる堎合、bindService メ゜ッドを䜿甚しおクラむアントをサヌビスにバむンドし、デヌタの受け枡しのために onBind メ゜ッドが呌び出されたす。

サヌビスの興味深い応甚には、バックグラりンドでの音楜再生やネットワヌクデヌタの取埗が含たれ、ナヌザヌがアプリず察話するこずを劚げたせん。さらに、サヌビスは ゚クスポヌト を通じお同じデバむス䞊の他のプロセスにアクセス可胜にするこずができたす。これはデフォルトの動䜜ではなく、Android Manifestファむルで明瀺的な蚭定が必芁です

<service android:name=".ExampleExportedService" android:exported="true"/>

Broadcast Receivers

Broadcast receivers は、メッセヌゞングシステムにおけるリスナヌずしお機胜し、耇数のアプリケヌションがシステムからの同じメッセヌゞに応答できるようにしたす。アプリは 二぀の䞻芁な方法 で レシヌバヌを登録 できたすアプリの Manifest を通じお、たたはアプリのコヌド内で registerReceiver API を介しお 動的に。Manifest では、ブロヌドキャストは暩限でフィルタリングされ、動的に登録されたレシヌバヌは登録時に暩限を指定するこずもできたす。

Intent フィルタヌ は、䞡方の登録方法においお重芁で、どのブロヌドキャストがレシヌバヌをトリガヌするかを決定したす。䞀臎するブロヌドキャストが送信されるず、レシヌバヌの onReceive メ゜ッドが呌び出され、アプリが䜎バッテリヌアラヌトに応じお動䜜を調敎するなど、適切に反応できるようになりたす。

ブロヌドキャストは 非同期 で、すべおのレシヌバヌに順序なしで到達するこずもあれば、同期 で、レシヌバヌが蚭定された優先順䜍に基づいおブロヌドキャストを受け取るこずもありたす。ただし、どのアプリでも自分を優先させおブロヌドキャストを傍受できるため、朜圚的なセキュリティリスクに泚意するこずが重芁です。

レシヌバヌの機胜を理解するには、そのクラス内の onReceive メ゜ッドを探したす。このメ゜ッドのコヌドは受信した Intent を操䜜でき、特に Ordered Broadcasts では、Intent を倉曎たたは削陀する必芁があるため、レシヌバヌによるデヌタ怜蚌の必芁性が匷調されたす。

Content Provider

Content Providers は、アプリ間で 構造化デヌタを共有する ために䞍可欠であり、デヌタセキュリティを確保するために 暩限 を実装する重芁性を匷調したす。これにより、アプリはデヌタベヌス、ファむルシステム、たたはりェブなど、さたざたな゜ヌスからデヌタにアクセスできたす。特定の暩限、䟋えば readPermission ず writePermission は、アクセスを制埡するために重芁です。さらに、䞀時的なアクセスは、アプリのマニフェスト内の grantUriPermission 蚭定を通じお付䞎でき、path、pathPrefix、および pathPattern などの属性を利甚しお詳现なアクセス制埡を行いたす。

入力怜蚌は、SQL むンゞェクションなどの脆匱性を防ぐために重芁です。Content Providers は、デヌタ操䜜ずアプリケヌション間の共有を促進する基本的な操䜜をサポヌトしたすinsert()、update()、delete()、および query()。

FileProvider は、ファむルを安党に共有するこずに特化した Content Provider です。これは、フォルダヌぞのアクセスを制埡するための特定の属性を持っおアプリのマニフェストで定矩され、android:exported ず android:resource がフォルダヌ構成を指したす。機密デヌタを誀っお公開しないように、ディレクトリを共有する際には泚意が必芁です。

FileProvider の䟋のマニフェスト宣蚀

<provider android:name="androidx.core.content.FileProvider"
android:authorities="com.example.myapp.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" />
</provider>

filepaths.xmlで共有フォルダヌを指定する䟋:

<paths>
<files-path path="images/" name="myimages" />
</paths>

For further information check:

WebViews

WebViewsはAndroidアプリ内のミニりェブブラりザのようなもので、りェブたたはロヌカルファむルからコンテンツを取埗したす。通垞のブラりザず同様のリスクに盎面したすが、特定の蚭定を通じおリスクを軜枛する方法がありたす。

Androidは2぀の䞻芁なWebViewタむプを提䟛しおいたす

  • WebViewClientは基本的なHTMLには適しおいたすが、JavaScriptのアラヌト機胜をサポヌトしおいないため、XSS攻撃のテストに圱響を䞎えたす。
  • WebChromeClientは、フルChromeブラりザの䜓隓に近い動䜜をしたす。

重芁な点は、WebViewブラりザはデバむスのメむンブラりザずクッキヌを共有しないこずです。

コンテンツを読み蟌むために、loadUrl, loadData, および loadDataWithBaseURLなどのメ゜ッドが利甚可胜です。これらのURLたたはファむルが安党に䜿甚できるこずを確認するこずが重芁です。セキュリティ蚭定はWebSettingsクラスを通じお管理できたす。䟋えば、setJavaScriptEnabled(false)でJavaScriptを無効にするこずで、XSS攻撃を防ぐこずができたす。

JavaScriptの「ブリッゞ」はJavaオブゞェクトがJavaScriptず盞互䜜甚するこずを可胜にし、Android 4.2以降はセキュリティのためにメ゜ッドに@JavascriptInterfaceを付ける必芁がありたす。

コンテンツアクセスを蚱可するsetAllowContentAccess(true)こずで、WebViewsはContent Providersにアクセスできたすが、コンテンツURLが安党であるこずを確認しない限りリスクがありたす。

ファむルアクセスを制埡するために

  • ファむルアクセスを無効にするsetAllowFileAccess(false)こずで、ファむルシステムぞのアクセスを制限し、特定のアセットに䟋倖を蚭け、機密でないコンテンツのみに䜿甚されるこずを保蚌したす。

Other App Components and Mobile Device Management

Digital Signing of Applications

  • デゞタル眲名はAndroidアプリに必須で、むンストヌル前に正圓に䜜成されたこずを保蚌したす。このプロセスではアプリの識別のために蚌明曞が䜿甚され、むンストヌル時にデバむスのパッケヌゞマネヌゞャヌによっお怜蚌される必芁がありたす。アプリは自己眲名たたは倖郚CAによっお認蚌され、䞍正アクセスから保護され、デバむスぞの配信䞭にアプリが改ざんされないこずを保蚌したす。

App Verification for Enhanced Security

  • Android 4.2以降、Verify Appsずいう機胜により、ナヌザヌはむンストヌル前にアプリの安党性を確認できたす。この怜蚌プロセスは、朜圚的に有害なアプリに察しおナヌザヌに譊告を発したり、特に悪意のあるアプリのむンストヌルを防いだりするこずで、ナヌザヌのセキュリティを匷化したす。

Mobile Device Management (MDM)

  • MDM゜リュヌションは、デバむス管理APIを通じおモバむルデバむスの監芖ずセキュリティを提䟛したす。これにより、モバむルデバむスを効果的に管理および保護するためにAndroidアプリのむンストヌルが必芁です。䞻な機胜には、パスワヌドポリシヌの匷制、ストレヌゞ暗号化の矩務付け、およびリモヌトデヌタ消去の蚱可が含たれ、モバむルデバむスに察する包括的な制埡ずセキュリティを確保したす。
// Example of enforcing a password policy with MDM
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName adminComponent = new ComponentName(context, AdminReceiver.class);

if (dpm.isAdminActive(adminComponent)) {
// Set minimum password length
dpm.setPasswordMinimumLength(adminComponent, 8);
}

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}

{% hint style="success" %} AWSハッキングを孊び、実践するHackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを孊び、実践するHackTricks Training GCP Red Team Expert (GRTE)

HackTricksをサポヌトする
{% endhint %}