Trawling

Qubole 연동 AWS 계정 자격증명 악용…정상 호출 기록 없던 고객 역할도 공격 허용

Wiz는 2026년 10월 14~26일 공격자가 Qubole 연동에 쓰이던 AWS 계정의 IAM 자격증명으로 여러 고객 계정의 역할을 맡았다고 보고했습니다. 조사 환경 다수에서는 10월 정상 호출이 없었는데도 신뢰 정책이 남아 있었고, External ID를 포함한 공격 요청이 성공해 역할 권한이 닿는 비밀정보와 S3 데이터에 접근했습니다.

Wiz는 Sentra와 Mandiant와 함께 조사해, 위협 행위자가 2026년 10월 14일부터 26일까지 Qubole 플랫폼이 고객 AWS 환경에 접근할 때 쓰던 AWS 계정의 IAM 자격증명으로 여러 고객 계정의 연동 역할을 맡았다고 보고했습니다. 여러 고객 환경에서 의심스러운 활동을 발견한 Sentra가 Wiz에 정보를 전달하면서 조사가 시작됐습니다. 공격자는 역할이 허용한 AWS 자원을 훑고 비밀정보를 수집했으며 S3 데이터도 내려받았습니다.

고객이 만든 역할이 외부 계정의 접근을 허용했습니다

외부 플랫폼이 고객 AWS 계정에서 작업할 때는 고객이 IAM 역할을 만들고 공급사 계정에 그 역할을 맡을 권한을 주는 방식이 쓰입니다. 역할의 신뢰 정책은 어떤 계정이나 주체가 역할을 맡을 수 있는지 정하고, 권한 정책은 역할을 맡은 뒤 어떤 자원에 접근할 수 있는지 정합니다. Qubole 플랫폼은 고객이 제공한 역할 주소(ARN)와 External ID를 넣어 AWS에 AssumeRole 요청을 보냅니다. 요청이 신뢰 정책 조건을 통과하면 AWS가 역할 권한에 맞는 임시 자격증명을 발급합니다.

이번 공격에서 위협 행위자는 Qubole 플랫폼이 고객 역할을 요청할 때 쓰던 AWS 계정의 IAM 자격증명을 이용했습니다. Wiz가 관찰한 첫 역할 요청은 10월 14일 Mullvad VPN 주소에서 왔습니다. 10월 15일부터는 OVH가 운영하는 가상 서버에서 활동이 주로 이어졌고, 10월 18일에는 같은 AWS 계정의 두 번째 IAM 사용자도 사용됐습니다. 악성으로 판정한 AssumeRole 요청은 모두 External ID를 포함했고 모두 성공했습니다.

Wiz가 조사한 환경에서 공격자가 맡은 역할 상당수에는 그 밖의 정상 사용 기록이 없었습니다. 조사 대상 고객 환경 다수에서는 10월에 해당 공급사 계정에서 온 정상 역할 요청이 관찰되지 않았지만, 신뢰 정책은 남아 있어 공격자의 요청을 받아들였습니다. 연동 사용이 뜸하거나 정상 호출이 관찰되지 않아도 역할의 신뢰 설정은 그대로 유지될 수 있습니다.

External ID는 여러 고객을 상대하는 공급사가 고객별 역할 요청을 식별하도록 쓰는 값이며, 고객은 신뢰 정책에서 이 값이 맞는지 검사하도록 설정할 수 있습니다. AWS는 External ID를 비밀값으로 취급하지 않으며, 이 값은 CloudTrail에 평문으로 기록되고 공급사 시스템이나 인프라 코드에도 저장될 수 있다고 Wiz는 설명했습니다. 이번 공격 요청에도 External ID가 포함됐고 역할 호출이 성공했습니다. Wiz는 이 값만을 접근 통제 수단으로 삼지 말라고 권고했습니다.

역할 권한으로 비밀정보와 S3 데이터를 살폈습니다

