정보통신기술

클릭 하게끔 유저를 속이는 "클릭잭킹"의 현황과 대처법

o2zone 2018. 5. 15. 16:51

많은 웹의 공격 방법 중 하나는, 페이지에 투명 버튼과 보이지 않는 레이어를 배치하여, 사용자를 시각적으로 속여, 악성 아이콘이나 링크를 클릭하게하는 "클릭 잭킹"이 있다.



웹 페이지에서는 일반적인 "iframe" 태그를 사용하여 포함 된 공격의 현상과 그에 대한 대처에 대해 살펴보면...


클릭 잭킹의 대표적인 예라고 할 수있는 것이 다음과 같은 페이지의 구조이다. 이 페이지는 'iframe" 태그를 사용하여, 온라인 뱅킹 페이지를 재현 한 것으로, 보라색 "Harmless Button(무해한 버튼)"이라고 쓰여진 버튼 아래에 "Transfer everything to my Nigerian account!(전액 나이지리아 계좌로 송금한다!)"라는 숨겨진 버튼이 묻혀있다.



이러한 클릭 잭킹을 심을 때는, CSS의 "position" 속성을 사용하여 요소(=버튼)을 페이지의 전면에 표시하고, 또한 "pointer-events"속성을 지정하여 클릭시 전면에 배치한 요소를 통제시키고 뒷면에 보이지 않게 배치 된 악성 버튼을 클릭해 버리게하는 방법이 사용된다. 이번의 더미 페이지의 경우, "무해한 버튼"이라고 생각하고 클릭 한 사용자는 어느새 나이지리아 부정 계좌에 돈을 통째로 송금 해버리는 사태가 발생한다.





이 문제를 해결하려면 iframe을 전면적으로 금지하는 것이 가장 효과적이지만, 이 방법은 매우 현실적이지 않다고 볼 수있다. 그래서 JavaScript를 이용한 "프레임 버스팅" 스크립트가 사용 될 수 있다. 이것은 공격자가 심어둔 iframe을 웹 사이트에 로드되지 못하도록 하는 방법으로, 다음과 같은 스크립트를 사용하여 페이지가 로드되는지 여부를 감지를 시도한다. 검출 된 경우에는 페이지 로딩이 차단되기 때문에 클릭 잭킹의 문제를 방지할 수 있다.



그러나, 이 "프레임 버스팅"을 비활성화하는 "버스팅 프레임 버스팅"이라는 대응책이 존재한다. 이것은 브라우저에 탑재 된 XSS Filter 기능을 악용하여 프레임 버스팅을 위한 JavaScript를 무력화 시킨다는 것. 여기에서는 "onBeforeUnload"와 "sandbox"가 악용되는 경우가 많다. JavaScript를 이용한 대처법에도 일정 한 한계가 존재한다.


이 문제를 해결 할 수 있도록 하기위해 제공되는 것이 Google의 위젯 "One tap sign-up"과 "automatic sign-in"의 구조 "YOLO(You Only Login Once)"이다. 웹 사이트에 Google이 생성 한 iframe 태그를 묻어두는 것으로, 사용자는 Google 계정을 사용하여 한 번의 클릭으로 로그인 할 수있다.





그러나, YOLO를 사용해 Google 계정으로 로그인을 시도 할 때, 다음과 같이 이메일 주소 및 방문자의 이름, 프로필 사진 등의 정보가 전송된다. 이와 관련하여 Google은 "위젯 제공을 위해 필요"와 "사양대로"라는 판단을 하고 있다.



이와 같이, 클릭 잭킹에 대한 대처법은 모두 장단점이 있고, 확실한 방법은 없는 상황에 있다. 위험을 낮추는 방법으로는 다음과 같은 것을 들 수 있다.


. 페이지의 헤더 부분에 "X-Frame-Options" 또는 "Content-Security-Policy"를 포함하도록...


. 사용자 측에서 타사 Cookie를 무효화 할 것을 고려


. 브라우저 프로필을 사용하는