TellYouThePass: Ransomware Attacks Exploits Critical PHP RCE Vulnerability

S2W
S2W BLOG
Published in
21 min readAug 1, 2024

Author: S2W TALON

Photo by Quaritsch Photography on Unsplash

Executive Summary

(Ransomware) 2019년 3월에 처음 등장한 랜섬웨어 그룹 TellYouThePass는 Windows SMB EternalBlue, Log4j 취약점, Confluence Server 취약점, Apache MQ 취약점 등 공개된 RCE Exploit을 이용하여 취약한 서버를 공격해왔음.

  • TellYouThePass는 데이터 유출 사이트를 운영하지 않으며 랜섬노트에 적힌 이메일을 통해서만 피해 기업과 협상하고 복호화 키를 제공하는 특징이 있음.
  • 2024–06–06에 패치된 PHP RCE 취약점(CVE-2024–4577)을 악용하여 TellYouThePass 랜섬웨어를 유포한 사례가 2024년 6월 8일을 기점으로 다수 확인됨.

(Vulnerability) CVE-2024–4577는 특정 코드 페이지를 사용하는 시스템 로캘로 설정된 Windows 환경에서 PHP-CGI 사용 시 Query String에 대한 입력 검증 미흡으로 인해 발생한 Remote Code Execution 취약점임.

  • 일본어, 간체 중국어 및 번체 중국어로 시스템 로캘이 설정된 Windows 환경에서 실행되는 8.3.8, 8.2.20 및 8.1.29 이전의 모든 PHP가 본 취약점의 영향을 받음.
  • 코드 페이지 949(한국어) 등의 기타 환경에서는 %AD 문자열에 의한 취약점은 발생하지 않는 것으로 확인되었으나, PHP의 사용 시나리오가 다양하기 때문에 모든 경우의 수를 확인하기 어려워 악용 가능성 존재 여부를 확신하기 어려움.

(Malware Analysis) TellYouThePass 랜섬웨어 그룹은 해당 취약점을 악용하여 초기 침투를 수행함과 동시에 공격자의 서버에서 악성 스크립트를 다운로드 받고 실행함.

  • 악성 스크립트는 TellYouThePass 랜섬웨어 로더를 드롭하며, 해당 악성코드는 오픈소스 도구 BadPotato, EfsPotato, SweetPotato 및 BlindingEDR의 소스코드를 사용하여 권한을 상승하고 AV/EDR 탐지를 우회함.
  • 최종적으로 TellYouThePass 랜섬웨어를 드롭하고 실행하여 시스템 내 파일을 암호화 함.

(Bitcoin Transaction) TellYouThePass 랜섬노트에 기재된 비트코인 지갑 주소로 총 0.279 BTC(약 15,990달러)의 랜섬머니가 송금된 내역이 확인되었으며 피해 기업이 지불한 것으로 추정됨.

  • TellYouThePass 비트코인 지갑으로 송금된 랜섬머니는 일정 비율로 분할되어 타 지갑 주소로 전송된 후, ChangeNOW 거래소로 전액 송금됨.

What Is TellYouThePass Ransomware?

TellYouThePass는 2019년 3월에 처음으로 발견된 랜섬웨어 그룹으로, Linux, Windows 운영체제를 타겟으로 한 Go언어 기반의 랜섬웨어를 사용해온것으로 확인된다.

최근 PHP 취약점을 악용한 캠페인에서는 .NET 기반의 랜섬웨어를 사용한것으로 확인되었다.

이들은 주로 원격 코드 실행 취약점을 사용해 초기 침투를 수행하였으며, 현재까지 해당 그룹이 사용한 취약점 목록은 다음과 같다.

<a>https://docs.google.com/spreadsheets/d/105WQtJI0z5UVk7SrMg2BXi9iR9HOyVafeBd13TWfy30/edit?gid=0#gid=0</a>
표 1. TellYouThePass 랜섬웨어 그룹이 사용한 취약점

cert-360에 따르면 해당 랜섬웨어 그룹은 공격 시 중국 재무 관리(OA) 소프트웨어의 0-day 취약점을 초기 침투에 사용하였으며, 이외에도 중국 기업 자원 관리(ERP) 소프트웨어에서 발생한 1-day 취약점을 악용하여 중국 기업을 대상으로 공격을 수행한 것으로 확인된다.

  • (2022–08) 중국 재무 관리 소프트웨어 Chanjet T+에서 발생하는 RCE 취약점 사용
  • (2023–06) 중국 기업 자원 관리 소프트웨어 Yonyou NC 에서 발생하는 RCE 취약점 및 파일 업로드 취약점 사용
  • (2023–11) 중국 HikVision의 통합 보안 관리 소프트웨어 iVMS-8700, iSecure Center에서 발생하는 파일 업로드 취약점 사용

