리눅스 바이너리 분석
도서명:리눅스 바이너리 분석
저자/출판사:라이언,오닐/에이콘출판
쪽수:320쪽
출판일:2016-09-23
ISBN:9788960779136
목차
1장. 리눅스 환경과 도구
__리눅스 도구
____GDB
____GNU binutils의 Objdump
____GNU binutils의 Objcopy
____Strace
____Ltrace
____기본 ltrace 명령어
____ftrace
____readelf
____ERESI - ELF 리버스 엔지니어링 시스템 인터페이스
__유용한 디바이스와 파일
____/proc/
/maps
____/proc/kcore
____/boot/System.map
____/proc/kallsyms
____/proc/iomem
____ECFS
__Linker와 관련된 환경 변수
____LD_PRELOAD 환경 변수
____LD_SHOW_AUXV 환경 변수
____링커 스크립트
__요약
2장. ELF 바이너리 포맷
__ELF 파일 형식
__ELF 프로그램 헤더
____PT_LOAD
____PT_DYNAMIC: 동적 세그먼트에서 사용하는 Phdr
____PT_NOTE
____PT_INTERP
____PT_PHDR
__ELF 섹션 헤더
____.text 섹션
____.rodata 섹션
____.plt 섹션
____.data 섹션
____.bss 섹션
____.got.plt 섹션
____.dynsym 섹션
____.dynstr 섹션
____.rel.* 섹션
____.hash 섹션
____.symtab 섹션
____.strtab 섹션
____.shstrtab 섹션
____.ctors와 .dtors 섹션
__ELF 심볼
____st_name
____st_value
____st_size
____st_other
____st_shndx
____st_info
__ELF 재배열
____재배열 가능 코드 인젝션을 이용한 바이너리 패치
__ELF 동적 링킹
____보조 벡터
____PLT와 GOT에 대한 이해
____동적 세그먼트 다시 보기
__ELF 파서 구현
__요약
3장. 리눅스 프로세스 추적
__ptrace의 중요성
__ptrace 요청
____ptrace 요청 형식
__프로세스 레지스터 상태와 플래그
__간단한 ptrace 기반 디버거
____Tracer 프로그램
__프로세스 어태치 기능을 갖는 간단한 ptrace 디버거
__고급 함수 추적 소프트웨어
__ptrace와 포렌식 분석
____메모리에서 찾아야 할 것
__프로세스 이미지 복원: 메모리에 있는 실행 파일로부터
____프로세스 실행 파일 복원 도전 과제
____실행 파일 복원의 문제점
____섹션 헤더 테이블 추가
____프로세스 복원 알고리즘
____32비트 테스트 환경에서 Quenya를 이용한 프로세스 복원
__ptrace를 활용한 코드 인젝션
__중요하게 살펴봐야 할 간단한 예제
__code_inject 도구 활용
__ptrace 안티 디버깅 기술
____내 프로그램이 추적되고 있는가
__요약
4장. ELF 바이러스 기술: 리눅스/유닉스 바이러스
__ELF 바이러스 기술
__ELF 바이러스 기술의 연구
____감염코드는 독립적으로 존재해야 한다
____문자열 저장 문제
____감염코드 저장을 위한 공간 찾기
____감염코드로 실행 흐름 변경하기
__ELF 바이러스 감염 방법
____Silvio 패딩 감염 방법
____리버스 텍스트 세그먼트 감염
____데이터 세그먼트 감염
__PT_NOTE -> PT_LOAD 변경 감염 방법
____PT_NOTE -> PT_LOAD 변경 감염 알고리즘
__제어 흐름 감염시키기
____다이렉트 PLT 감염
____함수 트램펄린
____.ctors / .dtors 함수 포인터 오버라이팅
____GOT: global offset table 포이즈닝, PLT/GOT 리다이렉션
____데이터 스트럭처 감염시키기
____함수 포인터 오버라이팅
__프로세스 메모리 바이러스와 루트킷: 리모트 코드 인젝션 기술
____공유 라이브러리 인젝션: .so 인젝션 / ET_DYN 인젝션
____LD_PRELOAD를 이용한 .so 인젝션
____open() / mmap() 셸 코드를 이용한 .so 인젝션
____dlopen() 셸 코드를 이용한 .so 인젝션
____VDSO 조작을 이용한 .so 인젝션
____텍스트 세그먼트 코드 인젝션
____실행 파일 인젝션
____재배열 코드 인젝션: ET_REL 인젝션
__디버깅과 패킹 기술
____PTRACE_TRACEME 기술
____SIGTRAP 핸들러 기술
____/proc/self/status 기술
____코드 난독화 기술
____스트링 테이블 변경 기술
__ELF 바이러스 탐지과 치료
__요약
5장. 리눅스 바이너리 보호
__ELF 바이너리 패커
__Stub 메커니즘과 Userland exec
____프로텍터 예제
__스텁에서 수행하는 다른 작업들
__기존 ELF 바이너리 프로텍터
____DacryFile(Grugq, 2001년)
____Burneye(Scut, 2002년)
____Shiva(Neil Mehta와 Shawn Clowes, 2003년)
____Maya's Veil(Ryan O'Neill, 2014년)
__Maya가 적용된 바이너리 다운로드
__바이너리 보호를 위한 안티 디버깅
__에뮬레이션 방어하기
____Syscall 테스팅을 통한 에뮬레이션 탐지
____에뮬레이터 CPU 불일치를 이용한 탐지
____명령어 지연 체크
__난독화 방법
__제어 흐름 무결성 보호하기
____ptrace 기반 공격
____취약점 기반 공격
__추가 자료
__요약
6장. 리눅스 ELF 바이너리 포렌식
__엔트리 포인트 변조 진단
__컨트롤 플로우 하이재킹 진단
____.ctors(.int_array) 섹션 패치
____PLT/GOT 후킹 탐지
____함수 트램펄린 진단
__기생 코드의 특성
__DLL 인젝션 트레이스의 동적 세그먼트 진단
__리버스-텍스트 패딩 감염 진단
__텍스트 세그먼트 패딩 감염 진단
__보호된 바이너리 진단
____보호된 바이너리 분석
__IDA Pro
__요약
7장. 프로세스 메모리 포렌식
__프로세스는 어떻게 구성돼 있는가
____실행 가능한 메모리 매핑
____프로그램 힙
____공유 라이브러리 매핑
____스택, VDSO, VSYSCALL
__프로세스 메모리 감염
____프로세스 감염 도구
____프로세스 감염 기술
__ET_DYN 인젝션 진단
____Azazel 사용자 공간 루트킷 진단
____프로세스 주소 공간 매핑 확인
____스택에서 LD_PRELOAD 확인
____PLT/GOT 후킹 진단
____ET_DYN 인젝션 자세히 보기
____VDSO 변조
____공유 오브젝트 로딩: 정상적인 방법과 비정상적인 방법
____.so 인젝션 진단 휴리스틱
____PLT/GOT 후킹 진단 도구
__리눅스 ELF 코어 파일
____코어 파일 분석: Azazel 루트킷
__요약
8장. ECFS: 확장된 코어 파일 스냅샷 기술
__역사
__ECFS 철학
__ECFS 소개
____ECFS를 코어 핸들러 플러그인으로 사용하기
____프로세스를 종료하지 않고 ECFS 스냅샷 생성
__libecfs: ECFS 파일 파싱 라이브러리
__readecfs
__ECFS를 이용한 감염된 프로세스 분석
____숙주 프로세스 감염
____ECFS 스냅샷 생성 및 분석
____readecfs를 이용한 기생 코드 추출
____Azazel 루트킷 분석
__ECFS 레퍼런스 가이드
____ECFS을 이용한 심볼 테이블 재구성
____ECFS 섹션 헤더
____ECFS 파일을 기본 코어 파일로 사용하기
____libecfs API 사용법
__ECFS를 이용한 프로세스 되살리기
__ECFS 더 살펴보기
__요약
9장. 리눅스 /proc/kcore 분석
__리눅스 커널 포렌식과 루트킷
__Stock 버전의 vmlinux는 심볼을 가지고 있지 않다
____kdress를 이용한 vmlinux 빌드
__/proc/kcore와 GDB 살펴보기
____sys_call_table 위치 조회 예제
__sys_call_table 직접 변조
____sys_call_table 변조 진단
____커널 함수 트램펄린 기법
____함수 트램펄린 예제
____함수 트램펄린 진단
____인터럽트 핸들러 패치 진단
__Kprobe 루트킷
____Kprobe 루트킷 진단
__DRR(디버그 레지스터 루트킷)
____DRR 진단
__VFS 레이어 루트킷
____VFS 레이어 루트킷 진단
__그 외의 커널 감염 기술
__vmlinux와 .altinstructions 패치
____.altinstructions와 .altinstr_replace
____arch/x86/include/asm/alternative.h 살펴보기
____textify를 이용한 코드 정합성 검증
____textify를 이용한 sys_call_table 검증 예제
__taskverse를 이용한 프로세스 은닉 진단
____taskverse 기술
__감염된 LKM: 커널 드라이버
____방법 1. 심볼 하이재킹
____방법 2. 함수 하이재킹
____감염된 LKM 진단
__/dev/kmem과 /dev/mem에 대해
__/dev/mem
____FreeBSD의 /dev/kmem
__K-ecfs: 커널 ECFS
____kernel-ecfs 파일 살펴보기
__커널 해킹
____리버스 엔지니어링과 디버깅
____고급 커널 해킹 및 디버깅 인터페이스
____이 책에서 언급한 논문
__요약