보안정보
전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.
정상인 듯 정상 아닌 정상 같은 한글 문서형 악성코드 분석기(ver.2019)
2019.12.26
8,039
1. 개요
2019년을 돌이켜 보면 다양한 악성코드 들로 하루도 바람 잘 날 없는 한 해였다. 연초부터 TA505그룹의 엑셀 매크로 악성코드 변종을 시작으로 수년간 전 세계의 PC를 노리던 GandCrab의 자리를 Sodinokibi(BlueCrab), Nemty등 다양한 랜섬웨어들이 메꿔 주었다. 공격자들은 여전히 다양하고 정교한 사칭 메일을 통해 유포되고 있고 GandCrab 보다 더 다양한 공격기법으로 꾸준히 진화해왔다.
다양한 악성코드 중에서도 유독 눈길을 끈 악성코드는 뭐니뭐니해도 ‘국내 타깃 한글 문서형 악성코드’라고 할 수 있다. 발견한 한글 문서형 악성코드의 목표가 사용자 PC의 정보 수집인 경우가 대다수여서 감염사실에 대한 인지 및 감염 후 대응방법이 무엇보다도 중요하다고 볼 수 있다. 이러한 공격의 경우 다양한 공격기법이 사용되어 흥미롭기도 하지만 악성행위 없이 정상적인 문서만 보여지는 경우도 많아 분석에 더 많은 공수가 필요하다.
따라서 올해의 마지막 Analysis Report에서는 2019년 한 해 동안 발견된 한글 문서형 악성코드들이 어떠한 방법을 사용하여 은밀하게 페이로드를 숨기고 있고 또 보안전문가들은 어떤 방법을 활용하여 분석해왔는지에 대해서 정리해보고자 한다.
2. 한글 문서형 악성코드
한글 문서형 악성코드는 다수의 국내 사용자들이 문서작성에 사용하는 한글 워드프로세서(이하 한글)의 파일 안에 악성행위를 수행하는 공격코드가 들어있다. 이러한 파일을 실행하게 되면 정상 한글파일과 동일한 문서 내용이 출력됨과 동시에 한글 프로그램의 취약점이나 문서 내부의 악성 링크를 활용하여 악성행위를 수행한다.
최근 몇 년간 발견된 한글 악성코드는 주로 CVE-2017-8291(한글에서 제공하는 인터프리터인 고스트스크립트(Ghost Script)의 취약점으로 발생하는 공격)으로 인해 발생되었으나 한글프로그램의 자체 보안패치나 국내 백신社들의 발빠른 대응으로 해결되었다. 그러나 공격자들 역시 끊임없이 또 다른 취약점이나 백신의 탐지를 우회하기 위해 고심하고 있다.
그렇다면 본격적으로 2019년 한해 발견된 한글 문서형 악성코드를 분석하기 위해 한글 악성코드의 특징 중 하나인 STEP1에서의 포스트 스크립트(Post Script) 형태의 변화를 통해서 어떤 식으로 악성코드가 발전해 왔는지 살펴보고자 한다.
※ 포스트 스크립트 : 디지털 인쇄에서 주로 사용되는 스크립트 언어이며 한글에서 제공하는 정상적인 기능 중 하나이다. 고스트 스크립트(인터프리터)가 포스트 스크립트를 해석하면서 발생 하는 취약점을 이용하여 악성코드를 실행시키기 때문에 추가 악성행위를 확인하기 위해서 포스트 스크립트를 확인한다.


[표 1] 분석에 사용된 악성코드 샘플 정보 (수집일자는 VirusTotal 등록시점 UTC기준)
1) XOR 키값의 크기(1 ~ 4byte)
한글 문서형 악성코드의 PS영역은 언제나 혼란하다. 공격 코드를 숨기기 위한 공격자들의 피와 땀으로 얼룩져 있기 때문이다. 노력은 가상하지만 해결책은 항상 코드에 들어있는편이다.
우선 위의 코드는 한글 악성코드를 실행 시 고스트스크립트에 의해 해석되는 부분이다. 하지만 스크립트라기엔 읽을 수 없는 문자열의 연속이다. 해당 영역을 조금 더 확인해보면 아래쪽에 수상한 숫자와 XOR 이라는 문자열이 있는것을 확인할 수 있다.

