현업 해커에게 직접 듣는 임베디드 해킹 렉처노트

현업 해커에게 직접 듣는 임베디드 해킹 렉처노트

$40.00
Description
우리 주변에서 흔히 볼 수 있는 인터넷이 연결된 장비를 해킹하기 위해서는 어떤 과정이 필요할까?
정보를 알지 못하는 임베디드 장비의 하드웨어 기판에서 우리는 펌웨어를 추출해야 한다. 또한 그 펌웨어를 동/정적으로 분석하고 취약점을 찾은 다음 그 장비에 맞도록 공격 코드를 작성해야 한다. 이렇게 들으면 아주 단순한 과정 같지만 임베디드 장비는 너무나 다양한 모습으로 우리 곁에 존재하기에, 매번 다른 방법을 써야 하는 경우가 많다. 이러한 다양한 임베디드 장비 케이스를 접하면서 겪었던 이야기를 강의로 녹여냈다. 그리고 그 자료를 모아 놓은 알짜배기 강의 노트를 지금 공개한다.

저자

ahrik,seeh0

저자:ahrik
대기업모의해킹팀에서보안엔지니어로근무중이다.임베디드와웹을대상으로해킹과보안관련일을시작한지10년차가넘었으며,보안업계의학생들을대상으로임베디드해킹강의를한다.다양한타깃에서발견한다수의취약점이존재하며,지금까지도임베디드보안에대한꾸준한연구를진행중인연구자이다.

저자:seeh0
반도체를만드는회사에서엔지니어로근무중이다.임베디드보안관련일을시작한지14년차가됐고,지금은BoB멘토를함과동시에HSPACE의낭만집단PhysicalLab을리딩하고있다.어릴적에는이해도못하는브루스슈나이어의책을베고자곤했으며,칼코셔를보면서자동차해킹에대한꿈을키웠다.하지만요즘에는정신과의사스캇펙의책을읽으며‘삶은고해야’를입에달고산다.언제나낭만있는일을하고싶어하는데세상일이라는게참마음같지않음을많이깨닫는요즘이다.돈을많이벌어서PhysicalLab아이들과하고싶은타깃을마음껏연구하는것이목표이지만정작아이들은리더의결혼을걱정하는중이다.

목차

1장.프롤로그-누구를위한책인가?해킹의흐름

2장.해킹의흐름
2.1타깃선정
2.2장비분석
2.3펌웨어얻기
2.3.11-Day공격코드활용하기
2.3.2하드웨어해킹-디버깅포트활용하기
2.3.3플래시메모리덤프
2.4펌웨어분석
2.4.1시스템구성분석
2.4.2펌웨어이미지분석하기
2.4.3동적분석하기
2.5펌웨어이미지수정하기
2.6취약점공략하기
2.7ARMExploitation

3장.해킹타깃선정
3.1합법과불법사이
3.2공격포인트선정
3.3공격표면
3.4공격모델과공격벡터
3.5위협모델과보안자산
3.6해커답게생각하기
3.7버그바운티
3.8마무리