TellYouThePass는 데이터 유출 사이트를 운영하지 않으며 랜섬노트에 적힌 이메일을 통해서만 피해 기업과 협상하고 복호화 키를 제공한다.

Analysis of TellYouThePass Malware

2024년 6월 7일, PHP의 RCE 취약점(CVE-2024–4577)의 PoC가 공개됨과 동시에, 해당 취약점을 악용해 TellYouThePass 랜섬웨어를 유포하는 캠페인이 식별되었고, 이 캠페인에 사용된 악성코드를 헌팅하고 분석을 진행했다.

imperva의 보고서에 의하면, 공격자들은 PHP 취약점(CVE-2024–4577) 취약점을 사용해 초기 침투를 수행함과 동시에 악성코드를 실행한 것으로 확인된다. 이 과정에서 공격자들의 C2 서버가 식별되었으며, 해당 C2 서버에서 유포된 두 가지의 악성 스크립트가 추가로 확인되었다. 두 악성코드 모두 최종적으로 TellYouThePass 랜섬웨어를 드롭하고 실행하며, 시스템 내 파일을 암호화한 뒤 피해자로부터 암호화폐 송금을 유도한다.

악성 스크립트 별 두가지 시나리오가 존재하나, Case2(d3.hta) 과정이 Case1(dd3.hta) 과정을 포함하고 있기 때문에 아래의 상세 분석 내용은 Case2에 대해서 설명한다.

그림 1. TellYouThePass 랜섬웨어 실행 과정

Executes VB Script

공격자는 PHP 원격 코드 실행 취약점을 통해 C2 서버에서 hta 파일을 다운로드하고 mshta 명령어를 통해 실행했다. 해당 hta 파일은 내부에 VB 스크립트를 포함하고 있으며, 실행 시 Base64 인코딩 되어 있는 실행 파일의 데이터를 디코딩하고 실행한다. 디코딩된 파일은 .NET 형식의 실행 파일로 권한 상승, EDR 및 AV 우회, 랜섬웨어를 실행하는 역할을 한다.

  • 악성코드 스크립트 다운로드 URL: hxxp://88.218.76[.]13/d3.hta
그림 2. hta 파일 내 VB Script

Privilege Escalation

EfsPotato

EfsPotato는 서버-클라이언트 어플리케이션 RPC(Remote Procedure Call) 통신 간 사용되는 EfsRpcOpenFileRaw 함수를 악용해 권한 상승을 시도하는 오픈소스 도구이다. 해당 함수는 서버 또는 클라이언트의 어플리케이션에서 암호화 된 객체를 열 수 있도록 하는 함수로, 해당 함수를 사용해 특정 객체를 열려고 시도할 때, SYSTEM 권한을 가진 lsass.exe 서비스가 RPC 통신을 위해 지정된 파이프 명인 “\\.\pipe\srvsvc” 파이프에 접근해 타겟 어플리케이션과 통신을 시도한다.

해당 함수의 3번째 인자 FileName으로 “\\.\{custom char}” 와 같이 커스텀으로 명명한 파이프 경로를 입력해도, 지정된 파이프 명인 “\\.\pipe\srvsvc” 문자열로 대치된다. 즉, 고정된 파이프에 접근하는 것이다. 하지만 ‘\’ 문자열 대신 ‘/’ 문자열을 넣을 경우, 문자열이 대치되지 않는 오류가 존재한다. 공격자는 해당 원리를 활용해 악성코드 실행 중 ‘\pipe\srvsvc’로 위장한 Custom한 파이프를 생성하고, EfsRpcOpenFileRaw 함수의 FileName인자값에 변조된 값을 전달해 악성코드 — lsass.exe 간의 통신이 이루어지도록 한다.

악성코드는 해당 파이프를 생성한 뒤 연결을 기다림과 동시에 EfsRpcOpenFileRaw 함수를 호출해 SYSTEM권한을 가진 lsass.exe가 해당 파이프에 접속하도록 유도한다. 이후 악성코드는 서버측에서 클라이언트 측의 토큰정보를 획득 할 수 있는 ImpersonateNamedPipeClient 함수를 호출해 SYSTEM 권한을 가진 lsass.exe의 토큰을 획득하고, SetThreadToken 함수를 통해 현재 실행중인 악성코드의 권한을 상승시킨다.

BadPotato

