11 KiB
Κοινές API που χρησιμοποιούνται σε κακόβουλο λογισμικό
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Υποστήριξη HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στο 💬 Discord group ή στο telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
Γενικά
Δικτύωση
Raw Sockets | WinAPI Sockets |
---|---|
socket() | WSAStratup() |
bind() | bind() |
listen() | listen() |
accept() | accept() |
connect() | connect() |
read()/recv() | recv() |
write() | send() |
shutdown() | WSACleanup() |
Επιμονή
Registry | File | Service |
---|---|---|
RegCreateKeyEx() | GetTempPath() | OpenSCManager |
RegOpenKeyEx() | CopyFile() | CreateService() |
RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
RegDeleteKeyEx() | WriteFile() | |
RegGetValue() | ReadFile() |
Κρυπτογράφηση
Name |
---|
WinCrypt |
CryptAcquireContext() |
CryptGenKey() |
CryptDeriveKey() |
CryptDecrypt() |
CryptReleaseContext() |
Αντι-Ανάλυση/VM
Function Name | Assembly Instructions |
---|---|
IsDebuggerPresent() | CPUID() |
GetSystemInfo() | IN() |
GlobalMemoryStatusEx() | |
GetVersion() | |
CreateToolhelp32Snapshot [Έλεγχος αν μια διαδικασία εκτελείται] | |
CreateFileW/A [Έλεγχος αν ένα αρχείο υπάρχει] |
Αόρατο
Name | |
---|---|
VirtualAlloc | Alloc memory (packers) |
VirtualProtect | Change memory permission (packer giving execution permission to a section) |
ReadProcessMemory | Injection into external processes |
WriteProcessMemoryA/W | Injection into external processes |
NtWriteVirtualMemory | |
CreateRemoteThread | DLL/Process injection... |
NtUnmapViewOfSection | |
QueueUserAPC | |
CreateProcessInternalA/W |
Εκτέλεση
Function Name |
---|
CreateProcessA/W |
ShellExecute |
WinExec |
ResumeThread |
NtResumeThread |
Διάφορα
- GetAsyncKeyState() -- Key logging
- SetWindowsHookEx -- Key logging
- GetForeGroundWindow -- Get running window name (or the website from a browser)
- LoadLibrary() -- Import library
- GetProcAddress() -- Import library
- CreateToolhelp32Snapshot() -- List running processes
- GetDC() -- Screenshot
- BitBlt() -- Screenshot
- InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Access the Internet
- FindResource(), LoadResource(), LockResource() -- Access resources of the executable
Τεχνικές Κακόβουλου Λογισμικού
DLL Injection
Εκτελέστε μια αυθαίρετη DLL μέσα σε άλλη διαδικασία
- Εντοπίστε τη διαδικασία για να εισάγετε τη κακόβουλη DLL: CreateToolhelp32Snapshot, Process32First, Process32Next
- Ανοίξτε τη διαδικασία: GetModuleHandle, GetProcAddress, OpenProcess
- Γράψτε τη διαδρομή προς τη DLL μέσα στη διαδικασία: VirtualAllocEx, WriteProcessMemory
- Δημιουργήστε ένα νήμα στη διαδικασία που θα φορτώσει τη κακόβουλη DLL: CreateRemoteThread, LoadLibrary
Άλλες συναρτήσεις που μπορείτε να χρησιμοποιήσετε: NTCreateThreadEx, RtlCreateUserThread
Reflective DLL Injection
Φορτώστε μια κακόβουλη DLL χωρίς να καλέσετε κανονικές κλήσεις API των Windows.
Η DLL είναι χαρτογραφημένη μέσα σε μια διαδικασία, θα επιλύσει τις διευθύνσεις εισαγωγής, θα διορθώσει τις μετατοπίσεις και θα καλέσει τη συνάρτηση DllMain.
Thread Hijacking
Βρείτε ένα νήμα από μια διαδικασία και κάντε το να φορτώσει μια κακόβουλη DLL
- Βρείτε ένα στοχευμένο νήμα: CreateToolhelp32Snapshot, Thread32First, Thread32Next
- Ανοίξτε το νήμα: OpenThread
- Αναστείλετε το νήμα: SuspendThread
- Γράψτε τη διαδρομή προς τη κακόβουλη DLL μέσα στη διαδικασία του θύματος: VirtualAllocEx, WriteProcessMemory
- Επαναφέρετε το νήμα φορτώνοντας τη βιβλιοθήκη: ResumeThread
PE Injection
Portable Execution Injection: Το εκτελέσιμο θα γραφτεί στη μνήμη της διαδικασίας του θύματος και θα εκτελείται από εκεί.
Process Hollowing
Το κακόβουλο λογισμικό θα αφαιρέσει τον νόμιμο κώδικα από τη μνήμη της διαδικασίας και θα φορτώσει ένα κακόβουλο δυαδικό αρχείο
- Δημιουργήστε μια νέα διαδικασία: CreateProcess
- Αφαιρέστε τη μνήμη: ZwUnmapViewOfSection, NtUnmapViewOfSection
- Γράψτε το κακόβουλο δυαδικό αρχείο στη μνήμη της διαδικασίας: VirtualAllocEc, WriteProcessMemory
- Ορίστε το entrypoint και εκτελέστε: SetThreadContext, ResumeThread
Hooking
- Ο 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. Αυτές οι συνδέσεις μπορούν να γίνουν από userland. Ο στόχος είναι να συνδεθούν οι εξαγόμενες συναρτήσεις από DLLs.
- Inline Hooks: Αυτός ο τύπος είναι δύσκολος να επιτευχθεί. Αυτό περιλαμβάνει την τροποποίηση του κώδικα των συναρτήσεων αυτών. Ίσως βάζοντας ένα άλμα στην αρχή τους.
Try Hard Security Group
{% embed url="https://discord.gg/tryhardsecurity" %}
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Υποστήριξη HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στο 💬 Discord group ή στο telegram group ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.