New

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

  • 지은이ahrik, seeh0
  • ISBN : 9791161759272
  • 40,000원
  • 2024년 12월 16일 펴냄
  • 페이퍼백 | 504쪽 | 188*235mm
  • 시리즈 : 해킹과 보안

책 소개

요약

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

추천의 글

인생은 가끔 우리가 예상치 못한 방향으로 흘러간다. 임베디드 해킹도 그렇다. 처음에는 단순한 호기심이 동기일 수도 있고, 저 멀리 보이는 낯선 기기를 열어보고 그 안에 숨겨진 이야기를 찾아내는 것일 수도 있다. 그런데 이 책을 읽다 보면 알게 된다. 해킹은 단지 기술의 문제가 아니라 끈기와 탐구심 그리고 인내의 예술이라는 것을.
2010년대 해커들이 새로운 장난감을 발견했던 순간들을 떠올리며 저자들은 마치 오래된 비밀 문서의 지도처럼 임베디드 보안의 길을 제시한다. 이곳엔 새로운 해커의 낭만이 깃들어 있다. 자동차를 해킹하던 밤, 타깃의 취약점을 찾기 위해 커피에 의지하며 보냈던 수많은 밤들이 페이지마다 흐르고 있다.
이 책이 주는 매력은 단지 해킹 기법의 나열에 있지 않다. 오히려 그 안에 담긴 철학과 고민이 독자의 마음을 붙든다. 불가능한 것을 탐구하며 스스로 성장해가는 과정, 해킹을 통해 세상과 소통하며 보이지 않는 법칙을 깨닫고, 자신만의 길을 찾아가는 여정을 담은 기록, 그리고 타인과 지식을 나누며 보안 공동체를 만들어 가는 이야기들이 있다. 이 책을 읽는 동안 해킹은 단지 불법과 합법의 경계에만 머무르지 않는다. 그것은 보이지 않는 세계를 탐험하며 자신을 발견하는 여정에 더 가깝다. 이 여정 속에서 당신은 새로운 목표를 발견할지도 모른다. 그리고 언젠가 낭만과 실용의 경계선 어딘가에서, 자신만의 ‘해커답게 생각하기’를 터득할지도 모른다.
해킹은 삶과도 닮았다. 세상은 우리에게 항상 명확한 답을 주지 않는다. 때로는 오류를 겪고, 종종 되돌아가야 하고, 예상치 못한 곳에서 힌트를 발견하기도 한다. 중요한 건 그 여정 속에서 끈기를 잃지 않는 것이다. 저자들은 그 이야기를 이 책에 담아 우리에게 건넨다.
이 책은 도전하는 자들에게 보내는 은밀한 초대장이다. 읽고 난 후엔 이전과는 조금 다른 시선으로 세상을 보게 될 것이다. 어쩌면, 당신의 삶을 바꿔 놓을지도 모른다.
이 책을 덮은 후에도 해킹에 대해 잘 이해하지 못할 수 있다. 하지만 이상하게도 마음속 어딘가에 작은 불꽃이 피어날 것이다. 어떤 대상이든 파고들고 싶다는 충동, 끝까지 탐구해보고 싶다는 기분 말이다. 그리고 그런 마음은 꽤 오래도록 우리를 좋은 방향으로 데려다 줄지도 모른다.

— 히언, 『임베디드 레시피』 저자

이 책에서 다루는 내용

◆ 하드웨어 해킹 입문자를 위한 하드웨어 기초 지식
◆ 임베디드 시스템의 구성
◆ 임베디드 장비의 펌웨어 추출 방법론
◆ UART, JTAG 디버깅 포트를 이용한 시리얼 분석 방법론
◆ 임베디드 시스템 해킹을 위한 기초 지식
◆ 에뮬레이팅의 다양한 기술
◆ 임베디드 해킹의 현업 노하우
◆ ARM 아키텍처 바이너리 공격 기법

이 책의 대상 독자

◆ 복합기, 월패드, 공유기, NAS 같은 임베디드 시스템 해킹에 대한 기초 지식을 쌓고 싶은 독자
◆ 하드웨어 해킹에 대한 기초 지식을 쌓고 싶은 독자
◆ 다양한 임베디드 공격 방법론에 대한 공부를 하고 싶은 독자

저자/역자 소개

지은이의 말

