제품 정보로 건너뛰기
Arm 어셈블리 내부 구조와 리버스 엔지니어링
Arm 어셈블리 내부 구조와 리버스 엔지니어링
Description
책소개
ARM 기반 장치의 애플리케이션을 어셈블리 수준으로 분석하는 리버스 엔지니어와 보안 엔지니어를 위한 필독서이다. ARM 장치의 취약점을 찾아 그 피해를 줄이고자 하는 ARM 보안 전문가를 위해, ARMv8-A 인스트럭션 세트와 보안 및 방어를 목적으로 하는 리버스 엔지니어링 과정을 소개한다.
다음으로 ELF파일 형식과 OS 내부를 소개하고 ARM 아키텍처의 기본과 A32 및 A64 인스트럭션을 철저히 알아본다.
또한 관련 리버스 엔지니어링 과정을 깊이 있게 분석한다.
마지막으로 ARM 기반 M1 SoC로 컴파일된 macOS 멀웨어 바이너리를 간단히 들여다본다.
이 책을 통해 ARM 아키텍처용으로 컴파일된 리버스 엔지니어링 소프트웨어를 통해 ARM 인스트럭션 및 제어 흐름 패턴을 폭넓게 이해할 수 있을 것이다.
  •  책의 일부 내용을 미리 읽어보실 수 있습니다.
    미리보기

목차
1부.
Arm 어셈블리 내부 구조

1장.
리버스 엔지니어링 소개


__어셈블리 소개
____비트와 바이트
____캐릭터 인코딩
____기계 코드와 어셈블리어
____어셈블리어 프로그래밍
______크로스 어셈블러
__고수준 언어
__역어셈블
__역컴파일

2장. ELF 파일 포맷 내부

__프로그램 구조
__고수준 vs.
저수준 언어
__컴파일 절차
____다른 아키텍처를 위한 크로스 컴파일
____어셈블 및 링크
__ELF 파일 개요
__ELF 파일 헤더
____ELF 파일 헤더 정보 필드
____대상 플랫폼 필드
____진입점 필드
____테이블 위치 필드
__ELF 프로그램 헤더
____PHDR 프로그램 헤더
____INTERP 프로그램 헤더
____LOAD 프로그램 헤더
____DYNAMIC 프로그램 헤더
____NOTE 프로그램 헤더
____TLS 프로그램 헤더
____GNU_EH_FRAME 프로그램 헤더
____GNU_STACK 프로그램 헤더
____GNU_RELRO 프로그램 헤더
__ELF 섹션 헤더
____ELF 메타 섹션
______문자열 테이블 섹션
______심볼 테이블 섹션
____주 ELF 섹션
______.text 섹션
______.data 섹션
______.bss 섹션
______.rodata 섹션
______.tdata 및
__심볼
______전역 심볼 vs.
지역 심볼
______약한 심볼
______심볼 버전
______심볼 매핑
__동적 섹션과 동적 로딩
____의존성 로딩
____프로그램 재배치
______정적 재배치
______동적 재배치
______전역 오프셋 테이블(GOT)
______프로시저 링크 테이블(PLT)
____ELF 프로그램 초기화 및 종료 섹션
______초기화 및 종료 순서
__스레드 로컬 스토리지
____지역-실행 TLS 접근 모델
____초기-실행 TLS 접근 모델
____일반-동적 TLS 접근 모델
____지역-동적 TLS 접근 모델

3장.
운영체제 기초


__운영체제 아키텍처 개요
____사용자 모드 vs.
커널 모드
____프로세스
____시스템 콜
______객체 및 핸들
____스레드
__프로세스 메모리 관리
____메모리 페이지
____메모리 보호
____익명 및 메모리 매핑된 메모리
______메모리 매핑된 파일 및 모듈
____주소 공간 레이아웃 무작위화
____스택 구현
____공유 메모리

4장.
Arm 아키텍처


