국내를 포함한 전세계 대상으로 유포되는 Underground 랜섬웨어

국내를 포함한 전세계 대상으로 유포되는 Underground 랜섬웨어

Underground 랜섬웨어 갱단은 대한민국을 포함하여 전세계 다양한 국가와 산업의 기업들을 대상으로 지속적인 랜섬웨어 공격을 가하고 있다. 본 포스팅에서는 Underground 랜섬웨어에 대한 분석 내용과 특징을 서술한다.

 

1 개요

1.1 Team Underground

Underground 팀이라고 불리는 집단의 랜섬웨어 악성코드는 2023년 7월 초에 처음 확인되었다. 이후 활동이 알려지지 않았다가, 2024년 5월 새로운 DLS(Dedicated Leak Sites)가 알려지면서 활동을 계속 이어온 것으로 확인되었다. 다른 랜섬웨어 갱단과 같이 감염된 시스템의 파일을 암호화하고 피해 기업의 민감 데이터를 탈취하며, 몸값이 지불되지 않는 경우 이를 공개한다.


[그림 1] Underground Team 로고

 

Underground 랜섬웨어 갱단은의 피해 기업 명단에는 아랍에미리트, 미국, 프랑스, 스페인, 호주, 독일, 슬로바키아, 대만, 싱가포르, 캐나다, 한국 등 다국적 기업들이 포함되어 있다. 산업별로는 건설, 인테리어, 제조, IT 등 다양한 분야의 기업들이 피해를 입었다. 연간 매출 규모도 2천만 달러에서 6억5천만 달러에 이르기까지 규모를 가리지 않는 것으로 보이며, Underground 랜섬웨어 갱단은 국가와 산업, 기업 규모에 상관없이 광범위한 기업들을 표적으로 삼고 있으며, 이들의 랜섬웨어 공격은 전세계적으로 확산되는 추세로 보인다.

 

1.2 Underground 랜섬웨어 악성코드

Underground 랜섬웨어 악성코드는 난수 생성(RNG) 알고리즘과 AES 대칭키 암호화, RSA 비대칭키 암호화 기법을 조합하여 파일을 암호화한다. 암호화된 각 파일은 서로 다른 AES 키를 사용하며, 해당 키 관련 정보는 파일의 끝부분에 추가로 삽입된다. 특징적으로, 파일 암호화 작업 이후 별도로 네트워크 통신 행위가 발생하지 않는다. 즉, 공격자는 로컬 환경에서 남은 흔적만으로는 복호화를 진행할 수 없도록 랜섬웨어 악성코드를 설계하였다. AES 관련 정보를 암호화할때 사용되는 RSA 공개키는 악성코드 내부에 사전에 하드코딩되어 있으며, 공격자가 암호화된 파일을 복호화할 경우 대응되는 RSA 개인키를 이용해 AES 키를 복호화할 수 있다. 즉, 공격자는 별도의 C2 통신 없이도 파일만 확보하면 복호화 과정을 진행할 수 있는 구조를 갖는다. File Size에 따라 저용량, 일반, 대용량 파일로 구분되며, 저용량 파일의 경우 파일 전체를 암호화하지만 크기가 큰 파일일수록 파일의 맨 위, 아래와 중간 부분은 일정 크기만큼 Gap을 두며 암호화하는 Stripe 방식을 사용한다.

랜섬노트에서는 단순히 데이터 암호화뿐 아니라 보안 취약점 진단, 보안 강화 조언, 데이터 복구 지원 등 추가 서비스를 제공한다고 홍보하며, Tor 사이트 URL과 로그인 정보를 제공하고, 이 사이트에서 협상이 가능하도록 하였다. 또한, 랜섬노트에는 공격 대상 시스템의 IP와 탈취된 정보에 관한 문구가 악성코드 내부에 사전에 삽입되어 있는 것이 확인되었다. 이는 곧, 랜섬웨어 실행 이전에 이미 시스템 침해가 이루어졌음을 의미한다. 공격자는 사전 정찰을 통해 특정 PC를 공격 대상으로 선정하고, 맞춤형으로 변형된 랜섬웨어를 유포한다. 즉, 이 랜섬웨어 악성코드는 무차별적인 대규모 유포보다는 사전 침투, 정보 수집, 대상 지정, 맞춤형 랜섬웨어 배포라는 고도화된 공격 절차를 따른 것으로 판단된다.

2 분석 내용

2.1 초기 루틴

초기에 인자(Parameter) 값의 개수를 확인하는 로직이 존재한다. 인자 값이 2개를 초과하게 되면 아무런 행위를 수행하지 않고 바로 종료되도록 구현되어 있다.


[그림 2] 초기 인자 값 개수 확인 과정

 

