hacktricks/reversing/common-api-used-in-malware.md

9.3 KiB

Malware에서 사용되는 일반적인 API

{% hint style="success" %} AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기
{% endhint %}

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}


일반

네트워킹

원시 소켓 WinAPI 소켓
socket() WSAStratup()
bind() bind()
listen() listen()
accept() accept()
connect() connect()
read()/recv() recv()
write() send()
shutdown() WSACleanup()

지속성

레지스트리 파일 서비스
RegCreateKeyEx() GetTempPath() OpenSCManager
RegOpenKeyEx() CopyFile() CreateService()
RegSetValueEx() CreateFile() StartServiceCtrlDispatcher()
RegDeleteKeyEx() WriteFile()
RegGetValue() ReadFile()

암호화

이름
WinCrypt
CryptAcquireContext()
CryptGenKey()
CryptDeriveKey()
CryptDecrypt()
CryptReleaseContext()

분석 방지/VM

함수 이름 어셈블리 명령어
IsDebuggerPresent() CPUID()
GetSystemInfo() IN()
GlobalMemoryStatusEx()
GetVersion()
CreateToolhelp32Snapshot [프로세스가 실행 중인지 확인]
CreateFileW/A [파일 존재 여부 확인]

스텔스

이름
VirtualAlloc 메모리 할당 (패커)
VirtualProtect 메모리 권한 변경 (패커가 섹션에 실행 권한 부여)
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() -- 인터넷 접근
  • 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 주입

정상 Windows API 호출 없이 악성 DLL 로드.
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)를 가리켜 사용자 프로세스가 이러한 함수를 호출할 수 있도록 합니다.
  • 루트킷은 이러한 포인터를 자신이 제어하는 주소로 수정할 수 있습니다.
  • IRP (I/O 요청 패킷)은 한 구성 요소에서 다른 구성 요소로 데이터 조각을 전송합니다. 커널의 거의 모든 것이 IRP를 사용하며 각 장치 객체는 후킹할 수 있는 자체 함수 테이블을 가지고 있습니다: DKOM (직접 커널 객체 조작)
  • IAT (가져오기 주소 테이블)은 종속성을 해결하는 데 유용합니다. 이 테이블을 후킹하여 호출될 코드를 하이재킹할 수 있습니다.
  • EAT (내보내기 주소 테이블) 후킹. 이 후킹은 유저랜드에서 수행될 수 있습니다. 목표는 DLL에 의해 내보내진 함수를 후킹하는 것입니다.
  • 인라인 후킹: 이 유형은 달성하기 어렵습니다. 이는 함수 자체의 코드를 수정하는 것을 포함합니다. 아마도 이의 시작 부분에 점프를 넣는 방식으로.

Try Hard Security Group

{% embed url="https://discord.gg/tryhardsecurity" %}

{% hint style="success" %} AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks 지원하기
{% endhint %}