hacktricks/reversing-and-exploiting/common-api-used-in-malware.md
2024-04-06 18:31:47 +00:00

11 KiB
Raw Blame History

Κοινές API που χρησιμοποιούνται σε κακόβουλο λογισμικό

Μάθετε το χάκινγκ στο AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι υποστήριξης του HackTricks:

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()

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

Όνομα
WinCrypt
CryptAcquireContext()
CryptGenKey()
CryptDeriveKey()
CryptDecrypt()
CryptReleaseContext()

Αντι-Ανάλυση/Εικονική Μηχανή

Όνομα Συνάρτησης Οδηγίες Συναρτήσεων Συναρμολόγησης
IsDebuggerPresent() CPUID()
GetSystemInfo() IN()
GlobalMemoryStatusEx()
GetVersion()
CreateToolhelp32Snapshot [Έλεγχος εάν ένα πρόγραμμα εκτελείται]
CreateFileW/A [Έλεγχος εάν υπάρχει ένα αρχείο]

Αόρατος Λογισμικός

Όνομα
VirtualAlloc Εκχώρηση μνήμης (packers)
VirtualProtect Αλλαγή δικαιωμάτων μνήμης (packer που δίνει άδεια εκτέλεσης σε μια ενότητα)
ReadProcessMemory Ενσωμάτωση σε εξωτερικές διεργασίες
WriteProcessMemoryA/W Ενσωμάτωση σε εξωτερικές διεργασίες
NtWriteVirtualMemory
CreateRemoteThread Ενσωμάτωση DLL/Διεργασίας...
NtUnmapViewOfSection
QueueUserAPC
CreateProcessInternalA/W

Εκτέλεση

Όνομα Συνάρτησης
CreateProcessA/W
ShellExecute
WinExec
ResumeThread
NtResumeThread

Διάφορα

  • GetAsyncKeyState() -- Καταγραφή πλήκτρων
  • SetWindowsHookEx -- Καταγραφή πλήκτρων
  • GetForeGroundWindow -- Λήψη ονόματος τρέχοντος παραθύρου (ή της ιστοσελίδας από ένα πρόγραμμα περιήγησης)
  • LoadLibrary() -- Εισαγωγή βιβλιοθήκης
  • GetProcAddress() -- Εισαγωγή βιβλιοθήκης
  • CreateToolhelp32Snapshot() -- Κατάλογος τρέχοντων διεργασιών
  • GetDC() -- Στιγμιότυπο οθόνης
  • BitBlt() -- Στιγμιότυπο οθόνης
  • InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- Πρόσβαση στο Internet
  • FindResource(), LoadResource(), LockResource() -- Πρόσβαση σε πόρους του εκτελέσιμου

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

Ενσωμάτωση DLL

Εκτέλεση ενός αυθαίρετου DLL μέσα σε άλλη διεργασία

  1. Εντοπισμός της διεργασίας για την ενσωμάτωση του κακόβουλου DLL: CreateToolhelp32Snapshot, Process32First, Process32Next
  2. Άνοιγμα της διεργασίας: GetModuleHandle, GetProcAddress, OpenProcess
  3. Εγγραφή του διαδρόμου προς το DLL μέσα στη διεργασία: VirtualAllocEx, WriteProcessMemory
  4. Δημιουργία ενός νήματος στη διεργασία που θα φορτώσει το κακόβουλο DLL: CreateRemoteThread, LoadLibrary

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

Αντανάκλαστη Ενσωμάτωση DLL

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

Απαγωγή Νήματος

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

  1. Εύρεση ενός στόχου νήματος: CreateToolhelp32Snapshot, Thread32First, Thread32Next
  2. Άνοιγμα του νήματος: OpenThread
  3. Αναστολή του νήματος: SuspendThread
  4. Εγγραφή του διαδρόμου προς το κακόβουλο DLL μέσα στη διεργασία-θύμα: VirtualAllocEx, WriteProcessMemory
  5. Επανέναρξη του νήματος που φορτώνει τη βιβλιοθήκη: ResumeThread

Ενσωμάτωση PE

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

Άδεια Διαδικασίας

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

  1. Δημιουργία νέας διεργασίας: CreateProcess
  2. Αποσύνδεση της μνήμης: ZwUnmapViewOfSection, NtUnmapViewOfSection
  3. Εγγραφή του κακόβουλου δυαδικού στη μνήμη της διεργασίας: VirtualAllocEc, WriteProcessMemory
  4. Ορισμός του σημείου εισόδου και εκτέλεση: SetThreadContext, ResumeThread

Αγκάλη

  • Το SSDT (Πίνακας Περιγραφής Υπηρεσιών Συστήματος) δείχνει σε λειτουργίες πυρήνα (ntoskrnl.exe) ή οδηγού GUI (win32k.sys) ώστε οι διεργασίες χρήστη να μπορούν να καλέσουν αυτές τις λειτουργίες.
  • Ένα rootkit μπορεί να τροποποιήσει αυτούς τους δείκτες σε διευθύνσεις που ελέγχει
  • Τα IRP (Πακέτα Αιτημάτων I/O) μεταφέρουν κομμάτια δεδομένων από ένα στοιχείο σε ένα άλλο. Σχεδόν όλα στον πυρήνα χρησιμοποιούν IRPs και κάθε αντικείμενο συσκευής έχει τον δικό του πίνακα λειτουργιών που μπορεί να αγκιλωθεί: DKOM (Άμεση Παραβίαση Αντικειμένου Πυρήνα)
  • Ο IAT (Πίνακας Διεύθυνσης Εισαγωγής) είναι χρήσιμος για την επίλυση εξαρτήσεων. Είναι δυνατό να αγκιλωθεί αυτός ο πίνακας για να απαγάγει τον κώδικα που θα κληθεί.
  • EAT (Πίνακας Διεύθυνσης Εξαγωγής) Hooks. Αυτά τα hooks μπορούν να γίνουν από το userland. Ο στόχος είναι να γίνει αγκίλωση εξαγόμενων λειτουργιών από DLLs.
  • Inline Hooks: Αυτού του τύπου είναι δύσκολο να επιτευχθούν. Αυτό περιλαμβάνει την τροποποίηση του
  • Μοιραστείτε τα κόλπα σας στο χάκινγκ υποβάλλοντας PRs στα HackTricks και HackTricks Cloud αποθετήρια του GitHub.