누구나 할 수 있는 해킹: 메타스플로잇으로 시작하기 1편

1. 메타스플로잇이란 무엇인가?

메타스플로잇(Metasploit)은 공격 보안 또는 침투 테스트에 사용되는 표준화된 프레임워크입니다. 이 프레임워크가 나오기 전에는, 다양한 개발자들이 서로 다른 언어와 시스템을 위해 익스플로잇과 쉘코드를 개발하곤 했습니다. 침투 테스터는 개발자가 악성 코드를 넣지 않았다는 것을 믿고, 그 도구가 어떻게 작동하는지 알아야 했습니다. 메타스플잇을 통해, 침투 테스터는 도구가 유사한 방식으로 작동하고 동일한 언어로 작성되었기 때문에 일이 훨씬 간단해집니다.

2. 역사와 개발

최초에는 HD Moore에 의해 오픈 소스 프로젝트로 개발되었으나, 현재는 보안 회사 Rapid7이 소유하고 있습니다. Rapid7은 또한 취약점 스캐너인 Nexpose도 소유하고 있습니다. 원래 오픈 소스 프로젝트로 개발되었지만, Rapid7은 이제 Pro 버전도 개발하였고, 이 버전은 몇 가지 추가 기능을 제공합니다. 다행히도, 커뮤니티 버전은 무료로 사용할 수 있습니다.

3. 언어 지원

최초의 메타스플로잇은 파이썬으로 작성되었으나, 나중에 루비로 포팅되었습니다. 이로 인해 모든 모듈이 루비로 작성되거나 루비로 포팅되어야 했습니다. 하지만 메타스플로잇 5의 출시로 파이썬과 Go 언어도 지원합니다.

4. 인터페이스

메타스플로잇에는 여러 인터페이스가 있습니다:

  1. msfconsole – 대화식 명령 행 인터페이스
  2. msfcli – 리터럴 리눅스 명령 행 인터페이스
  3. Armitage – GUI 기반의 써드파티 애플리케이션
  4. msfweb – 브라우저 기반 인터페이스

5. 추가 통합 도구

nmap, Nessus, Nexpose와 같은 도구들이 메타스플로잇에 통합되어, 포트 스캔, 취약점 스캔, 익스플로잇, 후속 조치 등을 하나의 도구에서 모두 수행할 수 있습니다.

6. 시작하기 전에

메타스플로잇를 시작하기 전에는 postgresql 데이터베이스를 시작해야 합니다. 이 데이터베이스 없이도 메타스플로잇은 작동하지만, 데이터베이스를 사용하면 검색 속도가 빨라지고 스캔 및 익스플로잇에서 수집한 정보를 저장할 수 있습니다.

postgresql 데이터베이스를 시작하는 방법은 다음과 같습니다.

kali > sudo systemctl start postgresql

Postgresql start

참고: Kali Linux 2020 버전부터 시작하여 루트 권한이 필요한 명령어를 실행할 때는 명령어 앞에 ‘sudo’를 붙여야 합니다.

다음으로, 메타스플로잇을 처음 실행하는 경우에는 데이터베이스를 초기화해야 합니다.

이렇게 하면 메타스플로잇을 사용하기 위한 기본적인 설정을 마친 것입니다. 이는 메타스플로잇을 효과적으로 사용하기 위한 필수 단계 중 하나이므로 주의깊게 따라해야 합니다.

kali >sudo msfdb init

데이터베이스가 초기화되면, 다음과 같이 입력하여 메타스플로잇 프레임워크 콘솔을 시작할 수 있습니다

kali >msfconsole

이렇게 하면 메타스플로잇의 주요 인터페이스 중 하나인 msfconsole이 실행됩니다. 이 콘솔에서는 다양한 명령어를 사용하여 취약점을 분석하거나 공격 시나리오를 실행할 수 있습니다. 메타스플로잇을 효과적으로 사용하기 위해서는 이 콘솔의 다양한 기능과 명령어에 익숙해져야 합니다. 초기 설정을 마친 후에는 이 콘솔을 통해 실질적인 해킹 작업을 시작할 수 있습니다.

