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

This commit is contained in:
Translator 2025-02-25 22:36:22 +00:00
parent a951f5b4e5
commit 396f709549
5 changed files with 80 additions and 29 deletions

View File

@ -4,7 +4,7 @@
## Task, Back Stack and Foreground Activities
Katika Android, **task** kimsingi ni seti ya shughuli ambazo watumiaji wanashirikiana nazo ili kukamilisha kazi maalum, zimepangwa ndani ya **back stack**. Stack hii inaweka shughuli kwa msingi wa wakati zilifunguliwa, huku shughuli ya hivi karibuni ikionekana juu kama **foreground activity**. Katika wakati wowote, shughuli hii pekee ndiyo inaonekana kwenye skrini, na kuifanya kuwa sehemu ya **foreground task**.
Katika Android, **task** kimsingi ni seti ya shughuli ambazo watumiaji wanashirikiana nazo ili kukamilisha kazi maalum, zimepangwa ndani ya **back stack**. Stack hii inaweka shughuli kwa msingi wa wakati zilipofunguliwa, huku shughuli ya hivi karibuni ikionyeshwa juu kama **foreground activity**. Katika wakati wowote, shughuli hii pekee ndiyo inaonekana kwenye skrini, na kuifanya kuwa sehemu ya **foreground task**.
Hapa kuna muhtasari wa mabadiliko ya shughuli:
@ -19,25 +19,31 @@ Hapa kuna muhtasari wa mabadiliko ya shughuli:
### Overview of Task Affinity and Launch Modes
Katika programu za Android, **task affinity** inaelezea kazi inayopendelea shughuli, ikilingana kawaida na jina la pakiti ya programu. Mpangilio huu ni muhimu katika kuunda programu ya uthibitisho wa dhana (PoC) kwa ajili ya kuonyesha shambulio.
Katika programu za Android, **task affinity** inaelezea kazi inayopendelea shughuli, ikilingana kawaida na jina la pakiti ya programu. Mpangilio huu ni muhimu katika kuunda programu ya mfano (PoC) kwa ajili ya kuonyesha shambulio.
### Launch Modes
Attribute ya `launchMode` inaelekeza usimamizi wa mifano ya shughuli ndani ya kazi. Hali ya **singleTask** ni muhimu kwa shambulio hili, ikielekeza hali tatu kulingana na mifano ya shughuli zilizopo na mechi za task affinity. Uhalifu unategemea uwezo wa programu ya mshambuliaji kuiga task affinity ya programu lengwa, ikipotosha mfumo wa Android kuanzisha programu ya mshambuliaji badala ya lengwa lililokusudiwa.
Attribute ya `launchMode` inaelekeza usimamizi wa mifano ya shughuli ndani ya kazi. Modo ya **singleTask** ni muhimu kwa shambulio hili, ikielekeza hali tatu kulingana na mifano ya shughuli zilizopo na mechi za task affinity. Uhalifu unategemea uwezo wa programu ya mshambuliaji kuiga task affinity ya programu lengwa, ikipotosha mfumo wa Android kuanzisha programu ya mshambuliaji badala ya lengwa lililokusudiwa.
### Detailed Attack Steps
1. **Malicious App Installation**: Mwathirika anaweka programu ya mshambuliaji kwenye kifaa chao.
2. **Initial Activation**: Mwathirika kwanza anafungua programu ya uhalifu, akitayarisha kifaa kwa shambulio.
3. **Target App Launch Attempt**: Mwathirika anajaribu kufungua programu lengwa.
4. **Hijack Execution**: Kutokana na mechi ya task affinity, programu ya uhalifu inaanzishwa badala ya programu lengwa.
4. **Hijack Execution**: Wakati fulani programu inajaribu kufungua mtazamo wa **singleTask**. Kwa sababu ya mechi ya task affinity, programu ya uhalifu inazinduliwa badala ya programu lengwa.
5. **Deception**: Programu ya uhalifu inaonyesha skrini ya kuingia bandia inayofanana na programu lengwa, ikimdanganya mtumiaji kuingiza taarifa nyeti.
> [!TIP]
> Kumbuka kwamba ili shambulio hili lifanye kazi mtazamo dhaifu **hauhitaji kuwa na exported to true** wala hauhitaji kuwa shughuli Kuu.
Kwa utekelezaji wa vitendo wa shambulio hili, rejelea hifadhi ya Task Hijacking Strandhogg kwenye GitHub: [Task Hijacking Strandhogg](https://github.com/az0mb13/Task_Hijacking_Strandhogg).
### Prevention Measures
Ili kuzuia mashambulizi kama haya, waendelezaji wanaweza kuweka `taskAffinity` kuwa string tupu na kuchagua hali ya uzinduzi ya `singleInstance`, kuhakikisha kutengwa kwa programu yao kutoka kwa nyingine. Kubadilisha kazi ya `onBackPressed()` kunatoa ulinzi wa ziada dhidi ya hijacking ya kazi.
Ili kuzuia mashambulizi kama haya, waendelezaji wanaweza:
- Kuweka **`**taskAffinity`** ya mtazamo wa **singleTask** kuwa string tupu (`android:taskAffinity=""`)
- Kuchagua modo ya **`singleInstance`**, kuhakikisha kutengwa kwa programu yao kutoka kwa nyingine.
- Kubinafsisha kazi ya **`onBackPressed()`** inatoa ulinzi wa ziada dhidi ya hijacking ya kazi.
## **References**

View File

@ -2,38 +2,80 @@
# Uchambuzi wa Programu ya React Native
Ili kuthibitisha kama programu ilijengwa kwenye mfumo wa React Native, fuata hatua hizi:
Ili kuthibitisha kama programu imejengwa kwenye mfumo wa React Native, fuata hatua hizi:
1. Badilisha jina la faili la APK kuwa na kiambishi cha zip na uondoe kwenye folda mpya kwa kutumia amri `cp com.example.apk example-apk.zip` na `unzip -qq example-apk.zip -d ReactNative`.
1. Badilisha jina la faili la APK kwa kiambishi cha zip na uondoe kwenye folda mpya kwa kutumia amri `cp com.example.apk example-apk.zip` na `unzip -qq example-apk.zip -d ReactNative`.
2. Tembea kwenye folda mpya iliyoundwa ya ReactNative na pata folda ya mali. Ndani ya folda hii, unapaswa kupata faili `index.android.bundle`, ambayo ina React JavaScript katika muundo wa minified.
2. Tembea kwenye folda mpya iliyoundwa ya ReactNative na pata folda ya mali. Ndani ya folda hii, unapaswa kupata faili `index.android.bundle`, ambayo ina JavaScript ya React katika muundo wa minified.
3. Tumia amri `find . -print | grep -i ".bundle$"` kutafuta faili la JavaScript.
Ili kuchambua zaidi msimbo wa JavaScript, tengeneza faili lililo na jina `index.html` katika saraka hiyo hiyo lenye msimbo ufuatao:
## Kode ya Javascript
Ikiwa unakagua maudhui ya `index.android.bundle` unapata kode ya JavaScript ya programu (hata kama imepunguzika), unaweza **kuichambua ili kupata taarifa nyeti na udhaifu**.
Kwa kuwa bundle ina kweli kode yote ya JS ya programu, inawezekana **kugawanya katika faili tofauti** (inaweza kurahisisha uhandisi wa kinyume) kwa kutumia **chombo [react-native-decompiler](https://github.com/numandev1/react-native-decompiler)**.
### Webpack
Ili kuchambua zaidi kode ya JavaScript, unaweza kupakia faili kwenye [https://spaceraccoon.github.io/webpack-exploder/](https://spaceraccoon.github.io/webpack-exploder/) au fuata hatua hizi:
1. Unda faili inayoitwa `index.html` katika saraka hiyo hiyo yenye kode ifuatayo:
```html
<script src="./index.android.bundle"></script>
```
Unaweza kupakia faili kwenye [https://spaceraccoon.github.io/webpack-exploder/](https://spaceraccoon.github.io/webpack-exploder/) au fuata hatua hizi:
2. Fungua faili `index.html` katika Google Chrome.
1. Fungua faili la `index.html` kwenye Google Chrome.
3. Fungua Developer Toolbar kwa kubonyeza **Command+Option+J kwa OS X** au **Control+Shift+J kwa Windows**.
2. Fungua Toolbar ya Developer kwa kubonyeza **Command+Option+J kwa OS X** au **Control+Shift+J kwa Windows**.
4. Bonyeza "Sources" katika Developer Toolbar. Unapaswa kuona faili la JavaScript ambalo limegawanywa katika folda na faili, likiunda bundle kuu.
3. Bonyeza "Sources" kwenye Toolbar ya Developer. Unapaswa kuona faili la JavaScript ambalo limegawanywa katika folda na faili, likiunda bundle kuu.
Ikiwa utapata faili inayoitwa `index.android.bundle.map`, utaweza kuchambua msimbo wa chanzo katika muundo usio na minified. Faili za ramani zina ramani ya chanzo, ambayo inakuwezesha kubaini vitambulisho vilivyopunguzwa.
Ikiwa utapata faili inayoitwa `index.android.bundle.map`, utaweza kuchambua msimbo wa chanzo katika muundo usio na minified. Faili za ramani zina ramani ya chanzo, ambayo inakuwezesha kuunganisha vitambulisho vilivyopunguzika.
Ili kutafuta akidi nyeti na mwisho, fuata hatua hizi:
1. Tambua maneno muhimu nyeti ili kuchambua msimbo wa JavaScript. Programu za React Native mara nyingi hutumia huduma za watu wengine kama Firebase, AWS S3 service endpoints, funguo za kibinafsi, nk.
1. Tambua maneno nyeti ili kuchambua msimbo wa JavaScript. Programu za React Native mara nyingi hutumia huduma za watu wa tatu kama Firebase, AWS S3 service endpoints, funguo za kibinafsi, n.k.
2. Katika kesi hii maalum, programu ilionekana kutumia huduma ya Dialogflow. Tafuta muundo unaohusiana na usanidi wake.
2. Katika kesi hii maalum, programu ilionekana ikitumia huduma ya Dialogflow. Tafuta muundo unaohusiana na usanidi wake.
3. Ilikuwa na bahati kwamba akidi nyeti zilizowekwa kwa mikono zilipatikana katika msimbo wa JavaScript wakati wa mchakato wa recon.
3. Ilikuwa na bahati kwamba akidi nyeti zilizowekwa kwa nguvu zilipatikana katika msimbo wa JavaScript wakati wa mchakato wa recon.
## References
### Badilisha msimbo wa JS na ujenge upya
Katika kesi hii kubadilisha msimbo ni rahisi. Unahitaji tu kubadilisha jina la programu ili kutumia kiambishi cha `.zip` na kukitoa. Kisha unaweza **kubadilisha msimbo wa JS ndani ya bundle hii na kujenga upya programu**. Hii inapaswa kuwa ya kutosha kukuwezesha **kuingiza msimbo** katika programu kwa madhumuni ya majaribio.
## Hermes bytecode
Ikiwa bundle ina **Hermes bytecode**, hu **wezi kufikia msimbo wa Javascript** wa programu (hata si toleo lililopunguzika).
Unaweza kuangalia ikiwa bundle ina Hermes bytecode kwa kuendesha amri ifuatayo:
```bash
file index.android.bundle
index.android.bundle: Hermes JavaScript bytecode, version 96
```
Hata hivyo, unaweza kutumia zana **[hbctool](https://github.com/bongtrop/hbctool)**, **[hermes-dec](https://github.com/P1sec/hermes-dec)** au **[hermes_rs](https://github.com/Pilfer/hermes_rs)** ili **kufanya disassembly ya bytecode** na pia **kui-decompile hadi baadhi ya pseudo JS code**. Kufanya hivyo, kwa mfano amri hizi:
```bash
hbc-disassembler ./index.android.bundle /tmp/my_output_file.hasm
hbc-decompiler ./index.android.bundle /tmp/my_output_file.js
```
### Badilisha msimbo na jenga upya
Kwa kawaida unapaswa kuwa na uwezo wa kubadilisha msimbo ulioondolewa (kubadilisha kulinganisha, au thamani au chochote unachohitaji kubadilisha) na kisha **jenga upya bytecode** na kisha jenga upya programu.
Zana **[hbctool](https://github.com/bongtrop/hbctool)** inasaidia kuondoa muunganisho na kujenga tena baada ya mabadiliko kufanywa, hata hivyo inasaidia **toleo za zamani tu** za bytecode ya Hermes.
Zana **[hermes-dec](https://github.com/P1sec/hermes-dec)** haisaidii kujenga upya bytecode.
Zana **[hermes_rs](https://github.com/Pilfer/hermes_rs)** inasaidia kujenga upya bytecode, lakini kwa kweli ni maktaba na si zana ya CLI.
## Uchambuzi wa Dyanmic
Unaweza kujaribu kuchambua programu kwa njia ya dyanmic kwa kutumia Frida kuwezesha hali ya maendeleo ya programu ya React na kutumia **`react-native-debugger`** kuungana nayo. Hata hivyo, kwa hili unahitaji msimbo wa chanzo wa programu kwa wazi. Unaweza kupata maelezo zaidi kuhusu hili katika [https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/](https://newsroom.bedefended.com/hooking-react-native-applications-with-frida/).
## Marejeleo
- [https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7](https://medium.com/bugbountywriteup/lets-know-how-i-have-explored-the-buried-secrets-in-react-native-application-6236728198f7)
- [https://www.assetnote.io/resources/research/expanding-the-attack-surface-react-native-android-applications](https://www.assetnote.io/resources/research/expanding-the-attack-surface-react-native-android-applications)
- [https://payatu.com/wp-content/uploads/2023/02/Mastering-React-Native-Application-Pentesting-A-Practical-Guide-2.pdf](https://payatu.com/wp-content/uploads/2023/02/Mastering-React-Native-Application-Pentesting-A-Practical-Guide-2.pdf)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,25 +2,26 @@
{{#include ../../banners/hacktricks-training.md}}
## **Basic Information**
**Tapjacking** ni shambulio ambapo **programu mbaya** inazinduliwa na **kujiweka juu ya programu ya mwathirika**. Mara inapoificha waziwazi programu ya mwathirika, kiolesura chake cha mtumiaji kimeundwa kwa njia ya kudanganya mtumiaji kuingiliana nayo, wakati inapitisha mwingiliano huo kwa programu ya mwathirika.\
Kwa hivyo, inafanya **mtumiaji kuwa kipofu na kutokujua kwamba kwa kweli wanatekeleza vitendo kwenye programu ya mwathirika**.
Kwa hivyo, inafanya **mtumiaji kuwa kipofu na kutokujua kwamba kwa kweli anafanya vitendo kwenye programu ya mwathirika**.
### Detection
Ili kugundua programu zinazoweza kuathiriwa na shambulio hili unapaswa kutafuta **shughuli zilizotolewa** katika android manifest (kumbuka kwamba shughuli yenye intent-filter inasafirishwa kiotomatiki kwa default). Mara umepata shughuli zilizotolewa, **angalia kama zinahitaji ruhusa yoyote**. Hii ni kwa sababu **programu mbaya itahitaji ruhusa hiyo pia**.
Unaweza pia kuangalia toleo la chini la SDK la programu, ukichunguza thamani ya **`android:minSdkVersion`** katika **`AndroidManifest.xml`** faili. Ikiwa thamani ni **chini ya 30**, programu hiyo inahatarishwa kwa Tapjacking.
### Protection
#### Android 12 (API 31,32) na juu
[**Kulingana na chanzo hiki**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** mashambulizi ya tapjacking yanazuia kiotomatiki na Android kuanzia Android 12 (API 31 & 30) na juu. Hivyo, hata kama programu ina udhaifu huwezi **kuweza kuitumia**.
[**Kulingana na chanzo hiki**](https://www.geeksforgeeks.org/tapjacking-in-android/)**,** mashambulizi ya tapjacking yanazuia kiotomatiki na Android kuanzia Android 12 (API 31 & 30) na juu. Hivyo, hata kama programu hiyo inahatarishwa hu **wezi kuitumia**.
#### `filterTouchesWhenObscured`
Ikiwa **`android:filterTouchesWhenObscured`** imewekwa kuwa **`true`**, `View` haitapokea mguso wakati dirisha la mtazamo linapofichwa na dirisha lingine linaloonekana.
Ikiwa **`android:filterTouchesWhenObscured`** imewekwa kuwa **`true`**, `View` haitapokea kugusa wakati dirisha la mtazamo limefichwa na dirisha lingine linaloonekana.
#### **`setFilterTouchesWhenObscured`**
@ -40,22 +41,22 @@ android:filterTouchesWhenObscured="true">
Programu ya **karibuni ya Android** inayofanya shambulio la Tapjacking (+ kuanzisha kabla ya shughuli iliyosafirishwa ya programu iliyoathiriwa) inaweza kupatikana katika: [**https://github.com/carlospolop/Tapjacking-ExportedActivity**](https://github.com/carlospolop/Tapjacking-ExportedActivity).
Fuata **maagizo ya README ili kuitumia**.
Fuata **maelekezo ya README ili kuitumia**.
### FloatingWindowApp
Mradi mfano unaotekeleza **FloatingWindowApp**, ambayo inaweza kutumika kuweka juu ya shughuli nyingine ili kufanya shambulio la clickjacking, inaweza kupatikana katika [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (ni ya zamani kidogo, bahati njema katika kujenga apk).
Mradi wa mfano unaotekeleza **FloatingWindowApp**, ambayo inaweza kutumika kuweka juu ya shughuli nyingine ili kufanya shambulio la clickjacking, unaweza kupatikana katika [**FloatingWindowApp**](https://github.com/aminography/FloatingWindowApp) (ni ya zamani kidogo, bahati njema katika kujenga apk).
### Qark
> [!CAUTION]
> Inaonekana mradi huu sasa hauhifadhiwi na kazi hii haifanyi kazi ipasavyo tena
> Inaonekana mradi huu sasa hauhifadhiwi na kazi hii haifanyi kazi vizuri tena
Unaweza kutumia [**qark**](https://github.com/linkedin/qark) na vigezo `--exploit-apk` --sdk-path `/Users/username/Library/Android/sdk` ili kuunda programu mbaya ya kujaribu uwezekano wa **Tapjacking** udhaifu.\
Kuzuia ni rahisi kwa sababu mtengenezaji anaweza kuchagua kutopokea matukio ya kugusa wakati mtazamo umefunikwa na mwingine. Kutumia [Marejeleo ya Wataalamu wa Android](https://developer.android.com/reference/android/view/View#security):
> Wakati mwingine ni muhimu kwa programu kuweza kuthibitisha kwamba kitendo kinafanywa kwa maarifa na idhini kamili ya mtumiaji, kama vile kutoa ombi la ruhusa, kufanya ununuzi au kubofya tangazo. Kwa bahati mbaya, programu mbaya inaweza kujaribu kumdanganya mtumiaji kufanya vitendo hivi, bila kujua, kwa kuficha kusudi lililokusudiwa la mtazamo. Kama suluhisho, mfumo unatoa mekanizma ya kuchuja kugusa ambayo inaweza kutumika kuboresha usalama wa mitazamo inayotoa ufikiaji wa kazi nyeti.
> Wakati mwingine ni muhimu kwa programu kuweza kuthibitisha kwamba kitendo kinafanywa kwa maarifa na idhini kamili ya mtumiaji, kama vile kutoa ombi la ruhusa, kufanya ununuzi au kubofya tangazo. Kwa bahati mbaya, programu mbaya inaweza kujaribu kumdanganya mtumiaji kufanya vitendo hivi, bila kujua, kwa kuficha kusudi lililokusudiwa la mtazamo. Kama suluhisho, mfumo unatoa mekanismu ya kuchuja kugusa ambayo inaweza kutumika kuboresha usalama wa mitazamo inayotoa ufikiaji wa kazi nyeti.
>
> Ili kuwezesha kuchuja kugusa, piga [`setFilterTouchesWhenObscured(boolean)`](https://developer.android.com/reference/android/view/View#setFilterTouchesWhenObscured%28boolean%29) au weka sifa ya mpangilio ya android:filterTouchesWhenObscured kuwa kweli. Wakati imewezeshwa, mfumo utatupa kugusa ambazo zinapokelewa kila wakati dirisha la mtazamo linapofunikwa na dirisha lingine linaloonekana. Kama matokeo, mtazamo hautapokea kugusa wakati toast, mazungumzo au dirisha lingine linapojitokeza juu ya dirisha la mtazamo.

View File

@ -471,12 +471,13 @@ window.search = window.search || {};
showResults(true);
}
fetch(path_to_root + 'searchindex.json')
var branch = lang === "en" ? "master" : lang
fetch(`https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}/searchindex.json`)
.then(response => response.json())
.then(json => init(json))
.catch(error => { // Try to load searchindex.js if fetch failed
var script = document.createElement('script');
script.src = path_to_root + 'searchindex.js';
script.src = `https://raw.githubusercontent.com/HackTricks-wiki/hacktricks/refs/heads/${branch}/searchindex.js`;
script.onload = () => init(window.search);
document.head.appendChild(script);
});

View File

@ -55,6 +55,7 @@
<!-- Provide site root to javascript -->
<script>
var path_to_root = "{{ path_to_root }}";
var lang = "{{ language }}";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "{{ preferred_dark_theme }}" : "{{ default_theme }}";
</script>
<!-- Start loading toc.js asap -->