더 은밀하고 치명적, 언더그라운드 랜섬웨어의 민낯

언더그라운드(Underground) 랜섬웨어 갱단은 한국을 비롯해 전 세계 여러 국가와 다양한 산업 분야의 기업들을 대상으로 지속적인 공격을 이어가고 있다. 이들은 파일 암호화와 데이터 탈취를 동시에 수행하며, 몸값이 지불되지 않으면 민감한 정보를 공개하는 방식으로 위협 수위를 높이고 있다. 이번 글에서는 언더그라운드 랜섬웨어의 특징과 동작 방식, 그리고 주요 분석 결과를 함께 살펴보자.

 

 

1. ‘팀 언더그라운드’의 정체
‘팀 언더그라운드(Team Underground)’로 알려진 랜섬웨어 조직은 2023년 7월 초 처음 활동이 포착됐다. 이후 잠잠한 듯 보였으나, 2024년 5월 새로운 DLS(Dedicated Leak Sites)가 공개되면서 활동을 이어오고 있는 것이 확인됐다. 이들은 다른 랜섬웨어 조직과 마찬가지로 감염된 시스템의 파일을 암호화하고 기업의 민감 데이터를 탈취한 뒤, 몸값이 지불되지 않으면 이를 공개한다.

 

[그림 1] 팀 언더그라운드 로고

 

언더그라운드 랜섬웨어 갱단의 피해 기업 명단에는 아랍에미리트, 미국, 프랑스, 스페인, 호주, 독일, 슬로바키아, 대만, 싱가포르, 캐나다, 한국 등 다국적 기업들이 포함돼 있다. 산업 분야도 건설, 인테리어, 제조, IT 등으로 폭넓게 분포하며, 피해 기업의 연간 매출 규모는 2천만 달러에서 최대 6억 5천만 달러에 이른다. 이처럼 언더그라운드 랜섬웨어 갱단은 국가와 산업, 기업 규모를 가리지 않고 광범위하게 기업들을 표적으로 삼고 있으며, 공격 또한 전 세계적으로 빠르게 확산되고 있다.

 

2. 언더그라운드 랜섬웨어 개요
언더그라운드 랜섬웨어 악성코드는 난수 생성(RNG) 알고리즘과 AES 대칭키 암호화, RSA 비대칭키 암호화 기법을 조합해 파일을 암호화한다. 각 파일은 서로 다른 AES 키로 암호화되며, 해당 키 정보는 파일의 끝 부분에 추가로 삽입된다. 특히 암호화 이후 별도로 네트워크 통신 행위가 발생하지 않는 점이 특징으로, 로컬 환경에 남은 흔적만으로는 복호화가 불가능하도록 설계돼 있다.

 

  • AES: 암호화 및 복호화에 동일한 키를 사용하는 대칭키 암호화 방식
  • RSA: 데이터를 암호화(공개 키)와 복호화(개인 키)에 서로 다른 키를 사용하는 비대칭키 암호화 방식

AES 관련 정보는 악성코드 내부에 하드코딩된 RSA 공개키로 암호화되며, 공격자는 이에 대응하는 RSA개인 키를 사용해 AES 키를 복호화할 수 있다. 따라서 별도의 C2 서버와의 통신 없이도 암호화 파일만 확보하면 복호화가 가능한 구조다. 또한, 파일 크기에 따라 저용량, 일반, 대용량으로 구분해 암호화 방식을 달리한다. 저용량 파일은 전체를 암호화하지만, 크기가 클수록 상단과 하단, 중간 일부 구간만을 선택적으로 암호화하는 ‘스트라이프(Stripe) 방식’을 적용한다.

 

