Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
HWSyscalls — HWSyscalls is a new method to execute indirect syscalls using HWBP, HalosGate and a synthetic trampoline on kernel32 with HWBP. | Kitploit
도구/GitHubGitHub/dec0ne/hwsyscalls
IDS/IPS EvasionPost-ExploitationPenetration TestingRed TeamingPayload Development
GitHubdec0ne/hwsyscalls

HWSyscalls

HWSyscalls is a new method to execute indirect syscalls using HWBP, HalosGate and a synthetic trampoline on kernel32 with HWBP.

저장소 보기
7351073년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

HWSyscalls

image image

주요 기여자

Dec0ne idov31

설명

HWSyscalls는 3가지 주요 구성 요소를 사용하여 간접 시스템 콜(indirect syscalls)을 실행하는 새로운 방법입니다:

  • 실행 흐름을 제어하기 위한 하드웨어 브레이크포인트(Hardware breakpoints)와 벡터 예외 처리기(Vectored Exception Handler).

  • 시스템 콜 번호와 주소를 찾는 데 사용되는 HalosGate.

  • 하드웨어 브레이크포인트를 사용하여 kernel32에 합성 트램펄린(synthetic trampoline) 생성.

HWSyscalls는 현재의 간접 시스템 콜 탐지 기법을 기반으로 하는 EDR 또는 AV 탐지를 트리거하지 않고 간접 시스템 콜을 사용하려는 모든 프로젝트에 쉽게 포함할 수 있는 라이브러리로 제공됩니다.

간접 시스템 콜은 ntdll에서 시스템 콜을 호출하기 위해 다양한 변형으로 사용되는 널리 알려진 방법입니다. 그러나 ntdll에서 시스템 콜을 호출할 때의 핵심적인 문제는 바로, 프로그램이 이전의 어떤 DLL도 거치지 않고 ntdll에 직접 접근한다는 이례적인 점입니다. HWSyscalls는 간접 시스템 콜의 핵심 아이디어를 기반으로 하며, 하드웨어 브레이크포인트 기능을 결합하여 kernel32에 합성 트램펄린을 만들고 HalosGate로 SSN을 얻는 방식으로 이 문제를 해결합니다.

이해를 돕기 위해, 일반적인 간접 시스템 콜의 흐름은 다음과 같습니다:

indirect_syscalls

반면 우리의 흐름은 다음과 같습니다:

hwsyscalls_flow

업데이트

스택을 언와인딩(unwinding) 가능하게 만들기 위해 몇 가지 스택 조작 기법으로 HWSyscallExceptionHandler 함수 로직을 업데이트했습니다. 이를 위해 NTAPI 함수를 직접 호출하고(해당 주소는 이제 PrepareSyscall 함수에서 반환됩니다), NTAPI 함수에서 HWBP를 트리거한 다음, 새 스택 프레임을 생성하고 kernel32(또는 kernelbase)에서 찾은 "ADD RSP, 68; RET" 가젯으로 새 스택 프레임의 반환 주소를 설정하는 동시에 스택 인자들도 복사했습니다.

이제 스택은 완전히 언와인딩 가능하며, ntdll에서 돌아오는 경로에서 실제로 kernel32를 통해 반환됩니다. 우리 측의 브레이크포인트나 실행 흐름 조작이 전혀 필요하지 않습니다:

hwsyscalls_stack

자세한 내용은 저희 블로그 게시물을 확인하세요 (곧 공개 예정).

사용 방법

프로젝트를 사용하려면 HWSyscalls.h를 포함하고 InitHWSyscalls를 호출하여 필요한 가젯을 찾고 예외 처리기를 초기화해야 합니다. 프로그램 실행이 끝나면 DeinitHWSyscalls를 호출하여 예외 처리기를 제거합니다.

root@kitploit:~
#include "HWSyscalls.h"

typedef NTSTATUS(WINAPI* NtOpenProcess_t)(
	OUT          PHANDLE            ProcessHandle,
	IN           ACCESS_MASK        DesiredAccess,
	IN           POBJECT_ATTRIBUTES ObjectAttributes,
	IN OPTIONAL  PCLIENT_ID         ClientId);

void main() {

    // Initialize the exception handler and find the required gadgets.
    if (!InitHWSyscalls())
        return;
    
    // ...

    // Execute your function!
    NtOpenProcess_t pNtOpenProcess = (NtOpenProcess_t)PrepareSyscall((char*)("NtOpenProcess"));
    NTSTATUS status = pNtOpenProcess(&targetHandle, PROCESS_ALL_ACCESS, &object, &clientID);

    // ...

    // Removing the exception handler.
    DeinitHWSyscalls();

}

디버그 출력 상세 수준은 HWSyscalls.h의 HWSYSCALLS_DEBUG 정의를 변경하여 켜거나 끌 수 있습니다.

root@kitploit:~
#pragma once
#include <windows.h>
#include <inttypes.h>
#include <stdio.h>

#pragma region Defines

#define HWSYSCALLS_DEBUG 0 // 0 disable, 1 enable
#define UP -32
//...

설정

이 프로젝트를 컴파일하려면 Visual Studio 2019 이상이 필요합니다. 이 프로젝트는 x64 환경에서만 사용할 수 있도록 제작되었으며 최적화 없이 컴파일해야 한다는 점을 유의하세요. 프로젝트 설정(Project Settings) -> C/C++ -> Optimization -> Optimization (Disabled /Od)에서 비활성화할 수 있습니다.

예제

example

감사의 말

  • Sektor7: Halosgate와 그들의 놀라운 Malware Development Advanced Vol 1에서 가르치는 HWBP 구현에 대해 감사드립니다.

  • @Am0nsec과 @RtlMateusz: 원본 Hellsgate 구현에 대해 감사드립니다.

  • Rad9800: TamperingSyscalls에서 얻은 영감에 대해 감사드립니다.

  • Yxel: Cronos에서 사용한 바이너리 패턴 매칭 코드에 대해 감사드립니다.

도구 다운로드