- 1주차(8.27): S3 취약점 및 보안2023년 08월 25일
- 59lee
- 작성자
- 2023.08.25.:26
cloudFormation- 스택 만들기 cloudFormation- 스택 세부 정보 지정 IAM 자격 증명된 상태 스택으로 베포한 ec2 들어간 상태 s3 취약점 스터디 도메인 nmap 자격 증명 테스트(없는 상태) 의심스러운 파일 발견 의심 파일(ASCII) 의심 파일 다운로드 가능 의심파일 코드 확인 플래그 값 확인 level2 링크 확인 1. S3 버킷 생성
- AWS 콘솔을 이용하여 서울 리전에서 S3 버킷을 생성합니다.
AWS CLI 사용:
Prerequisite: AWS CloudShell에서 사용하려면 IAM 자격증명이 설정되어 있어야 합니다.
# 닉네임 설정
NICKNAME=min
# S3 버킷 생성
aws s3 mb s3://ahss-$NICKNAME --region ap-northeast-2
# S3 버킷 조회 및 퍼블릭 액세스 차단 기본 설정 확인
aws s3 ls
aws s3api get-public-access-block --bucket ahss-$NICKNAME | jqs3 버킷 생성 확인 2. 퍼블릭 액세스 차단 설정 변경
- AWS 콘솔에서 '모든 퍼블릭 액세스 차단' 옵션을 해제하고 변경 사항을 저장합니다.
S3 디폴트 세팅 실습을 위한 설정 설정을 Cli 환경에서 확인 3. 버킷에 텍스트 파일 업로드
- AWS 콘솔 혹은 AWS CLI를 사용하여 버킷에 텍스트 파일 3개를 업로드합니다.
# 파일 생성
echo "memo1" > memo1.txt
echo "memo2" > memo2.txt
echo "memo3" > memo3.txt
# S3로 업로드
aws s3 cp memo1.txt s3://ahss-$NICKNAME
aws s3 cp memo2.txt s3://ahss-$NICKNAME
aws s3 cp memo3.txt s3://ahss-$NICKNAME
# 파일 확인
aws s3 ls s3://ahss-$NICKNAME --recursive --human-readable --summarize파일 생성 파일 업로드 2가지 파일 확인 방식 객체 URL 확인 객체 URL 4. EC2에서 버킷 탐색
- EC2 인스턴스에서 AWS CLI를 사용하여 생성된 버킷을 탐색합니다.
NICKNAME=min
aws s3 ls s3://ahss-$NICKNAME --human-readable2우리가 만든 파일로 S3 설정 확인 5. 객체 소유권 설정 변경
- AWS 콘솔에서 권한 섹션으로 이동하여 'ACL 활성화'와 '버킷 소유자 선호' 옵션을 활성화합니다.
취약한 s3 세팅 6. 액세스 제어 목록(ACL) 편집
[AWS 콘솔] 권한 → ACL(액세스 제어 목록) 편집 : 모든사람(퍼블릭 액세스) - 객체 (Check 나열) → ‘변경 사항 저장’
모든 사람이 엑세스 취약한 상태로 바꿈 7. EC2에서 버킷 탐색 및 객체 복사
- EC2 인스턴스에서 AWS CLI를 사용하여 버킷 내의 객체를 복사합니다.
aws s3 cp s3://ahss-$NICKNAME/memo1.txt . --no-sign-request
cp 실패 memo1(모든 사람 읽기) AWS 계정 읽기 가능 8. memo1, memo2 설정의 차이
설정의 차이 9. flaws level2 자격증명 차이
level2(자격증명 x) level2(자격증명 o) level2 파일 다운로드 가능 cat으로 파일 확인 리소스 정책 설정 Cli로 확인(정책) 정책 변경 후 다운로드 가능 AWS S3 권한 설정 및 IAM Access Analyzer 실습
1. IAM Access Analyzer 실습
IAM Access Analyzer는 리소스를 공개적으로 공유하고 있는지 아닌지를 식별하는 도구입니다. 이를 통해 미묘한 권한 설정 오류를 파악하고 이를 수정할 수 있습니다.
액세스 분석기 생성:
ANA_ARN=$(aws accessanalyzer create-analyzer --analyzer-name firstanalyzer --type ACCOUNT --output text --query arn)
echo $ANA_ARNIAM 분석 사용 S3 버킷 스캔 수행:
aws accessanalyzer start-resource-scan --analyzer-arn $ANA_ARN --resource-arn arn:aws:s3:::ahss-$NICKNAME
S3 버킷 스캔 결과 확인:
aws accessanalyzer get-analyzed-resource --analyzer-arn $ANA_ARN --resource-arn arn:aws:s3:::ahss-$NICKNAME | jq
AWS 콘솔에서 액세스 보고서 확인:
IAM 정책 확인 버킷에 대한 퍼블릭 액세스 차단 설정:
aws s3api put-public-access-block --bucket ahss-$NICKNAME --public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
퍼플릭 엑세스 변경 액세스 분석기 삭제:
실습 완료 후 분석기는 꼭 삭제해 주세요.
aws accessanalyzer delete-analyzer --analyzer-name firstanalyzer
분석 및 파일 삭제 2. 실습 완료 후 삭제
완료된 실습의 리소스를 삭제하면 AWS에서 발생하는 추가 요금을 피할 수 있습니다. 사용한 서비스의 대시보드로 이동하여 해당 리소스를 삭제하세요.
# 버킷에 객체 모두 삭제 aws s3 rm s3://ahss-$NICKNAME --recursive
# 실습에 사용한 S3 버킷 삭제 aws s3 rb s3://ahss-$NICKNAME
# 확인 aws s3 ls
버킷 삭제 - Filter Buckets : Type(Amazon S3) - 링크 ⇒ 어떤 버킷에 객체들이 있는지 탐색해보자!
# 버킷 탐색 BUCKET=**prod-emails** aws s3 ls s3://$BUCKET --human-readable --recursive --no-sign-request --summarize # 객체 다운로드 aws s3 cp s3://$BUCKET/CEM/ElenaFordCEM2021WelcomeLetter.pdf . --no-sign-request ls
# 버킷 탐색 BUCKET=**bcc-corp** aws s3 ls s3://$BUCKET --human-readable --recursive --no-sign-request --summarize
변수 설정 및 버킷 조회 AWS S3 사전 서명된 URL로 객체에 안전하게 액세스하기
AWS S3 버킷 및 객체 생성
- 자신의 PC에서 IAM 자격증명을 설정한 상태로 다음의 작업을 진행합니다.
# S3 버킷 생성
NICKNAME=min
aws s3 mb s3://ahss-$NICKNAME-presign --region ap-northeast-2
# 생성된 버킷 확인
aws s3 ls
aws s3api get-public-access-block --bucket ahss-$NICKNAME-presign | jq
# NASA에서 그림 파일 다운로드
curl https://www.nasa.gov/sites/default/files/thumbnails/image/main_image_star-forming_region_carina_nircam_final-5mb.jpg -o jameswebb.jpg
# S3로 업로드
aws s3 cp jameswebb.jpg s3://ahss-$NICKNAME-presign
# 업로드된 파일 확인
aws s3 ls s3://ahss-$NICKNAME-presign --human-readable
aws s3api list-objects --bucket ahss-$NICKNAME-presign | jqEC2 인스턴스에서 자격증명을 설정하지 않은 상태에서 다음의 작업을 진행합니다.
NICKNAME=min
aws s3 ls s3://ahss-$NICKNAME-presign --human-readable --no-sign-request
# 객체URL로 웹 접근 시도
lynx --dump https://ahss-$NICKNAME-presign.s3.ap-northeast-2.amazonaws.com/jameswebb.jpg버킷 생성, 파일 다운로드 , 업로드 사전 서명된 URL 생성 및 접근
- 자신의 PC에서 IAM 자격증명을 설정한 상태로 다음의 작업을 진행합니다.
제한시간 링크 서명된 URL 주소를 이용하면, 10분 이내에 아무 단말/PC의 웹 브라우저에서 접속 가능하다는 것을 알 수 있습니다.
10분 후 사라지는 링크 AWS S3에서 객체 메타데이터 및 HTTPS를 통한 보안 액세스 확인하기
객체의 메타데이터 확인
- 자신의 PC에서 IAM 자격증명을 설정한 상태로 아래의 작업을 진행합니다.
# 객체의 메타데이터 정보를 확인하기 위한 'head-object' 명령어 도움말 확인
aws s3api head-object help
# 특정 객체의 메타데이터 확인 (특히 ServerSideEncryption)
aws s3api head-object --bucket ahss-$NICKNAME-presign --key jameswebb.jpg | jq
# endpoint-url 옵션을 사용하여 객체의 메타데이터 확인
aws s3api head-object --bucket ahss-$NICKNAME-presign --key jameswebb.jpg --endpoint-url http://s3.ap-northeast-2.amazonaws.com
aws s3api head-object --bucket ahss-$NICKNAME-presign --key jameswebb.jpg --endpoint-url https://s3.ap-northeast-2.amazonaws.com암호화 확인 버킷 정책 설정을 통한 HTTPS 강제
- AWS 콘솔에서 S3 버킷 정책을 설정하십시오.
- 버킷 정책 설정의 '편집'을 클릭하고 아래 내용을 입력한 후 '변경 사항 저장'을 클릭합니다.
{
"Id": "S3-Security-Deny-unless-HTTPS",
"Version": "2012-10-17",
"Statement": [{
"Action": "s3:*",
"Effect": "Deny",
"Principal": "*",
"Resource": "arn:aws:s3:::ahss-<Your-Nickname>-presign/*",
"Condition": {
"Bool": {
"aws:SecureTransport": false
}
}
}]
}http 연결일 때 차단 HTTPS 보안 액세스 확인
- 자신의 PC에서 IAM 자격증명을 설정한 상태에서 아래의 작업을 진행합니다.
# endpoint-url 옵션을 사용하여 객체의 메타데이터 확인하며, HTTP와 HTTPS의 차이 확인
aws s3api head-object --bucket ahss-$NICKNAME-presign --key jameswebb.jpg --endpoint-url http://s3.ap-northeast-2.amazonaws.com
aws s3api head-object --bucket ahss-$NICKNAME-presign --key jameswebb.jpg --endpoint-url https://s3.ap-northeast-2.amazonaws.comhttp 접속시 차단 SSE-KMS 암호화 요구
- 목적: 데이터 보안을 강화하기 위해 S3 객체에 서버 측 암호화를 적용합니다.
- 개요:
- S3는 여러 암호화 방법을 제공합니다. 이 중 SSE-KMS는 AWS Key Management Service를 사용하여 데이터를 암호화합니다.
실습:
- 자신의 PC에서:
- 객체를 업로드하고 기본 암호화를 SSE-KMS(AES256)로 설정:
echo "123456789abcdefg" > textfile
aws s3api put-object --key text01 --body textfile --bucket ahss-$NICKNAME-presign
디폴트 암호화 [AWS 콘솔] 버킷 속성 → 기본 암호화 (편집) : AWS KMS(SSE-KMS), AWS KMS키 중 선택(s3), 버킷 키(활성화)
기본 암호화 변경 자신의 PC에서:
- 객체 업로드 후 암호화 확인:
echo "abcdef" > textfile3
aws s3api put-object --key text02 --body textfile3 --bucket ahss-$NICKNAME-presign | jq암호화 방식 변경 IAM 정책 실습
IAM (Identity and Access Management)을 사용하여 AWS 리소스에 대한 액세스를 제어하는 방법을 배워보겠습니다. 여기서는 S3 서비스에 액세스 할 수 있는 IAM 사용자를 생성하고 설정하는 방법을 실습해보겠습니다.
1. IAM 사용자 생성 및 설정
단계 1: 사용자 생성
# 's3user'라는 이름으로 사용자를 생성합니다.
aws iam create-user --user-name s3user단계 2: IAM 사용자 리스트 확인
aws iam list-users | jq
생성 및 리스트 단계 3: 프로그래밍 방식으로 사용자 액세스 권한 부여
# 's3user'에 대한 액세스 키를 생성합니다.
aws iam create-access-key --user-name s3user단계 4: IAM 사용자에 S3 권한 부여
# 's3user'에게 S3에 대한 전체 액세스 권한을 부여합니다.
aws iam attach-user-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccess --user-name s3user권한 및 정책 추가 2. EC2에서 IAM 사용자 자격증명 설정 및 확인
단계 1: 현재 AWS CLI 설정 확인
aws s3 ls
aws ec2 describe-vpcs단계 2: 's3user'의 자격증명 설정(실습하고 반드시 삭제- 밑에 단계에서 삭제 나올 거임)
aws configure
# 다음 정보 입력:
AWS Access Key ID [None]: AKIA5ILF2FJIQAIEV7UB
AWS Secret Access Key [None]: 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
Default region name [None]: ap-northeast-2
Default output format [None]:엑세스 키 넣기(나중에 iam 및 버킷 삭제 나옴) 단계 4: AWS CLI를 사용하여 S3 및 EC2 액세스 확인
aws s3 ls
aws ec2 describe-vpcs변경 후 변화 단계 5: S3 버킷의 퍼블릭 액세스 차단 설정 변경
aws s3api put-public-access-block --bucket ahss-$NICKNAME-presign --public-access-block-configuration \
"BlockPublicAcls=false,IgnorePublicAcls=false,BlockPublicPolicy=false,RestrictPublicBuckets=false"퍼플릭 엑서스 차단 비활성 설정 1. AWS 콘솔에서 버킷 정책 설정
버킷 정책 설정: AWS 콘솔로 가서 해당 버킷의 정책 설정으로 이동하여 '편집'을 클릭합니다. 아래의 JSON 내용을 입력 후 '변경 사항 저장'을 클릭합니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::ahss-닉네임-presign/*"
}
]
}정책 변경 정책 변경 확인 버킷 정책 확인: AWS CLI를 사용하여 설정한 버킷 정책을 확인합니다.
aws s3api get-bucket-policy --bucket ahss-$NICKNAME-presign | jq -r .Policy | jq
정책 확인(Cli) 2. 객체 다운로드 시도
자신의 PC 및 EC2에서:
# 파일을 현재 디렉토리로 복사합니다.
aws s3 cp s3://ahss-$NICKNAME-presign/jameswebb.jpg .다운로드 가능 EC2에서: 공인 IP 주소 확인하기
curl ipinfo.io
curl ipinfo.io/ip ;echoIP 확인 3. AWS 콘솔에서 IP 기반 통제 설정
버킷 정책 설정: AWS 콘솔에서 해당 버킷의 정책 설정으로 가서 '편집'을 클릭합니다. 아래 정책 내용을 입력한 후 '변경 사항 저장'을 클릭합니다. (EC2의 공인 IP 주소를 사용하세요)
{
"Statement": [
{
"Effect": "Deny",
"Principal": "*",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::ahss-닉네임-presign",
"arn:aws:s3:::ahss-닉네임-presign/*"
],
"Condition": {
"NotIpAddress": {
"aws:SourceIp": "X.X.X.X/32"
}
}
}
]
}특정 IP만 액션 허용 버킷 정책 확인: AWS CLI를 사용하여 변경한 버킷 정책을 확인합니다.
cloudshell 권한 없음 ec2에서만 가능 Amazon S3의 기본 암호화 구성을 대규모로 감사 및 AWS SDK (boto3) 사용법
이 문서는 Amazon S3의 기본 암호화 구성을 대규모로 감사하는 방법과 AWS SDK(boto3) 사용법에 대한 간략한 가이드입니다.
1. AWS SDK (boto3)
AWS SDK는 Amazon Web Services에서 제공하는 개발자 도구의 모음입니다. 이 중 Python SDK인 boto3를 사용하면 AWS의 다양한 서비스를 파이썬에서 직접 제어할 수 있습니다.
설치 및 간단한 사용 예제:
boto3 설치:
sudo python3 -m pip install boto3
boto3 설치 모든 S3 버킷 리스트 조회:
cat <<EOT > bucket-all.py
import boto3
s3 = boto3.resource('s3')
for bucket in s3.buckets.all():
print(bucket.name)
EOT
python3 bucket-all.pyboto3 실행 2. Amazon S3 버킷의 기본 암호화 구성 감사
Amazon S3 버킷의 기본 암호화 구성을 대규모로 감사하는 방법에 대한 자세한 내용은 이 블로그에서 확인할 수 있습니다.
사전 준비:
- IAM 사용자: 아래의 권한을 갖는 IAM 사용자 필요
- s3:ListAllMyBuckets
- s3:GetBucketLocation
- s3:GetEncryptionConfiguration
- kms:DescribeKey
- Python3: boto3를 실행하기 위해 필요
- S3 버킷: 감사할 버킷
검사 파일 위치 선정 검사 파일 확인 config 전송방법 규칙 생성 config 결과 규칙 삭제 iam 삭제 버킷 비우기 버킷 삭제 스택 삭제 'AHSS[1기]' 카테고리의 다른 글
4주차(9.17) : AWS WA Labs : Security (0) 2023.08.25 3주차(9.10) - 웹 취약점 및 보안 (0) 2023.08.25 2주차(9.3) : IAM 취약점 및 보안 (0) 2023.08.25 1주차(8.27): S3 취약점 및 보안 스터디 듣기 전 준비 (0) 2023.08.25 AWS 스터디 사전 준비 (0) 2023.08.24 다음글이전글이전 글이 없습니다.댓글