20160709

[SOSP’15] Virtual CPU validation (paper)


일정 주기로 동작을 멈추는 비디오 서버가 있다고 하자. 그 이유에 어떤 것이 있을까? 운영체제, 드라이버, 바이오스, CPU, 하드웨어, 바이러스, 전력 문제 등이 있을 수 있음. 10년 전에는 이러한 이유가 전부였으나, 지금은 새로운 문제가 추가되었음. 가상화 기술을 지원하기 위한 하이퍼바이저가 문제를 일으키고 있다. 하드웨어가 가상화를 지원하고 있지만, 여전히 소프트웨어도 사용되고 있다. 하이퍼바이저에 버그가 있을 수 있고, 이는 보안성과 안전성을 떨어뜨린다. CPU 가상화는 어렵고, 버그가 생기면 가장 큰 영향을 주게 된다. 실제로 하이퍼바이저에 버그가 있었다. 존재하지 않는 레지스터를 읽을 수 있게 하는 버그가 있었다. 현재까지 하이퍼바이저의 버그를 제거하기 위한 다양한 기법이 있었다. 1) micro-hypervisor, 2) formal verification, 3) fuzzing. 존재하는 기법들에 한계점이 있다. CPU 생산자들은 테스팅 도구의 개발에 많은 비용을 투자한다. 물리적인 CPU와 가상 CPU는 유사하게 동작해야 한다. 따라서 물리적 CPU를 테스팅하는 도구를 가상 CPU 검증에 사용할 수 있다. 이 연구에서는 CPU 테스팅 도구를 vCPU에 적용한다. 그리고 하이퍼바이저에 존재하는 버그를 찾았다.

physical CPU testing.PNG

물리적인 CPU는 어떻게 테스팅하는지 살펴보자. Generator가 x86 아키텍쳐를 인지한 상태에서 테스트 케이스(실행 가능한 이미지)를 생성한다. 명령어를 시뮬레이터에서 실행한다. 시뮬레이터는 정의되지 않은 명령어를 확인하고, 제거한다. 테스트가 준비되면 로더를 사용해 system under test(SUT)에 전송한다. 테스트를 진행하고, 그 결과가 반환된다. 성공하면 성공했음을 로더에 알리고, 실패하면 디버깅을 진행한다.
이러한 테스팅 환경은 다양한 장점을 제공한다. 1) testing coverage가 넓다. 테스트 케이스 생성기가 semantic을 인지한 상태에서 테스트 케이스를 생성하기 때문이다. 2) false-positive rate이 낮다. 정의되지 않은 값을 시뮬레이터를 사용해 제거하기 때문에, non-deterministic r결과가 발생하지 않는다. 3) debug하기 쉽다.

adaptation execution and debug.PNG

이러한 도구를 가상화 환경에서 사용하기 위해, 테스팅 환경에 약간의 변경을 가한다. Vloader는 로더의 역할을 한다. Vloader는 하이퍼바이저 모니터링 프로토콜을 사용해, 가상 머신의 메모리에 테스트 대상을 직접 올린다. OS jitter를 제어한다. 입출력 장치를 지원하기 위해 에뮬레이션 기법을 사용했다. 그리고 디버깅 도구들을 강화했다.
이렇게 구성한 테스트 도구를 사용해 KVM에서 117개의 버그를 발견함. Instruction emulator에 가장 많은 버그가 있었다. Instruction emulator는 크게 세 가지 목적으로 쓰이는데, 요즘에는 Port I/O, memory mapped I/O에 가장 많이 쓰인다. 버그가 발생한 원인을 보았더니, 78%가 specification을 따르지 않은 것이었다. 15%가 코딩 오류에 의한 것이었다. 버그의 영향을 확인해보았다. 6개의 취약점을 확인할 수 있었다. 3개는 호스트 머신을 공격할 수 있었고, 2 개는 게스트의 DoS, 1개는 권한 상승을 일으킬 수 있었다.

Advertisements
Tagged with: , , , , , , , , , , , , , , ,
Posted in 1) Memo

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

누적 방문자 수
  • 88,681 hits
%d bloggers like this: