목록바이너리 분석 (14)
topcue
Executable HeaderSection HeadersSectionsProgram HeadersLazy Binding참고 및 인용리눅스 기반 시스템의 기본 바이너리 형식인 ELF(Executable and Linkable Format)을 살펴보자.ELF는 실행 가능한 바이너리 파일, 목적 파일, 공유 라이브러리, 코어 덤프 등에서 사용되는 형식이다. 여기서는 64비트의 실행 가능한 바이너리 파일을 중심으로 살펴보겠다.A 64-bit ELF binary at a glanceELF 바이너리는 ELF 파일 헤더, 프로그램 헤더, 그리고 섹션들과 섹션 헤더들로 이루어져 있다.Executable Header모든 ELF 파일은 executable header로 시작하며, /usr/include/elf.h에서 확..
The C Compilation ProcessPreprocessingCompilationAssemblyLinkingSymbols and Stripped BinariesLoading and Executing a Binary참고 및 인용The C Compilation Process바이너리 코드(binary code)란 컴퓨터 시스템에 의해 실행되는 0과 1의 조합만으로 표현되는 일련의 기계어 명령의 집합을 말한다.프로그램 = 바이너리 코드(기계어 명령어) + 데이터(변수, 상수 등)일반적으로 binary executable file을 바이너리(binary)라고 부른다.컴파일이란 C/C++과 같은 프로그래밍 언어로 쓰인 소스코드를 컴퓨터 프로세서가 이해할 수 있는 기계어 코드로 바꾸는 과정을 말한다. 전체 컴..
[목차]OverviewAFL++AFL++ buildInstall Xcode-tools and LLVMSwitch Arhcitecture to x86_64Export the LLVM pathBuild AFL++ compilerFuzz with AFL++결론참고💡이글은 m1에서 intel 계열의 바이너리를 퍼징하는 것이 한계입니다. ARM 계열의 바이너리는 instrumentation없이 binary-only fuzzing만 가능합니다. ARM 계열의 Ubuntu Linux에서의 퍼징은 CPUU - ARM64 에서의 Fuzzing - (1) honggfuzz를 참고해주세요.OverviewARM64 기반인 MAC OS X m1이 공개된 이래 ARM 기반의 많은 시스템 & 소프트웨어 해킹 관련 연구가 생겨날 것..
OverviewLinkagestatic linkdynamic linkPLT GOTPLT GOT Flow DiagramPLT GOT 동작 과정 분석PLTreloc_offsetlink_map.dynamic sectionSTRTAB (.dynstr section).got.plt section_dl_runtime_resolve_xsavec()_dl_fixup()_dl_lookup_symbol_x()Patch GOTcall puts()ConclusionOverviewPLT와 GOT의 개념을 정리하고 동적으로 링크된 라이브러리의 함수가 어떻게 호출되는지 상세히 분석한다.Linkage알다시피 바이너리에 라이브러리를 링크하는 방식은 동적과 정적 두 가지가 있다.아래 코드로 간단히 살펴보자.static link정적으로 ..
Overviewdact format취약점 분석ExploitPoCConclusionOverview앞서 발견한 crashing input을 분석하고 exploit 해보자.dact format우선 dact를 이용해 생성한 압축파일인 .dct 파일의 포맷을 분석해보자.dct format$ xxd ~/hello.txt.dct 00000000: 4443 54c3 0008 2a00 0000 0000 0000 0600 DCT...*......... 00000010: 0000 0100 0000 0b00 0000 001a 0400 0968 ...............h 00000020: 656c 6c6f 2e74 7874 0000 0412 e602 1f01 ello.txt........ 00000030: 0004 12e6..
OverviewAFLdactFuzzingBuild dactUse dactBuild dact with scan-buildbuild with AFLFuzz with AFLConclusionOverview비오비 교육 때 박세준 멘토님께서 내주셨던 과제를 정리할 겸 AFL을 이용해 1-day 취약점을 트리거하고 exploit하려 한다.퍼징과 exploit은 Ubuntu Linux 18.04에서 진행한다.아래와 같은 순서로 진행한다.AFL을 이용해 취약점이 있는 0.8.42 버전의 dact를 퍼징한다.crash를 기반으로 취약점을 분석하고 exploit 해본다.AFLafl은 honggfuzz, afl, libfuzzer와 함께 소프트웨어 퍼징을 위한 대표적인 gery-box fuzzer다.자세한 내용은 따로 정리..