메타스플로잇은 모든 것을 RAM에 로드하기 때문에 시간이 좀 걸릴 수 있습니다(메타스플로잇 5에서는 훨씬 빠릅니다).

이는 메타스플로잇의 작동 원리로, 빠른 접근성과 효율성을 위해 모든 데이터와 모듈을 RAM에 로드합니다. 특히 메타스플로잇 5 버전에서는 이러한 로딩 과정이 이전 버전보다 더 빠르게 진행되므로 사용자는 더 효과적으로 작업할 수 있습니다.

metasploit console

해당 화면 위와 정확히 같지 않아도 걱정하지 마세요. 메타스플로잇은 시작 스플래시 이미지를 변경합니다. msf5 > 프롬프트가 보인다면 올바른 위치에 있는 것입니다.

이렇게 하면 메타스플로잇 콘솔이 시작되는데, 이것은 상호 작용이 가능한 콘솔입니다. 이 콘솔에서 다양한 명령어를 통해 메타스플로잇의 기능을 활용할 수 있습니다. msf5 > 프롬프트가 나타나면, 그곳에서 다양한 메타스플로잇 작업을 시작할 준비가 된 것입니다.

만약 GUI 환경을 선호한다면, Kali 아이콘을 클릭한 후 –> ‘Exploitation Tools’ –> ‘metasploit framework’ 순서로 이동할 수 있습니다. 이렇게 하면 그래픽 사용자 인터페이스를 통해 메타스플로잇을 사용할 수 있어, 명령어 대신 마우스 클릭으로도 작업을 수행할 수 있습니다.

metasploit 3

7. 메타스플로잇 키워드

메타스플로잇은 매우 강력한 익스플로이트 프레임워크지만, 몇 가지 키워드만 알아도 거의 모든 시스템을 해킹하는 데 사용할 수 있습니다.

메타스플로잇에는 7가지 타입의 모듈이 있습니다.

(1) 익스플로잇 (exploits) (2) 페이로드 (payloads) (3) 보조 (auxiliary) (4) 노옵 (nops) (5) 포스트 (post) (6) 인코더 (encoders) (7) 이베이젼 (evasion) – 메타스플로잇 5에서 새로 추가됨

시작하기 전에 몇 가지 용어에 대해 알아보겠습니다. 메타스플로잇의 용어로 익스플로잇은 시스템이나 애플리케이션의 취약점을 이용하는 모듈을 의미합니다. 일반적으로 이 모듈은 시스템에 페이로드를 배치하려고 시도합니다. 이 페이로드는 간단한 명령 쉘부터, 강력한 메터프리터(Meterpreter)까지 다양합니다. 다른 환경에서는 이러한 페이로드를 리스너(listener), 쉘코드(shellcode), 루트킷(rootkit) 등으로 부를 수 있습니다.

페이로드(Payload)는 메타스플로잇 같은 익스플로이트 프레임워크에서 공격의 목적을 달성하기 위해 사용되는 코드 블록입니다. 즉, 취약점을 이용하여 시스템에 침입한 후에 실행되는 코드입니다. 여러 가지 유형의 페이로드가 있고, 그들은 각기 다른 목적과 기능을 가지고 있습니다.

  1. 쉘(Shell) 페이로드: 이 페이로드는 공격자가 명령 쉘을 열어 원격으로 시스템을 제어할 수 있게 합니다. 이는 가장 기본적인 유형의 페이로드입니다.
  2. 메터프리터(Meterpreter) 페이로드: 이 페이로드는 훨씬 더 고급 기능을 제공합니다. 원격 파일 조작, 메모리 덤프, 스크린 캡처 등 다양한 기능을 수행할 수 있습니다.
  3. 다운로드 & 실행(Download and Execute) 페이로드: 이 페이로드는 원격 서버에서 파일을 다운로드하여 목표 시스템에서 실행합니다.
  4. VNC 페이로드: 이 페이로드는 Virtual Network Computing(VNC) 세션을 생성하여 원격으로 그래픽 인터페이스를 제어할 수 있게 합니다.
  5. 암호화 페이로드(Encoded Payloads): 이 페이로드는 감지를 피하기 위해 암호화되거나 인코딩됩니다. 이는 IDS나 IPS 같은 보안 시스템을 우회하기 위해 사용됩니다.
  6. BIND 페이로드: 이 페이로드는 공격 대상 시스템에서 특정 포트를 열어 공격자가 연결할 수 있게 합니다.
  7. 리버스 페이로드(Reverse Payload): 이 페이로드는 공격 대상 시스템이 공격자의 시스템에 연결을 생성하게 하여 방화벽을 우회합니다.
  8. 커스텀 페이로드(Custom Payloads): 공격자는 특정 목적에 맞게 페이로드를 직접 작성할 수도 있습니다.

