[Faraday#1] Penetration testing IDE!

혹시 faraday라고 들어보셨나요? pentesting 관련해서 조금 찾아보다 보면 한번 쯤은 들어볼 수 있는 framework로 저 또한 예전부터 관심이 있긴 했지만, 실제로 사용해볼 일이 없어서 블로그에도 소개해드린 적이 없었네요. (보통 전 pentest 시 msf + documents 도구면 충분하다 느꼈어서… )

어쨌던 오늘은 faraday에 대해 알아보고, 어떻게 활용할 수 있는지 살펴봅시다.

Faraday

faraday는 Pentest IDE를 목표로 하는 pentest framework 입니다. metasploit이 testing, exploit 등 모듈을 기반으로 여러 상황과 환경에 대해 빠르게 테스트할 수 있도록 구성되었다면, faraday는 협업적인 측면이 강한 도구입니다. (물론 제가 msf pro를 써본건 아니라서, msf의 web-ui가 얼마나 좋을지는 잘 모르겠네요)

그래서 faraday는 기본적으로 pentest를 관리하는 도구이며, faraday의 plugin이나 command를 이용해서 테스팅 결과를 쉽게 모을 수 있고 이를 시각적으로도 표현할 수 있습니다.

Community version(open source) 또한 기본 기능에는 충실하고 있어서, pentesting에 대해 좀 더 개선하려는 고민이 있다면 충분히 사용해보고 이를 통해 개선점 보여줄 수 있는 도구입니다.

Community vs Professional

위에서 Community 버전에 대한 이야기를 했었는데, 지원적인 부분 제외하고 기능적인 부분만 보면 요정도 차이가 납니다. (제가 눈으로 보고 작성한 내용이라 빠진 것도 있을 수 있어요)

    Commercial Pro Description
Dashboard - O O  
Workspace   O O  
Manage Vulns O O  
  Hosts O O  
  Credentials O O  
  Tasks X O  
Insight Report / Compasion / Data Anaysis X O  
Operations Scheduling X O  
  KB O O Vulnerability Template
User   X O  
Settings Custom fields O O  
  Agents O O  

기능적으론 데이터를 가공하고 보여주는 부분들에서 차이가 있고, 기본적인 pentest manage 적인 부분은 공통으로 사용할 수 있습니다.

Installation

faraday의 Github 릴리즈 페이지(https://github.com/infobyte/faraday/releases)에 들어가서 각 환경에 맞는 설치 파일을 다운로드 합니다. 저는 debian 계열 linux에 설치했기 때문에 .deb 파일로 받아서 설치했습니다.

sudo apt install ./faraday-server_amd64.deb

Initialize & config

faraday 서버를 구동하기 전 dabase에 대한 세팅이 필요합니다. faraday는 Postgres를 사용하고 있고, 만약 시스템에 설치되어 있지 않다면 설치해주시면 됩니다. 설치는 https://www.postgresql.org/download/ 문서 참고하시면 금방 진행할 수 있습니다.

postgresql이 구성되었다면, faraday-manage 명령을 통해 db를 초기화합시다.

sudo faraday-manage initdb

그 다음 만약 localhost에서만 farady를 접근한다면 패스해도 되곘지만, 보통 다중 기기나 여러 사람간의 협업을 위해 사용하는 도구이기 때문에 bind address를 변경해줘야 합니다. (기본값이 localhost 에요)

faraday의 config는 /home/faraday/.faraday/config/server.ini 경로에 존재합니다. 파일을 열어서 bind_address 값을 원하는 형태로 변경합시다. 저는 제 사설 네트워크에선 다 붙고 싶기 때문에 0.0.0.0 으로 지정했습니다.

[faraday_server]
port = 5985
bind_address = 0.0.0.0
websocket_port = 9000
debug = false
session_timeout = 12

Start faraday server

자 이제 systemctl을 이용해서 서버를 실행합시다. 이 떄 웹 UI에 초기 비밀번호를 제공받습니다. (계정은 faraday 입니다)

systemctl start faraday-server

faraday-server를 실행 시 아까 변경한 ini 파일을 참조하며, http://localhost:5985 주소로 웹 UI에 접근할 수 있습니다.

faraday web에 접근 후 faraday 계정에 server 실행 시 발급받은 비밀번호로 로그인합니다. 이 때 바로 비밀번호 변경 프로세스가 시작되며 완료 시 faraday 웹에 접근됩니다.

Go!

Workspace

먼저 workspace를 생성해야 하는데요, Dashboard 에서 New 를 눌러서 새로운 workspace를 생성합니다. workspace가 생성되면 Manage 탭에서 host나 취약점, 크리덴셜 정보들을 추가할 수 있으며 추가된 정보는 대시보드에서 보기 좋게 나타나집니다.

Faraday Cli

그럼 host 데이터는 일일히 추가해야 할까요? 그건 아닙니다. faraday는 cli와 gui client 지원하며, 이를 통해서 다른 도구의 스캔 결과를 바로 faraday로 추가할 수 있습니다. 저는 cli로 진행해볼게요.

Install faraday cli

pip로 설치해줍니다.

pip install faraday-cli

faraday-cli 명령의 auth 옵션으로 cli에 로그인해봅시다. 계정은 아까 서버 구동 시 설정했던 계정입니다.

faraday-cli auth
Faraday url: http://localhost:5985
User: faraday
Password:
Saving config
✔ Authenticated with faraday: http://localhost:5985

Select workspace and Add host

다음 workspace를 선택해야합니다. 전 testzzz라고 만들어서 testzzz로 선택했습니다.

faraday-cli workspace select testzzz

제가 수동으로 추가한 데이터가 있었는데, 이런식으로 불러와서 확인할 수도 있습니다.

faraday-cli host list
  ID  IP            OS    HOSTNAMES          SERVICES      VULNS
----  ------------  ----  -----------------  ----------  -------
   1  192.168.0.24        frozen.hahwul.com  -                 1

이제 faraday-cli를 통해서 명령 수행한 결과를 faraday-server로 전달할 수 있는데, 하나 예시를 들어보면 이렇습니다. faraday-cli를 통해 ping을 실행하여 데이터를 faraday-server로 보내봅시다.

faraday-cli ping -c 1 www.google.com

위 명령 실행 시 진짜 그냥 ping 명령이 수행되는데, 이후 faraday-server에서 보면 host에 데이터가 추가된 걸 확인할 수 있습니다.

Send nmap result to faraday

보통 포트 스캐닝는 nmap을 많이 사용합니다. bugbounty 커뮤니티에서는 naabu의 사용 비중이 높긴 하지만, 이는 pipeline 의 유용성 때문이지 스캐너 성능 자체는 결국 nmap이 우수합니다.

그래서 아까 ping 수행했던 것과 비슷하게 nmap 도 faraday-cli의 인자값으로 넘겨주면 결과가 알아서 파싱되어 faraday-server로 넘어갑니다.

faraday-cli nmap -PN frozen.hahwul.com

이렇게 웹에서 바로 확인이 가능합니다

Dashboard

이렇게 추가된 데이터들은 dashboard에서 예쁘게 표현됩니다.

Conclusion

Faraday Community 버전의 기능은 이정도입니다. host와 vuln, cred를 관리할 수 있다는 점은 MSF와 별반 다를게 없겠지만, 그래도 나름 준수한 Web UI와 이를 통해서 다른 사람과 협업적인 부분에서 유리하다는게 가장 좋은 부분이지 않을까 샆네요.

msf도 몇가지 방법(RPC / 공유DB 등)을 통해서 협할 수 있는 환경을 구성할 수 있지만 이는 협업하는 사용자 모두 msf-cli에 익숙해야한다는 단점이 있는데 이를 쉽게 커버할 수 있어서 faraday의 장점이 좀 보입니다.

그리고 bugbounty의 성격 자체가 취약점 분석 + 모의해킹 적인 성격이 양쪽 다 있다보니 이러한 도구를 사용해서 개인만의 분석 시스템으로 활용해보는 것도 좋을 것 같네요. (물론 직접 구축하는게 좋지만, 굉장히 노가다입니다. 제가 예전에 jenkins로 이런 환경 구성한 후에 github action과 k8s 기반으로 다시 구성했는데, 여기에 들어가는 에너지가 정말 많습니다. 생각보다 신경써야할 게 많아요)

어쨌던 직접 사용하던, 내용을 보고 필요한 부분만 가져가던 faraday는 최소 한번쯤은 사용해보면 좋을 것 같은 도구입니다. 이참에 한번 사용해보시고 얻어가시는 게 있었으면 좋겠습니다 :D