클릭재킹(Clickjacking) : 클릭 한 번 했을 뿐이건만

MIN·2025년 2월 11일
0

정보보안

목록 보기
8/8

클릭재킹 공격은 10년 전부터 유행한 공격이라곤 하지만, 여전히 흔히 보이는 공격 중 하나입니다. 간단한 조치만 하면 방어하기 쉬우니 미리 예방하는게 중요합니다.

클릭 한 번으로 계정이 삭제된다면?

여러분이 어느 날 ‘무료 쿠폰 받기’ 버튼을 눌렀다고 생각해보세요. 하지만 화면 너머에서는 여러분이 클릭한 버튼이 사실 ‘계정 삭제’ 버튼이었다면 어떨까요? 아무런 경고도 없이, 클릭 한 번으로 소중한 계정이 사라져버린다면?

이것이 바로 클릭재킹(Clickjacking)입니다. 공격자는 여러분이 뭘 클릭하는지 알게 모르게 조작할 수 있습니다.


클릭재킹? 너는 뭐냐

클릭재킹은 말 그대로 사용자의 클릭을 가로채는 공격입니다. 공격자는 여러분이 정상적인 버튼을 클릭한다고 믿게 만든 후, 실제로는 숨겨진 버튼을 클릭하게 만듭니다.

이런 경험 해본 적 있나요?

“이벤트 당첨! 지금 클릭하세요!” → 버튼만 누르면 개인정보 탈취해갈거다

“비공계 인스타그램 계정 보기” → 사실은 계정 비밀번호 변경

“무료 쿠폰 받기” → 내 계정 영구 삭제!

이처럼 클릭재킹은 우리의 클릭을 조작해서 엉뚱한 일을 하도록 유도하는 해킹 기법입니다.

리의 클릭을 조작해서 엉뚱한 일을 하도록 유도하는 해킹 기법입니다.


클릭재킹은 어떻게 작동할까?

클릭재킹 공격에는 다양한 방법이 있지만, 핵심 원리는 간단합니다.

  1. 투명한 레이어 - 공격자는 <iframe>을 활용해 특정 웹사이트를 불러온 뒤, 완전히 투명하게 만듭니다.
  2. 유인용 버튼 - “무료 상품 받기” 같은 클릭을 유도하는 버튼을 화면에 배치합니다.
  3. 사용자의 클릭 조작 - 사용자는 자신의 클릭이 정상적인 버튼을 누른 것이라 믿지만, 실제로는 iframe 속 숨겨진 버튼을 클릭하게 됩니다.

실제 예제 코드:

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Clickjacking Demo</title>
    <style>
        body {
            text-align: center;
            font-family: Arial, sans-serif;
        }
        h1 {
            margin-top: 50px;
        }
        button {
            font-size: 18px;
            padding: 15px;
            background-color: #FF5722;
            color: white;
            border: none;
            cursor: pointer;
            position: relative;
            z-index: 2;
        }
        iframe {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            opacity: 0.1; /* iframe을 투명하게 설정 */
            z-index: 1;
        }
    </style>
</head>
<body>
    <h1>🎁 무료 쿠폰을 받으세요! 🎁</h1>
    <p>쿠폰을 받으려면 아래 버튼을 클릭하세요!</p>
    <button onclick="alert('축하합니다! 쿠폰이 발급되었습니다.')">쿠폰 받기</button>
    
    <!-- 실제로 클릭될 iframe (예: 계정 삭제 페이지) -->
    <iframe src="https://example.com/delete-account" frameborder="0"></iframe>
</body>
</html>

위의 예제에서는 iframe을 투명하게 설정해서, 사용자가 보이는 버튼을 클릭하면 실제로는 iframe 안의 계정 삭제 버튼이 눌리는 방식입니다.


클릭재킹의 실제 피해 사례

유명인을 이용해 URL 접근하게 하기

“저스틴 비버 때문에 그 여성이 한 믿을 수 없는 일!(I can't believe a GIRL did this because of Justin Bieber)”이라는 자극적인 url로 사용자들의 어그로를 끌고, 좋아요를 클릭하게 해 가짜 유튜브 페이지로 이동하는 사례가 있죠.

이처럼 클릭재킹은 눈에 보이는 것과 실제 동작이 다르다는 점에서 무서운 해킹 기법입니다.


클릭재킹을 방어하는 방법

클릭재킹을 막는 가장 확실한 방법은 웹사이트가 iframe으로 감싸지지 않도록 설정하는 것입니다.

🛡 1. X-Frame-Options 헤더 설정

웹사이트가 iframe으로 로드되지 않도록 설정하면 클릭재킹 공격을 방어할 수 있습니다.

X-Frame-Options: DENY

🛡 2. Content Security Policy (CSP) 적용

최신 웹 브라우저에서는 Content-Security-Policy를 사용하여 iframe을 제한할 수 있습니다.

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

🛡 3. JavaScript 기반 보호

iframe 안에서 실행될 경우 자동으로 빠져나가도록 JavaScript를 추가하는 것도 좋은 방법입니다.

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

이렇게 하면 공격자가 iframe을 활용한 클릭재킹을 시도해도 내 웹사이트가 iframe 내부에서 실행되지 않도록 방어할 수 있습니다.


클릭 한 번으로 끝날 수도 있다

클릭 한 번으로 내 계정이 사라진다면?

생각만 해도 끔찍하죠? 클릭재킹은 사용자가 클릭하는 대상과 실제로 클릭하는 것이 다르기 때문에 보안에 대한 기본 지식이 없는 사용자도 쉽게 당할 수 있는 공격입니다.

하지만 이제 여러분은 클릭재킹이 어떻게 작동하는지, 어떻게 방어해야 하는지를 알게 되었습니다.

📌 의심스러운 링크는 절대 클릭하지 마세요!
📌 "무료 상품" 같은 유혹적인 광고는 조심하세요!
📌 웹사이트 운영자는 반드시 X-Frame-Options 및 CSP를 적용하세요!

profile
코딩에 빠짐

0개의 댓글