반응형
커널 모드 디버거

커널 모드 디버거는 특징 프로세서가 아닌 시스템을 전체적으로 보고자 할 때 사용하는 디버거다. 유저모드 디버거와 달리 커널 모드 지버거는 운영체제에서 실행되
는 하나의 애플리케이션이 아니라 시스템의 커널과 동등한 컴포넌트로 존재해서 전체적인 시스템을 관찰하거나 실행을 중지할 수 있다. 커널 모드 디버거는 일반적으로 
유저 모드 디버깅 기능도 제공한다. 하지만 디버거는 실행되는 프로세서의 간의 메모리 주소 영역이 바뀌는 것을 알아야 하므로 경우에 따라 다소 문제가 될 수도 있다.

커널 모드 디버거는 일반적으로 디바이스 드라이버 개발자와 다양한 운영체제 확장 기능 개발자와 같은 커널 레벨 개발자를 대상으로 만들어졌지만 다른 목적으로도
유용하게 사용할 수 있다. 리버서에게 있어서 커널 모드 디버거는 실행 중인 모든 프로세서와 시스템 전체에 대한 정보를 제공하므로 맏을 수 없을 정도로 큰 도움을
주곤 한다. 사실, 많은 리버서가 커널 모드를 리버싱하든지 유저 모드를  리버싱하든지 상관없이 커널 디버거만을 사용한다. 물론 커널 모드 코드를 리버싱 하는 경우
에는 커널 모드 디버거를 필수적으로 사용해야 한다.

커널 모드 디버거의 강력한 기능 중 하나는 바로 로우레베 브레이크 포인트를 걸 수 있다는 것이다. 특정 연산이 프로그램 내의 어느 부분에서 수행되는지 판단 하고 싶
을 때 가장 흔히 수행하는 방법은 해당 연산을 수행하기 위해서 호출되는 운영체제 API에 브레이크 포인트를 수행하는 코드가 어디인지 알고 싶다면 윈도우를 이동시키는 
시스템 API에 브레이크 포인트를 설정할 수 있다. 하지만 윈도우 창을 이동시키는데 사용할 수 있는 API가 상당히 많고 윈도우 창을 이동시키는 프로세스가 어느 것인지
정확히 알지 못할 수도 있다는 것이 문제다. 커널 디버거는 이에 대한 훌륭한 해결책을 제공한다. 즉 윈도우 창을 이동시키는 운영체제와 로우레벨 코드에 브레이크 포
인트를 설정하는 것이다. 프로그램이 윈도우 창을 이동시키기 위해서 어떤 API를 사용하는지 결국에는 그 작업을 수행하는 운영체제와 로우레벨 코드가 실행된다.

불행하게도 커널 모드 디버거는 설치하기 복잡한 경우가 많다. 그리고 운영체제를 불안정하게 할 수 잇으므로 일반적인 커널 모드 디버거를 위한 전용 시스템을 필요로
한다. 또한 커널 디버거는 하나의 프로세서가 아닌 시스템 전체의 실행을 중지시키므로 커널 디버거가 열려있는 동안에는 시스템이 멈춰있게 되고 어떤 스레드도 
실행되지 않는다. 커널 모드 디버거는 이런 제약 사항으로 인해 유저모드 디버거가 원하는요구사항을 만족시켜주는 한 커널 모드 디버거를 설치하지 말것을 권장한다.
전형적인 유저 모드 리버싱 시나리오에서 과도하게 커널 모드 디버거까지 사용할 필요는 없다.


'Security > Reverse Engineering' 카테고리의 다른 글

Rootkit Detection  (0) 2018.02.16
Reversing(역공학)  (0) 2018.02.16
반응형

 리버스 엔지니어링이란, 어떤대상이 동작하는 원리를 알아보기 위해 그 속을 뜯어보는 기법을 말한다. 게임 해커들의 커뮤니티는 게임 클라이언트 프로그램을 리버스 엔지니어링하는데 대해 상당한 관심과 노력을 쏟고 있으며, 게임 클라이언트와 게임 서버간의 통신에 대해서도 지대한 관심을 보이고 있다. 게임 클라이언트 로직과 데이터 구조를 알아내는 것은 실제 게임동작에 관한 심도 있는 이해는 게임 해킹 툴을 만드는 초석이 된다.

 이 카테고리에서 선보일 기법은 우리가 어떤 신작 게임을 파고들던지 간에 어차피 미리 배워 놓아야할 기술들이다. 항상 새로운
MMO 게임이 출시되고 있긴 하지만, 그 각각의 게임은 이 책을 통해 언급한 보안 문제를 똑같이 겪게 될 것이다. 여기 소개되는 기법과 취약점은 어느 한 게임에 종속되는 것이 아니기 때문이다.

몇몇 테크닉의 경우에는 더 그렇다. 리버스 엔지니어링만해도 우리가 어떤 새로운 게임의 에물레이션 서버를 만들어보고자 한다면 꼭 필요한 기법이다. 게임 클라이언트와 중앙 서버간에 사용되는 네트워크 프로토콜을 완전히 이해할 수 있다면 우리들만의 서드파티 서버를 만드는 것도 가능하다. 일단 리버싱을 완전히 이해한 뒤에는 스니퍼나 패킷 인젝터, 봇뿐만 아니라 클라이언트 상태값 조작 해킹 툴 등의 것을 만들 수 있게 된다.

결로은 리버스 엔지니어링을 통해 게임 클라이언트의 논리적인 구조를 알아볼 수 있고, 객체 들이 어떤 식으로 조직되어 있는가와 또 어떻게 다루어지는지, 어떤 코드가 무엇을 하는지 밝혀낼 수 있다는 것이다.

'Security > Reverse Engineering' 카테고리의 다른 글

커널 모드 디버거  (0) 2018.02.16
Rootkit Detection  (0) 2018.02.16

+ Recent posts