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 μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.
SAML κ°μ
**Security Assertion Markup Language (SAML)**λ μμ΄λ΄ν°ν° μ 곡μ(IdP)κ° μλΉμ€ μ 곡μ(SP)μκ² κΆν λΆμ¬ μ격 μ¦λͺ μ μ μ‘ν μ μλλ‘ νμ¬ λ¨μΌ λ‘κ·ΈμΈ(SSO)μ μ΄μ§ν©λλ€. μ΄ μ κ·Ό λ°©μμ μ¬λ¬ μΉμ¬μ΄νΈμμ λ¨μΌ μ격 μ¦λͺ μ μ¬μ©ν μ μλλ‘ νμ¬ μ¬λ¬ λ‘κ·ΈμΈ κ΄λ¦¬λ₯Ό κ°μνν©λλ€. IdPμ SP κ°μ νμ€νλ ν΅μ μ μν΄ XMLμ νμ©νλ©°, μ¬μ©μ μ μμ μΈμ¦κ³Ό μλΉμ€ κΆν λΆμ¬λ₯Ό μ°κ²°ν©λλ€.
SAMLκ³Ό OAuth λΉκ΅
- SAMLμ κΈ°μ μ΄ SSO λ‘κ·ΈμΈ λ³΄μμ λ³΄λ€ μ μ μ΄ν μ μλλ‘ λ§μΆ€νλμ΄ μμ΅λλ€.
- OAuthλ λͺ¨λ°μΌ μΉνμ μΌλ‘ μ€κ³λμμΌλ©°, JSONμ μ¬μ©νκ³ Google λ° Twitterμ κ°μ νμ¬μ νλ ₯μΌλ‘ κ°λ°λμμ΅λλ€.
SAML μΈμ¦ νλ¦
μμΈν λ΄μ©μ https://epi052.gitlab.io/notes-to-self/blog/2019-03-07-how-to-test-saml-a-methodology/μ μ 체 κ²μλ¬Όμ νμΈνμΈμ. λ€μμ μμ½μ λλ€:
SAML μΈμ¦ νλ‘μΈμ€λ μ¬λ¬ λ¨κ³λ‘ ꡬμ±λμ΄ μμΌλ©°, μ€ν€λ§μ μ€λͺ λμ΄ μμ΅λλ€:

