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

166 lines
8.9 KiB
Markdown
Raw Normal View History

# 악성코드에서 사용되는 일반적인 API
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>HackTricks 지원하기</summary>
2022-04-28 16:01:33 +00:00
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
## 일반
2023-09-02 23:48:41 +00:00
### 네트워킹
2020-12-03 18:00:02 +00:00
| 원시 소켓 | WinAPI 소켓 |
| ------------- | -------------- |
| socket() | WSAStratup() |
| bind() | bind() |
| listen() | listen() |
| accept() | accept() |
| connect() | connect() |
| read()/recv() | recv() |
| write() | send() |
| shutdown() | WSACleanup() |
2020-12-03 18:00:02 +00:00
### 지속성
2020-12-03 18:00:02 +00:00
2024-02-10 21:30:13 +00:00
| 레지스트리 | 파일 | 서비스 |
| ---------------- | ------------- | ---------------------------- |
| RegCreateKeyEx() | GetTempPath() | OpenSCManager |
| RegOpenKeyEx() | CopyFile() | CreateService() |
| RegSetValueEx() | CreateFile() | StartServiceCtrlDispatcher() |
| RegDeleteKeyEx() | WriteFile() | |
| RegGetValue() | ReadFile() | |
2020-12-03 18:00:02 +00:00
### 암호화
2020-12-03 18:00:02 +00:00
2024-02-10 21:30:13 +00:00
| 이름 |
| --------------------- |
| WinCrypt |
| CryptAcquireContext() |
| CryptGenKey() |
| CryptDeriveKey() |
| CryptDecrypt() |
| CryptReleaseContext() |
2020-12-03 18:00:02 +00:00
### 분석 방지/VM
2020-12-03 18:00:02 +00:00
| 함수 이름 | 어셈블리 명령어 |
| --------------------------------------------------------- | --------------------- |
| IsDebuggerPresent() | CPUID() |
| GetSystemInfo() | IN() |
| GlobalMemoryStatusEx() | |
| GetVersion() | |
| CreateToolhelp32Snapshot \[프로세스가 실행 중인지 확인] | |
| CreateFileW/A \[파일 존재 여부 확인] | |
2020-12-03 18:00:02 +00:00
### 스텔스
2020-12-03 18:00:02 +00:00
2024-02-10 21:30:13 +00:00
| 이름 | |
| ------------------------ | -------------------------------------------------------------------------- |
| VirtualAlloc | 메모리 할당 (패커) |
| VirtualProtect | 메모리 권한 변경 (패커가 섹션에 실행 권한 부여) |
| ReadProcessMemory | 외부 프로세스에 주입 |
| WriteProcessMemoryA/W | 외부 프로세스에 주입 |
| NtWriteVirtualMemory | |
| CreateRemoteThread | DLL/프로세스 주입... |
| NtUnmapViewOfSection | |
| QueueUserAPC | |
| CreateProcessInternalA/W | |
2020-12-03 18:00:02 +00:00
### 실행
2020-12-03 18:00:02 +00:00
2024-02-10 21:30:13 +00:00
| 함수 이름 |
| ---------------- |
2020-12-09 00:31:50 +00:00
| CreateProcessA/W |
| ShellExecute |
| WinExec |
| ResumeThread |
| NtResumeThread |
2020-12-03 18:00:02 +00:00
### 기타
2021-09-07 00:15:14 +00:00
2024-02-10 21:30:13 +00:00
* GetAsyncKeyState() -- 키 로깅
* SetWindowsHookEx -- 키 로깅
* GetForeGroundWindow -- 실행 중인 창 이름 가져오기 (또는 브라우저에서 웹사이트)
2024-02-10 21:30:13 +00:00
* LoadLibrary() -- 라이브러리 가져오기
* GetProcAddress() -- 라이브러리 가져오기
* CreateToolhelp32Snapshot() -- 실행 중인 프로세스 목록
* GetDC() -- 스크린샷
* BitBlt() -- 스크린샷
* InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- 인터넷 접근
* FindResource(), LoadResource(), LockResource() -- 실행 파일의 리소스 접근
2021-09-07 00:15:14 +00:00
## 악성코드 기법
2021-09-07 00:15:14 +00:00
### DLL 주입
2021-09-07 00:15:14 +00:00
다른 프로세스 내에서 임의의 DLL 실행
2021-09-07 00:15:14 +00:00
2024-02-10 21:30:13 +00:00
1. 악성 DLL을 주입할 프로세스 찾기: CreateToolhelp32Snapshot, Process32First, Process32Next
2. 프로세스 열기: GetModuleHandle, GetProcAddress, OpenProcess
3. 프로세스 내에 DLL 경로 쓰기: VirtualAllocEx, WriteProcessMemory
4. 악성 DLL을 로드할 프로세스 내에서 스레드 생성: CreateRemoteThread, LoadLibrary
2021-09-07 00:15:14 +00:00
사용할 다른 함수: NTCreateThreadEx, RtlCreateUserThread
2021-09-07 00:15:14 +00:00
### 반사 DLL 주입
2021-09-07 00:15:14 +00:00
정상 Windows API 호출 없이 악성 DLL 로드.\
DLL은 프로세스 내에 매핑되며, 가져오기 주소를 해결하고, 재배치를 수정하고, DllMain 함수를 호출합니다.
2021-09-07 00:15:14 +00:00
### 스레드 하이재킹
2021-09-07 00:15:14 +00:00
프로세스에서 스레드를 찾아 악성 DLL을 로드하게 만듭니다.
2021-09-07 00:15:14 +00:00
2024-02-10 21:30:13 +00:00
1. 대상 스레드 찾기: CreateToolhelp32Snapshot, Thread32First, Thread32Next
2. 스레드 열기: OpenThread
3. 스레드 일시 중지: SuspendThread
4. 피해자 프로세스 내에 악성 DLL 경로 쓰기: VirtualAllocEx, WriteProcessMemory
5. 라이브러리를 로드하는 스레드 재개: ResumeThread
2021-09-07 00:15:14 +00:00
### PE 주입
2021-09-07 00:15:14 +00:00
휴대용 실행 주입: 실행 파일이 피해자 프로세스의 메모리에 기록되고 거기서 실행됩니다.
2021-09-07 00:15:14 +00:00
### 프로세스 홀로잉
2021-09-07 00:15:14 +00:00
악성코드는 프로세스의 메모리에서 합법적인 코드를 언맵하고 악성 바이너리를 로드합니다.
2021-09-07 00:15:14 +00:00
1. 새 프로세스 생성: CreateProcess
2. 메모리 언맵: ZwUnmapViewOfSection, NtUnmapViewOfSection
3. 프로세스 메모리에 악성 바이너리 쓰기: VirtualAllocEc, WriteProcessMemory
4. 진입점을 설정하고 실행: SetThreadContext, ResumeThread
2022-04-28 16:01:33 +00:00
## 후킹
2022-05-01 16:32:23 +00:00
* **SSDT** (**시스템 서비스 설명자 테이블**)은 커널 함수(ntoskrnl.exe) 또는 GUI 드라이버(win32k.sys)를 가리켜 사용자 프로세스가 이러한 함수를 호출할 수 있도록 합니다.
* 루트킷은 이러한 포인터를 자신이 제어하는 주소로 수정할 수 있습니다.
* **IRP** (**I/O 요청 패킷**)은 한 구성 요소에서 다른 구성 요소로 데이터 조각을 전송합니다. 커널의 거의 모든 것이 IRP를 사용하며 각 장치 객체는 후킹할 수 있는 자체 함수 테이블을 가지고 있습니다: DKOM (직접 커널 객체 조작)
* **IAT** (**가져오기 주소 테이블**)은 종속성을 해결하는 데 유용합니다. 이 테이블을 후킹하여 호출될 코드를 하이재킹할 수 있습니다.
* **EAT** (**내보내기 주소 테이블**) 후킹. 이 후킹은 **유저랜드**에서 수행될 수 있습니다. 목표는 DLL에 의해 내보내진 함수를 후킹하는 것입니다.
* **인라인 후킹**: 이 유형은 달성하기 어렵습니다. 이는 함수 자체의 코드를 수정하는 것을 포함합니다. 아마도 이의 시작 부분에 점프를 넣는 방식으로.
{% hint style="success" %}
AWS 해킹 배우기 및 연습하기:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
GCP 해킹 배우기 및 연습하기: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>HackTricks 지원하기</summary>
* [**구독 계획**](https://github.com/sponsors/carlospolop) 확인하기!
* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 참여하거나 **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
* **[**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) 깃허브 리포지토리에 PR을 제출하여 해킹 팁을 공유하세요.**
</details>
{% endhint %}