• CTF 정보보안 콘테스트 챌린지 북
  • Capture The Flag 문제 풀이로 배우는 해킹 테크닉

  • 우스이 토시노리, 타케사코 요시노리, 히로타 카즈키, 호요우 타카아키, 마에다 유우토, 미노우 케이스케, 미무라 사토시, 야기하시 유우 지음
  • 양현 옮김

  • 해킹 & 보안 시리즈_008
  • ISBN: 9791158390433
  • 25,000원 | 2016년 07월 29일 발행 | 300쪽



CTF란 정보 기술 문제를 적절한 방식으로 처리하고, 각 문제를 풀면서 획득한 점수를 통해 승패를 결정하는 경기다. 이 책에서는 컴퓨터 보안 기술 경연 컨테스트인 CTF(Capture The Flag)에 출전하기 위한 지식과 기술을 배운다.

간단하게는 문제에 대한 답을 쓰는 것부터, 제공된 프로그램이나 웹 페이지의 취약점을 찾아내 그 안에 숨겨진 해답을 찾아내는 것까지 다양한 형태의 문제가 출제된다. 그리고 보안에 대한 내용뿐만 아니라 프로세서나 네트워크, 웹 등에 대한 다양한 지식이 있어야 풀 수 있는 문제도 출제되기 때문에 '공격'과 '방어'가 가능한 정보처리 능력을 키울 수 있다.

이 책은 CTF에 출전하는 데 필요한 정보 기술의 기본과 주의점을 알기 쉽게 설명하고 있다. 이 책에서 배운 지식을 토대로 실제 CTF와 같은 보안 컨테스트에 참가해보자. 그리고 해커로서의 실력을 키워나가자.

우스이 토시노리(碓井 利宣)

2015년 일본 전신전화 주식회사 입사. 보안 플랫폼 연구소 소속(현직). CTF for 비기너즈 바이너리 담당. CTF에서의 경험을 바탕으로 공격 코드 탐지 기술과 악성 코드 분석 기술을 연구하고 있다.

타케사코 요시노리(竹迫 良範)

2015년 9월부터 주식회사 리쿠르트 마케팅 파트너즈 기술 연구원 취임. SECCON 실행 위원장. 메모장에 어셈블리 시조를 쓰는 모임. 처음 다뤄본 컴퓨터는 FM TOWNS의 32비트 세대. 취미는 CPU 명령어 세트 설명서를 보는 것. 인쇄 가능한 문자로 기계어 프로그래밍을 하거나 문자와 기계어의 의미를 겹치는 것을 좋아함.

히로타 카즈키(廣田 一貴)

웹 취약점 진단에 종사하는 보안 엔지니어. 보안 캠프 중앙 대회 2012 참가. 2015년에는 해당 캠프의 강사. 처음 발견한 취약점은 세션 고정.

호요우 타카아키(保要 隆明)

대학 4년째 보안 캠프 2013에 참가해 네트워크 패킷에 몰두하게 됨. 이후 캠프 관계자의 권유로 스터디와 CTF에 적극적으로 참가해 기술 향상을 하는 중. CTF for 비기너즈 네트워크 담당. 보안 캠프 2015 강사.

마에다 유우토(前田 優人)

보안 캠프 중앙 대회 2012 웹 클래스에 참가해 정보 보안에 흥미를 가짐. 같은 시기에 CTF의 존재를 알게 되고 이후 CTF에 적극적으로 참가하는 중. 전문 분야는 웹이지만 CTF를 접하면서 다양한 장르의 문제에 관심을 가지고 있음.

미노우 케이스케(美濃 圭佑)

고등학교 3학년 때 보안 & 프로그래밍 캠프 2009에 참가. 이후 보안과 네트워크의 매력에 빠져 패킷을 분석하며 놀기 시작. 이 캠프 2015에서 강사로 활동. CTF for 비기너즈나 보안 캠프에서 훈련용 네트워크 설계 및 구축 등을 담당.

미무라 사토시(三村 聡志)

CTF for 비기너즈 대표. '기술로 주위를 즐겁게 하고 싶다'고 생각하며 매일 관심이 가는 대로 커널단부터 사용자단까지 다양한 계층에서 놀고 있음. 최근 dit사의 CAPLogger 개발을 담당. 2015년 보안 캠프 강사.

