
S3 호환 API에서 잘못 구성된 S3 버킷을 스캔합니다!
INPUT: (1 required)
-bucket string 확인할 버킷 이름.
-bucket-file string 확인할 버킷 이름 목록이 있는 파일.
-mq RabbitMQ에 연결하여 버킷 가져오기. 구성 파일 키 "mq" 필요. 기본값: "false"
OUTPUT:
-db 결과를 Postgres 데이터베이스에 저장. 구성 파일 키 "db.uri" 필요. 기본값: "false"
-json 로그를 사람이 읽기 쉬운 형식 대신 JSON 형식으로 stdout에 출력. 기본값: "false"
OPTIONS:
-enumerate 버킷 객체 열거 (시간이 오래 걸릴 수 있음). 기본값: "false"
-provider string 객체 스토리지 제공업체: aws, custom, digitalocean, dreamhost, gcp, linode, scaleway - custom은 구성 파일 필요. 기본값: "aws"
-threads int 스캔에 사용할 스레드 수. 기본값: "4"
DEBUG:
-verbose 상세 로깅 활성화. 기본값: "false"
-version 버전 출력 기본값: "false"
구성 파일이 필요한 경우 config.yml은 다음 위치에서 검색됩니다: "." "/etc/s3scanner/" "$HOME/.s3scanner/"
이 도구가 유용하셨다면, 개발을 지원하기 위해 기부를 고려해 주세요. 이 저장소 페이지 측면 또는 FUNDING.yml에서 후원 옵션을 확인하실 수 있습니다.
tines님께 이 프로젝트의 지속적인 후원에 대해 큰 감사를 드립니다.
파일에 나열된 버킷 이름을 AWS에서 스캔하고, 모든 객체 열거
$ s3scanner -bucket-file names.txt -enumerate
GCP에서 버킷 스캔, 모든 객체 열거 및 데이터베이스에 결과 저장
$ s3scanner -provider gcp -db -bucket my-bucket -enumerate
s3scanner는 정확히 하나의 입력 유형이 필요합니다: -bucket, -bucket-file, 또는 -mq.
INPUT: (1 required)
-bucket string 확인할 버킷 이름.
-bucket-file string 확인할 버킷 이름 목록이 있는 파일.
-mq RabbitMQ에 연결하여 버킷 가져오기. 구성 파일 키 "mq" 필요. 기본값: "false"
-bucket단일 버킷 스캔
s3scanner -bucket secret_uploads
-bucket-file파일에 나열된 모든 버킷 이름 스캔
s3scanner -bucket-file names.txt
여기서 names.txt는 줄마다 버킷 이름 하나씩 포함
$ cat names.txt
bucket123
assets
image-uploads
여러 번 나열된 버킷 이름은 한 번만 스캔됩니다.
-mqRabbitMQ 서버에 연결하여 스캔할 버킷 이름이 포함된 메시지를 소비합니다.
s3scanner -mq
-mq는 mq.uri 및 mq.queue_name 구성 파일 키가 필요합니다. 예제는 구성 파일 섹션 참조.
OUTPUT:
-db 결과를 Postgres 데이터베이스에 저장. 구성 파일 키 "db.uri" 필요. 기본값: "false"
-json 로그를 사람이 읽기 쉬운 형식 대신 JSON 형식으로 stdout에 출력. 기본값: "false"
-db모든 스캔 결과를 PostgreSQL 데이터베이스에 저장
s3scanner -bucket images -db
db.uri 구성 파일 키 필요. 예제는 구성 파일 섹션 참조.-db 사용 시, -json 또는 기본 사람이 읽기 쉬운 출력 모드를 사용 중이면 결과도 콘솔에 출력됩니다.s3scanner는 데이터베이스에 연결할 때마다 Gorm의 자동 마이그레이션 기능을 실행합니다. 스키마에 Gorm이 예상하는 이름의 테이블이 이미 있으면 해당 테이블의 구조가 변경될 수 있습니다. s3scanner 결과 전용 Postgres 스키마를 생성하는 것이 좋습니다.-json스캔 결과를 콘솔에 사람이 읽기 쉬운 형식 대신 기계가 읽을 수 있는 JSON으로 출력
s3scanner -bucket images -json
이렇게 하면 콘솔에 한 줄에 하나의 JSON 객체가 출력되며, 이를 jq 또는 JSON 입력을 받는 다른 도구로 파이프할 수 있습니다.
예제: 존재하는 모든 버킷의 이름과 리전 출력
$ s3scanner -bucket-file names.txt -json | jq -r '. | select(.bucket.exists==1) | [.bucket.name, .bucket.region] | join(" - ")'
10000 - eu-west-1
10000.pizza - ap-southeast-1
images_staging - us-west-2
OPTIONS:
-enumerate 버킷 객체 열거 (시간이 오래 걸릴 수 있음). 기본값: "false"
-provider string 객체 스토리지 제공업체: aws, custom, digitalocean, dreamhost, gcp, linode, scaleway - custom은 구성 파일 필요. 기본값: "aws"
-threads int 스캔에 사용할 스레드 수. 기본값: "4"
-enumerate버킷에 저장된 모든 객체 열거. 기본적으로 s3scanner는 버킷의 권한만 확인합니다.
s3scanner -bucket attachments -enumerate
s3scanner는 1,000개 객체 단위로 "페이지"를 요청합니다. 객체 페이지가 5,000개를 초과하면 나머지는 건너뜁니다.-provider버킷 확인 시 사용할 스토리지 제공업체 이름
s3scanner -bucket assets -provider gcp
providers.custom 하위 구성 파일 키 필요-threads스캔에 사용할 스레드 수
s3scanner -bucket secret_docs -threads 8
DEBUG:
-verbose 상세 로깅 활성화. 기본값: "false"
-version 버전 출력 기본값: "false"
-verbose디버그 메시지의 상세 로깅 활성화. 이 옵션은 많은 로그를 생성하므로 버그 신고를 제출할 때가 아니면 사용하지 않는 것이 좋습니다.
s3scanner -bucket spreadsheets -verbose
-version버전 정보를 출력하고 종료
s3scanner -version
dev를 출력4개의 컨테이너를 생성하는 docker compose 파일이 포함되어 있습니다:
2개의 프로필이 구성되어 있습니다:
dev - 표준 개발 환경dev-mitm - mitmproxy와 함께 구성된 환경으로, 디버깅 또는 새 제공업체 추가 시 HTTP 트래픽을 더 쉽게 관찰할 수 있음개발 환경을 시작하려면 make dev 또는 make dev-mitm을 실행하세요. docker exec -it -w /app app_dev sh로 app 컨테이너에 진입한 후 go run .을 실행하세요.
dev-mitm 프로필을 사용하는 경우, 브라우저에서 http://127.0.0.1:8081을 열어 앱 컨테이너에서 이루어지는 HTTP 호출을 보고 조작할 수 있습니다.
구성 옵션이 필요한 플래그를 사용하는 경우, s3scanner는 다음 위치에서 config.yml을 검색합니다:
/etc/s3scanner/$HOME/.s3scanner/# -db에 필요
db:
uri: "postgresql://user:[email protected]:5432/스키마_이름"
# -mq에 필요
mq:
queue_name: "aws"
uri: "amqp://user:pass@localhost:5672"
# `-provider custom`에 필요
# address_style - 엔드포인트에서 사용하는 주소 스타일
# 타입: 문자열
# 값: "path" 또는 "vhost"
# endpoint_format - 엔드포인트 URL 형식. 리전 이름을 위한 자리 표시자로 '$REGION'을 포함해야 함
# 타입: 문자열
# insecure - SSL 오류 무시
# 타입: 부울
# regions는 최소 하나의 옵션을 포함해야 함
providers:
custom:
address_style: "path"
endpoint_format: "https://$REGION.vultrobjects.com"
insecure: false
regions:
- "ewr1"
s3scanner가 구성 파일을 파싱할 때, endpoint_format을 가져와 나열된 모든 regions에 대해 $REGION을 대체하여 엔드포인트 URL 목록을 생성합니다.
참고: S3Scanner는 현재 AWS가 아닌 서비스의 익명 사용자 권한 스캔만 지원합니다.
📚 AWS 이외의 API에 대한 자세한 정보는 프로젝트 위키에서 확인할 수 있습니다.
이 도구는 버킷에 대해 가능한 모든 정보를 얻으려고 시도하지만, 결과를 해석하는 것은 사용자의 몫입니다.
버킷의 가능한 권한:
이러한 권한 중 일부 또는 전부가 2가지 주요 사용자 그룹에 설정될 수 있습니다:
이것이 의미하는 바: 버킷이 ACL 읽기/쓰기를 허용하지 않는다고 해서 버킷에서 파일을 읽거나 쓸 수 없다는 뜻은 아닙니다. 반대로, ACL을 나열할 수 있지만 버킷에 읽기/쓰기가 불가능할 수도 있습니다.
MIT
nix-shell -p s3scanner |
| NixOS unstable | nix-shell -p s3scanner |
| 기타 - 소스에서 빌드 | git clone [email protected]:sa7mon/S3Scanner.git && cd S3Scanner && go build -o s3scanner . |