“한빛미디어 서평단 <나는리뷰어다> 활동을 위해서 책을 협찬 받아 작성된 서평입니다.”

Binary Hacks Rebooted
- 책 제목: 0과 1 사이
- 분야: 리눅스, 저수준, 보안
- 난이도: 上
- 분량: 712p (총 9챕터)
- 참고사항: "BINARY HACKS: 해커가 전수하는 테크닉 100선" 개정판
처음에 Hacks를 보고 "오호, 해킹을 위한 책이군.. 나도 보안 동아리 출신인데 엣헴"하면서 골랐는데,
Hacks가 해커의 hack은 아니고, 그냥 Life Hack(생활의 꿀팁) 같은 의미로 쓰였다.
물론 해킹/보안 영역에 적합한 것도 맞는데, 저수준에서의 프로그래밍 노하우라 보면 된다.
내가 본 책 중에 가장 저수준이었고, 가장 어려웠다 (다 읽어보지도 못 함)
일단 리눅스를 사용하지 않거나 모른다면 이해하기 쉽지 않을 것이다.
애초에 제목부터 Binary인 만큼 매우 저수준이고, 모든 코드도 C언어 기반인 점 참고하자.
한 마디로 요약하면, 옛날 스타일의 진짜 개발자(혹은 해커)를 위한 책이다.

뭘 알아야 이해가 가능한 책

대부분 리눅스 관련이다
앞서 말했듯 리눅스에 대해 잘 모르면 읽기 어려울 정도로 진득한 리눅스 내용이다.
그래도 리눅스를 잘 모른다고 모든 내용을 이해할 수 없는 정도까지는 아니다.

찍먹도 가능
그리고 재미있어 보이는 파트나 이해 가능한 부분만 찍어 먹어도 된다고 한다.
나도 이 방식으로 흥미있는 부분만 발췌독한 상태다.
아무래도 바이너리하면 많은 사람들이 거부감을 가지기 쉽기 때문에,
앞 부분엔 매직넘버로 파일 확장자 맞히기라든가 Hello World! 어셈블리어 분석으로 가볍게 시작한다.


파일 업로드 공격 예방에도 중요한 내용
한번쯤 들어봤을 파일 매직 넘버 관련 내용으로 시작하는데,
HEX로 파일을 살펴보면 시작이나 끝 부분에 파일 형식을 나타내는 매직 넘버나 시그니처가 있다.
이걸로 파일 형식을 식별해서 복구 작업이나 악성 파일 업로드 방지에 활용할 수 있다.
바이너리의 세계로 입장하기 전에 가볍게 몸을 풀어주는 느낌이다.




약 50p에 걸쳐 부동소수점을 파헤친다
7챕터는 수치표현과 데이터 처리를 다루는데, 부동소수점을 집중적으로 파헤치는 게 인상적이었다.
그도 그럴게 부동소수점 처리에서 실수하기도 쉽고, 계산에서 많은 예외가 발생할 수 있기 때문일 것이다.
수학과 출신의 저자인 아라타 미즈키 (荒田實樹) 상이 이 파트를 맡은 듯 하다.
저자 소개 中
... 수치 계산에도 손을 대보려다 길을 잘못 들어 부동소수점의 늪에 빠지고 말았습니다.
IEEE 754 부동소수점 수 기본 개념부터 시작해서 예외 처리, 반올림 방식 변경까지 살펴보다가
지금까지의 부동소수점 환경 조작이 최종적으로 컴파일러 최적화때문에 무시되지 않게 하는 법까지 알려준다.


#56에서는 메모리 취약점 활용 공격 기법을 다룬다
배열과 인덱스를 다루면서, 오버 플로나 언더 플로같은 메모리 취약점에 대해 들어봤을 것이다.
UAF든 더블 free든 의도된 메모리 영역이 아니라 다른 메모리 영역에 접근하게 되는 취약점이 되는데,
이게 전통적인 프로세스 제어권 탈취의 시작점이 되겠다.
버퍼 오버플로 계열 공격을 막으려고 스택 카나리나 NX같은 방어 기법들이 도입됐는데,
이런 방어를 우회해 코드 주입 없이도 공격하는 ROP가 등장했고,
그런 ROP 조차 어렵게 만들기 위해 정확한 메모리 주소 자체를 흐트러뜨리는 ASLR이 나오게 된 것이다.
뭐, 그렇다고 ASLR이 무적인 건 아니다.
#55에서는 이 ASLR의 동작과 구현을 설명하면서도 ASLR을 회피해 공격하는 방법도 알려준다.
아마 밥먹듯이 CTF를 풀고, DEFCON 결승에 최연소로 참가했다는 고이케 유키 (小池悠生) 상이 맡은 듯하다.
아무튼 ASLR과 ROP에 관심있다면 이 책의 #55와 #56를 참고하자.


리눅스 성능 분석의 모든 걸 알려주마!!! ← 이런 느낌은 아니고, 이런 게 있습니다~ 정도다.
제목 그대로 리눅스 퍼포먼스 분석 '입문'이다.
그래서 간략한 개념과 핵심만 있어서 분량도 적어 가볍게 읽을 수 있어서 좋다.
이벤트 카운트, 프로파일링, 트레이싱의 차이를 알 수 있고, perf로 직접 실습해볼 수도 있다.

https://github.com/brendangregg/FlameGraph
perf record로 샘플링하고 이걸 플레임 그래프로 프로파일링하는 방법도 마지막에 간략히 알려준다.
이 그래프로 호출한 함수와 스택 트레이스의 깊이, 샘플 수, 소요 시간 등을 시각화해서 볼 수 있다.

아주 자극적인 제목으로 이목을 끄는 걸 볼 수 있다
사실 목차를 살펴보다가 제일 먼저 눈에 들어온 제목이었는데..
권한에 제한을 둬서 취약점이 발견되더라도 피해를 줄이는 방법에 대해 설명한다.
더 자세한 이야기가 궁금하다면, 교보문고에 가서 읽어보거나 구매해서 읽어보자.
그 밖에도 총 89가지 이야기들로 구성되어 있으니, 이런 저수준 주제들에 대해 관심있다면 추천한다.
진짜 개발자라면 이 책을 이해할 수 있어야 하겠지..
출처: https://zzaekkii.tistory.com/48 [int main(){:티스토리]