자유게시판
윈도우 운영체제에서 시스템 프로그래밍 지식을 학습하고 시스템 해킹 시나리오를 한번 작성해 보았는데요 가능한지 알고싶습니다.
  1. ssss.dll이 물리메모리 0x00001111에 존재한다면
    프로세스 A의 가상메모리 유저 모드 공간의 0x00008888에 물리 주소 0x00001111이 맵핑되고
    프로세스 B의 가상메모리 유저 모드 공간의 0x00008888애 물리 주소 0x00001111이 맵핑되는데

0x00008888은 이름만 같은 서로 다른 두개의 가상메모리 공간이지만 둘은 같은 물리 메모리 공간 0x00001111에 맵핑된다고 알고있습니다.

  1. 커널 모드에서는
    ssss.sys가 물리메모리 0x00009999에 존재한다면
    프로세스 A의 가상메모리 커널 모드 공간의 0x80000001에 물리 주소 0x00009999이 맵핑되고
    프로세스 B의 가상메모리 커널 모드 공간의 0x80000001에 물리 주소 0x00009999이 맵핑되는데

0x80000001은 이름만 같은 서로 다른 두개의 가상메모리 공간이지만 둘은 같은 물리 메모리 공간 0x00009999에 맵핑된다고 알고 있습니다.

  1. 이러한 지식을 종합하여서 다음과 같은 시나리오를 계획하였는데 가능한가요??

A 프로세스를 커널 모드로 커널 코드를 실행하는데 그 과정에서 ssss.sys가 맵핑된 가상 주소 0x80000001을 찾았습니다.그리고 ssss.sys에는 kkkk라는 함수가 사용된것을 알게 되었습니다. kkkk함수가 시작되는 명령어의 시작 위치를 저장하는 가상 주소가 0x80000011인 것도 알게되었습니다. 이를 통해 dddd.sys를 만들어서 드라이버를 설치했는데 dddd.sys의 기능은 0x80000011에 접근해서 0x80000011에 사용된 kkkk함수의 시작 명령어를 조작해서 dddd.sys에 사용된 gggg함수를 가리키는 주소로 분기하는 기능입니다. 현재 드라이버를 설치했는데 그러면 A와는 전혀 상관없는 B라는 프로세스가 커널 모드로 커널 코드를 실행하였을 때 ssss.sys의 kkkk함수를 사용한다면 dddd.sys의 gggg함수가 실행되는 건가요???

작성자 정보
avatar
Wane
리버싱 입문
4개월 전
네. 글에 적힌 내용이 제가 아는 바로는 모두 논리적이고 실제 컴퓨터에서 일어날 수 있는 시나리오가 맞습니다. 전문적으로 이것을 커널 모드 후킹이라고 합니다. 하지만 이를 이용해서 해킹을 한다던가 하는 것은 거의 불가능할 것 같습니다. 보통 커널 모드 훅은 NT 커널 함수나 기본 내장 시스템 드라이버 (예를 들어 dxgkrnl.sys) 함수에 설치하는데, 그 함수들(Windows System Call Table 상의 모든 함수)에 훅을 거는 것은 윈도우 딴에서 KPP (PatchGuard)를 통해 금지하고 있습니다. 유저 모드 프로그램에서 커널 모드로 넘어갈 때 보통 syscall을 쓰므로 표준 함수에 훅을 못 거는 것은 치명적입니다. 그래서 다른 사람의 컴퓨터에 접근해 커널에서 해킹하는 것은 못 할 것 같습니다.