BadPotato는 RpcRemoteFindFirstPrinterChangeNotificationEx 함수를 악용해 권한상승을 시도하는 오픈소스 도구이다. 해당 함수는 SYSTEM 권한을 가진 spoolsv.exe 서비스가 지정된 파이프(\\.\pipe\spoolss)를 통해 클라이언트에게 프린터 객체와 관련된 알림을 전송하는 역할을 한다. 해당 함수 또한 EfsPotato와 동일하게, 문자열 처리 과정에서 생기는 오류를 악용해 권한 상승을 시도한다.

공격자는 해당 원리를 악용해 악성코드 실행 중 ‘\pipe\spoolss’로 위장한 Custom 파이프를 생성하고, RpcRemoteFindFirstPrinterChange NotificationEx 함수의 pszLocalMachine 인자값에 변조된 값을 전달해 악성코드와 spoolsv.exe 서비스간의 통신이 이루어 지도록 한다.

즉, 악성코드는 해당 파이프를 생성한 뒤 연결을 기다림과 동시에 RpcRemoteFindFirstPrinterChangeNotificationEx 함수를 호출해 SYSTEM 권한을 가진 spoolsv.exe 서비스가 해당 파이프를 통해 접속하도록 유도하고, ImpersonateNamedPipeClient 함수를 호출해 SYSTEM 권한을 가진 spoolsv.exe 서비스의 토큰을 획득해 DuplicateTokenEx, SetThreadToken 함수를 통해 현재 실행중인 악성코드의 권한을 상승시킨다.

SweetPotato

SweetPotato는 다양한 취약점을 사용해 권한상승을 시도하는 오픈소스 도구이다. 원본 소스코드에서는 지정된 인자를 입력받아 WinRM, EfsRPC, PrintSpooler 등의 다양한 방식을 통해 권한 상승을 실행할수 있도록 되어 있으나, 해당 악성코드에서는 BITS(Background Intelligent Transfer Service) COM객체 사용옵션인 “-c” 인자만 입력되어 실행된다.

SweetPotato는 SYSTEM 권한을 가진 BITS 서비스가 5985포트에서 대기중인 WinRM서비스에 연결을 시도하는 점을 악용한다. 이를 위해 악성코드는 5985포트에서 통신을 대기함과 동시에 CreateInstance 함수를 통해 BITS의 CLSID(4991D34B-80A1–4291–83B6–3328366B9097)를 전달해 BITS 서비스가 5985번 포트에 권한요청을 할 수 있도록 트리거 한다.

해당 과정을 거치면, BITS 서비스가 실행되며 5985포트로 NTLMSSP 프로토콜을 통해 권한 협상 패킷을 전송하게 되며. 악성코드는 정상패킷으로 위장한 협상 패킷을 전송해 최종적으로 권한 인증 패킷을 수신하게 된다. 이후 악성코드는 AcceptSecurityContext 함수를 호출해 보안 컨텍스트의 핸들을 획득하며 QuerySecurityContextToken 함수를 통해 해당 해당 보안 컨텍스트(SYSTEM 권한)에 대한 토큰을 획득 할 수 있게 된다.

AV/EDR Evasion Using BYOVD

악성코드는 rundll32.exe를 실행 시킨 후 VirtualAllocEx 함수를 사용해 해당 프로세스 메모리 내에 추가 메모리를 할당하고, WriteProcessMemory 함수를 통해 추가로 할당된 메모리에 악성코드 내에 Base64 인코딩 형태로 저장되어있는 악성 실행 파일의 데이터를 인젝션하고, 최종적으로 CreateRemoteThread 함수를 통해 악성 실행파일의 진입점 코드를 실행한다.

실행되는 프로그램은 AV/EDR에 의해 등록된 커널 콜백 함수를 삭제하는 오픈소스 도구인 RealBlindingEDR의 소스코드를 사용한 것으로 확인되었다. 해당 프로그램을 정상적으로 실행하려면 관리자 권한이 필요하지만 앞서 실행되었던 EfsPotato, BadPotato, SweetPotato 등의 악성코드로 인해 권한이 상승된 채로 실행된다.

BlindingEDR.exe 실행파일을 실행하기 이전에 악성코드는 지정된 경로에 두 개의 드라이버 파일을 드롭한다. 해당 파일들은 임의 메모리 읽기/쓰기가 가능한 취약한 드라이버 파일로, AV/EDR을 우회하기 위해 커널 콜백함수를 제거하는 용도로 사용된다. 즉 공격자들은 BYOVD(Bring Your Own Vulnerable Driver) 기법을 통해 취약한 드라이버 파일을 로딩하고, 커널 메모리영역에 접근해 보안제품을 무력화 한다.

