
Python으로 스크립팅 가능한 리버스 엔지니어링 샌드박스, QEMU 기반의 가상 머신 계측 및 검사 프레임워크
이 프로젝트는 보관되었으며 이슈 큐가 잠겼습니다. 이 프로젝트는 참조 목적으로만 공개로 유지됩니다.
.. image:: docs/media/pyrebox_logo_light_bg.png
.. _QEMU: http://qemu.org/ .. _DECAF: https://github.com/sycurelab/DECAF .. _S2E: https://github.com/dslab-epfl/s2e .. _AVATAR: https://github.com/avatartwo .. _PANDA: https://github.com/panda-re/panda .. _Volatility: http://www.volatilityfoundation.org/ .. _BUILD: BUILD.rst .. _here: https://github.com/Cisco-Talos/pyrebox/issues .. _slides: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_hitb_ams.pdf .. _available: https://github.com/Cisco-Talos/pyrebox/tree/master/docs/pyrebox_euskalhack.pdf .. _scripts: https://github.com/Cisco-Talos/pyrebox/tree/master/scripts .. _readthedocs.io: https://pyrebox.readthedocs.io/en/latest/ .. _questions: https://github.com/Cisco-Talos/pyrebox/issues?utf8=%E2%9C%93&q=is%3Aissue%20label%3Aquestion%20 .. _presentation: https://www.youtube.com/watch?v=F2voG87obzM .. _Contest: https://volatility-labs.blogspot.com/2017/11/results-from-5th-annual-2017-volatility.html
PyREBox는 Python 스크립트 가능한 리버스 엔지니어링 샌드박스입니다. QEMU를 기반으로 하며, 다른 관점에서 동적 분석 및 디버깅 기능을 제공하여 리버스 엔지니어링을 돕는 것이 목표입니다. PyREBox를 사용하면 실행 중인 QEMU VM을 검사하고, 메모리나 레지스터를 수정하며, Python으로 간단한 스크립트를 작성하여 모든 종류의 분석을 자동화함으로써 실행을 계측할 수 있습니다. QEMU(전체 시스템 에뮬레이터로 작동할 때)는 완전한 시스템(CPU, 메모리, 장치 등)을 에뮬레이트합니다. VMI 기술을 사용하여 게스트 운영 체제를 수정할 필요가 없으며, 실행 시간에 게스트의 메모리에서 투명하게 정보를 검색합니다.
DECAF_, PANDA_, S2E_, AVATAR_와 같은 여러 학술 프로젝트는 이전에 QEMU 기반 계측을 활용하여 리버스 엔지니어링 작업을 수행했습니다. 이러한 프로젝트는 C/C++로 플러그인을 작성할 수 있으며, 동적 오염 분석, 기호 실행, 심지어 실행 추적 기록 및 재생과 같은 여러 고급 기능을 구현합니다. PyREBox를 통해 우리는 설계를 단순하게 유지하고 위협 분석가를 위한 시스템의 사용성에 초점을 맞추어 이 기술을 적용하는 것을 목표로 합니다.
PyREBox는 2017년 Volatility Plugin Contest_에서 우승했습니다!
이 도구는 HITB Amsterdam 2018에서 발표되었습니다. slides_를 보거나 presentation_을 시청할 수 있습니다. 또한 제3회 EuskalHack Security Congress에서도 발표되었습니다(슬라이드 available_).
최신 기능을 즐기려면 PyREBox의 최신 버전을 가져오는 것을 잊지 마세요. PyREBox는 활발히 개발 중이며 새로운 멋진 기능이 곧 추가될 예정입니다! master 브랜치는 항상 안정적인 버전을 포함해야 하며, dev 브랜치는 최신 개발 중인 기능을 포함합니다. 다음 공지 목록은 master 브랜치와 개발 변경 사항이 master에 병합된 날짜를 나타냅니다.
빌드 스크립트가 제공됩니다. 종속성에 대한 자세한 내용은 BUILD_를 참조하십시오. 또한 Dockerfile을 제공합니다.
이 프로젝트의 문서는 readthedocs.io_에서 호스팅됩니다.
버그를 발견했다고 생각되면 여기 here_에 보고해 주세요.
새 이슈를 생성하기 전에 다른 사용자가 이전에 연 questions_를 확인해 주세요.
이 프로그램은 '있는 그대로' 제공되며, 지원이 보장되지 않습니다. 그렇지만 문제 해결을 돕기 위해 버그를 재현할 수 있는 최대한 많은 정보를 포함해 주세요:
PyREBox는 QEMU를 기반으로 하므로, PyREBox 내에서 VM을 시작하려면 QEMU VM을 부팅하는 것과 정확히 동일하게 실행해야 합니다. 몇 가지 예제 스크립트가 제공됩니다: start_i386.sh, start_x86_64.sh. 이를 예제로 사용할 수 있습니다.
현재 지원되는 유일한 QEMU 모니터 옵션은 stdio (-monitor stdio)입니다.
에뮬레이트된 게스트 시스템을 검사하기 위한 간단한 인터페이스를 갖춘 전체 시스템 에뮬레이션 플랫폼 제공.
QEMU에서 분리된 깔끔한 설계. QEMU 위에 구축된 많은 프로젝트는 QEMU가 업그레이드될 때 진화하지 않아 새로운 기능, 최적화 및 보안 업데이트를 놓칩니다. 이를 달성하기 위해 PyREBox는 최소한의 수정만으로 QEMU와 함께 컴파일될 수 있는 독립 모듈로 구현되었습니다.
다양한 아키텍처 지원. 현재 PyREBox는 x86 및 x86-64 비트 아키텍처의 Windows만 지원하지만, 설계상 ARM, MIPS, PowerPC와 같은 다른 아키텍처와 다른 운영 체제도 지원할 수 있습니다.
PyREBox 셸을 시작하는 것은 QEMU 모니터에서 sh 명령을 입력하는 것만큼 쉽습니다. 그러면 즉시 IPython 셸이 시작됩니다. 이 셸은 명령 기록과 정의된 변수를 기록합니다. 예를 들어, 값을 저장하고 나중에 셸을 다시 시작할 때 실행의 다른 시점에서 복구할 수 있습니다. PyREBox는 자동 완성, 명령 기록, 다중 줄 편집, 자동 명령 도움말 생성 등 IPython에서 사용 가능한 모든 기능을 활용합니다.
PyREBox를 사용하면 상당히 은밀한 방식으로 시스템(또는 프로세스)을 디버깅할 수 있습니다. 디버깅 중인 시스템 내에 머무르는(심지어 중단점을 삽입하기 위해 디버깅 중인 프로세스의 메모리를 수정하는) 전통적인 디버거와 달리, PyREBox는 검사 중인 시스템 외부에 완전히 위치하며 게스트에 드라이버나 구성 요소를 설치할 필요가 없습니다.
.. image:: docs/media/breakpoint.gif
PyREBox는 실행 중인 VM의 상태를 검사하고 수정하기 위한 완전한 명령 세트를 제공합니다. list_commands를 입력하면 전체 목록을 얻을 수 있습니다. vol과 해당 volatility 명령을 입력하면 모든 volatility 플러그인을 실행할 수 있습니다. 사용 가능한 volatility 플러그인의 전체 목록을 보려면 list_vol_commands를 입력하면 됩니다. 이 목록은 자동으로 생성되므로, PyREBox의 volatility/ 경로에 설치한 모든 volatility 플러그인도 표시됩니다.
자신만의 명령을 정의할 수도 있습니다! 스크립트에서 함수를 선언하고 로드하는 것만큼 간단합니다.
명령보다 더 표현력이 필요한 경우, API를 활용한 Python 스니펫을 작성할 수 있습니다. API에 대한 자세한 설명은 Documentation_를 참조하거나 셸에서 help(api)를 입력하십시오.
.. image:: docs/media/stack.gif
PyREBox를 사용하면 특정 이벤트(예: 명령어 실행, 메모리 읽기/쓰기, 프로세스 생성/소멸 등)가 발생할 때 호출되는 콜백 함수를 등록하는 스크립트를 동적으로 로드할 수 있습니다.
PyREBox가 Volatility와 통합되어 있으므로, Python 스크립트에서 메모리 포렌식을 위한 모든 volatility 플러그인을 활용할 수 있습니다. 가장 유명한 리버스 엔지니어링 도구 중 상당수는 Python으로 구현되었거나 적어도 Python 바인딩이 있습니다. 우리의 접근 방식을 통해 이러한 도구를 스크립트에 통합할 수 있습니다.
마지막으로, Python 콜백은 명령어 실행과 같은 빈번한 이벤트에서 성능 저하를 초래할 수 있으므로 트리거를 생성할 수도 있습니다. 트리거는 Python 콜백이 실행되기 직전에 모든 이벤트에서 런타임에 동적으로 삽입될 수 있는 네이티브 코드 플러그인(C/C++로 개발)입니다. 이를 통해 Python 코드에 도달하는 이벤트 수를 제한하고 네이티브 코드에서 값을 사전 계산할 수 있습니다.
이 저장소에서 자신의 코드를 작성하는 데 도움이 되는 예제 scripts_를 찾을 수 있습니다. 기여는 언제나 환영합니다!
우선, PyREBox는 QEMU_와 Volatility_ 없이는 불가능했을 것입니다. 이렇게 훌륭한 작업을 해주신 개발자와 관리자분들께 감사드립니다.
PyREBox는 DECAF_, PANDA_와 같은 여러 학술 프로젝트에서 영감을 받았습니다. 실제로 PyREBox가 지원하는 많은 콜백은 DECAF_에 있는 것과 동일하며, 계측의 기본 개념은 이러한 작업에 기반을 두고 있습니다.
PyREBox는 pyrebox/third_party 디렉터리에서 찾을 수 있는 타사 코드의 이점을 활용합니다. 각 타사 프로젝트에 대해 원본 라이선스, 프로젝트에서 가져온 원본 소스 코드 파일, 그리고 PyREBox에서 사용하는 수정된 버전의 소스 코드 파일(해당하는 경우)을 포함하고 있습니다.