
Ghidra 헤드리스용 종합 도구 키트.
이 프로젝트는 정말 재미있었고 제 첫 "큰" 프로젝트였습니다! 더 나은, 더 똑똑한, 더 강력한 솔루션이 이제 존재합니다: https://github.com/LaurieWired/GhidraMCP
안녕, 스페이스 카우보이
이 Ghidra 툴킷은 Ghidra를 Headless 모드로 실행하는 것과 관련된 다양한 작업을 간소화하고 자동화하기 위해 설계된 포괄적인 도구 모음입니다. 이 툴킷은 Ghidra 내부 및 외부에서 실행할 수 있는 광범위한 스크립트를 제공하여 사용자가 분석된 코드베이스에서 취약점 헌팅, ChatGPT를 사용한 의사 코드 코멘팅, 데이터 시각화를 통한 보고 등의 작업을 수행할 수 있게 합니다. 또한 사용자가 자신의 스크립트를 로드 및 저장하고 스크립트의 내장 API와 상호 작용할 수 있도록 합니다.
Headless 모드 자동화: 이 툴킷을 사용하면 Ghidra를 Headless 모드로 원활하게 실행할 수 있어 코드 분석 작업의 자동화 및 일괄 처리가 가능합니다.
스크립트 저장소/관리: 이 툴킷에는 Ghidra 내에서 실행할 수 있는 사전 빌드된 스크립트 저장소가 포함되어 있습니다. 이 스크립트는 다양한 기능을 다루어 사용자가 다양한 분석 및 조작 작업을 수행할 수 있게 합니다. 사용자는 자신의 스크립트를 로드 및 저장할 수 있어 특정 분석 요구 사항에 맞는 유연성과 사용자 정의 옵션을 제공합니다. 사용자는 스크립트 컬렉션을 쉽게 관리하고 정리할 수 있습니다.
유연한 입력 옵션: 사용자는 툴킷을 사용하여 개별 파일이나 여러 파일이 포함된 전체 폴더를 분석할 수 있습니다. 이러한 유연성은 소규모 및 대규모 코드베이스의 효율적인 분석을 가능하게 합니다.
패턴 인식을 통한 취약점 헌팅: 툴킷의 스크립트를 활용하여 분석 중인 코드베이스 내의 잠재적 취약점을 식별합니다. 이는 보안 연구원과 개발자가 보안 약점을 발견하고 사전에 대처하는 데 도움이 됩니다.
SemGrep을 통한 취약점 헌팅: 보안 연구원 0xdea와 그들이 만든 규칙 세트 덕분에 간단한 규칙과 SemGrep을 사용하여 C/C++ 의사 코드의 취약점을 탐지할 수 있습니다 (그들의 GitHub: https://github.com/0xdea/semgrep-rules)
자동 의사 코드 생성: Ghidra의 Headless 모드 내에서 의사 코드를 자동으로 생성합니다. 이 기능은 수동 개입 없이 코드 로직을 이해하고 문서화하는 데 도움이 됩니다.
ChatGPT를 사용한 의사 코드 코멘팅: ChatGPT를 활용하여 의사 코드 조각에 사람과 같은 주석을 생성함으로써 코드베이스의 가독성과 이해도를 높입니다. 이 기능은 코드 로직을 문서화하고 설명하는 데 도움이 됩니다.
보고 및 데이터 시각화: 시각화를 포함한 포괄적인 보고서를 생성하여 분석 결과를 효과적으로 요약하고 제시합니다. 툴킷은 코드베이스의 패턴, 종속성 및 이상 징후를 식별하는 데 도움이 되는 데이터 시각화 기능을 제공합니다.
이 프로젝트를 사용하기 전에 다음 소프트웨어가 설치되어 있는지 확인하십시오:
pip install sekiryu를 사용하십시오.스크립트를 사용하려면 원하는 옵션과 함께 바이너리에 대해 실행하기만 하면 됩니다.
sekiryu [-F FILE][OPTIONS]이진 분석을 Ghidra(또는 다른 제품)로 수행하는 것은 상대적으로 느린 과정입니다. 따라서 호스트 성능에 따라 이진 분석에 몇 분이 걸릴 수 있습니다. Sekiryu를 매우 큰 애플리케이션이나 많은 양의 이진 파일에 대해 실행하는 경우 기다릴 준비를 하십시오.
"server.py"는 기본적으로 스크립트가 Ghidra와 서로, 그리고 호스트 시스템과 상호 작용할 수 있도록 구축되었습니다.
사용자는 자신의 스크립트를 쉽게 개발하고, 스크립트 폴더에 로드 및 저장한 후 API의 알려진 함수를 사용하여 Ghidra와 상호 작용할 수 있습니다.
사용하려면 스크립트에서 xmlrpc를 가져오고 다음과 같은 함수를 호출해야 합니다: proxy.send_data
스크립트는 /modules/scripts/ 폴더에 저장되며, 거기에 스크립트를 복사하면 됩니다.
ghidra_pilot.py 파일에서 headless ghidra 스크립트를 실행하는 다음 함수를 찾을 수 있습니다:
def exec_headless(file, script):
"""
Execute the headless analysis of ghidra
"""
path = ghidra_path + 'analyzeHeadless'
# Setting variables
tmp_folder = "/tmp/out"
os.mkdir(tmp_folder)
cmd = ' ' + tmp_folder + ' TMP_DIR -import'+ ' '+ file + ' "+ "-postscript "+ script +" -deleteProject"
# Running ghidra with specified file and script
try:
p = subprocess.run([str(path + cmd)], shell=True, capture_output=True)
os.rmdir(tmp_folder)
except KeyError as e:
print(e)
os.rmdir(tmp_folder)
사용법은 매우 간단합니다. 자신의 스크립트를 만든 다음 ghidra_pilot.py에 다음과 같은 함수를 추가하기만 하면 됩니다:
def yourfunction(file):
try:
# Setting script
script = "modules/scripts/your_script.py"
# Start the exec_headless function in a new thread
thread = threading.Thread(target=exec_headless, args=(file, script))
thread.start()
thread.join()
except Exception as e:
print(str(e))
cli.py 파일은 명령줄 인터페이스를 담당하며 다음과 같이 인수와 관련 명령을 추가할 수 있습니다:
analysis_parser.add_argument('[-ShortCMD]', '[--LongCMD]', help="Your Help Message", action="store_true")
xmlrpc.server 모듈은 악의적으로 구성된 데이터에 대해 안전하지 않습니다. 신뢰할 수 없거나 인증되지 않은 데이터를 구문 분석해야 하는 경우 XML 취약점을 참조하십시오.
Bushido Security에 대한 자세한 내용은 웹사이트 https://www.bushido-sec.com/를 방문하십시오.