최신 닷넷 패커의 종류 및 국내 유포 동향

[TOC]

0. 개요

본 내용은 TI 보고서 ‘최신 닷넷 패커의 동향 및 분류 보고서‘를 축약한 내용으로 자세한 내용은 가장 하단의 링크를 통해 확인할 수 있다.

최근 닷넷으로 만들어진 패커가 국내와 국외 많은 곳에서 확인되고 있다. 따라서 ASEC 분석팀에서는 국내에 주로 유포되는 다섯 종류의 닷넷(.NET) 패커에 대해 소개하고 국내 유포 동향을 설명할 것이다. 따라서 닷넷 패커로 유포되는 악성 코드의 종류에 대해 간략히 소개하고, 이 문서만의 패커의 흐름도를 실제 패커를 예시로 설명한다. 이후 각 패커의 특징을 파악 후 국내 동향을 살펴보는 것으로 마무리한다.



1. 국내외 닷넷 패커의 비중

2022 10월, 국내와 해외 통계 자료 중 닷넷으로 유포되는 악성코드는 다음과 같다.

[그림 1] 국내(ASEC)와 ANY.RUN(해외)의 2022년 악성코드 통계 비교

여기에는 AgentTesla SnakeKeyLogger와 같이 애초부터 닷넷으로 컴파일된 악성코드가 있으며, Formbook(Xloader)이나 Lokibot과 같이 닷넷이 아닌 다른 언어로 컴파일된 형태도 존재한다. 서로 다른 환경에서 만들어졌지만 이 둘의 공통점은 닷넷 패커로 유포되고 있다는 것이다. 현재 이러한 형태가 유포량의 상당수를 차지하고 있다. 참고로 이 유형은 닷넷 패커만으로도 유포되고 있지만, 그 앞 단에 한 단계(Stage)를 추가하여 엑셀, VBS Powershell, Bat2Exe 등과 같은 과정을 거치고 닷넷을 실행하는 형태로도 많이 유포되고 있다. 따라서 이와 같은 내용은 기존 ASEC 블로그를 통해 소개되었다.



2. 닷넷 패커의 기본 구조 및 흐름

2.1. 기본 구조

닷넷 패커의 경우 다음과 같이 내부에 바이너리가 있는 형태, Resource Protection이 적용된 형태를 띠고 있는 것이 특징이다.

[그림 2] 닷넷 패커의 기본 구조

현재 닷넷 패커는 실행 파일 내부에 다수 데이터가 존재한다. 이 데이터에는 Data Loader 바이너리가 있으며, 이 바이너리 내부에는 또 다른 Data Loader가 포함된 형태이다. 여기서 Data Loader DLL 또는 EXE 형태의 실행 파일이다. Loader는 주로 다른 실행 파일을 디코딩 및 메모리에 적재하는 역할을 수행하며 분석 방해 기법 등이 포함되기도 한다. 하지만 Data의 경우는 실행 코드가 없고 보통 비트맵(Bitmap) 이미지나 헥스값, 문자열 등으로 이뤄진 리소스 데이터만 존재한다. 따라서 두 바이너리 모두 메모리에 적재되지만, 코드 흐름이 분기되는 모듈은 Loader 일뿐이므로, Data DLL은 오직 인코딩된 데이터만 있는 저장소라 보면 된다.

따라서 앞으로 패커는 아래의 규칙으로 [그림 2]와 같이 표현할 것이다.

실행 코드가 없는 DLL : 빨간색(Data)
실행 코드가 있는 DLL : 초록색(Loader)
최종 악성코드 : 빨간색에 노란 테두리(PayLoad)

참고로 실행 파일로 만들어 지지 않는 단순한 리소스 데이터는 도식화에 포함하지 않는다. 예를 들면 인코딩된 문자열이나 상수 등이 실행 파일의 리소스에 존재해 사용되더라도 위 그림과 같이 흐름도에는 표현하지 않는다.


2.2. 흐름

패커에는 해당 패커만이 가지고 있는 고유한 특징이나 고정으로 사용되는 메서드와 변수명 그리고 방해 기법 등도 존재한다. 그 중 가장 빠르게 확인할 수 있고 이해하는 데 도움이 되는 중요 특징 두 가지를 먼저 소개하고자 한다.

1) 내부 인코딩된 바이너리 정보(파일 이름 정보)

2) 동작 흐름 및 인코딩된 데이터의 위치

이 특징은 패커의 흐름도에서 아래와 같다.

[그림 3] 흐름 중 집중할 포인트(1번과 2번)

우선 첫 번째로내부 인코딩된 바이너리 정보이다. 특정 닷넷 패커는 유포된 시기에 따라 동일한 특징이 존재한다. 그 중 가장 대표적인 특징은 메모리에 로드될 DLL(Loader Data)의 파일 이름 정보이다. 대부분의 닷넷 패커의 경우 외형은 날마다 바꿔 유포하고 있지만, 내부 바이너리인 Loader의 경우 일정 시기 동안 동일한 정보를 그대로 사용하기 때문에 구분이 가능하다.