__아키텍처 및 프로파일
__Armv8-A 아키텍처
____예외 수준
______Armv8-A 신뢰 영역 확장
______예외 수준 변경
____Armv8-A 실행 상태
__AArch64 실행 상태
____A64 인스트럭션 세트
____AArch64 레지스터
______프로그램 카운터
______스택 포인터
______제로 레지스터
______링크 레지스터
______프레임 포인터
______플랫폼 레지스터(x18)
______내부 프로시저 호출 레지스터
______SIMD 및 부동소수점 레지스터
______시스템 레지스터
____PSTATE
__AArch32 실행 상태
____A32 및 T32 인스트럭션 세트
______A32 인스트럭션 세트
______T32 인스트럭션 세트
______인스트럭션 세트 전환
____AArch32 레지스터
______프로그램 카운터
______스택 포인터
______프레임 포인터
______링크 레지스터
______프로시저 내부 호출 레지스터(IP, r12)
____현재 프로그램 상태 레지스터
______애플리케이션 프로그램 상태 레지스터
____실행 상태 레지스터
______인스트럭션 세트 상태 레지스터
______IT 블록 상태 레지스터(ITSTATE)
______엔디언 상태
______모드 및 예외 마스크 비트

5장.
데이터 처리 인스트럭션


__시프트 및 로테이트 오퍼레이션
____논리 좌측 시프트
____논리 우측 시프트
____산술 우측 시프트
____우측 로테이트
____확장 우측 로테이트
____인스트럭션 형태
______직접 상수 형태로 시프트
______레지스터 형태로 시프트
____비트필드 조작 오퍼레이션
______비트필드 이동
______부호 및 제로 확장 오퍼레이션
______비트필드 추출 및 삽입
__논리 오퍼레이션
____비트 AND
______TST 인스트럭션
______비트 클리어
____비트 OR
______비트 OR NOT
____비트 배타적 OR
______TEQ 인스트럭션
______배타적 OR NOT
__산술 오퍼레이션
____덧셈 및 뺄셈
______역뺄셈
____비교
______CMP 인스트럭션 오퍼레이션 동작
__곱셈 오퍼레이션
____A64에서 곱셈
____A32/T32에서 곱셈
______최하위 워드 곱셈
______최상위 워드 곱셈
______하프워드 곱셈
______벡터(듀얼) 곱셈
______롱(64비트) 곱셈
__나눗셈 오퍼레이션
__이동 오퍼레이션
____직접 상수 이동
______A32/T32에서 직접 상수 이동 및 MOVT
______A64에서 MOVZ, MOVK를 통한 직접 상수 이동
____레지스터 이동
____NOT을 갖는 이동

6장.
메모리 접근 인스트럭션


__인스트럭션 개요
__주소 지정 모드 및 오프셋 유형
____오프셋 주소 지정
______직접 상수 오프셋
______레지스터 오프셋
____사전 인덱스 모드
______사전 인덱스 모드 예제
____사후 인덱스 주소 지정
______사후 인덱스 주소 지정 예
____문자열 상수(PC 기준) 주소 지정
______상수 로드하기
______주소를 레지스터에 로드하기
__로드 및 저장 인스트럭션
____워드 또는 더블워드 로드 및 저장
____하프워드/바이트 로드 및 저장
______로드 및 저장을 사용한 예제
____다중 로드 및 저장(A32)
______STM 및 LDM 예제
______STM과 LDM을 사용한 좀 더 복잡한 예제
____쌍 로드 및 저장(A64)

7장.
조건부 실행