이렇게 다양한 페이로드는 공격자가 목표 시스템에 어떤 작업을 수행할 것인지에 따라 선택됩니다. 그래서 페이로드를 이해하는 것은 시스템의 취약점을 이해하고 적절한 대응책을 선정하는 데 있어 중요합니다.

메타스플로잇 (msf5>) 프롬프트에서 ‘help’를 입력하면 명령어 목록을 볼 수 있습니다.

이 모듈들은 특정 작업에 맞게 구성되어 있으며, 보안 전문가는 이러한 모듈을 활용하여 시스템의 취약점을 찾아내거나 특정 작업을 수행합니다. 예를 들어, ‘exploits’ 모듈은 특정 취약점을 이용하여 시스템을 공격하는 코드를 포함하고 있습니다. ‘payloads’는 시스템이 취약점으로부터 공격을 받았을 때 실행되는 코드입니다. ‘auxiliary’ 모듈은 스캐닝, 퍼징 등 다양한 보조 기능을 제공하고, ‘post’ 모듈은 시스템 침투 후 추가적인 작업을 수행합니다.

msf > help

msf help

msf > use

“use” 명령어는 모듈을 로드합니다. 예를 들어 “exploit/windows/browser/adobe_flash_avm2” 모듈을 로드하고 싶다면 (이는 Adobe Flash 플러그인의 수많은 취약점 중 하나를 이용하는 익스플로잇입니다), 다음과 같이 입력하면 됩니다.

msf use

이 명령어는 특정 익스플로잇 모듈을 메타스플로잇에서 사용할 수 있도록 로드하는 역할을 합니다. 여기서의 모듈은 Adobe Flash의 특정 취약점을 공격하는 코드를 담고 있습니다. use 명령어를 통해 이 모듈을 로드하면, 해당 취약점을 이용하여 공격을 수행할 수 있는 여러 옵션과 설정을 구성할 수 있게 됩니다.

위에서 볼 수 있듯이, 메타스플로잇이 모듈을 성공적으로 로드하면, 모듈의 종류(익스플로잇)와 축약된 모듈 이름을 빨간색으로 표시하여 응답합니다.”

이것은 메타스플로잇이 해당 모듈을 제대로 로드했다는 것을 나타냅니다. 빨간색으로 표시된 부분은 모듈의 유형과 이름을 알려주어, 어떤 모듈이 로드되었는지 명확하게 확인할 수 있게 해줍니다.

msf> show

모듈을 로드한 후에는 ‘show’ 명령어가 해당 모듈에 대한 더 많은 정보를 수집하는 데 매우 유용할 수 있습니다. 가장 자주 사용하는 세 가지 ‘show’ 명령어는 “show options”, “show payloads”, 그리고 “show targets”입니다. 먼저 “show payloads”에 대해 살펴보겠습니다.

이 명령어는 로드한 모듈에 대한 다양한 정보를 제공하며, 특히 어떤 옵션이나 페이로드, 그리고 타겟이 사용 가능한지 알려주어, 공격을 좀 더 효율적으로 계획할 수 있게 도와줍니다. “show payloads” 명령어는 해당 모듈에서 사용할 수 있는 모든 페이로드를 나열해 줍니다. 이를 통해 사용자는 상황에 맞는 페이로드를 선택할 수 있습니다.

msf > show payloads

show payload

이 명령어는 선택한 익스플로잇(exploit) 이후에 사용될 경우, 해당 익스플로잇과 호환되는 모든 페이로드를 보여줍니다이 명령어를 익스플로잇을 선택하기 전에 실행하면, 모든 페이로드를 보여주며, 이 명단은 매우 길게 될 것입니다.