역할을 맡은 뒤 공격자는 AWS 여러 서비스의 자원을 열거했습니다. Lambda 함수 설정을 조회해 환경 변수를 살피고, Secrets Manager와 SSM Parameter Store에서 저장된 값을 가져왔습니다. Wiz에 따르면 공격자는 발견한 자격증명의 유효성을 TruffleHog로 시험했습니다. 대상에는 AWS 키뿐 아니라 Entra ID 서비스 주체의 클라이언트 비밀과 Okta 앱의 클라이언트 자격증명도 포함됐습니다. 이 정보는 Qubole이 아니라 영향을 받은 고객 조직의 것이었습니다.

공격자는 S3 버킷과 객체를 나열하고 내용을 살핀 뒤 파일을 내려받았습니다. Wiz는 특정 데이터를 골라 찾기보다 역할이 접근할 수 있는 버킷의 데이터를 폭넓게 읽은 것으로 봤으며, 일부 세션에서는 버킷 전체를 다운로드했다고 밝혔습니다. 어떤 객체를 읽었는지 확인할 수 있는지는 로그 설정에 따라 달랐습니다. CloudTrail 관리 이벤트에는 역할 호출과 버킷 목록 조회가 기록되지만 객체 읽기는 포함되지 않습니다. 민감한 버킷에 S3 데이터 이벤트나 서버 액세스 로그를 설정하지 않은 일부 환경에서는 대응팀이 읽힌 객체를 파악하기 어려웠습니다.

Wiz는 Qubole 연동과 관련된 별도의 악성 활동도 보고했습니다. 10월 8일부터 11일까지 공격자는 Qubole 통합용으로 만들어졌다고 Wiz가 추정한 고객 소유 AWS 키를 사용했습니다. 10월 8일에는 한 시간 안에 해당 키들을 모두 시험했고, 소수 사례에서는 고객 클라우드 환경 침해로 이어졌습니다. Wiz는 이 활동과 10월 14~26일의 공급사 계정 역할 호출을 연결하지 못했다고 밝혔습니다.

로그 검토와 역할 권한 축소를 권고했습니다

Wiz는 Qubole을 연동한 조직에 2026년 10월 1일부터 통합 역할이 있는 모든 AWS 계정의 CloudTrail 기록을 검토하라고 권고했습니다. 공급사 AWS 계정 ID 805246085872에서 온 AssumeRole 요청 가운데 AWS 인프라 주소가 아닌 곳에서 시작한 요청이 검토 대상입니다. Wiz가 조사한 환경에서는 IAM 사용자 AIDA3W7DIFLYOLTK63SFS가 공격자 활동에서만 관찰됐습니다. 다른 사용자 AIDAJYRRH5Y3A7AAJM2HW는 정상 Qubole 트래픽에도 쓰였으므로, 사용자 식별자만으로는 악성 요청과 정상 요청을 가를 수 없고 출발지 주소가 함께 판단에 쓰입니다.

재발 방지를 위해 Wiz는 더는 사용하지 않는 통합 역할을 삭제하거나 공급사 계정을 신뢰 정책에서 제거하라고 권했습니다. 공급사가 지원하는 경우 계정 전체 대신 특정 IAM 주체만 허용하고, 공급사가 공개한 네트워크 범위에 맞춰 출발지 IP나 VPC 엔드포인트 조건을 추가하는 방안도 제시했습니다. Wiz가 관찰한 악성 역할 요청은 AWS 인프라 주소가 아닌 곳에서 왔고 정상 플랫폼 트래픽은 AWS 인프라에서 왔습니다. 이에 따라 출발지 IP 조건만으로도 이번에 관찰된 역할 호출은 모두 차단됐을 것이라고 Wiz는 설명했습니다. 사고 뒤에는 공급사와 협의해 External ID를 교체하고, 지원되는 경우 역할마다 다른 값을 쓰라고도 권고했습니다.

Wiz는 통합 역할이 접근할 수 있는 데이터와 권한을 필요한 범위로 제한하고, 역할 세션이 공격에 사용된 사실이 확인되면 해당 역할이 읽을 수 있던 비밀값·SSM 파라미터·Lambda 환경 변수의 자격증명을 교체하라고 권고했습니다. 이미 발급된 역할 세션도 폐기해야 합니다. 자격증명을 바꾸는 것만으로는 기존 임시 세션이 종료되지 않습니다.

참고 자료

오류 제보