2010년 그 어디쯤, 대한민국에는 임베디드 해킹 열풍이 풀기 시작했다. 임베디드 해킹은 익숙한 시스템 해킹에 지루하던 해커들에게 새로운 장난감이 됐고, 해킹에 성공하면 직접적으로 해킹의 결과를 눈으로 볼 수 있는 해커들의 최고의 게임기였다. 그리고 나 역시 이 게임을 즐기던 해커 중 한 명이었다. 그 당시 임베디드 장비의 보안은 다른 서버들의 취약점을 찾는 것보다 훨씬 쉬웠다. 하지만 점차 세월이 지나며 임베디드 장비의 보안이 조금씩 성장하게 됐고, 이렇게 강화되는 보안을 우회하는 기법을 공부해 가며 나 역시 같이 성장하게 됐다. 그리고 그 과정을 임베디드 강의로 풀어 낼 수 있는 계기가 됐다. 매년 업데이트되는 강의 자료는 차곡차곡 쌓여갔고, 어느 순간 이렇게 오랜 세월 쌓은 자료의 방점을 찍을 필요가 있다는 생각을 품었다. 임베디드 장비를 해킹하기 위해 어떤 공부를 시작했으며, 어떻게 발전됐고, 어떠한 것까지 할 수 있는지에 대한 과정을 최대한 담아내고자 노력했다.

─ ahrik

처음 자동차 해킹을 시작하게 된 계기가 있었다. 이 모든 여정의 시작은 2010년, 한 회사의 면접이 끝나고 돌아오는 길에 버스 안에서 봤던 BBC 기사에서 시작됐다. 제목은 . 자동차를 해킹할 수 있다는 내용이었다. 기사 내용대로라면 디지털 세계에만 속해 있던 위협을 현실 세계로 끌어낼 수 있다는 이야기였고, 이것은 내게 낭만을 심어주기에 충분했다. 나는 무작정 회사의 합격 소식도 뒤로한 채 자동차 해킹을 연구할 수 있는 곳을 수소문해서 한 대학의 연구실에 들어갔다. 이후의 삶은 쉽지 않았다. 내 머릿속 세상에서 타깃의 로우 레벨이라 함은 어셈블리어까지였는데 자동차로 영역을 확장하자 하드웨어적 특성을 이해해야 하는 일들이 벌어졌다. 당시에는 보안적 관점에서 하드웨어를 바라본 국내 자료는 없었기에 아쉬움이 컸는데, 이 책을 통해서 조금이나마 기여를 할 수 있게 돼 기쁘다.
사실 내가 집필에 참여했을 때 이 책의 내용 상당 부분과 방향은 정해져 있었다. 그럼에도 나의 부족함과 고민들로 인해 한 글자 한 글자 쓰기가 참 쉽지 않았다. 처음 참여할 때는 호기롭게 큰 꿈을 가지고 시작했지만 고민이 길어질수록 의지가 꺾여 나가는 것만 같았다. 가장 큰 고민은 아무래도 전달력이었다. 과연 내 머릿속의 내용이 잘 전달될 수 있을까? 그리고 동시에 기존에 작성돼 있던 문장들의 톤과 유사하게 맞출 수 있을까였던 것 같다. 생각했던 대로 잘 진행이 됐다면 좋았겠지만 ‘지은이의 말’을 쓰기 위해 지난날을 돌이켜보면 아쉬움이 큰 것은 어쩔 수 없는 것 같다.
하드웨어 보안은 아직 발전 중인 영역이다. LLM으로 인해 큰 변화의 시기를 겪고 있는 상황에서도 하드웨어 보안은 자동화까지 가기엔 아직 갈 길이 멀다. 하지만 불가능한 영역은 아니라고 생각한다. 최근에는 디지털 트윈, 오토마타 러닝 등 현실 세계에 존재하는 하드웨어를 디지털 세계로 가져와 검증하는 이론들이 조금씩 나오고 있다. 이런 트렌드 속에서 임베디드 해킹에 대해 기술한 이 책이 독자들에게 많은 도움이 됐으면 하는 바람이다.
마지막으로 보안을 공부하고 관련된 일을 하면서 알게 된 많은 분들에게 감사의 인사를 드리고 싶다. 혼자 공부하던 나에게 처음으로 같이 공부하는 즐거움을 알려준 HSD 형, 누나, 동생들과 현재 내게 있어 가장 소중한 Physical Lab 아이들. 이 두 집단은 보안을 하게 된 나의 시작과 현재이다. 그리고 그 사이에 짧지 않은 시간 동안 보안을 통해 만나고 알게 된 많은 분들에게 사회성이 부족해 내색은 못했지만 감사하는 마음을 가지고 살아가고 있다고 이 자리를 빌려 표현하고 싶다.

─ seeh0

지은이 소개

ahrik

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

seeh0

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

