
Golden SAML 공격을 구현하는 도구
shimit는 Golden SAML 공격을 구현하는 Python 도구입니다. 이에 대한 자세한 내용은 다음 글에서 확인할 수 있습니다.
python .\shimit.py -h
usage: shimit.py [-h] -pk KEY [-c CERT] [-sp SP] -idp IDP -u USER [-reg REGION]
[--SessionValidity SESSION_VALIDITY] [--SamlValidity SAML_VALIDITY] -n SESSION_NAME
-r ROLES -id ARN [-o OUT_FILE] [-l LOAD_FILE] [-t TIME]
██╗ ███████╗██╗ ██╗██╗███╗ ███╗██╗████████╗ ██╗ ██╗
██╔╝ ██╔════╝██║ ██║██║████╗ ████║██║╚══██╔══╝ ██╔╝ ╚██╗
██╔╝ ███████╗███████║██║██╔████╔██║██║ ██║ ██╔╝ ╚██╗
╚██╗ ╚════██║██╔══██║██║██║╚██╔╝██║██║ ██║ ██╔╝ ██╔╝
╚██╗ ███████║██║ ██║██║██║ ╚═╝ ██║██║ ██║ ██╔╝ ██╔╝
╚═╝ ╚══════╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝
Golden SAML 공격에서 공격자는 SAML 인증을 지원하는 모든 애플리케이션에 원하는 권한으로 접근하고, 대상 애플리케이션의 어떤 사용자든 될 수 있습니다.
shimit은 사용자가 서명된 SAMLResponse 객체를 생성하고 이를 사용하여 서비스 제공자(Service Provider)에 세션을 열 수 있도록 합니다. 현재 shimit은 AWS 콘솔을 _서비스 제공자_로 지원하며, 더 많은 서비스 제공자를 지원할 예정입니다.
_SAMLResponse_의 _assertion_을 생성하고 서명한 후, shimit은 AWS의 AssumeRoleWithSAML() API를 호출합니다. 그런 다음 세션 토큰과 키가 새 세션에 적용되며, 사용자는 golden SAML을 통해 얻은 권한을 사용하여 aws cli로 작업을 수행할 수 있습니다.
필요한 모듈을 설치하려면 다음 명령을 실행하세요:
python -m pip install boto3 botocore defusedxml enum python_dateutil lxml signxml
획득한 자격 증명을 사용하려면 AWS CLI가 설치되어 있어야 합니다. Windows 또는 Linux용 CLI를 해당 링크에서 다운로드할 수 있습니다.
python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -c cert_file
-u domain\admin -n [email protected] -r ADFS-admin -r ADFS-monitor -id 123456789012
idp - ID 공급자 URL (예: http://server.domain.com/adfs/services/trust)
pk - 개인 키 파일 전체 경로 (pem 형식)
c - 인증서 파일 전체 경로 (pem 형식)
u - 사용자 및 도메인 이름 (예: domain\username, *nix에서는 \ 또는 따옴표 사용)
n - AWS의 세션 이름
r - AWS에서 원하는 역할. 여러 역할을 지원하며, 첫 번째로 지정된 역할이 가정됩니다.
id - AWS 계정 ID (예: 123456789012)
python .\shimit.py -idp http://adfs.lab.local/adfs/services/trust -pk key_file -c cert_file
-u domain\admin -n [email protected] -r ADFS-admin -r ADFS-monitor -id 123456789012 -o saml_response.xml
o - 인코딩된 SAMLResponse를 지정된 파일 경로에 출력
python .\shimit.py -l saml_response.xml
l - 지정된 파일 경로에서 SAMLResponse 로드
현재 shimit은 개념 증명(POC)으로 AWS를 서비스 제공자로 지원합니다. 다른 서비스 제공자용 새 모듈을 기여해 주시기를 적극 권장합니다.