AWS Security Workshop - 침해사고 대응

Glen·2023년 6월 23일
0

aws security workshop

목록 보기
4/10
post-thumbnail

실습환경 아키텍처

  • aws config 제외
    - 실습중 cloudtrail 로깅 중지 중에 대한 로그 수집 불가.

1. 환경구성 및 설정

수행 절차

  1. GuardDuty 활성화
  2. Macie 활성화
  3. Detective 활성화
    1. GuardDuty가 활성화 되고 48시간 이후에 시작 가능함.
  4. SecurityHub 활성화
  5. CloudFormation 템플릿 실행하기

Cloudformation 수정 필요

2. 공격 시뮬레이션

시나리오

1. Session manager를 통해 malicious host로 접속

  • 기본설정에서 계정을 ubuntu으로
  • 공격자 인스턴스를 선택하고 start
  • 바로 접속하면 sh이기때문에 bash로 변경

2. compromised host에 대한 포트 스캐닝 및 부르트포스 공격

  • 공격대상 인스턴스에 nmap으로 포트스캔
    - sT : tcp connect
    - Pn : ping 테스트 없이
    sudo nmap -sT -Pn 10.0.0.15
  • ssh bruteforce 스크립트 실행
    - hydra를 이용해서 해당 인스턴스에 무작위 공격
  • 앞서 hyrda로 찾은 id/pw를 가지고 victim의 iam 임시 자격증명을 가져오고, malware를 실행한다.

    • 빠른 실습을 위해 지정된 스크립트 실행
  • hydra 공격 이후 nacl 탐지로 인해 5분안에 실습을 마무리 해야된다
    - 첫번째 시도때 잘못해서 인증키가 계속 만료됨… 결국 cloudformation 재설치함

    
    ./get-credential.sh
    ./set-credential.sh
    ./start-malware.sh

  • 람다로 인한 nacl 인바운드 규칙 변경확인
    - 이후 실습단계에서 체크할 예정
  • aws cli로 계정에 있는 cloudtrail 목록 및 현 리전에 설정되어있는 하나 이상의 trail 설정 확인
  • 현재 cloudtrail은 로깅중인것을 확인
  • attacker가 stop-logging 명령어를 실행하여 로깅 중지

    /usr/local/bin/aws cloudtrail stop-logging --name arn:aws:cloudtrail:ap-northeast-2:126935237846:trail/sir-workshop-trail --profile attacker
  • 해당 cloudtrail 로깅중지 확인

  • 특정 버킷에 s3 object 확인
    /usr/local/bin/aws s3api list-objects --bucket sir-workshop-<account-id>-ap-northeast-2-data --profile attacker
  • 위에서 확인한 버킷의 기본암호화 속성 확인
  • 기본암호화 중지 명령어 실행
    /usr/local/bin/aws s3api delete-bucket-encryption --bucket sir-workshop-<account-id>-ap-northeast-2-data --profile attacker
  • 기본 암호화 비활성화 된것을 확인
  • 버킷에 있는 특정 파일 다운로드
  • 다운로드 했지만 암호화 되어있는것을 볼수있다.
    - 기본 암호화를 해제해도 모든 파일이 해제되는것이 아닌, 선 적용된 파일들은 그대로임.
    /usr/local/bin/aws s3api get-object --bucket sir-workshop-<account-id>-ap-northeast-2-data --key profile-data.csv /home/ubuntu/profile-data.csv --profile attacker
  • 다른 파일도 다운로드 시도.
    /usr/local/bin/aws s3api get-object --bucket sir-workshop-<account-id>-ap-northeast-2-data --key employee-data.txt /home/ubuntu/employee-data.txt --profile attacker
  • employee-data.txt를 열어본다. 암호화 되어있었지만 열린다.
    - 그 이유는 설정된 S3 버킷 암호화 방식이 S3 서비스가 가지고 있는 디폴트 암호화키를 이용하여 Server-Side 암복호화를 수행하는 SSE-S3이기 때문.
    - get-object API로 객체를 다운로드 할 때, 디폴트 키를 이용하여 복호화 한 뒤, 객체를 리턴했기 때문
    - 따라서 S3 디폴트 키가 아니라 고객이 지정한 CMK(Customer Master Key)를 사용하는 SSE-KMS 기반 암호화를 적용할 것을 권장.
  • 퍼블릭 접근가능으로 변경
    /usr/local/bin/aws s3api put-bucket-acl --bucket sir-workshop-<account-id>-ap-northeast-2-data --grant-read uri=http://acs.amazonaws.com/groups/global/AllUsers --profile attacker
  • 퍼블릭으로 변경된것을 확인

