2011-04-20 6 views
4

Linux 커널이 호스트 커널 인 경우 게스트 커널이 가상 시스템 내에서 실행하는 것에 영향을 받아서는 안됩니다.Linux KVM에 대해 fuzzing 테스트를 작성하는 방법은 무엇입니까?

게스트 커널에서 호스트 커널로 인터페이스를 퍼지 (fuzzing)하여 해당 속성을 테스트하고 싶습니다. 테스트가 게스트 커널 내부에서 (예를 들어, 커널 모듈에서) 실행되고 임의의 코드를 생성 한 다음 해당 코드를 실행해야한다는 것이 확실합니다. 호스트 커널이 충돌하거나 ("재미있는"일을하는 경우) 테스트가 실패합니다.

그래서, 내 질문은 : 당신은 이미이 작업을 수행 할 어떤 시험의

  • 알고 계십니까?
  • 예기치 않은 호스트 커널을 손상시킬 수있는 지침이 있습니까?
  • Linux 커널에서 가비지를 생성하는 가장 좋은 방법은 무엇입니까?
  • 가비지가 생성되면 어떻게 실행합니까?

당분간 일반적인 퍼지 접근법에 중점을두고 싶습니다. 나중에이 테스트가 작동하면 커널에서 다른 가상화 된 명령어와 드라이버를 외과 적으로 바꿔보기로 바꿀 것입니다.

업데이트 : 완전 쓰레기와 보풀, 더 그것에 대해 생각 후 내가 내 호스트를 충돌 것으로 예상 한 것보다 더 자주 내 게스트 머신의 방법을 충돌 할 것이기 때문에 작동하지 않을. 그래서 처음부터 외과 적으로 접근해야한다고 생각합니다. 어떤 충고?

+0

다소 야심 찬, 아마 당신은 더 쉬운 프로젝트를 해킹하여 치아를 잘라야합니다. – rook

답변

2

장황한 0 일을 찾는 정도는 상상력이 테스트를 작성하는 것입니다. 시스템을 테스트 할 때 공격면을 식별해야합니다. 웹 응용 프로그램에서는 GET/POST 요청이 쉽습니다. VM과 같은 것, 더 복잡합니다. 사용자에게 제공되는 실제 하드웨어는 KVM에 의해 만들어지는 환상입니다. 어떤 시점에서이 장치와이 데이터 상호 작용이 호스트에 의해 처리됩니다.

다른 중요한 리소스는 이미 대상에서 발견 된 취약점을 찾고 있습니다. 종종 프로그래머는 매우 유사한 실수를 범합니다. 비슷한 버그가 매우 흔합니다. These CVE's: CVE-2010-0297 CVE-2010-0298 CVE-2010-0306 CVE-2010-0309은 LInux의 KVM 취약점의 좋은 예입니다. 두 개의 하드웨어 장치는 CPU와 USB로 구성되어 있는데, 둘 다 손상되었습니다.

매우 강력한 퍼징 플랫폼은 Peach입니다. XML을 단독으로 사용하여 많은 테스트를 만들 수 있습니다. 파이썬을 알고 있다면 복숭아를 확장하여 모든 작업을 수행 할 수 있습니다.

+0

'상상력'이 '야심'과 비슷합니까? :) –

+0

해당 CVE에 대한 포인터를 보내 주셔서 감사합니다. 아직 가상화 장치가 작동하는 것에 익숙하지 않으므로이를 시작점으로 사용하겠습니다. –

+0

필자는 Peach (python)와 커널 모듈을 어떻게 인터페이스 할 것인지 궁금합니다. 아니면 다른 것을 염두에 두셨습니까? –

0

fuzzing 장치 드라이버는 종종 생산성이 높지만 대부분의 장치 드라이버는 KVM 에뮬레이션되지 않지만 사용자 공간 구성 요소로 에뮬레이트됩니다. 이전 답변에서 예로 든 USB 드라이버는 전적으로 QEMU에서 에뮬레이트됩니다. 에뮬레이트 된 EHCI 드라이버의 취약점에 대한 재정적 지원은 환상적이지만 KVM 취약성이 아니기 때문에 커널을 개발할 수 없습니다. 특정 PIC 타이머 (예 : i8254 및 i8259)와 같이 KVM에서 에뮬레이트되는 드라이버가 있지만 대다수는 사용자 공간에 보관됩니다.

KVM이 에뮬레이트하는 또 다른 사항은 특정 지침입니다. KVM을 모호하게 만들 수 있습니다. 가장 복잡하고 가장 복잡하거나 민감한 동작을 트리거하는 방법을 보려면 KVM 소스를 읽으십시오. CPU가 게스트에 실제 모드 실행을 제공 할 수없는 구형 CPU 아키텍처 (unrestricted_guest = 1)에서는 더 많은 명령어가 에뮬레이트됩니다.

특히 명령어 에뮬레이션을 악용하는 경우 경쟁 조건이 자주 포함될 수 있습니다.

관련 문제