두 번째는동작 흐름 및 인코딩된 데이터의 위치로 패커가 기본적으로 바꾸기 쉽지 않은 부분이다. 악성코드는 패킹 시 보통 패킹을 해주는 빌더가 있어 정해진 틀에 따라 제작되는 것이 일반적이며, 변경이 필요한 부분은 옵션으로 제공한다. 하지만 보통 지원되는 옵션은 인젝션 타겟 프로세스나 악성 파일을 생성할 폴더, 메시지 박스 여부 등이며 디코딩 데이터의 위치나 코드 흐름을 변경하는 기능은 거의 없다. 따라서 이 부분이 큰 특징이 될 수 있고 일부 변형되더라도 유사한 유형에 대해 군집이 가능하다.

최근 국내에서 확인된 닷넷 패커 중 유포량이 높은 종류는 총 다섯 가지로 아래와 같다.

TypePacker
1MajorCrypter
2DarkTortilla
3VariantCrypter(a.k.a GameLoader) 
4PureCrypter
5LogicNP’s Crypto Obfuscator
[표 1] 최근에 유포 중인 대표 닷넷 패커

우선 패커의 특징을 소개하기 앞서 흐름도와 실제 패커를 바탕으로 위 중요 특징 두 가지를 간단히 살펴보자.

아래는 Type 1의 흐름이다.

[그림 4] Type 1 기본 흐름

위 [그림 4]의 흐름은 아래와 같다.

1) 패커는 1 Loader를 디코딩 후 메모리에 적재한 다음 Loader 1로 코드가 분기한다.

2) Loader 1은 패커 내부의 Loader 2를 디코딩한 후 메모리에 적재한 다음 Loader 2로 코드를 분기한다.

3) 2번 Loader는 자신 내부의 Data를 디코딩하고 적재한다.

4) 2번 Loader는 적재된 Data DLL 내부의 데이터인 Payload를 디코딩한다.

5) 2번 Loader는 타겟 프로세스를 실행한 뒤 디코딩된 Payload를 인젝션한다.

[표 2] Type 1의 흐름 단계

여기서 첫 번째 포인트는 내부의 바이너리인 Loader의 이름이다. 패커 Type 1 [그림 4]와 같이 내부 바이너리인번과, 2개의 Loader를 가지고 있다. Loader에 대한 파일 정보는 닷넷 디버깅 도구인 ‘Dnspy’를 이용하거나 메모리의 바이너리를 덤프하면 확인할 수 있다. 확인된 정보는 아래와 같다.

[그림 5] Type 1의 Loader 이름
(좌 – 1번 Loader(Bunifu.UI.dll), 우 – 2번 Loader(MajorRevision.exe))

이 내부 정보는 공격자가 유포한 시기에 따라 이름을 바꾸는 것으로 보인다. 아래는 2021년부터 현재까지 확보된 정보이다.

LoaderFile Information
1(First)Bunifu.UI.dll
Resource_Meter.dll
QuestKingdom.dll
Cassa.dll
2(Second)MajorRevision.exe
[표 3] Type 1의 Loader 파일 정보

[표 3]의 1 Loader의 경우 4가지로 수집되었다. 시간 순으로 위(Bunifu_UI.DLL)에서 아래(Cassa.dll)로 유포되었기 때문에 최근에는 ‘Cassa.dll’이 유포되고 있다. 다음 2 Loader는 과거부터 지금까지 원본 파일 이름을 MajorRevision.exe’로 동일하게 사용하고 있다. 따라서 패커 분류 시 일차적으로 파일 이름을 이용하면 빠르게 분류할 수 있다.

두 번째로는 패커의동작 흐름 및 인코딩된 데이터의 위치이다. 일부 패커는 흐름을 조금씩 바꿔가며 유포하고 있지만 큰 틀에서 벗어나지 않는다. Type 1은 최근에 Data를 하나 더 추가하여 단계를 늘린 것으로 확인되었다. 변경된 흐름은 다음과 같다.

[그림 6] 최근 Type 1패커의 흐름(Data가 추가된 형태, 검은색 테두리)

[그림 6]의 하단 흐름과 같이 최근에는 1 Data가 하나 더 추가되었다. 이는 한 단계가 추가된 형태로 Data 1을 디코딩 후 메모리에 적재하고 Data 1 내부 리소스를 참조해야 2 Loader로 분기할 수 있다. 따라서 현재는 Loader Data 각각 2개의 실행 파일이 확인되고 있다.

참고로 바이너리를 난독화하는데 사용된 난독화 도구(.NET Reactor ConfuserEx )의 특징으로는 패커를 구별할 수 없다. 이는 닷넷 패커의 내부 바이너리마다 각기 다른 난독화 도구가 사용되기도 하여 일관성이 없기 때문이다.

다음으로 패커의 종류와 특징을 알아보자.



