새소식

인기 검색어

Hacking/Web

Click jacking

  • -
반응형

출처: https://portswigger.net/web-security/clickjacking

Clickjacking

사용자가 사이트의 콘텐츠를 클릭할 때 악성 사이트의 콘텐츠를 클릭하게 되는 인터페이스 기반 공격이다.

한 예로 버튼을 클릭하면 돈을 주는 사이트가 있다고 가정해 보자. 사용자는 돈을 받기 위해 버튼을 클릭했는데 자신도 모르는 사이에 다른 계좌가 돈을 받았다. 이렇게 정상적인 사이트인척 속여서 사용자도 모르게 다른 행동을 취하는 공격이 클릭재킹이다.

클릭 재킹은 iframe 내 버튼이나 겨진 링크가 포함된 웹 사이트의 기능에 따라 공격이 달라진다.

CSRF와 다른점은 CSRF의 공격 같은 경우는 사용자의 input 없이 전체 요청을 위조하지만 클릭재킹 같은 경우 사용자의 input이 있어야만 공격이 가능하다.

 

Clickjacking은 기본적으로 CSS를 조작하여 레이어를 만든다. 대상 웹 사이트를 악성 웹사이트에 오버레이 된 iframe레이어로 통합한다.

기본적인 CSS 구성은 다음과 같다.

<head>
	<style>
		#target_website {
			position:relative;
			width:128px;
			height:128px;
			opacity:0.00001;
			z-index:2;
			}
		#decoy_website {
			position:absolute;
			width:300px;
			height:400px;
			z-index:1;
			}
	</style>
</head>
...
<body>
	<div id="decoy_website">
	...decoy web content here...
	</div>
	<iframe id="target_website" src="https://vulnerable-website.com">
	</iframe>
</body>

대상 웹사이트에서 iframe을 적절한 너비및 높이 값을 설정하여 악성 웹사이트와 iframe이 정확하게 겹치도록 브라우저 내에 배치한다.

z-index는 iframe및 대상 사이트 레이어의 순서를 결정한다.

opacity값은 불투명도를 설정한다.

해당 웹 사이트가 있다.

<style>
    iframe{
       position: relative;
       width: 1000px;
       height: 700px;
       opacity: 0.1;
       z-index: 2;
    }
    div{
      position: absolute;
      top: 575px;
      left: 60px;
      z-index: 1;
     }
</style>

<div>Click me</div>
<iframe src="https://0a2f0076036a823480fa08a700e800c4.web-security-academy.net/my-account"></iframe>

iframe과 CSS를 이용하여 불투명도를 설정했다. 그리고 Click me라는 fake를 주면서 click을 하면 Delete account가 실행되게 만들었다.

그 이후 opcaity를 0.00001로 설정하면서 iframe을 거의 투명하게 만들었다. 그 결과 Click me를 클릭하면 사용자도 모르게 Delete account가 실행된다.

 

Clickjacking공격을 수월하게 하고 싶으면 Burpsuite에 Clickbandit을 사용하면 된다. 브라우저의 기능을 수행하면서 적합한 클릭재킹 오버레이가 포함된 HTML을 생성해 준다.

 

GET 매개변수를 이용하여 특정한 행동을 취하는 경우 악성 URL에 미리 GET 파라미터를 넣어서 다른 행동을 취하게 할 수 있다.

<iframe src="https://0a2f0076036a823480fa08a700e800c4.web-security-academy.net/my-account?param="></iframe>

이렇게 get param인자를 확인 후 미리 설정하면 사용자 input이 들어왔을 때  해커가 원하는 행동을 하게 만들 수 있다.

Frame busting scripts

Clickjacking은 웹 사이트가 프레이밍 될 수 있을 때마다 가능하다.

웹 브라우저에서의 일반적인 클라이언트 보호는 frame busting 또는 frame breaking script를 사용하는 것이다.

이것은 전용 javascript나 noscript와 같은 확장을 통해 구현할 수 있다.

script를 통하여 다음과 같은 동작을 수행할 수 있다.

  • 현재 application이 main인지 최상위 인지 확인하고 적용
  • 모든 frame을 보이게 설정
  • 보이지 않는 frame 클릭 방지
  • 사용자의 잠재적인 클릭재킹을 가로채고 플래그를 지정

Frame busting script는 브라우저 플랫폼마다 다르며, HTML 유연성으로 인해 일반적으로 공격자가 우회할 수 있다.

Frame busting은 javascript이며 브라우저 보안 설정으로 작동이 차단되거나 실제로 지원하지 않을 수도 있다.

그래서 효과적인 우회방법은 HTML5 iframe sandbox기능을 사용하여 우회하는 것이다.

iframe sandbox를 allow-forms, allow-scrpits로 설정하면 allow-top-navigation이 무력화되면서 iframe이 최상위 창인지 확인할 수가 없게 된다.

<iframe src="https://0a2f0076036a823480fa08a700e800c4.web-security-academy.net/my-account?param=" sandbox="allow-forms"></iframe>

Clickjacking with a DOM XSS

Clickjacking은 DOM XSS와 같이 공격을 할 수 있다.

XSS 취약점이 있다면 Clickjacking을 이용하여 미리 script를 param에 만들어두고 사용자는 버튼을 클릭할 때마다 script가 실행되게 만들 수 있다.

Multistep Clickjacking

웹 사이트에 입력을 조작하려면 여러 검증이나 입력을 한다. 그래서 하나의 iframe이 아닌 여러 개의 분할 iframe을 이용하여 사용자를 속이도록 만들 수 있다.


Prevent Clickjacking 

X-Frame-Options

X-Frame-Options header는 user에게 iframe 또는 개체 사용에 대한 제어권을 주는 header이다.

  • X-Frame-Options: deny: frame 내 웹 페이지를 포함하는 것을 금지
  • X-Frame-Options: sameorigin: 같은 origin의 웹 페이지만 포함
  • X-Frame-Options: allow-forms https://example.com: allow-forms를 사용하여 해당 웹 사이트로 이동

CSP

CSP를 이용하여 XSS 및 Clickjacking을 탐지 및 방지할 수 있다.

  • Content-Security-Policy: frame-ancestors 'self'; frame-ancestors는 X-Frame-Options 지시문과 동일하다.
  • frame-ancestors 'none': 프레이밍을 정말 방지한다.

CSP는 상위 프레임 계층 구조의 각 프레임도 검증하지만 X-Frame-Options은 최상위 프레임만 검증한다.

그래서 두 개의 header를 결합하여 사용하는 것이 안전하다.

반응형

'Hacking > Web' 카테고리의 다른 글

Web cache poisoning  (0) 2023.05.14
JWT Attacks  (1) 2023.05.02
Directory Traversal  (0) 2023.04.22
DNS Rebinding Attack  (0) 2023.04.16
SOP와 CSP  (0) 2022.05.20
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.