추가로 해당 드라이버 파일들은 PE파일 내에서 CRC필드(4 Byte)가 변조된 채로 드롭된다. 이는 공격자들이 해시 기반으로 취약한 드라이버를 탐지하는 것을 우회하기 위한 목적으로 볼 수 있다.

표 2. 악성코드에서 드롭되는 드라이버 파일
표 3. EDR/AV에서 사용되는 콜백 등록 함수

Execute TellYouThePass Ransomware

위 과정이 완료되면 지정된 경로에 두개의 실행파일을 드롭한다. 각 파일에 대한 설명은 다음과 같다.

표 4. 드롭되는 파일 정보

악성코드는 지정된 커맨드라인을 사용해 TellYouThePass 랜섬웨어를 실행한다. 로더는 암호화된 랜섬웨어 바이너리를 복호화하고 실행파일 내에 존재하는 U 클래스의 Equals 메서드를 호출하도록 되어있다.

  • 커맨드라인: cmd.exe /c start {로더 Path} {암호화 된 랜섬웨어 Path} {AES Key} {AES IV}

위의 과정을 통해 실행된 TellYouThePass 랜섬웨어는 지정된 서비스와 프로세스를 종료하고, 커맨드 라인을 실행하여 Windows 운영체제에서 스냅샷 데이터를 가지고 있는 VSS(Volume Shadow Copy)의 데이터를 삭제하도록 한다.

  • 커맨드라인: vssadmin delete shadows /all
표 5. 종료 대상 서비스 및 프로세스

파일 암호화를 수행 하기 전, 특정 디렉터리에 지정된 파일들이 존재 할 경우 파일 암호화를 진행하지 않고 종료한다. 또한 디렉터리 명, 파일 명, 확장자를 확인하여 암호화 여부를 결정한다.

표 6. 암호화 제외 및 대상 디렉터리, 확장자

이후 파일 암호화 과정은 다음과 같이 진행된다.

  1. 랜덤 32바이트 Key값과 16바이트의 IV(Initial Vector)를 생성해 AES-256 키를 생성
  2. AES-256(CFB Mode) 알고리즘으로 파일을 암호화 하고, 암호화가 완료된 파일에 .locked 확장자를 추가
  3. RSA-1024 공개키, 개인키 쌍을 랜덤하게 생성
  4. 파일 암호화에 사용된 AES키를 RSA-1024 공개키로 암호화
  5. 암호화 된 키 정보는 파일의 가장 첫 부분에 저장
  6. RSA-1024 개인키는 랜섬웨어 내에 저장되어있는 RSA 공개키에 의해 암호화 되며, 랜섬노트 및 show13.txt 파일에 저장
그림 3. 암호화 과정

파일 암호화 과정이 완료되면 3가지 파일이 생성되며 각 파일 및 내용은 다음과 같다.

표 7. 생성되는 파일 정보
그림 4. TellYouThePass 랜섬노트

Analysis of TellYouThePass payment address

“READ_ME10.html” 랜섬노트를 통해 확인된 비트코인 지갑주소 정보는 다음과 같다.

표 8. Details of payment address (2024년 7월 21일 기준)

피해 기업이 지불한 것으로 추정되는 랜섬머니 총 0.279 BTC(약 15,990달러)는 Gate.io, OKEx, Binace 거래소에서 TellYouThePass 랜섬노트에 적힌 지갑주소로 입금되었다. 입금된 금액은 일정 비율로 분할되어 타 지갑주소로 전송된 후, ChangeNOW 거래소로 전액 송금되었다.

그림 5. Analysis of Bitcoin Transaction

Transfer to TellYouThePass BTC Wallet

  • 랜섬웨어 피해 기업이 지불한 것으로 추정되는 거래 내역(Transaction)이 총 4건 확인되었다.
  • 2024년 3월 20일부터 22일 사이에 Gate.io, OKEx, Binace 거래소에서 피해 기업이 지불한 것으로 추정되는 랜섬머니 총 0.279 BTC(약 15,990달러)가 TellYouThePass 랜섬노트에 적힌 지갑주소로 입금되었다.
  • TellYouThePass 랜섬노트에서 확인된 BTC 지갑 주소로 송금된 트랜잭션 정보는 다음과 같다.
표 9. Transactions of transferred to ChangeNOW

Transfer to ChangeNOW Exchange

  • 3~4회에 걸쳐 여러 비트코인 주소로 분할되어 송금되었으나, 분할된 자금(총 약 0.2787096 BTC)은 ChangeNOW 거래소(37jAAWEdJ9D9mXybRobcveioxSkt7Lkwog)로 전액 송금되었다.
  • ChangeNOW 거래소로 송금된 BTC 지갑주소와 트랜잭션 정보는 다음과 같다.
