Search Results for 'Virtualization'


3 POSTS

  1. 2009.12.05 VirtualBox
  2. 2009.12.04 VMware 버그, Ring3 -> Ring0 취약성 간략 설명 (4)
  3. 2009.12.02 보안적인 관점에서 바라본 가상화의 3가지 이슈

VirtualBox

Posted 2009.12.05 19:27 by beistlab
VirtualBox는 VMware 같은 가상화 프로그램입니다. 이것 외에도 여러 가지 오픈 소스가 있지만 아는 친구의 말에 의하면 오픈 소스 중에는 Virtual Box가 소스 분석을 하기가 제일 좋다고 합니다. 3가지 기능을 제외하고는 모두 오픈 소스이니 가상화를 공부해보고 싶으신 분들은 참고하시면 좋을 것 같네요. (RDP server, USB support, USB over RDP)

다운로드 링크: http://www.virtualbox.org/wiki/Downloads

저도 가상화 환경에서의 취약점 유형에 대해서 좀 더 알아보고 싶어서 조금 전에 다운 받았습니다. 패러럴즈나 VMware는 리버싱하려니 엄두가 안남.. 누군가 돈 주면서 알바시키면 모르겠지만 ㅋㅋ 아래 링크는 VirtualBox에서 발견된 취약성들입니다.

http://search.securityfocus.com/swsearch?query=virtualbox&sbm=bid&metaname=alldoc&

'보안 관련 정보' 카테고리의 다른 글

They broke GSM!  (0) 2009.12.06
hacker music!  (0) 2009.12.05
VirtualBox  (0) 2009.12.05
VMware 버그, Ring3 -> Ring0 취약성 간략 설명  (4) 2009.12.04
Analyzing Malicious Documents Cheat Sheet  (2) 2009.12.04
보안적인 관점에서 바라본 가상화의 3가지 이슈  (0) 2009.12.02

Tag : VirtualBox, Virtualization

Write your message and submit

VMware 버그, Ring3 -> Ring0 취약성 간략 설명

Posted 2009.12.04 15:22 by beistlab
구글 Guys들인 Tavis Ormandy와 Julien Tinnes가 발견한 버그입니다. Julien Tinnes의 블로그에 올린 날짜는 10월 30일인데 실제로는 그보다 먼저 발견됐고 이미 패치도 되었다고 합니다.

링크: http://blog.cr0.org/2009/10/cve-2009-2267-mishandled-exception-on.html

버그가 일어나는 이유는 VMWARE에서 Virtual 8086 모드를 처리할 때 제대로 에뮬레이션을 못 해주기 때문에 일어납니다. Virtual 8086에 대해서 알고 싶으신 분은 "Intel 64 and IA-32 Architectures Software Developer's Manual" Volume 3A: System Programming Guide Part1의 15-1 챕터부터 참고하시면 됩니다.

이 버그를 이용하여 공격에 성공한다면, 만약 일반 계정 권한만 있다고 하더라도 루트 권한을 획득할 수 있습니다. Lol 로컬 권한 상승! 음 왜 이런 버그가 발생하는지 간략하게 알아보겠습니다.

이 모든 것은 아까 말씀드렸지만 에뮬레이션 때문에 일어납니다. 당연한 것이지만 Virtualization에는 반드시 에뮬레이션이 필요한 부분들이 있습니다. Virtual 8086이 그런 것이라고 볼 수 있는데, VMWARE에서 CPU가 Virtual 8086 모드로 작동할 때, 버그가 일어날 수 있게끔 코딩을 한 것입니다.

윽 생각해보니 이걸 제대로 설명하려면 여러 가지를 미리 사전에 설명드려야 하는데 너무 분량이 많으므로 간략히 소개하기로 하고, 자세한 사항은 레퍼런스를 참고하시기 바랍니다.

문제의 시발점이 되는 부분은 Far call instruction이 Virtual 8086 모드에서 수행되는 부분을 처리하는 곳에 있습니다. 요즘 같은 32비트나 64비트 모드의 경우에는 메모리 주소가 linear 하기 때문에 세그먼트를 구분해서 호출할 필요가 없지만 예전에는 자원이 부족한 환경에서 최대한 넓은 메모리 영역을 사용하기 위해서 segment+offset 개념으로 함수 호출이나 jump가 가능했습니다.