위의 스크린샷에서 볼 수 있듯이, ‘show payloads’ 명령어는 이 익스플로잇과 함께 작동할 모든 페이로드를 나열해줍니다.

이러한 명령어는 특히 페이로드 선택 과정에서 매우 중요한데, 공격의 성공 여부와 효율성이 선택한 페이로드에 크게 의존하기 때문입니다. 호환 가능한 페이로드 목록을 확인함으로써, 공격자는 가장 적합하거나 원하는 결과를 얻을 수 있는 페이로드를 효율적으로 선택할 수 있습니다. 이는 시스템의 취약점을 더욱 정밀하게 이용할 수 있게 해주며, 공격의 성공 확률을 높여줍니다.

msf > show options

show options

이 명령어는 익스플로잇을 실행하는 데도 매우 유용합니다. 이는 모듈을 실행하기 전에 설정해야 하는 모든 옵션을 표시해줍니다. 이러한 옵션에는 IP 주소, URI 경로, 포트 등이 포함됩니다.

이 명령어를 통해 필요한 모든 설정 값을 확인하고 조정할 수 있으므로, 공격을 보다 정확하고 효과적으로 실행할 수 있습니다. 예를 들어, 타겟 시스템의 IP 주소나 사용할 포트 번호, 그리고 여러 가지 고급 설정까지도 이 명령어를 통해 확인하고 설정할 수 있습니다. 따라서 이 명령어는 공격 전략을 세우고 실행하기 전에 반드시 확인해야 하는 중요한 단계입니다.

msf > show targets

show targets

이 명령어는 익스플로잇을 실행하는 데도 매우 유용합니다. 이는 모듈을 실행하기 전에 설정해야 하는 모든 옵션을 표시해줍니다. 이러한 옵션에는 IP 주소, URI 경로, 포트 등이 포함됩니다.

이 명령어를 통해 필요한 모든 설정 값을 확인하고 조정할 수 있으므로, 공격을 보다 정확하고 효과적으로 실행할 수 있습니다. 예를 들어, 타겟 시스템의 IP 주소나 사용할 포트 번호, 그리고 여러 가지 고급 설정까지도 이 명령어를 통해 확인하고 설정할 수 있습니다. 따라서 이 명령어는 공격 전략을 세우고 실행하기 전에 반드시 확인해야 하는 중요한 단계입니다.

msf > info

show info 1
show info 2

info 명령어는 간단합니다. 모듈을 선택한 후 이 명령어를 입력하면, 해당 모듈에 대한 주요 정보를 표시해줍니다. 이에는 설정해야 할 옵션, 페이로드 공간의 크기(페이로드 섹션에서 더 자세히 설명할 예정), 그리고 모듈의 설명이 포함됩니다. 저는 일반적으로 익스플로잇을 선택한 후에 항상 이 명령어를 실행합니다.

이 명령어는 선택한 모듈이 어떤 작업을 수행하고, 어떤 옵션을 필요로 하는지, 그리고 페이로드의 크기나 특성 등에 대한 중요한 정보를 제공하므로, 실제 공격 전에 반드시 확인해야 하는 중요한 명령어입니다. 이를 통해 타겟과의 상호작용을 어떻게 할지, 어떤 페이로드를 사용할지 등을 더욱 명확하게 계획할 수 있습니다.

msf > search

메타스플로잇에 새로 접하는 사람들에게 “search” 명령어는 아마도 가장 유용할 것입니다. 메타스플로잇이 작고 새로운 프레임워크였을 때는 필요한 모듈을 찾기가 상대적으로 쉬웠습니다. 그러나 지금은 3000개가 넘는 모듈이 있어서 정확한 모듈을 찾는 것이 시간이 오래 걸리고 문제가 될 수 있습니다. Rapid7은 버전 4부터 이 검색 기능을 추가했고, 이로 인해 많은 시간과 노력을 절약할 수 있게 되었습니다.