__조건부 실행 개요
__조건 코드
____NZCV 조건 플래그
______부호 있는 정수 오버플로 vs.
부호 없는 정수 오버플로
____조건 코드
__조건부 인스트럭션
____Thumb의 If-Then(IT) 인스트럭션
__플래그 설정 인스트럭션
____인스트럭션 ‘S’ 접미사
______덧셈 및 뺄셈 인스트럭션의 S 접미사
______논리적 시프트 인스트럭션의 S 접미사
______곱셈 인스트럭션의 S 접미사
______기타 인스트럭션의 S 접미사
____테스트 및 비교 인스트럭션
______비교(CMP)
______음수 비교(CMN)
______테스트 비트(TST)
______동등성 테스트(TEQ)
__조건부 선택 인스트럭션
__조건부 비교 인스트럭션
____CCMP를 사용한 AND 논리 연산자 조건부 인스트럭션
____CCMP를 사용한 OR 논리 연산자 조건부 인스트럭션

8장.
제어 흐름


__분기 인스트럭션
____조건 분기 및 반복문
____분기 테스트 및 비교
____테이블 분기(T32)
____분기 및 상태 변경
____서브루틴 분기
__함수와 서브루틴
____프로시저 호출 표준
____휘발성 vs.
비휘발성 레지스터
____인수와 반환값
____큰 값 전달
____리프 및 비리프 함수
______리프 함수
______비리프 함수
______프롤로그와 에필로그

2부.
리버스 엔지니어링

9장.
Arm 환경


__Arm 보드
__QEMU를 사용한 에뮬레이션
____QEMU 사용자 모드 에뮬레이션
____QEMU 전체 시스템 에뮬레이션
____펌웨어 에뮬레이션

10장.
정적 분석


__정적 분석 도구
____명령줄 도구
____역어셈블러와 역컴파일러
____바이너리 닌자 클라우드
__참조에 의한 호출 예제
__제어 흐름 분석
____Main 함수
____서브루틴
____캐릭터로 변환
____if 문
____몫 나눗셈
____for 반복문
__알고리듬 분석

11장.
동적 분석


__명령줄 디버깅
____GDB 명령
____GDB 다중 아키텍처
____GDB 확장: GEF
______설치
______인터페이스
______유용한 GEF 명령
______메모리 검사
______메모리 영역 감시
______취약점 분석기
______checksec
____라데어2
______디버깅
__원격 디버깅
____라데어2
____아이다 프로
__메모리 손상 디버깅
__GDB로 프로세스 디버깅

12장.
arm64 맥 OS 멀웨어 역추적


__배경지식
____맥 OS arm64 바이너리
____맥 OS Hello World(arm64)
__악성 arm64 바이너리 사냥
__arm64 멀웨어 분석
____분석 방지 기술
____디버깅 방지 논리 구조(ptrace 사용)
____디버깅 방지 논리 구조(sysctl 사용)
____VM 방지 논리 구조(SIP 상태와 VM 아티팩트 감지를 통해)
__결론

출판사 리뷰
◈ 이 책의 대상 독자 ◈

초보자와 노련한 전문가 모두에게 유용한 포괄적인 안내서로, 인기와 수요가 급상승하고 있는 프로세서 언어를 직관적으로 소개하는 책이다.
독자에게 필요한 자료를 쉽게 보여주므로, 취약점 탐색 및 분석, 익스플로이트 개발, 멀웨어 분석 기술을 극적으로 향상시키는 데 도움을 준다.

◈ 이 책의 구성 ◈

인스트럭션이 무엇인지 설명하고, 어디에서 왔는지를 알아보는 책이다.
2장에서는 ELF파일 포맷과 그 섹션, 컴파일 절차 등을 간략히 소개한다.
바이너리 분석은 실행 환경을 이해하지 않고서는 완전할 수 없으므로, 3장에서는 운영체제의 기초를 다룬다.

4장에서는 위와 같은 기본 지식을 바탕으로 Arm 아키텍처에 더 깊이 다가갈 준비를 한다.
5장에서는 가장 많이 사용되는 데이터 처리 인스트럭션을 살펴보고, 6장에서는 메모리 접근 인스트럭션의 개요를 다룬다.
이 인스트럭션은 로드/스토어(Load/Store) 아키텍처로 알려져 있으며, Arm 아키텍처에서 가장 많은 부분을 차지한다.
7장과 8장에서는 조건부 실행과 흐름 제어를 논의한다.
이는 리버스 엔지니어링에서 가장 중요한 구성 요소다.

