안녕하세요, 저는 인하대학교 정보보안 동아리 NewHeart에서 활동하고 있는 김태인이라고 합니다. 얼마 전에 경찰청에서 열린 KUCIS 서경강권역 세미나에서 발표를 맡았는데요, 많은 대학생분들이 세미나에 찾아오셔서 반갑고 좋았습니다.

 

성공회대나 경찰대를 비롯해 발표 세션을 맡으신 분들의 내공이 상당해서 많은 공부가 되었고 점심 시간이나 뒤풀이 때 다양한 분들을 알게 되어서 정말 뜻 깊고 유익한 날이 되었네요. 보안 동아리나 프로그래밍 동아리에서 활동하고 계시는 분들이 있다면 앞으로도 열릴 KUCIS 세미나에 놀러오시면 좋겠어요. ^^ 

 

오늘 제가 여러분에게 알려드릴 주제는 앞에서 말한 세미나에서 발표했던 것인데요, 바로 가상 환경을 탐지하는 기법입니다. 네? 가상 환경이 뭔지 모른다구요?

 

1. 가상환경이 뭐에요?

 

 

컴퓨터를 좀 다뤄본 사람이라면, 또는 맥북을 써본 사람이라면 한 번쯤은 가상 머신이라는 말을 들어본 적이 있을 겁니다. 맥북을 쓰는 사람들은 은행 결제나 게임을 하고 싶어 Parallels Desktop이라는 프로그램을 이용해 맥북에서도 윈도우를 쓸 수 있지요. 혹은 지금 윈도우에선 제대로 돌아가지 않는 프로그램을 쓰기 위해 VirtualBox나 VMWare를 이용해 윈도우 XP를 돌려볼 수도 있습니다.

 

 

우리가 보통 얘기하는 가상 머신의 정식 명칭은 하드웨어 가상 머신 소프트웨어로, 컴퓨터의 하드웨어에서부터 운영체제와 프로그램까지 모두 가상으로 운영할 수 있는 프로그램을 말합니다. 보통 가상 환경이라고도 얘기하는데요, 가상 환경에는 위와 같이 두 가지 유형이 있습니다. 첫 번째는 하드웨어 바로 위에서 하이퍼바이저라고 하는 가상 환경 관리 프로그램이 돌아가고, 이것 위에서 갖가지 운영체제를 돌릴 수 있는 유형입니다.

 

 

윈도우에서 제공하는 Hyper-V가 바로 첫 번째 유형에 속합니다. Hyper-V를 사용하기 위해서는 컴퓨터를 반드시 한 번 재부팅하는 과정을 거치게 되는데요, 그 이유는 바로 여러분이 쓰고 있던 윈도우와 Hyper-V를 통해 구동하는 다른 운영체제가 같은 계층에서 돌아가게 되기 때문이에요.

 

 

가상 환경의 두 번째 유형은 앞에서 얘기했던 가상 머신들에 해당합니다. 하이퍼바이저는 기존에 쓰고 있던 운영체제 위에서 돌아가고, 가상머신은 이 하이퍼바이저 위에서 실행됩니다. 그래서 원래는 첫 번째 유형보다 가상 머신이 수행되기까지의 단계가 많아 실행 속도가 빠르지 못했는데요, 몇 년 전 개발된 가상화 기술인 인텔 VT-x와 AMD-V로 인해 속도가 많이 개선되었습니다.

 

2. 가상 환경을 악용하는 사람들

 

앞에서 소개한 가상 환경은 컴퓨터를 전문적으로 이용하는 사람들에게 많은 도움이 되어주고 있습니다. 제가 활동하는 동아리에서는 동아리 서버 컴퓨터에 VirtualBox를 설치한 다음, 부원 마다 한 개씩 리눅스 서버를 설치하여 제공해주고 있습니다. 제가 운영하는 홈페이지나 커뮤니티도 그렇게 구축한 가상 환경 위에서 돌아가고 있고요.

 

특히 대부분의 가상 환경을 제공해주는 프로그램은 스냅샷 기능이 있어 자신이 원하는 시점을 저장해두고 언제든지 그 때로 되돌아 갈 수 있습니다.

 

 

하지만 이런 가상 환경을 악용하는 사람들도 있습니다. 사양이 좋은 컴퓨터를 하나 구한 다음 가상 환경으로 여러 개의 윈도우를 구축하고 온라인 게임을 설치하여 소위 "작업장"을 만드는 경우가 대표적입니다. 작업장은 컴퓨터의 사양이 허용하는 한 얼마든지 만들 수 있고, 여기에 사냥이나 채집을 자동으로 해주는 이른바 "오토 프로그램"까지 이용한다면 안 좋은 의미로 금상첨화지요.

 

 

