Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
aws-recon — 멀티스레드 AWS 인벤토리 수집 도구로, 보안 관련 리소스와 메타데이터에 중점을 둡니다. | Kitploit
도구/GitHubGitHub/joshlarsen/aws-recon
Cloud Infrastructure SecurityReconnaissanceVulnerability AnalysisScripting & AutomationConfiguration AuditingInformation GatheringCloud SecurityDevSecOpsArchived
GitHubjoshlarsen/aws-recon

aws-recon

멀티스레드 AWS 인벤토리 수집 도구로, 보안 관련 리소스와 메타데이터에 중점을 둡니다.

558501년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기

Docker Pulls Gem Version GitHub Workflow Status (branch) AWS Service Regions

AWS Recon

Ruby로 작성된 멀티스레드 AWS 보안 중심 인벤토리 수집 도구입니다.

이 도구는 대량의 AWS 리소스 속성 및 메타데이터를 효율적으로 수집하기 위해 만들어졌습니다. AWS 환경의 보안 구성 및 상태와 관련된 거의 모든 항목을 수집하는 것을 목표로 합니다.

기존 도구(예: AWS Config)는 일부 리소스 수집을 수행하지만, 보안 상태를 정확하게 측정하는 데 필요한 범위와 세부 사항(예: 상세 리소스 속성 데이터, 완전히 파싱된 정책 문서, 중첩된 리소스 관계)이 부족합니다.

AWS Recon은 자동 재시도(네트워크 안정성 또는 API 제한으로 인한), 대용량 응답 자동 페이징(API 호출당 100개 이상의 리소스), 수집 속도를 높이기 위한 멀티스레드 병렬 요청을 활용하여 대규모 계정에서 수집을 처리합니다.

프로젝트 목표

  • 사용 가능한 도구보다 더 완전한 리소스 커버리지 (특히 ECS 및 EKS)
  • 중첩된 관련 리소스를 출력에 포함한 더 세분화된 리소스 세부 정보
  • 유연한 출력 (콘솔, JSON 라인, 일반 JSON, 파일, S3 버킷, 표준 출력)
  • 효율성 (멀티스레드, 속도 제한, 자동 재시도, 자동 결과 페이징)
  • 유지보수 및 확장이 쉬움

AWS Recon을 사용하는 멋진 회사들**

  • Netflix
  • HashiCorp
  • Workday
  • Stripe
  • PayPal
  • Typeform
  • Amazon Web Services
  • Plaid
  • Expel
  • Mozilla
  • Bugcrowd
  • Dropbox
  • Pinterest
  • HackerOne
  • MuleSoft
  • Slack
  • Drata
  • Google
  • Sophos
  • Sumo Logic
  • Coalfile
  • Xero

** 사용이 보증을 의미하지는 않습니다.

설정

요구사항

AWS Recon은 ReadOnlyAccess 권한이 있는 AWS 계정 역할 또는 자격 증명이 필요합니다. 전체 AdministratorAccess는 과도한 권한이지만 작동합니다. SecurityAudit 정책은 많은 서비스에 대한 액세스가 누락되어 충분하지 않습니다.

Docker로 실행하기

Docker 19.x 이상 버전을 사용하여 아무것도 설치하지 않고 미리 빌드된 이미지를 실행합니다.

Ruby로 로컬에서 실행하기

이미 Ruby(2.6.x 또는 2.7.x)가 설치되어 있다면 Ruby gem을 설치하여 사용할 수 있습니다.

설치

AWS Recon은 Docker 컨테이너를 통해 로컬로 실행하거나 Ruby gem을 설치하여 실행할 수 있습니다.

Docker 컨테이너로 실행하려면 필요한 AWS 자격 증명을 Docker run 명령에 전달합니다. 예를 들어:

root@kitploit:~
$ docker run -t --rm \
  -e AWS_REGION \
  -e AWS_ACCESS_KEY_ID \
  -e AWS_SECRET_ACCESS_KEY \
  -e AWS_SESSION_TOKEN \
  -v $(pwd)/output.json:/recon/output.json \
  darkbitio/aws_recon:latest \
  aws_recon -v -s EC2 -r global,us-east-1,us-east-2

