Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
JOP_ROCKET — 이 프레임워크를 통해 사용자는 JOP 가젯을 발견할 수 있으며, DEP를 우회하기 위한 완전한 JOP 체인 구축을 자동화할 수 있습니다. JOP ROCKET은 Windows 점프 지향 프로그래밍(Jump-Oriented Programming)을 위한 궁극적인 솔루션입니다. JOP ROCKET은 또한 새로운 2-가젯 디스패처를 찾아내어 JOP로 가능한 범위를 크게 확장합니다. | Kitploit
도구/GitHubGitHub/bw3ll/jop_rocket
ExploitationReverse EngineeringPapers & ResearchLearning & EducationPayload DevelopmentBinary ExploitationLabs & Practice
GitHubbw3ll/jop_rocket

JOP_ROCKET

이 프레임워크를 통해 사용자는 JOP 가젯을 발견할 수 있으며, DEP를 우회하기 위한 완전한 JOP 체인 구축을 자동화할 수 있습니다. JOP ROCKET은 Windows 점프 지향 프로그래밍(Jump-Oriented Programming)을 위한 궁극적인 솔루션입니다. JOP ROCKET은 또한 새로운 2-가젯 디스패처를 찾아내어 JOP로 가능한 범위를 크게 확장합니다.

저장소 보기
116201년 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

alt text

JOP ROCKET

참고: 2.15 버전부터 2-가젯 디스패처(two-gadget dispatcher)를 도입했습니다. 이를 통해 디스패처 가젯의 가능성이 크게 확장됩니다. 2021년 5월 26일 2.15 버전에는 많은 최적화와 추가적인 새로운 기능이 포함되었습니다.

업데이트: 2021년 11월 29일: @Hack in Riyadh 발표용 슬라이드와 셸코드 없는 JOP(Shellcodeless JOP)에 관한 백서(white paper)를 업로드했습니다. 발표에서 사용된 무성 데모 동영상은 다음 링크에서 확인할 수 있습니다: https://www.youtube.com/playlist?list=PLynyJsHgQaJ3AfQGKVkeZJ9cWa7mIqDMV

업데이트: 2022년 12월 1일: 이 GitHub 문서 끝부분에 Q & A를 추가했습니다. 여기에는 리소스(발표 및 논문) 링크가 포함되어 있습니다.

현재 버전: 2.15

JOP ROCKET(Jump-oriented Programming Reversing Open Cyber Knowledge Expert Tool)은 x86 Windows 환경에서 JOP 가젯 탐색을 돕기 위해 설계된 도구입니다. 이 도구는 DEF CON 27에서 공개되었으며, Dr. Bramwell Brizendine과 Dr. Josh Stroschein의 발표 주제였습니다. 대규모 업데이트가 개발 중이었으며 2020년 9월에 출시되었고, 가까운 시일 내에 소규모 업데이트가 계획되어 있습니다.

이 도구를 다운로드하려면 https://github.com/Bw3ll/JOP_ROCKET로 이동하세요.

많은 주요 업데이트가 이루어졌습니다. 많은 업데이트를 활용하려면 2.15 이전의 모든 버전을 업데이트하는 것이 좋습니다. 여기에는 자동 JOP 체인 생성, 새로운 유형의 가젯 발견, 새로운 유형의 디스패처 가젯, 그리고 2-가젯 디스패처가 포함됩니다. JOP ROCKET은 또한 성능과 속도를 향상하고 최적화하기 위한 많은 중요한 변경을 거쳤습니다.

JOP ROCKET은 Capstone 디스어셈블리 엔진과 기타 종속성을 활용하는 Python 프로그램입니다. 이 소프트웨어 익스플로잇 도구는 점프 지향 프로그래밍(Jump-oriented Programming)을 용이하게 하기 위해 설계된 완전한 기능을 갖춘 산출물입니다. Windows에서 실행되도록 제작되었습니다.

현재 도움말 메뉴에 있는 내용 외에는 사용 정보가 제공되지 않습니다. JOP 익스플로잇을 구성하는 것은 간단하지 않으며 매우 미묘한 이해가 필요합니다. ROP와 일부 유사점이 있지만 많은 차이점이 있습니다. 간단한 데모를 보려면 DEF CON 발표를 참조하세요. https://www.youtube.com/watch?v=PMihX693mPE

이 도구는 Dakota State University의 박사 과정에서 프로그램 내 가장 도전적인 과목인 CSC 848: Advanced Software Exploitation의 일부로 가르쳐졌습니다. 학생들은 DEP 및 ASLR 우회를 포함한 익스플로잇을 완성했습니다.

JOP ROCKET과 관련된 다양한 문제에 대해 도움을 주신(설치 지침 포함) Austin Babcock에게 감사드립니다. 그는 JOP의 대가입니다.

