책 소개
요약
웹 개발자가 알아야 할 공격과 방어를 다룬다!
매년 크게 바뀌지 않는 웹 취약점으로부터 웹사이트를 방어하기 위한 실질적인 방안을 이해하기 쉽게 설명한다. 웹 개발자라면 꼭 알아야 하는 필수 지식이며 예시와 함께 해킹에 대한 조치 방안을 알기 쉽게 표현했다.
인터넷, 브라우저가 어떻게 동작하는지부터 인젝션 공격, 파일 업로드 공격, DoS 공격의 전반적인 내용을 알아본다. 또한 특정 프로그래밍 언어에 국한되지 않아 웹 보안의 원리를 총체적으로 배우기 좋은 가이드가 될 것이다.
이 책에서 다루는 내용
◆ SQL 인젝션 공격, 악의적인 자바스크립트와 CSRF로부터의 보호 방법
◆ 인증 및 형상 액세스 제어 방법을 활용한 계정 보호
◆ 암호 추측, 세션 도용 또는 권한 상승에 의존하는 공격 방지
◆ 암호화 구현
◆ 레거시 코드의 취약점 관리
◆ 취약점을 노출하는 정보 누출 방지
◆ 과대 광고 및 서비스 거부 등 고급 공격 완화
이 책의 대상 독자
이제 막 일을 시작하는 웹 개발자라면 이 책이 인터넷 보안에 대한 이상적인 안내서가 될 것이다. 컴퓨터 과학 관련 자격증을 취득했거나 부트캠프를 갓 수료한 사람, 독학한 사람 모두 이 책을 읽어볼 것을 권한다. 모든 필수 지식이 명확한 예시와 함께 직설적으로 설명한다. 위협에 대해 미리 준비한다면 앞으로 다가올 많은 문제를 해결할 수 있다.
경험이 많은 프로그래머에게도 유용하다. 보안 지식이 있다면 일을 할 때 도움이 되므로 이 책을 통해 부족한 부분을 보충할 수 있다. 많은 프로그래머가 경력 전반에 걸쳐 다양한 언어를 사용하기 때문에 개별 라이브러리에 지나치게 집중하는 것보다 웹 보안의 원리를 익히는 것이 좋다.
이 책의 구성
1장 '웹사이트를 해킹하자’에서는 웹사이트를 해킹하는 것이 얼마나 쉬운지 알 수 있다.
2장 ‘인터넷이 어떻게 작동하는지’에서는 TCP, IP 주소, 도메인 이름, HTTP를 검토하고 네트워크에서 데이터를 안전하게 전달할 수 있는 방법을 확인한다.
3장 ‘브라우저의 작동 방식’에서는 브라우저가 웹 페이지를 렌더링하는 방법과 브라우저 보안 모델에서 자바스크립트 코드가 실행되는 방법을 배운다.
4장 ‘웹 서버의 작동 방식’에서는 정적 콘텐츠를 제공하는 방법과 템플릿과 같은 동적 콘텐츠를 사용해 데이터베이스 및 기타 시스템의 데이터 통합 방법을 설명한다.
5장 ‘프로그래머의 작동 방식’에서는 웹사이트 코드를 작성하는 과정과 버그 및 보안 취약점의 위험을 줄이는 개발 습관을 설명한다.
6장 ‘인젝션 공격’에서는 해커가 코드를 주입하고 서버에서 실행하는 것을 살펴보며 웹사이트 취약점을 조사한다.
7장 ‘크로스 사이트 스크립팅 공격.’에서는 악의적인 자바스크립트 코드를 브라우저 환경에 반입하는 데 사용되는 공격과 공격으로부터 보호하는 방법을 검토한다.
8장 ‘사이트 간 요청 위조 공격’에서는 해커들이 사용하는 위조 공격 방법을 소개한다.
9장 ‘인증 손상’에서는 타협 암호의 무작위 대입공격부터 사용자 목록에 이르기까지 로그인 화면을 회피하기 위한 방법을 소개한다.
10장 ‘세션 하이재킹’에서는 사용자들이 로그인한 후 계정을 어떻게 탈취할 수 있는지 알려준다.
11장 ‘권한’에서는 악의적인 행위자가 권한 상승을 이용해 사이트의 금지된 영역에 액세스하는 것을 방지할 수 있는 방법을 알아본다.
12장 ‘정보 누출’에서는 정보가 유출돼 드러난 웹사이트의 취약점을 없애는 방법을 알려준다.
13장 ‘암호화’에서는 암호화를 적절하게 사용하는 방법을 보여주고 인터넷상에서 암호화가 중요한 이유를 설명한다.
14장 ‘제3자 코드’에서는 다른 사람의 코드에서 취약점을 관리하는 방법을 배운다.
15장 ‘XML 공격’에서는 XML 공격에 취약한 웹 서버를 보호하는 방법을 알려준다.
16장. ‘부속품이 되지 마라’에서는 보안 허점을 해결해 해킹의 부속품이 되지 않는 방법을 알려준다.
17장 ‘서비스 거부 공격’에서는 서비스 거부 공격의 일환으로 얼마나 많은 양의 네트워크 트래픽이 웹사이트를 오프라인으로 전환시킬 수 있는지 보여준다.
18장 ‘요약’에서는 지금까지 배운 보안의 핵심 요소들을 복습한다.
목차
목차
- 1장 웹사이트를 해킹하다
- 소프트웨어 익스플로잇 및 다크웹
- 웹사이트 해킹하는 방법
- 2장 인터넷 작동 방식
- 인터넷 프로토콜 스위트
- 인터넷 프로토콜 주소
- 도메인 네임 시스템
- 애플리케이션 계층 프로토콜
- 하이퍼텍스트 전송 프로토콜
- 상태 저장 연결
- 암호화
- 요약
- 인터넷 프로토콜 스위트
- 3장 브라우저 작동 방식
- 웹 페이지 렌더링
- 렌더링 파이프라인: 개요
- Document Object 모델
- 스타일링 정보
- 자바스크립트
- 렌더링 전/후: 브라우저에서 수행하는 다른 모든 작업
- 요약
- 웹 페이지 렌더링
- 4장 웹 서버 작동 방식
- 정적 자원 및 동적 자원
- 정적 자원
- URL 결정
- 콘텐츠 전송 네트워크
- 콘텐츠 관리 시스템
- 동적 자원
- 템플릿
- 데이터베이스
- 분산 캐시
- 웹 프로그래밍 언어
- 요약
- 5장 프로그래머가 어떻게 작동하는지
- 1단계: 설계 및 분석
- 2단계: 코드 작성
- 분산 버전 제어 vs 중앙집중식 버전 제어
- 분기 코드 및 병합 코드
- 3단계: 배포 전 테스트
- 커버리지 및 지속적인 통합
- 테스트 환경
- 4단계: 릴리스 프로세스
- 릴리스 중 표준화된 배포 옵션
- 빌드 프로세스
- 데이터베이스 마이그레이션 스크립트
- 5단계: 릴리스 후 테스트 및 관찰
- 침투 테스트
- 모니터링, 로깅, 오류 보고
- 종속성 관리
- 요약
- 6장 인젝션 공격
- SQL 인젝션 공격
- SQL이 무엇인가?
- SQL 인젝션 공격의 구조
- 완화 1: 매개 변수화된 구문 사용
- 완화 2: 개체 관계 매핑 사용
- 추가 완화: 심층 방어 사용
- 명령 인젝션 공격
- 명령 인젝션 공격 구조
- 완화: 탈출 제어 문자
- 원격 코드 실행
- 원격 코드 실행 공격의 분석
- 완화: 역직렬화 중 코드 실행 비활성화
- 파일 업로드 취약점
- 파일 업로드 공격 분석
- 완화
- 요약
- SQL 인젝션 공격
- 7장 크로스 사이트 스크립팅 공격
- 저장 크로스 사이트 스크립팅 공격
- 완화 1: 탈출 HTML 문자
- 완화 2: 콘텐츠 보안 정책 구현
- 반사 크로스 사이트 스크립팅 공격
- 완화: HTTP 요청에서 동적 내용 탈출
- DOM 기반 크로스 사이트 스크립팅 공격
- 완화: URI 조각에서 동적 내용 탈출
- 요약
- 저장 크로스 사이트 스크립팅 공격
- 8장 사이트 간 요청 위조 공격
- 사이트 간 요청 위조 공격 분석
- 완화1: REST 원칙을 따른다
- 완화 2: 안티 CSRF 공격 쿠키 구현
- 완화 3: SameSite 쿠키 속성 사용
- 보너스 완화 방법: 중요한 작업에 대한 재인증 필요
- 요약
- 9장 인증 손상
- 인증 구현
- HTTP 네이티브 인증
- 네이티브하지 않은 인증
- 무작위 대입 공격
- 완화 1: 타사 인증 사용
- 완화 2: Single Sign-On과 통합
- 완화 3: 자체 인증 시스템 보호
- 사용자 이름, 이메일 주소 또는 둘 다 필요하다
- 복잡한 비밀번호 필요
- 안전하게 암호 저장
- 멀티팩터 인증 필요
- 로그아웃 기능 구현 및 보안
- 사용자 열거 금지
- 요약
- 인증 구현
- 10장 세션 하이재킹
- 세션 작동 방식
- 서버 측 세션
- 클라이언트 측 세션
- 공격자가 세션을 가로채는 방법
- 쿠키 도난
- 세션 고정
- 취약한 세션 ID 활용
- 요약
- 세션 작동 방식
- 11장 권한
- 권한 상승
- 접근 제어
- 인증 모델 설계
- 액세스 제어 구현
- 액세스 제어 테스트
- 감사 추적 추가
- 일반적인 관리 감독 방지
- 디렉터리 접근 공격
- 파일 경로 및 상대 파일 경로
- 디렉터리 접근 공격 분석
- 완화 1: 웹 서버 신뢰
- 완화 2: 호스팅 서비스 사용
- 완화 3: 간접 파일 참조 사용
- 완화 4: 파일 참조 삭제
- 요약
- 12장 정보 누출
- 완화 1: 숨길 수 없는 서버 헤더 사용 안 함
- 완화 2: 깔끔한 URL 사용
- 완화 3 : 일반 쿠키 매개 변수 사용
- 완화 4: 클라이언트 측 오류 보고 사용 안 함
- 완화 5: 자바스크립트 파일 최소화 또는 난독화
- 완화 6: 클라이언트 측 파일 삭제
- 보안 권고 사항의 최상위에 있어야 한다
- 요약
- 13장 암호화
- 인터넷 프로토콜의 암호화
- 암호화 알고리듬, 해싱, 메시지 인증 코드
- TLS 핸드셰이크
- HTTPS 사용
- 디지털 인증서
- 디지털 인증서 획득
- 디지털 인증서 설치
- HTTP(및 HTTPS) 공격
- 무선 라우터
- Wi-Fi 핫스팟
- 인터넷 서비스 공급자
- 정부 기관
- 요약
- 인터넷 프로토콜의 암호화
- 14장 제3자 코드
- 종속성 보호
- 실행 중인 코드 파악
- 새로운 버전을 신속하게 구현할 수 있다
- 보안 문제의 경계 유지
- 업그레이드 시기 파악
- 구성 보안
- 기본 자격 증명 사용 안 함
- 디렉터리 리스팅 비활성화
- 구성 정보 보호
- 테스트 환경 강화
- 보안 관리 프런트엔드
- 사용하는 서비스 보안
- API 키 보호
- 웹훅 보호
- 타사에서 제공하는 보안 콘텐츠
- 공격 벡터로서의 서비스
- 과대 광고를 경계하라
- 악성 코드 전송 방지
- 평판이 좋은 광고 플랫폼 사용
- SafeFrame을 사용하라
- 광고 기본 설정 맞춤
- 의심스러운 광고 검토 및 보고
- 요약
- 종속성 보호
- 15장 XML 공격
- XML의 사용
- XML 유효성 검사
- 문서 유형 정의
- XML bomb 공격
- XML 외부 엔티티 공격
- 해커가 외부 엔티티를 이용하는 방법
- XML 구문 파서 보안 방법
- 파이썬
- 루비
- Node.js
- 자바
- .NET
- 기타 고려 사항
- 요약
- 16장 부속품이 되지 마라
- 이메일 사기
- 발신인 정책 프레임워크 구현
- 도메인 키 식별 메일 구현
- 이메일 보호: 실제 단계
- 이메일에서 악의적인 링크 숨기기
- 리다이렉션 열기
- 열린 리다이렉션 방지
- 기타 고려 사항
- 클릭잭킹
- 클릭잭킹 방지
- 서버 측 요청 위조
- 서버 측 위조 방지
- 봇넷
- 악성 프로그램 감염에게서 보호
- 요약
- 이메일 사기
- 17장 서비스 거부 공격
- 서비스 거부 공격 유형
- 인터넷 제어 메시지 프로토콜 공격
- 전송 제어 프로토콜 공격
- 애플리케이션 계층 공격
- 반사 및 증폭된 공격
- 분산 서비스 거부 공격
- 의도하지 않은 서비스 거부 공격
- 서비스 거부 공격 완화
- 방화벽 및 침입 방지 시스템
- 분산 서비스 거부 보호 서비스
- 규모별 건물
- 요약
- 서비스 거부 공격 유형
- 18장 마치며