0. 개요

  여기서는 가상 머신이나 에뮬레이터 같이 바이너리를 실행할 수 있는 메커니즘을 이용한 악성코드 분석 자동화에 대해서 정리하려고 한다. 이 개념들이 비슷한 면이 있으면서도 차이점 또한 크므로 어떻게 정리해야 할지 모르겠다. 그래서 가장 큰 분류를 자동화로 잡고 정리하기로 한다. 어떤 종류의 자료들은 그 특징에 따라 오픈 소스 및 문서화가 잘 되어 있지만 다른 어떤 종류의 자료들은 취업하지 않는 이상 아무런 자료를 찾을 수 없어보인다. 가장 먼저 개념을 설명할 것이고 이후 큰 분류부터 시작하겠다.





1. 개념

  샌드박스, 에뮬레이터, 가상 머신 이것들은 서로 대응하는 개념이 아니어서인지 굉장히 다양한 의미로 사용되는 것 같다. 사실 이렇게 정리하는 입장에서도 확신을 가질 수가 없으며 다른 사람들도 마찬가지인 것 같다. 하지만 어떻게 해서든 정리를 해보려고 한다.


  먼저 가장 넓은 개념이라고 할 수 있는 샌드박스부터 보겠다. 요즘 악성코드라던지 취약점을 이용한 APT 공격 등은 갈수록 복잡해지고 있으며 과거처럼 정적인 분석만으로는 충분치 않다. 하지만 동적 분석이라는게 사람이 하는 일인데 수 많은 바이너리들을 직접 분석하는데에는 한계가 있을 것이다. 샌드박스라는 것은 간단히 말해서 제한된 환경을 제공해 주는데 보안에서는 이 샌드박스에서 악성코드를 직접 실행시키는 방식으로 분석하는데 사용된다. 물론 실행되는 악성코드를 모니터링하는 도구들이 내부에서든 외부에서든 담겨 있어야 할 것이다.


  앞에서는 간단하게 악성코드 실행 시 처럼 실제 환경에 영향을 받지 않는 독립적인 환경을 제공한다고만 말했다. 실제로는 다양한 의미로 더 많이 사용되는 것 같지만 먼저 자세한 설명을 한 후에 언급하도록 하겠다. 


  샌드박스를 구현하는 방식을 알아보기 전에 에뮬레이터와 가상화에 대해서 설명하겠다. 에뮬레이터란 CPU 등의 하드웨어를 순수하게 소프트웨어로 구현한 방식이다. 예를들어 고전 게임들의 경우 x86 CPU에서 실행되던 것들이 아니다. 그래서 이러한 게임을 실행하기 위한 에뮬레이터가 존재하는데 이를 실행하기 위해서는 그 게임기에 맞는 가상의 CPU를 구현한 후 여기에 해당 게임을 실행시키는 방식이 사용된다. 이렇게 전혀 다른 CPU라고 하더라도 소프트웨어로 구현할 수 있기 때문에 별다른 제약이 없다. 하지만 모든 것을 소프트웨어로 구현한다면 성능적으로 많이 떨어진다. 만약 CPU 등 하드웨어를 직접 사용할 수 있다면 성능 상으로 많은 이점이 있을 것이다. 물론 CPU가 이러한 기능을 제공해야 하며 하드웨어를 직접 사용하기 때문에 같은 아키텍쳐를 가진 CPU에만 해당하는 방식일 것이다. 어쨌든 이러한 방식을 전가상화, 반가상화 등으로도 나뉘는 가상화 방식이다.


  사실 에뮬레이터든 가상화 방식이든 실제 하드웨어가 아니라 하드웨어를 흉내내어 지원하는 방식은 큰 의미로 가상 머신이라고 불린다. 물론 좁은 의미에서는 VMware, VirtualBox 같은 것들을 가상 머신이라고 부른다.


  물론 이러한 분류 외에 다른 분류도 존재한다. 말 그대로 가상 머신을 통해 운영 체제를 설치할 수 있는 환경을 제공하는 것 뿐만 아니라 단순히 하나의 프로세스만을 실행시키는 것도 있다. 즉 와인 처럼 리눅스에서 윈도우의 바이너리를 실행시킬 수 있게 해주는 도구가 그러한 예이다.


  이제 여기서 설명할 보안적인 의미에서 이것을 알아보겠다. 여기서도 앞 처럼 샌드박스를 두 종류로 나누어서 설명한다. 하나는 가상화이고 다른 하나는 에뮬레이션이다.


  에뮬레이션은 두 가지로 나뉠 수 있는데 하나는 시스템 호출 에뮬레이션(OS 에뮬레이션)이고 다른 하나는 시스템 에뮬레이션이다. 시스템 호출 에뮬레이션은 운영 체제 환경을 에뮬레이션하고 시스템 호출을 후킹해서 운영 체제에 넘기지 않고 직접 값을 반환해주는 방식이다. 시스템 에뮬레이션은 CPU나 메모리 같은 하드웨어를 가상으로 구현하고 운영체제를 설치한 후에 이것을 통해 실행시킨다. 에뮬레이터 우회 관련 문서들을 보면 안티바이러스에서 사용되는 x86 및 스크립트 용도의 에뮬레이터는 시스템 호출 에뮬레이터로 보인다.


  가상화 방식은 일반적으로 VMware 같은 가상 머신을 이용하는 방식일 것이다. 참고로 에뮬레이터와 달리 이 방식은 실제 OS에서 실행시키기 때문에 악성코드 즉 애플리케이션의 정보만을 모으는 방법은 쉽지 않을 것이다. 주로 사용되는 방식은 시스템 호출 관련 정보를 모으는 것인데 시스템 호출을 기록하는 방식은 두 가지가 있다. 하나는 현재 운영 체제에서 도구를 이용하는 방식으로서 후킹 엔진 인젝션이 그 예일 것이다. 하지만 이것은 많은 정보를 얻을 수 있더라도 악성코드가 탐지할 수 있다고 한다. 다른 하나는 하이퍼바이저를 감시하는 것이다. 가상 머신이므로 시스템 호출 시 권한 때문에 하이퍼바이저에게 통지가 가기 때문이다. 사실 이 부분은 처음 들은 데다가 실제로 사용되는 방식인지는 잘 모르겠다.