3. 패커의 종류 및 특징

3.1. 종류

최근 국내에 주로 유포 중인 닷넷 패커는 5가지로 아래와 같다.

PackerType 1
(MajorCrypter)
Type 2
(DarkTortilla)
Type 3
(VariantCrypter) a.k.a GameLoader
Type 4
(PureCrypter)
Type 5
(LogicNP’s Crypto Obfuscator)
Domestic distribution
period
(Estimate)
Early 2021 ~2020 ~2021 ~Early 2021 ~Mid 2022 ~
Initial
vector
LoaderDownloader,
Loader
LoaderDownloader,
Loader
Loader
Stage43 or 4323
Loader 1
Information
Data Location : Inside Code
(Encoded Base64)

File Name :
Bunifu.UI.dll,
Resource_Meter.dll,
QuestKingdom.dll,
Cassa.dll

Data Location : Inside Code
(Encoded Binary)

File Name:[Random_string].dll

Data Location : Resource
(Encoded Binary or Bitmap)

File Name:(Explained in features)

Data Location : Inside Code
(Encoded ASCII or Encoded Array or Download data)

File Name :[Random_string].dll

Data Location : Resource
(Encoded Binary)

File Name:[Random_string].dll

Loader 2
Information
Data Location : Resource
(Bitmap)

File Name :
MajorRevision.exe

Data Location : Resource
(Encoded Binary)

File Name:[Random_string].dll

Data Location : Resource
(Encoded Base64)

Feature : Only decoding


File Name:(Explained in features)

Data Location : Resource
(Encoded ASCII)

Feature : Only deserializing


File Name : protobuf-net.dll,
Newtonsoft.Json.dll

X
Loader 3
Information
X

Feature : Shellcode(WIN API)

Data Location : Resource
(Bitmap)

File Name :(Explained in features)

XX
Sleep methodInside the codeInside the codePowershell,
Inside the code
Powershell,
Inside the code
Inside the code
Callback
Function
ResourceResolveAssemblyResolveResourceResolveResourceResolveResourceResolve
AssemblyResolve
[표 4] 패커 간략 소개

최근 닷넷 패커는 모두 Sleep()과 같은 시간 지연을 가지고 있으며 콜백(Callback) 기능을 사용한다. 여기서 사용되는 콜백 기능은 악성코드 분석을 방해하려는 목적과 코드 흐름을 유연하게 하기 위해 사용한 것으로 보인다.


3.2. 특징

다음은 각 패커의 세 가지 특징을 소개한다.

3.2.1. Type 1(MajorCrypter)

1) 흐름
[그림 7] 최근에 형태가 바뀐 Type 1(MajorCrypter)

Type 1 패커는 Cyble이라는 해외 인텔리전스 사에서 Xloader(Formbook)를 소개할 때 짧게 소개되었으나 아직 이름이 정해진 바 없다.

이 보고서에서는 Loader 2(EXE)의 이름인MajorRevision.exe’을 본떠 앞으로 MajorCrypter라 명명한다. MajorCrypter 해외에서 2020년이나 2021년 초부터 유포된 것으로 추정되며 현재까지 유포되고 있다. 기존에는 3단계 형태였으나 최근에 4단계로 형태를 바꾸었다.

2) DLL 파일 정보
LoaderFile Information
1(First)Bunifu.UI.dll
Resource_Meter.dll
QuestKingdom.dll
Cassa.dll
2(Second)MajorRevision.exe
[표 5] Type 1의 Loader 파일 정보

현재까지 ASEC 분석팀에 수집된 MajorCrypter의 Loader 파일 정보는 [표 5]와 같다.


3) 디코딩 메서드의 매개 변수명

MajorCrypter는 Loader 1의 디코딩 메서드의 매개 변수 이름이 항상 동일하다. MajorCrypter의 경우 Loader 1에서 Loader 2로 코드가 분기되기 직전에 아래의 세 가지 인자를 사용한다. Loader 2를 디코딩할 때 사용되는 인자는 다음과 같다.

[그림 8] 디코딩 및 적재를 수행하는 Loader 1의 메서드(디코딩 대상은 Loader 2)

[그림 8]과 같이 디코딩 메서드(AddContext)의 첫 번째 매개 변수(resource_name)는 Bitmap 리소스의 이름으로, 인코딩된 Loader 2의 위치를 가리킨다. 이는 아래 [그림 9]의 빨간줄 문자열 “WFiLAKn”과 같다.

[그림 9] 리소스 내부에 Bitmap으로 인코딩된 Loader 2 바이너리

두 번째 매개 변수는 XOR 키로 인코딩된 Loader 2를 디코딩할 때 사용된다. 마지막으로 세 번째 매개 변수는 Bitmap 리소스를 찾는 데 필요한 루트 리소스 이름이다. 이는 [그림 9]에서 “JumboSports”이다.

