Translated ['src/mobile-pentesting/android-app-pentesting/android-task-h

This commit is contained in:
Translator 2025-07-23 06:11:52 +00:00
parent 281f36a464
commit b1e504d6d8

View File

@ -4,50 +4,100 @@
## Task, Back Stack and Foreground Activities
Android में, एक **task** मूल रूप से गतिविधियों का एक सेट है जिससे उपयोगकर्ता एक विशिष्ट कार्य पूरा करने के लिए इंटरैक्ट करते हैं, जो एक **back stack** के भीतर व्यवस्थित होता है। यह स्टैक गतिविधियों को इस आधार पर क्रमबद्ध करता है कि उन्हें कब खोला गया था, सबसे हाल की गतिविधि को शीर्ष पर **foreground activity** के रूप में प्रदर्शित करता है। किसी भी समय, केवल यह गतिविधि स्क्रीन पर दिखाई देती है, जिससे यह **foreground task** का हिस्सा बन जाती है।
Android में, एक **task** मूल रूप से गतिविधियों का एक सेट है जिससे उपयोगकर्ता एक विशिष्ट कार्य पूरा करने के लिए इंटरैक्ट करते हैं, जो एक **back stack** के भीतर व्यवस्थित होता है। यह स्टैक गतिविधियों को इस आधार पर क्रमबद्ध करता है कि वे कब खोली गई थीं, सबसे हाल की गतिविधि को शीर्ष पर **foreground activity** के रूप में प्रदर्शित करता है। किसी भी समय, केवल यह गतिविधि स्क्रीन पर दिखाई देती है, जिससे यह **foreground task** का हिस्सा बन जाती है।
यहां गतिविधि संक्रमण का एक त्वरित विवरण है:
गतिविधि संक्रमणों का त्वरित विश्लेषण यहाँ है:
- **Activity 1** केवल foreground में एकमात्र गतिविधि के रूप में शुरू होती है।
- **Activity 2** को लॉन्च करने से **Activity 1** को back stack में धकेल दिया जाता है, **Activity 2** को foreground में लाते हुए
- **Activity 3** शुरू करने से **Activity 1** और **Activity 2** को स्टैक में और पीछे ले जाया जाता है, **Activity 3** अब सामने होती है।
- **Activity 1** एकमात्र गतिविधि के रूप में foreground में शुरू होती है।
- **Activity 2** को लॉन्च करने से **Activity 1** को back stack में धकेल दिया जाता है, जिससे **Activity 2** foreground में आ जाती है
- **Activity 3** शुरू करने से **Activity 1** और **Activity 2** स्टैक में और पीछे चले जाते हैं, **Activity 3** अब सामने होती है।
- **Activity 3** को बंद करने से **Activity 2** फिर से foreground में आ जाती है, जो Android के सुव्यवस्थित कार्य नेविगेशन तंत्र को प्रदर्शित करती है।
![https://developer.android.com/images/fundamentals/diagram_backstack.png](<../../images/image (698).png>)
## Task affinity attack
---
### Overview of Task Affinity and Launch Modes
## Task affinity attacks
Android अनुप्रयोगों में, **task affinity** एक गतिविधि के पसंदीदा कार्य को निर्दिष्ट करता है, जो आमतौर पर ऐप के पैकेज नाम के साथ मेल खाता है। यह सेटअप हमले को प्रदर्शित करने के लिए एक प्रमाण-ऑफ-कॉन्सेप्ट (PoC) ऐप बनाने में महत्वपूर्ण है
`taskAffinity` Android को बताता है कि एक `Activity` किस task से *पसंद* करेगी। जब दो गतिविधियाँ समान affinity साझा करती हैं, **Android को उन्हें एक ही back-stack के भीतर मर्ज करने की अनुमति है, भले ही वे विभिन्न APKs से आती हों**
### Launch Modes
यदि एक हमलावर उस स्टैक के **root** पर एक दुर्भावनापूर्ण गतिविधि रख सकता है, तो हर बार जब पीड़ित वैध एप्लिकेशन खोलता है, तो दुर्भावनापूर्ण UI वह पहली चीज होगी जो उपयोगकर्ता देखता है - फ़िशिंग या दुरुपयोग की अनुमति अनुरोधों के लिए बिल्कुल सही।
`launchMode` विशेषता कार्यों के भीतर गतिविधि उदाहरणों के प्रबंधन को निर्देशित करती है। **singleTask** मोड इस हमले के लिए महत्वपूर्ण है, जो मौजूदा गतिविधि उदाहरणों और कार्य संबंधी मेल के आधार पर तीन परिदृश्यों को निर्धारित करता है। यह शोषण हमलावर के ऐप की क्षमता पर निर्भर करता है कि वह लक्षित ऐप के कार्य संबंधी मेल की नकल कर सके, जिससे Android सिस्टम को लक्षित ऐप के बजाय हमलावर के ऐप को लॉन्च करने के लिए भटकाया जा सके
हमले की सतह कई डेवलपर्स की सोच से अधिक व्यापक है क्योंकि **हर गतिविधि स्वचालित रूप से एप्लिकेशन पैकेज नाम के बराबर एक affinity विरासत में लेती है** (जब तक डेवलपर `android:taskAffinity=""` सेट नहीं करता)। इसलिए *कुछ न करना* पहले से ही Android संस्करण 11 से पहले कार्य हाइजैकिंग के लिए ऐप को खुला छोड़ देता है
### Detailed Attack Steps
### Classic "singleTask / StrandHogg" scenario
1. **Malicious App Installation**: पीड़ित अपने डिवाइस पर हमलावर का ऐप इंस्टॉल करता है।
2. **Initial Activation**: पीड़ित पहले दुर्भावनापूर्ण ऐप खोलता है, जिससे हमले के लिए डिवाइस सेटअप होता है।
3. **Target App Launch Attempt**: पीड़ित लक्षित ऐप खोलने का प्रयास करता है।
4. **Hijack Execution**: किसी बिंदु पर ऐप **singleTask** दृश्य खोलने की कोशिश करता है। मेल खाते कार्य संबंध के कारण, लक्षित ऐप के स्थान पर दुर्भावनापूर्ण ऐप लॉन्च होता है।
5. **Deception**: दुर्भावनापूर्ण ऐप लक्षित ऐप के समान एक नकली लॉगिन स्क्रीन प्रस्तुत करता है, उपयोगकर्ता को संवेदनशील जानकारी दर्ज करने के लिए धोखा देता है।
1. हमलावर एक गतिविधि घोषित करता है:
```xml
<activity android:name=".EvilActivity"
android:exported="true"
android:taskAffinity="com.victim.package"
android:launchMode="singleTask" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
```
2. दुर्भावनापूर्ण ऐप को एक बार शुरू किया जाता है ताकि कार्य (धोखाधड़ी वाली affinity के साथ) हाल की गतिविधियों में मौजूद हो।
3. जब उपयोगकर्ता बाद में असली एप्लिकेशन खोलता है, तो Android पाता है कि पहले से ही एक कार्य है जिसका **root affinity पैकेज से मेल खाता है** और बस उस कार्य को foreground में लाता है।
4. हमलावर का UI पहले दिखाया जाता है।
> [!TIP]
> ध्यान दें कि इस हमले के काम करने के लिए कमजोर दृश्य को **exported to true** होने की आवश्यकता नहीं है और न ही यह मुख्य गतिविधि होनी चाहिए।
### DefaultAffinity (no `singleTask`) variant Caller ID case study
इस हमले के व्यावहारिक कार्यान्वयन के लिए, GitHub पर Task Hijacking Strandhogg रिपॉजिटरी देखें: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg).
**Caller ID (caller.id.phone.number.block)** एप्लिकेशन में रिपोर्ट की गई भेद्यता दिखाती है कि हमला *भी* डिफ़ॉल्ट `standard` लॉन्च मोड के खिलाफ काम करता है:
### Prevention Measures
1. हमलावर एप्लिकेशन एक नकली रूट गतिविधि बनाता है और तुरंत खुद को छिपा लेता है:
```kotlin
class HackActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
moveTaskToBack(true) // कार्य को हाल की गतिविधियों में रखें लेकिन दृष्टि से बाहर
}
}
```
2. मैनिफेस्ट को केवल पीड़ित पैकेज को `taskAffinity` में कॉपी करने की आवश्यकता है:
```xml
<activity android:name=".HackActivity"
android:exported="true"
android:taskAffinity="com.caller.id.phone.number.block" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
```
3. जैसे ही उपयोगकर्ता दुर्भावनापूर्ण ऐप को **एक बार** स्थापित और खोलता है, एक कार्य जिसका affinity पीड़ित पैकेज के बराबर है (लेकिन बैकग्राउंड में बैठा है) मौजूद होता है।
4. जब असली Caller ID एप्लिकेशन लॉन्च होता है, तो Android उस कार्य का पुनः उपयोग करता है और `HackActivity` को foreground में लाता है → फ़िशिंग विंडो/अनुमति का दुरुपयोग।
ऐसे हमलों को रोकने के लिए, डेवलपर्स कर सकते हैं:
- **`**taskAffinity`** को **singleTask** दृश्य के लिए एक खाली स्ट्रिंग (`android:taskAffinity=""`) पर सेट करें।
- **`singleInstance`** लॉन्च मोड का विकल्प चुनें, यह सुनिश्चित करते हुए कि उनका ऐप दूसरों से अलग है।
- **`onBackPressed()`** फ़ंक्शन को अनुकूलित करें जो कार्य हाइजैकिंग के खिलाफ अतिरिक्त सुरक्षा प्रदान करता है।
> NOTE: **Android 11 (API 30)** से शुरू होकर, सिस्टम डिफ़ॉल्ट रूप से एक ही UID का हिस्सा नहीं होने वाले दो पैकेजों को एक ही कार्य में नहीं रखता, इस विशेष रूप को कम करता है। पुराने संस्करणों में भेद्यता बनी रहती है।
## **References**
---
- [**https://blog.dixitaditya.com/android-task-hijacking/**](https://blog.dixitaditya.com/android-task-hijacking/)
- [**https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html**](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html)
## Detection & Exploitation checklist
1. लक्ष्य APK से `AndroidManifest.xml` खींचें और जांचें कि प्रत्येक `<activity>` (या वैश्विक `<application>` तत्व) में `android:taskAffinity=""` (खाली) **या** एक अनुकूलित मान है।
2. यदि नहीं, तो एक दुर्भावनापूर्ण ऐप बनाएं:
- `android:taskAffinity` = पीड़ित पैकेज नाम।
- उपयोगकर्ता को इसे एक बार खोलने के लिए एक `MAIN/LAUNCHER` इरादा प्रदान करें।
- वैकल्पिक रूप से तुरंत छिपाने के लिए `moveTaskToBack(true)` कॉल करें।
3. पीड़ित को उनके वैध एप्लिकेशन को खोलने दें → हाइजैक।
## Mitigation
डेवलपर्स को चाहिए:
* `<application>` स्तर पर स्पष्ट रूप से `android:taskAffinity=""` सेट करें (सिफारिश की गई) **या** प्रत्येक गतिविधि को एक अद्वितीय, निजी affinity दें।
* अत्यधिक संवेदनशील स्क्रीन के लिए, उपरोक्त को `android:launchMode="singleInstance"` या आधुनिक [`setLaunchMode`](https://developer.android.com/reference/android/content/pm/ActivityInfo#launchMode) सुरक्षा के साथ मिलाएं।
* ऐप के `targetSdkVersion` को अपग्रेड करें और **Android 11** व्यवहार परिवर्तन लागू करें जहां कार्य डिफ़ॉल्ट रूप से पैकेजों के बीच साझा नहीं होते हैं।
---
## References
- [https://blog.dixitaditya.com/android-task-hijacking/](https://blog.dixitaditya.com/android-task-hijacking/)
- [https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html](https://blog.takemyhand.xyz/2021/02/android-task-hijacking-with.html)
- [Android Manifest Misconfiguration Leading to Task Hijacking in Caller ID app](https://github.com/KMov-g/androidapps/blob/main/caller.id.phone.number.block.md)
- [https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06](https://medium.com/mobile-app-development-publication/the-risk-of-android-strandhogg-security-issue-and-how-it-can-be-mitigated-80d2ddb4af06)
{{#include ../../banners/hacktricks-training.md}}