- 리μμ€ μ κ·Ό μλ: μ¬μ©μκ° λ³΄νΈλ 리μμ€μ μ κ·Όνλ €κ³ ν©λλ€.
- SAML μμ² μμ±: SPλ μ¬μ©μλ₯Ό μΈμνμ§ λͺ»νκ³ SAML μμ²μ μμ±ν©λλ€.
- IdPλ‘ λ¦¬λλ μ : μ¬μ©μλ IdPλ‘ λ¦¬λλ μ λλ©°, SAML μμ²μ μ¬μ©μμ λΈλΌμ°μ λ₯Ό ν΅ν΄ μ λ¬λ©λλ€.
- IdPκ° μμ² μμ : IdPλ SAML μμ²μ μμ ν©λλ€.
- IdPμμ μΈμ¦: IdPλ μ¬μ©μλ₯Ό μΈμ¦ν©λλ€.
- μ¬μ©μ κ²μ¦: IdPλ μμ²λ 리μμ€μ μ κ·Όν μ μλ μ¬μ©μμ μ λΉμ±μ κ²μ¦ν©λλ€.
- SAML μλ΅ μμ±: IdPλ νμν μ£Όμ₯μ ν¬ν¨ν SAML μλ΅μ μμ±ν©λλ€.
- SPμ ACS URLλ‘ λ¦¬λλ μ : μ¬μ©μλ SPμ Assertion Consumer Service (ACS) URLλ‘ λ¦¬λλ μ λ©λλ€.
- SAML μλ΅ κ²μ¦: ACSλ SAML μλ΅μ κ²μ¦ν©λλ€.
- 리μμ€ μ κ·Ό νμ©: μ²μ μμ²ν 리μμ€μ λν μ κ·Όμ΄ νμ©λ©λλ€.
SAML μμ² μμ
μ¬μ©μκ° https://shibdemo-sp1.test.edu/secure/μμ 보μ 리μμ€μ μ κ·Όμ μμ²νλ μλ리μ€λ₯Ό κ³ λ €ν΄ λ³΄μΈμ. SPλ μΈμ¦μ΄ μμμ μΈμνκ³ SAML μμ²μ μμ±ν©λλ€:
GET /secure/ HTTP/1.1
Host: shibdemo-sp1.test.edu
...
μμ SAML μμ²μ λ€μκ³Ό κ°μ΅λλ€:
<?xml version="1.0"?>
<samlp:AuthnRequest ...
</samlp:AuthnRequest>
μ΄ μμ²μ μ£Όμ μμλ λ€μκ³Ό κ°μ΅λλ€:
- AssertionConsumerServiceURL: IdPκ° μΈμ¦ ν SAML μλ΅μ λ³΄λΌ μμΉλ₯Ό μ§μ ν©λλ€.
- Destination: μμ²μ΄ μ μ‘λλ IdPμ μ£Όμμ λλ€.
- ProtocolBinding: SAML νλ‘ν μ½ λ©μμ§μ μ μ‘ λ°©λ²μ μ μν©λλ€.
- saml:Issuer: μμ²μ μμν μν°ν°λ₯Ό μλ³ν©λλ€.
SAML μμ² μμ± ν, SPλ 302 redirectλ‘ μλ΅νμ¬ λΈλΌμ°μ λ₯Ό SAML μμ²μ΄ HTTP μλ΅μ Location ν€λμ μΈμ½λ©λ IdPλ‘ μλ΄ν©λλ€. RelayState λ§€κ°λ³μλ κ±°λ μ λ°μ κ±Έμ³ μν μ 보λ₯Ό μ μ§νμ¬ SPκ° SAML μλ΅μ μμ ν λ μ΄κΈ° 리μμ€ μμ²μ μΈμνλλ‘ ν©λλ€. SAMLRequest λ§€κ°λ³μλ μμ XML μ‘°κ°μ μμΆ λ° μΈμ½λ©λ λ²μ μΌλ‘, Deflate μμΆ λ° base64 μΈμ½λ©μ μ¬μ©ν©λλ€.
SAML μλ΅ μμ
μ 체 SAML μλ΅μ μ¬κΈ°μμ νμΈν μ μμ΅λλ€. μλ΅μ μ£Όμ κ΅¬μ± μμλ λ€μκ³Ό κ°μ΅λλ€:
- ds:Signature: μ΄ μΉμ
μ XML μλͺ
μΌλ‘, μ΄μ€μ
λ°νμμ 무결μ±κ³Ό μ§μ μ±μ 보μ₯ν©λλ€. μμμ SAML μλ΅μλ λ©μμ§μ©κ³Ό μ΄μ€μ
μ© λ κ°μ
ds:Signatureμμκ° ν¬ν¨λμ΄ μμ΅λλ€. - saml:Assertion: μ΄ λΆλΆμ μ¬μ©μμ μ μ λ° κΈ°ν μμ±μ λν μ 보λ₯Ό ν¬ν¨ν©λλ€.
- saml:Subject: μ΄μ€μ μ λͺ¨λ μ§μ μ μ£Όμ 주체λ₯Ό μ§μ ν©λλ€.
- saml:StatusCode: ν΄λΉ μμ²μ λν μμ μ μνλ₯Ό λνλ λλ€.
- saml:Conditions: μ΄μ€μ μ μ ν¨μ± νμ΄λ° λ° μ§μ λ μλΉμ€ μ 곡μμ κ°μ 쑰건μ μμΈν μ€λͺ ν©λλ€.
- saml:AuthnStatement: IdPκ° μ΄μ€μ μ 주체λ₯Ό μΈμ¦νμμ νμΈν©λλ€.
- saml:AttributeStatement: μ΄μ€μ μ 주체λ₯Ό μ€λͺ νλ μμ±μ ν¬ν¨ν©λλ€.
SAML μλ΅ ν, IdPμμ 302 redirectκ° ν¬ν¨λ νλ‘μΈμ€κ° μ§νλ©λλ€. μ΄λ μλΉμ€ μ 곡μμ μ΄μ€μ
μλΉμ μλΉμ€(ACS) URLλ‘μ POST μμ²μΌλ‘ μ΄μ΄μ§λλ€. POST μμ²μλ RelayState λ° SAMLResponse λ§€κ°λ³μκ° ν¬ν¨λ©λλ€. ACSλ SAML μλ΅μ μ²λ¦¬νκ³ κ²μ¦νλ μν μ ν©λλ€.
POST μμ²μ΄ μμ λκ³ SAML μλ΅μ΄ κ²μ¦λ ν, μ¬μ©μκ° μ²μ μμ²ν 보νΈλ 리μμ€μ λν μ κ·Όμ΄ νμ©λ©λλ€. μ΄λ /secure/ μλν¬μΈνΈμ λν GET μμ²κ³Ό 리μμ€μ λν μ±κ³΅μ μΈ μ κ·Όμ λνλ΄λ 200 OK μλ΅μΌλ‘ μ€λͺ
λ©λλ€.
XML μλͺ
XML μλͺ μ μ 체 XML νΈλ¦¬ λλ κ·Έ μμ νΉμ μμμ μλͺ ν μ μλ λ€μ¬λ€λ₯ν κΈ°λ₯μ κ°μ§κ³ μμ΅λλ€. μλ΅ μμλΏλ§ μλλΌ λͺ¨λ XML κ°μ²΄μ μ μ©ν μ μμ΅λλ€. μλλ XML μλͺ μ μ£Όμ μ νμ λλ€:
XML μλͺ μ κΈ°λ³Έ ꡬ쑰
XML μλͺ μ νμ μμλ‘ κ΅¬μ±λ©λλ€:
<Signature>
<SignedInfo>
<CanonicalizationMethod />
<SignatureMethod />
<Reference>
<Transforms />
<DigestMethod />
<DigestValue />
</Reference>
...
</SignedInfo>
<SignatureValue />
<KeyInfo />
<Object />
</Signature>
κ° Reference μμλ URI μμ±μΌλ‘ μλ³ν μ μλ μλͺ
λ νΉμ 리μμ€λ₯Ό λνλ
λλ€.
XML μλͺ μ μ ν
- Enveloped Signature: μ΄ μ νμ μλͺ μ μλͺ λ 리μμ€μ μμμΌλ‘, μλͺ μ΄ μλͺ λ μ½ν μΈ μ λμΌν XML ꡬ쑰 λ΄μ ν¬ν¨λμ΄ μμμ μλ―Έν©λλ€.
μμ:
<samlp:Response ... ID="..." ... >
...
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
...
</samlp:Response>
enveloped μλͺ
μμ ds:Transform μμλ enveloped-signature μκ³ λ¦¬μ¦μ ν΅ν΄ envelopedλ¨μ μ§μ ν©λλ€.
- Enveloping Signature: enveloped μλͺ κ³Ό λμ‘°μ μΌλ‘, enveloping μλͺ μ μλͺ λλ 리μμ€λ₯Ό κ°μλλ€.
μμ:
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
</ds:Signature>
- Detached Signature: μ΄ μ νμ μλͺ νλ μ½ν μΈ μ λΆλ¦¬λμ΄ μμ΅λλ€. μλͺ κ³Ό μ½ν μΈ λ λ 립μ μΌλ‘ μ‘΄μ¬νμ§λ§, λ μ¬μ΄μ λ§ν¬λ μ μ§λ©λλ€.
μμ:
<samlp:Response ... ID="..." ... >
...
</samlp:Response>
<ds:Signature>
<ds:SignedInfo>
...
<ds:Reference URI="#...">
...
</ds:Reference>
</ds:SignedInfo>
</ds:Signature>
κ²°λ‘ μ μΌλ‘, XML μλͺ μ XML λ¬Έμλ₯Ό 보νΈνλ μ μ°ν λ°©λ²μ μ 곡νλ©°, κ° μ νμ μλ‘ λ€λ₯Έ ꡬ쑰μ λ° λ³΄μ μꡬλ₯Ό μΆ©μ‘±ν©λλ€.
References
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 μ§μνκΈ°
- ꡬλ κ³ν νμΈνκΈ°!
- **π¬ λμ€μ½λ κ·Έλ£Ή λλ ν λ κ·Έλ¨ κ·Έλ£Ήμ μ°Έμ¬νκ±°λ νΈμν° π¦ @hacktricks_liveλ₯Ό νλ‘μ°νμΈμ.
- HackTricks λ° HackTricks Cloud κΉνλΈ λ¦¬ν¬μ§ν 리μ PRμ μ μΆνμ¬ ν΄νΉ νΈλ¦μ 곡μ νμΈμ.