이후 공격자가 미리 삽입한 문자열(“8DC1F7B9D2F4EA58”)을 Mutex로 선언한다. 초기 루틴 이후 안티디버깅(Anti-Debugging), 안티샌드박스(Anti-Sandbox) 등의 기법은 존재하지 않으며 바로 랜섬웨어 악성코드의 특징적인 행위들이 시작된다. 공격자는 랜섬웨어 악성코드에 의해 암호화된 파일을 복구하는 것을 방해하기 위해, 제일 먼저 vssadmin 명령을 이용해 모든 shadowcopy 데이터를 삭제한다. 이후 레지스트리 편집을 이용해 원격 데스크톱 연결을 제한하며 DB 파일 암호화 시 방해가 될 수 있는 관련 서비스를 중지한다.

악성 행위

명령

볼륨 섀도우 삭제 vssadmin delete shadows /all /quiet

원격 데스크톱

연결 제한

reg add HKLM\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services\ /v MaxDisconnectionTime /t REG_DWORD /d 1209600000 /f

DB 암호화 위해

방해 요소 제거

net stop MSSQLSERVER /f /m
net stop SQLSERVERAGENT /f /m
net stop MSSQLFDLauncher /f /m

[표 1] 시스템 조작을 위해 사용되는 명령

 

2.2 암호화 준비

주요 파일을 잘못 암호화하여 시스템이 파괴되는 것을 방지하기 위해 암호화에서 제외되는 폴더가 아래와 같이 명시되어 있다. 다양한 Windows 시스템에 호환되도록 환경변수를 문자열로 갖고 있으며 실행 시점에 GetEnvironmentVariableW() API를 통해 문자열로 생성한다.

환경변수

실제 경로

%SystemRoot% C:\Windows\
%ProgramFiles% C:\Program Files\
%ProgramFiles(x86)% C:\Program Files(x86)\

[표 2] 암호화 제외 대상 폴더
 

위와 마찬가지의 이유로 암호화를 하지 않는 파일 확장자도 존재한다.

암호화 제외 파일 확장자

sys, exe, dll, bat, bin, cmd, com, cpl, gad, et, inf, ins, inx, isu, job, jse, lnk, msc, msi, mst, paf, pif, ps1, reg, rgs, scr, sct, shb, shs, u3p, vb, vbe, vbs, vbscrip, ws, wsh, wsf, ini, cfg

[표 3] 암호화 제외 파일 확장자

 

암호화 대상 파일 선정 시, GetSystemTime()으로 얻은 현재 시간에서 6개월을 되돌린 임계값을 사용해 최근 6개월 내 접근·수정·생성된 파일만 암호화 대상으로 선별함으로써 시스템 부하를 줄이고 사용자 활용도가 높은 핵심 파일에 암호화 리소스를 집중해 효율을 높인다.


[그림 3] 6개월 전 SystemTime을 암호화 관련 함수에 전달

2.3 파일 암호화

개요에서 언급한 내용과 같이, 암호화된 파일에 AES 대칭키가 RSA 공개키로 암호화되어 삽입되어 있다. 따라서, 로컬 환경에서는 해당 파일을 복호화 할 수 있을 만한 단서가 남아있지 않다. 최종적으로 암호화된 파일은 아래와 같은 구조로 변화한다.


[그림 4] 원본파일과 암호화된 파일의 구조 변화

 

Underground 랜섬웨어 악성코드는 암호화 준비 단계에서부터 실제 암호화 연산 전과정(난수 생성, 알고리즘 핸들 오픈, 모드 설정, 대칭키 생성, 패딩, 암호화 등)에서 사용하는 모든 암호 관련 호출을 BCrypt 계열의 API로 일원화하고 있으며 이는 모두 bcrypt.dll에 포함된다. 이후부터 암호화 관련 분석 내용을 상세히 서술한다.

암호화 과정의 첫 단계에서는, RNG 알고리즘으로 BCryptEncrypt() 함수를 이용해 0x30 크기의 난수 생성한다. 이 난수는 이후 AES 암호화 작업에 사용된다. 생성된 난수의 첫 0x20 크기의 데이터는 AES 대칭키를 생성하는데 사용되며, 나머지 0x10 크기의 데이터는 AES 암호화 시 초기화 벡터 IV로 사용된다.


[그림 5] RNG 알고리즘으로 생성된 난수 0x30 바이트

 

암호화 대상 파일은 앞서 언급한 메모리 할당방식을 통해 할당된 메모리 공간에 ReadFile() 함수를 거쳐 메모리상에 로드된다. 이후 BCryptGenerateSymmetricKey() 함수로 AES 대칭키를 생성하고, BCryptEncrypt() 함수로 파일의 내용이 암호화된다. 아래 [그림 13]을 통해 AES 대칭키 생성 당시 Secret 값으로 난수 값이 활용되는 것을 확인할 수 있다.


[그림 6] AES 암호화를 위한 대칭키 생성 시 난수 값 활용

 

