보안정보

전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.

워터링 홀(Watering Hole) 공격의 위험성

2019.11.06

15,384


 

 

 

1. 개요

 

사이버 범죄자들은 특정 기업이나 조직, 개인을 해킹하기 위해서 어떤 방법을 사용할까? 메일에 악성코드를 첨부해서 전달하는 방법, 정보시스템의 취약점을 이용하는 방법, 악성 행위 유포지를 이용하는 방법 등 다양한 방법이 알려져 있다. 그 중 이번 호에서는 해킹 사건·사고의 빈번한 원인이 되는 '워터링 홀(Watering Hole)‘ 공격에 대해 알아보자. 2018년 국내 A가상화폐 거래소는 워터링 홀 공격을 빌미로 200억 원어치의 가상화폐를 도난 당했다. 경찰은 사이버 범죄자가 워터링 홀 공격을 시작으로 했다는 발표를 했다.

 

1) 워터링 홀 공격이란

 

워터링 홀 공격이란 공격대상이 자주 방문하는 홈페이지를 사전에 악성코드에 감염시킨 뒤 공격대상이 접속 할 때까지 잠복하면서 기다린다. 그리고 공격대상이 접속하면 비로서 공격을 시도하는 수법이다. 홈페이지에 접속하는 모든 사용자를 공격하기 때문에 접속하는 모든 사용자가 공격의 대상이 될 수 있다. 워터링 홀의 어원은 사자가 먹잇감을 습격하기 위해 물 웅덩이 근처에 숨어 있는 모습을 빗댄 표현이다. 먹잇감이 물을 마시기 위해 물 웅덩이로 접근하면 숨어있던 사자가 기습 사냥에 나서는 것이다. 

 

예를 들어 사이버 범죄자가 워터링 홀 공격으로 A사에 재직 중인 김씨의 컴퓨터를 해킹한다고 하자. 사이버 범죄자는 사전에 김씨가 자주 방문하는 홈페이지와 정보시스템을 조사, 분석한 후 악성코드에 감염시킨다. A사의 대표 홈페이지, 그룹웨어, 계열사 홈페이지 등이 될 수 있다. 다음으로 김씨가 홈페이지에 접속하면 잠복해있는 악성코드가 동작해 김씨 컴퓨터를 해킹하는 것이다. 대표적으로 브라우저에서 동작하는 Flash, Javascript, VBScript, ActiveX, XSS, HTML, Image 취약점 등을 공격에 사용한다. 

 

 

2) 워터링 홀 공격과정




 

3) 워터링 홀 공격요소

 

워터링 홀 공격은 인터넷 브라우저에서 동작하는 다양한 엔진들의 취약점을 이용한다.

 


 

 

2. 크로스 사이트 스크립트 취약점(Cross Site Script)을 이용한 공격 분석

 

1) 크로스 사이트 스크립트 취약점을 이용한 공격 시나리오

 

사이버 범죄자는 공격대상이 자주 방문하는 홈페이지에 크로스 사이트 스크립트 취약점을 공격한다. 취약점이 발견되면 악성 행위 스크립트를 삽입해 공격대상이 접속할 때까지 기다린다. 해당 페이지에 공격대상이 접속을 하면 악성 스크립트가 실행이 된다. 

 


 

① 사이버 범죄자는 크로스 사이트 스크립트 취약점이 존재하는 페이지에 악성 스크립트를 삽입한다.

- 악성 스크립트 구문 :

- 설명 : hook.js는 공격자 서버에서 동작하고 있는 BeEF 브라우저 후킹 공격 스크립트이다. 해당 스크립트 구문은 공격대상 PC에서 실행된다.

※ BeEF(Browser Exploitation Exploitation Framework) : 인터넷 브라우저를 이용한 여러 가지 공격 모듈을 가지고 있으며, 공격대상 PC에서 스크립트를 실행 시켜 공격한다.

 

② 피해자가 악성 스크립트가 삽입된 페이지에 접속한다.

③ 피해자 PC에서 스크립트가 실행되면서 인터넷 브라우저 후킹된다. 사이버 범죄자는 공격대상의 PC를 공격할 수 있게 된다.

 

 

2) 크로스 사이트 스크립트 취약점을 이용한 공격 분석

 

공격자는 BeEF 브라우저 후킹 도구를 동작시킨 후 공격대상이 자주 방문하는 홈페이지에 악성 스크립트 구문을 몰래 삽입한다. 공격대상이 해당 페이지에 접근할 경우 공격자에게 후킹되어 공격자는 홈페이지 로그인 쿠키(Cookie) 값을 탈취한다.​

 

 

① 공격자는 BeEF를 동작시킨다.


 

② 공격대상이 자주 가는 홈페이지 게시판에 BeEF 후킹 스크립트 구문을 몰래 삽입한다.


 

③ 공격대상이 해당 페이지에 접근한다. 아무런 증상이 없어 보이지만, 공격자의 후킹 스크립트가 실행되고 있다. (피해자 IP: 192.168.111.4)


 

④ 피해자의 인터넷 브라우저가 후킹되어 공격자의 BeEF 콘솔에 등록된다.


 

