Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

codeengn2014

No description
by

형석 김

on 3 April 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of codeengn2014


Code
[ Real OS와 Virtual OS의 IDT 위치 차이 ]
But 2009년 이후에 탐지 불가

Why?

Memory 가상화 기술 EPT 등장

Intel 네할렘마이크로 아키텍처 부터
EPT On
EPT Off
[ Virtual Machine Setting ]
[ TSC 정의 ]
CPU의 cycle을 카운트하는 레지스터 - Timer Stamp Counter (TSC)
[ TSC 읽기 ]
인텔 명령어 RDTSC 값을 사용 하면 EDX:EAX로 결과 값이 넘어온다.
EDX 는 상위 32bit 이며 EAX는 하위 32bit이다.
[ Code1 ]
[ Code2 ]
[ Code3 ]
Real Machine RDTSC Differ
Virtual Machine RDTSC Differ
Real Machine과 Virtual Machine의 차이점 발생
[ CPUID 정의 ]
CPU를 식별하기 위한 명령어
CPU의 캐시는 어떻게 구성되어 있냐?
CPU가 가상화 기술을 지원하는가 ?
CPU의 제조업체 ID는 무엇이냐?
기타 등등.. 자세한 것은 Intel Manaul 참고
CPUID eax1 ECX(31bit)
Intel Manual상에 eax=1
결과 ECX의 31bit는 항상 0 이여야 한다.
VMWARE는 탐지 가능!! (Test 환경 vmware 9.0.2)
CPUID eax1 EDX(28bit)
Intel Manual eax=1 edx[28bit]
오직 하나의 논리 프로세서만 있다면 이 bit는 항상 0
VirtualMachine의 기본 설정 값이 하이퍼 스레드 사용 X

하지만 RealPC가 하이퍼 스레드를 지원하고

Virtual Machine의 CPU의 논리 코어 개수를 늘리면

하이퍼 스레드 사용 O

탐지 방법 부적절
논리 프로세서가 두개 이상이라면 이 bit는 1

하이퍼 스레드 사용O 이 bit 1

하퍼 스레드 사용X 이 bit 0
정리
결론
Virtual Machine Setting
Virtual Box
VMWARE
Trap Flag bit를 On 하고 명령어 하나 실행 후 Trap Flag bit는 Off

하지만 특정 VirtualMachine 에서는 Trap Flags가 계속 On
[ Code ]
Test Result
Test Result
Test Result
0
0000000 00000000 00100000 00001001b
VirtualBox Source Code - cpuid
VT-X를 초기화하는 과정에서 Guest로 진입할 때 호출하는 함수는

pfnRunGuestCode 함수임을 알 수 있다.

pfnRunGuestCode는 내부적으로
hmR0VmxExitToRing3
호출
여기서 Trap 플래그가 설정되어 있는지 확인
설정되어 있다 0으로 clear 해준다.
VirtualBox Source Code - Trap Flag
메모리 가상화 기술 - EPT
VirtualBox SourceCode - Patch
SoruceFile : DevATA.cpp
FuctionName : static (int) ataR3Construct()
MyRandomString(sBuf,len)
SoruceFile : DevAHCI.cpp
FuctionName : static int ahciR3VpdInit()

SoruceFile : NetworkadapterImpl.cpp
FuctionName : NetworkAdapter::updateMacAddress()
VirtualBox SourceCode - Patch
SoruceFile : DevFwCommon.cpp
FuctionName : int FwCommonPlantDMITable()
VirtualBox SourceCode - Patch
SoruceFile : Vbox.dsl
SourceFile : DevFwCommon.cpp
SourceFile : VBoxVgaBiosAlternative.asm
[ DirectX Info ]
[ Mac Address ]
[ Setup Log ]
[ Disc Driver Name ]
[ Registry Info ]
VM-EXECUTION CONTROL FIELDS -
Processor-Based VM-Execution Controls
RDTSC를 가상화 하는 방법
첫 번째 : RealPC의 TSC 값을 그대로 사용(?)

두 번째 : CPU에서 설정하는 TSC Offset 값이 자동으로 더해진 값을 사용(CPU Hardware 지원)

세 번째 : VM-Exit handler에서 Event를 받고 VM구현에서 소프트웨어 적으로 구현

VirtualBox의 구현 방법은? - 세 번째 방법
VirtualBox의 RDTSC 가상화 부분 Log출력 code
VirtualBox의 RDTSC 가상화 부분 Log출력 결과
VMCS Control 정보를 출력 Code
0xb5a07dfa = 10110101 10100000 011
1
1101 11111010
12bit의
RDTSC exiting


1
로 셋팅이 되어 있다.
그래서 RDTSC의
세 번째 방법
- VM_Exit Handler 방법으로 구현
첫 번째 : RealPC의 TSC 값을 그대로 사용(?)

두 번째 : CPU에서 설정하는 TSC Offset 값이 자동으로 더해진 값을 사용(CPU Hardware 지원)

세 번째 : VM-Exit handler에서 Event를 받고 VM구현에서 소프트웨어적으로 구현

VirtualBox의 RDTSC 가상화 방식을 두 번째 방법으로 바꿔보자
파일명 : HMVMXR0.cpp
함수명 : hmR0VmxUpdateTscOffsettingAndPreemptTimer
VirtualBox의 RDTSC 설정 부분 - Code
VirtualBox RDTSC 가상화 방법 변경 후 Log 화면
"Call ExitHandler - TSC" 가 출력되지 않은 것을 볼 수 있다.
VMCS Control 정보를 출력 Code
0xb5a06dfa = 10110101 10100000 011
0
1101 11111010
12bit의
RDTSC exiting


0
로 셋팅이 되어 있다.
그래서 RDTSC의
두 번째 방법
- CPU TSC_Offset Sum 방법으로 구현
RealPC RDTSC Differ 출력 결과
VirtualBox RDTSC Patch After Differ 출력 결과
cuckoo/conf/cuckoo.conf
cuckoo/conf/virtualbox.conf
cuckoo.py
manage.py or web.py
Cuckoo SandBox 자동분석 시스템 구조
http://docs.cuckoosandbox.org
Install Cuckoo - HomePage
Patched Virtual Box
+
Auto Analysis System(Cuckoo Sandbox)

Cuckoo Config File Fix
1. File Upload - User -> Server(Host)
2. File Send - Server(Host) -> Client(Guest)
3. Execute File - Client(Guest)
4. Result Send to Server - Client(Gueset) -> Server(Host)
5. Save Result And Show Result - Server(Host)
Virtual Machine 탐지 특징 분류 (VirtualBox)
시연
Patched VirtualBox
VirtualBox
시연
Virtual Machine 탐지 기술 신뢰도 분류(VirtualBox)
신상윤 - 홍익대학교
김고은 - 서울여자대학교
김형석 - 해커스쿨
유진호 - BOB(Best of Best)
김상후 - 충남대학교
팀원
발표자
김형석 -
kimgudtjr@naver.com
멘토
노용환 - AhnLab
조상현 - NHN
Anti VME(Virtual Machine Evasion)와 자동분석 시스템
Full transcript