이 검색 함수를 사용하여 모듈의 이름이나 설명에 있는 키워드를 검색할 수 있습니다(이에는 CVE나 MS 취약점 번호도 포함됩니다). 그러나 이런 방법은 결과가 매우 많이 나와서 항상 효율적이지 않을 수 있습니다.

검색을 더 구체적으로 하려면 다음과 같은 키워드를 사용할 수 있습니다.

  • platform: 모듈이 지원하는 운영체제입니다.
  • type: 모듈의 유형입니다. 익스플로잇, nops, 페이로드, post, 인코더, 이베이전 및 보조가 포함됩니다.
  • name: 모듈의 이름을 알고 있다면 이름으로 검색할 수 있습니다.

search 명령어의 문법은 키워드 뒤에 콜론(:)과 값이 오는 형태입니다. 예를 들어,

이러한 검색 옵션을 사용하면 특정 시스템이나 애플리케이션에 대한 취약점을 찾을 때 보다 효과적으로 모듈을 찾을 수 있습니다. 특히 여러 키워드를 조합해서 검색하면 더욱 정확한 결과를 얻을 수 있어, 효율적인 공격 또는 테스트를 계획할 수 있습니다.

msf > search type:exploit

예를 들어, Windows(플랫폼)용 Adobe Flash에 대한 익스플로잇(유형)을 찾고자 한다면, 다음과 같이 입력할 수 있습니다.

msf > search type:exploit platform:windows flash

search type

위에서 볼 수 있듯이, Metasploit은 Windows 플랫폼에 대한 익스플로잇이면서 “flash”라는 키워드가 포함된 모듈을 데이터베이스에서 검색했습니다.

msf > set

이 명령어는 선택한 모듈 내의 옵션을 설정하는 데 사용됩니다. 예를 들어, 위의 ‘show options’ 명령어를 살펴보면 URIPATH, SVRHOST, SVRPORT와 같이 설정해야 하는 여러 옵션이 있습니다. 이러한 옵션 중 어떤 것이든 ‘set’ 명령어를 사용하여 설정할 수 있습니다.

더 구체적으로 설명하자면, ‘set’ 명령어는 선택한 모듈의 필요한 변수나 설정을 정의하는 데 사용됩니다. 예를 들어, 타겟 시스템의 IP 주소나 사용할 포트 등을 설정할 수 있습니다. 이러한 옵션은 공격을 수행하기 전에 반드시 설정해야 하며, 옵션을 정확하게 설정하지 않으면 모듈이 제대로 작동하지 않을 수 있습니다. ‘set’ 명령어를 사용하여 이러한 옵션을 올바르게 설정하면, 공격이 더 효과적으로 수행될 것입니다.

msf > set SRVPORT 80

기본 SVRPORT(서버 포트)를 8080에서 80으로 변경합니다.

msf > unset

이 명령어는 예상대로 이전에 설정된 옵션을 해제합니다.

msf > unset SRVPORT

unset

보시다시피, 먼저 SRVPORT 변수를 80으로 설정한 다음 해제했습니다. 그런 다음 다시 ‘show options’을 입력했을 때 볼 수 있듯이 기본값인 8080으로 돌아갔습니다.

msf > exploit

exploit

필요한 모든 옵션을 설정하고 익스플로잇을 로드한 후, 마지막 단계는 “exploit”입니다. 이 작업을 수행하면 타깃 시스템에 익스플로잇이 전송되고 성공할 경우 페이로드가 설치됩니다.

스크린샷에서 볼 수 있듯이, 익스플로잇은 4444 포트에 리버스 핸들러와 함께 백그라운드 작업으로 시작됩니다. 그런 다음 0.0.0.0 호스트의 80 포트에서 랜덤화된 URL(F5pmyl9gCHVGw90)로 웹서버를 시작했습니다. URIPATH 변수를 ‘set’ 명령어로 변경하여 특정 URL을 설정할 수도 있었습니다.

이 과정은 공격자가 익스플로잇과 페이로드를 준비하고, 타깃 시스템에 적절히 전달하여 결국 시스템을 공격하는 데 필요한 모든 설정을 완료하는 것을 나타냅니다. 성공적인 익스플로잇 후에는 설정한 페이로드가 타깃 시스템에 설치되어 추가적인 작업을 수행할 수 있습니다.