로컬에서 실행하려면 먼저 gem을 설치합니다:

root@kitploit:~
$ gem install aws_recon
Fetching aws_recon-0.5.17.gem
Fetching aws-sdk-3.0.1.gem
Fetching parallel-1.20.1.gem
...
Successfully installed aws-sdk-3.0.1
Successfully installed parallel-1.20.1
Successfully installed aws_recon-0.5.17

또는 bundle을 사용하여 Gemfile에 추가합니다:

root@kitploit:~
$ bundle add aws_recon
Fetching gem metadata from https://rubygems.org/
Resolving dependencies...
...
Using aws-sdk 3.0.1
Using parallel-1.20.1
Using aws_recon 0.5.17

사용법

AWS Recon은 실행 환경에서 현재 사용 가능한 모든 AWS 자격 증명을 활용합니다(요구사항 참조). 여러 계정에서 수집하는 경우 aws-vault와 같은 도구를 사용하여 다양한 자격 증명을 관리할 수 있습니다.

root@kitploit:~
$ aws-vault exec profile -- aws_recon

일반 환경 변수도 잘 작동합니다.

root@kitploit:~
$ AWS_PROFILE=<profile> aws_recon

aws-vault로 관리되는 자격 증명을 사용하여 Docker 컨테이너에서 실행 (출력은 stdout):

root@kitploit:~
$ aws-vault exec <vault_profile> -- docker run -t --rm \
  -e AWS_REGION \
  -e AWS_ACCESS_KEY_ID \
  -e AWS_SECRET_ACCESS_KEY \
  -e AWS_SESSION_TOKEN \
  darkbitio/aws_recon:latest \
  aws_recon -j -s EC2 -r global,us-east-1,us-east-2

aws-vault로 관리되는 자격 증명을 사용하여 Docker 컨테이너에서 실행하고 파일로 출력하려면 몇 가지 요구사항을 충족해야 합니다. 먼저 Docker가 지정한 경로(또는 상위 경로)에 바인드 마운트할 수 있는 액세스 권한이 필요합니다. 둘째, 출력을 저장할 빈 파일(예: output.json)을 생성해야 합니다. 이는 해당 파일 하나만 Docker 컨테이너에 마운트되기 때문입니다. 예를 들어:

빈 파일을 생성합니다.

root@kitploit:~
$ touch output.json

출력 파일을 지정하여 aws_recon 컨테이너를 실행합니다.

root@kitploit:~
$ aws-vault exec <vault_profile> -- docker run -t --rm \
  -e AWS_REGION \
  -e AWS_ACCESS_KEY_ID \
  -e AWS_SECRET_ACCESS_KEY \
  -e AWS_SESSION_TOKEN \
  -v $(pwd)/output.json:/recon/output.json \
  darkbitio/aws_recon:latest \
  aws_recon -s EC2 -v -r global,us-east-1,us-east-2

처음에는 -v 또는 --verbose 플래그를 사용하여 수집 중 상태와 활동을 확인하는 것이 좋습니다.

상세 모드에서는 콘솔 출력에 다음과 같이 표시됩니다:

root@kitploit:~
<thread>.<region>.<service>.<operation>

t 접두사는 특정 요청이 실행 중인 스레드를 나타냅니다. Region, service, operation은 현재 진행 중인 요청 작업과 위치를 나타냅니다.

root@kitploit:~
$ aws_recon -v

t0.global.EC2.describe_account_attributes
t2.global.S3.list_buckets
t3.global.Support.describe_trusted_advisor_checks
t2.global.S3.list_buckets.acl
t5.ap-southeast-1.WorkSpaces.describe_workspaces
t6.ap-northeast-1.Lightsail.get_instances
...
t2.us-west-2.WorkSpaces.describe_workspaces
t1.us-east-2.Lightsail.get_instances
t4.ap-southeast-1.Firehose.list_delivery_streams
t7.ap-southeast-1.Lightsail.get_instances
t0.ap-south-1.Lightsail.get_instances
t1.us-east-2.Lightsail.get_load_balancers
t7.ap-southeast-2.WorkSpaces.describe_workspaces
t2.eu-west-3.SageMaker.list_notebook_instances
t3.eu-west-2.SageMaker.list_notebook_instances

