루트킷(Rootkit)은 운영 체제(OS) 깊숙이 숨어 악성코드를 감추고, 탐지를 우회하는 악성 소프트웨어입니다.
특히, API 훅킹(API Hooking) 기법을 이용해 보안 솔루션과 사용자에게 보이지 않도록
악성 프로세스를 은닉하는 방식이 널리 사용되고 있습니다.
🚨 오늘은 루트킷이 API 훅킹을 통해 악성 프로세스를 숨기는 기법과 이에 대한 방어 전략을 살펴보겠습니다.
🔎 API 훅킹이란? 어떻게 악성코드를 숨길까?
API 훅킹(API Hooking)은 운영 체제의 API 호출을 가로채고 변조하는 기법입니다.
💡 악성코드가 API 훅킹을 이용하는 방법
1️⃣ 윈도우 운영 체제는 다양한 API를 제공하여 프로세스, 파일, 네트워크, 레지스트리를 관리합니다.
2️⃣ 해커는 특정 API 호출을 가로채어(API 후킹) 보안 솔루션이 악성 프로세스를 감지하지 못하도록 조작합니다.
3️⃣ 결과적으로 작업 관리자(Task Manager), 파일 탐색기(Explorer), 명령어(tasklist, dir)에서도
악성코드가 보이지 않습니다.
📌 예제: 작업 관리자가 루트킷에 의해 조작된 경우
🚫 사용자가 tasklist 명령어를 실행하면 악성코드가 보안 솔루션을 속이기 위해 특정 프로세스를 목록에서 제거함.
✅ 보안 솔루션은 정상이지만, 실제로는 시스템이 감염됨.
🛠️ 악성 프로세스를 감추는 API 훅킹 기법
1️⃣ Inline Hooking (인라인 훅킹)
- API 함수의 첫 번째 명령어를 변경하여 실행 흐름을 공격자의 코드로 리디렉션
- 예: NtQuerySystemInformation() API를 가로채어 악성 프로세스를 목록에서 삭제
🔹 공격 방식:
BYTE* pOriginalFunction = (BYTE*)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtQuerySystemInformation");
DWORD oldProtect;
VirtualProtect(pOriginalFunction, 5, PAGE_EXECUTE_READWRITE, &oldProtect);
pOriginalFunction[0] = 0xE9; // JMP opcode
*(DWORD*)(pOriginalFunction + 1) = (DWORD)MaliciousFunction - (DWORD)pOriginalFunction - 5;
VirtualProtect(pOriginalFunction, 5, oldProtect, &oldProtect);
📌 결과:
✅ 보안 프로그램이 NtQuerySystemInformation()을 호출하면 루트킷이 가짜 데이터를 반환하여 악성 프로세스를 숨김.
2️⃣ IAT Hooking (Import Address Table 훅킹)
- 프로세스가 API를 호출할 때 참조하는 주소를 변경하여 악성 함수를 실행하도록 조작
- 예: 작업 관리자가 OpenProcess() API를 호출할 때, 공격자가 가짜 함수를 반환하여 탐지를 우회
🔹 공격 방식:
DWORD* pFunction = (DWORD*)GetProcAddress(GetModuleHandle("kernel32.dll"), "OpenProcess");
DWORD oldProtect;
VirtualProtect(pFunction, 4, PAGE_EXECUTE_READWRITE, &oldProtect);
*pFunction = (DWORD)FakeOpenProcess;
VirtualProtect(pFunction, 4, oldProtect, &oldProtect);
📌 결과:
✅ 보안 솔루션이 OpenProcess()를 실행해도, 실제 프로세스가 아닌 루트킷이 조작한 정보를 받음.
3️⃣ SSDT Hooking (System Service Descriptor Table 훅킹)
- 커널 수준에서 시스템 호출을 가로채어 악성 프로세스를 감춤
- 예: NtQueryDirectoryFile() API를 훅킹하여 특정 악성 파일을 보이지 않도록 조작
📌 결과:
✅ 사용자가 dir 명령어를 실행해도, 악성 파일이 폴더 내에서 사라진 것처럼 보임.
🚨 API 훅킹을 활용한 악성 루트킷의 예시
🕵️♂️ 1. r77 Rootkit (OBSCURE#BAT 악성코드 사용)
- $nya- 접두사를 가진 모든 파일 및 프로세스를 은닉
- API 훅킹을 통해 Windows 작업 관리자, 탐색기, 명령 프롬프트에서 악성코드를 감춤
🕵️♂️ 2. ZeroAccess Rootkit
- ZwQueryDirectoryFile()을 후킹하여 악성 파일을 보이지 않게 처리
- 감염된 시스템은 네트워크 요청을 가로채어 추가 악성 페이로드를 다운로드
🕵️♂️ 3. TDL4 (TDSS) Rootkit
- 커널 모드에서 실행되며 NtQuerySystemInformation()을 후킹하여 악성 프로세스를 감춤
- 백도어를 통해 원격 공격자가 감염된 시스템을 조작 가능
🛡️ API 훅킹 기반 루트킷 방어 방법
🔹 1. 루트킷 탐지 도구 사용
✅ GMER, Sysinternals RootkitRevealer, Windows Defender ATP
✅ tasklist, dir 명령어로 특정 프로세스가 보이지 않는지 확인
🔹 2. 커널 보호 및 서명된 드라이버만 실행
✅ Secure Boot 활성화 및 서명된 드라이버만 실행하도록 설정
✅ Windows Hypervisor-Protected Code Integrity (HVCI) 활성화
🔹 3. EDR & Behavior-Based 탐지 솔루션 활용
✅ API 훅킹 기반 공격을 탐지하는 EDR(Endpoint Detection & Response) 솔루션 도입
✅ Sysmon과 Event Tracing for Windows (ETW)를 사용해 API 호출 추적
🔹 4. 보안 패치 및 권한 제한
✅ 최신 Windows 보안 업데이트 적용
✅ 사용자에게 불필요한 관리자 권한 부여 금지
🚀 결론: API 훅킹 기반 루트킷은 탐지가 어렵다, 하지만 방어는 가능하다!
💡 API 훅킹은 루트킷이 자신을 숨기기 위해 사용하는 강력한 기술이지만, 적절한 탐지 및 대응 솔루션을 활용하면
방어할 수 있습니다.
🚨 공격자들은 탐지를 우회하기 위해 점점 더 정교한 기법을 사용하고 있으므로,
기업과 개인 모두 보안 점검을 철저히 해야 합니다.
✅ 보안 솔루션, 정기적인 시스템 점검, 최신 패치 적용이 핵심 방어 전략입니다.
📢 여러분의 시스템은 API 훅킹 기반 공격으로부터 안전한가요? 지금 점검해 보세요! 🔍
'CyberSecurity > Security🔐' 카테고리의 다른 글
🔓 블랙 바스타 랜섬웨어, 탈취한 계정으로 기업 네트워크 침투! (1) | 2025.03.18 |
---|---|
🔍 서버 메시지 블록(SMB) 트래버설 공격이란? 🚨 (1) | 2025.03.16 |
🛡️ "침해 가정(Assume Breach)" 전략: 현대 사이버 보안의 필수 패러다임 🔐💻 (0) | 2025.03.14 |
🚗 차량 해킹 가능! 해커가 인포테인먼트 시스템을 이용해 스파이웨어를 설치하는 방법 🕵️♂️💀 (2) | 2025.03.14 |
🛡️ AI 생성 피싱 이메일 탐지 방법 & 실제 피싱 시뮬레이션 테스트 가이드 🎯📧 (1) | 2025.03.14 |