1. 메타스플로잇구조, 모듈사용법 [ Rnfwoa] 신동환
목차 목차 1 MSF 개요 1 1.1 메타스플로잇 (Metasploit Framework) 란? 1 1.2 활용분야 1 1.3 MSF 에서자주쓰이는용어정리 1 2 MSF 구조 2 2.1 라이브러리 2 2.2 모듈 3 2.3 인터페이스 5 2.4 MSF 디렉터리구조 5 3 MSF 모듈사용하기 7 3.1 실습 1 7 3.2 실습 2 11 3.3 명령어를스크립트로실행하기 14 3.4 payload 설정 16 4 아미티지 18 4.1 아미티지구성도 18 4.2 피벗팅 (Pivoting) 19 4.3 피벗팅실습 19 5 메터프리터 (meterpreter) 27 5.1 메터프리터내장기능 27 5.2 리소스파일생성 27 6 메터프리터기능 28 6.1 migrate 28
목차 6.2 clearav 29 6.3 인코그니트 31 7 msf 데이터베이스 33 7.1 msfdb 기본명령어 33 7.2 msfdb 사용 33 8 기타 37 그림 / 표목차 그림 1 MSF 구조... 2 그림 2 EXPLOIT 구조... 3 그림 3 AUXILIARY 구조... 4 그림 4 MSF 디렉터리구조... 5 그림 5 MSF 공격순서... 7 그림 6 MSFCONSOLE 실행... 7 그림 7 SEARCH... 8 그림 8 USE... 8 그림 9 INFO... 9 그림 10 SHOW OPTIONS... 9 그림 11 SET... 10 그림 12 EXPLOIT... 10 그림 13 PORTSCAN... 11 그림 14 SHOW OPTIONS... 11 그림 15 SET... 12 그림 16 RUN... 12 그림 17 USE... 13 그림 18 SET... 13 그림 19 EXPLOIT... 14
목차 그림 20 한줄로실행... 14 그림 21 리소스기능... 15 그림 22 SESSIONS... 15 그림 23 PAYLOAD OPTION... 16 그림 24 PAYLOAD SET... 16 그림 25 EXPLOIT... 17 그림 26 아미티지를이용한익스플로잇구성도... 18 그림 27 실습시나리오... 19 그림 28 아미티지실행... 20 그림 29 ARMITAGE 대상시스템추가... 20 그림 30 NMAP 스캔결과... 21 그림 31 XP 스캔결과... 21 그림 32 윈도우 7 스캔결과... 22 그림 33 가능성있는익스플로잇의목록... 22 그림 34 MYSQL_MOF 공격... 23 그림 35 MYSQL_MOF 옵션설정... 23 그림 36 XP 공격성공... 24 그림 37 피벗팅기능사용... 24 그림 38 피벗설정성공... 25 그림 39 FREEFTPDD PASS 설정... 25 그림 40 공격패킷확인... 26 그림 41 리소스파일생성... 27 그림 42 리소스파일실행... 27 그림 43 메터프리터기능... 28 그림 44 MIGRATE PID... 28 그림 45 GETSYSTEM... 29 그림 46 CLEARAV 실행전... 29 그림 47 CLEARAV 실행... 29
목차 그림 48 CLEARAV 실행후... 30 그림 49 파일생성... 30 그림 50 파일업로드... 30 그림 51 레지스트리등록... 31 그림 52 컴퓨터부팅시화면... 31 그림 53 INCOGNITO 로드... 31 그림 54 현재사용할수있는계정확인... 32 그림 55 다른계정으로변경... 32 그림 56 WORKSPACE 생성... 33 그림 57 NMAP 사용... 34 그림 58 스캔결과필터링 1... 34 그림 59 스캔결과필터링 2... 35 그림 60 스캔결과필터링 3... 35 그림 61 대상 IP 지정... 36 그림 62 DB 내용 EXPORT... 36
1 MSF 개요 1.1 메타스플로잇 (Metasploit Framework) 란? 보안문제를식별하고, 취약점을완화하며보안평가기능을제공한다. 이전버전에서는 perl 과 c 로만들어짐, 3 버전부터는 ruby 로만듬 보안테스팅을위한일종의통합체계로모듈화된구조를가지고있다. 1.2 활용분야 모의해킹, 취약점진단, 제로데이진단, 취약점분석, 자동화도구개발 1.3 MSF 에서자주쓰이는용어정리 익스플로잇 : 시스템애플리케이션, 서비스등의취약점을공격하는방법 취약점 : 시스템또는스프트웨어에존재하는결함 페이로드 : 쉘코드, 최종공격목적코드 모듈 : 루비의모듈 / MSF 에서사용하는모듈 ( 기능 ) 세션 : MSF 와공격대상시스템사이에맺은연결채널 리스너 : 연결요청을기다릴수있도록해주는기능 ( 리버스커넥션 ) POC: 취약점을증명하기위해만들어진증명코드 예시 ) 닫혀있는나무문을뚫고가보고싶다. 나무문을라이터로태워서들어간다. 문이나무로되어있다는것이취약점이되고, 라이터가익스플로잇, 불이라는성분이취약점코드가되는것
2 MSF 구조 MSF 는 INTERFACE, MODULES, LIBRARY 의구조를가지고있다. 그림 1 MSF 구조 2.1 라이브러리 메타스플로잇의뼈대역할을하는핵심라이브러리들의모음 REX: 루비확장라이브러리, 프레임워크에필요한클래스와모듈을제공하는역할 Reamework Core: 모듈과플러그인에인터페이스를제공하기위한클래스모음, 렉스라이브러리에서정의한 기능을토대로구성 Framework Base: 프레임워크에서사용하는세션을구현, 코어의작업관리를위한래퍼인터페이스제공
2.2 모듈 모듈화된기능을정의한부분 Exploit: 시스템및응용프로그램의취약점을이용하는공격코드모음, 공격을진행할때대부분 플랫폼 -> 서비스 -> 코드를선택하는단계로진행이된다. - Local exploit : 취약점공격이공격대상자체에서실행됨 (ex. 랜섬웨어 ) - remote exploit: 공격자의컴퓨터에서실행되어다른컴퓨터를공격대상으로함 (ex. 백도어 ) - server side exploit: 서버에직접공격하는것 - client side exploit: (ex. 클리앙 ) 그림 2 exploit 구조
auxiliary: 페이로드를필요로하지않는공격또는정보수집을목적으로하는코드모음, 주로 scanner, gather( 정보수집 ) 을많이사용한다. 그림 3 auxiliary 구조 Post: 익스플로잇성공후대상시스템에대한추가공격을위한코드모음, 주로로컬익스플로잇에사용된다. Payload: 익스플로잇성공후대상시스템에대한추가공격을위한코드모음 - Singles: 단하나의기능을가지거나사전단계없이직접쉘획득에참여하는페이로드 - Stagers: 공격자와대상시스템을연결후 2 단계페이로드를불러오는역할을하는페이로드 (ex. 연결의기능 ) bind, reverse 를나누는기능이있다. - stages: starge 페이로드가로드해주는 2 단계페이로드 (ex. 실제공격코드삽입 ) - Stagers 와 stages 는한묶음이다. single 을사용하는것보다탐지가덜되기때문에 2 단계로나눠서사용한다.
Encoder: 페이로드의형태를변형시키는다양한알고리즘을담은코드모음, 안걸리기위해서페이로드의모양을 바꾸는데사용한다. NOP: 오직레지스터및프로세서플래그상태변화에만영향을미치는무의미한명령어들을만들어내는코드모음 2.3 인터페이스 사용자와상호작용하기위한거 msfconsole: 콘솔기반인터페이스로메타스플로잇의대부분기능을지원함 armitage: GUI 환경으로구성되어있다. msfweb: 이전버전에는존재했지만현재버전에는없다. 2.4 MSF 디렉터리구조 그림 4 MSF 디렉터리구조 data: MSF 에서사용하는데이터파일들모음 lib: 핵심라이브러리파일들을포함 (rex,core,base)l
modules: MSF 모듈파일들이위치한공간 plugins: 실시간로드가가능한플러그인코드모음 script: 미터프리터를포함한스크립트파일모음 ~scan: 익스플로잇제작을할때사용하는도구
3 MSF 모듈사용하기 그림 5 msf 공격순서 - 기본적으로위와같은순서를통해서 MSF 공격이진행이된다. 3.1 실습 1 MSF DB 연동실행 : service postgresql start, msfdb init, msfconsole 그림 6 msfconsole 실행 msfconsole 명령어 - help: 콘솔에서사용가능한명령어와그설명을확인 - search: 사용가능한모듈정보검색 - use: 특정모듈의사용을선언 - info: 모듈의세부정보를확인 - set: 모듈사용에필요한정보설정
- setg: 전역변수설정또는해제 - show: 모듈을사용하기위해필요한설정내용을확인 - exloit: 모듈실행 - sessions: 세션에대한정보를보여줌 - jobs: 현재상태를알려줌 그림 7 search - 특정한모듈을검색해본다. 그림 8 use - 특정한모듈을사용한다. 전체경로를적어줘야한다.
그림 9 info - 모듈에대한정보를살펴본다. 그림 10 show options - Required 가 YES 로되어있고 Current setting 에아무런값이없다면설정을해줘야한다. - RHOST 는공격대상의주소 (Remote host), RPORT 는공격대상의포트 (Remote port) 를의미한다.
그림 11 set - set 명령어를사용해서옵션을설정해준다. 그림 12 exploit - exploit 명령어를사용해서공격을시도했지만아무런결과가나오지않는다. - 이때우리가생각할수있는것은취약점이존재하지않는다와, MSF 의옵션을잘못설정했다고생각할수있다.
3.2 실습 2 MYSQL 취약점을가지고공격을한다. 실습을위해서구성한환경이므로알고있는정보는그냥사용할것이다. 그림 13 portscan - 어떤대상이있는지확인해보기위해서 SCANNER 를사용한다. 그중 tcp 관련스캐너를사용한다. 그림 14 show options - RHOST vs RHOSTS : s 가붙어있는경우에는여러대의 IP 를동시에검색할수가있다. (ex. 10.10.10.0/24) - THREADS 윈도우에서는 THREADS 를 10 개미만으로설정하는게좋고, 리눅스의경우에는 200 개미만으로 설정하는게좋다.
그림 15 set - 다음과같이설정을한다. 그림 16 run - run 을하게되면대상시스템에열려있는 TCP 를확인할수있다. - 잘알려져있는포트 ( 20 번 - FTP 데이터포트, 21 번 - FTP 제어포트, 80 번 - HTTP, 3306 번 - MYSQL, 3389 번 - REMOTE DESKTOP)
그림 17 use - MYSQL 포트가열려있음을확인했고 MYSQL 관련된모듈을사용한다. 그림 18 set - set 를사용해서옵션설정을한다. - show targets 명령어를이용해서 target 을확인한후에 set target ID 를이용해서대상을선택할수있다.
그림 19 exploit - 세션이정상적으로연결되어서 meterpreter 가생겼지만, 다른종류의페이로드도가능하다. - 공격을할때파란색박스와같은파일이생기므로공격을종료하기전파일을삭제해야한다. - help 명령어를통해서보면공격할수있는목록들을살펴볼수있다. 3.3 명령어를스크립트로실행하기 아래명령어와같이한줄로쭉써도공격을실행할수있다. 그림 20 한줄로실행 - 지금까지햇던공격의과정이귀찮으면한방의코드로다실행할수있다 - 나중에미터프리터코드를짤때도움이된다.
파일에저장해서실행하는방법도있다. 리소스기능을이용한다. 그림 21 리소스기능 - vi 를통해서위와같은스크립트를작성하고 -r 옵션을사용해서실행을하면된다. - 스크립트안에작성한 -z 옵션에의해서공격이성공하더라도바로 meterpreter 로연결시키지않고세션을홀딩해 놓는다. 홀딩된세션을사용하는방법 그림 22 sessions - sessions 명령어를사용해서현재연결되어있는세션을확인할수있다. - 이기능은여러개의서버에동시에공격을하고세션을유지하는데도움이된다.
3.4 payload 설정 그림 23 payload option - show options 를통해서보면기존에봣던것과는다르게 payload option 이생긴것을볼수있다. - 윈도우를대상으로공격을할때는디폴트로 payload 를설정하게된다. - LHOST, LPORT 는리버스커넥션을맺기위한주소와포트를의미한다. 그림 24 payload set - set payload 명령어를통해서원하는페이로드를지정할수있다.
- 윈도우의명령프롬프트처럼사용할수있다. 그림 25 exploit
4 아미티지 Advanced Post Exploitation 기능을제공하는 GUI 인터페이스 자동화공격기능지원 피버팅을통한내부네트워크침입가능 4.1 아미티지구성도 그림 26 아미티지를이용한익스플로잇구성도 - 정보수집및대상선정후에익스플로잇을한다. 익스플로잇이성공을하게되면후속공격을진행하게되고다른 대상을공격하기위해서현재익스플로잇이성공한시스템을피버팅을할수있다.
4.2 피벗팅 (Pivoting) 경유시스템을통해목적시스템을공격하는기법으로공격의은닉성을보장하고추적을어렵게만든다. 아미티지의경우에는피벗팅을시각적으로잘보여준다. 4.3 피벗팅실습 그림 27 실습시나리오 - kali 에서 xp(mysql) 공격하고 xp 로 7(freeftp) 을공격한다. 최종적으로공격은 kali 에서실행을하게되지만, window7 에서패킷을살펴보면 xp 에서패킷을주고받는것으로보이게된다.
아미티지실행 그림 28 아미티지실행 대상시스템추가 그림 29 Armitage 대상시스템추가 - host - add host - ip 추가 - host - import - nmap 등등으로얻을정보를임포트할수있다. - host - Nmap Scan - ip 대역을적어주면된다. - host - nmap scan - quick scan - os detect - 10.10.10.0/24
스캔결과 그림 30 nmap 스캔결과 - 스캔한결과의 PC 를화면에보여준다. 대상시스템의정보 그림 31 xp 스캔결과
그림 32 윈도우 7 스캔결과 공격방법검색 - 메뉴 -> attack -> findattack - msf 에서존재하는모든익스플로잇을대입해보고가능성있는익스플로잇을보여준다. 그림 33 가능성있는익스플로잇의목록 - 대상시스템에있는서비스를분석해서이러한공격이가능할것이다라고추측해서알려준다.
mysql_mof 공격 그림 34 mysql_mof 공격 - 저번실습에서사용했던 mysql_mof 공격으로진행 그림 35 mysql_mof 옵션설정
공격성공화면 그림 36 xp 공격성공 - 공격이성공하게되면위의그림처럼이미지가변하게된다. - 시스템에서획득한권한을명시해준다. 피벗팅기능사용 그림 37 피벗팅기능사용 - 피벗팅기능을사용하기위해서위의그림과같은옵션을사용한다.
그림 38 피벗설정성공 - 화살표가생기면피벗팅이성공된것이다. 윈도우 7 공격 (freeftp 취약점 ) 그림 39 freeftpdd pass 설정
그림 40 공격패킷확인 - kali 에서공격을시도했을때 kali 의 ip(10.10.10.4) 에서윈도우 7(10.10.10.3) 으로들어가는패킷이없는것을확인할 수있다.
5 메터프리터 (meterpreter) 다양한후속공격을지원, 인메모리 dll 인젝션스테이저를사용하는광범위한동적고급페이로드 디스크를건드리지않음, 프로세스인젝션시새로운프로세스생성안함 메터프리터는 reflective dll injection 을사용한다. 새로운프로세스를생성하지않고기존에있는프로세스에서실행이된다. 5.1 메터프리터내장기능 권한상승, pass the hash, 이벤트로그, 인코그니토, 레지스트리, 원격데스크톱접근, 패킷스니핑, 피버팅, 파일 검색, john the Ripper 5.2 리소스파일생성 msfconsole 띄워서들어가기귀찮으므로리소스파일을생성하자 그림 41 리소스파일생성 실행 그림 42 리소스파일실행
6 메터프리터기능 메터프리터에서기본적으로사용할수있는모듈 ( 익스텐션 ) 은 help 명령어를통해서확인할수있다. 그림 43 메터프리터기능 6.1 migrate 메터프리터가실행되는프로세스를변경하는기능 그림 44 migrate PID
시스템권한을획득 (getsystem) 그림 45 getsystem 6.2 clearav 이벤트로그를제거해주는기능 그림 46 clearav 실행전 그림 47 clearav 실행
그림 48 clearav 실행후 - event log 가삭제된것을확인할수있다. 업로드파일레지스트리등록 그림 49 파일생성 그림 50 파일업로드
그림 51 레지스트리등록 - reg setval -k HKML\\software\\microsoft\\windows\\currentversion\\run -v normal -d 'c:\hacked' - 시작프로그램을관리하는레지스트리에등록한다. 그림 52 컴퓨터부팅시화면 6.3 인코그니트 다른사용자의토큰을가지고와서상대방인것처럼행동하는것 인코그니트를사용하기위해서는메터프리터에서기본적으로제공하는모듈이아닌다른모듈을불러와야한다. 그림 53 incognito 로드
그림 54 현재사용할수있는계정확인 그림 55 다른계정으로변경
7 msf 데이터베이스 msf 를사용할때데이터베이스를이용해서쉽게관리를할수있다. nmap, portscan 을통해서얻은정보를데이터베이스화해서 export, import 할수있는기능을가지고있다. 7.1 msfdb 기본명령어 db_status - db 연결상태확인 hosts - 지금까지수행된내역이기록되어있다. msfdb delete - db 초기화 msfdb init - db 재시작 7.2 msfdb 사용 workspace 생성 그림 56 workspace 생성 - workspace 는 msfconsole 내에서각각의공격한정보를구분하기위해서사용한다.
nmap 실행 그림 57 nmap 사용 host, service 필터링 그림 58 스캔결과필터링 1
그림 59 스캔결과필터링 2 그림 60 스캔결과필터링 3
그림 61 대상 IP 지정 msfdb export 그림 62 db 내용 export
8 기타 CVE 파일을참고하기위한디렉터리경로 /usr/share/metasploit-framework/data/exploits -> cve 파일들이존재한다.