이 세 가지 매개 변수(‘resource_name’, ‘(특문)_param’, ‘project_name’)는 과거부터 현재까지 동일한 이름으로 Loader 2를 불러올 시에 사용되고 있다. 디코딩은 Bitmap.GetPixel()과 같은 메서드를 사용해 RGB 색상을 1차원 배열로 만들며, XOR과 압축 해제(Decompress) 등을 통해 Loader 2를 디코딩한다. 그리고 Loader 2의 내부 바이너리인 Data 2의 내부에는 최종적으로 실행될 악성 코드(Payload)가 포함되어 있다.(그림 7 참조)


3.2.2. Type 2(DarkTortilla)

1) 흐름

Type 2는 2022년 8월, 미국 사이버 보안회사 SecureWorks에서 ‘DarkTortilla’라는 이름으로 처음 불렸다.

DarkTortilla는 국내에서 2020년부터 유포된 것으로 추정되며 현재까지 간간이 확인되고 있다. 해당 패커는 보통 4단계로 이뤄졌지만, 아래의 [그림 10]과 같이 형태가 다른 변종이 더 있을 것으로 보인다.

[그림 10] Type 2(DarkTortilla) 패커의 흐름(아래 B 타입의 경우 Data 추가)
2) Loader 1의 리소스 특징

DarkTortilla의 DLL 파일 정보는 랜덤 파일명으로 정해져 있지 않다. 다만 아래와 같이 여러 개의 Bitmap 이미지를 리소스로 가지고 있다. 해당 Bitmap은 모두 인코딩된 Payload로 최종 실행될 악성코드이다.

[그림 11] Type 2(DarkTortilla)의 리소스 구조
3) 인젝션 메서드의 매개 변수(loader 2의 메인 메서드)

DarkTortilla Loader 1 클래스에서 Loader 2 클래스로(Loader1.Class11_Install -> Loader 2.Class1_RunCommand) 코드가 분기될 때 아래와 같은 인자를 전달한다.

[그림 12] Loader 2의 메서드로 전달된 인자값 4개

인자의 첫 번째는 인젝션될 대상 파일의 경로(path)이며, 두 번째는 인젝션될 프로세스의 커맨드라인 명령어 인자(cmd), 세 번째로는 인젝션에 사용될 Payload(data)의 바이너리, 네 번째는 패커의 특정 옵션이다. 따라서 DarkTortilla 최소 4개의 매개 변수(path, cmd, data, compatible)를 항상 사용하고 있다.

또한 loader 2의 경우 대부분 Anti Tamper 기능이 활성화되어 있다. Anti Tamper는 바이너리 위,변조 방지 기능으로 디컴파일 시 정적으로는 코드를 볼 수 없도록 하였다. 이는 런타임 시 가장 먼저 실행되는 생성자(.cctor)를 통해 복구가 이뤄진다.

[그림 13] Loader 2의 코드 복구 전(좌) 그리고 복구 후(우)

복구가 완료되면 호출된 loader 2.Class1_Runcommand Runn() 메서드는 최소 4개의 인자를 받아 인젝션을 수행한다. 이는 유포 시기에 따라 인자값 5개를 받는 형태도 존재한다. 이 매개 변수들은 Type 5로 소개될 LogicNP사의 Crypto Obfuscator라는 상용 패커에서도 볼 수 있다. 이러한 공통점은 HackForum에서 활동하였던 Aeonhack이라는 유저의 RunPE에서 파생된 것으로 추정된다.

[그림 14] Aeonhack의 RunPE 오픈 소스 코드(좌)와 DarkTortilla 패커(우) 비교

3.2.3. Type 3(VariantCrypter – a.k.a GameLoader)

1) 흐름
[그림 15] Type 3 패커(VariantCrypter)의 흐름

Type 3은 주로 게임 프로그램으로 위장하여 2021 11, 미국 사이버 보안회사인 Gosecure에서 GameLoader라고 소개한 패커이다.

[그림 16] 게임 프로그램으로 위장한 악성코드

해당 패커는 게임 이외에도 다양한 프로그램으로 위장하였으며 유포되는 패커 중 가장 정상에 가깝게 외형을 만들어낸 것이 특징이다. 또한, 국내에 가장 많은 유포와 가장 많은 변형을 시도하고 있기 때문에 이 보고서에서는 Type 3 VariantCrypter라고 명명한다

2) DLL 파일 정보 및 변형

VariantCrypter는 일정 시간이 지나면 Loader의 파일 정보를 바꿔 유포하고 있다.

