XS-Leaks
Introduction
XS-Leaks는 Cross-site Leaks로 CSP, SOP와 같은 보안 정책을 위반하지 않으면서 다른 사이트와의 상호작용을 통해 정보를 추론하고 결과적으로 데이터를 유출할 수 있는 공격방법을 말합니다. 전체적인 느낌은 CSRF와 유사한 부분이 많이 있지만, CSRF가 사용자 대신 Action을 처리한다면, XS-Leaks는 사용자에 대한 정보를 유추하고 추론하는데 포커싱되어 있습니다.
그리고 대부분의 XS-Leaks는 웹 설계 자체의 문제인 경우가 많습니다. 웹, 웹 브라우저에서 스펙으로 정한 Cross-site간의 정책은 완벽하지 않으며 헛점을 잘 파고드는 경우 XS-Leaks이 가능한 케이스가 발생합니다. 그래서 Firerox, Chrome, Safari 등 각 브라우저사는 이에 대한 방어 메커니즘을 추가로 구현하기도 합니다.
그리고 대표적인 방어 메커니즘은 COOP입니다.
Cross-Origin-Opener-Policy: same-origin
XS Oracle
XS-Leaks에서 사용되는 정보의 조각, 파편들은 굉장히 작은 단위며 이를 Oracle이라고 부릅니다. 그래고 공격자는 반복적인 요청 등을 통해 XS Oracle을 대량으로 수집하면서 원하는 데이터를 추론합니다.
Basic example
아래는 단순히 list array를 돌면서 해당 페이지가 있는지 체크하는 로직입니다.
<script>
function httpGet(theUrl) {
var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", theUrl, false );
xmlHttp.send( null );
return xmlHttp.status;
}
const list = [
"aaa",
"bbb",
"ccc",
"about"
];
list.forEach(function(k){
console.log("https://www.hahwul.com/"+k+"/ => "+httpGet("https://www.hahwul.com/"+k+"/"))
});
</script>
이렇게 Status 코드를 통해 존재하는 페이지를 체크할 수 있죠. 만약 path가 secret한 경로라면 어떻게 될까요? 공격자가 미리 준비해둔 wordlist나 path의 패턴을 이용해서 반복적으로 요청하면서 해당 사용자의 secret 경로를 추측할 수 있습니다. 이러한걸 XS-Leaks, 그리고 여기에 사용되는 path에 대한 Status가 XS Oracles라고 합니다.
Offensive techniques
XS-Search
XS-Search는 검색 페이지 등에서 중요한 정보를 탈취할 수 있는 방법입니다. 보통 Response의 status, time 등을 측정하며 한글자씩 중요한 정보를 맞춰갑니다.
GET /search?q=1 (200 / 100ms)
GET /search?q=2 (404 / 20000ms)
위와 같이 검색 결과가 있는 경우와 없는 경우의 시간차 또는 Status가 다른 경우 반복적인 요청으로 유효한 값을 찾을 수 있습니다.
GET /search?q=a (404 / 20014ms)
GET /search?q=b (404 / 20011ms)
GET /search?q=c (404 / 20001ms)
GET /search?q=d (200 / 105ms)
...
GET /search?q=data (200 / 100ms)
이해가 쉬운 대표적인 예시는 급여 검색 시스템입니다. 만약 급여를 처리하는 어드민에 사용자별로 검색할 수 있는 기능이 있다면, 아래와 같이 검색 조건과 결과를 통해서 특정 사용자의 급여 구간을 유추할 수 있습니다.
GET /salary?user=hahwul&min=0&max=100 (404 / 20001ms)
GET /salary?user=hahwul&min=100&max=200 (404 / 20601ms)
GET /salary?user=hahwul&min=200&max=300 (200 / 104ms)
이러한 방식을 XS-Search라고 부르며, XS-Leaks에서 가장 근원이 되는 기술입니다.
More patterns
XS-Leaks의 패턴은 워낙 많기도 하고 XS-Leaks Wiki에 잘 정리되어 있어서 해당 링크를 참고하시는게 좋을 것 같습니다.
XSinator
XSinator는 XS-Leaks를 테스트하기 위한 도구로 해당 도구를 통해 각 브라우저 버전 별 XS-Leaks가 가능한 케이스를 알 수 있습니다.
Defensive techniques
XS-Leaks는 종류와 조건에 따라서 대응방법이 상이합니다. 그래도 공통적으로 SameSite Cookie, COOP, Iframe Policy 등으로 대응이 가능합니다.
- SameSite Cookie
- COOP
- CSP