관심 있는 분들이 JOP ROCKET을 사용하여 일부 샘플 토이 바이너리에서 JOP를 테스트하고 연습할 수 있도록 여기에 아카이브, JOP ROCKET challenge - toy binaries.zip을 업로드했습니다. DEP(데이터 실행 방지, Data Execution Prevention)를 우회할 수 있습니까? 취약하다는 것이 보장되고 올바른 가젯이 있는 바이너리에서 JOP를 연습하려는 경우 유용합니다. 동일한 바이너리의 쉬운 버전과 더 어려운 버전이 있습니다. 다만 처음에는 요령을 익힐 때까지 JOP가 더 어려울 수 있습니다. 이러한 바이너리로 JOP를 마스터하면 충분한 가젯이 있다는 가정 하에 실제 세계의 가젯에서도 시도해 볼 수 있습니다. 디스패처 가젯 패러다임을 사용하는 경우 디스패처 가젯이 필요하다는 점을 명심하세요. JOP는 ROP와 혼합하는 것도 가능합니다. JOP 가젯을 사용하여 RET를 가리키게 하면, 예를 들어 JMP EDX에서 EDX가 RET를 가리킬 수 있습니다. 이는 ROP를 작동시키는 데 JOP 가젯이 한두 개만 필요한 경우 더 유용합니다. 하지만 아카이브의 바이너리를 사용하면 디스패처 가젯 패러다임을 몇 가지 다른 방식으로 사용할 수 있습니다!

JOP의 디스패처 가젯 패러다임을 사용하면 ROP를 100% 제거할 수 있습니다. 다만 디스패치 테이블과 디스패처 가젯을 로드하기 위해 두 개의 ROP 가젯으로 시작하는 것이 가장 쉽습니다. 사전 구축된 JOP 체인은 해당 가젯이 존재한다는 가정 하에 이를 자동으로 수행합니다. 그 시점부터는 간접 점프와 간접 호출(JMP EBX, CALL EDX 등)을 모두 사용하는 순수 JOP가 가능합니다.

JOP ROCKET 기본 설치 지침

1단계:

Python 2.7을 설치합니다. 가장 쉬운 방법은 웹사이트에서 설치하는 것입니다: https://www.python.org/download/releases/2.7/

이미 Python 3가 있는 경우에도 Python 2.7이 필요합니다. 이 도구는 Python 3에서는 제대로 작동하지 않기 때문입니다.

둘 다 있는 경우 특별한 주석을 추가해야 합니다:

#!python2

을 rocket.py 상단에 추가하세요. 그런 다음 "python rocket.py" 대신 "py rocket.py"로 실행하세요. 이렇게 하면 프로그램이 Python 2.7을 사용하여 실행됩니다. 또는 py -2 rocket.py를 실행해도 됩니다.

alt text

2단계:

pip가 Python에 이미 포함되어 있지 않다면 pip를 설치합니다.

  • https://pip.pypa.io/en/stable/installing/

링크의 지침에 따라 제공된 스크립트를 저장하고 실행해야 합니다. 오류가 발생하면 "대체(alternate)" 스크립트를 사용해 보세요.

pip가 여전히 작동하지 않으면 "C:\python27\Scripts"(또는 해당 디렉터리)를 Path 시스템 변수에 추가해 보세요:

  • 시작
  • 컴퓨터를 마우스 오른쪽 버튼으로 클릭
  • 속성
  • 고급 시스템 설정
  • 고급 탭
  • 환경 변수

alt text

3단계:

pip로 종속성 설치를 시작합니다!

참고: pip를 사용한 설치는 Windows 터미널에서 작동해야 하지만 Cygwin 환경에서는 작동하지 않을 수 있습니다. Cygwin을 사용하는 경우 대신 소스 코드로 설치해야 할 수도 있습니다. 이는 더 많은 시간이 소요될 수 있는 작업이므로 각 종속성 제작자의 최신 문서를 참조하시기 바랍니다.

  • pip install capstone

  • pip install pefile2

    • Python 2.7과 함께 pefile이 이미 설치되어 있을 가능성이 높지만, 이 버전은 오래된 버전입니다.

    • 필요한 것은 Pefile2입니다.

    • 프로그램이 pefile2를 사용하도록 하려면 pip uninstall pefile을 실행해야 할 수 있습니다.

  • 기타... 종속성 목록은 이 문서 하단에서 확인할 수 있습니다. 아직 설치되지 않은 경우 각각 설치해야 합니다.

  • 위의 두 가지가 아마 직접 설치해야 할 전부일 것입니다.

대부분의 종속성은 Python에 이미 포함되어 있습니다. 사용 가능한 모듈을 나열하려면 프롬프트를 여세요:

alt text

목록을 살펴보고 모든 종속성이 있는지 확인하세요. 없는 항목은 pip 또는 소스 코드를 통해 설치하세요.

종속성:

  • Capstone
  • pywin32
  • Pefile2
  • Ctypes

참고: pywin32는 Win32file 및 Win32api에 사용됩니다.

필요한 파일:

하나의 디렉터리에 다섯 개의 파일, 즉 rocket.py, lists,py, checkIt.py, ui.py, stackpivot.py가 모두 있어야 합니다. 도구 사용을 시작하려면 명령줄에서 python rocket.py filename.exe를 실행하세요. 여기서 filename.exe는 JOP 가젯 또는 JOP 체인을 얻고자 하는 프로그램입니다.

오류:

"SyntaxError: Missing parentheses in call to 'print'"와 같은 오류가 발생하면 Python 3로 실행되고 있을 가능성이 높습니다. 1단계에서 설명한 수정 방법을 적용하여 프로그램이 Python 2를 사용하도록 해보세요.

"lists" 또는 "ui"와 관련된 오류는 lists.py 및 ui.py 파일의 위치 때문에 발생할 가능성이 높습니다. 이 파일들이 rocket.py와 같은 디렉터리에 있는지 확인하세요.

고급 설치 단계

