XSHM

 


1. 개요
2. 원리
3. 특징
4. 논란
4.1. 법률적인 다툼의 소지
4.2. 사용자의 사생활 침해
4.3. 보안 문제
5. 사례
6. 대응책
7. 의의
8. 외부 링크
9. 관련 문서


1. 개요


'''XSHM''' ('''CSHM'''; '''C'''ross-'''S'''ite '''H'''istory '''M'''anipulation, 이하 '''교차 사이트 히스토리 조작''')은 웹 사이트의 스크립팅을 통해 공격자가 사용자의 브라우저 히스토리를 조작하여, 사용자가 브라우저에서 뒤로가기를 통해 이전 페이지로 되돌아갈 때에 원래의 페이지 대신에 다른 페이지로 바꿔치기하는 기법이다.
'''브라우저 히스토리 조작''' (Browser History Manipulation) 또는 '''브라우저 뒤로가기 조작''' (Browser Previous Page Manipulation) 기법이라고 불리기도 한다.
이러한 기법을 사용하여 악의적으로 광고 페이지에 대한 조회수를 늘리는 것을 '''광고 납치'''라고 한다. 심각한 경우에는 해킹 수법으로써 활용되는 경우도 보고되고 있다.

2. 원리


XSHM 공격은 최근에 들어서 출몰하기 시작하였다. 광고를 통한 비즈니스 모델이 생긴 2010년대부터 유행하기 시작하였는데, 광고로 수익을 내는 사이트 운영자가 사용자들이 보다 많은 광고를 접하도록 유도하여 페이지 뷰를 늘려 자신들의 광고 수익을 늘리는 하는 방법을 모색하게 되었다. 결국 해킹 툴을 심지 않고도 다음과 같이 스크립트만으로 사이트 방문자들의 브라우저를 조작하는 기법이 생기게 되었다.
'''1'''. 사용자가 '''사이트 A'''에서 '''사이트 B'''로 이동한다. 이때 최근 히스토리는 '''A → B'''로 되어있다.
'''2'''. '''사이트 B'''에서 악의적인 스크립트를 통해 사용자의 최근 히스토리를 '''A → C → B'''로 조작한다.
'''3'''. 사용자가 뒤로가기를 할 경우에 '''사이트 A''' 대신에 '''사이트 C'''가 보인다.
'''XSHM''' 공격이 진행되는 과정
'''1'''. 사용자가 '''사이트 A'''에서 '''사이트 B'''로 이동한다. 이때 최근 히스토리는 '''A → B'''로 되어있다.
'''2'''. '''사이트 B'''에서 악의적인 스크립트를 통해 사용자의 최근 히스토리를 '''A → C → D → B'''로 조작해서 '''사이트 D'''에 광고를 넣고 '''사이트 C'''에 브라우저의 앞으로가기 버튼을 누른 효과를 주는 납치태그를 넣는다.
'''3''' 이 경우 뒤로가기로는 광고가 있는 '''사이트 D'''를 빠져나가지 못한다.
※ 단, 크롬에서는 뒤로가기 버튼을 꾹 누르거나 길게 클릭하면 10개까지도 히스토리가 보이므로 소용없을 수 있다.
'''XSHM''' 공격이 진행되는 과정 2
위와 같은 스크립트를 짜기 위하여 jQueryHTML5에서 정의된 히스토리 API를 사용한다.
히스토리 API에 있는 pushState() 함수와 replaceState() 함수를 사용하여 사용자의 히스토리를 변조할 수 있다. 이러한 함수가 포함된 스크립트를 웹 사이트에 포함시켜 사용자의 브라우저를 후킹하게 된다.

3. 특징


이 공격의 주된 타깃은 모바일 기기로 검색 엔진을 통해 웹서핑을 하는 사용자들이다. 각종 검색 엔진의 모바일 웹에서는 검색 결과와 연관된 페이지를 새 탭으로 띄워주기보다는 기존의 탭에서 바로 해당 페이지로 이동시키는데 XSHM 공격은 이런 점을 노린 것이다.
몇몇 사이트의 경우에는 이렇게해서 접속했을 때에 이전의 검색 결과가 나타난 페이지와 자신 사이의 히스토리에 사용자가 접속한 적이 없는 페이지를 끼워넣어서 뒤로가기를 했을 때에 검색 엔진으로 되돌아가는 것이 아니라 광고로 떡칠된 사이트나 불순한 내용의 사이트로 이동시킨다.
구글 검색도 예전에는 데스크탑 웹에서 다른 사이트를 새 탭을 통해 이동시켰으나 현재는 기존 탭에서 바로 해당 페이지로 이동시킨다. 이 때문에 데스크탑 웹에서도 모바일 웹에 비해서는 빈도가 적지만 여전히 XSHM 공격이 일어나고 있다.
HTML5가 상용화되면서 XSHM 공격은 더욱 빈번해졌으며 그 이전에도 jQuery를 통해 사이트 방문자들의 브라우저 히스토리를 조작하는 공격이 빈번하였다.
XSHM 공격을 하는 사이트로 인해 뒤로가기를 원래 한번해야할 것을 두번하는 정도는 양반이며... 뒤로가기를 여러번 눌러도 광고 루프에 갇히는 경우도 생긴다. 이 경우가 제일 악질인데 이전 페이지와 자신 사이의 히스토리에는 뒤로가기를 무력화시키는 스크립트로 이루어진 빈 페이지를 추가하고 사용자로 하여금 여러번 뒤로가기를 눌러도 소용없이 탭을 닫지 않는 이상에 계속해서 광고에 갇히게 되고 무한 알림 창이 뜨는 것을 목격하게 되는 상황이 발생하기도 한다. 이럴 경우 자바스크립트 실행을 중지시키고 비활성화 한 다음에 새로고침을 하면 높은 확률로 사라지니 참고할 것.

