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

마리아마크스테터

저자:마리아마크스테터
아제리아랩(AzeriaLab)의설립자이자CEO로,Arm리버스엔지니어링및익스플로잇관련강의를진행하고있다.침투테스트와보안위협대응분야에서일했으며,가상화스타트업인코어릴륨(Corellium,Inc)의최고제품책임자(CPO,ChiefProductOfficer)를역임한바있다.
기업보안분야학사학위와엔터프라이즈보안분야석사학위를취득했으며캠브리지에서Arm관련익스플로잇완화연구를수행했다.
해당분야에서괄목할만한연구성과를거둔덕분에2018년에는유럽기술부문에서포브스(Forbes)가선정하는‘30언더30(30under30)’에이름을올렸으며,포브스의‘2020년사이버보안분야올해의인물’로도꼽혔다.또한2017년부터블랙햇(BlackHat)EU및US에서교육검토위원회(TrainingReviewBoard)의일원으로활동중이다.

역자:김세영
성균관대학교정보통신공학부와기계공학부를졸업했으며웹,서버,커널등여러분야에관심을쏟고있다.어떻게하면지식을효율적으로습득하고저장하고관리할수있는지를늘고민한다.현재는캐노니컬에서근무하며,우분투를발전시키고클라우드환경의버그를잡는등오픈소스프로젝트에기여하고있다.

역자:정윤선
성균관대학교정보통신공학부를졸업했으며웹기술과서버API,하이퍼바이저에관심이많다.아헴스,KT클라우드웨어,A2C를거치며웹,가상화등의업무를수행했다.현재는육아를병행하면서스포츠영양사유튜버와의협업을통해next.js웹과react-native를이용한모바일앱개발을진행중이며번역에도참여하고있다.

목차

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
______비트ORNOT
____비트배타적OR
______TEQ인스트럭션
______배타적ORNOT
__산술오퍼레이션
____덧셈및뺄셈
______역뺄셈
____비교
______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멀웨어역추적
__배경지식
____맥OSarm64바이너리
____맥OSHelloWorld(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장).이장은『TheArtofMacMalware』(NoStarchPress,2022)의저자인패트릭워들이기술했다.이전장들과달리,해당장은Arm어셈블리에집중하지않는다.그대신에맥OS멀웨어가분석을피하기위해사용하는일반적인분석방지(anti-analysis)기술을소개한다.이장의목적은애플실리콘M1/M2(AppleSiliconM1/M2)와호환되는맥OS멀웨어를살펴보는것이다.따라서Arm기반맥OS멀웨어를추적하고분석하길원하는엔지니어에게는좋은시작점이될것이다.

옮긴이의말

ARM어셈블리언어는현대의다양한임베디드시스템과모바일장치에서핵심요소로자리잡았습니다.따라서바야흐로ARM프로세서의전성시대라고봐도좋습니다.이책은ARM프로세서의내부구조와동작원리를심도있게분석하고,이를통해리버스엔지니어링기술을습득할수있도록돕습니다.덕분에이책을번역하면서역자들또한ARM인스트럭션세트를더깊이이해할수있었습니다.
1부에서는ARM어셈블리의기본개념과구조를소개합니다.ARM어셈블리언어의기초를시작으로ELF파일포맷,운영체제의기본구조,ARM아키텍처를상세히설명하는등독자들이탄탄한기초를다질수있도록구성돼있습니다.또한데이터처리및메모리접근명령어,조건부실행,제어흐름등의주제를다뤄ARM어셈블리언어를활용하는데필요한실질적인지식을제공합니다.2부에서는리버스엔지니어링기법을통해ARM환경에서코드를분석하고디버깅하는방법을다룹니다.ARM보드와QEMU를이용한에뮬레이션,정적분석및동적분석도구의활용,맥OS환경에서의ARM64바이너리분석등을상세히설명하므로실전에서활용할수있는유용한기술들을배울수있습니다.이책은이론과실습을균형있게다뤄독자들이ARM어셈블리언어와리버스엔지니어링을효과적으로익히게해줍니다.각장마다제공되는예제와실습을통해독자들은실제상황에서발생할수있는다양한문제를해결하는능력을기를수있을것입니다.이책이ARM어셈블리언어와리버스엔지니어링을배우고자하는모든분께큰도움이되길바랍니다.