Red Pill and More

최근 malware analysis research를 하다보니…

이런 저런 공격방법들과 예제등을 볼 수 있었습니다.

신기했던 것들중 하나에 대해서 써보려 합니다.

일명, Red Pill.
 – Matrix라는 영화에 나온 그 빨간약이 맞습니다. Red Pill이 하는 일을 소개하기에 앞서
   그 배경부터 설명하는게 나을듯 싶군요.
 – 일단, 요즘 malware analysis의 대부분을 VMware나 VirtualBox 같은 VMM
    (Virtual Machine Manager/Monitor)위에서 하여서 보다 안전하고 확실해졌는데요…
 – 그러다보니 이 사실을 모를리 없는 malware 제작자들도 머리를 썼습니다.
    VMM안에서 실행중인지 아닌지 여부를 판단하여서 취하는 행동을 다르게 하는것이지요.
    (즉, VM안에서는 착한척.. 밖으로 나오면 나쁜놈이 되는겁니다..)

이 Red Pill 이라는것은 이와같이 VMM 안에 있는지 아닌지 여부를 판단해주는 프로그램입니다.

2004년 11월에 invisiblethings.org 에 게재되었습니다.

소스코드는 정말 간단합니다..

하지만, Red Pill은 VMM Detection의 시작에 불과했습니다.
Red Pill에서는 SIDT (Store Interrupt Descriptor Table) 명령어만을 사용하지만, 향후 계속된 리서치에서는 LDT (Local Descriptor Table)을 이용한 디텍션 기법도 소개되었습니다 [paper].

Red Pill에 사용된 SIDT 기법의 원리를 간단히 설명하자면 다음과 같습니다:
SIDT 명령어는 IDTR(Interrupt Descriptor Table Register)의 정보를 저장하는데, IDTR 레지스터는 단 한개밖에 존재하지 않기 때문에, 두 개 이상의 OS (host OS + guest OS)가 동시에 돌아가기 위해서는 VMM이 guest OS의 IDTR을 host OS의 것과 겹치지 않도록 다른곳에 저장해야됩니다.

여기서 문제가 생기는 것인데, 이러한 separation 때문에 VMM 여부를 detect할 수 있게 됩니다.
VMWare에서의 relocated IDT의 주소는 0xffXXXXXX 이고, Virtual PC에서의 relocated IDT 주소는 0xe8XXXXXX 인데 반해, Native OS 에서는 Windows는 0x80FFFFFFF, Linux에서는 0xC0FFFFFF 이기 때문에..
IDT 주소를 받아온 다음 first byte을 0xd0과 비교해서, 크면 VM, 작거나 같으면 Real Machine으로 간주합니다.

이러한 SIDT 문제에 대해서 다룬 USENIX paper 도 읽어보시면 좋겠습니다.

이같은 VMM detection 방법들이 malware에 급격히 사용되면서, 정확한 분석이 어려워지자..
또다른 리서치 분야에서는 반대방향의 연구를 시작했습니다.
바로 Anti-detection-mechanism 인데요..

하지만 곧, 이마져도 bypass 하는 다양한 기법들이 소개되었습니다 [trapkit].
Trapkit에서 배포한 VMWare detection tool인 ScoopyNG 에서는 총 7가지의 테스트를 합니다.
이 중 한개라도 VMWare detected 라는 문구를 돌려받으면, 현재 VMM안속에서 프로세스가 실행중이라고
보시면 됩니다.

<ScoopyNG Source Code>

<ScoopyNG를 이용한 VMM Detection>
1. VMWare (windows xp sp3)에서 돌렸을때
사용자 삽입 이미지

2. Native OS (Windows 7 build 7201)에서 돌렸을때
사용자 삽입 이미지

You may also like...

4 Responses

  1. t1g3r says:

    오호.. 신기하군요!!

  2. ugo says:

    근데 저런 차이가 생긴다는 것 만으로도 VMM으로서의 진정성을 잃은거 아닌가;;
    원리를 거의 이해하지는 못하겠지만 프로그램 자체가 식별할 수 없게 발전되어야 할듯

    • Cai says:

      근데 현재 구조상으론 방법이 없는듯 싶다..

      계속 리서치가 돌아가고 있긴 하지만 ㅋ
      뭔가 혁신적인 모델이 나오기전엔..ㅋㅋ

      끨끨..이거 이용해서 나중에 어플 하나 만들어봐야지 ㅋ

Leave a Reply

Your email address will not be published. Required fields are marked *