Cygwin 환경에서 이 도구를 사용하려면 Capstone을 소스에서 설치해야 할 가능성이 높습니다. 이를 수행하는 방법은 다양하며 Capstone 문서에서 도움을 받을 수 있습니다. Cygwin은 원래 도구 개발 중에 사용되었지만 더 이상 그렇지 않습니다. JOP ROCKET v2.0은 Cygwin에서 테스트되지 않았으며, JOP ROCKET은 명령 프롬프트 사용을 권장합니다. 참고: Cygwin 사용은 더 이상 명시적으로 지원되지 않으며, 이 프로그램과 함께 사용하는 것도 더 이상 권장되지 않습니다.

기본 사용법

더 자세한 사용 정보는 추후 제공될 예정입니다. 도움이 필요하면 DEF CON 27 발표와 도움말 하위 메뉴를 참조하세요.

시작하려면 다섯 개의 Python 파일(rocket.py, ui.py, stackpivot.py, checkIt.py, lists.py)을 같은 디렉터리에 두어야 합니다. 그런 다음 명령줄에서 실행하세요. 설치 디렉터리의 로컬 파일을 제공할 수 있지만 모듈/DLL은 찾을 수 없습니다. 이를 찾으려면 프로그램이 설치되어 있어야 하며, 애플리케이션의 절대 경로를 텍스트 파일 안에 입력하여 명령줄 인수로 제공할 수 있습니다. 예:

python rocket.py input.txt

input.txt 안에는 절대 경로(예: C:\rocket2\sample_binary.exe)가 있어야 합니다. 절대 경로를 제공하면 원하는 경우 스캔할 모듈도 추출할 수 있습니다. 로컬 디렉터리의 프로그램만으로 JOP ROCKET을 사용하려면 이미지 실행 파일 자체에 대해서만 가젯을 찾습니다(즉, DLL은 없음). 이러한 방식으로 사용하려면 다음 구문을 사용하세요:

python rocket.py sample_binary.exe

실행 파일이 같은 디렉터리에 있으면 위에서 설명한 방식으로 JOP ROCKET을 사용할 수 있습니다.

바이너리의 모든 모듈/DLL을 확보하기

분석할 실행 파일 또는 DLL을 로드할 때 두 가지 방법이 있습니다. 첫 번째는 실행 파일을 같은 디렉터리에 두고 이를 인수로 사용하여 프로그램을 실행하는 것입니다(예: python rocket.py binary.exe). 이렇게 하면 많은 시스템 모듈을 식별하고 추출할 수 있습니다. 그러나 일부 비시스템 바이너리는 찾을 수 없습니다. 포괄적인 범위를 위해 사용자는 텍스트 파일에 애플리케이션의 절대 경로를 제공하고 이를 ROCKET의 입력으로 사용해야 합니다(예: python rocket.py input.txt). 그러면 ROCKET이 대상 애플리케이션과 관련된 비시스템 DLL을 찾고, 추출하고, 검색할 수 있습니다. 따라서 일반적으로 텍스트 파일을 통해 바이너리를 입력으로 제공하는 것이 좋습니다. 그렇지 않으면 일부 DLL이 제외될 수 있기 때문입니다. 예: python rocket.py binaryToScan.txt. binaryToScan.txt에는 바이너리 경로, C:\Users\CoolPerson\Desktop\Instructions\targetBinary.exe가 포함되어야 합니다.

매우 큰 바이너리의 메모리 문제

32비트 Python은 매우 큰 바이너리에서 제대로 작동하지 않습니다. 이러한 바이너리를 처리하려면 64비트 Python을 사용해야 합니다.

다음은 Austin이 32비트 Python에서 64비트 Python으로 전환하는 방법에 대해 제공한 지침입니다: python2.7의 64비트 버전을 설치하려면 먼저 기존 설치 버전이 제거되었는지 확인하세요. 64비트 버전을 설치한 후 "DLL load failed: %1 is not a valid Win32 application"과 같은 라이브러리 가져오기 오류가 발생할 수 있습니다. 이는 Python이 이전에 설치된 32비트 버전을 로드하려고 하기 때문에 발생합니다. 이 문제를 해결하려면 pip를 사용하여 라이브러리를 제거하세요. Python 2와 3이 모두 설치된 경우 "py -2 -m pip "로 사용하여 올바른 버전의 pip가 사용되도록 하세요.

capstone 문제 해결은 간단합니다:

py -2 -m pip uninstall capstone

py -2 -m pip install capstone

win32api 가져오기 오류는 pywin32와 관련이 있습니다. pip가 이 과정을 자동화하지 못할 수 있으므로 제거가 더 어렵습니다. ...\Python27\Lib\site-packages 내의 PyWin32 파일을 삭제하여 수동으로 제거해야 할 수도 있습니다.

그런 다음 실행합니다:

py -2 -m pip install pywin32

이후 ...\Python27\Scripts\pywin32_postinstall.py -install을 실행하여 설치를 완료합니다.

Q & A

Q: JOP ROCKET의 특별한 점은 무엇인가요?

