mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 14:40:37 +00:00
179 lines
9 KiB
Markdown
179 lines
9 KiB
Markdown
# 악성 소프트웨어에서 사용되는 일반 API
|
|
|
|
<details>
|
|
|
|
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
|
|
|
|
HackTricks를 지원하는 다른 방법:
|
|
|
|
- **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
|
- [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com) 구매
|
|
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
- 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
|
- **HackTricks** 및 **HackTricks Cloud** 깃허브 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
|
|
|
|
</details>
|
|
|
|
**Try Hard Security Group**
|
|
|
|
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
|
|
{% 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() |
|
|
|
|
### 지속성
|
|
|
|
| 레지스트리 | 파일 | 서비스 |
|
|
| ---------------- | ------------- | ---------------------------- |
|
|
| 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 | 메모리 할당 (패커) |
|
|
| 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** (**System Service Descriptor Table**)는 사용자 프로세스가 커널 함수 (ntoskrnl.exe) 또는 GUI 드라이버 (win32k.sys)를 호출할 수 있도록 하는 테이블을 가리킵니다.
|
|
* 루트킷은 이러한 포인터를 자신이 제어하는 주소로 수정할 수 있습니다.
|
|
* **IRP** (**I/O Request Packets**)는 데이터 조각을 한 구성 요소에서 다른 구성 요소로 전송합니다. 커널의 거의 모든 것이 IRP를 사용하며 각 장치 객체에는 후킹할 수 있는 자체 함수 테이블이 있습니다: DKOM (Direct Kernel Object Manipulation)
|
|
* **IAT** (**Import Address Table**)은 종속성을 해결하는 데 유용합니다. 호출될 코드를 탈취하기 위해 이 테이블을 후킹할 수 있습니다.
|
|
* **EAT** (**Export Address Table**) 후킹. 이러한 후킹은 **사용자 공간**에서 수행할 수 있습니다. 목표는 DLL에 의해 내보낸 함수를 후킹하는 것입니다.
|
|
* **인라인 후킹**: 이 유형은 어렵습니다. 이는 함수 코드 자체를 수정하는 것을 포함합니다. 아마도 이를 위해 시작 부분에 점프를 넣는 것일 수 있습니다.
|
|
|
|
**Try Hard Security Group**
|
|
|
|
<figure><img src="../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
|
|
|
|
{% embed url="https://discord.gg/tryhardsecurity" %}
|
|
|
|
<details>
|
|
|
|
<summary><strong>htARTE (HackTricks AWS Red Team Expert)를 통해 제로에서 영웅까지 AWS 해킹 배우기</strong></summary>
|
|
|
|
HackTricks를 지원하는 다른 방법:
|
|
|
|
- **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
|
|
- [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com) 구매
|
|
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요. 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
|
|
- 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
|
|
|
|
</details>
|
|
* **HackTricks** 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) GitHub 저장소에 PR을 제출하여 해킹 기법을 공유하세요.
|
|
|
|
</details>
|