목차

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

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

  • 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.4 UART
  • 4.1.5 JTAG
  • 4.1.6 주변기기 장치
  • 4.2 임베디드 소프트웨어
  • 4.2.1 임베디드 장비의 부팅 흐름
  • 4.2.2 부트 로더
  • 4.2.3 PBL(Primary Boot Loader 혹은 Rom Boot Loader
  • 4.2.4 SBL(Secondary Boot Loader)
  • 4.2.5 UBoot
  • 4.2.6 운영체제
  • 4.2.7 디바이스 드라이버
  • 4.2.8 파일시스템
  • 4.2.9 서비스와 프로세스
  • 4.2.10 RTOS
  • 4.3 펌웨어 무결성 검증과 암호화
  • 4.4 마무리

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

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

  • 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.1 SPI 통신 설정
  • 8.1.2 Manufacturer ID 읽기
  • 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.11 flashrom에서 지원하지 않는 칩셋 덤프 뜨기
  • 8.2.12 SPIdev Python 패키지로 다루기
  • 8.3 메모리 덤프-beeprog3
  • 8.3.1 Beeprog
  • 8.3.2 메모리 디솔더링
  • 8.3.3 메모리 소켓 연결
  • 8.3.4 비프로그 소프트웨어 설치
  • 8.3.5 비프로그 연결
  • 8.3.6 메모리 칩 덤프
  • 8.4 메모리 덤프-Allsocket
  • 8.4.1 올소켓 장비 구매
  • 8.4.2 FTK Imager 덤프
  • 8.5 마무리

  • 9장. 펌웨어 분석하기
  • 9.1 펌웨어의 구조 분석 순서
  • 9.2 빈워크
  • 9.2.1 빈워크 설치와 실행
  • 9.2.2 이미지에서 파일시스템 추출하기
  • 9.3 카빙
  • 9.3.1 LZMA 카빙
  • 9.3.2 Squashfs 카빙
  • 9.4 정적 분석
  • 9.4.1 정적 분석 도구 - IDA 대 Ghidra
  • 9.4.2 IDA 대 Ghidra
  • 9.4.3 RTOS 이미지 정적 분석 환경 구축하기
  • 9.4.4 Base address 알아내기
  • 9.4.5 하드웨어 변수 식별하기
  • 9.5 동적 분석
  • 9.5.1 펌웨어의 실행 파일 에뮬레이팅하기 - 1
  • 9.5.2 추출한 펌웨어 바이너리 에뮬레이팅하기 - 2
  • 9.5.3 펌웨어의 실행 흐름 추적하기 - strace
  • 9.5.4 펌웨어의 실행 파일 동적 분석하기 – gdb
  • 9.5.5 QEMU system 환경 구축하기
  • 9.5.6 qemu-system-arm32 구축
  • 9.5.7 qemu-system-aarch64 구축
  • 9.5.8 UNICORN 에뮬레이터
  • 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.3 Squashfs
  • 9.8.4 CPIO
  • 9.8.5 EXT4
  • 9.8.6 JFFS와 JFFS2
  • 9.8.7 CRAMFS
  • 9.8.8 UBIFS
  • 9.9 커스텀 펌웨어 분석하기
  • 9.9.1 수정된 펌웨어 분석의 시작
  • 9.9.2 수정된 UBIFS 이미지 분석
  • 9.9.3 010 Editor 분석
  • 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.5 strace 분석 도구 정적 크로스 컴파일하기
  • 11.1.6 strace 동작 확인
  • 11.2 후킹을 통한 임베디드 분석 도구 만들기
  • 11.2.1 리눅스 라이브러리 프리로드
  • 11.2.2 프리로더를 이용한 라이브러리 후킹
  • 11.2.3 OpenSSL 후킹 실습
  • 11.2.4 글로벌 후킹
  • 11.2.5 후킹으로 파일 생성, 삭제 모니터링 도구 만들기
  • 11.2.6 후킹 모드 해지
  • 11.3 마무리

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

  • 13장. ARM Exploitation
  • 13.1 메모리 오염 공격
  • 13.2 About ARM
  • 13.3 ARM 어셈블리 코드
  • 13.4 ARM Thumb 모드란?
  • 13.5 ARM 호출 규약
  • 13.6 ARM Shellcode 만들기
  • 13.7 thumb 모드 코드 작성
  • 13.8 파이프라이닝
  • 13.9 Hello world 쉘 코딩
  • 13.10 execve shellcode 만들기
  • 13.11 리버스 커넥션 쉘 코드 만들기
  • 13.12 ARM 메모리 오염 공격 테크닉
  • 13.13 ARM 스택오버플로우
  • 13.14 ARM ROP
  • 13.15 리얼 월드의 ARM Exploit 테크닉
  • 13.16 마무리

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안