msf > back

back

‘back’ 명령어를 사용하면 프로세스에서 한 단계 뒤로 돌아갈 수 있습니다. 예를 들어, adobe/flash/avm2 익스플로잇을 사용하고 싶지 않다고 결정했다면 ‘back’을 입력하면 로드된 익스플로잇이 제거됩니다.

이 명령어는 특정 익스플로잇이나 모듈을 사용하다가 다른 선택을 하고 싶을 때 유용합니다. ‘back’ 명령어를 입력하면 현재 로드된 모듈이 해제되고, 이전 상태로 돌아가서 다른 모듈을 선택하거나 다른 설정을 할 수 있게 됩니다.

msf > exit

‘exit’ 명령어는 예상대로 msfconsole을 종료하고 BASH 명령 쉘로 되돌려 줍니다.

이 경우에 주목할 점은 이 명령어가 우리가 이 익스플로잇에서 생성한 웹서버를 중지하고 BASH 쉘의 Kali 명령 프롬프트로 되돌려 보낸다는 것입니다.

이 명령어는 모든 작업을 완료하고 Metasploit을 종료할 때 사용됩니다. 웹서버나 다른 백그라운드 작업도 함께 종료되므로, 작업을 완전히 마친 후에만 사용해야 합니다.

마치며

많은 익스플로잇에서 다음과 같은 옵션(변수)을 볼 수 있습니다.

RHOSTS – 이것은 원격 호스트 또는 대상 IP입니다. LHOST – 이것은 로컬 호스트 또는 공격자의 IP입니다. RPORT – 이것은 원격 포트 또는 대상 포트입니다. LPORT – 이것은 로컬 포트 또는 공격자의 포트입니다.

이 모든 변수는 ‘SET’ 명령어를 사용하여 설정할 수 있습니다. ‘SET’ 명령어는 변수 이름(RHOST 등)과 그 값으로 이어집니다.

msf > SET RHOST 75.75.75.75

이 명령어들은 Metasploit의 명령어 전체 목록에는 미치지 못하지만, 이 명령어들만으로도 Metasploit의 대부분의 기능을 실행할 수 있을 것입니다. 이 과정에서 다른 명령어가 필요하면 몇 분 동안 그것을 소개할 것입니다만, 지금 당장 필요한 것은 이 명령어들뿐일 것입니다.

이러한 변수들은 특히 원격 공격이나 페이로드 전송 등에서 중요한 역할을 합니다. RHOST와 RPORT는 대상 시스템의 정보를, LHOST와 LPORT는 공격자 시스템의 정보를 설정하는 데 사용됩니다. 따라서 각각의 익스플로잇에 맞는 올바른 정보를 설정하는 것이 중요합니다.

[Reference]
1. Metasploit Basics for Hackers, Part 1: Getting Started with Metasploit (hackers-arise.com)
2. Metasploit | Penetration Testing Software, Pen Testing Security | Metasploit

[관련글] 
1. 모의해킹 | Tech Hyeonker

10 thoughts on “누구나 할 수 있는 해킹: 메타스플로잇으로 시작하기 1편”

  1. This website has quickly become my go-to source for [topic]. The content is consistently top-notch, covering diverse angles with clarity and expertise. I’m constantly recommending it to colleagues and friends. Keep inspiring us!

    응답
  2. Hello Neat post Theres an issue together with your site in internet explorer would check this IE still is the marketplace chief and a large element of other folks will leave out your magnificent writing due to this problem

    응답
  3. Simply wish to say your article is as amazing The clearness in your post is just nice and i could assume youre an expert on this subject Well with your permission let me to grab your feed to keep updated with forthcoming post Thanks a million and please carry on the gratifying work

    응답
  4. Techarp You’re so awesome! I don’t believe I have read a single thing like that before. So great to find someone with some original thoughts on this topic. Really.. thank you for starting this up. This website is something that is needed on the internet, someone with a little originality!

    응답
  5. Somebody essentially lend a hand to make significantly posts I might state That is the very first time I frequented your web page and up to now I surprised with the research you made to create this particular put up amazing Excellent job

    응답

댓글 남기기