9장은 리버스 엔지니어가 특히 관심을 가질 만한 부분이다.
Arm 환경은 서로 다른 형태를 지니므로 잘 알아두는 것이 중요한데, 여러분이 동적 분석을 수행하거나 실행 중에 바이너리를 분석할 필요가 있을 때 특히 더 그렇다.

지금까지 언급한 정보를 갖고 있다면, 다음 리버스 엔지니어링 모험을 나서는 데 필요한 장비를 충분히 갖춘 셈이다.
그 모험을 위해 10장에서는 일반적인 정적 분석 도구를 소개한다.
또한 한 단계씩 따라 할 수 있는 실용적이고 간단한 정적 분석 예제를 제공한다.

프로그램 실행 중에 그 동작을 관찰할 수 있는 동적 분석이 없다면 리버스 엔지니어링은 지루해진다.
11장에서는 자주 사용되는 동적 분석 도구와 분석 중 사용할 수 있는 유용한 명령어를 배우고 예제를 살펴볼 것이다.
두 가지 실용적인 디버깅(debugging) 예제를 다루면서 해당 장을 마무리 짓는데, 이는 GDB를 통해 할 수 있다.
두 예제 중 하나는 메모리 충돌 취약점 디버깅이고, 다른 하나는 프로세스 디버깅이다.

리버스 엔지니어링은 다양한 사례에 유용하다.
Arm 인스트럭션 세트와 리버스 엔지니어링 테크닉을 이용하면 다른 분야로 기술을 확장할 수 있다.
예를 들면, 취약점 분석 또는 멀웨어 분석 등이다.

리버스 엔지니어링은 멀웨어 분석가에게 중요한 기술이지만, 주어진 멀웨어 샘플이 컴파일된 환경에 익숙해지는 것 역시 중요하다.
이를 위해 arm64 맥 OS 멀웨어를 분석하는 장도 포함돼 있다(12장).
이 장은 『The Art of Mac Malware』(No Starch Press, 2022)의 저자인 패트릭 워들이 기술했다.
이전 장들과 달리, 해당 장은 Arm 어셈블리에 집중하지 않는다.
그 대신에 맥 OS 멀웨어가 분석을 피하기 위해 사용하는 일반적인 분석 방지(anti-analysis) 기술을 소개한다.
이 장의 목적은 애플 실리콘 M1/M2(Apple Silicon M1/M2)와 호환되는 맥 OS 멀웨어를 살펴보는 것이다.
따라서 Arm 기반 맥 OS 멀웨어를 추적하고 분석하길 원하는 엔지니어에게는 좋은 시작점이 될 것이다.

◈ 지은이의 말 ◈

이 책의 목적은 여러분이 Arm 인스트럭션 세트와 더 쉽게 친숙해지도록 하는 것이며, 업무에 적용할 수 있는 충분한 지식을 갖도록 하는 것이다.
나는 Arm 참조 매뉴얼을 해부하고 가장 자주 사용하는 인스트럭션과 그 문법 형태를 분류하는 데 많은 시간을 투자했다.
그러나 이 책이 단순히 가장 자주 사용되는 Arm 인스트럭션을 나열한 것만은 아니다.
여기에는 다른 곳, 심지어는 Arm 매뉴얼에서도 찾을 수 없는 설명이 포함돼 있다.
Arm 매뉴얼에 작성된 인스트럭션에 대한 기본 설명은 너무 단순하다. MOV나 ADD와 같은 아주 간단한 인스트럭션에는 충분할지도 모르지만, 많이 사용되고 복잡한 오퍼레이션을 수행하는 인스트럭션은 간단한 설명만으로 이해하기 어렵다.
따라서 이 책에 언급되는 많은 인스트럭션은 기저 동작을 설명하는 그림과 함께 다룬다.

