웹 애플리케이션 보안 완벽 가이드

체계적으로 배우는 안전한 웹 애플리케이션 제작 기법

《웹 애플리케이션 보안 완벽 가이드》는 취약점을 최소화하기 위한 다양한 방법을 소개한다. 이 책에서는 PHP를 사용하지만 웹의 기본을 다루고 있어 다른 언어에서도 충분히 적용할 수 있는 내용을 다룬다. 4장까지는 PHP를 바탕으로 취약점을 소개하고, 취약점으로 발생할 수 있는 위협, 취약점을 없애기 위해 어떻게 개발해야 할지 예제 코드와 함께 상세하게 설명한다. 책에서 다루는 소스코드는 책과 함께 제공하는 가상 머신에도 포함돼 있으므로 책을 보면서 곧바로 실습을 진행할 수 있다. 5장 이후로는 개발 전 기획 단계에서 고려해야 할 기본적인 보안 기능과 직접 보안 진단을 하기 위한 방법들을 심도 있게 설명한다.

이 책은 웹 개발자뿐 아니라 보안 업계에 종사하는 웹 취약점 진단자에게도 유용한 내용이 수록돼 있어 진단 실무자에게도 유용할 것이다.

 

★ 이 책에서 다루는 내용 ★

  • 취약점 설명과 정의
  • 웹 보안 기초
  • 기능별 발생 가능한 취약점
  • 취약점의 원리 및 대응 방법
  • 취약점으로 인한 영향
  • 개발 시 고려해야 할 보안 기능
  • OpenVAS를 이용한 플랫폼 취약점 진단
  • OWASP ZAP을 이용한 취약점 진단
  • 취약점 진단을 수행하는 방법
  • 취약점 진단 보고서를 작성하는 방법
  • 안전한 웹 애플리케이션 개발을 위한 관리 방법
  • 네트워크 및 서버를 안전하게 지키는 방법

토쿠마루 히로시

1985년 쿄세라 주식회사에 입사한 뒤 소프트웨어 개발, 기획에 종사. 1999년에 휴대전화용 인증 과금 기반 방식 설계 담당을 맡은 것을 계기로 보안에 흥미를 가지게 됐다. 2004년 이 분야를 사업화해 2008년 독립. 취약점 진단 및 컨설팅 업무를 하며 블로그와 스터디를 통해 보안 계몽 활동을 하고 있다. EG 시큐리티 솔루션즈 주식회사 대표이자 OWASP Japan 자문위원회, 독립행정법인 정보처리추진기구(IPA) 비상근연구원. 트위터 ID는 @ockeghem

양현

게임 필자에서 개발자로 전직하고, 개발자에서 다시 보안 엔지니어로 전직한 10년차 보안 엔지니어. 잠시 재직했던 회사가 언제나 중국발 해킹 공격에 당하는 것을 보고 스스로 막아보고자 보안에 뛰어들었다. SK인포섹에서 소스 취약점 분석, 모의해킹, 서버 취약점 분석 업무로 본격적인 보안 실무 경험을 쌓고, NHN JAPAN을 거쳐 현재 DMM.com 보안 엔지니어링 매니저로 근무하고 있다.

김민호

사이버 보안을 전공하고 보안 교육을 시작으로 보안에 첫 발을 내디뎠다. 그 후 네트워크 포렌식 등 침해사고 분석 업무로 전환해 현재까지 CSIRT 업무를 수행하고 있다. NHN JAPAN을 거쳐 현재 DMM.com 네트워크 보안을 담당하고 있다.

연구흠

