ssdt 후킹 예제

 Senast ändrad 2 augusti, 2019 kl 13:24
aug 022019
 

로드된 모든 모듈은 API의 실행 흐름을 우회하여 프로세스에서 핸들을 열려는 모든 시도를 필터링할 수 있습니다(이 예에서). NtTerminateProcess를 사용하여 프로세스를 종료하려면 충분한 권한이 있는 핸들이 필요하기 때문에 이는 매우 중요합니다. NtOpenProcess에 대한 호출을 거부하면 어떤 프로그램도 지정된 프로세스를 죽일 수 없습니다(이론적으로…). CR0 레지스터에서 WP 비트를 사용하지 않도록 설정하지 않고 읽기 전용 메모리에 쓰려고하면 어떻게되는지 살펴보겠습니다. 우리는 우리가 HookSSDT 함수에서 DisableWP() 함수 호출을 주석 것을 제외하고, hookssdt 프로젝트에 정의 된 것과 동일한 프로그램을 시도 할 수 있습니다. InterlockedExchange 함수 호출 시 시스템이 충돌하고 WinDbg 디버거에 기록 된 다음 메시지가 남게됩니다. 이것은 Windows7 홈 프리미엄 x86 (6.1.7600 버전)에서 작업 하는 ssdt-hook 프로그램 후크의이 방법은 매우 안전 하지 않은, 커널 공간 동기화에서 작업할 때 매우 중요 하다. 보호를 사용하지 않도록 설정하고 메모리를 교환하거나 후크를 삽입하려는 것은 BSOD가 발생할 수 있습니다. 인터록익스체인지 및 Mdl 페이지를 사용합니다. 그래도 즐길 수, 이 물건은 꽤 재미있다. 그러나 SSDT를 연결하는 몇 가지 다른 팁이 존재하며 일부 루트킷은 SSDT의 주소를 변경하지 않고 대상 API의 첫 번째 바이트의 어셈블리 명령을 변경하여 후킹 모듈을 가리킵니다. 이를 인라인 후크(여기서 다루지 않음)라고 합니다. 또한 이전 ZwQuerySystemInformation 함수의 주소를 저장해야 하므로 추가 정의가 필요합니다.

기존 후킹 루틴에서 이전 루틴을 호출할 수 있도록 이 기능이 필요하므로 함수의 기능이 변경되지 않고 약간 변경되었습니다. 이 블로그 포스트에서 우리는 간략하게 잘 알려진 Syscall 후킹 기술 (예를 들어 http://resources.infosecinstitute.com/hooking-system-service-dispatch-table-ssdt/)에서 수집 할 수 있습니다) 여러 악성 코드 샘플에 의해 사용되는 설명 ( laqma 트로이 목마처럼) 바로 일부 메모리 분석 도구가 분석 및 / 또는 이들의보고에 문제가있는 방법을 논의 한 후. 마이클 코헨 (rekall)과 마이클 Ligh (변동성)와 약간의 피드백 라운드연락 후 – 그 btw 주셔서 감사합니다. – 첫 번째 아이디어는 바이너리 경로와 같은 추가 정보를 표시하는 것이었으며, 이는 관련 커널 개체에 대한 액세스로 쉽게 조작 할 수 있습니다. 우리의 관점에서 가장 유망한 접근 방식은 NT 모듈 / Win32 하위 시스템의 인스턴스보다 더 많은 것이 있는지 여부를 확인하는 추가 테스트 (ssdt 플러그인에 포함됨)입니다. 이 경우 각 테이블 출력의 시작 부분에 있는 간단한 줄로 이 사실을 알리는 것만으로도 문제가 있을 수 있음을 나타낼 수 있습니다. 우리는 특히 KiServiceTable에 관심이 있어, SSDT 테이블은 우리가 문서의 나머지 부분에 후크 거 야. 이 시점에서 SSDT 테이블은 보호 모드를 입력하기 전에 여전히 사용되는 실제 모드에서 만난 IDT 테이블과 매우 유사하다고 말하고 싶었습니다.

따라서 SSDT 테이블에 저장된 커널 루틴을 연결하려면 SSDT 테이블의 포인터를 덮어써야합니다. 첫 번째 SSDT의 경우 rekall은 ”ntoskrnl” 이름을 ”nt”로 해결하지만 오프셋을 쉽게 발견 할 수있는 유효한 함수 이름으로 오프셋을 해결하지 않습니다. 현재 NT 및 win32k 모듈 (GUID 및 PDB 파일 이름 조정)에 따라 PE 헤더 내의 디버깅 정보를 수정하여 rekall을 속이려고했지만 아무 것도 변경하지 않았습니다. 이것은 코드를 살펴보고 디버깅을 할 시간이었습니다 (다행히 rekall도 오픈 소스입니다). 이 프로세스와 몇 가지 덤프 를 더 하는 동안 유망한 시나리오를 확인했습니다. 커널 모듈의 경우 우리는 우리의 간단한 접근 방식과 운이 없었다,하지만 ”win32k.sys”와 그림자를 후크 할 때, 일부 메모리 덤프에 우리는이 결과를 얻었다 : 우리가 또한 후킹 할 것이다 두 번째 기능은 ZwQuerySystemInformation, 이는 검색 시스템 정보를 지정합니다.

Tyvärr, det är nu stängt för kommentarer här.

© 2011 Radiostyrd Bilsport Suffusion theme by Sayontan Sinha