Metasploit-framework 5.0 Review

지난 목요일 Rapid7 블로그에 글이 하나 올라왔습니다. 바로 msf 5.0 즉 major 버전 업데이트에 대한 이야기입니다. 큰 업데이트인만큼 어떤점들이 바뀌는지 살펴보도록 하죠.

Summary

Rapid7 측에서 이야기한 카테고리는 크게 3가지 입니다.

  • DB, 자동화 관련 API 지원
  • 탐지 우회 모듈, 라이브러리
  • 사용성 개선, exploitation scale

일단 업데이트 후 msf 들어가보니 5.0 으로 올라갔네요.

HAHWUL > version
Framework: 5.0.1-dev-
Console  : 5.0.1-dev-

Database and automation APIs

DB에 대한 API 제공인데요, 이 부분은 Metasploit에서 사용하는 PostgreSQL에 대한 RESTful API 제공을 의미합니다. (헐…만들고 있던건데, 종결을 해버리시네)

기존에 RPC나 API 처리 로직은 Exploit, check 등 기능 위주여서 DB에 대한 직접적인 핸들링은 불가했었습니다. 이를 쉽게 할 수 있도록 지원해주는 형태로 바뀌었네요. 관련 프로젝트 하시는분들이 있다면 분명 좋아하시겠네요.

다만 아직 스펙문서는 찾지 못했습니다. 요건 확인하면 추가하도록 할게요.

Evasion modules and libraries

Evasion modules 관련해선 Pull request 한번 보시는게 좋습니다. 탐지 로직 우회 관련해서 모듈 맏들 수 있는 템플릿? 이 추가됬다고 생각되네요.

추가로 2가지 업데이트가 더 있습니다.

metashell

metashell 사용 시 기존에는 background sessions 처리가 불가능 했습니다. 결국 쉘 진입을 하면 쉘을 자르지 않는 이상 msfconsole 쪽으로 넘어갈 수가 없는 상태였죠.

이 부분이 이젠 meterpreter shell 처럼 background 로 넘겨서 동작을 처리할 수 있게 변경된겁니다. 아무래도 meterpreter shell이 기능은 엄청 좋지만 그만큼 간파당하기 쉬울 수 있는 부분을 메꿔주려고 한 것 같단 생각이 드네요.

물론 개인적으로 meterpreter를 좋아해서, 그냥 metashell을 쓸 것 같진 않습니다.

외부 모듈 지원 범위 추가

현재 msf는 ruby로 개발되어 있어서 exploit module 또한 루비 코드로 이루어졌는데요, 이에 대해 python이랑 go lang을 지원한다는 계획이네요. python이야 손에 꼽는 언어니 가야할 길이였었고, go 또한 요즘 사용하는 곳도 많이 늘고 언어 자체도 굉장히 좋기 떄문에 좋은 시너지가 나지 않을까 싶네요. 물론 전 루비스트입니다 :)

Usability improvements and exploitation at scale

마지막으로.. 이 부분에 중요사항은 RHOST에 대한 변경입니다. 원래 metasploit에서 타겟을 지칭하는 값은 RHOST, RHOSTS 2가지가 있습니다.

이 중 RHOSTS는 단수, 다수의 타겟을 지정할 수 있었지만, RHOST는 무조건 단일 개체에 대해서만 지원하던 기능이였죠. 이를 결정하는건 모듈 개발자의 몫이지만, 이게 불편하다는 말이 좀 많았던지라, 이참에 msf core 에서 무조건 rhosts 처럼 쓰이게 수정된 것 같습니다.

원래 “windows/http/easyfilesharing_post” 모듈은 RHOST만 사용하던 모듈이였습니다.

  • 하나 예를 들어보면, 아래 글 작성 당시 잘 보면 RHOST만 존재함
  • https://www.hahwul.com/2017/08/mad-metasploit-0x20-remote-exploit.html

지금 들어가서 보면

HAHWUL exploit(windows/http/easyfilesharing_post) > show options

Module options (exploit/windows/http/easyfilesharing_post):

   Name    Current Setting  Required  Description
   ----    ---------------  --------  -----------
   RHOSTS                   yes       The target address range or CIDR identifier
   RPORT   80               yes       The target port (TCP)

기본이 RHOSTS로 바뀌었네요. 아주 만족스러운 변화입니다. 이게 불편해서 RHOST를 RHOSTS 처럼 쓸 수 있게 리소스 스크립트를 짜서 쎴었는데, 이제 그런 불편함은 없을 것 같습니다.