4장.임베디드장비의구성요소
4.1임베디드하드웨어
4.1.1임베디드보드소자정리
4.1.2임베디드보드의칩
4.1.3통전테스트
4.1.4UART
4.1.5JTAG
4.1.6주변기기장치
4.2임베디드소프트웨어
4.2.1임베디드장비의부팅흐름
4.2.2부트로더
4.2.3PBL(PrimaryBootLoader혹은RomBootLoader
4.2.4SBL(SecondaryBootLoader)
4.2.5UBoot
4.2.6운영체제
4.2.7디바이스드라이버
4.2.8파일시스템
4.2.9서비스와프로세스
4.2.10RTOS
4.3펌웨어무결성검증과암호화
4.4마무리

5장.하드웨어시리얼통신
5.1동기식시리얼통신과비동기식시리얼통신
5.2시리얼통신실습
5.3Atmega128개발장비
5.4Atmega128로LED제어실습
5.5Atmega128로UARTserial구현하기
5.6USBserialConverter활용하기
5.7SPI통신
5.8SPI통신의탄생
5.9SPI통신파악하기
5.10마무리

6장.디버깅포트로펌웨어얻기
6.1UART해킹
6.1.1UART디버깅의활용
6.1.2UART핀찾기
6.1.3UART핀찾기실습
6.1.4멀티미터기를이용한UART확인하기
6.1.5UART시리얼연결하기
6.1.6로직애널라이저를통한UART신호분석
6.1.7UART디버깅메시지분석하기
6.1.8UART로부트쉘얻기
6.1.9부트쉘SPI명령어를활용해펌웨어덤프뜨기
6.1.10Binwalk로펌웨어구성확인하기
6.1.11부트쉘-md(memorydisplay)명령어로펌웨어덤프뜨기
6.2JTAG해킹
6.2.1JTAG란?
6.2.2JTAG연결
6.2.3JTAG핀찾기
6.2.4JTAGulator를사용해JTAG핀정의하기
6.2.5JTAGulator를사용해라즈베리파이-TJAG핀찾기
6.2.6다양한JTAG디버거장비
6.3JTAG보안

7장.플래시메모리
7.1플래시메모리종류
7.2우리는왜플래시메모리덤프를떠야하는가?
7.3임베디드보드에서NAND플래시찾기
7.4메모리의패키지형태
7.5프로토콜별패키징특징
7.6보드의메모리칩후보찾기
7.7플래시메모리의일련번호읽기
7.8데이터시트
7.8.1데이터시트구하기
7.8.2칩정보얻기
7.8.3데이터시트이해하기-SPI
7.8.4데이터시트이해하기-SPI(Read)
7.8.5데이터시트이해하기-SPI(REMS)
7.8.6데이터시트이해하기-MMC
7.8.7데이터시트이해하기-UFS
7.8.8데이터시트의보안
7.9플래시메모리연결
7.9.1메모리칩핀에연결하기-직접납땜해점퍼연결하기
7.9.2메모리칩핀에연결하기-메모리클립(집게)이용하기
7.9.3메모리칩핀에연결하기-훅그래버클립
7.9.4메모리칩핀에연결하기-BGA디솔더링
7.9.5메모리칩핀에연결하기-BGA리솔더링

8장.플래시메모리덤프
8.1메모리덤프-Atmega128
8.1.1SPI통신설정
8.1.2ManufacturerID읽기
8.1.3플래시메모리데이터읽기
8.2메모리덤프-라즈베리파이
8.2.1라즈베리파이
8.2.2플래시롬프로젝트
8.2.3라즈베리파이운영체제설치
8.2.4라즈베리파이이미지굽기
8.2.5라즈베리파이SSH설치
8.2.6이미지쓰기
8.2.7라즈베리파이SSH접속
8.2.8라즈베리파이SPI활성화
8.2.9플래시롬설치하기
8.2.10플래시롬으로ROM메모리덤프뜨기
8.2.11flashrom에서지원하지않는칩셋덤프뜨기
8.2.12SPIdevPython패키지로다루기
8.3메모리덤프-beeprog3
8.3.1Beeprog
8.3.2메모리디솔더링
8.3.3메모리소켓연결
8.3.4비프로그소프트웨어설치
8.3.5비프로그연결
8.3.6메모리칩덤프
8.4메모리덤프-Allsocket
8.4.1올소켓장비구매
8.4.2FTKImager덤프
8.5마무리

9장.펌웨어분석하기
9.1펌웨어의구조분석순서
9.2빈워크
9.2.1빈워크설치와실행
9.2.2이미지에서파일시스템추출하기
9.3카빙
9.3.1LZMA카빙
9.3.2Squashfs카빙
9.4정적분석
9.4.1정적분석도구-IDA대Ghidra
9.4.2IDA대Ghidra
9.4.3RTOS이미지정적분석환경구축하기
9.4.4Baseaddress알아내기
9.4.5하드웨어변수식별하기
9.5동적분석
9.5.1펌웨어의실행파일에뮬레이팅하기-1
9.5.2추출한펌웨어바이너리에뮬레이팅하기-2
9.5.3펌웨어의실행흐름추적하기-strace
9.5.4펌웨어의실행파일동적분석하기-gdb
9.5.5QEMUsystem환경구축하기
9.5.6qemu-system-arm32구축
9.5.7qemu-system-aarch64구축
9.5.8UNICORN에뮬레이터
9.6부트로더분석
9.6.1부트로딩방식
9.6.2부트로더리버싱
9.6.3오픈소스의활용
9.7커널분석
9.7.1커널이미지분석방법론
9.7.2커널드라이버분석
9.7.3커널드라이버의구조
9.7.4임베디드장비드라이버분석
9.8파일시스템분석
9.8.1왜파일시스템구조를공부해야하는가?
9.8.2파일시스템다루기
9.8.3Squashfs
9.8.4CPIO
9.8.5EXT4
9.8.6JFFS와JFFS2
9.8.7CRAMFS
9.8.8UBIFS
9.9커스텀펌웨어분석하기
9.9.1수정된펌웨어분석의시작
9.9.2수정된UBIFS이미지분석
9.9.3010Editor분석
9.9.4수정된UBI데이터분석
9.9.5수정된UBI에서데이터추출
9.10마무리

10장.펌웨어를수정해분석용쉘얻기
10.1수정할위치정하기
10.2백도어심기
10.3수정된펌웨어로접속시도
10.4다양한백도어여는방법
10.4.1원격접속을할수있는명령어를통한백도어열기
10.4.2다운로드명령어를통한백도어열기
10.4.3프로그램생성을통한백도어열기
10.5디버깅환경구성

11장.분석도구만들기
11.1분석도구만들기
11.1.1크로스컴파일
11.1.2크로스컴파일환경맞추기
11.1.3크로스컴파일러설치
11.1.4크로스컴파일하기
11.1.5strace분석도구정적크로스컴파일하기
11.1.6strace동작확인
11.2후킹을통한임베디드분석도구만들기
11.2.1리눅스라이브러리프리로드
11.2.2프리로더를이용한라이브러리후킹
11.2.3OpenSSL후킹실습
11.2.4글로벌후킹
11.2.5후킹으로파일생성,삭제모니터링도구만들기
11.2.6후킹모드해지
11.3마무리

12장.취약점공략하기
12.1임베디드시스템의다양한권한
12.1.1DAC
12.1.2Immutablestickybit
12.1.3MAC
12.1.4Linuxcapabilities
12.1.5RBAC
12.2로직버그
12.3로직버그취약점사례
12.3.1USBExt4Format의특성
12.3.2USB마운트권한설정문제
12.3.3USB내에심볼릭링크
12.3.4커스텀쉘우회
12.3.5펌웨어업데이트
12.3.6인증부재
12.4Writewhatwhere?
12.4.1Ueventhelper
12.4.2복합기취약점사례
12.4.3마무리

13장.ARMExploitation
13.1메모리오염공격
13.2AboutARM
13.3ARM어셈블리코드
13.4ARMThumb모드란?
13.5ARM호출규약
13.6ARMShellcode만들기
13.7thumb모드코드작성
13.8파이프라이닝
13.9Helloworld쉘코딩
13.10execveshellcode만들기
13.11리버스커넥션쉘코드만들기
13.12ARM메모리오염공격테크닉
13.13ARM스택오버플로우
13.14ARMROP
13.15리얼월드의ARMExploit테크닉
13.16마무리