7 iam proxy 사용자 생성 및 관리자 권한 부여

  • proxy_user
    /usr/local/bin/aws iam create-user --user-name proxy_user --profile attacker
  • accesskey 페어 생성
    /usr/local/bin/aws iam create-access-key --user-name proxy_user --profile attacker
  • admin 권한 그룹에 할당
    • 이것으로 앞서 get,set,start로 얻은 임시자격증명을 사용하지 않고, 공격자가 모든 관리 권한에 대한 상시 자격증명을 얻을수 있게 됨
    /usr/local/bin/aws iam attach-user-policy --user-name proxy_user --policy-arn arn:aws:iam::aws:policy/AdministratorAccess --profile attacker
  • proxy_user의 생성 및 권한 확인

3. 공격 탐지 및 조사

1. GuardDuty

  • security hub 요약의 제일 하단 확인
  • 분석결과 중 심각도 high에서 Data exfiltration through DNS queries from~을 찾는다
  • 아래 리소스에서 해당 인스턴스의 private ip를 확인하여 필터링에 추가.(공격이 발생한 인스턴스의 결과만 보기 위해)
  • Compromised Host가 알려진 비트코인 도메인들에 접근을 시도했다는 것으로서, 해당 인스턴스가 탈취되었다는 또 다른 지표로 알수있다
  • 다른 high 심각도의 2가지를 확인.
    - list-objects API 호출과 profile-dataemployee-data파일에 대한 GetObject API 호출에 대한 탐지건. 중요 파일 2건이 유출되었다는 증적

  • 탐지 항목 중 10.0.1.X is performing SSH brute force attacks against{INSTANCE_ID}의 상세 내역에서 보면 외부 IP 에서 Compromised Host를 타겟으로 SSH BruteForce 공격이 실행되었다는것을 알수있음.
  • 공격자에 대한 조사를 위해, 팝업화면의 제일 아래에 있는 Amazon Detective에서 조사를 클릭

2. Detective

  • 위 탐지된 결과로 확인된 ip(10.0.1.115)에 대한 프로파일 클릭.
  • bruteforce 공격, portscan 공격 확인
  • 자세한 내용 확인을 위해 outbound 트래픽 클릭
  • 22번 포트에 대한 접근이 수락된 것 을 확인할 수 있다
  • 다시 위 대시보드의 성공한 api호출 부분을 확인
    - Compromised Role이 확인됨(sir-workshop-compromised-ec2)
    - 이 부분은 공격자가 Compromised Role을 획득해서 AWS API들을 실행했다는 증적
    - s3 버킷 접근권한을 퍼블릭으로 수정하고 암호화 설정을 해제했던 내역
  • 발견된 롤(sir-workshop-compromised-ec2)을 클릭하여 어디서 발생했는지 살펴본다.
    - 새로운동작 탭

  • 대시보드 하단에 새로 관찰된 api 호출 목록 확인
    - cloudtrail, iam 부분
    - 나머지 API들(UpdateInstanceInformation, ListInstanceAssociation, CreateThreatIntelSet, ListDetectors, PutRolePolicy)은 CloudFormation 템플릿 실행과정에서 이용했던 호출 이력

  • 탐지 및 조사로 알게 된 것
