Metasploit이란?

Metasploit framework는 ruby 기반 모듈 침투 테스트 플랫폼이다. 2003년 Perl 베이스의 포터블 네트워크 도구로 개발됐다. 인터프리터 언어 기반 포터블 네트워크 프레임워크를 목표로 한 점에서 무어로서는 유연한 시스템 유지 보수 및 침투 테스트가 목적이었음을 알 수 있다.

기본적으로 MetaSploit framework는 침투 테스트 및 익스플로잇 개발을 위한 준비된 테스트 환경에서 사용하는 도구이다. MetaSploit 이전에 시스템 테스트 상황에서는 시스템(프레임 워크)이 지원하는지 안 하는지 모를 다양한 도구로 직접 코드 작성 후 네트워크에 수동으로 모든 상황을 수행해야 했다. 하지만 Metasploit의 등장과 함께 이 문제들은 해결되었다.

특히 MetaSploit은 오픈 소스이기 때문에 쉽게 커스텀 될 수 있는데 이 때문에 2007년 루비 버전 MetaSploit 3.0 공개와 함께 보안 커뮤니티에서 주목받았고 오퍼레이팅 시스템으로 자주 사용되고 있다.

그 결과 초기에는 공격 코드들의 모음집에 가까웠지만, 현재에 와서는 광범위 영역 정보 탐색, 공격, 사전 침투에 관련한 보안 도구의 설계와 개발 능력을 갖춘 침투 테스트용 툴(모의해킹 툴)로 성장하였다.

침투 테스트란 무엇인가?

침투 테스트란 Penertratijon testing으로 불리며 일종의 모의 해킹이다. 클라이언트에게 승인을 받은 후 해커가 시스템 취약점을 침투하는 것과 같이 클라이언트의 IT 시스템을 공격하는 방법입니다. 침투 테스트는 네트워크 보안 프로토콜 확인 및 네트워크 공격 시뮬레이션을 목적으로 합니다 취약점 진단과는 다르게 잠재적 보안 문제와 시스템을 검토하는 것을 넘어 취약점이 어떻게 악용 될 수 있는지 공격을 통해 보여 줍니다

침투테스트 과정

침투 테스트의 과정은 위의 그림과 같습니다. 간단하게 용어 설명을 하자면

  • 범위 설정
    • 타겟 네트워크 환경의 범위를 관찰하고 이해하는 과정
    • 감시자에게 주어진 네트워크에 따라 무엇을, 어떻게, 어떤 조건 하에 테스트할 지 테스트 가능한 수준과 어느 정도의 시간이 소요 되는지 결정
  • 정보 수집
    • 다양한 공개 리소스를 통해 정보를 수집
  • 타겟 발견
    • 타겟의 네트워크 상태, 운영체제, 네트워크 구조를 파악하는 단계
  • 취약점 매핑
    • 정보 수집과 타겟 발견 단계에서 얻게된 자료를 조합하여 타겟 시스템의 취약점을 찾아내는 단계
  • 타겟 익스 플로잇
    • 발견한 취약점을 살펴보고 exploit 공격을 통해 침투하는 단계
    • SQL Injection, XSS, BOF 등
  • 권한 상승
    • 익스플로잇에 성공하면 root 권한을 취득한다
  • 장악 유지
    • 백도어 설치, 타겟 시스템에 항상 가동되는 프로세스로 마이그레이션
  • 문서화와 보고
    • 전단계의 과정, 공격한 취약점을 발표하고 문서화 하느느 과정
    • 이 과정을 통해 관리자가 보완해야하는 보완 정책이 무엇인지 파악한다
    • 침투 테스트에서 사용된 로그를 삭제한다

Metasploit 아키텍쳐 구조

structure

Metasploit은 크게 Interface, Libaries, Module, Tool, Plugin으로 이루어져 있다.

  • Interface
    • 사용자와 상호작용하기 위한 사용자 인터페이스
  • Module
    • 모듈화된 기능을 정의 하는 부분(기능-운영체제-서비스)
  • Libraries
    • 메타스플로잇의 뼈대 역할을 하는 핵심 라이브러리들의 모음
  • 기타
    • 프레임워크 플러그인, 보조 도구 등을 포함

라이브러리

Rex

Rex는 루비 확장 라이브러리 있다. 위의 사진에서 보다시피 MSF Core에 코드를 제공한다. 의존성 문제를 피하기 위해 루비에서 제공하는 기본 라이브러리를 가져다 쓴 후 추가로 필요한 기능들을 추가해 확장 라이브러리를 만들었다. 주로 프레임워크에 필요한 클래스와 모듈을 제공하는 역할을 한다. 하위의 위치한 모든 패키지들의 상위 클래스처럼 동작한다.

Rex의 기능적 구성은 범용 클래스, 스레드 팩토리, 스레드 안정성 및 동기화, 인코딩, 아키텍쳐 서브 시스템, 어셈블리, 소켓, 프로토콜, 호환성으로 구별되어있다.

  • 범용클래스
    • 기본적인 것들 파일 불러오는것 예외처리
  • 스레드 팩토리, 스레드 안전성 및 동기화
    • 루비 기본 스레드는 부족한게 있어서 프레임워크에 필요한 기능들을 추가했음
  • 인코딩
  • 아키텍쳐 서브시스템, 어셈블리
    • 그 아키텍처에 맞게 어셈블리 정의가 다를 수 있는데 그걸 위해
  • 소켓, 프로토콜
    • 통신을 위해
  • 호환성
    • 운영체제 식별을 위함

Framework Core

모듈과 플러그인에 인터페이스를 제공하기 위한 클래스의 모임이다. Rex 라이브러리에서 정의한 기능을 토대로 구성한다. Rex가 건물의 뼈대만 제공한다면 Framework core의 경우 건물의 안을 어떻게 정의 할 것인가 관한 것이다.

Framework Core의 핵심 클래스는 범용 클래스, 프레임워크 문맥, db 관리자, 이벤트 관리로 구성되어 있다.

  • 범용 클래스
    • 상수나 예외가 기술되어 있다
    • 모듈의 유형 운영체제 시스템 브라우저 종류같은게 정의 되어있다.
  • 프레임워크 문맥
    • 프레임워크 핵심요소, 기능들을 한데 모아놓은 것
  • db 관리자
    • msfconsole 구동할 때 부터 시작해서 모듈 로드 및 실행 취약점 데이터 베이스 등 데이터베이스에 관한 전반적인 것 관리
  • 이벤트 관리
    • 모듈을 쓰다 보면 이벤트가 발생한다
    • 스캐너의 상태를 확인하고 싶다? 이런 문제나 이벤트를 확인할 때 쓴다

Framework Base

Framework Base는 framework에서 사용하는 세션을 구현한다. 코어의 작업 관리를 위한 래퍼 인터페이스를 제공한다. Rex가 추상적이라면 Base는 핵심 기능 코드들을 적어 놓았다.

  • 세션
    • 하나의 연결 상태를 의미한다
    • 내가 어떤 시스템을 공격했는데 채널이 열린 상태에서 어떤 명령을 보내고 어떻게 처리할 것인가를 말해주는게 세션이다
    • 세션의 종류는 다양하다. (interpreter,shell etc..)
  • 심플 프레임 워크
    • 개발자 입장에서 봤을 때 개발자가 쉽게 사용할 수 있게 해주는 프레임 워크
    • 심플 프레임 워크를 통해 코드를 간단하게 구성할 수 있따

Module

Metasploit의 상호작용은 거의 Module에 의해 수행된다. 크게 exploit, auxiliary, post 등으로 구성된다.

Exploit

Exploit은 시스템 및 응용 프로그램의 취약점을 이요하는 공격 코드의 모음이다. 보통 플랫폼 - 서비스 - 코드 구성으로 계층적 구조이다. 여기서 플랫폼은 운영체제이다. 서비스는 해당 플랫폼의 속하는 서비스들의 모음이다. 취약점의 종류가 무엇인가? http인가? ftp 취약점인가?와 같이 서비스들 별로 구별되어 있다. 코드는 해당 서비스의 해당 운영체제를 공격할 코드의 모음집이다.