A: JOP ROCKET은 디스패처 가젯을 포함한 모든 필수 가젯을 찾아냅니다. 디스패처 가젯을 검색하는 다른 도구는 알지 못합니다. 또한 JOP에 새로운 유형의 가젯과 혁신을 도입합니다. JOP ROCKET은 일련의 다중 스택 피벗을 포함하는 디스패처 가젯 패러다임의 새로운 변형을 사용하여 DEP를 우회하는 완전한 JOP 체인을 생성할 수도 있습니다. 현실적으로 JOP ROCKET 없이 디스패처 가젯 접근 방식을 사용하여 JOP 익스플로잇을 수행하는 것은 매우 어려울 것입니다. 더 제한적인 JOP 가젯을 제공하는 다른 ROP 도구도 있지만, 대부분 향후 작업을 위한 자리 표시자에 불과하며 JOP ROCKET으로 찾은 일부 가젯 없이는 JOP 익스플로잇을 완성할 수 없습니다.

Q: 이전에 어떤 발표에서 JOP ROCKET을 본 것 같은데요? 어디였나요?

A: 우리는 여러 컨퍼런스에서 발표했습니다: DEF CON 27(2019), Wild West Hackin' Fest(2020), Hack in the Box Amsterdam(2021), Black Hat Asia(2021), 그리고 @Hack(2021)(현재 Black Hat Middle East and Africa로 이름 변경). 각각에 대해 일반적으로 백서와 동영상이 있습니다(@Hack에는 동영상 없음). 학술 컨퍼런스도 있었습니다. 각 발표와 백서는 서로 다르며, 일반적으로 최소 60-70%의 새로운 내용이 포함됩니다. JOP에 대한 다양한 주제를 다룹니다. 우리는 새로운 발표 계획이 없으며, 반복을 좋아하지 않기 때문에 공유할 새로운 내용이 없다면 또 다른 발표를 하지 않을 것입니다.

다음은 일부 JOP 자료의 제한된 목록입니다. 우리는 지속적으로 발전하고 새로운 혁신을 추가하고 있으므로 동일한 발표나 논문이 아닙니다. 각각 새로운 기여가 있습니다.

DEF CON 27 2019 동영상: https://www.youtube.com/watch?v=PMihX693mPE

Wild West Hackin' Fest 2020 동영상: https://www.youtube.com/watch?v=ZQuxSSBfeHM

Black Hat Asia 동영상: https://www.youtube.com/watch?v=NYgTw-h6GT8

Black Hat Asia 논문: https://i.blackhat.com/asia-21/Thursday-Handouts/as-21-Brizendine-Babcock-Prebuilt-Jop-Chains-With-The-Jop-Rocket-wp.pdf

Hack in the Box Amsterdam 2021 동영상: https://www.youtube.com/watch?v=MxIySXHvKyE

Hack in the Box Amsterdam 2021 논문: http://magazine.hitb.org/wp-content/uploads/2021/06/HITBMag-Issue-12-June-2021-.pdf

고해상도: http://magazine.hitb.org/wp-content/uploads/2021/06/HITBMag-Issue-12-June-2021-Hi-res.pdf

@Hack 2021(Black Hat Middle East and Africa로 이름 변경) 논문: https://blackhatmea.com/content-hub/advanced-code-reuse-attacks-jump-oriented-programming

학술 연구자라면 이 자료 중 일부 또는 우리의 학술 논문도 인용해 주시기 바랍니다. :-)

Q: 실제 세계의 JOP 익스플로잇 예시는 무엇인가요?

A: Austin이 Exploit DB에 하나를 게시했습니다: https://www.exploit-db.com/exploits/49959

우리가 진행한 HITB 2021 프레젠테이션에서 이에 대한 동영상과 Austin이 설명하는 내용을 볼 수 있습니다. 그 실제 JOP 익스플로잇은 몇 가지 특별한 문제를 제기했기 때문에 살펴보고 연구하기에 좋습니다. Austin이 수작업으로 작성했지만, 실제로는 JOP ROCKET의 자동 JOP 체인 생성이 대부분의 작업을 수행했을 것입니다. (일부 문제를 보완하기 위한 추가적인 특별 설정은 여전히 필요했을 것입니다.) 이는 또한 일련의 다중 스택 피벗을 사용하는 디스패처 가젯 접근 방식에 대한 우리의 새로운 변형의 예이기도 합니다. 이 익스플로잇은 완성하는 데 하루도 채 걸리지 않았습니다.

Q: JOP는 어렵나요?

A: 아니요, 어렵지 않지만 ROP와는 매우 다릅니다. 장소에 따라 즉시 명확하지 않을 수 있는 다른 "규칙"이 있습니다. 우리는 다양한 논문에서 이에 대해 광범위하게 작성하거나 진행한 여러 발표에서 이에 대해 이야기합니다. 그러나 때때로 어려울 수 있는 것은 충분한 가젯을 확보하는 것입니다. JOP에는 다양한 스타일이 있으며, ROP 없이 완전한 JOP 익스플로잇을 수행할 수 있는 디스패처 가젯 접근 방식을 시도하는 경우 디스패처 가젯이 있어야 합니다.

Q: JOP는 단지 이름만 바뀐 ROP가 아닌가요?

A: JOP는 매우 유연합니다. 그렇게 될 수 있습니다. JOP 가젯에 RET를 로드할 수 있으며, 예를 들어 JMP EBX를 실행할 때마다 RET와 동일하게 됩니다. 그런 의미에서 JOP를 ROP를 확장하는 방법으로만 사용할 수 있으며 디스패처 가젯이 필요하지 않습니다. 정말 원한다면 가능하지만, 그런 방식으로 전체 익스플로잇을 구축하는 것은 지루해 보일 것입니다. 우리는 다른 스타일의 JOP에 대해서도 작성하지만, 대부분의 작업은 디스패처 가젯 접근 방식에 집중하고 있습니다.

