클릭재킹 (Clickjacking)
쉽게 풀면
클릭재킹은 눈에 보이는 버튼 위에 투명한 유리판을 얹어놓고, 사용자가 그 유리판 아래에 숨겨진 진짜 버튼을 자기도 모르게 누르게 만드는 것과 비슷합니다. 사용자에게는 재미있는 게임 버튼이나 평범한 링크처럼 보이지만, 실제로는 그 위에 투명하게 겹쳐진 다른 사이트의 결제 버튼이나 권한 허용 버튼이 클릭되는 것입니다. 사용자는 자신이 무엇을 눌렀는지조차 인식하지 못한 채 의도치 않은 행동을 하게 됩니다.
왜 중요한가
클릭재킹은 사용자의 인지와 무관하게 동의나 결제 같은 민감한 행동을 유도할 수 있어 사용자 인터페이스 보안 연구에서 중요하게 다뤄집니다. 로그인 상태를 그대로 악용한다는 점에서 세션 관리 및 프레임 보안 정책 연구와도 밀접하게 연결됩니다.
논문에서는 이렇게 쓰입니다
iframe 삽입을 막는 방어 헤더가 없어 발생한 클릭재킹 취약점 사례를 설명하는 문장입니다.
클라이언트 측 방어 기법의 한계와 서버 측 대응의 중요성을 설명하는 문장입니다.
조금 더 깊게 보면
클릭재킹은 주로 공격자가 만든 페이지 안에 피해 대상 페이지를 iframe으로 투명하게 삽입한 뒤, 사용자가 클릭하고 싶어할 만한 콘텐츠를 그 위에 겹쳐 배치하는 방식으로 이루어집니다. 방어책으로는 서버가 응답 헤더에 X-Frame-Options나 콘텐츠 보안 정책(CSP)의 frame-ancestors 지시어를 설정해 다른 사이트에서의 프레임 삽입 자체를 차단하는 방법이 표준적으로 사용됩니다. 공격자는 흔히 마우스 커서 아이콘을 실제 클릭 위치와 다르게 표시하는 커서재지정 기법이나, 클릭 시점에만 잠깐 숨겨진 요소를 노출시키는 방식으로 탐지를 회피하기도 합니다. 모바일 앱의 웹뷰나 브라우저 확장 프로그램에서도 유사한 방식의 위장 클릭 공격이 보고되어, 방어 범위가 전통적인 웹페이지를 넘어 확장되고 있습니다.
주의할 점
자바스크립트로 구현하는 프레임 버스팅 방어는 브라우저 설정이나 우회 기법에 따라 무력화될 수 있어, 근본적인 방어는 서버가 내려주는 HTTP 헤더 설정에 두는 것이 안전합니다.