2. 실제 예시

  안티바이러스 벤더들을 비롯한 보안 업체들은 수 많은 악성코드들을 수집하고 분석해야 한다. 하지만 요즘 날마다 쏟아지는 바이너리가 한 두개가 아닐 것이므로 모든 샘플들을 사람이 일일이 분석하기는 힘들 것이다. 그렇기 때문에 어느 정도의 자동화가 필요한데 이를 위해서 회사 내에서 수집한 악성코드들을 자동으로 분석하기 위한 시스템이 존재할 것이다. 이러한 시스템은 각각의 회사 자체적으로 구축할 것이기 때문에 공개된 자료는 거의 없는 것으로 보인다. 대신 Cuckoo 샌드박스 등이 오픈 소스로 존재하여 이것을 통해 개인도 어느 정도의 자동 악성코드 분석 시스템을 구축할 수 있는 환경을 제공한다. 아마 보안 업체들도 이와 크게 다르지는 않을 것이다.


  분석에는 기본적으로 정적 분석 및 동적 분석이 필요할텐데 정적 분석이야 쉽게 처리할 수 있겠지만 분석할 바이너리들이 한 두가지가 아닐 것이므로 정적 분석을 위한 솔루션이 구축되어야 할 것이며 동적 분석은 더더욱 필요할 것이다. 다시 말해서 가상 머신 등을 기본으로 하여 앞에서도 언급했듯이 API 호출 등의 로그를 기록하기 위한 후킹 엔진 인젝션 외에도 패킷 로그를 기록하기 위한 프로그램 등 여러 보안 프로그램들이 필요할 것으로 보인다. 어쨌든 Cuckoo 샌드박스, Joe 샌드박스 등 많은 샌드박스가 있으며 이러한 샌드박스들은 보통 가상 머신을 이용하며 여러 가상 머신들을 지원한다. 꼭 이렇게 가상 머신 등 다른 제품들을 사용하는 형태가 아니더라도 회사에서 자체적으로 필요한 부분들을 구축할 것이다. 이러한 시스템은 악성코드를 분석하는데 큰 제약 조건이 없을 것으로 보인다.


  참고로 어떤 샌드박스에서는 굳이 가상 머신 환경이 아니라 실제 머신 환경을 이용하여 분석할 수 있는 기능도 존재한다고 한다. 이것은 많은 악성코드들이 가상 머신만의 특징을 이용하여 바이너리가 실행되는 환경이 가상 머신인지 탐지하고 우회하는 루틴을 가지고 있기 때문인 것으로 보인다.


  최근에는 APT로 인해서 안티 APT 솔루션들도 많이 존재한다. 이러한 제품들의 경우 APT에 대해 일반 안티바이러스 보다는 더 나은 성능을 보여주어야 한다. 그렇기 때문에 수집한 바이너리를 솔루션의 가상 머신을 이용하여 동적 행위 기반 분석을 수행할 수 있는 기능이 제공된다. 물론 APT이기 때문에 문서 파일이나 이메일 등 여러 많은 기능들이 추가되어 있겠지만 여기서는 가상 머신을 이용한 행위 기반 분석이 사용된다는 것에 중점을 두려고 한다. 참고로 FireEye의 경우에는 샌드박스를 자체적으로 제작하였다고 하는데 여러 가상 머신들을 이용하는 다른 샌드박스 제품들과 비교하는 것을 보면 에뮬레이터 보다는 가상 머신에 더 가까운 바이너리 실행 메커니즘을 구현한 것으로 보인다.


  마지막으로 안티바이러스가 있다. 성능 외에도 자원을 적게 점유하는 것 또한 중요한 안티바이러스에서 실시간 검사를 수행하는데 가상 머신까지 설치해서 동적 행위 기반 분석을 수행하기는 힘들 것이다. 앞의 자동 악성코드 분석 시스템이나 안티 APT 솔루션의 경우 개별 솔루션으로 존재하지만 안티바이러스는 사용자의 컴퓨터에서 실행되기 때문이다. 다른 문서[ http://sanseolab.tistory.com/35 ]에서도 정리했지만 HIPS 방식을 사용하지 않는 안티바이러스에서 동적 행위 기반 분석 기능을 제공할 수 있는 것은 에뮬레이터가 최선으로 보인다. 물론 에뮬레이터도 아주 간단한 형태부터 시작해서 종류가 많겠지만 아무리 성능이 좋다고 하더라도 가성 머신에서 직접 바이너리를 실행시키는 것 보다는 한계가 많을 수 밖에 없을 것이다.





4. 결론

  사실 가상 머신 우회를 정리하려던 중 제대로된 정리를 원해서 계속 찾아가다 지금까지 오게 되었다. 앞에서도 말했듯이 제대로된 자료가 거의 존재하지 않기 때문에 지금까지 정리한 내용이 맞는지도 잘 모르겠다. 원래 보안 제품들이 그런 면이 있지만 이쪽은 정말 부족한 것 같다. 물론 가상 머신 우회나 안티 에뮬레이션 같은 구체적인 자료들은 많이 존재하기 때문에 우선 이렇게만 정리한 후에 구체적인 내용들을 정리하고자 한다.





5. 참고 자료

i. Full System Emulation: Achieving Successful Automated Dynamic Analysis of Evasive Malware - Christopher Kruegel. Lastline, Inc.

Posted by SanseoLab

블로그 이미지
Malware Analyst
SanseoLab

태그목록

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

최근에 올라온 글

최근에 달린 댓글

글 보관함