2008. 8. 6. 17:02 과거 저장소/Something New
728x90

08년 8월 마이크로소프트웨어(이하 마소)를 읽다가 괜찮은 문구가 있어서 기록합니다.

인제대학교 의용공학과 전종웅 교수님의 말씀입니다.

3C란?
  - 변화(Change)
  - 경쟁(Competition)
  - 도전(Challenge)

과연 위 3단어를 접하게 되면 다시금 자기를 되돌아보게 됩니다.
각각 위 단어들에 대해 받아들이는 느낌이 다를 거라 생각이 듭니다.

지금 느끼고 있다면, 어서 실천(행동)으로 옮기십시오.

저 역시 쉽지 않지만, 노력하려 합니다.^0^

- 자세항 사항은 8월 마소를 참조하세요!
 

728x90
posted by acedon
2008. 7. 28. 14:30 과거 저장소/Something New
728x90
구글 이메일 주소 이미지를 만들어보겠습니다.

나의 구글 이메일 주소 이미지

어려운거는 하나도 없습니다.
그냥아래의 링크를 따라가서 자신의 이메일 주소와 원하는 메일 계정을 선택하시면 이미지가 생성됩니다.
그 이미지를 다운로드 받으실 수도 있고, 링크된 주소를 사용하셔도 됩니다.

728x90
posted by acedon
2008. 7. 27. 22:50 과거 저장소/Device Driver
728x90

디바이스 드라이버 스터디 1일차

주제
  - 드라이버 개발 환경 구성
  - WinDBG를 이용한 유저모드 디버깅
  - WinDBG를 이용한 커널모드 디버깅
  - 초 간단 드라이버 제작

invalid-file

요약본 받기

728x90
posted by acedon
2008. 7. 27. 03:53 과거 저장소/Windows Info
728x90

이것저것 공부하던중에 또 샛길로 빠지는 바람에 여기까지 오게되었습니다.
후킹이라는 말은 예전에 들어봤지만 사실상 간단한 개념만 알고 있었지 제대로 된 부분은 잘 몰랐습니다. 그래서 이번기회에 그나마 여러 글들을 읽고 제가 받아들인 부분을 정리차 한번 써보겠습니다.
일단 간단하게 후킹이라는 말이 무엇을 뜻하는지 알아보겠습니다.

            후킹이라는 의미는 가볍게 생각해서 "낚아채다", "가로채다"라고 생각하면 쉽습니다.

그러니 다시 말하자면 어떤 일을 행하려 할때 원래 수행되던 일이 있지만, 그 부분을 가로채서 새로운 일을 하도록 만드는 일이 바로 "후킹(Hooking)" 이라고 할 수 있겠습니다.
이렇게 설명을 듣다보니 뇌리에 스치는 부분이 있을지 모르겠습니다. 바로 이 후킹이라는 부분을 악용한다면?? 이란생각 말입니다. 물론 그런 부분들로 문제가 야기되고 있으니 우리는 악용하면 안되겠죠?ㅎ

이 후킹에도 2가지 정도 종류로 나눌 수 있습니다.
1. 메시지 후킹(Message Hooking)
2. API 후킹(API Hooking)

처음 말한 메시지 후킹은 Windows의 구동방식을 알면 좀더 쉽게 이해할 수 있습니다.
윈도우는 메시지 구동(Message Driven)방식으로 실행되고 있습니다. 이게 무슨 말이냐 하면 우리가 하는 모든 작업은 메시지를 발생되게 되어있습니다. ex) WM_MOUSEMOVE, WM_KEYDOWN
위와 같이 마우스를 움직일 때, 키를 누를 때 처럼 하나하나의 이벤트의 중심이되어서 윈도우는 실행되게 되어있습니다. 이런 메시들이 발생 되면 메시지 큐(Message Queue)라는 공간에 차곡차곡 쌓이게 되고 앞에서 부터 처리 함수로 보내지게 되는데 그 때, 또는 메시지 큐에 들어오려는 시점에서 중간에 가로채서 특정 작업을 할 수 있겠금 바꾸게 되면 그게 바로 메시지 후킹이라는 방법이 되겠습니다. ex)Enter키를 눌렀는데 ESC효과가 나온다

그렇다면 이제 설명 드릴 API 후킹은 무엇인가 하면 API호출이 일어날 때 그 호출을 가로채는 것입니다.
API호출을 하면 그 해당하는 호출 루틴으로 가지 않고 자신의 지정한 작업을 행하게 하는것입니다.

그럼 이제 본론인 User-Mode와 Kernel-Mode의 API Hooking기법들 소개하겠습니다.

 

User-Mode Hooking

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

Kernel-Mode Hooking (루트킷)

  • SSDT(SystemService 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 로 등록하는 기법이다. 부트 타임에 로드됨으로써 다른 어떤 안티바이러스 제품보다 먼저 실행된다.
  • RuntimeDetour Patching: 커널 메모리를 직접 조작함으로써 그 메모리의 포인터가 루트킷을 가르키게 함으로써 커널 함수들을후킹하는 기법. 예를 들면 Exception 을 일으키고 Exception Handle 을 컨트롤하는 IDT 레지스터를 자신을가리키는 주소로 써줌으로써 후킹목적을 달성한다.
  • IRP table Modification: 디바이스드라이버가 네트웍 패킷을 처리하거나 파일을 쓸때 사용하는 I/O Request Packets을 제어하는 DispatchRoutine 은 DEVICE_OBJECT 구조체에 저장된다. 바이러스에서 사용하는 루트킷은IoGetDeviceObjectPointer 란 API를 사용하여 DEVICE_OBJECT 구조체에서 DRIVER_OBJECT의 위치를 선정해줄수 있다. 즉 다른 Original Driver Call 이 일어나기 전에 자신의 루트킷을 먼저 실행하여Call 결과를 조작한다.

출처 : http://octet.egloos.com/1061888

728x90
posted by acedon
2008. 7. 26. 09:36 과거 저장소/IT infomation
728x90

우리는 흔히들 겪는 일들 중에 하나가 메모리를 4GB로 업그레이드 하고 기분좋게 확인을 해보면 4GB로 잡히지 않고 3.2GB 아니면 3.4GB정도로 만족할만한 용량으로 잡히지 않는 경우가 대부분일 것입니다.

이런 부분에 있어서 보통 Windows XP가 32Bit 운영체제 이기때문에 참조 할 수 있는 주소가 32Bit이기 때문이라고 합니다. 사실상 32Bit이면 4GB까지 지원가능합니다.

이부분에 대해서 정리된 내용이 있어서 이렇게 링크를 걸어 봅니다.


728x90
posted by acedon