[아이티비즈 김문구 기자] 포티넷코리아(지사장 조현제)는 27일 자사 보안연구소인 포티가드랩이 HWP 문서 사용자 대상 멀웨어 공격을 발견했다고 밝혔다.
이번 공격은 이미 알려진 CVE-2015-2545 Encapsulated PostScript(EPS) 취약성을 사용하는 한글 워드 프로세서(HWP) 문서였다.
HWP는 우리나라 정부기관에서 많이 사용되며, 한국어 사용자를 스피어 피싱 대상으로 삼았다. 악성 문서 내용은 한국의 원전 및 노동 정책 등의 정치적 이슈로 사용자를 유인한 것으로 보인다.
이 공격은 추적이 어려울 뿐만 아니라, 데이터 스토리지와 통신을 제공하는 무료 클라우드 서비스인 ‘피클라우드(pCloud)’를 이용했으며, 수집한 샘플을 분석한 결과 ‘클라우드탭(CloudTap)’이라는 멀웨어가 나타난 지 1년이 넘은 것으로 나타났다.
악성문서에는 캡슐화된 포스트 스크립트를 숨겼으며, 문서가 실행되면 스크립트가 실행되고 페이로드가 다운된다. 그리고 피해자 단말에 저장된 기밀문서를 검색하고, 브라우저에 저장된 자격 증명을 탈취하는 것으로 보인다.
또한 이 공격은 무료 클라우드 서비스인 ‘피클라우드’를 C&C 서버로 사용하며, 타깃 사용자로부터 기밀문서와 자격증명을 탈취한 후 암호화해 저장한다. 무료 클라우드를 사용하면 C&C 서버 운영 비용을 줄일 수 있을 뿐 아니라 추적을 피할 수도 있다. 또한 ‘클라우드탭’이라는 악성코드를 1년 이상 사용한 것으로 분석됐다. 이번 공격의 주요 내용은 다음과 같다.
◇ JPEG 이미지에 숨겨진 페이로드
이 공격에서 사용한 두 문서에는 한국의 원자력 및 노동력 문제와 관련된 기사 발췌문이 들어 있었다<그림 1 참조>.
캡슐화된 포스트스크립트 파일이 문서에 들어 있는데, 사실상 일반 사용자의 눈에는 전혀 보이지 않는다. HWP 문서의 모든 개체와 마찬가지로 zlib을 사용하여 압축을 풀어야 실제 쉘코드를 볼 수 있다. 결국, http://price365[dot]co[dot]kr/abbi/head0.jpg에서 실행 파일을 다운로드 하게 된다.
파일이 실행되면 JPEG 이미지 헤더가 포함된 다른 파일을 다운로드한다<그림 2 참조>.
예상했던 대로 이 이미지에는 실행 바이너리가 있었고, 간단한 싱글바이트 xor 키로 암호화되어 있었다. 이렇게 가장하는 목적은 일부 멀웨어 방지 시스템이 스캔과 샌드박스 절차를 멀웨어에서 흔히 사용하는 실행 파일에만 적용하여 서비스를 최적화하는 특징을 악용하기 위해서다<그림 3 참조>.
FortiGuard는 클라우드 서비스 사용에 기초하여 CloudTap으로 임베딩된 멀웨어를 찾아낸다. 또한, 이 멀웨어의 이전 샘플도 발견했다. 그 중 하나가 2016년 초에 컴파일된 디버그 버전인 것으로 미루어 보았을 때 이 멀웨어가 벌써 1년 이상 떠돌아다녔다는 것을 짐작할 수 있다<그림 4 참조>.
◇ 표적 찾기
멀웨어 공격자는 대개 시스템 환경을 조사하여 흥미로운 공격 표적을 찾는다. 그리고 네트워크에 더욱 깊이 침투하거나 가치가 높은 시스템에서 단순히 리소스를 찾아내는 등 다음 행보를 결정한다. 이 공격에서는 페이로드가 문서를 검색하고 브라우저가 저장한 자격 증명을 추출하려고 시도한다.
페이로드 실행 파일은 키 문자열을 바꾸어 놓기만 하고 분석 방지 기술을 전혀 사용하지 않은 채 바로 작업에 들어간다.
◇ 프로세스와 특정 확장자가 붙은 문서 목록화
멀웨어는 시스템의 모든 실행 중인 프로세스를 나열하고 피해자가 사용 중인 애플리케이션 중에 흥미로운 것이 있는지 살펴보거나 안티바이러스 제품을 찾아낸다.
그런 다음 “.hwp”, “.doc”, “.docx”, “.pdf”, “.ppt”, “.pptx” 등의 확장자가 붙은 문서를 찾기 시작한다. 루트 드라이브를 제외하고 시스템에서 발견된 모든 고정 및 이동식 드라이브의 디렉터리 전체를 검색한다<그림 5 참조>.
루트 드라이브를 검색할 때는 일반적으로 문서를 저장하는 디렉터리만 확인한다(내 문서/문서, 바탕화면, 최근 문서 등). 그러나 앞서 진행했던 과정과는 달리 여기서 발견한 파일은 확장자에 제한을 두지 않는다<그림 6 참조>.
지금은 문서 파일 경로 목록만 있기 때문에, 이 시점에서는 멀웨어 제작자가 어떤 정보에 관심이 있는지 알아내기 어렵다. 아마 위협 분자는 유출할 만한 기밀 정보가 있는 문서를 찾고 있거나 나중에 피싱에 이용할 만한 문서를 찾고 있는지도 모른다.
◇ 다양한 방법 활용하여 자격 증명 추출
이 멀웨어는 여러 가지 기술을 활용하여 Microsoft Windows와 특정 브라우저가 저장한 자격 증명을 추출하려고 한다.
Internet Explorer에서 저장한 로그인 자격 증명을 알아내기 위해 CredEnumerateW API로 자격 증명을 끼워 맞추는 동시에 “Microsoft_WinInet_”으로 시작하는 항목으로만 결과를 필터링한다. 그런 다음, CryptUnprotectData를 적용하고 GUID “abe2869f-9b47-4cd9-a358-c22904dba7f7”을 암호 해독 엔트로피를 활용하여 자격 증명을 해독한다.
그 외에 IE가 자동 완성 자격 증명을 저장하는 데 사용하는 “Software\Microsoft\Internet Explorer\IntelliForms\Storage2” 레지스트리도 활용한다.
다음 브라우저로 넘어가기 전에, 멀웨어는 Windows Vault에서 자격 증명을 추출하려고 시도한다. Windows Vault도 Microsoft가 내장한 자격 증명 스토리지다. 이번에는 Vault Client Access Library(vaultcli.dll)를 활용한다.
마지막으로 Chrome 브라우저에서 자격 증명을 추출하기 시작한다. Chrome의 자격 증명은 :\Users\\Appdata\Local\Google\Chrome\User Data\Default에 로컬 저장된다.
◇ 무료 클라우드 서비스 pCloud를 C&C 서버로 활용
앞서 설명한 바와 같이, 공격자는 스위스 IT 회사인 pCloud AG가 개발한 클라우드 스토리지 서비스 pCloud를 활용한다. 이 클라우드는 2013년부터 서비스를 시작했으며, 가입하자마자 이메일 검증 절차 없이 무료 스토리지를 10GB 제공한다<그림 7 참조>.
AES로 표적 데이터를 획득하고 암호화한 뒤에는 .dat라는 이름으로 파일을 작성하고 클라우드에 업로드한다. 게다가 훔친 데이터를 저장하는 공간으로 서비스를 악용할 뿐만 아니라 URL 목록에서 파일을 다운로드하도록 멀웨어에 지시한다.
클라우드 서비스를 C&C 서버로 활용하는 데는 여러 가지 장점이 있다. 우선, 설정이 매우 간편하고 이런 목적으로 사용하기에 충분한 기능을 갖춘 무료 클라우드 서비스가 무수히 많다. 그러므로 공격자는 직접 웹 서버를 설치하거나 다른 사람의 웹 서버에 침투할 필요가 없다. 그뿐만 아니라 클라우드는 언제나 온라인 상태에서 액세스할 수 있다. 또한, 정보가 거의 없기 때문에 포렌식 조사에 착수하기에도 매우 복잡하다. 웹사이트에 침투하는 것과 달리, 클라우드는 포렌식 조사를 진행할 실제 기계도 없고 멀웨어의 흔적을 찾아낼 만한 웹 관리자도 없다. 게다가 이런 서비스 계정은 개인정보 보호정책의 보호를 받다. 특정 계정에 대한 정보가 필요할 때는 개인정보 보호정책이 걸림돌로 작용한다.
다음은 이 공격에서 pCLoud 계정에 등록하는 데 사용한 이메일 주소이다(일회용 포함). 이 목록은 처음 발견해서 기록한 이후로 확장 및 변경되었다.
• szfmcyjl15wfe@pokemail.net
• dribacukes@throwawaymail.com
• silverbrown6767@yandex.com
• laowinjintorres@yandex.com
• wirecapital9090@yandex.com
• longspairman@yandex.com
• laowinjintorres@yandex.com
• kduandql@yomail.info
• applestorm8188@yandex.com
◇ 데이터 유출 및 깊은 침투
이 공격은 pCloud API를 사용하여 피해자 컴퓨터에서 쉽게 데이터를 업로드하고 감염된 시스템에 다른 도구나 멀웨어를 다운로드한다.
당연하겠지만, 파일 작업과 관련된 API를 사용하려면 먼저 로그인을 통해 서비스에서 세션 키를 얻어야 한다. 멀웨어는 계정 이메일과 비밀번호로 userinfo API를 사용하여 이후 API 호출에 사용할 세션 키를 얻으려고 시도한다. 아래 요청에서는 HTTPS를 사용하였으나, 요청을 상세하게 보여주기 위해 멀웨어가 강제로 HTTP를 사용하게 했다<그림 8 참조>.
멀웨어는 앞서 얻은 세션 키를 사용하여 uploadfile API를 통해 암호화된 데이터가 포함된 파일을 클라우드 스토리지에 업로드한다. 데이터에는 다음 정보가 포함된다.
• MAC 주소
• 실행 중인 프로세스
• 파일 목록
• 자격 증명
그 후 파일은 시스템에서 삭제됩니다<그림 9 참조>.
멀웨어는 훔친 데이터를 업로드한 후, 나중에 다운로드할 .lst라는 이름의 파일을 찾다. 이 글을 작성하던 당시에는 파일 샘플을 얻을 수 없었다. 하지만 이를 통해 몇 가지 결론을 내릴 수 있다.
즉, 멀웨어가 다운로드하는 .lst 파일 이름에 있는 MAC 주소는 해당 MAC 주소를 가진 피해자만 이 파일을 받는다는 뜻입니다. 여기서 .lst 파일의 내용을 짐작할 수 있다. 나중에 이 파일에 다운로드 URL 목록이 들어 있는 것으로 확인되었는데, 이는 특정 피해자에 맞추어 작성한 것이다.
또한, 공격자가 앞서 수집한 데이터를 기반으로 특정 피해자만 선택한다는 것을 의미할 수도 있다. 어떤 경우라도 MAC 주소가 스푸핑되었다면, MAC 주소는 여전히 특정 표적과 연결된 고유한 식별자이기 때문에 공격의 두 번째 단계를 예고하는 것일 수 있다. 이러한 가정은 이전 단계의 데이터 수집이 공격의 정찰 단계에 불과하고 피해자의 환경에 따라 다음 단계를 결정한다는 추측에 힘을 실어준다<그림 10 참조>.
멀웨어는 .lst 파일을 다운로드한 후에는 pCloud에서 삭제함으로써 멀웨어 분석 전문가/연구자들이 공격의 두 번째 단계를 알 수 없도록 차단한다. 다운로드가 실패하면 멀웨어는 5시간 동안 다시 시도한다. 5시간까지는 시스템에 남아 있다가 자체 종료한다. 지금은 이 공격이 피해자의 시스템에서 어떤 도구 또는 멀웨어를 사용했는지 추측만 가능할 뿐이다.
이 목록도 AES로 암호화되어 있으며, 멀웨어가 다운로드한 파일을 분석하는 방식을 기반으로 미루어 보면 새 줄로 구분한 URL 목록이 들어 있다. 최종적으로 멀웨어는 목록에 있는 모든 항목을 다운로드하고 실행한다<그림 11 참조>.
◇ 해결 방법
① Hacome에서 릴리스한 CVE-2015-2545 취약성 해결 패치를 적용한다.
② Fortinet 보안 장비에서 구동되는 FortiGuard 안티바이러스 서비스는 악성 HWP 파일을 MSOFFICE/CVE20152545.HWP!exploit으로, 페이로드는 W32/Cloudtap.A!tr.pws로, 작성된 JPEG 파일은 DATA/CloudTap.JPG!tr.dldr로 탐지한다.
③ Fortinet 보안 장비에서 구동되는FortiGuard 웹 필터링 서비스는 모든 C&C 및 관련 URL을 차단한다.
④ FortiSandbox는 HWP 파일을 고위험군으로 분류한다.