일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 시스템프로그래밍
- crosssitescripting
- 해킹
- 운영체제
- SQL
- 알고리즘
- sqli
- ctf
- XSS
- ubuntu
- webhackingkr
- CODEGATE
- Python
- rubiya
- CCE
- web
- MySQL
- SQLInjection
- 웹해킹
- hacking
- webhacking.kr
- Los
- SQL Injection
- 프로세스
- 상호배제
- 시스템
- Writeup
- Linux
- lordofsqlinjection
- WebHacking
- Today
- Total
One_Blog
TLS Poisoning with Server Side Request Forgery (Feat. When TLS Hack You) 본문
TLS Poisoning with Server Side Request Forgery (Feat. When TLS Hack You)
0xOne 2023. 11. 2. 22:14해당 기법은 HTTPS + SSRF 기법이다.
내가 최근에 풀게 된 Trino: Albireo 문제에서 사용된 공격기법이라서 따로 정리하며 공부하게 되었다.
Trino: Albireo는 2022 Spring GoN Open Qual CTF에 출제된 문제로, 드림핵에서도 해당 문제를 찾아볼 수 있습니다.
해당 기법에 대해서는 BlackHat USA 2020, DEF CON Safemode에서 발표된 바 있으니, 영어가 자신 있는 분들은
"When TLS Hacks You" 라는 자료를 검색하여 공부해보시기 바랍니다.
잘못된 부분이 있다면 댓글로 또는 디스코드(one3147)로 연락바랍니다.
TLS Poisoning을 공부하기 전 ...
먼저 해당 기법을 공부하기 전, 체이닝 되는 공격기법에 대해 알아보겠습니다.
해당 기법의 경우 SSRF와 DNS Rebinding Attack이 체이닝되었습니다.
먼저 SSRF에 대해 먼저 알아보겠습니다.
SSRF - Server Side Request Forgery
SSRF는 공격기법의 이름에서도 엿볼 수 있듯이, 서버 측 요청을 위조하는 공격입니다.
다양한 웹 애플리케이션에서 종종 발생하는 취약점으로, 경우에 따라 심각한 영향도를 미칠 수 있는 취약점입니다.
조금 극단적인 예를 들어서,url을 GET Query로 받아오고 해당 url에 대해 curl요청을 보내고 응답을 알려주는
사이트가 존재한다고 가정해봅시다. 일반적인 유저라면 https://www.naver.com이라던가, https://google.com와 같은
일반적인 요청을 보낼테지만, 공격자는 https://127.0.0.1을 전송하여 내부망에 접근한다던가, file:/등의 프로토콜을 활용하여
내부 파일을 유출 시키는 등의 공격을 수행할 수도 있을 것입니다.
해당 예시는 좀 극단적인 예시긴 하나, SSRF는 실제로 굉장히 다양한
웹 서비스에서 취약점으로 발생합니다. SSRF는 저 말고도 정리한 글이 많으니, 해당 글을 보고 이해가 되지 않았다면
따로 공부해보시는 것을 추천해드립니다.
DNS Rebinding Attack
저도 최근에야 알게된 공격기법인데, 이론상 간단하면서도 굉장히 강력한 공격기법입니다.
DNS Rebinding Attack은 SOP를 우회하는 공격 기법으로, 빠르고 간단하게 공격 방법을 설명드리겠습니다.
공격자는 낮은 TTL(Time To Live)를 가진 DNS 서버 하나를 구성합니다.
해당 DNS 서버에는 example.com이라는 도메인이 등록되며, example.com에는 공격자 IP, 공격대상의 IP가
가변적으로 할당됩니다.
우리가 example.com을 전송하면, 희생자는 example.com의 IP를 얻기 위해 DNS 서버로 요청을 전송합니다.
그러면 악의적인 DNS 서버는 처음에는 공격자 IP를 알려줍니다.
공격자 IP에는 악성 스크립트가 심어져 있다고 가정합니다.
잠시 후 희생자의 브라우저에서 스크립트가 실행되고, example.com에 요청을 보내고 응답을 받아옵니다.
그러나 example.com에 대한 TTL이 낮아, 희생자는 다시 IP를 얻기 위해 DNS 서버에 요청을 보냅니다.
이번에는 악의적인 DNS 서버가 공격대상의 IP를 알려주게 됩니다.
이제 다시 브라우저가 스크립트를 실행하는데, 이번에는 스크립트가 공격 대상 IP를 대상으로 실행됩니다.
희생자 입장에서는 도메인이 example.com으로 동일하기에, SOP를 어기지 않았다고 판단하여
그대로 스크립트를 실행하게 됩니다. 살짝 난해할 수 있는데, 간단히 말해서 악의적인 DNS 서버에서 특정 도메인에 대해
낮은 TTL을 설정하고, 가변적 IP를 2개 이상 할당하여 시행하는 공격기법입니다.
해당 기법도 한글로 잘 설명된 글이 많으니, 이정도만 설명하고 넘어가겠습니다.
이제 본론입니다.
TLS Poisoning with Server Side Request Forgery
부제 : HTTPS Session ID Poisoning - SSRF in TLS Protocol
일반적으로 웹 서버에서는 서버와 클라이언트 간의 통신을 보호하기 위해 SSL(TLS, TLS는 SSL 3.0의 후속 버전)을 사용합니다.
해당 글에서 TLS의 동작 방식을 모두 설명하면 글이 길어지니 공격과 관련된 부분만 설명드리겠습니다.
TLS에서는 통신을 시작할 때 TLS HandShake라는 과정이 이루어집니다.
HandShake 과정 중, 서버와 클라이언트는 서로를 확인하고 세션 키와 암호화 알고리즘을 결정짓습니다.
해당 과정이 완료되면 서버와 클라이언트 간의 메시지가 암호화됩니다.
그리고 이후에 서버는 해당 연결 정보를 기억하고 재사용하기 위해 세션 ID라는 것을 사용합니다.
이후 클라이언트가 다시 서버에 암호화된 통신을 하려고 할 때, 클라이언트는 이전 연결에서 받은 세션 ID를
`Client Hello`패킷에 포함하여
서버에게 전송합니다. 서버는 세션을 확인하고, 해당 ID와 관련된 연결 정보를 찾습니다.
서버가 해당 세션 ID의 연결 정보(세션 키, 암호화 알고리즘 등)를 찾으면,
클라이언트와 서버는 이전 연결에서 사용한 세션 키를 재사용하여 암호화된 연결을 빠르게 재설정합니다.
이로 인해 핸드셰이크 과정에서의 키 협상과 인증서 확인과 같은 단계를 건너뛸 수 있습니다.
이를 세션재개라고 부르며, 양측이 이미 사용할 알고리즘과 키를 협상했기 때문에 암호화된 통신 속도가 크게 향상됩니다.
중요한 것은 핸드셰이크 중에 클라이언트가 서버에서 제공한 세션 ID 값을 반영한다는 것입니다.
이제 공격의 단계입니다.
재연결을 위한 정보를 찾을 때 우리는 발급받은 세션 ID를 전송한다고 했습니다.
하지만 이때 세션 ID와 함께 임의의 페이로드를 전송함으로써, 서버에 SSRF 공격을 감행할 수 있습니다.
이게 어떤 말이냐면, 세션 ID란에 발급받은 세션 ID가 아닌 FTP, IRC, SMTP 등 임의의 프로토콜이나
애플리케이션 서비스에서 해석될 수 있는 명령어(페이로드)를 전송하게 되면 TLS가 요청을 받고, 후속 통신에서 해당 페이로드를
받아들이고 해석하여 처리하는 과정에서 해당 명령어(페이로드)를 유효한 명령이나 데이터로 처리하게 됩니다.
결론적으로 세션 ID에 포함시켜놓은 데이터가 애플리케이션 서비스 또는 프로토콜에서 명령어로 해석됨에 따라
SSRF 공격이 가능해지는 것입니다.
여기서 DNS Rebinding Attack을 섞어서 사용하게 되면, 희생자의 로컬 애플리케이션들에 대해 명령을 전송하고
컨트롤 하는 것이 가능해집니다. 피해자는 일반적인 방법으로 HTTPS 통신을 하고 있다고 믿고 있겠지만, 실상으로는
이미 공격자가 제어하는 데이터가 각 애플리케이션에 전송이 가능한 상태가 되는 것입니다.
이것이 HTTPS Session ID Poisoning이며, TLS Hacking via SSRF입니다.
Trino: Albireo를 풀면서 공부하게 된 내용을 정리해본 내용인데, 제가 이해한 대로 정리해봤습니다.
틀린 내용이 있다면 디스코드 one3147 또는 댓글로 알려주시기 바랍니다..!
글 읽어주셔서 감사합니다!
References
https://www.youtube.com/watch?v=udpamSmD_vU
https://www.blackhat.com/us-20/briefings/schedule/#when-tls-hacks-you-19446
https://portswigger.net/daily-swig/when-tls-hacks-you-security-friend-becomes-a-foe
https://cqureacademy.com/conference-summary/bhus2020-1-when-tls-hacks-you
https://i.blackhat.com/USA-20/Wednesday/us-20-Maddux-When-TLS-Hacks-You.pdf
'웹해킹' 카테고리의 다른 글
webhacking.kr child toctou writeup (0) | 2024.01.19 |
---|---|
webhacking.kr old4 (0) | 2024.01.16 |
HTTP/2 rapid reset _ 신속한 재설정 취약점 [CVE-2023-44487] (1) | 2023.10.14 |
EJS Server Side Template Injection 취약점 [CVE-2022-29078] (6) | 2023.10.07 |
CodeGate 2023 Web myboard WriteUp (0) | 2023.06.23 |