2012-05-09 4 views
1

가상 드라이버를 사용하고 싶습니다. 이에 대한 다른 질문을 읽었지만 실제로 갈 수는 없습니다. 기본적으로 내가 놓친 분명한 도구가 있는지 살펴보고 Windows 게스트로부터 IOCTL을 퍼팅하는 것이 효과가 있는지 알고 싶습니까? 또는 저수준 (예 : 입/출력)으로 작성해야합니까?Fuzzing virtual drivers tools

모든 도구 밖에 하이퍼 바이저 하이퍼 V 또는 VM웨어 중 하나를 칠 윈도우 게스트에 퍼징 드라이버

가상화 코드를 운동하는 방법에는 여러가지가 있습니다

답변

1

.

물론, Windows 사용자 인 경우 IOCTL 인터페이스가 있습니다.

그런 다음 모든 가상 장치는 게스트 OS와 호스트 OS의 일부 코드로 어떤 식 으로든 에뮬레이트됩니다. 따라서 입력 장치 (키보드 및 마우스), 비디오 장치, 스토리지 (디스크), 네트워크 카드, 통신 포트 (직렬, 병렬), 표준 PC 장치 (PIC, PIT, RTC, DMA), CPU APIC 등에 액세스하는 것도 가능합니다. 가상화 코드를 연습하십시오.

Windows에서 VMBUS를 통해 작동하는 합성 장치에 대해 언급하지 않는 한 다양한 PC 장치의 가상화는 장치 메모리 맵핑에 액세스하는 명령을 인터셉트, 구문 분석 및 에뮬레이션/실행함으로써 수행됩니다 버퍼 및 레지스터 및 I/O 포트가 있습니다. 이것은 파운드화할 또 다른 "인터페이스"를 제공합니다.

장치 관련 버그뿐만 아니라 명령 관련 버그도 발견 할 수 있습니다. 후자에 관심이 있다면 x86 CPU가 다양한 모드 (실제, 가상 8086, 보호, 64 비트)에서 명령어 수준에서 어떻게 작동하는지, 인터럽트 및 예외를 처리하는 방법 및 또한 PC 장치에 액세스하는 방법 (메모리 주소 및 I/O 포트 번호)과 방법을 알아야합니다.

Btw, Windows에서 커널에서 코드가 실행되고 있지 않으면 Windows에서 직접 이러한 작업에 액세스 할 수 없습니다. Windows의 과도한 보호 기능을 피하기 위해 비 Windows 게스트 VM을 설치하고자 할 수 있습니다. 엣지 케이스, 비정상적인 명령어 인코딩 (잘못된 인코딩 포함) 또는 일반적인 작업 (예 : FPU/MMX/SSE/etc 또는 특수 보호 모드 명령어 (SIDT와 같은)을 사용하여 장치에 액세스)에 대한 비정상적인 지침을 찾습니다. 생각하고 장난 꾸러기.

또 다른 고려해야 할 사항은 경쟁 조건과 계산 또는 I/O 부하입니다. 당신은 그 방향으로 탐구하는 행운을 가질 수도 있습니다.

+0

멋진 덕분에 이런 일을하기 위해 이미 유용한 도구가 있습니까? 나는 ioctlfuzzer를 보았습니다. 그러나 그것에 관한 것입니다. – rhinox80

+0

나는 어떤 것도 모르고있다. –

+0

그러면 ioctlfuzzer가 시작하기에 좋은 곳이겠습니까? Windows 장치에서 IOCTL을 무작위로 퍼지한다고합니다. – rhinox80