Finished in 46 seconds. Saving resources to output.json.

명령줄 옵션 예시

root@kitploit:~
# S3 및 EC2 글로벌 리소스와 us-east-1, us-east-2 수집

$ AWS_PROFILE=<profile> aws_recon -s S3,EC2 -r global,us-east-1,us-east-2
root@kitploit:~
# S3 및 EC2 글로벌 리소스와 us-east-1, us-east-2 수집

$ AWS_PROFILE=<profile> aws_recon --services S3,EC2 --regions global,us-east-1,us-east-2
root@kitploit:~
# 출력을 S3 버킷에 저장

$ AWS_PROFILE=<profile> aws_recon \
  --services S3,EC2 \
  --regions global,us-east-1,us-east-2 \
  --verbose \
  --s3-bucket my-recon-bucket
root@kitploit:~
# 홈 리전이 us-east-1이 아닌 경우 S3 버킷에 출력 저장

$ AWS_PROFILE=<profile> aws_recon \
  --services S3,EC2 \
  --regions global,us-east-1,us-east-2 \
  --verbose \
  --s3-bucket my-recon-bucket:us-west-2

예시 OpenCSPM 형식(NDJSON) 출력.

root@kitploit:~
$ AWS_PROFILE=<profile> aws_recon -l \
  -s S3,EC2 \
  -r global,us-east-1,us-east-2 \
  -f custom

또는

root@kitploit:~
$ AWS_PROFILE=<profile> aws_recon -j \
  -s S3,EC2 \
  -r global,us-east-1,us-east-2 \
  -f custom > output.json

오류

대부분의 경우 권한 관련 API 예외는 자동으로 무시됩니다. 이러한 오류는 일반적으로 다음 경우 중 하나로 인해 발생합니다:

  • 충분한 권한이 없는 역할 사용
  • 특정 서비스 사용을 제한하는 SCP가 있는 계정 쿼리
  • 리전/계정에서 활성화/사용 가능하지 않은 서비스 쿼리 시도

verbose 모드에서는 출력에 예외 로그가 표시됩니다:

root@kitploit:~
t2.us-east-1.EC2.describe_subnets.0
t4.us-east-1.SSM.describe_instance_information.0
t6.us-east-1.SecurityHub.InvalidAccessException   <-----
t2.us-east-1.EC2.describe_addresses.0
t4.us-east-1.SSM.describe_parameters.0
t1.us-east-1.GuardDuty.list_detectors.0

-q 명령줄 옵션을 사용하여 이러한 예외를 다시 발생시켜 액세스 문제를 더 쉽게 진단할 수 있습니다.

root@kitploit:~
Traceback (most recent call last):
arn:aws:sts::1234567890:assumed-role/role/my-audit-role is not authorized to perform:
 codepipeline:GetPipeline on resource: arn:aws:codepipeline:us-west-2:1234567890:pipeline
 (Aws::CodePipeline::Errors::AccessDeniedException)

스택 트레이스의 마지막 줄에 예외를 트리거한 정확한 API 작업이 표시됩니다. 필요한 액세스 권한을 해결할 수 없으면 -x 또는 --not-services로 해당 서비스를 제외하거나, -q 옵션을 사용하지 않고 수집을 계속 진행하세요.

스레드

AWS Recon은 전 세계 엔드포인트에 대한 많은 API 호출의 I/O 문제를 극복하기 위해 여러 스레드를 사용합니다.

IAM, Shield, Support와 같은 글로벌 서비스의 경우 요청은 멀티스레드되지 않습니다. S3 모듈은 각 버킷에 대해 완전한 메타데이터를 수집하기 위해 여러 추가 호출이 필요하므로 멀티스레드됩니다.

리전 서비스의 경우 리전의 각 서비스에 대해 스레드(스레드 한도까지)가 생성됩니다. 기본적으로 최대 8개의 스레드가 사용됩니다. 계정의 리소스가 여러 리전에 분산되어 있는 경우 -t X(X는 스레드 수)로 스레드를 늘리면 속도가 향상될 수 있습니다.

