'Api Hook'에 해당되는 글 2건

  1. 2012.01.22 Hooking의 종류
  2. 2012.01.21 창과 방패 프로젝트란..
프로젝트/D3D Hooking2012. 1. 22. 16:56


창과 방패 및 d3d hooking 분석 작업을 하면서 hooking 의 방어 방법에 많은 생각을 하게 되었습니다.

먼저 방어 방법에 앞서 hooking 에는 무슨 종류가 있는지, 또 어떤 방법으로 후킹 하는지에 대해 알아보고

막을 수 있는 방법에 대해 연구해보도록 하겠습니다.

먼저 웹서핑을 통해 정리가 깔끔하게 되어있는 후킹의 분류에 대해 퍼왔습니다.



API Hooking은 크게 유저모드와 커널모드 두가지로 나뉜다.

 

 

User-Mode Hooking
 

  • IAT(Import Address Table) Hooking: IAT 에 적혀있는 API 의 주소를 자신의 함수주소로 바꾸고 자신의 함수 끝에 다시 원래 API 주소로 돌려주는 방식. 가장 일반적으로 바이러스에서 사용하는 기법.

  • Inline Function Hooking (Detour Hooking): 사용할 API 의 첫 5바이트를 자신의 함수주소로 Jmp 하는 코드로 바꾸고 자신의 코드에서 다시 원래 API 의 바뀐 코드를 수정해주고 API 시작위치로 돌려주는 방식. IAT 후킹보다 지능적이여서 찾아내기가 쉽지 않다. 요새 많이 등장한다.

 

Kernel-Mode Hooking (루트킷)
 

  • SSDT(System Service Descriptor Table Modification): SSDT 가 가리키는 주소를 후킹 함수의 주소로 바꾸고 그 함수 호출후 다시 원래 커널 API 의 주소로 돌려주는 기법. 50% 이상의 루트킷이 사용하는 기법. 이런 기법은 프로세스, 파일의 은폐에 많이 사용됨.

  • DKOM(Direct Kernel Object Modification): 커널 Object 를 직접 조작해서 실행되는 프로세스, 스레드, 서비스, 포트, 드라이버 및 핸들의 Entry 를 실행리스트(PsActiveProcessHead, PsActiveModuleHead....)에서 감추는 기법.

  • SYSENTER: 유저모드에서 시스템 호출로 넘어갈때 INT 2E(for Windows 2000)/ SYSENTER 를 사용하게 되는데 호출후 시스템 서비스의 핸들러는 IA32_SYSENTER_EIP 라는 레지스터리에 저장된다. 커널 드라이버를 설치하여 해당 값을 수정하여 루트킷을 호출하고 다시 원래 값으로 돌려주는 기법.

  • Filter Device Drivers: 시큐리티 제품의 하단에 filter device driver 로 등록하는 기법이다. 부트 타임에 로드됨으로써 다른 어떤 안티바이러스 제품보다 먼저 실행된다.

  • Runtime Detour Patching: 커널 메모리를 직접 조작함으로써 그 메모리의 포인터가 루트킷을 가르키게 함으로써 커널 함수들을 후킹하는 기법. 예를 들면 Exception 을 일으키고 Exception Handle 을 컨트롤하는 IDT 레지스터를 자신을 가리키는 주소로 써줌으로써 후킹목적을 달성한다.

  • IRP table Modification: 디바이스 드라이버가 네트웍 패킷을 처리하거나 파일을 쓸때 사용하는 I/O Request Packets을 제어하는 Dispatch Routine 은 DEVICE_OBJECT 구조체에 저장된다. 바이러스에서 사용하는 루트킷은 IoGetDeviceObjectPointer 란 API를 사용하여 DEVICE_OBJECT 구조체에서 DRIVER_OBJECT 의 위치를 선정해줄수 있다. 즉 다른 Original Driver Call 이 일어나기 전에 자신의 루트킷을 먼저 실행하여 Call 결과를 조
    작한다.
     
