반응형



Clickjacking(Clickjacking)은 한 줄로 말하면:
사용자가 클릭하는 위치를 속여서,
원하지 않는 버튼을 누르게 만드는 공격
이다.
다른 이름으로:
UI Redressing
라고도 부른다.
핵심 아이디어
공격자는:
진짜 사이트를 iframe으로 숨겨놓고
그 위에 가짜 UI를 덮는다
가장 쉬운 예시
예를 들어:
"무료 쿠폰 받기"
버튼처럼 보이게 만들어놓고,
실제로는 뒤에:
은행 송금 버튼
이 iframe으로 숨어 있는 것.
사용자는 모르고 클릭
결과:
실제 은행 버튼 클릭
이 발생.
왜 가능한가?
브라우저는 기본적으로:
다른 사이트를 iframe으로 포함 가능
했기 때문.
실제 공격 구조
공격 페이지
<div class="fake-button">
무료 쿠폰 받기
</div>
<iframe
src="https://bank.com/transfer"
style="opacity:0">
</iframe>
사용자 입장
보이는 건 쿠폰 버튼
실제 클릭 대상
숨겨진 bank.com 버튼
특히 위험한 것
송금, 권한승인, 관리자 삭제, OAuth 동의
OAuth에서도 가능
예:
"Google 권한 허용"
버튼을 속여 클릭 유도 가능.
그래서 방어 매우 중요.
핵심 방어 1 — X-Frame-Options
가장 전통적.
HTTP Header:
X-Frame-Options: DENY
의미
iframe 포함 금지
옵션 종류
| 값 | 의미 |
| DENY | 완전 금지 |
| SAMEORIGIN | 같은 사이트만 허용 |
SAMEORIGIN 예시
X-Frame-Options: SAMEORIGIN
의미
우리 사이트 내부 iframe만 허용
핵심 방어 2 — CSP frame-ancestors
현대 방식.
CSP(Content Security Policy) 사용.
예:
Content-Security-Policy:
frame-ancestors 'none';
의미
어떤 사이트도 iframe 포함 불가
특정 사이트만 허용 가능
frame-ancestors
https://admin.example.com
현재는 CSP 방식 권장
왜냐면:
X-Frame-Options보다 유연
하기 때문.
iframe 자체가 나쁜 건 아님
중요.
정상 사용도 많다.
예:
- YouTube embed
- 결제창
- 지도
- 사내 포털
따라서 정책적으로 결정 필요.
실무에서 자주 놓치는 곳
관리자 페이지
특히 위험.
예:
회원 삭제 버튼
등 Clickjacking 위험.
그래서 관리자 페이지는 보통
X-Frame-Options: DENY
강하게 설정.
모바일 앱 WebView도 주의
WebView iframe 구조에서:
UI 혼동 공격
가능.
Clickjacking vs CSRF 차이
헷갈리기 쉬움.
Clickjacking
사용자 클릭을 속임
CSRF
브라우저 자동 쿠키 전송 악용
Clickjacking은 실제 클릭 필요
즉:
사용자 UI 조작
에 가깝다.
실무 추천 설정
대부분 서비스는:
X-Frame-Options: DENY
또는:
Content-Security-Policy:
frame-ancestors 'none';
사용.
Spring Security 설정
예:
http.headers(headers ->
headers.frameOptions(
frame -> frame.sameOrigin()
)
);
iframe 정말 필요한 경우만 예외 허용.
핵심 한 줄
Clickjacking은:
iframe 등을 이용해 사용자가 실제로 클릭하는 대상 UI를 숨기거나 덮어서,
원하지 않는 버튼이나 기능을 클릭하게 만드는 공격
이며,
대표 방어는:
X-Frame-Options
또는
CSP frame-ancestors
설정이다.
반응형
'system_fundamentals > security_cryptography' 카테고리의 다른 글
| Vault (0) | 2026.05.20 |
|---|---|
| Secret 관리 (0) | 2026.05.20 |
| SSRF (0) | 2026.05.19 |
| CORS (0) | 2026.05.19 |
| SameSite Cookie (0) | 2026.05.19 |
댓글