Security_RNRF
MSF 살펴보기 - 초급 과정:: MSF 이해 및 활용법 본문
* MSF(메타스플로잇) 소개
: Metasploit Framework는 오픈소스 커뮤니티와 Rapid7의 합작품으로 보안 및 IT 전문가들이 보안 문제를 식별하고, 취약점을 완화하며, 전문가 수준의 보안 평가 기능을 제공한다. 세부 기능으로는 지능형 공격, 패스워드 검사, 웹 애플리케이션 스캐닝, 사회 공학 등이 있다. 뿐만 아니라, 협업 기능을 제공해 통합 보고서를 만들어내는 것도 가능하다
-> www.metasploit.com
-> HD Moore가 개발 (Perl + C -> Ruby) + Rapid7
-> 보안 테스팅을 위한 일종의 통합 체계로 모듈화된 구조를 가지고 있음
: Framework란?
-> 소프트웨어 설계와 구현을 재사용 가능하도록 해주는 뼈대
-> 구체적이며 확장 가능한 기반 코드를 가지고, 설계자의 의도에 따르는 여러 디자인 패턴 집합으로 구성
-> 기능이 연결 되어있는 구조이기 때문에, 수정하고 싶은 부분만 수정하여도 모두 연결되어 수정되서 이용할 수 있다
: Why?
-> 광범위한 보안 테스팅 기능을 포함, 직관적인 공격 코드 개발 환경 제공, 시스템 관리자가 직접 운용 가능, 강력한 DB 연동 기능, 다양한 인터페이스... 핵심은 무료!!!
* 메타스플로잇 활용 분야
-> 모의해킹 - 특정 시스템이 얼마나 취약한지, 어떻게 취약한지, 그렇다면 어떻게 개선할 수 있는지?를 판단해주는 일련의 과정
-> 취약점 진단 - 조직에 있는 장비의 취약점을 판단하는것
--->> 비슷한 맥락 그리고 가장 많이 쓰이는 활용 분야
-> 제로데이 진단 - 아직 알려지지 않은 취약점 판단
-> 취약점 분석 - 다양한 유형, 다양한 플랫폼의 취약점을 가지고 있다. 또한 모듈화 되어 있기 때문에 명확하다
-> 자동화 도구 개발 - 라이브러리, 코드들을 깊게 이해하게 된다면, 내가 원하는 기능들만을 뽑아서 자동화 도구, 스크립트를 만들 수 있다
* 용어 정의 - 실습에 지장 없을 정도의 용어
-> 익스플로잇 (exploit) - 시스템, 애플리케이션, 서비스 등의 취약점을 공격하는 방법 OR Code
-> 익스플로이테이션 (exploitation) - 익스플로잇을 하는 행위
-> 후속 공격 (post exploitation) - 익스플로잇이 성공한 후 수행하는 공격
-> 취약점 (vulnerability) - 시스템 또는 소프트웨어에 존재하는 결함
-> 페이로드 (payload) - 쉘코드, 최종 공격 목적 코드
-> 모듈 (module) - 루비에서 말하는 모듈 / MSF에서 사용하는 모듈 (= 하나하나의 기능을 의미)
-> 리스너 (listener) - 연결 요청을 기다릴 수 있도록 해주는 기능 (= 리버스 커넥션에 이용 - 인바운드, 아웃바운드)
-> 세션 (session) - MSF와 공격 대상 시스템 사이에 맺은 연결 채널
-> 제로데이 (Zero-Day) - 아직 알려지지 않은 새로운 취약점
-> PoC (Proof of Concept) - 취약점을 증명하기 위해 만들어진 증명 코드
* 실습 환경 구축
: 버추얼 박스 (VirtualBox) 설치
-> https://www.virtualbox.org
: 실습 이미지 다운로드
-> windows - https://dev.windows.com/en-us/microsoft-edge/
-> metasploitable - http://sourceforge.net/projects/metasploitable/
-> kali linux - https://www.kali.org/downloads/
: 운영체제 및 실습 프로그램 설치
-> 칼리 리눅스 설치
-> 실습 프로그램 설치 (windows) - Ollydbg, Wireshark, Paros, Flash Player...
: 네트워크 구성
* 메타스플로잇 구조 및 동작 원리 #1
-> 아키텍처를 보게 되면 그 시스템의 관점을 확인할 수 있다
* 메타스플로잇 구조 및 동작 원리 #2
-> 인터페이스 - 사용자와 상호작용하기 위한 사용자 인터페이스
-> 모듈 - 모듈화된 기능을 정의한 부분 (기능 - 운영체제 - 서비스)
-> 라이브러리 - 메타스플로잇의 뼈대 역할을 하는 핵심 라이브러리들의 모음
-> 기타 - 프레임워크 플러그인, 보조 도구 등을 포함
* 메타스플로잇 구조 및 동작 원리 #3
: REX (Ruby Extension Library) - 루비 확장 라이브러리
-> 프레임워크에 필요한 클래스와 모듈을 제공하는 역할
-> 하위에 위치한 모든 패키지들의 상위 클래스처럼 동작
-> 핵심 클래스
->> 범용 클래스 - 굳이 카테고리를 나눌 필요가 없는것들 (Ex. 프레임워크에 전체로 사용하는 상수, 랜덤 식별자 생성기 ...)
->> 스레드 안정성 및 동기화 - 기본 라이브러리에서 제공하는 스레드 기능에 더해서 프레임워크에서 사용하기 위해서 추가 기능을 선언해 놓았다
->> 스레드 팩토리 - ...
->> 인코딩 - 인코딩을 정의해놓음
->> 아키텍처 서브시스템 - 다양한 아키텍처를 제공하는데 그러한 다양한 아키텍처에 맞게 어셈블리어, 기계어가 다른데 그러한것들을 미리 찾아놓았음. 미리 정의 되어있음
->> 어셈블리 - ...
->> 서비스 - 서비스 관련 정의
->> 로깅 - ...
->> 입출력 - ...
->> 소켓 - 네트워크 통신에 필요한 것들 정의
->> 프로토콜 - 네트워크 통신에 필요한 것들 정의
->> 호환성 - 운영체제 식별할 때
->> 익스플로이테이션 - ...
* 메타스플로잇 구조 및 동작 원리 #4
: Framework Core
-> 모듈과 플러그인에 인터페이스를 제공하기 위한 클래스 모음
-> 렉스 라이브러리에서 정의한 기능을 토대로 구성
->> 렉스는 건물의 껍데기(= 외부의 뼈대), 코어는 건물의 내부(= 내부의 뼈대)
-> 핵심 클래스
->> 범용 클래스 - 렉스 라이브러리와 같이 상수나 예외들이 정의 되어있다.
->> 프레임워크 문맥 - 프레임워크 운영에 필요한 핵심 기능들이 있는데, 쉽게 말해 프레임워크 코어에서 제공하는 모든 기능을 문맥으로 모아놓은 부분
->> DB 관리자 - MSF 콘솔 구동할 때부터 시작하여 모듈을 로드하고, 실행하고, 세션을 관리하고, 취약점 데이터베이스 등을 관리하는 전반적인 데이터베이스의 모든 기능들을 관장하고 있음
->> 이벤트 관리 - 모듈을 사용하다보면 이벤트가 발생하는데, 쉽게 말해 MSF를 사용하다 문제가 발생하거나, 이슈가 생겼을때 사용자가 확인할 수 있고, 백그라운드에서 처리할 수 있게 해주는것
->> 프레임워크 관리 - ...
->> 프레임워크 옵션 - ...
->> 익스플로잇 드라이버 - ...
* 메타스플로잇 구조 및 동작 원리 #5
: Framework Base
-> 프레임워크에서 사용하는 세션을 구현
-> 코어의 작업 관리를 위한 래퍼 인터페이스 제공
-> 핵심 클래스
->> 구성 설정 - ...
->> 심플 프레임워크 - 복잡한 라이브러리를 개발자가 쉽게 사용할 수 있게 해주는 것
->> 세션 - 하나의 연결 상태를 의미한다. 렉스나 코어에 기본적인 기능은 제공되어 있지만, 추상적인 개념만 정의되어있다. 핵심적인 코드에 관한 내용은 베이스에 정의 되어있다
->> 시리얼화 - ...
->> 지속형 저장 공간 - ...
->> 유틸리티 - ...
-> MSF 콘솔 입장에서 보면, 그 안에 있는 기능들은 렉스, 코어, 베이스를 모두 가져가서 사용한다. 하지만, MSF 모듈은 코어 코드와 렉스 코드만 가져와서 사용한다.
->> 실질적으로 계층적으로는 상속된 관계처럼 보이지만, 꼭 그렇지만은 않다!
* 메타스플로잇 구조 및 동작 원리 #6 - 모듈's
: Exploit - 시스템 및 응용 프로그램의 취약점을 이용하는 공격 코드 모음
-> 실질적인 공격의 관점을 가진 코드
-> Local vs Remote
->> Remote - 원격지에서 다른 컴퓨터의 네트워크를 통해서 공격하는것
->> Local - 그러한 공격하고자 하는 PC에 세션 혹은 물리적인 접근이든, 어느정도의 접근을 확보한 다음, 그 안에서 공격하는것
-> Client side vs Server side - 가장 큰 차이점은 "피해자가 개입을 하는것이냐?"
->> Server side - 공격자가 직접 피해자 PC에 공격을 하는것 - 피해자가 개입 X
->> Client side - 공격자가 미끼를 만들어 기다리는것 - 피해자가 개입 O
-> exploit
* 메타스플로잇 구조 및 동작 원리 #7
: Auxiliary - 페이로드를 필요로 하지 않는 공격 또는 정보 수집을 목적으로 하는 코드 모음
->> 페이로드를 필요로 하지 않는 공격 (= 공격 목적이 없는 코드 - ex. DoS, DDoS ...) -"exploit"과 비교해서 생각할 수 있다
->> 익스플로잇 코드는 정보보안의 3대 요소(기밀성, 무결성, 가용성 = C, I, A)를 모두 포함할 수 있다
->>> 피해자 PC의 기밀 정보(기밀성)를 가져올 수 있다
->>> 누군가가 건드려서는 안되는 정보(무결성)를 건드릴 수 있다
->>> 아예 피해자 PC를 파괴(가용성)해 버릴수도 있다 (ex. 랜섬웨어)
->> Exploit은 CIA를 모두 파괴해 버릴 수 있다. 반면에 Auxiliary는 A(가용성)을 파괴하는 코드들이 대부분이다
->> 실제로는 정보 수집을 목적으로 쓰이는 경우가 많다 (ex. scanner, gather)
->>> 결론적으로 Auxiliary는 Exploit이 더 잘 돌아갈 수 있게, 더 공격 성공률을 높여주기 위해서 필요한 코드, 모듈이 모여있는 것이라고 생각하면 된다
-> Dos, Scanner, fingerprint, fuzzer, sniffer ... etc
-> run
* 메타스플로잇 구조 및 동작 원리 #8
: POST - 익스플로잇 성공 후 대상 시스템에 대한 추가 공격을 위한 코드 모음
-> 권한 상승, 정보 수집, 파일 업/다운로드 등등
-> 주로 로컬 익스플로잇에 사용
->> 로컬 익스플로잇에서 사용하는 모듈이구나 정도로 생각, 피해자 PC에 접근한 후 어떠한 공격을 할수 있는지에 대한것에 초점을 맞춘 모듈
* 메타스플로잇 구조 및 동작 원리 #9
: Payload - 익스플로잇 성공 후 대상 시스템에 대한 추가 공격을 위한 코드 모음 (= POST?)
->> POST 모듈에서 생성한 코드가 Payload로 들어가는 것이다
->> 나머지를 전부를 정리해본다면, [Exploit / Auxiliary / POST]가 같은 수준이고 [Payload / Encoder / NOP]가 같은 수준인 것이다
->> Exploit이 택배껍데기이고, Payload가 내용물이라고 생각하면 된다. Exploit이 성공적으로 동작하면 피해자 PC에서 택배가 열리고 그 안의 내용물인 Payload가 튀어나온다
->> Payload에도 여러가지 방식이 있다. 크게 3가지로 구분할 수 있다
-> Singles - 단 하나의 기능을 가지거나 사전 단계 없이 직접 쉘 획득에 참여하는 페이로드
->> 택배를 한번 보내고 끝내는 방식이다. 한번 보내는 내용에 모든게 포함된다고 생각하면 된다
-> Stagers - 공격자와 대상 시스템을 연결 후 2단계 페이로드를 불러오는 역할을 하는 페이로드
-> Stages - stager 페이로드가 로드해주는 2단계 페이로드
->> 단계별로 역할이 정해진 방식이다. 먼저 Stagers를 보내어 연결을 맺은 후, 실질적으로 핵심 역할을 하는 Stages를 두번째로 보낸다
->> 이러한 방식으로 하는 이유는 탐지될 확률이 낮다
->> 두 방식은 하나로 보면 된다
* 메타스플로잇 구조 및 동작 원리 #10
: Encoder - 페이로드의 형태를 변형시키는 다양한 알고리즘을 담은 코드 모음
->> Payload를 안걸리게 하기 위해서 모양을 바꾸어주는 역할이다. 코드를 변형하지는 않고 모습만 바꾼다고 생각하면 된다
-> msfvenom과 함께 실습해보면 된다
-> 주로 익스플로잇 모듈 내부에서 사용
* 메타스플로잇 구조 및 동작 원리 #11
: NOP - 오직 레지스터 및 프로세서 플래그 상태 변화에만 영향을 미치는 무의미한 명령어들을 만들어내는 코드 모음
-> 안티 바이러스 및 침입 탐지 제품의 탐지 우회를 위해 사용
->> 뿐만 아니라, 익스플로잇 안에서 오프셋을 맞춰주는 역할도 한다
->> 즉, NOP는 의미없는 정보를 중간중간에 삽입하여 익스플로잇을 조금 더 정확하게 오프셋을 맞춰주거나, 페이로드라는 악성코드가 패턴에 탐지되는것을 중간중간 삽입한 NOP에 의해 노이즈를 발생시켜 탐지를 우회하게 해주는 역할을 하기도 한다
-> 0x90909090, 0x41414141 ...
* 메타스플로잇 구조 및 동작 원리 # wrap-up
* 메타스플로잇 둘러보기
: 인터페이스 소개 :: msfcli
-> 2015년 6월 18일자로 사라진 인터페이스
->> 칼리 2.0 버전에는 존재하지 않는다
-> 커뮤니티 버전의 유일한 인터페이스인 msfconsole을 실행하지 않고 단 한 줄의 명령으로 모듈을 실행
-> 모듈 개발 후 테스트용으로 사용하기에 적합한 최적의 인터페이스
-> 동시에 여러개의 쉘을 처리할 수 없다는 것이 함정
* 인터페이스 소개 :: msfconsole
-> 커뮤니티 버전의 유일한 인터페이스, GUI는 아미티지만 남은 상황
-> 콘솔 기반 인터페이스로, 메타스플로잇의 대부분의 기능을 지원함 (리포트 및 시각화는 조금 떨어짐)
-> 명령어만 잘 쓸 줄 알아도 해커처럼 보일 수 있음
* 인터페이스 소개 :: Metasploit Pro
-> 유료 버전에 제공되는 인터페이스 (14일 무료 버전을 사용할 수 있으나 국내에서는 사용불가)
* 메타스플로잇 둘러보기
: MSF 디렉터리를 이해하면 구조가 눈에 들어온다
->> 디렉터리 별로 어떤 역할을 하는지 이해해야 좀 더 친숙하게 다가갈 수 있다 (= Linux 디렉터리(/usr, /etc ...)를 아는것과 같은 의미이다)
: 디렉터리 구조 및 역할 - /usr/share/msf (밑줄 친 정도가 핵심이다)
-> ./ - MSF 실행 파일들이 위치한 곳 (Gemfile)
-> data - MSF에서 사용하는 데이터 파일들 모음
-> lib - 핵심 라이브러리 파일들을 포함 (rex, core, base)
-> modules - MSF 모듈 파일들이 위치한 공간
-> plugins - 실시간 로드가 가능한 플러그인 코드 모음
-> scripts - 미터프리터를 포함한 스크립트 파일 모음
-> tools - 모의해킹 과정에 도움을 주는 다양한 유틸리티 모음
-> vendor - 루비 관련 파일
* 실습#1 메타스플로잇 둘러보기
: MSF 디렉터리 탐색
: 인터페이스 실행해보기 (msfconsole, msfcli)
->> ID / PW : root / toor
: 핵심적인 디렉터리를 파악해본다
-> cd ./lib (= 라이브러리)
->> 일단 두 가지만을 확실히 짚고 넘어가면 된다. "msf" 폴더와 "rex" 폴더
->>> "rex" 폴더안에 rex 라이브러리가 존재하고, "msf" 폴더안에 MSF Framework core / base 코드가 정의되어 있다
->> 먼저 "rex" 폴더
->>> 여러 폴더 중, 먼저 좀 더 꼼꼼히 살펴봐야하는 코드가 존재한다 (= post 폴더)
->>> 실질적으로 상대방 시스템을 점령한 후, 또는 로컬 익스플로잇을 실행할 때 필요한 코드들이 모두 존재한다
->>> 그 중, "meterpreter" 폴더에서 "extensions" 폴더 등의 안에 있는 폴더들이 "메타프리트 스크립트"를 작성할 때 유용한 코드들이 정의된 부분이다 (나중을 위해서 경로를 기억해두면 도움이된다)
->> 그 다음, "msf" 폴더
->>> 여러가지 중요한 폴더들이 많지만, 그 중, "core", "base" 폴더를 살펴본다
->> "core"
->>> "core"를 살펴보면, 주로 윗단에 있는 모듈을 받치는 기원 코드라고 보면된다 (ex. exploit, handler, module, auxiliary, rpc ...)
->>>> "opt" 같은 경우는 프레임워크에서 사용하는 모듈의 기본 옵션과 관련된 설정들이다
->> "base"
->>> "base" 폴더에서는 눈여겨 볼 것은 "sessions" 폴더이다. 실질적인 세션을 처리해주는 코드들이 존재한다
-> cd ./modules (= 모듈)
->> 그 중 "exploit" 폴더를 살펴본다 (= 공격 코드들의 모음)
->>> 그 중, "windows"에 들어가보면 서비스들이 정리되어 있다 (= 플랫폼 하위 폴더에는 서비스들이 정리되어 있다)
->>> 그 중, "smb" 서비스 폴더에 들어가보면 "smb" 서비스를 공격할 수 있는 취약점 코드들이 존재한다
: 결론적으로 실질적으로 나중에 "msfconsole"을 사용할 때, 명령어로 로드하고 사용하는 코드들이 이러한 폴더에 존재하는 것이다!
-> cd ./data
->> 메타스플로잇에서 사용하는 정적인 데이터를 모아둔 폴더이다
->> 그 중, "exploits" 폴더를 살펴본다
->>> 많은 양의 파일을 확인할 수 있는데, "CVE"라는 단어를 확인할 수 있다. "CVE"는 국제 공통 표준이라고 생각하면 된다
->>> "CVE-2012-2516" - 2012년도에 나온 2516번째 나타난 취약점이다
->>>> CVE 사이트가 존재하는데, 이 사이트에서 연도별, 번호별 취약점을 검색할 수 있다
->>>> 예를 들어, 2015년도에 0001(= 첫번째) 취약점은?
->>> 이러한 취약점들이 메타스플로잇 data에 존재하는 이유는 보통 원격 공격 코드(= Remote Exploit)의 경우 등, 간단한 익스플로잇의 경우에는 루비 코드상에서 실질적으로 취약점이 되는 부분을 코드로 만들어 구현해낸다. 하지만 이와 달리 조금 복잡한 구조가 필요한 파일들이 필요로 할 때,취약점을 트리거 할 수 있는 핵심이 되는 파일들을 저장해놓고 쓰는게 효율적이기 때문이다
->>>> 이러한 것들을 살펴볼 필요가 있는 이유는 나중에 메타스플로잇 취약점 분석을 할 때, CVE가 붙을 정도의 크리티컬한 취약점 코드를 분석할 때 루비 코드안에서 문제가 되는 취약점을 발동시킬 수 있지만, 그렇게 되지 않는 경우도 생길 수 있다. 즉, 코드에서 만들기 힘든것들을 저장해서 쓴다고 생각하면 된다
->> cd ./scripts
->>> "scripts" 폴더에는 공격이 성공한 후, 어떤 명령을 내릴것인가에 대한 스크립트들이 존재한다
->>>> 즉, 공격이 성공한 후 어떠한 동작을 할래? "메타스플로잇에서 친절하게 고민하지말고 좋은것들을 모아서 제공해줄게"가 메타프리터이다
->>> 그 중, "meterpreter" 폴더를 살펴본다
->> cd ./plugins
->>> 플러그인은 msfconsole에서 콘솔에 추가되는 기능 정도로 이해하면 된다. 또한 프레임워크의 내부적인 동작의 매커니즘을 변형시킬 수 있는 권한도 가지고 있다
: 이제 "msfconsole"을 한번 실행해본다 - msfconsole
-> "msf > help" (= "도움말" 한번 쭉 읽어본다)
: 환경 구축에서 받은 "msfcli" 파일을 칼리리눅스 바탕화면에 복붙한다
-> 본인은 공유폴더를 이용하여, "cp /msfcli/ /root/Desktop/" 하여 저장하였다
-> 그리고 다시 "msfcli" 파일을 복사하여 "/usr/share/metasploit-framework"의 "msfcli"에 저장한다
-> "./msfcli -h"을 입력하여 실행이 되는지 확인해본다
->> 현재는 "msfcli"이 사라지고 "msfconsole"에서 "-r"과 "-x" 옵션으로 대체되었다는 문구를 확인할 수 있다
-> 실제로 "msfconsole -h"을 입력하고 "-r"과 "-x" 옵션을 살펴본다
->> "-x"를 할 경우, 뒤에 명령어를 붙일 수 있고
->> "-r"을 할 경우, 리소스 파일을 사용하면 된다
->>> resource file은 msfconsole을 통해서 실행한 명령어들을 하나의 리소스 파일로 모아놓고 "-r" 옵션을 실행하면 자동으로 모아놓은 명령어들을 실행해주는 것이다. 결론적으로 "msfcli"과 동일한 효과를 볼 수 있는것이다
'모의해킹 > metasploit(초급)' 카테고리의 다른 글
MSF 2019년 기준 업데이트 내용 (0) | 2021.11.18 |
---|---|
Metasploit (MSF Console) (0) | 2021.08.25 |