CategoryLoader 1(Hex Binary or Bitmap)Loader 2(Array)
// Decoder
Loader 3(Bitmap)
Type APrivateBinPath.dll
SafeSerializationManager.dll
XUI.dll
Type BSharpStructures.dll
SpaceChemSolver.dll
EverCraft.dll
abzQueueReader.dll
introspective.dll
FuncAttribute.dll
CustomAttrubute.dll
PoolWait.dll
Fort.dll
XDotNetZipAdditionalPlatforms.dll
Type CFort.dll
Cerbera.dll
MLang.dll
XIVectorView.dll
Type DArgIt.dll
ArgIteratorZAA.dll
CloneHelper.dll
Egra.dll
TokenImpersonation.dll
NativeVariant.dll
OAA.dll
RangePartition.dll
TweenEngineAPI.dll
Tokenizer.dll
Thookinieng.dll
Type EPlates.dll
KeysNormalize.dll
TargetParameterCount.dll
Wise.dll
Precision.dll
Froor.dll
WebName.dll
Inspector.dll
SchedulingClerk.dll
Doncepre.dll
Metal.dll
Collins.dll
[표 6] 2022년 11월까지 확인된 Type 3(VariantCrypter)의 변형

VariantCrypter 2022년 동안 총 5가지 형태로 유포되었다. 이는 Type A 부터 Type E까지 Loader의 이름 및 기능에 따라 유형을 나눌 수 있다. 이 이름은 Type A~E 끼리 중복이 없고, 다른 Type DLL을 대부분 혼합하여 사용하지 않기 때문에 바이너리 추출 시 이름만 보고 유형과 몇 번째 Loader인지 유추할 수 있다.

예시를 보면 다음과 같다.

[그림 17] Type 3 패커(VariantCrypter)의 Type C 로더

따라서 위 [그림 17]의 Loader의 경우 Type C 유형임을 알 수 있다. VariantCrypter은 변형에 따라 총 세 가지로 흐름으로 나뉜다.

[그림 18] Type 3의 세 가지 흐름

과거부터 현재까지 Type A에서 E로 바뀌었기 때문에 현재는 대부분 Type E형태로 유포되고 있다. Type E의 특징은 실행할 수 있는 바이너리(Loader) 3개로 기존 Loader 1에 포함되었던 디코딩 기능이 별도로 빠지면서 Loader 2가 만들어졌다. 결국 [그림 18]의 Type E Loader 2는 디코딩 기능만 수행하는 모듈이다.

3) Loader 1의 디코딩 메소드 인자 세가지

우선 VariantCrypterLoader 1을 적재하기 위해 디코딩을 수행한다. 이때 VariantCrypter는 하드 코딩된 특정 길이의 키를 사용하는 것이 특징이다.

[그림 19] Type 3 패커(VariantCrypter)의 Loader 1 디코딩 과정

하드 코딩된 키는 22byte 크기의 문자열로 MOD 연산에 사용된다. 이후 메모리에 적재된 Loader 1 Loader 2 Loader 3를 메모리에 적재하는 기능을 수행한다. 따라서 아래와 같이 Loader 1이 적재될 때, Packer 외형은 Loader 1의 메서드로 특정 인자 값을 전달한다.

[그림 20] Loader 1 적재 시 전달되는 인자값

전달된 인자 값은 Loader 3을 적재할 때 사용하는 값으로 Loader 3을 디코딩하는 데 필요한 XOR 키와 인코딩된 Loader 3의 바이너리 위치이다. 여기서 Loader 2는 단순한 디코더로 해당 인자 값을 이용해 Loader 3를 디코딩한다.

[그림 21] Loader 2의 Decode 메서드(대상 Loader 3 , 키 : “vth”)

3.2.4. Type 4(PureCrypter)

[그림 22] PureCrypter의 공식 홈페이지 및 PureCrypter(v2) 옵션

Type 4는 공식 홈페이지에서 PureCrypter라는 이름으로 2021년부터 판매되고 있는 상용 패커 프로그램이다. 하지만 PureCrypter는 악성 코드 유포에 활발히 사용되고 있어 해외에서도 여러 번 기사화 되었다. 해당 패커는 페이크 메시지 박스를 등록할 수 있으며 초기 벡터(다운로더, VBA 매크로, 로더)와 인젝션 방법 그리고 인젝션 타겟과 Anti 기법 등을 설정할 수 있다.

1) 흐름
[그림 23] PureCrypter의 구조 및 흐름 변화

과거에는 [그림 23]의 최상단의 구조와 같이 실행되는 모듈이 총 네 가지였다. 여기서 Loader 1 Loader 3 Anti Tamper Protection 기능을 수행하였고, Loader 2는 디코딩 및 메모리 적재 기능을 수행했으며 Loader 4 Json 포맷을 처리하였다. 현재는 [그림 23]의 하단 형태와 같이 ‘Loader 1’ 모듈(디코딩 및 메모리 적재 기능) ‘Loader 2’ 모듈(Json 포맷을 처리)만 가지고 유포되고 있으며 특정 Anti Tamper Protection 기능이 사라진 것으로 추정된다. 또한, 맨 하단 그림과 같이 최근에는 Json 포맷을 처리하는 모듈을 따로 두지 않고 Loader 1에 모두 포함한 것으로 확인되고 있다.

[그림 24] Json 처리가 모두 포함된 Loader 1의 형태(namespace : Newtonsoft.Json)