Q: 디스패처 가젯이란 무엇인가요? 쉽게 찾을 수 있나요? 2-가젯 디스패처란 무엇인가요?

A: 그것은 비교적 드문 가젯이었고 항상 쉽게 찾을 수 있는 것은 아니었습니다. 일부 바이너리에는 실행 가능한 디스패처 가젯이 전혀 없을 수도 있습니다. 여기서 과거형이 사용되고 있음에 주목하세요. 우리는 대체 디스패처 가젯을 도입했으며, 더 중요하게는 HITB 논문에서 작성한 2-가젯 디스패처를 도입했습니다. 이는 두 개의 일반적인 가젯을 가져와 함께 연결하므로 디스패처 가젯은 더 이상 드물지 않습니다. 필요한 가젯 중 하나는 너무 흔해서 거의 모든 레지스터에 대한 변형이 일반적으로 존재합니다. 다른 하나는 매우 흔하지만 그만큼 흔하지는 않습니다. 다만 2-가젯 디스패처를 사용하면 다른 레지스터 하나를 추가로 점유하게 되므로 실용적인 제한이 있을 수 있습니다. (추가 유연성이 필요한 경우 익스플로잇 중에 사용 중인 디스패처 가젯과 레지스터를 전환하는 것이 가능합니다.)

Q: 2-가젯 패러다임이 JOP ROCKET의 자동 JOP 체인 생성에 내장되어 있나요?

A: 아니요, 내장되어 있지 않습니다. 자동 JOP 체인 생성은 만드는 데 시간이 많이 걸렸고, 2-가젯 디스패처 개념은 그 이후에 만들었습니다. 언젠가는 추가를 시도할 수도 있지만 당장은 아닙니다. 더 가능성 있는 시나리오는 JOP ROCKET을 완전히 다시 작성할 때만 추가되는 것입니다. 기본적으로 JOP ROCKET은 기존의 디스패처 가젯을 찾을 수 없는 경우에도 사용 가능한 모든 레지스터에 대해 다양한 변형의 JOP 체인을 생성합니다. 따라서 누군가가 직접 2-가젯 디스패처를 추가하는 것은 그리 많은 노력이 들지 않을 것입니다. 다만 도구가 자동으로 처리하지 않으므로 2-가젯 디스패처를 위해 보호해야 하는 레지스터에 주의를 기울여야 합니다.

Q: 직접 JOP 체인을 만들어 보고 싶습니다. 그렇게 할 수 있나요?

A: 물론입니다. 튜토리얼 목적으로 GitHub에 인위적으로 생성된 JOP 가젯이 포함된 바이너리(쉬운 버전과 어려운 버전의 두 가지 형태)를 제공하고 있습니다. 어려운 버전에는 널 바이트 제한이 있습니다. 자동 JOP 체인 생성 없이 직접 가젯을 찾을 수 있는지 시도해 볼 수 있습니다. 자동 JOP 체인 생성과 함께 시도할 수도 있습니다. 자동 JOP 체인 생성의 경우 널 바이트를 처리할 때 추가 작업을 수행해야 합니다. 그 중 일부를 자동화하는 것은 향후 추가 작업 영역이 될 수 있다고 생각합니다.

Q: JOP ROCKET은 왜 구형 Python 스타일을 사용하나요? 현대적인 Python으로 변경할 예정인가요?

A: 처음 만든 것은 몇 년 전이며, 그 당시에는 공유할 의도가 전혀 없었습니다. 처음 DEFCON에 제출한 것은 우연이었습니다. 안타깝게도 현대 Python과 구형 Python의 차이로 인해 JOP ROCKET을 변경하는 것은 매우 사소하지 않은 작업이며, 차이가 영향을 미치는 복잡한 함수가 많습니다. JOP ROCKET은 또한 매우 크기 때문에 변경이 필요한 모든 위치를 반드시 기억하지는 못합니다. 아마도 JOP ROCKET을 완전히 다시 작성하고, 현재보다 훨씬 더 모듈화되고 컴팩트하게 만들 가능성이 높습니다. 그렇게 한다면 추가하고 싶은 새로운 기능이 몇 가지 있으며, 그렇게 한다면 매우 멋진 일을 할 수 있습니다. 당장은 계획이 없지만 앞으로 1~3년 내에 할 수 있습니다. 때로는 코드를 매우 빠르게 다시 작성할 수 있으므로 절대라고 말하지는 않겠습니다. 그동안 전체 재작성보다는 작은 업데이트가 더 쉽기 때문에 현재 JOP ROCKET에 다른 업데이트를 적용할 수도 있습니다.

Q: "우리(we)"는 누구인가요?

A: JOP ROCKET의 창시자는 Dr. Bramwell Brizendine입니다. 이것은 원래 그의 박사 학위 논문의 주제였지만, 그 이후로 많이 성장하고 변화했습니다. 그의 학생 중 한 명인 Austin Babcock은 학부생 때 JOP 연구에 참여하기 시작했으며 컴퓨터 과학 석사 학위를 통해 계속 참여했습니다. 그 기간 동안 Austin은 여러 논문의 공동 저자이자 여러 이벤트의 공동 발표자였습니다. Austin은 JOP 작동 방식의 메커니즘에 중요한 기여를 했습니다. 이후 JOP ROCKET의 기여자로 합류하여 주로 최적화와 코드 개선을 도입했습니다. Austin은 여러 JOP 익스플로잇을 만들었습니다. 그중 하나는 ExploitDB에 있습니다.

