JADEPUFFER, Agentic 랜섬웨어를 사용하여 자동화된 데이터베이스 갈취 수행
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
JADEPUFFER는 대형 언어 모델에 의해 처음부터 끝까지 운영되는 강요 캠페인의 첫 번째 공개된 에이전트 랜섬웨어 예입니다. 이 행위자는 인터넷에 노출된 Langflow 인스턴스의 약점을 악용하여 초기 접근을 얻고, 이후 독립적으로 정찰, 횡적 이동 및 데이터베이스 파괴를 수행합니다. 이 운영은 자체 설명 페이로드와 실시간으로 결정을 적응시키는 능력으로 돋보입니다.
조사
Sysdig 위협 연구 팀은 JADEPUFFER가 CVE-2025-3248을 악용하여 Langflow 호스트에서 임의의 Python 코드를 실행하는 것을 관찰했습니다. 그들의 조사는 에이전트가 클라우드 자격 증명을 수집하고 MinIO 버킷을 열거하며 MySQL과 Nacos 서버를 손상시키는 과정을 쫓았습니다. 연구에서는 또한 에이전트가 bcrypt 구현 문제 및 외래 키 제약 조건과 같은 운영상의 실패를 몇 초 이내에 진단하는 모습을 보여주었습니다.
완화
주요 방어 단계는 CVE-2025-3248을 수정하기 위해 Langflow를 패치하고 기본 JWT 서명 키를 교체하여 Nacos를 강화하는 것입니다. 조직은 코드 실행 인터페이스나 데이터베이스 관리 계정을 인터넷에 직접 노출하는 것을 피해야 합니다. 또한 엄격한 이송 제어와 웹 접근 프로세스에서 클라우드 자격 증명을 신중하게 범위 제한하여야 합니다.
대응
JADEPUFFER 활동이 감지되면 대응자는 영향을 받은 Langflow 및 Nacos 시스템을 즉시 격리해야 합니다. 데이터베이스 구성을 검증하고, 호스트에 대해 승인되지 않은 crontab 항목이나 새로 생성된 관리 사용자가 있는지 확인해야 합니다. 또한, 식별된 명령 및 제어 및 탈취 인프라와의 연결을 위해 네트워크 트래픽을 모니터링하고, 손상된 공급자 API 키에 대해 클라우드 환경을 검토해야 합니다.
공격 흐름
시뮬레이션 실행
전제 조건: Telemetry 및 Baseline 사전 비행 검사가 통과했어야 합니다.
이유: 이 섹션은 탐지 규칙을 유발하도록 설계된 적수 기술적 (TTP)의 정확한 실행을 자세히 설명합니다. 명령과 서사는 식별된 TTP를 직접 반영하고 탐지 논리에서 예상되는 정확한 텔레메트리를 생성하는 것을 목표로 해야 합니다. 추상적이거나 관련 없는 예는 오진으로 이어질 수 있습니다.
-
공격 서사 및 명령: 적수가 Windows 기반 애플리케이션 서버에 초기 접근을 얻었습니다. 그들은 자동화된 데이터베이스 강탈 (JADEPUFFER)을 수행하려고 합니다. 먼저, 하드코딩된 루트 자격 증명을 포함한 Python 스크립트를 사용하여
nacos데이터베이스에 연결하여 구성 데이터를 탈취합니다. 두 번째로,AES_ENCRYPT함수를 사용하여 민감한 테이블 열을 암호화하는 일련의 SQL 명령을 실행합니다. 이는 데이터를 보이지 않게 파괴하여 지불을 요구하는 “에이전트” 특성을 모방한 것입니다. -
회귀 테스트 스크립트:
import pymysql # JADEPUFFER 무단 접근 시뮬레이션 (T1548/T1136.002 컨텍스트) # 대상: Nacos 구성 데이터베이스 try: connection = pymysql.connect( host="localhost", port=3306, user="root", password="password123", # 시뮬레이션된 도난된 자격 증명 database="nacos" ) print("[+] 성공적으로 Nacos에 루트로 연결했습니다.") with connection.cursor() as cursor: # JADEPUFFER 암호화 시뮬레이션 (T1053.003 컨텍스트) # 이 특별한 구문은 탐지 규칙을 유발하기 위해 설계되었습니다. print("[*] AES_ENCRYPT 실행하여 강요 시뮬레이션...") sql_extort = "UPDATE configs SET content = AES_ENCRYPT('sensitive_data', 'secret_key') WHERE id = 1;" cursor.execute(sql_extort) connection.commit() print("[+] 강탈 텔레메트리 생성됨.") connection.close() except Exception as e: print(f"[-] 시뮬레이션 실패: {e}") -
정리 명령:
-- 테스트 환경용 'content' 열을 비암호화된 상태로 복원 UPDATE configs SET content = 'original_unencrypted_data' WHERE id = 1; -- 시뮬레이션된 루트 연결 종료 보장