항목탐지내역
공격자 IP10.0.1.X
공격 기법SSH BruteForce
탐지 내역 1.멀웨어 활동 - DNS 쿼리기반 정보 유출시도 / 비트코인 관련 활동
탐지 내역 2.IAM Role 탈취성공
탐지 내역 3.AWS API 호출성공 - CloudTrail 로깅 무력 화 (ListTrails, DescribeTrails, StopLogging, DeleteTrail)
탐지 내역 4.AWS API 호출성공 - S3 버킷 설정 조작 (DeleteBucketEncryption, PutBucketAcl)
탐지 내역 5.AWS API 호출성공 - IAM User/엑세스키 생성 및 권한 조작 (CreateUser, CreateAccessKey, AttachUserPolicy)

3. Inspector

  • security hub에서 inspector 분석결과 > 필터에 그룹화기준[유형]을 선택.
  • 상위 3건 모두 Compromised Host의 로그인 방식이 SSH password방식이고, 패스워드 복잡도
    가 따로 없는 취약한 상태.
  • 나머지 결과들은 취약점 패치가 필요
  • cloudwatch 로그그룹으로 이동하여 /sir-workshop/var/log/secure > {INSTANCE_ID}/ssh
  • 아래 필터를 입력
[Mon, day, timestamp, ip, id, msg1= Invalid, msg2 = user, ...] 
  • bruteforce 공격에 대한 로그를 확인
  • 다음 필터를 입력
    [Mon, day, timestamp, ip, id, msg1= Accepted, msg2 = password, ...]
  • ssh 로그인 성공 확인

4. MACIE

  • high에 대한 상세정보 클릭
  • 리소스 정보 확인
  • 버킷의 퍼블릭 오픈 확인
  • macie s3 버킷으로 이동하여 퍼블릭으로 오픈된 버킷에 대한 작업생성
  • 일회성으로 선택
  • 모두 기본값으로 두고 작업이름 설정 후 생성.
    - 완료까지 5~10분 소요
  • 완료 후 결과표시
  • s3버킷에 포함되어있는 민감데이터 확인.
  • Policy:IAMUser/S3BucketEncryptionDisabled도 확인

5. Cloudtrail

  • aws config가 실행되고있지 않으므로 실습 불가.
  • 앞선 실습에서 cloudtrail의 로그 활성을 껐었음. 다시 활성화 시키고 이벤트를 확인하는 작업
  • 다음에 대한 정보를 확인 할수있음
    • proxy_user의 생성로그
    • CreateAccessKey의 로그
    • 생성한 accesskey로의 사용로그
    • AttachUserPolicy > proxy_user에게 administrator 권한 추가된 로그 확인.

최종 확인된 침해내역

항목침해 유형관련 리소스 / 탐지 내역
인스턴스 탈취IAM Role 자격증명 유출sir-workshop-compromised-ec2
멀웨어 활동Data exfiltration through DNS queries
멀웨어 활동Bitcoin-related domain name queried
중요 데이터 유출S3 버킷 Public Openarn:aws:s3:::sir-workshop-(ACCOUNT_NUMBER}-ap-northeast-2-data
S3 버킷 암호화 해제arn:aws:s3:::sir-workshop-(ACCOUNT_NUMBER}-ap-northeast-2-data
S3 객체 기밀정보 인터넷 유출config.py - Aws credentials(1건)
S3 객체 기밀정보 인터넷 유출employee-data.txt - 개인정보(Address 2건, Name 4건) / 금융정보(Credit Card Number 2건)
S3 객체 기밀정보 인터넷 유출profile-data.csv - 개인정보(Address 6건, Name 6건) / 금융정보(Credit Card Number 6건)
AWS 어카운트 탈취IAM user 생성proxy_user - 콘솔 사용 이력 없음
IAM user Accesskey 페어 생성상기 4번에서 식별된 {AccessKeyId} - API 호출 이력 없음
IAM user 권한 상승proxy_user - AdministratorAccess 권한 부여

4. 경감조치

1. 자동조치 확인 - SSH Bruteforce 공격대응

  • 규칙# 90의 DENY 규칙
  • ALLOW 규칙번호 100보다 적은 값으로 우선순위가 앞서는 규칙. Malicious Host의 Private IP를 차단
    - 이 설정으로 Compromised Host가 있는 서브넷 전체가 Malicious Host로 부터의 모든 접근을 차단