성능

AWS Recon은 새/빈 계정에서 지원되는 모든 서비스를 20개의 표준 리전( GovCloud, 중국 제외)에서 쿼리하기 위해 최소 약 2,000개의 API 호출을 수행합니다. 기본값(8)보다 많은 스레드를 활성화하면 대규모 계정에서 API 속도 제한(스로틀링)이 발생할 가능성이 매우 높습니다.

Recon은 자동으로 백오프하고 API 응답의 재시도 한도를 준수합니다. 수집 중 긴 일시 중지가 관찰되면 이런 현상일 가능성이 높습니다. -d 또는 --debug 옵션을 사용하여 수집을 재시도하고 와이어 트레이스를 관찰하여 스로틀링 여부를 확인하세요. 정기적으로 속도 제한이 발생하는 경우 더 적은 스레드를 사용하거나 AWS에 더 높은 속도 제한을 요청하는 것을 고려하세요.

옵션

대부분의 사용자는 관련 서비스 및 리전으로 수집을 제한하려고 할 것입니다. 제외 없이 실행하면 계정에 대해 활성화된 모든 리전의 모든 리소스를 수집하려고 시도합니다.

root@kitploit:~
$ aws_recon -h

AWS Recon - AWS Inventory Collector (0.5.17)

Usage: aws_recon [options]
    -r, --regions [REGIONS]          스캔할 리전, 쉼표로 구분 (기본값: 모두)
    -n, --not-regions [REGIONS]      건너뛸 리전, 쉼표로 구분 (기본값: 없음)
    -s, --services [SERVICES]        스캔할 서비스, 쉼표로 구분 (기본값: 모두)
    -x, --not-services [SERVICES]    건너뛸 서비스, 쉼표로 구분 (기본값: 없음)
    -c, --config [CONFIG]            서비스 및 리전 설정 파일 지정 (예: config.yaml)
    -b, --s3-bucket [BUCKET:REGION]  출력 파일을 S3 버킷에 쓰기 (기본값: '')
    -o, --output [OUTPUT]            출력 파일 지정 (기본값: output.json)
    -f, --format [FORMAT]            출력 형식 지정 (기본값: aws)
    -t, --threads [THREADS]          최대 스레드 지정 (기본값: 8, 최대: 128)
    -l, --json-lines                 NDJSON/JSONL 형식 출력 (기본값: false)
    -u, --user-data                  EC2 인스턴스 사용자 데이터 수집 (기본값: false)
    -z, --skip-slow                  느린 작업 건너뛰기 (기본값: false)
    -g, --skip-credential-report     IAM 자격 증명 보고서 생성 건너뛰기 (기본값: false)
    -j, --stream-output              JSON 라인을 stdout으로 스트리밍 (기본값: false)
    -v, --verbose                    클라이언트 진행 상황 및 현재 작업 출력
    -q, --quit-on-exception          API 오류 발생 시 수집 중지 (기본값: false)
    -d, --debug                      와이어 트레이스 정보로 디버그 출력
    -h, --help                       이 도움말 정보 출력

출력

출력은 항상 JSON의 한 형태입니다(JSON 라인 또는 일반 JSON). 출력은 파일(기본값)에 기록되거나 stdout(-j 사용)에 기록됩니다.

S3 버킷에 쓸 때 JSON 출력은 gzip으로 자동 압축됩니다.

수동 활성화 리전 지원

수동 활성화 리전을 활성화한 경우:

  • me-south-1 - 중동(바레인)
  • af-south-1 - 아프리카(케이프타운)
  • ap-east-1 - 아시아 태평양(홍콩)
  • eu-south-1 - 유럽(밀라노)

STS를 사용하여 계정에 역할을 수임하는 경우, 역할을 수임하는 계정에서 v2 STS 토큰을 활성화해야 해당 리전에 대해 AWS Recon을 실행할 수 있습니다.

