- SSDT는 사용자 통화와 핵심 서비스 간의 브리지 역할을 합니다. Windows.
- 이를 조작하는 방식은 보호와 공격(루트킷, 바이러스 백신) 모두에 있어서 기본적인 기술입니다.
- SSDT의 구조와 보호 기능은 악의적인 수정을 방지하기 위해 발전했습니다.
내부 작동 방식 이해 운영 체제 특히 보안, 개발과 관련된 문제에 있어서는 모든 IT 전문가에게 현대성이 필수적입니다. 드라이버 또는 역공학. 이 분야의 핵심 개념 중 하나는 시스템 서비스 설명자 테이블(SSDT), Windows 시스템 핵심의 기본 구조로 일반 사용자는 종종 이를 알아차리지 못하지만 소프트웨어와 시스템 간의 상호 작용에서 중요한 역할을 합니다. 하드웨어시스템 호출 관리 및 불행히도 세계의 특정 공격 및 방어 기술에서도 악성 코드 및 바이러스 백신.
이 기사에서는 다음을 제공합니다. SSDT가 무엇인지에 대한 완전하고 자세한 개요다양한 Windows 버전 및 아키텍처에서 어떻게 작동하는지, 시스템 호출(syscall)을 실행하는 데 어떤 역할을 하는지, 루트킷과 합법적인 보안 도구 모두에서 어떻게 사용될 수 있는지, 그리고 어떤 기술을 통해 검사, 조작 또는 무결성 보호가 가능한지 등에 대해 설명합니다. 드라이버 개발, 포렌식 분석 등에 참여하고 있다면, 사이버 보안 또는 Windows 시스템의 핵심에 관심이 있다면, 이 가이드는 필수 참고 자료가 될 것입니다.
시스템 서비스 설명자 테이블(SSDT)이란 무엇입니까?
La 시스템 서비스 설명자 테이블, 또한 다음과 같이 언급됨 시스템 서비스 디스패치 테이블 SSDT라는 약어로 알려진 Windows 커널에서 유지 관리하는 특수 테이블입니다.NTOSKRNL.EXE)에는 사용자 공간에서 발생하는 시스템 호출 처리를 담당하는 커널 함수에 대한 포인터가 포함되어 있습니다. 즉, 애플리케이션이나 사용자 라이브러리(예: ntdll.dll) 운영체제 커널의 내부 서비스와 함께.
En 32 비트 시스템SSDT는 커널 함수에 대한 절대 주소 배열일 뿐입니다. 64비트 파일보안 및 효율성상의 이유로, 이 테이블은 커널 내의 알려진 기준점으로부터의 상대 오프셋을 저장합니다. 이 세부 정보는 내부 함수 경로가 어떻게 확인되고 디버거나 분석 도구가 해당 경로를 분석하거나 조작하는 방식에 영향을 미치기 때문에 중요합니다.
SSDT가 실제로 작동하는 방식
사용자 공간에서 커널로의 처리까지 시스템 호출의 흐름은 다음과 같이 요약할 수 있습니다.
- 예를 들어 사용자 프로그램이나 프로세스는 Windows API 함수를 사용하여 파일을 여는 것을 요청합니다. CreateFile.
- 이 호출은 다음 함수를 호출하는 것으로 끝납니다. ntdll.dll 으로 NtCreate파일연관된 시스템 호출(syscall)을 준비하는 역할을 합니다.
- 의 기능 ntdll.dll 명령을 실행한다 시스템 콜 (x64에서) 또는 정수 0x2e (x86에서) 인덱스가 매개변수로 전달되어 어떤 시스템 서비스가 필요한지 고유하게 식별합니다.
- 이미 커널 모드에서 해당 인덱스는 검색에 사용됩니다. SSDT 해당 커널 함수의 오프셋 또는 주소, 그리고 제어가 해당 함수로 전송됩니다(예: nt!NtCreateFile).
이런 식으로 SSDT 이는 수백 개의 커널 함수를 체계적이고 효율적인 방식으로 사용할 수 있도록 하는 점프 테이블 역할을 하며, 사용자 공간과 보호된 커널 공간을 명확하게 분리합니다.
SSDT의 내부 구조와 메모리에서의 표현