**Q: 여러분이 JOP에서 최근에 수행한 "최신" 작업은 무엇인가요?**A: 음, 두 개의 가젯으로 구성된 디스패처(dispatcher)가 있는데, 이로 인해 디스패처 가젯이 더 이상 희귀하지 않게 되면서 수많은 바이너리에서 JOP가 가능해졌습니다. 이것은 엄청난 것입니다. 왜냐하면 많은 경우에 유효한 디스패처 가젯의 부재가 제약이 되곤 했는데, 이제는 그런 경우가 더 이상 아니기 때문입니다. 또한 몇 가지 대체 단일 디스패처 가젯도 소개했지만, 대부분은 흔하지 않은 것 같습니다(그중 일부는 Andrew Kramer의 공로로 볼 수 있습니다). 또한 "셸코드 없는 JOP(shellcodeless JOP)"도 소개했는데, 이는 DEP 우회의 필요성을 피하고 셸코드의 기능을 JOP에 직접 통합합니다. 우리는 HITB에서 그 일부를 다루었고 @Hack 2021(Black Hat MEA)에서 더 많은 내용을 다루었습니다. @Hack은 촬영되지 않았지만, 매우 상세한 논문이 있습니다. 실제 동작하는 클립은 @Hack 2021의 일부 무음 데모 영상에서 볼 수 있습니다: https://www.youtube.com/playlist?list=PLynyJsHgQaJ3AfQGKVkeZJ9cWa7mIqDMV . 셸코드 없는 JOP의 도전 과제를 받아들인 학생들이 몇 명 있었습니다. 이는 코드 재사용 공격에 대한 더 큰 기술과 숙련도를 요구하는 일입니다.

Q: JOP ROCKET은 Linux 바이너리에서도 작동합니까?

A: 아니요, 아쉽게도 작동하지 않습니다.

Q: JOP ROCKET은 64비트 바이너리에서도 작동합니까?

A: 아니요, 현재로서는 작동하지 않습니다.

Q: JOP의 일반적인 접근 방식은 무엇입니까?

A: 저희 논문을 읽거나 강연을 시청하십시오. 우리는 JOP로 할 수 있는 것을 확장하는 데 엄청난 작업을 했습니다. 우리 연구 이전에는 JOP에 대한 문서가 사실상 전무했고, 우리는 JOP를 위한 많은 새로운 실용적 기법을 만들었습니다.

Q: 저는 학계 연구자이며 논문이나 발표에서 JOP를 활용하고 싶습니다. 연락해도 될까요?

A: 물론입니다. 논문이나 새로운 프로젝트를 계획하고 있다면 연락하셔도 됩니다. bramwell.brizendine AT gmail 로 연락해 주십시오. Austin이 관심이 있다면 전달해 드리겠습니다. 협업 가능성도 있습니다. JOP 관련 연구를 활용하신다면 저희를 인용해 주십시오. 아마도 JOP 관련 연구에서 가장 실용적인 접근 방식은 JOP에 대한 방어 또는 완화 기법을 도입하는 것일 것입니다. 이전에 연락을 받은 적도 있습니다.

Q: 다른 사람들도 JOP를 수행한 적이 있습니까?

A: 흔하지 않으며, 우리의 첫 DEFCON 강연 이전에는 극히 드물었습니다. 우리는 확실히 그 인지도를 크게 높였습니다. 저는 이전에 박사 과정 고급 소프트웨어 익스플로잇(Advanced Software Exploitation) 과정에서 3년 동안 이를 가르쳤으므로 수십 명의 학생들이 JOP 익스플로잇을 만들었습니다. 실제 현장에서 얼마나 많은 사람들이 하는지는 모르겠지만, 이제는 JOP ROCKET으로 누구나 할 수 있습니다. 또한 여러 학부생들도 JOP 익스플로잇을 만들게 했습니다. 반드시 박사 과정 학생일 필요는 없습니다. 익스플로잇과 코드 재사용 공격에 강한 역량을 가진 사람이라면 누구나 가능합니다. 우리가 진행한 수많은 강연과 저술한 논문, 그리고 두 가젯 디스패처와 같은 혁신 덕분에 ROP에 능숙한 사람이라면 누구든 JOP를 익힐 이유가 충분합니다.

Q: JOP ROCKET이 왜 필요했습니까?

A: JOP ROCKET이 없다면 JOP 가젯의 일부만 발견하게 되고 그것들도 정리되어 있지 않아서, 무언가를 찾는 것이 건초 더미에서 바늘을 찾는 것과 같을 것입니다. 많은 실제 JOP 가젯은 자연적으로 발생하지 않는 의도하지 않은 가젯입니다. 따라서 매우 헌신적인 특별한 사람이 되어 직접 도구나 스크립트를 만들지 않는 한, ROP 가젯 없이 완전한 JOP 익스플로잇을 만들려고 한다면 많은 것을 놓치게 될 것입니다. 또한 디스패처 가젯 같은 것들도 있는데, 의도하지 않은 형태까지 스스로 마법처럼 찾아내야 합니다. 우리 연구 이전에 JOP가 매우 드물고 거의 논의되지 않았던 데는 그럴 만한 이유가 있습니다. 그렇다고 지금 흔해졌다는 뜻은 아닙니다. JOP ROCKET 이전에는 익스플로잇을 작성하기 위해 극복해야 할 몇 가지 중요한 문제들이 있었습니다. 이제 JOP ROCKET으로 그러한 문제들이 해결되었으며, JOP 가젯으로 직접 빌드하거나 자동 JOP 체인 생성 기능을 통해 생성된 JOP 체인을 변형하여 사용할 수 있습니다.