cloudwatch의 이벤트 규칙을 확인해보자

  • GuardDuty에서 “UnauthorizedAccess:EC2/SSHBruteForce” 탐지내역이 생성 되는 경우, 람다함수 ‘sir-workshop-remediation-inspector’과 ‘sir-workshop-remediation-nacl’을 호출하게 됨
  • 람다가 실행하는 대상 확인
    - Inspector가 Compromised Host에 대한 진단평가를 수행
    - nacl에 host에 대한 deny 추가하여 차단

2. 자동조치 확인 - 멀웨어 활동 대응

  • nacl의 아웃바운드 규칙 확인
  • 마찬가지로 규칙# 90의 DENY 규칙이 설정되어있음.
  • Any IP에 대해 차단하고 있는 것을 확인.
    - 이 규칙으로 인해, Compromised Host가 있는 서브넷 전체가 아웃 바운드로의 통신이 완전이 차단되었으며, 더 이상 i-am-malware가 외부와 통신을 시도할 수 없게됨

  • 람다함수 sir-workshop-remediation-nacl이 GuardDuty의 탐지 조건에 의해 트리거되어 DENY 규칙을 NACL에 설정함

3. 수동조치 - 유출된 자격증명 교체 및 Proxy User 삭제

  • 활성 세션 취소
  • 인스턴스 중지후 시작
    - 이 조치는 1번에서 취한 세션 취소로 인해, Compromised Role이 취소되면서, 해당 Role을 이용하고 있던 Compromised Host상의 다른 애플리케이션들이 영향을 받게됨
    - 따라서 다시 재기동하여 Compromised Role의 임시 자격증명을 재발급

4. 수동조치 - S3 설정 원복 및 추가 접근 통제

  • s3의 퍼블릭 엑세스 차단
  • 기본 암호화의 키 유형 및 키 활성화
    - 팁 : 좀 더 보안을 강화하기 위해서는 AES-256의 SSE-S3 암호화 방식보다, AWS-KMS를 선택

  • s3 버킷 정책 편집

    {
      "Version": "2012-10-17",
      "Id": "Policy1415115909152",
      "Statement": [
      {
          "Sid": "Access-to-specific-VPCE-only",
          "Principal": "*",
             "Action": "s3:GetObject",
             "Effect": "Deny",
             "Resource": [
                "arn:aws:s3:::sir-workshop-<account>-ap-northeast-2-data",
                "arn:aws:s3:::sir-workshop-<account>-ap-northeast-2-data/*"
             ],
             "Condition": {
              "StringNotEquals": {
                  "aws:sourceVpce": "vpc endpoint입력 "
              }
          }
      }
      ]
    }

5. 수동조치 - Compromised Host CVE 취약점 해결

  • Compromised Host O/S 패치를 위해, 아웃바운드 규칙 편집
  • 자동 추가되었던 #90 규칙을 제거
  • ec2 중지 후 재시작
    - 이 조치는 Session Manager 접근을 위해 System Manager Agent를 기동하기 위한 작업
    - Compromised Host의 상태 검사에 2/2 검사 통과로 표시되는 것을 꼭 확인
  • 세션매니저 기본설정 > ec2-user로 변경
  • Compromised Host에 접속후 패치를 적용
sudo yum update --security
#이후 묻는 질문에 y입력

  • 다시 인스턴스 중지 후 시작.

    • 이 조치는 yum update에 커널 패치까지 적용되었기 때문에, 재기동을 통해 반영하는 과정
    • Compromised Host의 상태 검사에 2/2 검사 통과로 표시되는 것을 꼭 확인
  • inspector 평가템플릿으로 이동

  • 평가 템플릿 생성
  • Security Best Practices-1.0 관련 항목 3건 외에는 다른 CVE 기준 탐색건들이 해결된 것을 확인함.
  • 수행시간은 15분 정도 소요됩니다.
  • 3-3 단계에서 찾았던 나머지 SSH 패스워드 인증 관련 설정 오류들은 Inspector의 가이드에 따라 각각 해결가능하나 본 실습과정에서는 생략
profile
어제보다 나은 엔지니어가 되기 위해서 공부중

0개의 댓글