또는 위 그림과 같이 가상환경과 디버거 등의 분석 프로그램을 연결하는 경우도 있습니다. 일반적인 디버깅 작업에서는 프로그램의 권한이 낮아 자신이 사용하고 있는 운영체제와 직접적으로 관련된 부분을 분석할 수 없습니다. 하지만 가상 머신과 디버거를 연결하면 운영체제를 부팅할 때부터 끌 때까지의 코드 한 줄 한 줄을 볼 수 있게 됩니다.

 

이것은 곧 운영체제부터 게임을 포함한 모든 프로그램들의 내부가 노출된다는 말이 됩니다. 실제로 게임이나 보안 관련 프로그램을 개발하는 회사에서는 이런 이유 때문에 가상 환경에서 자신들이 만들 프로그램이 실행되지 못하도록 막고 있는데요, 제가 지난 KUCIS 세미나 때 발표한 주제가 바로 이것입니다. 그럼 여러분들도 제가 어떻게 이런 환경을 탐지할 수 있었는지 궁금하실 것 같은데요, 지금부터 간단하게 소개해드리도록 하겠습니다.

 

3. 가상 환경, 이렇게 잡는다!

 

보통 가상 환경에 다른 운영체제를 설치하고 나서 별다른 조치 없이 그대로 이용하면 불편한 점이 한둘이 아닙니다.

 

우선 가상 환경을 제공해주는 프로그램에서 에뮬레이트한 하드웨어는 정말 최소의 기능만 갖추고 있기 때문이죠. 그래서 대부분의 경우는 확장 툴을 가상 환경에 설치하곤 합니다.

 

 

위의 그림에서 볼 수 있듯이 대부분의 가상 환경 프로그램은 확장 툴을 제공해줍니다. 이 확장 툴은 가상 운영체제에 설치되며 해상도, 파일 공유, 원격 접속 등과 같은 편리한 기능을 이용할 수 있게 해줍니다. 하지만 이 툴은 한 번 설치되면 가상 환경에서 항상 실행되기 때문에 아주 간단히 탐지 당할 수 있습니다.

 

 

위 그림은 VMWare에 윈도우 7을 설치하고 확장 툴을 설치한 다음 실행 중인 서비스 목록을 캡처한 것입니다. 그림에서 알 수 있듯이 확장 툴의 서비스가 실행 중이며 프로세스 ID도 가지고 있기 때문에 윈도우 API를 이용해 서비스 목록을 가져와 탐지할 수도 있고 프로세스 목록을 가져와 찾아낼 수도 있습니다.

 

 

시스템 정보에서도 건질 게 많습니다. 위 그림은 실행 창에서 "dxdiag"를 실행하여 볼 수 있는 컴퓨터 정보인데요, 시스템 제조업체나 모델 등이 VMWare 소속으로 되어있습니다.

 

 

그래픽 드라이버를 살펴볼까요?

VirtualBox에 가상으로 운영체제를 설치한 경우에는 위와 같이 그래픽 드라이버가 "VirtualBox Graphics Adapter"로 나와 있습니다. 제조사 ID 역시 인터넷에서 찾아보면 VirtualBox를 나타내는 것으로 나왔습니다. 이렇게 가상 환경에서 에뮬레이트된 하드웨어의 이름을 찾아보는 것으로도 가상환경을 탐지할 수 있습니다.

 

 

가상 환경을 제공해주는 프로그램들 중에 일부는 독자적인 명령어를 이용하는 경우도 있습니다. 그것들은 가상 환경 속에서는 명령어로 인식되어 수행되지만 실제 환경엔 존재하지 않는 것들이기 때문에 시스템 에러를 불러옵니다. 그래서 이런 명령어를 가지고 시험을 해보는 것으로 가상환경을 탐지할 수도 있습니다.

 

사실 가상 환경을 제공해준다는 것이 운영체제에서부터 통째로 지원해준다는 말은 아닙니다.

SandBoxie 와 같은 샌드박스 프로그램들은 가상 운영체제를 갖출 필요 없이 자신이 이용하고 있는 운영체제에서 특정 프로그램을 실행할 수 있습니다. 하지만 이런 프로그램들은 목표 프로그램에 DLL과 같은 자신들의 라이브러리 파일을 부착해야만 하기 때문에 피해자의 입장에서는 어떤 라이브러리 파일이 자신에게 붙어 있는지를 알아내는 것으로 간단하게 가상 환경을 탐지할 수 있습니다.

 

4. 마치면서…

 

지금까지 가상 환경에 대해 간단히 알아보고 이들을 탐지하는 방법에 대해 알아보았습니다. 앞에서도 얘기했지만 가상 환경은 쓰는 목적에 따라 이롭게 쓰일 수도, 나쁘게 쓰일 수도 있습니다. 그리고 그것은 여러분의 선택이라는 것을 잘 알아두세요.

 

사실 여기서 설명한 방법 말고도 이들을 찾아내는 방법엔 여러 가지가 있는데요, 이것은 여러분에게 숙제로 남겨두도록 하겠습니다. ^^