4. 논란


특정 개인이 아닌 사기업에서도 자신들의 웹 사이트를 통해 광고 수익을 추구하기 위하여 암묵적으로 XSHM 공격을 행하고 있다는 점에서 상당한 논란을 불러 일으키고 있다.

4.1. 법률적인 다툼의 소지


이러한 행위가 해당 사이트의 이용 약관에도 규정되어 있지 않고 사용자들에게 동의 조차도 구하지 않은 상황에서 버젓이 무단으로 이루어지고 있다. 법률상의 분쟁이 발생할 수 있는 여지가 매우 높다.
또한, 사용자의 브라우저에 허가없이 접근하여 히스토리를 조작하는 것은 해킹 행위로 해석 될 여지가 있다. 그리고 해킹 행위는 명백한 범죄 행위이다.

4.2. 사용자의 사생활 침해


원래 히스토리 API는 XSHM 공격을 위하여 만들어진 웹 API가 아님에도 불구하고 웹 개발자들이 자신들의 과도한 이윤 추구를 위하여 악용되고 있다. 그리고 이로 인해 브라우저의 제어권이 웹 사이트로 넘어가며 사용자들은 자신들의 브라우저에서 히스토리 목록이 악의적으로 조작당하고 원치 않거나 상당히 불순한 내용의 광고를 보게되는 정신적인 피해를 입고 있다. 사실 히스토리 API가 존재한다는 사실만으로도 사용자의 브라우저에 대한 사생활 침해 논란 및 보안 문제가 심각해질 수 밖에 없다.
위에서도 언급되었다시피 '''광고 납치''' 중에서 최악의 상황인 경우 XSHM 기법을 통해 아무리 뒤로가기를 빠르게 연타해도 광고에서 빠져나갈 수 없는 상황이 보고되고 있다.

4.3. 보안 문제


사용자의 브라우저 내에 있는 히스토리를 외부인이 마음대로 조작하는 것 자체로도 브라우저의 제어 권한에 대한 보안 문제가 심각하다고 할 수 있다. 그리고 히스토리에 대한 접근 권한을 제어할 수 있는 브라우저는 구글 크롬정도가 전부고, 거기서 막히기 전까지는 아예 존재하지 않았다.
또한, 해커들이 특정 웹 사이트를 해킹한 다음 자신들의 악성코드를 설치하는 악성 스크립트를 웹 사이트에 삽입한 다음 XSHM 공격을 통해 해당 악성코드를 유포하는 경우도 생기고 있다.

5. 사례


국내의 경우에는 언론사들의 모바일 웹 사이트에서, 해외의 경우에는 토렌트 사이트를 중심으로 암묵적으로 XSHM 공격이 빈번하게 이루어지고 있다.
  • 마루마루 - 애드가드나 애드웨어등으로 광고수익이 줄어들자 이런 선택을 한 것으로 보인다. 만화를 보고서 뒤로가기를 하면 뉴스를 빙자한 광고사이트가 나온다.
  • 위키트리
  • 국내 언론사
    • 스포츠조선 모바일 웹
    • 일요시사 모바일 웹
    • 한국일보 모바일 웹
    • 허핑턴포스트코리아 모바일 웹: 뒤로가기 시 광고 사이트는 아니지만 자사의 헤드라인을 보여주는 사이트로 바꿔치기한다.[1] 그리고 그 곳에 플로팅 광고가 덕지덕지 붙어있다.
    • 중앙일보 모바일 웹
  • 광고 사이트
    • dreamsearch.or.kr: 많은 사이트들이 모바일 버전에서 뒤로가기를 누를 경우에 이 도메인의 페이지로 리디렉션 시키기도 한다. 광고가 주로 실리는 사이트이다.
  • 성인사이트
  • 토렌트 사이트

6. 대응책


현재까지는 데스크탑 버전 및 모바일 버전의 구글 크롬 (버전 73.0.3683.75 이상부터 버전 79까지)에서만 대응이 가능하다. 크롬 80에서는 해당 기능이 삭제된 것으로 보인다.
구글 크로미움을 기반으로 한 웨일 브라우저에서 '뒤로가기 조작방지'를 활성화하여 대응이 가능하다.
삼성 인터넷 11.2 이상 버전에서도 '''원하지 않는 웹페이지 차단'''이라는 설정으로 대응이 가능하다.