[표 2] 유형1과 동일한 샘플 정보 (수집일자는 VirusTotal 등록시점 UTC기준)

[그림 1] PS 코드의 위쪽

[그림 2] PS 코드의 아래쪽
XOR 이라는 문자열 앞 뒤로 스크립트로 보이는 부분들이 보인다. 잘 해석해보면 앞의 의미없는 문자열 데이터들과 204(0xCC)를 XOR 연산을 이용해 디코딩하면 무언가가 나올 듯 하다. 실제로 해당 데이터를 따로 떼어낸 후 0xCC로 디코딩을 해 보았다. 그리고 원하는 결과를 얻을 수 있었다.

[그림 3] XOR 연산을 이용하여 인코딩 되어있는 데이터

[그림 4] XOR 연산을 이용하여 디코딩된 데이터
XOR 연산을 이용하여 디코딩 된 데이터 내부에서 악성행위를 위한 쉘코드도 확인할 수 있었다.

[그림 5] 악성 쉘코드(일부)
실제로 해당 쉘코드를 동작시켜본 결과 잘 해석되어 인젝션 과정 및 C2에 접근하는것을 확인할 수 있었다. 본 보고서에서는 페이로드의 변화에 대해서 설명하기 때문에 악성 쉘코드의 자세한 행위에 대한 내용은 생략한다

[그림 6] 동작하는 악성 쉘코드
2) XOR 키값의 크기(16 byte)
XOR 디코딩에 사용하는 키값이 증가한 유형도 발견되었다. 비교적 짧았던 키값과 달리 상당히 길어진 편이었지만 툴을 이용하여 간단하게 해결할 수 있었다.

[표 3] 유형2와 동일한 샘플 정보 (수집일자는 VirusTotal 등록시점 UTC기준)

[그림 7] XOR 키값의 길이가 증가한 부분
그러나 XOR 연산을 이용하여 디코딩 된 쉘코드가 자체적 루틴으로 한번 더 난독화 되어있었다. 실행 시 자체적인 복호화 루틴에 의해 악성 행위를 하는 코드가 완성되었다.

[그림 8] 자체 루틴에 의한 코드 복호화 전

[그림 9] 자체 루틴에 의한 코드 복호화 후
이 경우 악성행위를 하는 코드 뿐만 아니라 C2주소도 함께 복호화 되는것을 확인할 수 있었다. 해당 악성코드는 복호화 된 C2에서 추가 악성코드를 다운로드 받아온 후 최종 악성행위를 진행하였다.

[그림 3-10] XOR 연산을 이용하여 인코딩 된 상태

[그림 11] XOR 연산을 이용하여 디코딩 한 상태
3) VBE
PS영역에는 가끔 생각지도 못한것들이 들어있기도 한다. 그 중 하나가 바로 VBE코드인데 다음의 경우는 시작프로그램에 VBE 파일을 등록하여 컴퓨터가 부팅될 때마다 실행되게끔 한다.
(※ VBE는 VBS에서 자체적으로 제공하는 디코딩 기법을 적용한 파일 형태를 의미한다)

[표 4] 유형3과 동일한 샘플 정보 (수집일자는 VirusTotal 등록시점 UTC기준)

[그림 12] HncDic.vbe라는 이름의 프로그램이 시작프로그램에 등록(PS 영역)
PS영역에는 다음과 같은 VBE코드가 들어있으며 디코딩 하면 다음과 같은 코드를 확인할 수 있다.

[그림 13] VBE 인코딩 된 코드

[그림 14] VBE 디코딩 된 코드
디코딩 된 VBE 코드에는 여러 번 URL 인코딩 된 문자열이 들어있다. 여러 번 URL 디코딩 작업을 진행 하면 최종적으로 난독화 된 VBS코드를 확인할 수 있다. 공격자들은 이미 해제 기법이 공개된 난독화 방법을 이용하였다.

[그림 15] 난독화된 VBS 코드