⑤ BeEF 도구를 통해서 공격대상의 브라우저 관련 정보를 확인할 수 있다.


 

⑥ 아래와 같이 BeEF 도구에 각종 해킹툴 모듈을 추가하면 수백가지 취약점으로 공격 시도할 수 있다.


 

⑦ 아래와 같이 공격자는 파해자의 세션 쿠키 정보를 탈취할 수 있다.


 

⑧ 마지막으로 세션 쿠키 정보를 위조해서 피해자 계정으로 로그인 할 수 있다.

 

 

3) 크로스 사이트 스크립트 취약점을 이용한 공격 대응 방법

 

▶ 게시물에 HTML이나 자바 스크립트에 해당되는 태그 사용을 사전에 제한

▶ 사용자가 입력한 값에 대한 필터링 작업 필요

▶ 게시물의 본문, 제목, 댓글, 검색어 입력 창, 그 외 사용자 측에서 넘어오는 값에 대해서 필터링을 수행함

▶ 입력값에 대한 필터링 로직 구현 시 공백 문자를 제거하는 trim, replace 함수를 사용하여 반드시 서버 측에서 구현되어야 함

 

※ 필터링 조치 대상 입력 값

- 스크립트 태그 : < SCRIPT >, < OBJECT >, < APPLET >, < EMBED >, < FORM >, < IFRAME > 등

- 특수문자 : <, >, ", ', &, %, %00(null) 등​

 

 

3. 인터넷 브라우저 취약점(CVE-2019-0752)을 이용한 공격 분석

 

1) 인터넷 브라우저 취약점을 이용한 공격 시나리오

 

사이버 범죄자는 인터넷 브라우저 취약점을 공격하는 홈페이지를 개설한다. 피해자가 홈페이지에 접속하면 브라우저의 취약점을 공격해 공격명령을 실행한다. 홈페이지에 접속 한 것 만으로 사이버 범죄자의 명령이 실행되는 것이다.

 


 

① 사이버 범죄자는 인터넷 브라우저 취약점을 공격하는 홈페이지를 개설하거나 피해자가 즐겨 찾는 홈페이지에 몰래 삽입한다.

② 피해자가 감염 홈페이지에 접속한다.

③ 웹 페이지의 악성코드를 인터넷 브라우저가 프로세싱 하면서 공격구문이 실행된다.

 - 악성코드 다운로드, 악성코드 실행, 계정 유출 등 다양한 공격이 가능

 

 

2) 인터넷 브라우저 취약점을 이용한 공격 분석

 

① 공격자는 인터넷 브라우저의 스크립트 엔진 취약점을 공격하는 코드를 작성해 홈페이지에 삽입한다. 해당 시나리오를 구현하기 위해서 CVE-2019-0752 취약점을 사용했다.

※ CVE-2019-0752 : 인터넷 익스플로러 10, 11버전의 VBScript 엔진의 취약점이다. 소스코드를 프로세싱 하는 과정에 메모리 취약점으로 공격 명령을 실행시킬 수 있다.

 

② 피해자가 해당 홈페이지에 접속하면 인터넷 브라우저가 스크립트 엔진을 실행하면서 공격자의 공격 명령이 실행된다.

※ 피해자 PC 정보 : 윈도우 10, 인터넷 익스플로러 11 사용

 

③ 취약점을 이용해 파워쉘을 실행한 후 윈도우 운영체제에 등록된 계정을 확인하는 공격 코드를 작성하였다. 공격대상이 홈페이지에 접속하면 자동으로 파워쉘 명령이 실행된다. 실행되는 과정은 아래와 같이 확인할 수 있다.



④ 피해자가 홈페이지에 접속한 것만으로 공격 명령이 실행되는 것을 확인할 수 있다.


 

⑤ 브라우저 취약점을 이용하면 악성코드를 다운받거나 원격제어를 하는 등의 악성 행위를 할 수 있다.

 

 

3) 인터넷 브라우저 취약점을 이용한 공격 대응 방법

 

▶ 최신 버전의 인터넷 브라우저를 사용한다.

▶ 소프트웨어 자동 업데이트 기능을 활성화한다.

▶ 운영체제의 자동 업데이트 기능을 활성화한다.

▶ 백신 프로그램의 실시간 감시, 자동 업데이트 기능을 활성화한다.

▶ 수상한 이메일에 포함된 링크를 함부로 클릭하지 않는다.

 

 

4. 결론

 

워터링 홀 공격은 사이버 범죄자들이 자주 사용하는 공격기법이다. 특정 공격대상과 불특정 다수를 노릴 수 있고 주로 알려지지 않은 취약점을 이용하기 때문에 굉장히 위협적이다. 대응하기도 쉽지 않다. 사이버 범죄자가 홈페이지의 취약점을 이용해 악성코드를 숨겨두기 때문에 사용자는 보안패치, 백신 업데이트를 하는 등의 최소한의 보안 조치가 필요하다. 하지만 근본적으로 해결하기 위해서는 소프트웨어를 개발할 때부터 취약점 점검 및 제거하는 노력으로 워터링 홀 공격에 대비해야 한다.​