표 10. Transactions of transferred to ChangeNOW

Conclusion

TellYouThePass 랜섬웨어 그룹이 in-the-wild에서 최근 패치된 PHP 취약점(CVE-2024–4577)을 이용하여 TellYouThePass 랜섬웨어 배포에 활발하게 악용하고 있어 주의가 필요함. 주로 중국, 대만, 홍콩, 일본 등 중국어와 일본어가 설정된 윈도우를 사용하는 경우 피해가 많았던 것으로 확인됨. 다른 언어를 사용하는 윈도우 환경도 안전하지 않으므로 최신 PHP 버전으로 업데이트 할 것을 권장함.

DDW 해킹 포럼에서 CVE-2024–4577 취약점 관련 Exploit 코드, 취약한 서버를 찾는 방법을 댓글로 공유하는 등 다크웹에서도 관심이 커지고 있어 추가 악용 사례 발생 가능성이 높을 것으로 보임.

취약한 버전의 PHP를 사용하고 있는 경우 아래의 최신 버전으로 업데이트할 것을 권장함.

  • PHP 8.3.8 이상
  • PHP 8.2.20 이상
  • PHP 8.1.29 이상

업데이트가 불가능할 경우 하단의 임시 조치방안에 따라 조치할 것을 권장함.

영향 받는 코드 페이지를 사용하는 시스템의 경우, Query String 내에 %AD (대소문자 무관) 문자열이 포함되어 있다면 안전한 페이지로 이동하는 Rewrite Rule을 작성하여 HTTP 서버에 적용하여 임시 조치할 수 있음.

RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? - [F,L]
  • PHP를 CGI 모드로 사용하지 않도록 HTTP 서버의 설정을 변경 및 PHP 바이너리가 CGI 디렉토리를 통해 노출되지 않도록 설정하여 임시 조치할 수 있음.
  • PHP-CGI를 사용중인 경우 Apache 웹 서버에서 지원하는 mod_php 또는 Nginx와 함께 자주 사용되는 PHP-FPM 등 상대적으로 안전한 아키텍처로 전환할 것을 권장함.

Appendix.A Analysis of Bitcoin Transactions

Appendix.B TellYouThePass Ransomware IoCs List

Appendix.C MITRE ATT&CK MATRIX Techniques

References

  1. https://www.php.net/downloads
  2. https://devco.re/blog/2024/06/06/security-alert-cve-2024-4577-php-cgi-argument-injection-vulnerability-en/
  3. https://censys.com/cve-2024-4577/
  4. https://lookerstudio.google.com/u/0/reporting/f7302c0e-5d60-41c5-8638-6a950e18cf0f/page/tEnnC
  5. https://www.imperva.com/blog/update-cve-2024-4577-quickly-weaponized-to-distribute-tellyouthepass-ransomware/
  6. https://cert.360.cn/report/detail?id=65fceeb4c09f255b91b17f11
  7. https://cloud.tencent.com/developer/article/2403456
  8. https://itm4n.github.io/printspoofer-abusing-impersonate-privileges/
  9. https://www.pentestpartners.com/security-blog/sweetpotato-service-to-system/
  10. https://decoder.cloud/2019/12/06/we-thought-they-were-potatoes-but-they-were-beans/
  11. https://id-ransomware.blogspot.com/2019/03/tellyouthepass-ransomware.html
  12. https://www.freebuf.com/articles/network/206961.html
  13. https://www.freebuf.com/articles/system/244123.html
  14. https://www.bleepingcomputer.com/news/security/tellyouthepass-ransomware-revived-in-linux-windows-log4j-attacks/
  15. https://www.secpulse.com/archives/171335.html
  16. https://www.bleepingcomputer.com/news/security/tellyouthepass-ransomware-returns-as-a-cross-platform-golang-threat/
  17. https://mp.weixin.qq.com/s/1-H_LDOeLQkxVP1TZsdEWA
  18. https://twitter.com/nigroeneveld/status/1800876501077782990
  19. https://cert.360.cn/report/detail?id=9fde4e9391c9fbc31ee7f2dcbc5be2f3
  20. https://nvd.nist.gov/vuln/detail/CVE-2017-0144
  21. https://nvd.nist.gov/vuln/detail/CVE-2021-44228
  22. https://nvd.nist.gov/vuln/detail/CVE-2022-26134
  23. https://nvd.nist.gov/vuln/detail/CVE-2023-46604
  24. https://nvd.nist.gov/vuln/detail/CVE-2024-4577

--

--

S2W
S2W BLOG

S2W is specializing in cybersecurity data analysis for cyber threat intelligence.