공격자는 암호화된 파일을 복호화 하기 위해 pbSecret 값과 암호화 당시 활용한 IV 값을 RSA 공개키로 암호화하여 파일의 끝에 삽입한다. 이 때, RSA 암호화 작업은 CBC 모드로 동작한다. 이후 암호화된 pbSecret 및 IV 데이터는 0x200 크기를 가진다.


[그림 7] AES 암호화에 활용된 난수값을 RSA 공개키로 암호화

 

이후 암호화 루틴은 원본 파일 암호화 직후 원본 파일 크기 등 암호화 시 활용한 메타데이터를 파일의 끝(Tail)에 추가하도록 설계되어 있다. 암호화 대상 파일의 원본 파일 크기를 구하기 위해 GetFileSizeEx() 함수를 활용하며, 해당 File Size를 기반으로 metadata를 생성하여 암호화 블록의 크기와 범위를 다르게 처리하기 위한 분기문에서 사용한다. 크기가 대용량 파일을 암호화할 경우 시스템 부하를 줄이면서도 사용자에게 타격이 큰 구간을 선별적으로 암호화하기 위해 랜섬웨어 악성코드에서 주로 사용하는 방식이다. 암호화 대상 파일은 File Size에 따라 저용량 파일, 일반 파일, 대용량 파일로 구분되며 각각의 경우 파일을 암호화하는 위치나 주기가 상이하다.

저용량 파일의 경우 전체 영역이 암호화하지만 일반 파일과 대용량 파일은 맨 앞(Head)와 맨 뒤(Tail) 영역만을 우선적으로 암호화하고, 중간 부분은 일정한 간격(Gap)을 두고 반복적으로 암호화하는 Stripe 방식이 적용된다. 이 과정에서 각 파일의 크기별 유형에서 사용되는 Flag 세트(Stripe, Head, Tail, Gap)는 아래와 같이 각각 서로 다른 고정 값을 가지며, 이 값들은 암호화 동작의 기준을 결정한다. 해당 고정 값은 0x01을 기준으로 비프 시프트(shl) 연산할 때 활용되는 값으로, 결과적으로 얻어진 값은 2의 거듭제곱 형태로 계산되어 실제 메모리 단위 크기를 의미하게 된다.

따라서 플래그의 종류와 설정 값에 따라 암호화 단위 및 암호화 간격이 달라지며, 이는 랜섬웨어가 성능과 속도를 조절하는 핵심적인 방법으로 작용한다. 아래는 각 파일의 유형 별 Stripe, Head, Tail, Gap 값의 고정값을 정리한 표이다.

File Size 기반 Flag 세트를 포함하여 metadata 정보를 아래와 [표 4]에서 총 정리하였다. meatadata는 총 0x18 바이트 크기를 가지며 [그림 8]과 같은 구조로 되어있다.

 

 

Offset Size Comment
0x00 0x08 원본 파일 크기
0x08 0x04

Flag 세트

Offset Comment
0x01 Stripe : 파일의 중간 부분 암호화 크기
0x02 Head : 파일의 최상단 암호화 크기
0x03 Tail : 파일의 최하단 암호화 크기
0x04 Gap : Sripe가 반복되는 범위

 

0x0C 0x04 File Size별로 분기하기 위한 트리거
0x10 0x04 Version 값으로 추정
0x14 0x04 Magic 값으로 추정

[표 4] metadata 정보


[그림 8] 최종 metadata 형태

 

2.4 실행 흔적 제거

모든 랜섬웨어 행위를 마치면 최종적으로 _eraser.bat 파일을 생성하여 실행한다. 해당 .bat 스크립트는 Windows 기본 유틸인 wevtutil.exe를 활용하여 모든 이벤트 로그를 삭제하는 기능을 가지고 있다.


[그림 9] _eraser.bat 생성 로직

 

사용자는 랜섬웨어에 대비해 중요 데이터를 서비스망과 분리된 오프사이트에 백업하고, 백업 저장소에 대한 접근 통제 및 정기적인 복구 훈련을 수행해야 한다. 단순한 백업을 넘어, 백업 시스템 자체의 보안성과 복구 가능성을 확보하는 전략적 대응이 필수적이다.

 

3 안랩 대응 현황

안랩 제품군의 진단명과 엔진 날짜 정보는 다음과 같다.

 

3.1 V3 진단

Ransomware/Win.GROUNDE.C5771977 (2025.06.18.02)

Ransomware/Win.x64.C5768642 (2025.06.08.02)

Ransom/MDP.Behavior.M2813 (2020.03.24.03)

Ransom/MDP.Decoy.M1171 (2016.07.15.02)

Ransom/MDP.Event.M1946 (2018.06.06.00)

 

3.2 EDR 진단

SystemManipulation/EDR.Event.M2486 (2022.07.09.00)

Ransom/MDP.Event.M1946 (2018.09.07.03)

Ransom/EDR.Decoy.M2470 (2022.09.30.00)            

 

MD5

76a3ee4f0447ad47767d2b6f808b7fc6
bbbf99de707dd28c938668d34c2e1b26