만약 여러분이 리버스 엔지니어링 초보자라면 바이너리 파일 포맷, 섹션, 소스 코드에서 머신 코드로 컴파일되는 방식, 의존성 환경 등을 이해해야 한다.
지면과 시간 부족으로 인해 이 책에서 모든 파일 포맷과 운영체제를 다룰 수는 없다.
따라서 여기서는 리눅스 환경과 ELF 파일 포맷에 집중한다.
Arm 인스트럭션은 플랫폼이나 파일 포맷에 관계없는 인스트럭션이다.
여러분이 맥 OS(macOS)나 윈도우(Windows)를 위해 컴파일된 Arm 바이너리를 리버스 엔지니어링한다 해도, 인스트럭션의 뜻은 동일하다.

이 책을 집필하는 데는 2년이 넘는 시간이 걸렸다.
팬데믹이 세상을 강타해 모두가 격리에 들어간 2020년 3월에 처음 펜을 들었었다.
지난 2년간 피, 땀, 눈물을 흘리고 나서 비로소 이 책이 생명력을 갖게 된 것을 매우 기쁘게 생각한다.
지속적인 신뢰를 보내주시는 독자 여러분에게 감사할 따름이며, 이 책이 여러분의 리버스 엔지니어링 여행에 부담을 주기보다는 길을 잘 닦아주는 유용한 가이드가 되길 기대해본다.

◈ 옮긴이의 말 ◈

ARM 어셈블리 언어는 현대의 다양한 임베디드 시스템과 모바일 장치에서 핵심 요소로 자리 잡았습니다.
따라서 바야흐로 ARM 프로세서의 전성시대라고 봐도 좋습니다.
이 책은 ARM 프로세서의 내부 구조와 동작 원리를 심도 있게 분석하고, 이를 통해 리버스 엔지니어링 기술을 습득할 수 있도록 돕습니다.
덕분에 이 책을 번역하면서 역자들 또한 ARM 인스트럭션 세트를 더 깊이 이해할 수 있었습니다.

1부에서는 ARM 어셈블리의 기본 개념과 구조를 소개합니다. ARM 어셈블리 언어의 기초를시작으로 ELF 파일 포맷, 운영체제의 기본 구조, ARM 아키텍처를 상세히 설명하는 등 독자들이 탄탄한 기초를 다질 수 있도록 구성돼 있습니다.
또한 데이터 처리 및 메모리 접근 명령어, 조건부 실행, 제어 흐름 등의 주제를 다뤄 ARM 어셈블리 언어를 활용하는 데 필요한 실질적인 지식을 제공합니다.
2부에서는 리버스 엔지니어링 기법을 통해 ARM 환경에서 코드를 분석하고 디버깅하는 방법을 다룹니다. ARM 보드와 QEMU를 이용한 에뮬레이션, 정적 분석 및 동적 분석 도구의 활용, 맥 OS 환경에서의 ARM64 바이너리 분석 등을 상세히 설명하므로 실전에서 활용할 수 있는 유용한 기술들을 배울 수 있습니다.
이 책은 이론과 실습을 균형 있게 다뤄 독자들이 ARM 어셈블리 언어와 리버스 엔지니어링을 효과적으로 익히게 해줍니다.
각 장마다 제공되는 예제와 실습을 통해 독자들은 실제 상황에서 발생할 수 있는 다양한 문제를 해결하는 능력을 기를 수 있을 것입니다.
이 책이 ARM 어셈블리 언어와 리버스 엔지니어링을 배우고자 하는 모든 분께 큰 도움이 되길 바랍니다.
GOODS SPECIFICS
- 발행일 : 2024년 07월 24일
- 쪽수, 무게, 크기 : 596쪽 | 188*235*27mm
- ISBN13 : 9791161758602
- ISBN10 : 1161758607

You may also like

카테고리