2) DLL 파일 정보
LoaderFile Information
1(First)[Random_string].dll
2(Second)protobuf-net.dll
Newtonsoft.Json.dll
[표 8] PureCrypter DLL 파일 정보

최근에는 [그림 24]와 같이 Loader 2의 기능이 Loader 1에 포함되어 유포되고 있어 Loader 2번이 따로 존재하지 않는다.

3) Json 데이터 사용(Deserialize)

PureCrypter의 대표적인 특징은 Json 포맷 데이터를 사용하는 것이다. Json 데이터는 마지막 인젝션 행위에 대한 옵션값으로 메서드 인자로 사용하기 위해 역직렬화(Deserialize) 과정이 필요하다. 따라서 PureCrypter Protobuf-net Newtonsoft.json와 같은 프레임 워크를 이용해 Json 데이터를 사용하고 있다

[그림 25] Json 데이터 변환 과정(Deserialize)

과거에는 Protobuf-net를 사용하였으나 최근에는 Newtonsoft.json 프레임 워크를 사용하는 것으로 보인다. 따라서 해당 모듈의 인코딩된 위치는 다음과 같다.

[그림 26] 흐름 및 Json 처리 모듈의 변화(위, 과거 vs 아래, 최근)

또한 가장 최근에 접수된 샘플은 Newtonsoft.json 기능을 별도의 모듈로 사용하지 않고 Loader 1에 합쳐진 형태로 유포하고 있다. 따라서 현재는 위 [그림 26]과 같이 Json 처리 모듈이 리소스에 존재하지 않고 코드 내부에 존재한다. 이는 아래와 같다.

[그림 27] 가장 최근에 확인된 PureCrypter

3.2.5. Type 5(LogicNP’s Crypto Obfuscator)

1) 흐름
[그림 28] Type 5(LogicNP’s Crypto Obfuscator) 흐름

Type 5 Type 4(PureCrypter)와 마찬가지로 상용 패커로 LogicNP 사의 상용 프로그램이다. 해당 패커가 제작된 지는 오래된 것으로 보이며 국내에는 올해 초~중순부터 간간이 유포되고 있다. 해당 패커의 가장 큰 특징은 기본적으로 인코딩된 정보에 따라 리소스 이름에 규칙이 존재하여 리소스 이름을 보고 어느 정도 유추가 가능하다.

[그림 29] Type 5(LogicNP’s Crypto Obfuscator) 공식 홈페이지
[그림 30] Type 5(LogicNP’s Crypto Obfuscator)의 빌더 옵션

LogicNP 패커는 기본적으로 문자열, 변수, 제어 흐름 난독화나 안티 디버깅 등 옵션을 제공한다.

2) 리소스 이름 규칙

LogicNP’s Crypto Obfuscator의 DLL 파일 정보는 랜덤 파일명으로 정해져있지 않다. 다만 패커가 실행에 필요한 데이터를 리소스로 가지고 있다. 해당 패커는 기본적으로 기능에 따라 [7]와 같이 리소스 데이터 이름을 짓는다.

Resource nameFeature
&& or &PE File (Data.dll)
$Encoded String
(
Argument, External APIs Name, ..etc)
%PE File (Loader.dll)
[ 9] 리소스 이름에 따른 규칙

해당 리소스 데이터와 실제 실행 파일을 구조에 표현하면 다음과 같이 정리된다.

[그림 31] Type 5(LogicNP’s Crypto Obfuscator)의 구조 및 리소스 데이터

실제 악성 파일(Payload)의 경우 패커 내부에 Bae64로 인코딩되어 있으며, Replace 등 여러 번의 디코딩을 거친 뒤 배열 형태로 만들어진다. 이후 Packer는 Loader 1에 Payload를 전달하며, Loader 1을 통해 인젝션을 수행한다. 여기서 인젝션 메서드에 특징이 존재한다.

3) 인젝터 메인 메서드의 매개 변수(Type 2와 공통점)

Payload에 대한 디코딩이 끝나고 패커가 Loader 1로 분기 시 전달되는 인자는 다음과 같다.

[그림 32] Loader 1 전달되는 인자 4개

해당 인자는 Type 2에서 소개한 내용과 동일한 것으로 인젝션될 타겟 파일의 경로(path)와 인젝션될 프로세스의 커맨드라인 명령어(cmd) 그리고 인젝션에 사용될 Payload(data)가 포함된다. 이는 Type 2 그리고 인터넷에 공개된 Aeonhack 유저의 RunPE 메서드와 거의 유사하다.

[그림 33] 인젝션 메인 함수의 공통된 매개 변수(Type 2, Type 5, Aeonhack’s RunPE)


4. 닷넷 패커 국내 유포 동향

이제까지 Type 1(MajorCrypter), Type 2(DarkTortilla), Type 3(VariantCrypter), Type 4(PureCrypter), Type 5(LogicNP’s Crypto Obfuscator) 5가지 패커를 소개하였다.