일반적인 어플리케이션에서는 Far call을 사용할 수 없지만  Virtual 8086 모드에서는 가능합니다. Far call 과정 중에 CS와 IP 레지스터를 push하게 되는데 이때 Supervisory bit가 세팅되게 됩니다. 여기까지는 문제가 없어보이지만 이제부터 열라 문제가 생깁니다.

현재 Supervisory bit가 세팅되있다는 것이 무척 중요하구요. 만약 Far call이 수행될 때, 예를 들어 매핑되지 않는 메모리 영역을 참조한다거나 하면 Exception 에러가 발생하게 됩니다. Exception 에러 자체는 정상적인 과정입니다만, 다음 내용을 주목해주시기 바랍니다.

에러가 발생하게 되면 리눅스 커널은 에러 핸들링을 하기 위해 cs 레지스터를 참고하여 요놈이 뭔지 찾게 되는데 이때 이 버그를 찾은 애들은 PNPBIOS로 지정해놨다고 합니다. (PNPBIOS는 리눅스에서 Global Descriptor Table에서 0x90 옵셋을 가집니다. Understanding the Linux Kernel 책의 Memory Addressing 챕터를 참고하시기 바랍니다.)

커널은 PNPBIOS의 핸들러를 찾으려고 시도하겠지만 이건 정상적인 상황의 예외 처리 과정이 아니기 때문에 핸들러를 못 찾을테고 아마도 NULL을 리턴할 것입니다.

핸들러 주소로 NULL을 돌려받았기 때문에 0x00000000 영역이 실행되게 됩니다. 일반적인 상황에서는 0x00000000 메모리 영역에는 아무것도 매핑되어 있지 않지만, 우리의 친구 mmap() 함수를 통해서 0x00000000 영역에 메모리 할당을 하고, 우리가 실행시킬 Shellcode들도 복사해놓을 수 있습니다.

(참고로 Null pointer dereference 버그를 이용하는 취약점이 너무 많이 나와서 근래의 리눅스에서는 mmap을 통해 NULL 영역에 메모리를 할당할 수 없습니다. /proc/sys/vm/mmap_min_addr 값을 참고하시면 minimum 값이 얼마인지 알 수 있습니다.

이 제한을 우회하는 기법을 역시 동일 인문들인 Tavis Ormandy와 Julien Tinnes가 몇달 전에 발견하여 리포트했기 때문에 최근의 리눅스에서는 이미 패치되어 통하지 않습니다.

http://blog.cr0.org/2009/06/bypassing-linux-null-pointer.html

그후, spender라는 친구가 SELinux 환경에서 다시 0x00000000 영역을 활용하는 방법에 대해서 발견하였으나 SELinux 환경에서만 가능하기 때문에 제너럴하지는 않습니다. 관심있는 분은 spender의 exploit을 살펴보시기 바랍니다.)

여기까지 왔다면 게임 끝이죠. Ring0 권한으로 모든 명령 실행!!

저는 VMWARE를 사용하지 않아서 테스트를 정확히 못해봤는데 대신 익스플로잇을 실행해준 츠피의 말에 의하면 잘 작동하지 않는다고 합니다.(블로그 링크에 가시면 Exploit도 공개되어 있습니다.) 무엇이 문제인지 나중에 한번 살펴봐야겠네요.

어떤가요? Virtualization 버그라고 하면 열라 어려울 것 같은데, 이 정도면 졸라 쉬워서 마음 같아서는 여러분도 가상화 환경에서 Critical한 버그를 84개 정도 찾을 수 있을 것 같지 않나요? 하지만 난 안될거야..