Q: JOP이 ROP보다 더 쉬울 수 있습니까?

A: 실제로 일부 학생들로부터 JOP이 ROP보다 더 쉽다는 말을 들었습니다. 올바른 가젯과 다중 스택 피벗을 사용하는 우리의 새로운 디스패처 가젯 접근 방식을 사용한다면 그럴 수 있습니다. 여기서 핵심 단어는 "~할 수 있다(can be)"입니다. 이는 널 바이트 제한이 없고 스택 피벗 가젯이 풍부하며 유효한 디스패처 가젯이 있다는 특수한 상황에서만 성립합니다.

Q: JOP은 누구를 위한 것입니까?

A: 주로 코드 재사용 공격에 능숙하고 스스로에게 도전하며 최첨단 기술을 시도하려는 사람들을 위한 것이라고 생각합니다. 물론 모든 JOP이 반드시 "어려울" 필요는 없습니다. JOP을 할 수 있다면 그것은 자랑스러운 배지입니다. JOP 익스플로잇을 만들었다면 ExploitDB에 게시하고 JOP ROCKET을 링크하여 인지도를 높이는 데 도움을 주십시오. JOP은 단순히 ROP 사용을 피하려는 사람들을 위한 것일 수도 있습니다. ROP 가젯을 탐지하는 완화 기법이 있을 수 있습니다. JOP은 ROP이 아니며, 단 하나의 ROP 가젯 없이도 완전한 JOP 익스플로잇을 수행할 수 있습니다.

Q: 자동 JOP 체인 생성을 실행했는데 VirtualAlloc과 VirtualAlloc에 대해 많은 다른 체인이 생성되었습니다. 왜 그렇게 많은 것입니까?

A: 저는 특정 레지스터가 디스패처 가젯에 대한 포인터와 디스패치 테이블에 대한 포인터를 보유한다는 관점에서 JOP에 접근하므로 해당 레지스터는 사용 중입니다. 기능적 가젯(일반 ROP 가젯과 더 유사함)은 디스패처 가젯을 호출하고, 디스패처 가젯은 디스패치 테이블의 위치를 전진시킵니다. 따라서 JOP ROCKET은 서로 다른 레지스터 조합을 사용하여 서로 다른 체인을 생성합니다. 일부 레지스터는 디스패처 가젯과 디스패치 테이블을 위해 "예약"되지만, 원한다면 원하는 만큼 자유롭게 전환할 수 있습니다. 일부 레지스터는 더 바람직한 JOP 체인을 가질 수 있습니다. 예를 들어 사용하기에 "더 쉬운" 가젯이 있다는 의미에서 그럴 수 있습니다. 그래서 우리는 옵션을 제공하는 것을 좋아합니다. 기본적으로 JOP ROCKET은 각각에 대해 5개를 생성하므로, 하나에 문제가 있으면 다른 것을 살펴볼 수 있습니다. 또한 JOP ROCKET은 바람직한 디스패처 가젯이 발견되지 않더라도 이러한 체인을 생성하는데, 항상 대안 또는 두 가젯 디스패처가 있을 수 있기 때문입니다. (JOP ROCKET은 두 가젯 디스패처를 찾지만 현재는 이를 JOP 체인 생성에 통합하지 않습니다.) 따라서 질문으로 돌아가서, JOP ROCKET은 많은 옵션을 제공하려고 하며, 사용자가 이를 평가하여 가장 바람직하거나 작업하기 쉬운 것을 결정하는 것은 사용자의 몫입니다.

Q: JOP ROCKET이 자동 JOP 체인 생성에서 좋은 결과를 주지 못하고 있습니다. 왜 그럴까요?

A: 경우에 따라 버그가 있을 수 있습니다. 그러나 자동 JOP 체인 생성은 여러 스택 피벗을 사용한다는 점을 기반으로 작동한다는 점을 기억하는 것도 중요합니다(강연 및 논문 참조). 원하는 피벗 양을 제공해야 하며, 기본값에 따라서만 결과가 생성되기 때문입니다. 매우 큰 뛰어난 스택 피벗이 있을 수 있는데, 범위 밖에 있어서 놓칠 수 있습니다. 따라서 허용 가능한 스택 피벗의 범위를 계산하여 최소값과 최대값을 제공해야 합니다. 나중에 패딩으로 조정할 수 있으므로 정밀할 필요는 없습니다.

Q: 컴파일러에서 JOP 관련 "취약점"이 있습니까?

