보안정보
전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.
Anti-UPX Unpacking
2023.10.04
48,078
01. 서론
공격자의 페이로드를 담고 있는 악성코드는 공격대상 시스템(Victim)에 설치되어 지속성(Persistence)을 유지하도록 난독화(Obfuscation), 다형성(Oligomorphic & Polymorphic), 암호화(Encryped), 메타모픽(Metamorphic)등의 공격기법을 사용한다. 특히 디스크 공간을 절약하거나 데이터 전송시간을 단축하기 위한 목적으로 탄생한 패킹(Packing)기법은 실행파일을 암호화하거나 압축해서 정상적인 코드 식별을 저해하기 때문에 분석을 어렵게 하기 위한 목적으로 자주 사용된다.
악성코드가 즐겨 사용하는 패킹 기법 중 일반화된 패킹이 오픈소스 기반의 UPX(the Ultimate Packer for eXecutables) 패커라고 할 수 있다. 2020년 정보보안 교육기관인 InfoSec Institute에서 발표한 ‘Top 13 popular packers used in malware’에 따르면 The Enigma Protector, MPRESS, Exe Packer 2.300, ExeStealth, Themida, PESpin, Andromeda 등 다수의 패커 중에서 가장 상위를 차지할 정도로 UPX패커는 패킹을 수행하기 위한 가장 일반적인 도구로 알려져 있다. 이러한 이유로 AV탐지 매커니즘 상에서는 정상 파일과 비정상 파일을 구분하는 특징 중 하나로 UPX패킹 여부를 반영하기도 한다.
하지만 UPX패커로 패킹되어 있는 파일이라 할지라도 Anti-UPX가 적용되어 있는 경우에는 정상적인 UPX 언패킹이 저해되는 경우가 발생된다. 비정상적인 UPX패킹과 같은 경우를 제외하고 프로그램의 헤더정보 내에서 확인할 수 있는 컴파일 정보 내에서 UPX패킹 사실을 확인하였으나 언패킹되지 않는 경우가 발생되는 것이다. 이러한 경우에는 UPX패커로 언패킹하는 과정에서 ‘UPX로 패킹되지 않았습니다.(not packed by UPX)’이나 헤더에 문제가 있어서 언패킹이 불가능합니다. (file is possibly modified/hacked/protected)’라는 메시지가 발생하게 된다.
본 문서에서는 이와 같이 UPX로 패킹되어 있으나 정상적으로 언패킹이 되지 않는 Anti-UPX샘플을 헌팅한 결과에 대해서 분석하였다. 이에 따라 UPX언패킹을 저해하는 Anti-UPX Unpacking의 기술적인 개념과 Anti-UPX가 적용된 파일을 대응하기 위한 방안에 대해서 알아보고자 한다.
02. 패커(Packer)의 개요와 동작원리
Anti-UPX Unpacking을 이해하기 위해서는 패킹(Packing)을 수행하는 패커(Packer)에 대한 이해가 필요하다. 일반적으로 패커(Packer)는 기능에 따라 PE파일을 압축하는 컴프레서(Compressor)와 PE파일을 난독화 등을 통해 보호하는 프로텍터(protector)로 구분된다.
패커는 실행파일의 코드(.code)부분을 압축하고 압축된 영역을 해제하는 코드를 추가하여 실행파일의 시작위치(EP, Entry Point)를 추가한 코드로 변경하는 작업을 수행한다. 이 과정을 통해 기존의 실행 파일은 컴프레서 기능을 이용해 코드 압축을 수행하기 때문에 프로그램 자체의 파일 사이즈가 감소하거나, 프로텍터 기능을 통해 코드 보호기능 등이 추가되면서 도리어 기존의 프로그램 사이즈보다 용량이 증가하기도 한다. 패킹된 파일을 식별하기 위해서는 [표 2]의 패킹 여부를 확인할 수 있는 특징을 참고하면 된다.
[그림 1]에서는 패킹 프로세스의 ① ~ ③ 단계를 확인할 수 있다. UPX 섹션의 raw-size가 0이고, entry-point가 첫 번째 섹션이 아닌 UPX1로 설정, 섹션 네임에 UPX0, UPX1가 존재하는 것을 미루어 해당 파일은 코드 압축된 실행파일로 의심할 수 있다.
[그림 2]에서는 패킹 프로세스의 ④ ~ ⑤ 단계를 확인할 수 있는데, 분석한 샘플을 기준으로 UPX패킹 전에는 Import API목록이 625개로 확인되고 있으나, UPX 패킹 이후에는 Import API수치가 19개인 것으로 확인되고 있다.
1) 컴프레서(Compressor)의 개요
컴프레서의 대표적인 예시로는 UPX, ASPack 등이 존재하며 배포를 쉽게 하기 위한 목적으로 PE 파일을 실행할 수 있는 형태로 파일을 압축시켜 파일 크기를 줄여주는 기능을 수행한다. 파일 코드 압축의 경우, 기본적으로 압축된 코드 및 압축된 코드를 복호화 하는 코드가 실행 파일에 모두 담게 된다. PE 구조 압축의 경우, 쓸데없는 PE 구조를 자르거나 최적화하는 방식을 사용한다.
[그림 3]과 같이 일반적인 original.exe의 실행 코드를 압축하여 새로운 PE 헤더, 압축된 실행 코드, 코드 해제에 필요한 코드를 배치하게 된다. 이후 코드 해제에 필요한 코드에 새로운 시작점으로 설정하게 되며 프로그램 실행 시 압축 해제된 코드는 빈 공간에 저장 후 시작점을 압축 해제된 코드의 시작점으로 변경하여 실행하고자 하는 코드가 실행되는 방식이다.
2) 프로텍터(Protector)의 개요
프로텍터의 대표적인 예시로는 더미다(Themida), VMProtect, Winlicense 등이 존재하며 PE 파일을 실행할 수 있는 형태로 파일을 압축과 동시에 보호 기능을 제공한다. 보호 기능의 예시로는 안티 리버싱 기법이 적용된 것을 말하며 기법으로는 안티 디버깅(anti-debugging), 가상 머신 탐지(anti-vm), 코드 난독화(code obfuscating), 다형성 코드(polymorphic code), 더미 코드(garbage code), 디버거 탐지(debugger detection) 등의 기법 등이 포함된다. 추가로 프로텍터마다 고유의 파일 코드 압축 기술을 사용하여 일반적인 컴프레서 방식과 다르다는 장점이 존재한다.
[그림 4]는 Themida 프로텍터가 사용하는 일반적인 파일 코드 압축 방식과는 다르게 코드 블록을 만들어 코드 블록마다 프로텍트를 건 다음 전체에 대한 프로텍트 작업을 수행한다. 이후 자신들만의 안티 디버깅 기술을 추가하여 최종 완성된 실행파일을 생성한다.
03. Anti-UPX Unpacking이 적용된 파일분석
보통 프로텍터를 구매하여 사용하거나 크랙된 버전을 사용하는 경우를 제외하고 프로그램 실행코드를 보호하거나 용량을 줄이기 위해서는 오픈소스 도구를 사용해야 한다. 이때 널리 알려진 오픈소스 패킹 도구로 UPX가 사용되게 된다. UPX는 실행파일 코드 압축 시 약 50~70%를 줄여주며 Windows(exe,dll 등), MacOS, Linux(ELF) 등 다양한 실행파일 형식을 지원하는 것으로 알려져 있다.
악성코드 분석을 위해 UPX 패킹이 확인되는 경우 언패킹(Unpacking)을 진행해야 하는 경우가 생긴다. 문제는 이러한 언패킹 작업을 UPX 도구로 진행하지 못하도록 방해하는 방법이 존재하며 생각보다 간단하다는 점이 확인되었다. HEX 데이터에서 한 글자만 변경하여 어떤 변화가 생기는지 먼저 알아본 다음 실제 샘플에서 어떤 방식으로 Anti-UPX Unpacking이 적용되어 있는가 확인해 보고자 한다.
1) 수동으로 Anti-UPX Unpacking : HEX 값 교체
HEX 값 교체만으로 언패킹이 불가능한지 확인하기 위해 GitHub에서 배포 중인 mimikatz을 내려받아 UPX 패킹을 진행하였다. (출처: https://github.com/ParrotSec/mimikatz)
패킹된 mimikatz.exe를 Hex 에디터로 오픈 시 UPX0, UPX1 섹션명이 확인되며 ‘UPX0’의 이름을 ‘BPX0’으로 변경하였다.
UPX0 섹션명을 변경한 mimikatz 실행파일 실행 시 정상적으로 실행 되는 것으로 확인된다.
하지만, UPX 도구를 이용하여 언패킹 시도 시 실패 메시지와 함께 언패킹에 실패하는 것으로 확인된다.
수정하지 않은 mimikatz.exe를 Virustotal에 조회 결과 59/70개의 벤더사에서 악성으로 탐지하고 있다.
섹션명이 수정된 mimikatz.exe를 Virustotal에 조회 결과 45/71개의 벤더사에서 악성으로 탐지하고 있어 14개 벤더사는 악성으로 탐지하지 않고 있는 것으로 확인된다. HEX 데이터에서 섹션명 변경만 진행하는 간단한 방식으로 백신 탐지 우회가 일부 가능하다는 것을 알 수 있다. 또한, UPX 도구를 이용한 정상적인 언패킹 진행이 불가능하다는 것을 확인할 수 있다.
2) 자동으로 Anti-UPX Unpacking : Hex 값 교체 응용편
UPX 문자열을 변조하여 Anti-UPX Unpacking 기법은 실제 악성코드에서도 사용되고 있다. IoT 악성코드인 Mirai 및 변종, BoSSaBot, SBIDIOT에서 주로 사용되고 있으며 코인 마이너에서 Anti-UPX Unpacking 기법을 사용하는 것으로 확인되었다. 그 중 모네로(Monero) 코인 채굴에 사용되는 XMRig 마이너가 해당 기법을 사용한 샘플을 확보하여 어떤 방식을 통해 Anti-UPX Unpacking을 했는지에 대해 알아보고자 한다.
샘플파일은 64비트 ELF 형식으로 패킹여부 확인 시 UPX로 패킹 된 것으로 확인된다.
정식으로 배포중인 UPX 도구로 언패킹을 시도하면 UPX로 패킹된 파일이 아니라는 에러와 함께 언패킹이 진행되지 않는 것으로 확인된다.
샘플파일을 HEX 에디터로 열었을 때 ELF64 파일 헤더 정보 이후에 보여야 하는 UPX 헤더 정보에 이상이 있는 것으로 보였다.
UPX 헤더정보는 [그림 14]와 같으며 I_info 2번째 항목인 magic number에서 ‘UPX!’가 아닌 ‘APK!’로 변조되어 UPX에서 언패킹이 불가능한 것으로 확인되었다.
‘APK!’로 변조된 magic number를 조회 결과 총 5번 변조되어 있어 UPX 문자열 검색 이후 치환한 것으로 확인된다. 강제로 ‘UPX!’로 변환 이후 UPX 도구로 언패킹 시도 결과 성공하는 것으로 확인된다.
HEX 변조를 통한 Anti-UPX Unpacking 기법의 경우 JPCERT/CC에서 제공하는 수정된 UPX 도구를 이용할 경우 언패킹이 가능할 수도 있다. (https://github.com/JPCERTCC/upx-mod/releases/tag/v4.00-beta)
04. 맺음말
지금까지 문자열 수정을 통한 Anti-UPX Unpacking 기법에 대해 알아보았다. UPX magic에서 하나 또는 전체 문자열 변경을 통해 정상 배포 중인 UPX을 통한 언패킹이 불가능하게 만드는 방식으로 악성코드 분석에 혼돈을 주고 있다. UPX 구조에 대해 어느 정도 알고 있다면 UPX 헤더 정보를 확인하여 UPX magic을 원상 복구하여 언패킹이 가능하며 JPCERT/CC에서 배포하는 도구 및 이외의 방식을 통해 도움을 받아 언패킹을 할 수 있다.
[표 5]는 UPX magic을 수정한 파일을 탐지하는 YARA Rule로 사용 시 Anti-UPX Unpacking 기법이 사용된 파일을 탐지하는데 사용 가능하다. 하지만, 일반적인 UPX 패킹이 되어있는 파일은 탐지하지 못한다. 정상적으로 UPX 패킹된 파일은 정상·비정상 파일 가리지 않고 사용하고 있기 때문에 이를 역이용하면 Anti-UPX Unpacking 기법이 적용된 파일을 선제적으로 탐지하여 대응하는 데 사용될 수 있을 것으로 기대해 본다.
05. 참고자료
1) The Basics of Packed Malware: Manually Unpacking UPX Executables : https://malware.news/t/the-basics-of-packed-malware-manually-unpacking-upx-executables/35961
2) A Simple UPX Malware Technique : https://www.mosse-security.com/2020/09/29/upx-malware-evasion-technique.html
3) Anti-UPX Unpacking Technique : https://blogs.jpcert.or.jp/en/2022/03/anti_upx_unpack.html