고등학교 시절 우연히 접하게 된 클리퍼 4.0을 시작으로 현재 15년차 개발자로 근무하고 있다. PHP를 시작으로 Perl, ASP, JAVA, JavaScript, Android 등을 다루며, Python과 Go 언어를 공부하고 있다. 새로운 기술 습득과 보안 관련 분야에 관심이 많으며, ‘없으면 만든다’라는 모토로 집에서도 취미로 개발을 할 만큼 코딩하는 것을 좋아한다. 최근 이직한 블록체인 업체에서 다양한 블록체인 기반의 프로젝트를 수행 중이며, 현재 블록체인 개발자 양성 과정에서 멘토로도 활동 중이다.

  • ▣ 01장: 웹 응용 프로그램 취약점이란?
    • 01 취약점이란 ‘악용 가능한 버그’
    • 02 왜 취약점이 존재하면 안 되는가?
      • 경제적 손실
      • 법적 규제
      • 사용자가 회복 불가능한 손실을 받을 수 있다
      • 웹 사이트 사용자에게 신뢰도 하락
      • 의도하지 않게 공격자가 될 수 있다
    • 03 취약점이 발생하는 이유
    • 04 보안 버그와 보안 기능
    • 05 이 책의 구성
    • 06 보안 지침과 대응
      • 소프트웨어 개발 보안 가이드
      • OWASP Top10
    •  
  • ▣ 02장: 실습 환경 설정
    • 01 실습 환경 개요
      • 실습용 가상 시스템 다운로드
      • 예제 프로그램 라이선스
    • 02 파이어폭스 설치
    • 03 버추얼박스 설치
      • 버추얼박스란?
      • 버추얼박스 다운로드
    • 04 가상머신 가져오기 및 동작 확인
      • 가상 시스템 동작 확인
      • 가상 시스템 종료 방법
      • 리눅스 운영
    • 05 OWASP ZAP 설치
      • OWASP ZAP이란?
      • JRE 설치
      • OWASP ZAP 설치
      • OWASP ZAP 설정
    • 06 파이어폭스 확장 기능 FoxyProxy-Standard 설치
    • 07 OWASP ZAP 사용하기
    • 08 웹 메일 확인
      • 참고 / 가상머신 데이터 목록
    •  
  • ▣ 03장: 웹 보안 기초 - HTTP, 세션 관리, 동일 출처 정책, CORS
    • 01 HTTP와 세션 관리
      • 왜 HTTP를 공부하는가?
      • 가장 간단한 HTTP
      • 입력-확인-등록 형식
      • 상태 비보존 HTTP 인증
      • 쿠키 및 세션 관리
      • 정리
    • 02 수동적 공격과 동일 출처 정책(Same Origin Policy)
      • 능동적 공격과 수동적 공격
      • 브라우저는 어떻게 수동 공격을 막을까
      • 자바스크립트 이외의 크로스 도메인 접근
      • CSS
      • 정리
    • 03 CORS(Cross-Origin Resource Sharing)
      • 간단한 요청
      • 사전 점검 요청
      • 인증 정보를 포함한 요청
    •  
  • ▣ 04장: 웹 응용 프로그램 기능별 보안 버그
    • 01 웹 응용 프로그램의 기능과 취약점 대응
      • 취약점은 어디서 발생하는가?
      • 인젝션 관련 취약점이란?
      • 정리
    • 02 입력 처리와 보안
      • 웹 응용 프로그램에서 ‘입력’은 무슨 역할인가?
      • 문자 인코딩 검증
      • 문자 인코딩 변환
      • 문자 인코딩 검사 및 변환의 예
      • 입력값 검증
      • 예제
      • 정리
      • 참고: ‘제어 문자 이외’를 표현하는 정규 표현식
    • 03 표시 처리에 따른 문제
      • 4.3.1 크로스 사이트 스크립팅(기본편)
      • 개요
      • 공격 방법과 영향
      • 취약점이 발생하는 원인
      • 대책
      • 참고: Perl을 이용한 대책 예
      • 4.3.2 크로스 사이트 스크립팅(응용편)
      • href 속성과 src 속성을 사용한 XSS
      • 자바스크립트 동적 생성
      • HTML 태그와 CSS 입력을 허용하는 경우의 대책
      • 4.3.3 에러 메시지로부터의 정보 유출
      • 정리
      • 더 높은 단계로 나아가기 위해
    • 04 SQL 호출에 따른 취약점
      • 4.4.1 SQL 인젝션
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 정리
      • 더 높은 단계로 나아가기 위해
      • 참고: 자리 표시자를 사용할 수 없는 경우의 대책
      • 참고: Perl+MySQL의 안전한 연동 방법
      • 참고: PHP 5.3.5까지 사용할 수 있는 안전한 연동 방법
      • 참고: Java+MySQL의 안전한 연동 방법
    • 05 ‘중요한 처리’시에 삽입되는 취약점
      • 4.5.1 크로스 사이트 요청 변조(CSRF)
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 4.5.2 클릭재킹
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 정리
    • 06 세션 관리 미비
      • 4.6.1 세션 하이재킹의 원인과 영향
      • 4.6.2 추측 가능한 세션 ID
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 참고: 자체 세션 관리 메커니즘과 관련된 다른 취약점
      • 4.6.3 URL에 삽입된 세션 ID
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 4.6.4 세션 ID 고정화
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 정리
    • 07 리다이렉트 처리와 관련된 취약점
      • 4.7.1 오픈 리다이렉트
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 4.7.2 HTTP 헤더 인젝션
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
    • 08 쿠키 출력과 관련된 취약점
      • 4.8.1 쿠키의 부적절한 출력
      • 4.8.2 쿠키의 보안 속성 미흡
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 보안 속성 외 속성값에 대한 주의
      • 정리
    • 09 메일 전송 문제
      • 4.9.1 메일 전송 문제 개요
      • 4.9.2 메일 헤더 인젝션
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 정리
      • 더 높은 단계로 나아가기 위해
    • 10 파일 접근과 관련된 문제
      • 4.10.1 디렉터리 탐색
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 정리
      • 4.10.2 의도하지 않은 파일 노출
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 참고: Apache 웹 서버에서 특정 파일을 숨기는 방법
    • 11 OS 명령 호출 시 발생하는 취약점
      • 4.11.1 OS 명령어 인젝션
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 참고: 내부 셸을 호출하는 함수
    • 12 파일 업로드와 관련된 문제
      • 4.12.1 파일 업로드 문제 개요
      • 4.12.2 업로드된 파일을 통한 스크립트 실행
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 4.12.3 파일 다운로드를 통한 크로스 사이트 스크립팅
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 정리
      • 4.12.4 PDF의 FormCalc를 통한 콘텐츠 하이재킹
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 정리
    • 13 포함 기능과 관련된 문제
      • 4.13.1 파일 포함 공격
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 정리
    • 14 구조화된 데이터 읽기 관련 문제
      • 4.14.1 eval 인젝션
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 정리
      • 더 높은 단계로 나아가기 위해
      • 4.14.2 안전하지 않은 역직렬화
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 4.14.3 XML 외부 개체 참조(XXE)
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 정리
    • 15 공유 자원 및 캐시와 관련된 문제
      • 4.15.1 경쟁 상태 취약점
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 정리
      • 참고: 자바 서블릿의 기타 주의 사항
      • 4.15.2 캐시로부터의 정보 유출
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 정리
    • 16 웹 API 구현에서 발생할 수 있는 취약점
      • 4.16.1 JSON과 JSONP 개요
      • JSON이란?
      • JSONP이란?
      • 4.16.2 JSON 이스케이프 미흡
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 4.16.3 JSON 직접 열람에 의한 XSS
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생하는 원인
      • 대책
      • 4.16.4 JSONP의 콜백 함수 이름을 통한 XSS
      • 개요
      • 공격 방법 및 영향
      • 취약점이 발생한 원인
      • 대책
      • 4.16.5 웹 API의 CSRF
      • 웹 API에 대한 CSRF 공격 경로
      • 대책
      • 4.16.6 JSON 하이재킹
      • 개요
      • 공격 방법 및 영향
      • 대책
      • 4.16.7 JSONP의 부적절한 사용
      • JSONP에 의한 비밀 정보 제공
      • 신뢰할 수 없는 JSONP API 사용
      • 정리
      • 4.16.8 CORS 검증 미흡
      • 4.16.9 보안을 강화하는 응답 헤더
      • 정리
    • 17 자바스크립트 문제
      • 4.17.1 DOM Based XSS
      • 개요
      • 취약점이 발생한 원인
      • 대책
      • 4.17.2 웹 저장소의 부적절한 사용
      • 웹 저장소란?
      • 웹 저장소에 무엇을 저장해야 하는가?
      • 웹 저장소의 부적절한 사용 예
      • 4.17.3 postMessage호출의 미비
      • postMessage란?
      • 메시지 송신지의 미확인
      • 메시지 수신처 미확인
      • 대책 정리
      • 4.17.4 오픈 리다이렉트
      • 취약점이 발생한 원인
      • 대책
      • 정리
    •  
  • ▣ 05장: 대표적인 보안 기능
    • 01 인증
      • 5.1.1 로그인 기능
      • 로그인 기능에 대한 공격
      • 로그인 기능이 파손됐을 때의 영향
      • 부정 로그인을 막기 위해서는
      • 5.1.2 패스워드 인증을 노리는 공격에 대한 대책
      • 기본적인 계정 잠금
      • 패스워드 인증에 대한 공격 종류와 대책
      • 5.1.3 패스워드 저장 방법
      • 패스워드 보호의 필요성
      • 암호화를 통한 패스워드 보호와 해결 과제
      • 메시지 다이제스트를 통한 패스워드 보호와 과제
      • 5.1.4 자동 로그인
      • 안전하지 않은 구현 예
      • 안전한 자동 로그인 구현 방법
      • 자동 로그인의 위험을 낮추기 위해
      • 5.1.5 로그인 폼
      • 5.1.6 오류 메시지 요건
      • ID와 패스워드 어느 쪽이 틀렸는지를 표시하면 안 되는 이유
      • ID와 패스워드를 2단계로 나눠 입력하는 사이트 증가
      • 5.1.7 로그아웃 기능
      • 5.1.8 인증 기능 정리
    • 02 계정 관리
      • 5.2.1 사용자 등록
      • 메일 주소 수신 확인
      • 사용자 ID 중복 방지
      • 사용자 자동 등록에 대한 대처
      • 5.2.2 패스워드 변경
      • 현재 패스워드를 확인하는 것
      • 패스워드 변경 시 메일 알림
      • 패스워드 변경 기능에서 발생하기 쉬운 취약점
      • 5.2.3 메일 주소 변경
      • 메일 주소 변경에 필요한 기능적 대책
      • 5.2.4 패스워드 초기화
      • 관리자용 패스워드 초기화 기능
      • 사용자용 패스워드 초기화 기능
      • 5.2.5 계정 정지
      • 5.2.6 계정 삭제
      • 5.2.7 계정 관리 정리
    • 03 인가
      • 5.3.1 인가란?
      • 5.3.2 인가 미비의 예
      • 정보가 있는 URL을 알면 인증 없이 정보가 열람 가능
      • 정보 자원의 ID를 변경하면 권한을 넘어서는 정보를 열람할 수 있음
      • 권한에 따라 메뉴만 달리 표시하는 경우
      • hidden 매개변수나 쿠키에 권한 정보를 보존
      • 인가 미비 정리
      • 5.3.3 인가 제어의 요건 정의
      • 5.3.4 인가 제어의 올바른 정의
      • 5.3.5 정리
    • 04 로그 출력
      • 5.4.1 로그 출력 목적
      • 5.4.2 로그 종류
      • 오류 로그
      • 접근 로그
      • 디버그 로그
      • 5.4.3 로그 출력 요건
      • 로그에 기록해야 할 이벤트
      • 로그 출력 항목
      • 로그 보호
      • 로그를 출력할 곳
      • 로그 보관 기간
      • 서버 시간 맞춤
      • 5.4.4 로그 출력 구현
      • 5.4.5 정리
      • 참고 : 접근 로그 요구 가이드라인
    •  
  • ▣ 06장: 문자 코드와 보안
    • 01 문자 코드와 보안 개요
    • 02 문자 집합
    • 03 문자 인코딩
    • 04 문자 코드로 인한 취약점 발생 요인 정리
    • 05 문자 코드를 올바르게 취급하는 방법
    • 06 정리
    •  
  • ▣ 07장: 취약점 진단 입문
    • 01 취약점 진단 개요
    • 02 취약한 응용 프로그램 Bad Todo
      • Nmap
    • 03 진단 도구 다운로드 및 설치
      • OpenVAS
      • RIPS
    • 04 Nmap을 이용한 포트 스캔
      • Nmap 사용해보기
      • Nmap 결과를 보는 방법
      • OpenVAS 사용해보기
    • 05 OpenVAS을 통한 플랫폼 취약점 진단
      • OpenVAS 결과 확인 방법
      • OWASP ZAP 설정
    • 06 OWASP ZAP을 이용한 자동 취약점 스캔
      • 세션 정보 설정
      • 크롤링
      • 자동 진단
      • 진단 결과 확인
      • 진단 보고서 작성
      • 진단 후처리
    • 07 OWASP ZAP을 이용한 수동 취약점 진단
      • URL 목록표 작성
      • 진단 작업
      • 보고서 작성
      • 진단 후처리
      • RIPS 사용해보기
    • 08 RIPS를 사용한 소스코드 진단
    • 09 취약점 진단 실시를 할 때 주의할 점
    • 10 정리
    • 11 취약점 진단 보고서 예제
      • 7.11.1 XML 외부 엔티티 참조(XXE)
      • 7.11.2 크로스 사이트 스크립팅(XSS)
    •  
  • ▣ 08장: 웹 사이트의 안전성을 높이기 위해
    • 01 웹 서버에 대한 공격 경로 및 대책
      • 8.1.1 기반 소프트웨어 취약점을 노린 공격
      • 8.1.2 무단 로그인
      • 8.1.3 대책
      • 적절한 서버 기반을 선정
      • 불필요한 소프트웨어는 사용하지 않음
      • 취약점 대처는 실시간으로 수행
      • 공개할 필요가 없는 포트나 서비스는 접근을 제한
      • 인증 강도를 높임
    • 02 피싱 사이트 대책
      • 8.2.1 네트워크를 통한 피싱 사이트 수법
      • DNS에 대한 공격
      • ARP 스푸핑
      • 8.2.2 피싱
      • 8.2.3 가짜 웹 사이트 대책
      • 네트워크적인 대책
      • TLS 도입
      • 확인하기 쉬운 도메인명 사용
    • 03 도청, 변조 대책
      • 8.3.1 도청, 변조 경로
      • 8.3.2 중간자 공격
      • OWASP ZAP을 이용한 중간자 공격 실습
      • OWASP ZAP 루트 인증서 설치
      • 8.3.3 대책
      • TLS 이용 시 주의할 점
    • 04 악성코드 대책
      • 8.4.1 웹 사이트 악성코드 대책이란?
      • 8.4.2 악성코드 감염 경로
      • 8.4.3 웹 서버 악성코드 대책 개요
      • 8.4.4 웹 서버에 악성코드가 들어오지 않게 하기 위한 대책
      • 악성코드 방지 대책 여부 검토
      • 정책을 정하고 사용자에게 고지
      • 백신 소프트웨어를 이용한 대처
    • 05 정리
    •  
  • ▣ 09장: 안전한 웹 응용 프로그램을 위한 개발 관리
    • 01 개발 관리에 따른 보안 대책의 전체 모습
    • 02 개발 체제
    • 03 개발 프로세스
      • 9.3.1 기획 단계에서의 유의점
      • 9.3.2 발주할 때의 유의점
      • 9.3.3 요건 정의를 할 때 유의할 점
      • 9.3.4 기본 설계 진행 방식
      • 9.3.5 상세 설계, 프로그래밍시 유의점
      • 9.3.6 보안 테스트의 중요성 및 방법
      • 9.3.7 수주자측 테스트
      • 9.3.8 개발자 쪽에서의 테스트(검수)
      • 9.3.9 운영 단계에서의 유의점
      • 9.3.10 애자일 개발 프로세스에 적용
    • 04 정리