A: 실제로 있습니다. Visual Studio 2015의 경우, 개발자 프롬프트(Developer Prompt)로 컴파일한 모든 것에서 항상 존재하는 매우 바람직한 디스패처 가젯 두 개를 발견했습니다! 한 강연에서 이에 대한 자세한 정보를 포함하려 했지만 시간 관계상 빠졌습니다. 나중에 별도로 포함할 수도 있습니다. 나쁜 소식은 약 1년 전까지 다른 연도의 Visual Studio 에디션으로 만든 모든 바이너리를 평가했지만 이러한 현상이 반복되지 않았다는 것입니다. 훌륭한 디스패처 가젯을 갖는 것은 좋지만, 다른 곳에서 설명한 대로 우리가 소개한 새로운 두 가젯 디스패처를 사용하면 그것은 필수가 아닙니다. 또한 이것은 실제로 취약점이 아니라, 실제 취약점이 존재한다는 가정 하에 JOP에 쉽게 접근할 수 있음을 보장하는 방법일 뿐입니다.

Q: JOP ROCKET은 독립형 도구입니까? 디버거와 함께 작동합니까?

A: 네, 정적 분석 기반의 독립형 도구이며, 아니요, Mona와 같은 디버거와 통합할 수 없습니다. JOP ROCKET에는 찾을 수 있는 DLL을 검색하는 옵션이 있으며, 이를 통해 검색할 수 있습니다. 물론 대부분의 Windows 시스템 DLL은 완화 기법으로 인해 사용할 수 없습니다. JOP ROCKET이 완화 기법에 따라 제외하거나 포함하도록 할 수 있습니다. 정적 분석이기 때문에 선택적으로 DLL을 검색할 수는 있지만, IAT에서 찾을 수 없거나 JOP ROCKET이 위치를 쉽게 결정할 수 없는 일부 DLL은 놓칠 수 있습니다. 이는 정적 분석의 고유한 한계입니다. 기본적으로 JOP ROCKET은 시간을 절약하기 위해 이미지 자체, 즉 .exe만 검색하고 DLL은 검색하지 않습니다. 바이너리를 분석하고 비시스템 DLL을 살펴보려면 해당 애플리케이션이 설치되어 있어야 하며 경로를 제공해야 합니다. DLL에 관심이 없다면 바이너리를 설치할 필요가 없습니다.

Q: 다음 인용문에 대해 논평해 주시겠습니까? "JOP ROCKET은 [Bri19]가 2019년에 발표한 도구로, 완전히 자동화된 방식으로 전체 JOP 체인을 생성한다고 주장합니다. 자세히 살펴보면 이 기법의 실제 사용 사례는 ROP와 JOP 체인이 혼합된 것으로 구성되며, 결과의 일부만 순수 JMP 가젯으로 구성되고 나머지는 RET 명령어로 끝나는 가젯으로 구성되며, JOP 체인 설정에 필요합니다."

A: 안타깝게도 위 내용은 JOP에 대한 이해 부족을 반영합니다. JOP은 디스패처 가젯 패러다임을 사용하며, 이를 위해서는 디스패치 테이블과 디스패처 가젯이 필요합니다. 디스패처 가젯의 주소와 디스패치 테이블의 주소는 JOP을 설정하기 위해 각각의 레지스터에 로드되어야 합니다. 이는 JOP을 통해 수행될 수도 있지만, 호환성을 위해 pop을 사용하는 두 개의 ROP 가젯을 통해 수행되었습니다. 따라서 이 초기화 후에는 단 두 개의 ROP 가젯만 사용되며 추가 ROP 가젯은 사용되지 않습니다. 사용되는 JOP 가젯의 수는 사용자가 제공하는 입력에 따라 1개에서 수십 개까지 다양할 수 있습니다. 여기서 문제는 도구가 아니라 도구와 JOP에 대한 오해입니다. JOP ROCKET은 적절한 입력을 제공한다면 실제 환경에 적합한 익스플로잇을 확실히 제공합니다. 실제로 이것은 저자가 이전에 가르친 고급 소프트웨어 익스플로잇 과정에서 사용되었으며, 학생들은 JOP ROCKET을 사용하여 다양한 JOP 익스플로잇을 만들어야 했습니다. 각 JOP 체인에 최대 두 개의 ROP 가젯만 사용되므로 위와 같은 의견이 학술 연구에서 나온 것은 실망스럽습니다. 우리가 알고 있는 Exploit_DB에 있는 유일한 실제 JOP 익스플로잇은 우리 중 한 명인 Austin Babcock의 것이며, 그가 Hack in the Box Amsterdam 2021에서 설명했듯이 그의 익스플로잇은 JOP ROCKET이 찾은 것과 매우 밀접하게 일치합니다. 대부분의 실용적인 경우에 설정을 위해 두 개의 ROP 가젯을 사용하는 것은 실제로 큰 차이를 만들지 않습니다. 때로는 바이너리에 디스패처 가젯 패러다임에 부합하는 적절한 JOP 가젯이 없어 JOP 설정이 어려울 수도 있습니다. 우리는 100% 순수 JOP에 대한 욕구로 인해 제한하기보다는, 잠재적으로 모든 바이너리에서 JOP이 가능하도록 하는 것을 선호합니다. 결국 JOP의 가장 큰 제한 중 하나는 JOP 가젯의 부족입니다. 2024년 현재 JOP ROCKET에 대한 활발한 업데이트는 이루어지지 않고 있으며, 훨씬 더 새롭고 발전된 ROP ROCKET을 패턴으로 하는 가능한 새 버전에서는 순수 JOP 옵션이 포함될 가능성이 높습니다.

도구 다운로드