[그림 16] 난독화가 해제된 VBS 코드
4) Step1 이후의 추가 악성행위
앞에서 소개한 다양한 방법들을 통해 악성 페이로드(쉘코드)가 정상적으로 메모리에 로드 되고나면 다음의 행위를 진행한다.(Step2)
1. 임의의 C2에서 추가 파일을 다운로드 받아온 후 실행
2. 임의의 프로세스에 추가 악성행위를 하는 파일을 인젝션 하여 실행
임의의 프로세스에 추가 악성행위를 하는 파일을 인젝션 하여 실행 하는 경우는 주로 정상프로세스에 인젝션 되어 동작하며 인젝션에 사용되는 정상프로세스와 실제로 사용된 샘플명은 다음과 같다.

[표 5] 인젝션에 사용되는 프로세스 목록 및 실제 사용 샘플
정상 파일에 인젝션 되기 때문에 실행 시 백그라운드에서도 수상한 파일을 찾을 수 없으며 랜섬웨어처럼 감염 시 파일이 암호 화 되는 등의 겉으로 보여지는 행위도 전혀 없다. 실행 시 문서 내용조차 정상 파일 같기 때문에 사용자는 감염 사실을 확인하기 어렵다. 최종 행위를 하는 악성코드는 주로 △ 사용자 PC의 정보를 탈취, △ 키로깅, △RAT(Remote Administration Tool), △ 백도어 등의 기능을 수행한다.
한글 문서형 악성코드는 2019년 한 해 동안 꾸준히 수집되었으며 일부 샘플은 실제 공격에 사용되기도 하였다. 현재도 계속해서 수집되고 있으며 앞으로도 꾸준히 국내 사용자를 타깃으로 하는 공격에 사용될 것으로 보인다.
3. 대응방안
한글 문서형 악성코드의 경우 특정 타깃을 목표로 한 스피어피싱(Spear Phishing)을 통해 유포되는 경우가 많다. 메일 본문이나 메일 제목, 첨부된 문서의 내용 등이 타깃이 관심을 가질만한 내용을 포함하고 있어 사용자는 의심 없이 파일을 확인하면 악성코드에 감염 될 우려가 크다. 이어서 한 해 동안 한글 악성코드 샘플들을 수집하고 분석하면서 느낀 대응방안에 대해 적어보자 한다.
▷ 취약점 패치
CVE-2017-8291의 경우 APT37, APT38그룹이 최근 공격에서 주로 사용하는 취약점으로 알려져 있다. 한글과 컴퓨터측에서는 이미 2017년에 보안패치를 배포하였으나 해당 취약점은 현재까지 계속해서 악성코드에 사용되고 있다. 최신버전으로 업데이트를 유지 할 시 공격 페이로드가 정상적으로 동작하지 않는다. 보통의 공격자들은 공격의 성공률이 낮아지면 새로운 방법을 이용하여 공격을 진행한다. 그러나 공격자들이 계속해서 이 취약점을 활용하고 있다는 점은 여러 의미에서 많은 생각을 하게 한다.
▷ 보안에 대한 경각심과 개인의 관심이 필요
한글 악성코드의 경우 감염 시 겉으로 드러나는 특징이 없이 사용자의 정보를 수집하는 특징을 가지고 있기 때문에 사용자 스스로가 감염되었음을 눈치채기가 상당히 어려운 편이다. 따라서 사용자 스스로가 보안에 대한 경각심과 관심을 가지고 애초에 감염되지 않게 상당한 노력을 해야 한다.

1년간 바이러스 토탈에서 헌팅(수집)되는 다양한 한글 샘플들을 분석하며 본 보고서에 언급된 내용 이외의 다양한 기술적 부분들이 계속해서 업그레이드되는 모습을 볼 수 있었다. 기술 부분 뿐만 아니라 스피어 피싱 메일, 샘플 문서, 대상 등 많은 부분의 공격벡터가 갈수록 정교해졌고, 정치적 이슈에 따라, 유포 대상에 따라 적합한 내용의 문서형 악성코드를 유포하였고 앞으로도 더 발전한 형태의 공격을 진행 할 것이다.
“아는 만큼 보인다” 라는 말이 있다. 보안도 마찬가지 인 것 같다. 관심을 가지는 만큼 알게 되고 아는 만큼 보이고 보이는 만큼 안전하게 PC를 지킬 수 있다고 생각한다.