김승현

Bugbounty Boot Camp Chap.7 CLICKJACKING 본문

book_summary

Bugbounty Boot Camp Chap.7 CLICKJACKING

kshind 2024. 7. 26. 04:29

클릭재킹이란?

HTML의 <iframe> 태그를 활용하는 공격 기법임

<iframe>은 하나의 웹 페이지 내에 다른 웹 페이지를 삽입할 수 있도록 해주는 기능을 제공함

about:blank를 사용한 예시 이미지

 

iframe태그의 사용 예시

  • 온라인 광고
  • 인터넷 자원 임베디드
    • 동영상, 오디오 etc...

 

위처럼 유용하게 사용할 수 있으나 보안 취약점( ClickJacking)이 존재할 수 있음

-> 이를 방지하기 위해 X-Frame-Options 헤더를 설정하여 특정 사이트에서의 iframe을 제한할 수 있음

 

클릭재킹 가상 시나리오

example.com은 은행 웹사이트로, 사용자가 돈을 송금할 수 있는 페이지를 가지고 있음
https://www.example.com/transfer_money

https://www.example.com/transfer_money?recipient=RECIPIENT_ACCOUNT&amount=AMOUNT_TO_TRANSFER

파라미터 종류
  • recipient : 수취인 계좌 ID
  • amount : 송금 금액

 

위와 같은 경우 공격자가 아래의 스크립트를 글에 숨겨놓으면 버튼을 누를시 Congratulations!라는 경고창이 뜨며

ATTACKER_ACCOUNT에 1000단위의 돈을 입금하게 됨

<html>
  <body>
    <h1>Click this button to win a prize!</h1>
    <iframe src="https://www.example.com/transfer_money?recipient=ATTACKER_ACCOUNT&amount=1000" style="position:absolute; width:100%; height:100%; top:0; left:0; opacity:0; z-index:999;"></iframe>
    <button onclick="alert('Congratulations!')">Click me!</button>
  </body>
</html>
 

 

 

클릭재킹이 발생하기 위한 두 가지 조건

  1. 취약한 페이지가 사용자 대신 상태를 변경할 수 있어야 함
    • 이전의 예시처럼 송금을 하는 기능, 비밀번호를 바꾸는 등의 기능이 있어야 함
  2. 취약한 페이지가 다른 사이트의 iframe으로 프레임이 될 수 있어야 함
    • 다른 악성 페이지가 우리가 공격하고자 하는 사이트에 삽입될 수 있어야 함

 

예방법

X-Frame-Options

페이지가 iframe에서 렌더링될 수 있는지 여부를 나타내는 헤더

브라우저는 제공된 헤더의 지침을 따르며, 명시되어 있지 않으면 기본적으로 프레임이 가능하게 만듦

옵션

  1. DENY
  2. SAMEORIGIN

Content-Security-Policy

여러 코드 인젝션을 방지하기 위해 도입된 컴퓨터 보안 표준

이 헤더의 frame-ancestors를 통해 프레임 가능한 사이트를 정할 수 있음

  1. none
  2. self

+SameSite 쿠키를 사용하여 클릭재킹을 방지할 수 있음

Set-Cookie라는 헤더를 통해 사용자의 브라우저에 쿠키를 설정하도록 할 수 있음

이때 SameSite=Strict 혹은 Lax로 설정함으로서 서드파티 iframe 내에서 발생한 요청을 처리하지 않게 할 수 있음

 

클릭재킹 헌팅법

  1. 상태 변화 행위 페이지가 있는지 확인
  2. 응답 헤더 확인
  3. 취약점 확인

 

클릭재킹 방어 기법 우회

  1. 프레임 버스팅 약점 찾기
  2. 더블 프레임 기법
  3. 엣지 케이스 확