해당 패커의 국내 동향은 다음과 같다.

[그림 34] 5가지 패커 동향(22.07~22.11)

[그림 34] 그래프는 2022 7월부터 2022 11월까지 주요 고객사로 접수된 샘플과 메일 허니팟으로 수집한 샘플로 작성한 통계 자료이다. 국내에서는 현재까지는 Type 3(VariantCrypter)가 가장 많은 유포량을 보이고 있으며 다음으로는 해외 보안 업체에서 자주 언급된 Type 4(PureCrypter)가 많은 유포량을 보여주고 있다. 그다음 Type 1(MajorCrypter) Type 4(PureCrypter)와 유사한 그래프를 그리다 최근에 점점 증가하는 추세이며, Type 2(DarkTortilla) Type 5(LogicNP)는 다른 패커에 비해 미미하게 사용되고 있다. 참고로 Type 2는 조금 더 분류 작업이 필요한 패커로 다른 패커에 비해 수량은 적지만 작업이 완료되면 앞으로 수량이 더 증가할 것으로 보인다.

닷넷 패커는 주로 다음과 같은 악성코드에 사용되었다.

[그림 35] 닷넷 패커로 유포된 악성코드 상위 8(국내)

[그림 35]는 소개된 패커를 악용하여 국내에 유포된 악성코드의 분포를 나타낸 자료이다. 유포된 악성코드는 대부분 인포스틸러와 RAT 악성코드로 1. 악성코드 동향에서 살펴본 내용과 크게 차이 나지 않는다. 닷넷 패커로 가장 많이 유포된 악성코드는 정보 유출형 악성코드 AgentTesla이다. 이는 전체의 37%로 압도적인 1위를 차지하였다. 이밖에 Formbook, SnakeKeylogger, Lokibot, Remcos 등 해당 악성코드는 모두 ASEC 블로그에서도 자주 언급되는 샘플 중 하나다.

또한 Type 1(MajorCrypter) 패커는 11월 말 랜섬웨어를 유포하는데 사용되기도 하였다.

[그림 36] Type 1(MajorCrypter)로 유포된 랜섬웨어의 랜섬노트

해당 랜섬웨어는 RaaS형 랜섬웨어로 보이며 ‘*.OBZ’ 확장자로 파일을 암호화하였다.



결론

이 블로그는 닷넷 패커의 일부만을 다룬다. 비교적 유포량이 많은 패커만 분류한 내용으로 분류되지 않은 패커가 있으며, 해외에서 활발하지만, 국내에 유입이 적어 아직 알려지지 않은 패커가 있을 수 있다. 다행히도 Microsoft에서는 Windows 10부터 새로운 차단 Interface AMSI를 제공하고 있다. AMSI는 닷넷 패커 뿐만 아니라 VBS JS와 같은 스크립트나 MS 오피스로 제공되는 워드(Word), 엑셀(Excel) 그리고 파워쉘(Powershell) 스크립트 등 과거부터 유포되었던 난독화된 악성코드를 효율적으로 차단할 수 있는 기능이다. 따라서 Ahnlab V3에서는 해당 인터페이스를 통해 닷넷 패커와 난독화된 악성코드를 사전 차단하고 있어 사용자는 제품을 사용 시 해당 옵션을 키고 사용할 것을 권고 드린다.

[그림 37] V3 제품 AMSI 기능(환경 설정 – PC 검사 설정 – PC 실시간 검사)

안랩에서는 해당 패커를 다음과 같이 진단하고 있다.

Trojan/Win.MSILKrypt.R478738 (2022.03.21.01)
Trojan/Win.MSILKrypt.R479010 (2022.03.22.03)
Trojan/Win.AgentTesla.C4826923 (2021.12.09.02)
Trojan/Win.MalwareX-gen.C4922823 (2022.01.19.01)
Trojan/Win.MSILKrypt.C5020026(2022.03.21.01)
Trojan/Win.MSIL.R503383 (2022.07.08.03)
Trojan/Win.MSIL.R510208 (2022.12.02.00)
Trojan/Win.MSIL.R492640 (2022.05.16.03)
Trojan/Win.MSILKrypt.R478746 (2022.03.21.01)
Trojan/Win.MSIL.R491654 (2022.05.12.00)
Trojan/Win.MSIL.R479032 (2022.07.13.03)
Trojan/Win.MSIL.R536135 (2022.11.26.00)
Trojan/Win.Loader.C5020045 (2022.03.21.01)
Trojan/Win.MSILKrypt.R479033 (2022.03.23.00)
Trojan/Win.Generic.C5197697 (2022.07.07.04)
Trojan/Win.MSILKrypt.R479202 (2022.03.23.03)
Trojan/Win.MSIL.R5288800 (2022.10.31.00)
Trojan/Win.MSIL.C5134406 (2022.05.19.03)
Trojan/Win.MSIL.R5288800 (2022.10.31.00)
Trojan/Win.MSIL.C5134406 (2022.05.19.03)
Trojan/Win.MSIL.R498082 (2022.06.15.03)
Trojan/Win.MSIL.C5198300 (2022.07.08.03)
Trojan/Win.MSIL.R510204 (2022.10.27.01)
Trojan/Win.MSIL.R510208 (2022.12.02.00)
외 다수