랜섬노트에는 단순히 데이터 암호화뿐만 아니라 보안 취약점 진단, 보안 강화 조언, 데이터 복구 지원 등 추가 서비스를 제공한다는 홍보 문구가 담겨 있으며, Tor 사이트 접속 주소와 로그인 정보도 포함돼 협상이 가능하도록 했다. 또한, 랜섬노트에 공격 대상 시스템의 IP와 탈취된 정보에 관한 문구가 사전에 삽입돼 있는 것이 확인됐다. 이는 곧 랜섬웨어 실행 이전에 이미 시스템 침해가 이뤄졌음을 보여준다. 공격자는 사전 정찰을 통해 특정 PC를 표적으로 선정하고, 맞춤형으로 변형된 랜섬웨어를 유포한 것이다. 즉, 이 랜섬웨어는 무차별적인 대규모 유포가 아니라 사전 침투 → 정보 수집 → 대상 지정 → 맞춤형 배포라는 정교한 절차를 거쳐 실행됐다고 볼 수 있다.

 

  • Tor 사이트: 다크웹 사이트의 일종으로, '.onion' 이라는 특수 도메인을 사용하는 웹 사이트

3. 언더그라운드 랜섬웨어 분석
언더그라운드 랜섬웨어는 초기에 인자(Parameter) 값의 개수를 확인하는 로직이 존재한다. 인자 값이 2개를 초과하면 아무 행위를 수행하지 않고 바로 종료된다.

 

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

 

이후 공격자는 미리 삽입해둔 문자열(“8DC1F7B9D2F4EA58”)을 Mutex로 선언한다. 초기 루틴에서는 안티디버깅(Anti-Debugging)이나 안티샌드박스(Anti-Sandbox) 기업이 사용되지 않으며, 곧바로 랜섬웨어 특유의 행위가 시작된다. 먼저 vssadmin 명령을 실행해 모든 섀도 복사본(Shadow Copy) 데이터를 삭제함으로써 파일 복구를 차단한다. 이어 레지스트리를 수정해 원격 데스크톱 연결을 제한하고, 데이터베이스 파일 암호화 과정에 방해가 될 수 있는 관련 서비스들을 중지시킨다.

 

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

 

주요 파일을 잘못 암호화해 시스템이 파괴되는 것을 방지하기 위해 [표 2]와 같이 암호화 제외 대상 폴더가 명시돼 있다. 다양한 윈도우 시스템에 호환되도록 환경 변수를 문자열로 갖고 있으며, 실행 시점에 GetEnvironmentVariableW() API를 통해 문자열로 생성한다.

 

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

 

위와 같은 이유로, 일부 확장자의 파일은 암호화하지 않는다.

 

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

 

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

 

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

 

암호화된 파일에는 AES 대칭키가 RSA 공개키로 다시 암호화돼 함께 삽입된다. 이 때문에 로컬 환경에서는 복호화에 활용할 수 있는 단서가 전혀 남지 않는다. 최종적으로 파일은 [그림 4]과 같은 구조로 변형된다.

 

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

 

 

언더그라운드 랜섬웨어 악성코드는 암호화 준비 단계에서부터 실제 암호화 연산 전 과정(난수 생성, 알고리즘 핸들 오픈, 모드 설정, 대칭키 생성, 패딩, 암호화 등)에서 사용하는 모든 암호 관련 호출을 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() 함수를 활용해 파일 크기를 구하고, 해당 정보를 기반으로 메타데이터를 생성해 암호화 블록의 크기와 범위를 조정하는 분기문에 활용한다. 이러한 방식은 대용량 파일 암호화 시 시스템 부하를 줄이면서도 사용자에게 치명적인 구간을 선별적으로 암호화하기 위해 주로 사용된다. 암호화 대상 파일은 크기에 따라 저용량, 일반, 대용량으로 구분되며, 각 유형별로 암호화 위치와 주기가 달라진다.

 

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

 

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

 

[표 4]는 파일 크기 기반 Flag 세트와 메타데이터 정보를 포함한다. 메타데이터는 총 0x18 바이트 크기를 가지며, 구조는 [그림 8]과 같다.

 

[표 4] 메타데이터 정보

 

[그림 8] 최종 메타데이터 형태

 

모든 랜섬웨어 행위를 마치면 최종적으로 _eraser.bat 파일을 생성해 실행한다. 해당 .bat 스크립트는 윈도우 wevtutil.exe를 활용해 모든 이벤트 로그를 삭제하는 기능을 수행한다.

 

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

 

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

 

 

출처 : AhnLab

02-553-2331
견적 요청
카카오톡 문의