출처 : http://cafe.naver.com/cheatenginekorea.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=25962

'프로젝트 > D3D Hooking' 카테고리의 다른 글

Direct3D Hooking 분석 해봤습니다.  (13) 2012.01.20
Posted by NullBr4in
프로젝트/창과 방패2012. 1. 21. 04:07


프로젝트 팀원끼리 아무나 샘플 프로그램에 대해 공격을 하면 다른 사람은 또 방어 하는 동아리에서 하고 있는
프로젝트입니다.

현재 진행 중인 주제는 "키로거" 입니다.

팀원 내 한 명이 간단한 키로거를 처음으로 올려두었고, 이전에 해당 키로거를 분석을 끝내고 

이제 방어하는 프로그램을 만들어 보려고 합니다. 



사실은 이 프로젝트는 친구 혼자 후킹에 대해 공부하면서 키로거를 제작해보려는 개인 프로젝트 였습니다.

근데 제가 2011년 후반기에 있던 안랩 세미나에 갔을때, 쉬는시간에 실무자분들께 질문 할 수 있는 시간이 있어서 

공부 방향에 대해 지금 하고 있는것이 맞는지에 대해 물어 보았습니다.

지금 공부 방법에 대해 말했다가 엄청 혼났구요,,, 혼난 이유는,, 어떻게 보면 당연한거였습니다. 

뚫는 법을 알아야 막는법을 안다라는 말에서 제가 편한 부분만 취한거죠..

 생각하면서 4년 동안 공격에 대한 공부만 해왔습니다....

실무자분께서는 보안 공부하는데 꼭 공격을 할 필요가 있냐.. 현재 존재하는 악성프로그램들에 대해 방어 프로그램을

만들어보면 더 좋다고 하셨습니다.. 그리고 리버싱 기술에 대해서도.. 남이 만든 프로그램 크랙하기 보다는 

자기가 여러가지 언어로 만든 프로그램을 직접 리버싱 해보는게 도움이 된다고 하셨고요..

그래서 제 친구가 후킹에 대해 공부한다고 할 때 그럼 이걸 공동 프로젝트로 진행해서 방어도 같이 해보자는 의견을

내서 이 프로젝트가 시작되었습니다... 






아래는 프로젝트 계획서 입니다. 재밌어 보이나요?? 게시판 이야기는 동아리 홈페이지에 있는 게시판입니다~


----------------------------------------------------------------------------------------------------- 
본 게시판은 현 회장 안준과 2기 전성의 자체적 공동 연구주제인 키보드 해킹과 방어에 대한 연구 목적으로 개설되었습니다.

공통 연구 주제
0. WinApi Hooking
1. Dll Injection
2. Programming
3, 아래 열거 사항에 대한 공격과 방어
 
연구 주요 내용
0. 공격자는 지속적인 키로거를 제작하여 정해진 입력폼 프로그램이 활성화 됐을 때 방어자의 방어 프로그램을 무력화 시킨다.
1. 방어자는 정해진 입력폼 프로그램이  활성화 됐을 때 키로거를 탐지하고 키로그 기능을 원천적으로 방어해 낸다.
2. 공격자는 최신 트렌드의 입력폼 삽입공격에 대한 공격을 무차별 적으로 사용할 수 있다.
3. 방어자는 리소스에 대한 제약을 받지 않고 공격을 막을 수 있다.
 
연구 목적
0. 최종적으로 공격자와 방어자는 방어법을 익히는데 목적을 둔다.
1. 공격자와 방어자는 서로의 지식을 공유하고 공격과 방어법을 공유하여 서로의 지식을 공유하여 빠른 학습을 도운다.
 
연구 증명
0. 주기적으로 공격자와 방어자는 본 게시판에 진행 내역을 올린다.
1. 공격자 방어자는 서로의 프로그램이 뚫리면 이를 보고하고 대안된 프로그램으로 업데이트한다.

 
 
Posted by NullBr4in