클릭재킹(Clickjacking, User Interface redress attack, UI redress attack, UI redressing)은 웹 사용자가 자신이 클릭하고 있다고 인지하는 것과 다른 어떤 것을 클릭하게 속이는 악의적인 기법으로써 잠재적으로 공격자는 비밀 정보를 유출시키거나 그들의 컴퓨터에 대한 제어를 획득할 수 있게 된다.[1][2][3][4] 이것은 다양한 웹 브라우저들과 컴퓨팅 플랫폼들에서의 취약점으로서 브라우저 보안 이슈이다. 클릭재킹은 사용자의 인식 없이 실행될 수 있는 임베디드 코드나 스크립트의 형태를 갖는다.[5]
설명
클릭재킹은 보기에 위험하지 않는 특징을 갖는 HTML 웹페이지들이 예상되지 않는 행동을 수행할 수 있음로써 가능해 진다.
클릭재킹 페이지는 감춰진 링크를 사용자가 클릭함으로써 의도되지 않는 행동을 수행하게 속인다. 사용자는 실제로는 감춰진 페이지에서 행동을 수행하지만 자신은 보이는 버튼을 클릭했다고 생각한다. 감춰진 페이지는 인증 페이지일 수 있으며, 공격자는 사용자가 전혀 의도하지 않은 행동을 수행할 수 있다. 사용자가 성실하게 숨겨진 페이지에서 인증을 수행한 경우, 이후 이 행동을 공격자까지 추적하는 방법은 없다.
예시
사용자는 비디오에 링크된 이메일을 받을 수 있다. 그러나 아마존의 상품 페이지가 유효한 페이지이며 사용자가 "플레이" 버튼을 누를 때 실제로는 상품의 "구매" 버튼을 누르는 것일 수 있다.
브라우저 간의 호환되지 않는 점으로 인해 이런 공격을 기술적으로 구현하는 것은 어렵지만, BeEF나 메타스플로이트 프로젝트 같은 많은 툴들이 취약한 웹 사이트를 공격하는 거의 완전한 자동화된 익스플로잇을 제공한다. 클릭재킹은 사이트 간 스크립팅 같은 다른 웹 공격에 의해 가능해질 수 있다.[9][10]
만약 현재의 로그인 페이지의 프로토콜이 과거 암호가 저장되었던 프로토콜과 다르다면 브라우저는 자동채우기를 거부하지만, 몇몇 암호 관리자들은 안전하지 못하게 채울 수 있다. 대부분의 브라우저들은 iFrame과 URL 리다이렉션 기반 공격과 여러 디바이스 사이에 사용되는 암호 동기화에 의한 노출된 추가적인 암호를 보호하지 않는다.[12]
GuardedID는 인터넷 익스플로러와 파이어폭스[13]에서 합법적인 iFrame의 동작을 방해하는 것 없이 클릭재킹에서 보호해 준다.
Gazelle
Gazelle은 마이크로소프트 리서치의 인터넷 익스플로러에 기반한 안전한 웹 브라우저 프로젝트이다. 이것은 운영체제와 비슷한 보안 모델을 사용하며 클릭재킹에 대한 제한된 방어를 해준다.[14]
서버 측
프레임킬러
웹 사이트 소유자들은 그들이 사용자를 서버 측에서 프레임킬러 자바스크립트 스니펫을 포함한 UI 리드레싱으로부터 보호할 수 있다.[15]
이런 자바스크립트 기반 보호는 불행하게도 항상 의지할 수 있는 것은 아니다. 이것은 특히 인터넷 익스플로러[15]에서 그런데, 이러한 종류의 대책은 대상 페이지에 클릭재킹을 포함하는 디자인에 의해 우회할 수 있다.[16]
X-프레임-옵션
클릭재킹에 대한 부분적인 보호를 제공하는 새로운 HTTP 헤더 X-Frame-Options는[17][18] 2009년에 IE8에서 추가되었고 얼마 후 다른 브라우저들에도 채택되었다.[19][20][21][22] 웹사이트 소유자들에 의해 헤더는 선호되는 프레이밍 정책을 갖는다. DENY, SAMEORIGIN, 또는 ALLOW-FROM origin 값들은 각각 프레이밍, 외부 사이트에의한 프레이밍을 금지하고 또는 단지 특별한 사이트에 대한 프레이밍만 허용한다. 게다가 어떤 광고 사이트들은 그들의 페이지들의 컨텐트를 프레이밍하는 것을 허용할 목적으로 비표준 ALLOWALL 값을 리턴한다.
컨텐트 보안 정책
컨텐트 보안 정책의 frame-ancestors 지시자는 iframe나 객체들을 사용하는 잠재적으로 위험한 페이지에 의한 컨텐트의 삽입을 허용하거나 금지할 수 있다.[23]
예시
# Disallow embedding. All iframes etc. will be blank, or contain a browser specific error page.
Content-Security-Policy: frame-ancestors 'none'