Exploit은 local vs remote, client side vs server side로 구분된다.

  • Local vs Remote
    • 공격 대상이 어디에 있는가가 핵심이다.
    • Local
      • 취약점이 있는 파일을 공격함
    • Remote
      • 웹 서버를 직접 공격
      • 네트워크 거리 상 멀 수 있음
  • Client side vs server side
    • 피해자의 개입, 트리거가 누구에게 있는가가 핵심이다
    • server side
      • 공격자가 피해자 서버에 직접 공격하는 것
    • client side
      • 공격자가 피해자가 공격 당하길 수동적으로 기다리는것
      • 일종의 트랩

Auxiliary

페이로드를 필요로 하지 않는 공격 또는 정보 수집을 목적으로 하는 코드의 모음이다. DOS,DDOS와 같이 취약점 공격 만으로 시스템을 못쓰게 만드는 공격이 Auxiliary에 속한다 그래서 페이로드의 경우 정보보안의 3 요소 비밀성, 무결성, 가용성 중 주로 가용성을 파괴시키는 공격이다. 보통은 정보 수집을 목적으로 주로 사용하고 익스플로잇 공격 성공률을 높여준다.

공격 구성은 유형- 서비스 - 코드 식인데 익스플로잇과 마찬가지로 계층 구조이다.

Payload

페이로드는 공격 목적을 의미한다 익스플로잇 코드의 경우 단계가 있다. 시스템을 장악하기 위해 포트가 열려있다면 확인 후 코드를 보내는 식으로 말이다. 즉 이 경우, 공격의 목적은 시스템 장악에 있다. 취약점이라 하는 것은 결국은 자물쇠를 따고 들어가는 것이기에 자물쇠를 뚫은 후 무엇을 할지도 정해져 있어야한다. 페이로드가 그 무엇 즉 목적 코드이다.

Post

익스플로잇 성공 후 대상 시스템에 대한 추가 공격을 위한 코드 모음이다. 로컬 익스플로잇에 자주 사용한다. 권한 상승, 정보 수집, 파일 업 다운로드 등이 있다. 플랫폼 - 유형 - 코드 구성이다

Interface

사용자와 상호작용하기 위한 사용자 인터페이스이다. metasploit에는 msfconsole, armitage,msfweb 등이 있다.

  • msfconsole
    • 콘솔 기반 인터페이스로 메타스플로잇의 대부분 기능을 지원함
  • arimitage
    • GUI 환경으로 구성되어 있다.
  • msfweb
    • 이전 metasploit 버전에는 있었지만 현재는 없다. pro 버전이 웹 기반으로 돌아가는데 pro 버전을 의미한다.

Metasploit 실습 환경 구축

Kali Linux에서 Metasploit 설치

칼리 리눅스에는 기본적으로 메타스플로잇이 깔려있다. 보통은 이미 설치되어 있기 때문에 업데이트만 해서 사용하기도 하지만 공식 사이트에서 최신 버전을 받아 실행할 수 있다. 받은 프로그램은 .run 확장자인데 그대로 실행하면 메타스플로잇이 설치된다

https://easy7.tistory.com/363
metasploitable
metasploitable

1
2
3
4
5
root@kali:~ msfdb init //msfdb 초기화
root@kali:~ msfdb start //msfbdb 시작
root@kali:~ db_status // db 연결 확인
root@kali:~ db_services // msf에서 포트 스캔 후 열린 포트와 해당 포트의 서비스 보여줌
root@kali:~ cat /usr/share/metasploit-framework/config/database.yml // msf 데이터베이스 구성 상태 확인

메타스플로잇의 경우 msfdb라고 전용 데이터 베이스가 있다. 보통은 공격 과정에서 얻는 메타데이터들이 저장된다. db는 postgresql로 구성되어 있고 실습 전 미리 msfdb init 커맨드를 사용해 초기화 후 사용하면 된다.

metasploitable
metasploitable
metasploitable
metasploitable

Metasploitable 환경 구축

Metasploitable 설치

Metasploit이란 Metasploit 팀에서 개발한 의도적으로 취약한 linux 가상 시스템이다. 보안 툴을 테스트하고 공통적인 침투테스트 기술을 연습하는데 사용한다. 처음 공식 홈페이지에서 받은 zip 파일을 추출 후 vmx 파일을 실행시키면 된다 기본 로그인 및 암호는 msfadmin이다

metasploitable
metasploitable_boot
metasploitable_ls