Common API used in Malware

Υποστήριξη HackTricks

Γενικά

Δικτύωση

Raw SocketsWinAPI Sockets

socket()

WSAStratup()

bind()

bind()

listen()

listen()

accept()

accept()

connect()

connect()

read()/recv()

recv()

write()

send()

shutdown()

WSACleanup()

Επιμονή

RegistryFileService

RegCreateKeyEx()

GetTempPath()

OpenSCManager

RegOpenKeyEx()

CopyFile()

CreateService()

RegSetValueEx()

CreateFile()

StartServiceCtrlDispatcher()

RegDeleteKeyEx()

WriteFile()

RegGetValue()

ReadFile()

Κρυπτογράφηση

Name

WinCrypt

CryptAcquireContext()

CryptGenKey()

CryptDeriveKey()

CryptDecrypt()

CryptReleaseContext()

Αντι-Ανάλυση/VM

Function NameAssembly Instructions

IsDebuggerPresent()

CPUID()

GetSystemInfo()

IN()

GlobalMemoryStatusEx()

GetVersion()

CreateToolhelp32Snapshot [Έλεγχος αν μια διαδικασία εκτελείται]

CreateFileW/A [Έλεγχος αν ένα αρχείο υπάρχει]

Αόρατο

Name

VirtualAlloc

Δεσμεύει μνήμη (packers)

VirtualProtect

Αλλάζει άδεια μνήμης (packer που δίνει άδεια εκτέλεσης σε μια ενότητα)

ReadProcessMemory

Έγχυση σε εξωτερικές διαδικασίες

WriteProcessMemoryA/W

Έγχυση σε εξωτερικές διαδικασίες

NtWriteVirtualMemory

CreateRemoteThread

Έγχυση DLL/Διαδικασίας...

NtUnmapViewOfSection

QueueUserAPC

CreateProcessInternalA/W

Εκτέλεση

Function Name

CreateProcessA/W

ShellExecute

WinExec

ResumeThread

NtResumeThread

Διάφορα

  • GetAsyncKeyState() -- Καταγραφή πλήκτρων

  • SetWindowsHookEx -- Καταγραφή πλήκτρων

  • GetForeGroundWindow -- Λάβετε το όνομα του εκτελούμενου παραθύρου (ή της ιστοσελίδας από έναν περιηγητή)

  • LoadLibrary() -- Εισαγωγή βιβλιοθήκης

  • GetProcAddress() -- Εισαγωγή βιβλιοθήκης

  • CreateToolhelp32Snapshot() -- Λίστα εκτελούμενων διαδικασιών

  • GetDC() -- Στιγμιότυπο οθόνης

  • BitBlt() -- Στιγμιότυπο οθόνης

  • InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Πρόσβαση στο Διαδίκτυο

  • FindResource(), LoadResource(), LockResource() -- Πρόσβαση σε πόρους του εκτελέσιμου

Τεχνικές Κακόβουλου Λογισμικού

DLL Injection

Εκτελέστε μια αυθαίρετη DLL μέσα σε άλλη διαδικασία

  1. Εντοπίστε τη διαδικασία για να εγχύσετε τη κακόβουλη DLL: CreateToolhelp32Snapshot, Process32First, Process32Next

  2. Ανοίξτε τη διαδικασία: GetModuleHandle, GetProcAddress, OpenProcess

  3. Γράψτε τη διαδρομή προς τη DLL μέσα στη διαδικασία: VirtualAllocEx, WriteProcessMemory

  4. Δημιουργήστε ένα νήμα στη διαδικασία που θα φορτώσει τη κακόβουλη DLL: CreateRemoteThread, LoadLibrary

Άλλες συναρτήσεις που μπορείτε να χρησιμοποιήσετε: NTCreateThreadEx, RtlCreateUserThread

Reflective DLL Injection

Φορτώστε μια κακόβουλη DLL χωρίς να καλέσετε κανονικές κλήσεις API των Windows. Η DLL είναι χαρτογραφημένη μέσα σε μια διαδικασία, θα επιλύσει τις διευθύνσεις εισαγωγής, θα διορθώσει τις μετατοπίσεις και θα καλέσει τη συνάρτηση DllMain.

Thread Hijacking

Βρείτε ένα νήμα από μια διαδικασία και κάντε το να φορτώσει μια κακόβουλη DLL

  1. Βρείτε ένα στοχευμένο νήμα: CreateToolhelp32Snapshot, Thread32First, Thread32Next

  2. Ανοίξτε το νήμα: OpenThread

  3. Αναστείλετε το νήμα: SuspendThread

  4. Γράψτε τη διαδρομή προς τη κακόβουλη DLL μέσα στη διαδικασία του θύματος: VirtualAllocEx, WriteProcessMemory

  5. Επαναφέρετε το νήμα φορτώνοντας τη βιβλιοθήκη: ResumeThread

PE Injection

Εγχυση Εκτελέσιμου: Το εκτελέσιμο θα γραφτεί στη μνήμη της διαδικασίας του θύματος και θα εκτελείται από εκεί.

Process Hollowing

Το κακόβουλο λογισμικό θα αφαιρέσει τον νόμιμο κώδικα από τη μνήμη της διαδικασίας και θα φορτώσει ένα κακόβουλο δυαδικό αρχείο

  1. Δημιουργήστε μια νέα διαδικασία: CreateProcess

  2. Αφαιρέστε τη μνήμη: ZwUnmapViewOfSection, NtUnmapViewOfSection

  3. Γράψτε το κακόβουλο δυαδικό αρχείο στη μνήμη της διαδικασίας: VirtualAllocEc, WriteProcessMemory

  4. Ορίστε το σημείο εισόδου και εκτελέστε: SetThreadContext, ResumeThread

Hooking

  • Ο SSDT (Πίνακας Περιγραφής Υπηρεσιών Συστήματος) δείχνει σε συναρτήσεις πυρήνα (ntoskrnl.exe) ή σε οδηγό GUI (win32k.sys) ώστε οι διαδικασίες χρήστη να μπορούν να καλέσουν αυτές τις συναρτήσεις.

  • Ένα rootkit μπορεί να τροποποιήσει αυτούς τους δείκτες σε διευθύνσεις που ελέγχει

  • IRP (Πακέτα Αιτήσεων I/O) μεταφέρουν κομμάτια δεδομένων από ένα συστατικό σε άλλο. Σχεδόν τα πάντα στον πυρήνα χρησιμοποιούν IRPs και κάθε αντικείμενο συσκευής έχει τον δικό του πίνακα συναρτήσεων που μπορεί να συνδεθεί: DKOM (Άμεση Διαχείριση Αντικειμένων Πυρήνα)

  • Ο IAT (Πίνακας Διευθύνσεων Εισαγωγής) είναι χρήσιμος για την επίλυση εξαρτήσεων. Είναι δυνατή η σύνδεση αυτού του πίνακα προκειμένου να αναληφθεί ο κώδικας που θα κληθεί.

  • EAT (Πίνακας Διευθύνσεων Εξαγωγής) Hooks. Αυτές οι συνδέσεις μπορούν να γίνουν από userland. Ο στόχος είναι να συνδεθούν οι εξαγόμενες συναρτήσεις από DLLs.

  • Inline Hooks: Αυτός ο τύπος είναι δύσκολος να επιτευχθεί. Αυτό περιλαμβάνει την τροποποίηση του κώδικα των συναρτήσεων αυτών. Ίσως βάζοντας ένα άλμα στην αρχή τους.

Υποστήριξη HackTricks

Last updated