구글 크롬에서 '''chrome://flags''' 주소로 이동하여 아래의 설정들을 Enable로 설정하고 해당 브라우저를 재시작한다.
'''● New history entries require a user gesture.'''
'''● 새 히스토리 지점을 추가하려면 사용자의 허가 여부가 필요합니다.'''


Require a user gesture to add a history entry. - Mac, Windows, Linux, Chrome OS, Android
히스토리 지점을 추가하기 위하여 사용자에게 허가 여부를 요청합니다. 이 설정은 Mac, Windows, Linux, Chrome OS, Android 버전의 Chrome 브라우저에서 사용 가능합니다.


#enable-history-entry-requires-user-gesture
'''● History Manipulation Intervention.'''
'''● 히스토리 제어 통제.'''


If a page does a client side redirect or adds to the history without a user gesture, then skip it on back/forward UI. – Mac, Windows, Linux, Chrome OS, Android
웹 페이지에서 사용자의 허가 여부 없이 클라이언트 쪽에서의 리디렉션이나 히스토리에 자기 자신을 추가하는 동작을 한다면, 뒤로 가기 및 앞으로 가기 UI에서 이를 무시합니다. 이 설정은 Mac, Windows, Linux, Chrome OS, Android 버전의 Chrome 브라우저에서 사용 가능합니다.


#enable-history-manipulation-intervention
'''● Framebusting requires same-origin or a user gesture.'''
'''● 프레임버스팅은 단일 출처나 사용자의 허가 여부를 필요로 합니다.'''


Don't permit an iframe to navigate the top level browsing context unless they are same-origin or the iframe is processing a user gesture. – Mac, Windows, Linux, Chrome OS, Android
iframe 코드가 단일 출처가 아니거나 사용자의 허가 여부를 처리하지 않는다면, 그 코드가 상위 레벨의 브라우징 컨텍스트에 접근하는 것을 허용하지 않습니다. 이 설정은 Mac, Windows, Linux, Chrome OS, Android 버전의 Chrome 브라우저에서 사용 가능합니다.


#enable-framebusting-needs-sameorigin-or-usergesture
'''● User Activation v2'''
'''● 사용자 인증 v2.'''


Enable simple user activation for APIs that are otherwise controlled by user gesture tokens. – Mac, Windows, Linux, Chrome OS, Android
특정 API에 대하여 단순한 사용자 인증 절차를 활성화합니다. 이 설정을 활성화하지 않을 경우 해당 API는 사용자 허가 토큰에 의해서 제어됩니다. 이 설정은 Mac, Windows, Linux, Chrome OS, Android 버전의 Chrome 브라우저에서 사용 가능합니다.


#user-activation-v2
위에서 언급했던 방식 이외에도 XSHM 공격을 위한 다양한 변종 스크립트가 생겨나고 있기때문에 100% 완벽하게 대응하는 것은 어렵다. 그나마 이렇게라도 설정하면 해당 브라우저에서 뒤로가기를 할 때 전혀 보지도 못했던 이상한 사이트가 등장하는 일이 줄어들 것이다.

7. 의의


브라우저 히스토리를 조작하여 광고를 삽입하는 언론사의 행위에 대해서 공론화가 되자 포털 사이트를 중심으로 인터넷 언론 규정을 개편하였다.
2019년, 네이버와 카카오의 연합으로 만들어진 뉴스제휴평가위원회에서는 이용자에게 불쾌한 광고 경험을 제공하는 언론사에 대해서 해당 언론의 기사 노출을 제한하기로 하였다. 개정된 가이드라인에 따르면 기사가 나오는 페이지에 광고가 불필요하게 많거나 가독성을 해치는 경우, 뒤로가기를 할 경우에 광고가 뜨게 하는 경우 해당 언론사는 포털 검색이나 뉴스 메인에서 퇴출되는 불이익을 받게된다.
이로 인해 현재는 뒤로가기 광고를 넣는 언론사는 줄어들었지만 구글 검색을 통해 들어올 경우에는 여전히 뒤로가기 광고를 보여주는 뉴스 사이트들이 있다. 이 역시도 네이버다음의 검색 페이지를 통해서 접속하는 시나리오를 기준으로 평가하는 뉴스제휴평가위원회의 가이드라인에 다한 허점을 노린 것으로 볼 수 있고, 사용자가 네이버 및 다음 검색 페이지를 통해 접속했는지를 확인하기 위해 HTTP 참조자나 브라우징 히스토리에 접근하게 되므로 사생활 침해의 소지가 높다.

8. 외부 링크



9. 관련 문서


[1] 이는 중앙일보한겨레 등 국내 메이저 언론사 모바일 사이트도 사용하는 방식이다.