상세 컨텐츠

본문 제목

sweetmon 진전 상황

0x10 정보보안/0x11 security

by sweetchip 2017. 8. 16. 13:45

본문

반응형

오랜만의 포스팅!


퍼져 모니터링 시스템인 sweetmon의 개발 상황을 메모 해두고자 오랜만에 포스팅 합니다!


우선 sweetmon 제가 Fuzzing 연구를 할때 다수의 VM에서 퍼징을 돌리곤 합니다.


그럴때마다 크래시가 새로 나올때마다 VM 하나하나 들여다보면서 나왔나 안나왔나.. 보는게 좀 많이 귀찮아서 그냥 한곳으로 파일을 쏴주는 스크립트를 제작하곤 했습니다.


하지만 귀찮음으로 인하여 계속 버그도 생기고 문제가 자주 발생해서 아예 (이전 보다는) 제대로 한곳으로 크래시를 모아주는 것을 만들어보자! 라고 해서 시작한 프로젝트가 sweetmon입니다.


그래서 기반 언어는 멀티플랫폼을 지원하는 Python을 선택했고 Django 프레임워크를 이용하여 개발했습니다.


프론트는 부트스트랩 템플릿인 Dashgum Free버전을 이용하여 개발했습니다!


현재는 잠시 퍼징 연구를 멈춰서 개발을 중단했다가 잉여한 방학생활을 의미있게 보내기 위해서 다시 개발을 시작했습니다.


그리하여.. 기능도 하나 둘 추가로 생기고 있습니다.



우선 현재 돌아가고 있는 각 Fuzzer의 상태를 모니터링 할 수 있고! (Fuzzer에서 웹 서버에 Ping을 때리면 돌고 있는 상태로 간주합니다)


몇개의 크래시가 나왔는지, 몇개의 테스트케이스가 돌았는지(이거는 사라질 수도 있는 기능..)을 모니터링 할 수 있습니다.


그리고 IDX옆에 있는 버튼을 누르면 Fuzzer의 IP, 타겟, 운영체제 등을 상세하게 볼 수 있습니다.



그리고 크래시의 목록들..


32번 ~ 35번을 보시면 됩니다!


각 크래시는 어떤 퍼져에서 나왔는지, 어떤 타겟이고 언제, 몇개의 동일한 크래시가 나왔는지 볼수 있습니다.



그리고 크래시 정보에 들어가면 이름, 리포트된 날짜, 타겟, 퍼져, 로그(로그는 퍼져가 직접 서버로 쏴줘야 합니다), 해시, 크기 등을 볼 수 있습니다.


아 그리고 간단하게 코멘트를 달 수 있는 기능도 있군요.


그리고.. 크래시 샘플을 다운로드 받을 수 있도록 다운로드 기능과 다른 사람에게 크래시를 공유하고 싶다면 1회용 링크를 생성해서 공유할 수 있습니다.


또한 중복된 크래시 샘플의 리스트를 쭉 볼수 있습니다. (가끔 퍼징을 하다보면 중복 크래시가 많이 나올때 최대한 작은 샘플을 구하고 싶을때가 있죠?)




그외 여러 기능들이 있지만 아직은 완성되지 않은 기능들이고..


일단 완성된 것들을 알려드리면


텔레그램 및 이메일 알림기능을 추가했고 유저가 쉽게 켜고 끌 수 있습니다. (전송 테스트도 가능해요!)


또한 싱글 유저에서 여러명이 사용 가능한 멀티 유저로 코드를 갈아 엎었고..


sweetmon과 개발자 정보도 넣었습니다. (추후에 오픈소스로 공개시 도움이 된 분들은 비트코인으로 Dontation을.. 읍읍..)



그리고 사진에 있지 않은 기능들은..

 - 제보한 취약점에 대해서 메모할 수 있는 기능

 - sweetmon-client 와 그나마 쉽게 연동 가능하도록 퍼져의 정보를 한번 등록해두면 자동으로 설정정보를 생성해주는...?

 - 메인 메뉴의 통계.. (매우 허접하여 없어질 가능성이 큼)

 - Fuzzer 등록 관리, 크래시 및 로그 전송, 핑 체크 등 퍼져와 연결할 수 있는 기능들


앞으로 개발 할 내용은..

 - 유저간 크래시를 공유

 - 크래시 암호화?

 - 기타 잡다한 기능들


등등이 있겠습니다.


그리고 지난번에 잠깐 언급한 sweetmon-client 는 웹 서버와 본인의 퍼져를 쉽게 연결할 수 있고 확장성을 고려하여 프레임워크같이 제작했습니다.


install.py를 실행하면 서버와 연결할 수 있는 정보가 생성되는데 이떄 제 유저 토큰을 입력하면 퍼져 리스트에 올라오도록 합니다.


(사진 재탕)


바로 7번 처럼 올라오게 되고


아래 코드를 이용하여 핑체크 및 크래시, 로그 전송이 가능합니다.


from sweetmon import *


F = Fuzzer(FUZZERINFO)

print("TEST PING", F.Ping())

print("TEST UPLOAD", F.Upload("test title", "here\nis_l0g", "/tmp/crashsample"))

print("END OF TEST..")


이렇게 업로드된 크래시는 


( 또 재탕)


이렇게 서버에서 확인할 수 있게 됩니다.


나머지 기능은 또 귀찮음으로 인해 언제 개발이 될지는 모르겠네요..


언젠가 제 첫번째 오픈소스 프로젝트가 되면 좋겠습니다 후후


끝!

반응형

관련글 더보기