v1 토큰은 기본적으로 사용 가능한 AWS 리전에서만 유효합니다. 이러한 토큰은 아시아 태평양(홍콩)과 같은 수동 활성화 리전에서는 작동하지 않습니다. v2 토큰은 모든 리전에서 유효합니다. 그러나 v2 토큰은 더 길며 토큰을 임시로 저장하는 시스템에 영향을 줄 수 있습니다.

정적 액세스 키/시크릿을 사용하는 경우 STS 토큰 버전에 관계없이 이러한 리전에서 수집할 수 있습니다.

지원되는 서비스 및 리소스

서비스별 현재 '커버리지'는 아래에 나열되어 있습니다. 커버리지가 없는 서비스는 향후 추가될 예정입니다. PR은 환영합니다. :)

AWS Recon은 AWS 계정의 보안 상태를 결정하는 데 관련된 모든 리소스와 메타데이터를 수집하는 것을 목표로 합니다. 그러나 실제로 리소스의 보안 상태를 검사하지는 않습니다. 이는 AWS Recon의 출력을 입력으로 사용하는 다른 도구의 역할입니다.

  • AccessAnalyzer
  • AdvancedShield
  • ApplicationAutoScaling
  • Athena
  • Backup
  • GuardDuty
  • Macie
  • Systems Manager
  • Trusted Advisor
  • ACM
  • API Gateway
  • AutoScaling
  • CodePipeline
  • CodeBuild
  • CloudFormation
  • CloudFront
  • CloudWatch

추가 커버리지

AWS Recon의 주요 동기 중 하나는 유지보수 및 확장이 쉬운 도구를 만드는 것이었습니다. 특정 서비스의 커버리지를 개선할 수 있다고 생각된다면 해당 PR을 환영합니다. Ruby에 대한 보통 수준의 친숙함을 가진 사람이라면 기존 수집기가 사용하는 패턴을 모방하여 특정 서비스를 쿼리하고 결과를 리소스 컬렉션에 추가할 수 있습니다.

개발

이 저장소를 클론합니다:

root@kitploit:~
$ git clone [email protected]:darkbitio/aws-recon.git
$ cd aws-recon

RVM을 사용하는 경우 고정 gemset을 생성합니다:

root@kitploit:~
$ rvm use 2.7.2@aws_recon_dev --create --ruby-version

bin/setup을 실행하여 의존성을 설치합니다. 그런 다음 rake test를 실행하여 테스트를 수행합니다. 실험을 위해 bin/console을 실행하여 대화형 프롬프트를 사용할 수도 있습니다.

이 gem을 로컬 머신에 설치하려면 bundle exec rake install을 실행합니다. 새 버전을 릴리스하려면 version.rb의 버전 번호를 업데이트한 다음 bundle exec rake release를 실행하면 git 태그가 생성되고 git 커밋과 태그가 푸시되며 .gem 파일이 rubygems.org로 푸시됩니다.

TODO

  • AWS SDK 스텁 리소스를 사용한 테스트 커버리지

감사의 말

AWS Recon은 다음 도구를 만든 사람들과 팀의 훌륭한 작업에서 영감을 받았습니다:

  • CloudMapper https://github.com/duo-labs/cloudmapper
  • Prowler https://github.com/toniblyx/prowler
  • CloudSploit https://github.com/cloudsploit/scans
도구 다운로드
  • CloudWatch Logs
  • CloudTrail
  • Config
  • DirectoryService
  • DirectConnect
  • DMS
  • DynamoDB
  • EC2
  • ECR
  • ECRPublic
  • ECS
  • EFS
  • EKS
  • ELB
  • EMR
  • Elasticsearch
  • ElastiCache
  • Firehose
  • FMS
  • Glacier
  • Glue
  • IAM
  • KMS
  • Kafka
  • Kinesis
  • Lambda
  • Lightsail
  • Organizations
  • RDS
  • Redshift
  • Route53
  • Route53Domains
  • S3
  • SageMaker
  • SES
  • SecretsManager
  • SecurityHub
  • ServiceQuotas
  • Shield
  • SNS
  • SQS
  • Transfer
  • VPC
  • WAF
  • WAFv2
  • Workspaces
  • Xray