[IOC 정보]

MD5

0aafb32868f183efaf80ba7176ec3a16
138ca47d7eb25b2522090f8a3688f1b9
3456bfcebe8c7d4f988ec4eab5d9c25e
461af5cc340963ea11fcd822bfdb3a62
5d39675de3c860d023f92fbc8ad33300
8b10aff2ad146b2d05700932571d7306
963296ff9287f30af86c6ae029627753
9f36c6884ecc5ac7fe027121871596ed
b43f26346d14e50a9c45658c08fbc9dd
c5c7371e2b483d74c95afe992857a887
c5f5f08ed0ff1aa0134c2d101766fa9f
dd5fce942f380f6130e6c798f2bbdb44
e3662856ae63484de56f4f69019bee4e
016da09b26d08c7f213523b281b3a209
2a6fe3324ecded60b8eb3af192750b9d
47926d4e06f1a28fc1f9bab98f08f310
577b4a8ffd3d2ede7f85c53ee88feaa7
5c3dc31e9aa2777603f97a12def0a9de
5c4d20b4a621d7b81f273b94df51e5da
69835df32c3a41f9caf849700c5c511b
74a5200a7ea77a462e3b6bef77d791e1
7fb55d4603a18e4167d6c75eac2803d8
841e9dcec96b65c9a9c2991180b2f3b2
84c2e71de354539e426781a0db952fa9
8a1d7b15b9a0c2e304462c7415b1ea60
8e81fc66692d64bfe5b5375855aa5d78
9f537825c82946571a945b1d0b5c5b73
aba6ea39e2ad2fbff27f5d26ebfa1108
bc512e753ef24ba7c089db020e07c6da
c6ab29668433ac0e7358b07d4d662cb8
cd644c1ebc45ee3d06445a91284f1767
d311c4b0e72f08e881094f31d0831d54
e2d07c1194008eacff161c48fcb8b1c5
외 다수

URL

hxxps://cdn.discordapp[.]com/attachments/1012175409779052625/1012220255885611028/DHL_SHIPMENT_Dgiqqkwt.png
hxxps://cdn.discordapp[.]com/attachments/1011828934763106316/1012203140214427718/hesaphareketi_Guctuslk.png
hxxp://80.66.75[.]88/Hublast_Idiwdgcw.png
hxxp://80.66.75[.]98/Gpthxnldfea.png
hxxp://80.66.75[.]217:8080/Wliukdbs.png
hxxp://80.66.75[.]103/Rsgbmepvbv.jpeg
hxxp://80.66.75[.]123/Idmna_Gtwobgsx.bmp
hxxp://80.66.75[.]230:8060/Kkrzzsc.jpeg
hxxp://80.66.75[.]238:8021/Xgevj.jpeg
hxxp://80.66.75[.]27/arx-Zanmveyvwvi.bmp
hxxp://80.66.75[.]27/arx-2-Ylqvxlmv.jpeg
hxxp://80.66.75[.]28/a-Aembvui.jpeg
hxxp://80.66.75[.]28/aa-Zgqgzeqgvc.png
hxxp://80.66.75[.]25/pl-Thjct_Rfxmtgam.bmp
hxxp://80.66.75[.]25/arx-Slkmrtswx_Vttmygcq.bmp
hxxp://80.66.75[.]25/pl-Puuyc_Ibpaiuhr.bmp
hxxp://81.161.229[.]7/Re_order_144_23-09-2022_Wuyewluh.png
hxxp://103.57.223[.]182:25258/Vgtznlkxzhi.png
hxxp://104.223.106[.]33/loader/uploads/Qmmaa_Ypaocsue.jpg
hxxp://112.136.239[.]71/Tsfifp_Rhpuibqx.png
hxxp://121.4.69[.]26:50294/Ccijxlpv.bmp
hxxp://147.124.209[.]112/DatedAugust_25th_Needed_Dqeoywpe.png
hxxp://107.172.13[.]154/Vlbmzaqrb_Gtsxcxjx.png
hxxp://107.172.13[.]154/Pjdcopfml_Xxbbkmat.png
hxxp://172.245.142[.]35/77.bmp
hxxp://185.216.71[.]120/Rxefnjsexz.jpeg
hxxp://185.216.71[.]120/Pbdocvt.png
외 다수

연관 IOC 및 관련 상세 분석 정보는 안랩의 차세대 위협 인텔리전스 플랫폼 ‘AhnLab TIP’ 구독 서비스를 통해 확인 가능하다.

5 3 votes
별점 주기
guest

0 댓글
Inline Feedbacks
View all comments