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 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.
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 실행
- 악성 DLL을 주입할 프로세스 찾기: CreateToolhelp32Snapshot, Process32First, Process32Next
- 프로세스 열기: GetModuleHandle, GetProcAddress, OpenProcess
- 프로세스 내에 DLL 경로 쓰기: VirtualAllocEx, WriteProcessMemory
- 악성 DLL을 로드할 프로세스 내에서 스레드 생성: CreateRemoteThread, LoadLibrary
사용할 다른 함수: NTCreateThreadEx, RtlCreateUserThread
반사 DLL 주입
정상 Windows API 호출 없이 악성 DLL 로드.
DLL은 프로세스 내에 매핑되며, 가져오기 주소를 해결하고, 재배치 수정 및 DllMain 함수를 호출합니다.
스레드 하이재킹
프로세스에서 스레드를 찾아 악성 DLL을 로드하게 만듭니다.
- 대상 스레드 찾기: CreateToolhelp32Snapshot, Thread32First, Thread32Next
- 스레드 열기: OpenThread
- 스레드 일시 중지: SuspendThread
- 피해자 프로세스 내에 악성 DLL 경로 쓰기: VirtualAllocEx, WriteProcessMemory
- 라이브러리를 로드하는 스레드 재개: ResumeThread
PE 주입
휴대용 실행 주입: 실행 파일이 피해자 프로세스의 메모리에 기록되고 거기서 실행됩니다.
프로세스 홀로잉
맬웨어가 프로세스의 메모리에서 합법적인 코드를 언맵하고 악성 바이너리를 로드합니다.
- 새 프로세스 생성: CreateProcess
- 메모리 언맵: ZwUnmapViewOfSection, NtUnmapViewOfSection
- 프로세스 메모리에 악성 바이너리 쓰기: VirtualAllocEc, WriteProcessMemory
- 진입점 설정 및 실행: 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 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud GitHub 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.