[Case Study] 실제 사례를 통해 살펴본, 악성코드 분석부터 대응방법까지
매주 금요일 저녁, 기업의 보안 담당자가 퇴근하면 회사 웹사이트가 변조되는 사건이 발생하곤 한다. 공격자는 주말에 관리자가 대응하지 않는다는 것을 알고 웹 사이트를 변조하여 주말 내내 악성 코드 유포에 사용했다. 주말 동안 회사 보안 담당자를 괴롭히고 한 주의 상쾌한 출발을 방해하는 이 악성코드를 어떻게 하면 바로 탐지하고 대응할 수 있을까.
안철수연구소에서는 액티브허니팟(ActiveHoneypot)을 구축하여 악성 코드를 계속하여 수집 및 분석하고 사이트케어(SiteCare) 등의 웹 위•변조 방지서비스를 제공하고 있다. 이 글에서는 최근 발생한 악성코드 유포 사례를 통해 악성코드가 어떻게 탐지 되고 간단한 분석을 할 수 있는지 알아보겠다. 개인 사용자 입장과 기업의 보안 담당자 입장에서 악성코드 유포에 대한 대비책도 함께 알아보자.
ActiveHoneypot에 의한 악성코드 유포 행위 탐지
지난 8월 한 주를 마무리하는 금요일 늦은 오후, 안철수연구소에서 개발한 액티브허니팟(ActiveHoneypot)에서는 국내의 한 업체(이후 A사로 표기)에서 악성코드를 유포하고 있음을 CERT(침해사고대응센터) 관제센터로 알려왔다. 악성코드 유포에 사용되었던 사이트의 관리자로부터 웹 사이트 변조에 대한 침해 사고 조사를 의뢰 받아 포렌식을 진행하게 되었다.
침해사고 조사 결과 공격자는 웹쉘(Webshell)의 업로드를 통해 시스템의 권한을 획득하였으며 웹 페이지 소스 코드에 링크 한 줄을 추가해 악성 코드를 유포하도록 변조했다. 웹쉘이 업로드 되고 얼마 지나지 시점에 액티브허니팟에 의해 특정 업체에서 악성코드를 유포함을 알 수 있었다.
먼저 액티브허니팟에 대한 특징을 살펴보도록 하자.
액티브허니팟은 기존의 허니팟과 달리 악성코드 샘플 수집 방법이 능동적인 것이 가장 큰 특징이다. 기존의 허니팟은 취약한 서버를 운영하여 많은 악성 코드 유포자들이 허니팟 서버를 공격하여 악성코드를 업로드하도록 하는 방식이다. 이에 비해, 액티브허니팟은 취약한 서버가 여러 URL을 방문하여 해당 사이트에서 배포하는 악성코드를 다운로드 및 실행하며 악성코드 배포에 사용되는 URL을 저장하는 방식이다.
최근의 악성코드는 인터넷 익스플로러(Internet Explorer), PDF 뷰어(PDF Viewer), 플래쉬(Flash) 등의 애플리케이션에서 발생하는 취약점과 악성 코드, 침해 사고 사이트가 결합된 형식으로 유포되는 특징을 보이고 있다. 이러한 악성코드 유포의 특징을 고려해 볼 때 많은 샘플을 확보하기 위해서 여러 URL을 방문하는 것이 보다 효과적이다.
[그림 1]은 액티브허니팟의 개념도로 보안 패치가 되지 않은 가상 머신들이 URL 크롤링(Crawling)을 통해 악성코드 유포 사이트나 침해 사고 사이트를 접속하여, 해당 URL에 있는 링크를 다운로드 받는다. 그 중, 악성 코드가 삽입되어 있는 경우 이를 다운로드 받고 실행 시키며, 해당 URL 정보를 DB에 저장한다.
[그림 1] 안철수연구소의 액티브허니팟(ActiveHoneypot) 개념도
이 악성코드 실행 과정에서 샘플 분류 시스템, 샘플 분석 시스템(파일 분석 및 네트워크 분석)을 통해 탐지 URL의 위험도를 판단하며, URL DB를 갱신하고, 이 정보들이 안철수연구소 V3의 시그니처 생성에 이용된다.
위 표의 내용은 액티브허니팟이 CERT 관제센터로 A사에서 악성코드를 유포하고 있음을 알려온 메일의 일부이다. 이 메일 중 ReferURL에서 URL 크롤링(crawling)에 의해 방문한 사이트를 확인할 수 있으며, 해당 사이트에서 다운로드 받고 실행되어 생성되는 다수의 파일 정보는 DropFile에서 확인이 가능하다. 이곳에 표시되는 MD5 해쉬 값을 사용하여 여러 악성코드 데이터베이스에 쿼리가 가능하여 파일의 악성 여부에 대해서도 바로 확인이 가능하다.
Malzilla를 이용한 악성코드 분석 방법
그럼 Malzilla라는 툴을 사용하여 간단하게 악성코드를 분석하는 방법에 대해 살펴보자. 이 과정을 통해 악성코드 유포지의 정보를 파악할 수 있다면, 추가 감염을 막기 위한 기본 정보 획득이 가능할 것이다
A사의 웹사이트에 삽입된 악성 코드를 살펴 보니 쉽게 파악하기 힘든 구조로 삽입 되어 있었다. 악성코드 제작자의 입장에서 악성 코드의 생명 주기는 매우 중요한 문제이다. 그들이 배포한 악성코드도 언젠가 분석가들에 의해 분석되고, 안티 바이러스 제품 또는 네트워크 기반 보안 장비에 의해 탐지될 것이라는 것을 안다. 악성코드 제작자는 최대한 분석을 어렵게 하기 위해, 여러 가지 기법을 사용할 수 있는 데 이번 사건에서는 넓은 의미에서의 사회 공학적 기법, 그리고 코드 난독화 기술들을 사용하였다.
A사는 매우 복잡한 메인 페이지를 가지고 있으며, 많은 협력업체 및 광고 페이지의 링크가 표시되고 있었다. 이 메인 페이지의 수 많은 페이지 중 한 파일을 변조하여 사업적으로 관계가 있는 B사의 그림 파일을 불러들이도록 변조한 것이다.
우선 최초 삽입 위치는 A사의 http://a.a.a.a/menu_js/displayobject.js로 이 파일의 하단에 B사의 그림파일 hxxp://b.b.b.b/gs3/pc_search_top.gif을 불러 들이도록 내용을 추가했다.
이 때, 분석가 입장에서는 A사와 B사가 협력사 관계가 있기 때문에 자연스럽게 지나치게 된다. 게다가, B사에 포함되어 있는 pc_search_top.gif 파일의 확장자가 GIF라는 점은 분석가에 의해 발각되지 않도록 노력한 흔적이 보인다.
이 pc_search_top.gif 파일을 다운로드 하여 내용을 살펴보면 다음과 같다.
정상적인 GIF 파일의 경우, 아래 그림과 같이 GIF89a라는 시그니처를 가지고 있다. 하지만 이 파일은 악성코드를 유포하도록 조작되어 있었다.
공격자는 이 악성코드 삽입 시 두 업체의 사회적 관계를 이용하여 악성코드가 아닌 것처럼 연결했다. 또 확장자를 GIF 파일로 작성하여 그림 파일인 것처럼 위장하는 기법을 사용하였다.
malzilla를 이용해 분석한 결과, pc_search_top.gif의 첫 줄에 삽입되어 있는 aad.jpg은 다음과 같은 내용을 가지고 있다.
공격자는 위 코드가 어떤 행위를 수행하는 지 한눈에 알아볼 수 없도록 변수명, 그리고 변수의 값 등을 난독화하였다. 이런 경우, 깔끔하게 정리되어 있는 코드를 보는 것 보다는 분석에 약간의 시간이 더 걸리도록 할 수 있다.
일반적으로 네트워크 보안 장비는 정규 표현식 또는 패턴 문자열을 기반으로 공격을 탐지한다. 이러한 악성코드가 전송되는 경우에는 위와 같이 난독화 된 형태로 피해자의 PC에 전송이 된 후, 웹 브라우저에서 실행할 때 실제 취약점을 공격하는 형태로 동작하게 되어 탐지가 매우 어렵다.
[그림 2]는 Malzilla 최초 실행 화면이다. 그림 하단에서 이 툴은 특정 URL에 있는 파일을 다운로드 받을 수 있는 기능을 제공한다. 대부분의 악성코드들은 웹 브라우저를 통해 접근하면 웹 브라우저 자체에 존재하는 취약점 때문에 공격자가 의도한 임의의 쉘(Shell) 코드가 실행되게 된다. 이 경우 악성 코드를 다운로드 받고 자동 실행이 되기 때문에, 분석 시에는 이런 “Malzilla”와 같은 툴을 사용하는 것을 추천한다.
[그림 2] Malzilla 최초 실행 화면
[그림 2]의 하단에서 URL 부분에 다운로드 받고자 하는 악성코드 URL을 입력하고 Get을 누른다. 그럼 [그림 3]과 같이 상단에 해당 파일에 대한 내용을 확인할 수 있다.
[그림 3] Malzilla의 URL 분석 화면
이 화면에서 파일의 내용이 표시되는 부분은 메모장 등의 애플리케이션과 마찬가지로 복사, 붙여 넣기 등의 기능을 지원한다. 이 중 파일의 내용 중 YTMTV라는 변수에 대해 디코딩하는 방법을 알아보겠다.
변수의 값을 살펴 보면 “%uxxxx” 형태로 반복되는 것을 알 수 있으며, 이 값은 인코딩된 값으로 “Malzilla”에서 제공하는 여러 디코딩 기능으로 풀어 볼 수 있다. 큰따옴표(“ “) 안의 내용을 복사하여 상단 탭 중 Misc Decoders로 이동한 후 붙여넣기를 한다. 이 Misc Decoders에서는 JS.encode, Base64 인코드 등 여러 형태의 인코딩에 대해서 디코딩 기능을 제공한다.
붙여넣기 한 후 [그림 4]와 같이 UCS2 To Hex 버튼을 선택한다.
[그림 4] Malzilla의 Misc Decoders 화면
디코딩하면 아래의 결과를 얻을 수 있다.
해당 값을 이제, 상단 메뉴 중 Hex View에 “Paste as hex” 항목을 선택하여 붙여넣기를 한다.
[그림 5] Malzilla의 Hex View 선택 화면
아래 그림과 같이 정상적으로 Hex 값이 들어 갔지만, 문자열을 확인할 수 없는 경우가 존재한다. 이 경우 XOR 연산 되어 있는 경우로 Malzilla에서는 XOR 키를 찾고, XOR 연산까지 해주는 기능을 제공한다.
이제, XOR 연산을 할 Key를 찾아야 하는 데 방법에 여러 가지가 있을 수 있겠지만, 여기서는 약간의 편법을 사용하겠다. 웹 브라우저에 존재하는 취약점을 이용하여 악성코드를 실행시키는 경우, HTTP를 이용하여 외부의 악성코드를 다운로드 받아 실행시키게 된다.
이 점에 착안하여, 우측에 스트링을 검색하는 기능을 이용하여 http를 검색한다. (Find 버튼 클릭) 검색이 완료되면 Finished라는 대화 상자와 함께 key 부분에 bd라는 값이 들어가 있음을 확인할 수 있다.
[그림 6] Malzilla의 Find XOR key 화면
이제 하단의 Apply XOR 버튼을 클릭하여 XOR 연산을 진행한다.
XOR 연산 적용 결과 악성 코드를 다운로드 받는 위치를 확인할 수 있다. 안철수연구소의 V3 제품군에서는 test0.exe 파일을 Trojan/Win32.OnlineGameHack으로 탐지하고 있다.
최근 웹을 통해서 유포되는 악성코드는 대부분 온라인게임핵(OnlineGameHack), 오토런(Autorun)계열의 악성코드이다. 온라인게임핵의 경우 계정 유출, 개인정보 유출 등에 사용되며, 오토런 계열은 사용자 PC를 이용하여 DDoS와 같은 공격을 수행할 때 사용될 수 있다.
개인 사용자 또는 기업 보안 관리자 입장에서의 악성코드 유포 대처 방법
앞서 살펴본 실제 사례와 같이 최근 악성코드 유포는 애플리케이션 취약점 및 웹 브라우저의 취약점에 의해 유포되는 것이 특징이다. 이 경우, 개인 사용자가 의심스러운 사이트에 접속하는 것이 가장 중요하겠지만, 최근의 사례를 살펴 보면 사람들이 신뢰하는 기업이 침해 사고를 당해 악성코드를 유포하는 경우가 많이 발생하고 있다.
그럼, 개인 사용자와 기업 보안 관리자 입장에서 이 악성 코드 유포에 대한 대처 방법에 대해 알아보자.
먼저, 개인 사용자의 경우 안철수연구소에서 개발한 사이트가드(SiteGuard, http://www.siteguard.co.kr/)를 설치한 후, 안전하게 웹 서핑을 할 것을 추천한다. 사이트가드를 이용하면 방문하는 사이트에서 자동으로 다운로드 및 실행되는 악성코드에 대한 피해를 미연에 방지할 수 있다.
[그림 7] 안철수연구소 사이트가드 설치 화면
사이트가드를 설치하면 좌측 상단에 S 모양의 아이콘이 표시되며, 사용자가 방문하는 사이트의 위협 요소를 판단하여 개인 사용자에게 알려주거나 차단한다. 이 기능으로 악성코드 감염 예방 효과뿐만 아니라, 인터넷 사기 예방, 개인 정보 유출 예방, 신종 및 변종 악성코드에 대한 예방까지 제공 받을 수 있다.
기업의 보안 관리자 입장에서는 다방면으로 노력이 필요하다. 우선, 주기적인 웹 및 네트워크 취약점 점검이 필요하다. 자동화된 툴에 의한 점검이라도 해커가 공격할 만한 취약점을 미리 파악하여 제거함으로써 보안성 강화를 이룰 수 있다. 이번 침해 사고의 경우도 파일 업로드 취약점에 의해 웹쉘 업로드가 가능한 것이 원인이었다. 이러한 문제점은 웹 페이지 개발 및 업데이트 시에 충분한 테스트 및 취약점 점검이 필요함을 의미한다.
또한, 인프라 망에 웹방화벽 및 IPS 등의 보안 장비를 투입하고 모니터링하는 것도 매우 중요하다. 최근에는 이러한 네트워크 기반 보안 장비로 차단하기 힘든 웹쉘 업로드에 대한 방어도 지난 호에서 소개한 쉘클린(ShellClean) 등으로 방어가 가능하다.
안철수연구소에서는 자체 개발한 사이트케어 서비스를 오픈했다. 웹 콘텐츠 진단 엔진인 ‘안티 멀사이트(Anti-MalSite) 엔진’과 위험 사이트 차단 서비스 ‘사이트가드’로 구성된 사이트케어는 기업 및 기관 웹사이트의 해킹과 악성코드 유포, 개인정보 노출을 실시간으로 모니터링해 유사 시 빠르게 조치토록 경고해주는 서비스다. 웹 방화벽은 웹 서버 관점에서 서버로 들어오는 공격만 탐지하고 걸러내는 한계점이 존재하지만 사이트케어는 웹 콘텐츠를 분석 및 모니터링하여 위협 요소를 판단한다. 특히, 최근에 주로 발생하는 PDF 뷰어, 플래쉬 등의 애플리케이션 및 웹 브라우저의 취약점을 공격하는 난독화된 스크립트까지 분석하고 진단할 수 있다는 강점을 가지고 있다.
지금까지 액티브허니팟을 이용한 악성코드 탐지부터 Malzilla를 사용한 악성 코드 내용 분석 및 대처 방안에 대해 다루어 보았다. 개인 사용자의 보안에 대한 보안 인식이 가장 중요하며, 최신 패치 적용 및 사이트가드 등의 보안 프로그램 설치를 강력히 추천한다. 기업 보안 담당자도 주기적인 취약점 점검, 보안 장비 도입 및 대응 및 탐지 체계 구축이 무엇보다도 시급하다. 이러한 작은 노력 들로 악성코드에 의한 피해와 우려가 없는 사이버 세상을 만들어보자.@
- 안철수연구소안철수연구소 CERT팀 주임연구원 김창엽