야기하시 유우(八木橋 優)

주로 보안 진단 업무에 종사하는 보안 컨설턴트. 보안 캠프 전국 대회 2013에 참가. 2015년 캠프 강사. 아주 흔한 취약점인 XSS에 매료된 것이 보안과의 만남.

양현

경희대학교 지리학과를 졸업하고 웹 개발자로 근무하다 보안 업무에 뛰어들었다. SK인포섹에서 소스 취약점 분석, 모의해킹, 서버 취약점 분석 업무로 본격적인 보안 실무 경험을 쌓고, 현재 일본 NHN-Playart 애플리케이션 보안 업무를 담당하고 있다. 번역한 책으로는 『알기 쉽게 설명한 VMware NSX』 『리눅스 서버 보안』이 있다.

  • ▣ [00부] 서론
    • 01 _ CTF란?
      • 0.1.1 _ CTF란 무엇일까?
      • 0.1.2 _ CTF에서 출제되는 문제
      • 0.1.3 _ CTF 경기 형식
    • 02 _ CTF 참가
      • 0.2.1 _ CTF를 찾자
      • 0.2.2 _ CTF에 참가하자
      • 0.2.3 _ 대회 종료 후 Writeup을 읽자
    • 03 _ 주의점
    • 04 _ 법률
      • 0.4.1 _ 부정 액세스란?
      • 0.4.2 _ 법률 고려
      • 0.4.3 _ 혹시 취약점을 발견한다면
    • 05 _ CTF를 해보자
    •  
  • ▣ [01부] 바이너리 분석
    • 01 _ 1단계: 바이너리 분석이란?
      • 1.1.1 _ 바이너리란 무엇인가?
      • 1.1.2 _ 바이너리 분석에 대한 인식
      • 1.1.3 _ 바이너리를 분석한다는 것의 의의
      • 1.1.4 _ CTF의 바이너리 문제
      • 1.1.5 _ 바이너리 분석과 윤리
      • 1.1.6 _ 이 책의 대상
      • 1.1.7 _ 정리
    • 02 _ 2단계 : 바이너리 분석 환경 구축
      • 1.2.1 _ 분석용 도구 소개
      • 1.2.2 _ 환경 구축
      • 1.2.3 _ 정리
    • 03 _ 3단계: 바이너리 분석 입문
      • 1.3.1 _ 바이너리 분석 절차
      • 1.3.2 _ 표층 분석
      • 1.3.3 _ 동적 분석
      • 1.3.4 _ 정적 분석
      • 1.3.5 _ CTF에서의 바이너리 분석
      • 1.3.6 _ 정리
    •  
  • ▣ [02부] PWN
    • 01 _ 1단계: pwn이란?
      • 2.1.1 _ pwn의 유래와 의미
      • 2.1.2 _ pwn 문제의 흐름
      • 2.1.3 _ 도구 소개
      • 2.1.4 _ 실행 환경
    • 02 _ 2단계: 사전 조사
      • 2.2.1 _ 로컬 익스플로잇과 원격 익스플로잇
      • 2.2.2 _ 실행 파일의 보안 메커니즘 확인
    • 03 _ 3단계: 취약점 탐색
      • 2.3.1 _ 방침
      • 2.3.2 _ 사용자 입력을 처리하는 함수
      • 2.3.3 _ printf 관련 함수의 포맷 스트링
    • 04 _ 4단계: 익스플로잇
      • 2.4.1 _ 스택 기반 버퍼 오버플로우
      • 2.4.2 _ 포맷 스트링 버그
    • 05 _ 5단계: pwn! pwn! pwn!
      • 2.5.1 _ 익스플로잇 코드
      • 2.5.2 _ ASLR 우회
    •  
  • ▣ [03부] 네트워크
    • 01 _ 1단계: CTF에서의 네트워크 분야를 알자
      • 3.1.1 _ 어떤 문제가 출제되는가
      • 3.1.2 _ 네트워크 분야의 문제를 풀기 위해 필요한 것
      • 3.1.3 _ 이번 장에서 다루는 내용
    • 02 _ 2단계: 네트워크 프로토콜
      • 3.2.1 _ 네트워크란?
      • 3.2.2 _ 네트워크 프로토콜
      • 3.2.3 _ 네트워크 계층과 데이터 캡슐화
    • 03 _ 3단계: 패킷 분석
      • 3.3.1 _ 패킷이 기록된 파일
      • 3.3.2 _ 와이어샤크를 이용한 패킷 분석
      • 3.3.3 _ 와이어샤크 - 분석 기능을 이용한 패킷 분석
      • 3.3.4 _ 와이어샤크 - 조건에 맞는 패킷 표시
      • 3.3.5 _ 와이어샤크를 이용해 실제 CTF 문제를 풀어보자
      • 3.3.6 _ 파이썬 프로그래밍 언어를 이용한 패킷 분석
      • 3.3.7 _ 스캐피를 이용한 문제 풀이
      • 3.3.8 _ 그 밖의 다른 도구를 이용한 패킷 분석
    • 04 _ 4단계: 패킷 송수신
      • 3.4.1 _ Netcat을 이용한 송수신
      • 3.4.2 _ 소켓을 이용한 송수신
      • 3.4.3 _ 스캐피를 이용한 패킷 송수신
    •  
  • ▣ [04부] 웹 문제
    • 01 _ 1단계: 웹 문제란?
      • 4.1.1 _ 웹 문제의 특징
      • 4.1.2 _ 웹 문제의 개념
    • 02 _ 2단계: 임의 코드 실행 취약점에 대해
      • 4.2.1 _ 임의 코드 실행 취약점이란?
      • 4.2.2 _ 임의 코드를 실행하기 위해
      • 4.2.3 _ 실제 공격
    • 03 _ 3단계: 각종 취약점 이용
      • 4.3.1 _ 돌파구 찾기
      • 4.3.2 _ 운영체제 명령어 인젝션
      • 4.3.3 _ 파일 권한 미비
      • 4.3.4 _ 각 언어별 고유 처리
      • 4.3.5 _ 알려진 취약점 이용
    • 04 _ 4단계: 셸을 탈취한 후
      • 4.4.1 _ FLAG 획득
      • 4.4.2 _ 권한 및 환경 파악
    •  
  • ▣ [05부] SQL 인젝션
    • 01 _ 1단계: SQL 인젝션이란?
      • 5.1.1 _ 준법 정신
      • 5.1.2 _ 데이터베이스 조작을 위한 언어, SQL
      • 5.1.3 _ SQL 인젝션으로 할 수 있는 것
    • 02 _ 2단계: 공격 전에
      • 5.2.1 _ SQL 인젝션을 하기 전에
      • 5.2.2 _ SQL 인젝션 가능 여부 확인
      • 5.2.3 _ SQL 구문의 어디에 인젝션이 되는지 추측
      • 5.2.4 _ 동작 환경 확인
    • 03 _ 3단계: 공격해보기
      • 5.3.1 _ SELECT 구문에서 인젝션
    • 04 _ 4단계: 발전
      • 5.4.1 _ INSERT 문 인젝션
    •  
  • ▣ [06부] 부록
    • 01 _ 바이너리 분석 팁
      • 부록 1.1 _ 분석 방해 기능을 찾아내고 우회하는 방법
      • 부록 1.2 _ 바이트코드 분석
      • 부록 1.4 _ 바이너리 문제를 풀기 위한 프로그래밍 기법
      • 부록 1.5 _ 정리
    • 02 _ 셸 코드
      • 부록 2.1 _ 셸 코드란?
      • 부록 2.2 _ 셸 코드 기초 지식
      • 부록 2.3 _ 셸 코드를 만들어보자
      • 부록 2.4 _ 셸 코드 압축
  • 83쪽, 본문 첫 번째 줄

    stacall과 큰 차이는 --> stdcall과 큰 차이는

  • 113쪽, format.c 소스코드를 다음 코드로 대체

    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
        char str[128];
        fgets(str, 128, stdin);
        printf("Hello, ");
        printf(str);
        return 0;
    }
    

연습용 파일

각 연습에서 사용하는 파일을 내려받으실 수 있습니다.

관련 글


엮인 글

엮인 글 주소: http://wikibook.co.kr/ctf/trackback/