Windows 커널에서 SSDT는 다음과 같은 구조를 통해 액세스할 수 있습니다. KeServiceDescriptorTable, 본인이 직접 수출 NTOSKRNL.EXE. 이 구조에는 테이블 기반을 포함하여 테이블에 대한 주요 정보가 포함되어 있습니다.키서비스테이블), 서비스 수 및 기타 메타데이터.
SSDT에 액세스하고 입력을 해석하는 방법은 아키텍처마다 다릅니다.
- En x86(32비트), 키서비스테이블 각 요소가 커널 함수의 절대 주소를 직접 가리키는 배열입니다.
- En x64(64비트), 요소는 기준에 대한 상대적 변위(오프셋)이므로 실제 주소를 얻으려면 해당 기준을 취하고 해당 변위를 추가하는 공식을 적용해야 합니다. 일반적으로 오른쪽으로 약간 조정한 후(오프셋 >> 4).
WinDBG 디버거를 사용하여 테이블이 메모리에 어떻게 형성되는지 보여주는 실제 예를 살펴보겠습니다.
0: kd> dps nt!KeServiceDescriptorTable L4
fffff801`9210b880 fffff801`9203b470 nt!KiServiceTable
fffff801`9210b888 00000000`00000000
fffff801`9210b890 00000000`000001ce
fffff801`9210b898 fffff801`9203bbac nt!KiArgumentTable
첫 번째 요소는 다음을 가리킵니다. 키서비스테이블즉, SSDT 자체입니다. 세 번째 요소는 일반적으로 사용 가능한 서비스 수를 나타냅니다. 검사할 때 키서비스테이블, 우리는 SSDT에서 내보낸 각 커널 함수에 대한 변위 또는 주소를 나타내는 일련의 값을 보게 될 것입니다.
테이블의 변형: SSDT 및 SSDT Shadow
En 최신 버전의 Windows 메인 테이블 외에 "섀도우" 테이블이 있습니다. KeServiceDescriptorTableShadow. 이 두 번째 테이블은 일반적으로 시스템의 그래픽 인터페이스와 관련된 서비스(예: 호출)와 같은 보다 구체적인 서비스에 사용됩니다. 윈32k). 시스템은 호출 프로세스의 매개변수를 통해 실시간으로 두 테이블 중 어느 것을 사용하여 주어진 시스템 호출을 해결해야 하는지 결정합니다.
예: SSDT를 사용하여 커널 호출 및 함수 확인
개발자나 분석가가 특정 시스템 호출 번호가 어떤 커널 함수에 해당하는지 알고 싶어한다고 가정해 보겠습니다. 예를 들어, NtCreate파일그 과정은 다음과 같습니다.
- 우리는 코드를 살펴보면서 syscall의 인덱스를 식별합니다. ntdll.dll예를 들어 0x55일 수 있습니다.
- 각 항목 키서비스테이블 (SSDT)는 4바이트를 차지하므로 시스템 호출 0x55에 대해 위치에 액세스합니다. 키서비스테이블 + 4*0x55.
- 우리는 변위를 추출하고, 적절한 공식을 적용하여 함수의 절대 방향을 풉니다.
- 디버거에서 함수를 분해하여 이 오프셋이 실제로 해당 코드를 가리키는지 확인할 수 있습니다. nt!NtCreateFile.
이 시스템은 사용자로부터 발생하는 모든 시스템 호출이 효율적이고 안전하게 적절한 내부 기능으로 라우팅되도록 하여 시스템 무결성을 유지하고 성능을 최적화합니다.
SSDT 분석 및 조작 기술
접근 및 분석 SSDT 이는 합법적인 드라이버 개발과 루트킷 및 맬웨어 탐지에 모두 필수적입니다. 예를 들어, WinDbg 표에 있는 함수의 모든 절대 주소는 SSDT를 순회하며 각 주소와 연관된 API의 이름을 확인하는 스크립트를 통해 추출할 수 있습니다. 스니펫 예시 스크립트:
.foreach /ps 1 /pS 1 ( offset {dd /c 1 nt!KiServiceTable L poi(nt!KeServiceDescriptorTable+10)}){ r $t0 = ( offset >>> 4) + nt!KiServiceTable; .printf "%p - %y\n", $t0, $t0 }
이 기술을 사용하면 가능한 수정 사항을 나열하고 분석하고, 기능이 후크되었는지 확인하고, 가능한 감염을 감지할 수 있습니다.
SSDT 후킹: 합법적 사용 및 악성 코드 남용
SSDT를 수정하는 기술은 다음과 같습니다. SSDT 후킹는 특정 시스템 호출을 자체 함수(일반적으로 타사 드라이버)로 리디렉션하기 위해 테이블 항목을 대체하는 작업입니다. 이를 통해 특정 작업을 가로채거나 수정하거나 차단할 수 있으며, 이는 안티 바이러스 y 방화벽 실시간으로 시스템을 보호합니다.
그러나 이 동일한 기술은 다음에서 널리 활용되었습니다. 루트킷 고급 맬웨어를 사용하여 존재를 위장하고, 프로세스, 파일 또는 연결을 숨기거나, 심지어 커널에서 임의 코드 실행을 용이하게 합니다. SSDT 후킹은 중요한 시스템 이벤트에 대한 완전한 제어권을 부여하기 때문에 특히 위험할 수 있으며, 일단 변경되면 적절한 도구나 명확한 시스템 참조 없이는 변경 사항을 감지하기 어렵습니다.
루트킷 설치 전후 SSDT 상태를 비교하면 명확한 예를 볼 수 있습니다.
| 루트킷으로 | 루트킷 없음 |
|---|---|
| … f7c38486 … | … 8056f074 … |
루트킷이 합법적인 주소를 자신의 주소로 대체했습니다. 다음 명령을 사용하여 인 WinDbg에서는 어떤 합법적인 기능이 스푸핑되었는지 식별할 수 있습니다(예: NtQueryDirectoryFile), 그리고 맬웨어가 숨기려고 하는 것(악성 파일이나 디렉토리 등)을 알려줍니다.
두 가지 이유 모두 SSDT 후킹은 양날의 검입니다. 고급 보안 솔루션을 구현할 수 있지만, 시스템을 회피하고 비밀리에 제어할 수 있는 매우 효과적인 메커니즘을 제공하기도 합니다.
SSDT의 한계, 보호 및 발전
수년에 걸쳐 Microsoft 타사 드라이버나 맬웨어가 항목을 자유롭게 수정하지 못하도록 테이블의 보안을 강화했습니다. 예를 들어, 패치가드 x64 시스템에서 (커널 패치 보호) SSDT 무결성에 대한 자동 모니터링이 구현되며 허용된 메커니즘 외부에서 이를 변경하려는 시도는 항상 다음과 같은 결과로 끝납니다. 추락 시스템(블루 스크린).
더욱이 최신 Windows 버전은 개발자가 SSDT에 직접 접근하거나 수정하는 대신 문서화된 API와 기술을 사용하도록 권장하여 공격 표면을 줄이고 향후 호환성 문제를 방지합니다. 그러나 SSDT의 작동 방식과 보안 또는 검사 방법을 이해하는 것이 필요한 상황(포렌식 분석, 악성코드 조사, 드라이버 호환성 등)도 여전히 존재합니다.
SSDT와 다른 시스템 테이블의 차이점
SSDT는 종종 다른 서비스 또는 인터럽트 설명자 구조와 혼동되지만 예를 들어 다음과 구별하는 것이 중요합니다. 인터럽트 설명자 테이블(IDT)SSDT는 사용자 공간에서 시스템 호출(커널 서비스)을 처리하는 반면, IDT CPU에 도달하는 하드웨어 및 소프트웨어 인터럽트를 처리하여 적절한 인터럽트 서비스 루틴(ISR)으로 전달하는 역할을 합니다. 각 루틴은 고유한 구조, 기능 및 보호 메커니즘을 가지고 있지만, 둘 다 운영 체제의 안정성과 보안에 필수적입니다.
바이트와 기술 전반에 관한 세계에 대한 열정적인 작가입니다. 나는 글쓰기를 통해 내 지식을 공유하는 것을 좋아하며 이것이 바로 이 블로그에서 할 일이며 가젯, 소프트웨어, 하드웨어, 기술 동향 등에 관한 가장 흥미로운 모든 것을 보여 드리겠습니다. 제 목표는 여러분이 간단하고 재미있는 방식으로 디지털 세계를 탐색할 수 있도록 돕는 것입니다.