Tag : virtual8086, Virtualization, vm8086, VMware

  1. jk

    | 2009.12.04 15:52 신고 | PERMALINK | EDIT | REPLY |

    아... 저 유머는...;;

  2. beistlab

    | 2009.12.04 16:37 신고 | PERMALINK | EDIT |

    kkkkkkkkk

  3. beistlab

    | 2009.12.04 16:40 신고 | PERMALINK | EDIT | REPLY |

    http://blog.cr0.org/2009/06/bypassing-linux-null-pointer.html

    이 문서 아직 못 보신 분은 꼭 보세요. 어떻게 하면 mmap(NULL,, 제한을 우회할 수 있는지에 대한 방법을 소개한 문서입니다. 여기서 배워야할 부분은, 이 기술은 단지 시스템에 대한 깊은 지식만 있다고 발견할 수 있는 것이 아니라, 해커적인(기교적인) 꽁수도 부릴 수 있어야 발견할 수 있다는 겁니다.

  4. beistlab

    | 2009.12.04 17:32 신고 | PERMALINK | EDIT | REPLY |

    아 PNPBIOS code 링크도 블로그 내에 있었네요. 참고하시기 바랍니다.

    http://lxr.linux.no/#linux+v2.6.24/arch/x86/mm/extable_32.c

Write your message and submit
많은 업체들에서 가상화 제품을 개발하고 있습니다. 앞으로는 가상화라는 개념 자체나 기술은 어떠한 형태로 서비스되던간에 중요한 이슈가 될 것입니다. 당연히 보안 리서처들도 이 분야에 대해 많은 연구를 진행 중이구요.

보안적인 측면에서 봤을 때 가상화에 어떤 이슈가 있을지 간단하게 말씀드리면 크게 3가지로 나눌 수 있습니다. (여기서는 취약점에 관해서만 다룰 것이기 때문에 퍼포먼스나 기타 측면은 보지 않겠습니다.)


1. 게스트 OS에서 호스트 OS로 탈출하기

예를 들어, 만약 여러분이 Windows OS의 VMWARE 안에서 돌아가고 있는 리눅스 OS의 계정을 갖고 있다고 가정하겠습니다. (해당 계정은 일반 권한일 수도 있고 루트 권한일 수도 있습니다.)

여기서 Windows는 호스트 OS라고 할 수 있고 리눅스는 게스트 OS라고 할 수 있습니다. 일반적으로는 게스트 OS에서 호스트 OS로는 접근할 수 없죠. 그런데 만약 VMWARE에 구현 상의 버그가 있다면 게스트 OS에서 호스트 OS를 해킹할 수도 있습니다.

성공한다면, Windows OS의 파일이나 기타 등등을 장악할 수 있으니 가상화를 깨고 나와서 시스템 내에 존재하는 모든 자원에 접근 가능하다는 말입니다. 실제로 최근에 이러한 버그가 블랙햇에서 발표됐었죠.

Cloudburst 링크 - http://www.blackhat.com/presentations/bh-usa-09/KORTCHINSKY/BHUSA09-Kortchinsky-Cloudburst-PAPER.pdf

(설정 상의 오류나 실수로 호스트 OS를 해킹할 수 있는 상황은 제외합니다. 예를 들면 파일 쉐어링을 해놨다거나..)


2. 일반 계정 권한에서 루트 권한 따기

역시 게스트 OS를 리눅스로 가정하겠습니다. 여기서의 목적은 위 사례처럼 가상화를 벗어나서 호스트 OS를 장악하는 것이 아니라, 일반 계정 권한에서 루트 권한을 획득하는 것이 목적입니다. 여기서 핵심은 만약 게스트 OS에 깔려있는 리눅스 자체에 어떤 버그도 없더라도 VMWARE의 구현 상 문제로 인해 루트를 획득할 수 있다는 점입니다.

실제로 이런 류의 취약점은 꽤 나오고 있습니다. 여태까지 제가 봤던 자료로는 주로 Virtual-8086 mode를 처리할 때 나왔었습니다. 두 가지 레퍼런스를 알려드리겠습니다. 두번 째 것은 Derek Soeder가 작성한 것인데 읽어보면 많은 참고가 될 것 같습니다만 전 아직 안 읽어봄.. 훗..

http://blog.cr0.org/2009/10/cve-2009-2267-mishandled-exception-on.html
http://www.securityfocus.com/archive/1/498150


3. 정보 누출

말 그대로 "노출되어선 안되는 정보"들이 VMWARE의 구현상 문제로 인해 노출되는 경우들입니다. 이 정보들은 민감한 것들도 있을 수 있고 그렇지 않은 것들도 있을 수 있지만 문제는 원래는 제공되서는 안될 정보들이 제공되면 잠재적 문제가 있을 수도 있다는 이야기입니다.

이 취약점의 경우에는 그 형태가 다양하니 구글 서치를 통해서 한번 살펴보시기 바랍니다.

http://www.google.co.kr/search?q=information+leakage+vmware&


이 정도입니다. 여기서는 VMWARE만을 언급했지만 실제로는 다른 제품들에서도 취약성이 발견되어 왔습니다.

Tag : cloudburst, Virtualization, VMware, 가상화

Write your message and submit