Top

[개발자가 바로 사용할 수 있는]
보안 코딩 (세트)

  • 지은이로버트 C. 시코드, 조나단 지드자스키, 빌리 호프만, 브라이언 설리번, 마이크 앤드류스, 제임스 A. 휘태커
  • 옮긴이현동석, 민병호, 고현영, 윤평호, 윤근용
  • ISBN : 9788960773882
  • 118,000원
  • 2013년 01월 22일 펴냄
  • 페이퍼백 | 1,948쪽 | 188*250mm
  • 시리즈 : 해킹과 보안

책 소개

[ 세트 구성: 전4권 ]

1) 『버그 없는 안전한 소프트웨어를 위한 CERT® C 프로그래밍: The CERT® C Secure Coding Standard』
2) 『보안 전문가와 아이폰 개발자를 위한 iOS 해킹과 방어』
3) 『Ajax 보안: 웹 개발자가 꼭 알아야 할』
4) 『웹 애플리케이션 해킹 대작전: 웹 개발자가 알아야 할 웹 취약점과 방어법』


『버그 없는 안전한 소프트웨어를 위한 CERT® C 프로그래밍』

보안상 해커의 침입으로부터 안전하고, 버그 없이 신뢰도가 높은 소프트웨어를 개발할 수 있도록 컴퓨터 침해사고대응센터인 CERT가 제안하는 표준 C 프로그래밍 가이드. C언어로 개발되는 소프트웨어 취약성을 분석해 근본 원인이 되는 코딩 에러를, 심각도, 침해 발생가능성, 사후관리 비용 등에 따라 분류하고, 각 가이드라인에 해당하는 불안전한 코드의 예와 해결 방법을 함께 제시한다.

소프트웨어 보안은 조직의 운영과 자산뿐 아니라 개개인의 번영과도 중요한 관계가 있다. 안전한 소프트웨어를 만들기 위해 개발자는 어디에 위험이 도사리고 있는지 반드시 알아야 한다. C로 안전하게 프로그래밍하는 일은 숙련된 개발자들이 생각하는 것보다 더 어려울 수 있다.

이 책은 C 개발자들의 필수 참고서적으로서 이 책을 통해 ‘CERT C Secure Coding Standard’를 처음으로 공식 배포하는 것이다. 본 표준은 C에서 발생하는 소프트웨어 취약성의 근본 원인이 되는 코딩 에러를 항목별로 분류하고 심각도, 침해 발생가능성, 사후관리 비용 등에 따라 분류해두었다. 각 가이드라인에서는 불안전한 코드의 예를 들고 이를 해결하는 방법을 함께 설명한다. 모든 가이드라인을 똑같이 적용했을 경우, 버퍼 오버플로, 포맷 문자열 취약성, 정수 오버플로, 일반적인 소프트웨어 취약점 등의 치명적인 코딩 에러를 제거할 수 있다.


『보안 전문가와 아이폰 개발자를 위한 iOS 해킹과 방어』

모바일 앱 개발자, 특히 금융/쇼핑 앱, 개인정보 저장 앱, 또는 사내 전용 앱을 개발하는 개발자라면 주목하자. 여러분이 개발한 앱이 해킹에 취약할 확률은 거의 100%다! 책을 읽다 보면 자꾸만 작성한 코드를 열고 보안 허점을 수정하는 자신을 발견하게 되리라 장담한다. 애플의 보호 클래스를 사용해서 데이터를 암호화하니 안전하다고 생각하는가? 지금 바로 이 책을 읽어보자. 신혼의 단꿈이 무너지듯 현실은 냉혹하기 그지 없을 것이다. 이 책은 iOS 보안의 불완전함을 알기 쉽게 설명하고 개발자 입장에서 이를 어떻게 보완할 수 있는지 친절하게 알려준다. 모바일 보안이 이슈인 요즘, 미래를 대비하는 개발자라면 꼭 한 번 읽어보자.

이 책에서 다루는 내용
■ 실제 애플리케이션에 존재하는 취약점과 이를 미연에 방지하는 기술
■ 코드 삽입을 이용한 맬웨어 감염 기술
■ iOS 키체인과 데이터 보호의 암호화를 깨는 기술
■ 디버거와 커스텀 코드 삽입을 이용한 오브젝티브C 런타임 환경 변조 기술
■ SSL 세션 하이재킹과 트래픽 도청 방지 기술
■ 파일 완전 삭제 방법과 애플리케이션에서 포렌식 흔적을 최소화하는 기술
■ 디버깅 탐지 방법, 실행 중 클래스의 무결성을 검증하는 기술, 코드 추적을 어렵게 하는 기술


『Ajax 보안』

안전하고 견고한 Ajax 웹 애플리케이션을 제작해야 하는 웹 개발자라면 누구나 꼭 알아야 할 Ajax 관련 보안 취약점을 알기 쉽게 설명한 실용 가이드. Ajax 애플리케이션의 잠재적 보안 문제를 제시하고 해결하며, 좀 더 견고하고 안전한 코드를 작성하기 위한 지침을 알려준다. 또 프로토타입, DWR, ASP.NET AJAX 등 잘 알려진 Ajax 프레임워크에서 지원하는 보안 프레임워크와 개발자가 추가로 개발해야 하는 사항도 다룬다.

이 책에서 다루는 내용
■ 관련 기능을 세분화해 제공하는 웹 서비스에서 발생하는 문제, 애플리케이션 제어 절차 조작, 프로그램 로직 조작 등의 피해를 최소화하는 법
■ 자바스크립트 하이재킹, 영속적인 스토리지 강탈, 매시업 악용 등 Ajax 공격 방지법
■ 단 두 번의 요청으로 백엔드 DB 전체 내용을 추출할 수 있는 Ajax 기반 SQL 인젝션 변종 형태의 공격 등 XSS와 SQL 인젝션 기반 공격을 피하는 방법
■ 구글 기어와 도조(Dojo)를 이용한 보안 오프라인 Ajax 애플리케이션 개발 방법
■ 프로토타입(Prototype), DWR, ASP.NET AJAX 같은 Ajax 프레임워크에 보안 개념을 적용하고 프레임워크의 보안상 취약한 부분을 파악하고 보안 코드를 작성하는 방법
■ 새로 작성하는 Ajax 코드를 좀 더 안전하게 작성하는 방법. 기존 코드에 있는 보안 문제를 감지, 수정하는 방법


『웹 애플리케이션 해킹 대작전』

해커는 여러분의 웹 사이트, 웹 애플리케이션, 웹 서비스를 무차별적으로 공격한다. 보안 취약점이 있다면 해커가 공격하기 전에 먼저 발견하고 조치를 취해야 한다. 이 책은 여러분에게 확실하고 실질적인 보안 테스팅 가이드 역할을 해줄 것이다.

이 책에서 다루는 내용
■ 클라이언트에서의 검증 회피 공격
■ 상태 기반 공격: 숨은 필드, CGI 인자, 쿠키 조작, URL 건너뛰기, 세션 가로채기 공격
■ 사용자 입력 데이터 공격: 크로스 사이트 스크립팅, SQL 삽입, 디렉토리 노출 공격
■ 언어와 기술 기반 공격: 버퍼 오버플로우, 정규화, NULL 문자열 공격
■ 서버 공격: 저장 프로시저를 이용한 SQL 삽입, 명령 삽입, 핑거프린팅 공격
■ 암호, 프라이버시, 웹 서비스 공격

저자/역자 소개

[ 저자 소개 ]

로버트 C. 시코드
소프트웨어 엔지니어링 연구소(SEI) CERT에 있는 안전한 코딩 이니셔티브의 리더다. 보안 관련 연구 단체 중 하나인 CERT는 정기적으로 소프트웨어 취약점 보고서를 분석하고 인터넷처럼 민감하고 중요한 인프라에 미치는 위험을 평가한다. 저자는 카네기 멜론 대학의 컴퓨터 사이언스와 정보 네트워킹 기관의 조교수이며, 피츠버그 대학의 강사로 일하고 있다. 『완벽한 보안을 위한 C와 C++ 코딩(Secure Coding in C and C++)』(Addison-Wesley, 2005) 등 전부 세 권의 책을 저술했다. 소프트웨어 보안, 컴포넌트 기반 소프트웨어 엔지니어링, 웹 기반 시스템 디자인, 레거시 시스템의 현대화, 컴포넌트 저장소와 검색엔진, 사용자 인터페이스 디자인과 개발에 관련된 40여 개의 논문을 작성했다.

조나단 지드자스키
iOS 개발 커뮤니티에서 ‘너브가스(NerveGas)’라는 해커로 더 유명하다. 아이폰 해킹 분야에서의 조나단의 작업은 오픈소스 애플리케이션이 최초로 아이폰에 포팅되는 데 크게 기여했고, 그가 쓴 책인 『아이폰 오픈 애플리케이션 개발(iPhone Open Application Development)』은 애플이 SDK를 발표하기 오래 전부터 개발자들이 아이폰 애플리케이션을 개발할 수 있게 해줬다. 조나단은 『아이폰 SDK 애플리케이션 개발』(에이콘출판, 2010), 『아이폰 포렌식』 등의 책도 집필했다. 현재 전세계적으로 2,000개가 넘는 법 집행 기관을 돕고 있으며 iOS 장치에서 범죄 사건의 증거를 수집할 때 사용할 수 있는 iOS 포렌식 이미징 툴 스위트도 배포하고 있다. 조나단은 종종 법 집행 기관을 컨설팅하고 교육하며 포렌식 조사관의 수사를 돕는다.
조나단의 전업은 바이어 포렌식(Via Forensics)의 수석 포렌식 과학자며 주로 기업 고객의 iOS 애플리케이션을 대상으로 침투 테스트를 수행한다.

빌리 호프만
HP 보안 연구소의 수석 보안 연구원으로, 웹 애플리케이션의 취약점을 자동으로 발견해주는 기술에 일가견이 있다. 블랙 햇, RSA, 툴콘(Toorcon), 쉬무콘(Shmooncon), 인포섹(Infosec)과 AJAXWorld 같은 컨퍼런스의 단골 발표자이며, FBI에서 초청 강연도 했다.

브라이언 설리번
HP 소프트웨어의 애플리케이션 보안 센터 부서의 소프트웨어 개발 매니저로서 일하고 있다. HP에 오기 전, SPI 다이내믹에서 책임연구원으로서 DevInspect를 만들었다. 이 프로그램은 웹 애플리케이션의 보안 취약점을 체계적으로 점검을 하는 데 탁월한 성능을 보이고 있다. 브라이언은 산업 현장의 현안을 AJAXWorld, 블랙 햇, RSA에서 발표하고 있다.

마이크 앤드류스
소프트웨어 보안 전문가인 마이크는 Foundstone의 선임 컨설턴트로서 재직 중이며 웹 애플리케이션 보안 평가와 Ultimate Web Hacking 교육을 담당하고 있다. 관련 분야에 대한 집필과 강연자로서의 왕성한 활동을 하고 있으며 포춘 500대 기업에 드는 다양한 기업에 대한 독자적인 보안 점검을 수행했다.

제임스 A. 휘태커
플로리다 공과대학의 컴퓨터공학과 교수로서 Security Innovation의 설립자이기도 하다. 그의 소프트웨어 보안과 테스팅에 관한 방법론은 보안 의식이 있는 수백 개 기관에서 널리 사용되고 있다. 『How to Break Software』(Addison-Wesley, 2002)와 『How to Break Software Security』(Addison-Wesley, 2003, Hugh Thompson과 공저)를 집필했으며 관련 전문 잡지 등에 많은 글과 논문을 발표했다.


[ 옮긴이 소개 ]

현동석
서울대학교 컴퓨터공학부를 졸업했으며 네트워크 보안 회사에서 암호 알고리즘 가속기를 개발하고 이후 스마트폰 개발 회사를 거쳐 현재는 (주)NHN에서 검색서버와 관련된 기술을 연구하고 있다.

민병호
서울대학교 컴퓨터공학과에서 학사와 석사를 마쳤으며 정보 보안 연구가로 활동 중이다. 옮긴 책으로 에이콘출판사에서 펴낸 『TCP/IP 완벽 가이드』(2007), 『새로 보는 프로그래밍 언어』(2008), 『리눅스 방화벽』(2008), 『크라임웨어』(2009), 『해킹 초보를 위한 웹 공격과 방어』(2011), 『BackTrack 4: 공포의 해킹 툴 백트랙 4』(2011), 『BackTrack 5 Wireless Penetration Testing 한국어판』(2011)이 있다.

고현영
PKI(Public Key Infrastructure) 시스템 구축, 개발, 유지보수를 했다. NMS(Network Management System) 개발에도 참여했다. 광운대학교 전자통신공학과와 동대학원을 졸업했으며, 주요 관심분야는 보안과 네트워크 프로그래밍이다.

윤평호
보안제품의 초기 기획과 설계를 시작으로 제품 상용화 및 유지보수를 포함한 소프트웨어 개발의 전체 프로세스를 진행했다. 현재 드림시큐리티에서 PKI 시스템 개발과 컨설팅을 하고 있다. 보안과 표준 기술에 관심이 많고 늘 새로운 것에 도전하기를 좋아하는 개발자로, 광운대 수학과를 졸업했다.

윤근용
바이러스 보안업체를 거쳐 현재는 시스템 프로그래머로서 각종 보안 관련 소프트웨어를 개발하고 있다.

목차

목차
  • 『버그 없는 안전한 소프트웨어를 위한 CERT® C 프로그래밍』
  • | 1장 | 표준 사용법
    • 시스템 품질
    • 자동 생성 코드
    • 표준 준수
  • | 2장 | 전처리기(PRE)
    • PRE00-C. 함수형의 매크로보다는 인라인이나 정적 함수를 사용하라
    • PRE01-C. 매크로에서는 매개변수에 괄호를 사용하라
    • PRE02-C. 매크로로 치환될 영역은 반드시 괄호로 둘러싸야 한다
    • PRE03-C. 타입 인코딩 시 매크로 정의 대신 타입 정의를 사용하라
    • PRE04-C. 표준 헤더 파일 이름을 재사용하지 마라
    • PRE05-C. 토큰들을 연결하거나 문자열 변환을 할 때 매크로 치환을 고려하라
    • PRE06-C. 헤더 파일에 항상 인클루전 가드를 둬라
    • PRE07-C. 연속되는 물음표를 사용하지 마라
    • PRE08-C. 중복된 헤더 파일 이름이 없는지가 보장돼야 한다
    • PRE09-C. 안전한 함수를 덜 안전한 함수로 바꾸지 마라
    • PRE10-C. 복수 구문 매크로를 do-while 루프로 감싸라
    • PRE30-C. 유니버설 문자열 이름을 여러 문자열을 붙여서 만들지 마라
    • PRE31-C. 절대로 불안전한 매크로를 할당, 증가, 감소, 메모리 변수 접근, 함수 호출과 함께 사용하지 마라
  • | 3장 | 선언과 초기화(DCL)
    • DCL00-C. 변하지 않는 객체는 const로 보장해둬라
    • DCL01-C. 내부 스코프에서 변수 이름을 재사용하지 마라
    • DCL02-C. 시각적으로 구별되는 식별자를 사용하라
    • DCL03-C. 상수 수식의 값을 테스트할 때 정적 어썰션을 사용하라
    • DCL04-C. 한 번에 여러 변수를 선언하지 마라
    • DCL05-C. 코드의 가독성을 높이기 위해 타입 정의를 사용하라
    • DCL06-C. 프로그램 로직상의 고정적인 값을 나타낼 때는 의미 있는 심볼릭 상수를 사용하라
    • DCL07-C. 함수 선언 시 적절한 타입 정보를 포함시켜라
    • DCL08-C. 상수 정의에서는 상수 간의 관계가 적절하게 나타나도록 정의하라
    • DCL09-C. errno 에러 코드를 반환하는 함수의 반환 타입을 errno_t로 정의하라
    • DCL10-C. 가변 인자를 가진 함수에서는 함수 작성자와 함수 사용자 간의 약속이 지켜져야 한다
    • DCL11-C. 가변 인자 함수와 연관된 타입 문제를 파악하고 있어야 한다
    • DCL12-C. 불투명한 타입을 사용해 추상 데이터 타입을 구현하라
    • DCL13-C. 함수에 의해 바뀌지 않을 값에 대한 포인터를 함수의 매개변수로 사용할 때는 const로 정의하라
    • DCL14-C. 여러 컴파일 단위를 거치는 전역 변수 초기화의 순서에 대해서는 어떤 가정도 하지 마라
    • DCL15-C. 현재 범위를 넘어서까지 사용되지 않을 객체는 static으로 선언하라
    • DCL30-C. 객체를 선언할 때 적절한 지속공간을 지정하라
    • DCL31-C. 식별자를 사용하기 전에 먼저 선언하라
    • DCL32-C. 서로에게 보이는 식별자가 유일한지를 보장하라
    • DCL33-C. 함수 인자에서 restrict로 지정된 소스 포인터와 목적 포인터가 동일한 객체를 참조하지 않게 하라
    • DCL34-C. 캐시될 수 없는 데이터에는 volatile을 사용하라
    • DCL35-C. 함수 정의와 맞지 않는 타입으로 함수를 변환하지 마라
    • DCL36-C. 링크 분류에서 충돌되는 식별자를 선언하지 마라
  • | 4장 | 표현식(EXP)
    • EXP00-C. 연산자 우선순위를 나타내는 데 괄호를 사용하라
    • EXP01-C. 포인터로 가리키는 타입의 크기를 결정하기 위해 포인터의 크기를 사용하지 마라
    • EXP02-C. 논리 연산자 AND와 OR의 단축 평가 방식을 알고 있어라
    • EXP03-C. 구조체의 크기가 구조체 멤버들 크기의 합이라고 가정하지 마라
    • EXP04-C. 구조체끼리 바이트 단위로 비교하지 마라
    • EXP05-C. const를 캐스트로 없애지 마라
    • EXP06-C. sizeof의 피연산자가 다른 부수 효과를 가지면 안 된다
    • EXP07-C. 표현식의 상수에 특정 값을 가정함으로써 상수를 사용해 얻는 이득을 없애지 마라
    • EXP08-C. 포인터 연산이 정확하게 수행되고 있는지 보장하라
    • EXP09-C. 타입이나 변수의 크기를 결정할 때는 sizeof를 사용하라
    • EXP10-C. 하위 표현식의 평가 순서나 부수 효과가 발생할 수 있는 영역의 순서에 의존하지 마라
    • EXP11-C. 호환되지 않는 타입들에는 연산자를 적용하지 마라
    • EXP12-C. 함수에 의해 반환되는 값을 무시하지 마라
    • EXP30-C. 시퀀스 포인트들 간의 평가 순서에 의존하지 마라
    • EXP31-C. 어썰션의 부수 효과를 피하라
    • EXP32-C. volatile 지정자를 캐스팅하여 없애지 마라
    • EXP33-C. 초기화되지 않은 메모리를 참조하지 마라
    • EXP34-C. 널포인터가 역참조되지 않음을 보장하라
    • EXP35-C. 함수의 반환 값을 인접한 다음 시퀀스 포인트에서 접근하거나 수정하지 마라
    • EXP36-C. 포인터를 더 엄격하게 할당된 포인터 타입으로 변환하지 마라
    • EXP37-C. API에 의해 의도된 인자들로 함수를 호출하라
    • EXP38-C. 유효하지 않은 타입이나 비트 필드 멤버들에 대해 offsetof(`)를 호출하지 마라
  • | 5장 | 정수(INT)
    • INT00-C. 구현 시 사용되는 데이터 모델을 이해하고 있어라
    • INT01-C. 객체의 크기를 나타내는 정수 값은 rsizet나 sizet를 사용하라
    • INT02-C. 정수 변환 규칙을 이해하라
    • INT03-C. 안전한 정수 라이브러리를 사용하라
    • INT04-C. 불분명한 소스에서 얻어지는 정수 값은 제한을 강제하라
    • INT05-C. 모든 가능한 입력을 처리할 수 없다면 문자 데이터 변환을 위해 입력 함수를 사용하지 마라
    • INT06-C. 문자열 토큰을 정수로 변환할 때는 strtol(`)이나 관련 함수를 사용하라
    • INT07-C. 숫자 값에는 명시적으로 signed나 unsigned 값을 사용하라
    • INT08-C. 모든 정수가 지정한 범위 내에 있음을 확인하라
    • INT09-C. 열거형 상수가 유일한 값으로 매핑되도록 보장하라
    • INT10-C. % 연산자를 쓸 때 나머지가 양수라고 가정하지 마라
    • INT11-C. 정수를 포인터로 혹은 그 반대로 변환할 때 주의하라
    • INT12-C. 표현식에서 signed, unsigned 표시가 없는 int 비트 필드의 타입을 가정하지 마라
    • INT13-C. 비트 연산자는 unsigned 피연산자에만 사용하라
    • INT14-C. 동일한 데이터에 비트 연산자와 산술 연산자를 수행하지 마라
    • INT15-C. 프로그래머 정의 정수 타입의 포맷 지정 I/O에 대해 intmaxt나 uintmaxt를 사용하라
    • INT30-C. unsigned 정수 연산이 래핑되지 않도록 주의하라
    • INT31-C. 정수 변환으로 데이터가 손실되거나 잘못 처리되지 않도록 주의하라
    • INT32-C. signed 정수의 연산이 오버플로되지 않도록 보장하라
    • INT33-C. 나눗셈이나 모듈로 연산에서 0으로 나누는 에러가 발생하지 않게 하라
    • INT34-C. 음수나 피연산자의 비트보다 더 많은 비트를 시프트하지 마라
    • INT35-C. 정수 표현식으로 비교하거나 할당할 때 더 큰 타입으로 표현식을 평가하라
  • | 6장 | 부동소수점(FLP)
    • FLP00-C. 부동소수점 수의 제한을 이해하라
    • FLP01-C. 부동소수점 표현식을 재배치할 때 주의하라
    • FLP02-C. 정확한 계산이 필요할 때는 부동소수점 수를 배제할 수 있는지 고려하라
    • FLP03-C. 부동소수점 에러를 발견하고 처리하라
    • FLP30-C. 부동소수점 변수를 루프 카운터로 사용하지 마라
    • FLP31-C. 함수에 복소수를 사용하면서 실제 값을 얻을 거라 기대하지 마라
    • FLP32-C. 수학 함수에서 도메인 에러나 영역 에러를 찾고 예방하라
    • FLP33-C. 부동소수점 연산용 정수는 먼저 부동소수점으로 바꿔라
    • FLP34-C. 부동소수점 변환이 새로운 타입의 범위 안에 들어가는지 확인하라
  • | 7장 | 배열(ARR)
    • ARR00-C. 배열이 어떻게 동작하는지 이해하라
    • ARR01-C. 배열의 크기를 얻을 때 포인터를 sizeof의 피연산자로 사용하지 마라
    • ARR02-C. 암시적으로 초기화된 경우라도 배열의 경계를 명시적으로 지정하라
    • ARR30-C. 배열의 인덱스가 유효한 범위 안에 있음을 보장하라
    • ARR31-C. 모든 소스 파일에서 일관된 배열 표기를 사용하라
    • ARR32-C. 가변 배열에서 크기를 나타내는 인자가 유효한 범위에 있음을 보장하라
    • ARR33-C. 충분한 크기의 공간에서 복사가 진행됨을 보장하라
    • ARR34-C. 표현식에서 배열 타입이 호환 가능함을 보장하라
    • ARR35-C. 루프에서 반복자가 배열의 끝을 넘어 접근하지 않게 하라
    • ARR36-C. 같은 배열을 참조하고 있지 않다면 두 개의 포인터를 빼거나 비교하지 마라
    • ARR37-C. 배열이 아닌 객체에 대한 포인터에 정수를 더하거나 빼지 마라
    • ARR38-C. 반환 값이 유효한 배열 원소를 참조하고 있지 않은 경우 포인터에 정수를 더하거나 빼지 마라
  • | 8장 | 문자와 문자열(STR)
    • STR00-C. 적절한 타입으로 문자를 표현하라
    • STR01-C. 문자열 관리를 위해 일관된 계획을 사용해 일관되게 구현하라
    • STR02-C. 복잡한 하위 시스템으로 전달되는 데이터를 검열하라
    • STR03-C. 널문자로 종료된 문자열이 부적절하게 잘리지 않게 하라
    • STR04-C. 기본 문자 집합에서는 문자들을 위해 char를 사용하라
    • STR05-C. 문자열 상수를 가리키는 포인터는 const로 선언하라
    • STR06-C. strtok(`)에서 파싱되는 문자열이 보존된다고 가정하지 마라
    • STR07-C. 문자열을 처리하는 코드를 수정할 때는 TR 24731을 사용하라
    • STR08-C. 문자열을 처리하는 새로운 코드를 개발할 때 관리 문자열을 사용하라
    • STR30-C. 문자열 리터럴을 수정하려고 하지 마라
    • STR31-C. 문자열을 위한 공간이 문자 데이터와 널 종료문자를 담기에 충분함을 보장하라
    • STR32-C. 요구되는 대로 문자열을 널문자로 종료하라
    • STR33-C. 와이드 문자 스트링의 크기를 정확히 하라
    • STR34-C. 문자들을 더 큰 타입인 정수로 변환하기 전에 unsigned 타입으로 캐스팅하라
    • STR35-C. 경계가 불분명한 소스로부터 고정된 길이의 배열에 데이터를 복사하지 마라
    • STR36-C. 문자열 리터럴로 초기화된 문자 배열의 경계를 지정하지 마라
    • STR37-C. 문자를 처리하는 함수로 전달되는 인자는 반드시 unsigned char로 표현 가능해야 한다
  • | 9장 | 메모리 관리(MEM)
    • MEM00-C. 동일한 추상화 레벨의 같은 모듈 안에서 메모리를 할당하고 해제하라
    • MEM01-C. free(`) 후 즉시 포인터에 새로운 값을 저장하라
    • MEM02-C. 메모리 할당 함수의 반환 값을 즉시 할당된 타입의 포인터로 변환시켜라
    • MEM03-C. 재사용을 위해 반환된 재사용 가능한 리소스에 있는 중요한 정보를 클리어하라
    • MEM04-C. 크기가 0인 할당을 수행하지 마라
    • MEM05-C. 큰 스택 할당을 피하라
    • MEM06-C. 중요한 데이터가 디스크에 기록되지 않도록 보장하라
    • MEM07-C. calloc(`)의 인자가 곱해지는 경우 size_t로 표현될 수 있게 하라
    • MEM08-C. 동적으로 할당된 배열을 리사이즈하는 경우에만 realloc(`)을 사용하라
    • MEM09-C. 메모리 할당 루틴이 메모리를 초기화해줄 것이라 가정하지 마라
    • MEM10-C. 포인터 검증 함수를 사용하라
    • MEM30-C. 해제된 메모리에 접근하지 마라
    • MEM31-C. 동적으로 할당된 메모리는 한 번만 해제하라
    • MEM32-C. 메모리 할당 에러를 찾아 해결하라
    • MEM33-C. 유연한 배열 원소에 정확한 문법을 사용하라
    • MEM34-C. 동적으로 할당된 메모리만 해제하라
    • MEM35-C. 객체에 충분한 메모리를 할당하라
  • | 10장 | 입력과 출력(FIO)
    • FIO00-C. 포맷 문자열을 사용할 때 주의하라
    • FIO01-C. 파일 이름이나 식별자를 사용하는 함수를 쓸 때 주의하라
    • FIO02-C. 신뢰할 수 없는 소스로부터 얻은 경로 이름을 정형화해 사용하라
    • FIO03-C. fopen(`)이나 파일 생성에 대해 특정 조건을 가정하지 마라
    • FIO04-C. 입출력 에러를 찾아 해결하라
    • FIO05-C. 여러 파일 속성을 통해 파일을 식별하라
    • FIO06-C. 적절한 접근 권한으로 파일을 생성하라
    • FIO07-C. rewind(`)보다 fseek(`)을 사용하라
    • FIO08-C. 열린 파일에 대해 remove(`)를 호출할 때 주의하라
    • FIO09-C. 시스템 간에 바이너리 데이터를 전송할 때는 주의하라
    • FIO10-C. rename(`) 함수를 사용할 때는 주의하라
    • FIO11-C fopen(`)의 모드 매개변수를 지정할 때 주의하라
    • FIO12-C. setbuf(`)보다 setvbuf(`)를 사용하라
    • FIO13-C. 방금 읽은 한 개의 문자 외의 것을 다시 넣지 마라
    • FIO14-C. 파일 스트림에서 텍스트 모드와 바이너리 모드의 차이를 이해하라
    • FIO15-C. 파일 연산이 안전한 디렉토리에서 수행되고 있음을 보장하라
    • FIO16-C. jail을 만들어 파일 접근을 제한하라
    • FIO30-C. 포맷 문자열에서 사용자 입력을 배제하라
    • FIO31-C. 동시에 같은 파일을 여러 번 열지 마라
    • FIO32-C. 파일에만 적용 가능한 연산을 장치에 대해 수행하지 마라
    • FIO33-C. 정의되지 않은 동작을 초래하는 입출력 에러를 발견하고 처리하라
    • FIO34-C. 문자 I/O 함수의 반환 값을 캡처할 때는 int를 사용하라
    • FIO35-C. sizeof(int) == sizeof(char)일 때는 EOF나 파일 에러를 찾기 위해 feof(`)와 ferror(`)를 사용하라
    • FIO36-C. fgets(`)를 사용할 때 개행문자가 읽힌다고 가정하지 마라
    • FIO37-C. 문자 데이터를 읽었다고 가정하지 마라
    • FIO38-C. 입출력 FILE 객체를 복사해 사용하지 마라
    • FIO39-C. 플러시나 위치 조정 함수 호출 없이 스트림으로부터 입출력을 교대로 수행하지 마라
    • FIO40-C. fgets(`) 실패 시 문자열을 리셋하라
    • FIO41-C. 부수 효과가 있는 스트림 인자로 getc(`)나 putc(`)를 호출하지 마라
    • FIO42-C. 더 이상 필요 없어진 파일이 적절히 닫혔는지 확인하라
    • FIO43-C. 공유 디렉토리에 임시 파일을 생성하지 마라
    • FIO44-C. fsetpos(`)에는 fgetpos(`)에서 반환된 값만 사용하라
  • | 11장 | 환경(ENV)
    • ENV00-C. getenv(`)에서 반환한 문자열을 가리키는 포인터를 저장하지 마라
    • ENV01-C. 환경변수의 크기를 함부로 가정하지 마라
    • ENV02-C. 이름이 같은 여러 개의 환경변수가 존재할 수 있음을 알아두자
    • ENV03-C. 외부 프로그램을 호출할 때는 환경변수를 정리하라
    • ENV04-C. 커맨드 프로세서가 필요하지 않다면 system(`)을 호출하지 마라
    • ENV30-C. getenv(`)가 반환한 문자열을 수정하지 마라
    • ENV31-C. 환경변수의 값을 무효화할 수 있는 연산을 수행했다면 더 이상 그 값에 의존하지 마라
    • ENV32-C. atexit 핸들러는 반환 외의 방법으로 종료돼선 안 된다
  • | 12장 | 시그널(SIG)
    • SIG00-C. 인터럽트될 수 없는 시그널 핸들러로 처리되는 시그널을 마스크하라
    • SIG01-C. 구현마다 다른 시그널 핸들러의 지속성에 대한 세부사항을 이해하라
    • SIG02-C. 일반적인 기능을 구현하는 경우에는 시그널의 사용을 피하라
    • SIG30-C. 시그널 핸들러에서는 비동기적으로 안전한 함수만 호출하라
    • SIG31-C. 시그널 핸들러에서 공유 객체에 접근하거나 수정하지 마라
    • SIG32-C. 시그널 핸들러 안에서 longjmp(`)를 호출하지 마라
    • SIG33-C. raise(`) 함수를 재귀적으로 호출하지 마라
    • SIG34-C. 인터럽트 가능한 시그널 핸들러 안에서 signal(`)을 호출하지 마라
  • | 13장 | 에러 처리(ERR)
    • ERR00-C. 일관되고 이해할 수 있는 에러 처리 정책을 적용하고 구현하라
    • ERR01-C. FILE 스트림 에러 체크 시 errno보다 ferror(`)를 사용하라
    • ERR02-C. in-band 에러 표시자를 피하라
    • ERR03-C. TR 24731-1에 정의된 함수를 호출할 때는 런타임 지정 핸들러를 사용하라
    • ERR04-C. 적절한 종료 방법을 선택하라
    • ERR05-C. 애플리케이션 독립적인 코드는 별도의 에러 처리 설명이 없는 에러 감지 코드를 제공해야 한다
    • ERR06-C. assert(`)와 abort(`)의 종료 시 동작을 이해하라
    • ERR30-C. errno를 사용하는 라이브러리 함수를 호출하기 전에 errno 값을 0으로 설정하고, 함수가 에러를 의미하는 값을 반환했을 때는 errno 값을 체크하라
    • ERR31-C. errno를 재정의하지 마라
    • ERR32-C. 애매한 errno 값에 의존하지 마라
  • | 14장 | 기타(MSC)
    • MSC00-C. 컴파일 시 높은 경고 메시지 옵션을 줘라
    • MSC01-C. 논리적으로 완전해지도록 노력하라
    • MSC02-C. 실수로 누락하지 않도록 하라
    • MSC03-C. 실수로 추가하지 않도록 하라
    • MSC04-C. 주석은 일관되고 가독성 있게 사용하라
    • MSC05-C. time_t 타입 값을 직접 조작하지 마라
    • MSC06-C. 중요한 데이터를 다룰 때는 컴파일러 최적화를 고려하라
    • MSC07-C. 죽은 코드를 찾아 제거하라
    • MSC08-C. 라이브러리 함수는 자신의 매개변수를 검증해야 한다
    • MSC09-C. 문자 인코딩: 안전을 위해 ASCII의 부분집합을 사용하라
    • MSC10-C. 문자 인코딩: UTF-8 관련 이슈
    • MSC11-C. 어썰션을 사용한 부적절한 진단 테스트
    • MSC12-C. 아무 효과도 없는 코드를 찾아 제거하라
    • MSC13-C. 사용되지 않는 값을 찾아 제거하라
    • MSC14-C. 불필요하게 플랫폼 의존성을 끌어들이지 마라
    • MSC15-C. 정의되지 않은 동작에 의존하지 마라
    • MSC30-C. 의사난수를 만들기 위해 rand(`) 함수를 사용하지 마라
    • MSC31-C. 반환 값이 적절한 타입으로 비교되는지 보장하라
  • | 부록 | POSIX(POS)
    • POS00-C. 멀티스레드의 경쟁 상태를 피하라
    • POS01-C. 링크의 유무를 확인하라
    • POS02-C. 가장 적은 권한의 원리를 따르라
    • POS30-C. readlink(`) 함수를 알맞게 사용하라
    • POS31-C. 다른 스레드 뮤텍스를 잠금해제하거나 없애지 마라
    • POS32-C. 멀티스레드 환경에서 비트 필드를 사용할 때는 뮤텍스를 도입하라
    • POS33-C. vfork(`)를 사용하지 마라
    • POS34-C. putenv(`)에 자동 변수에 대한 포인터를 인자로 전달하지 마라
    • POS35-C. 심볼릭 링크를 체크할 때 교착 상태를 피하라
    • POS36-C. 권한을 취소할 때 해제 순서가 올바른지 확인하라
    • POS37-C. 권한 취소가 성공적으로 수행됐는지 보장하라

  • 『보안 전문가와 아이폰 개발자를 위한 iOS 해킹과 방어』
  • 1장 여러분이 제대로 알고 있는 사실은 아무것도 없다
    • 모노컬처의 신화
    • iOS 보안 모델
      • iOS 보안 모델의 구성요소
    • 자물쇠와 열쇠 함께 저장하기
    • 사용자 암호 = 취약한 보안
    • 데이터 포렌식으로 암호화 깨부수기
      • 외부 데이터 역시 위험한 건 마찬가지
    • 트래픽 하이재킹
      • 데이터 도난은 순식간
    • 아무것도 믿지 말자, 직접 작성한 애플리케이션조차도
    • 물리적 보안은 선택사항이다
    • 요약
  • 1부 해킹
  • 2장 iOS 해킹 기초
    • 탈옥 방법을 배워야 하는 이유
    • 탈옥의 모든 것
      • 개발자 툴
    • 최종 사용자용 탈옥
      • 아이폰 해킹
      • DFU 모드
      • 테더드(Tethered) 대 언테더드(Untethered)
    • 장치 해킹과 코드 삽입
      • 커스텀 코드 제작
      • 바이너리 분석
      • 바이너리 시험해보기
      • 코드 데몬화
      • 타르 파일을 이용한 악성 코드 설치
      • 램 디스크를 이용한 악성 코드 설치
    • 연습문제
    • 요약
  • 3장 파일시스템 훔치기
    • 디스크 전체 암호화
      • 솔리드 스테이트 낸드(Solid State Nand)
      • 디스크 암호화
      • iOS 디스크 암호화의 실패 원인
    • 라이브 파일시스템 복사
      • 데이터 훔치기 페이로드
      • 커스텀 launchd 제작
      • 램 디스크 준비
      • 파일시스템 이미지 획득
    • 로우 파일시스템 복사
      • 로우 이미지 훔치기 페이로드
      • 커스텀 launchd 제작
      • 램 디스크 준비
      • 파일시스템 이미지 획득
    • 연습문제
    • 사회 공학 활용
      • 비활성화된 장치 이용
      • 초기화된 장치 이용
      • 맬웨어가 설치된 장치 이용
      • 암호 공학 애플리케이션 이용
    • 요약
  • 4장 포렌식 흔적과 데이터 유출
    • 이미지의 위치 태그 추출
      • 통합 GPS 캐시
    • SQLite 데이터베이스
      • 데이터베이스 연결
      • SQLite 내장 명령어
      • SQL 질의 수행
      • 중요한 데이터베이스 파일 목록
      • 주소록 연락처
      • 주소록 이미지
      • 구글 지도 데이터
      • 캘린더 이벤트
      • 통화 기록
      • 이메일 데이터베이스
      • 메모
      • 사진 메타데이타
      • SMS 메시지
      • 사파리 북마크
      • SMS 스포트라이트 캐시
      • 사파리 웹 캐시
      • 웹 애플리케이션 캐시
      • 웹킷 저장소
      • 음성 사서함
    • 데이터베이스 필드의 파편 리버스 엔지니어링
    • SMS 임시 저장 메시지
    • 프로퍼티 리스트
      • 중요한 프로퍼티 리스트 파일
    • 그 밖의 중요한 파일
    • 요약
  • 5장 암호화 깨부수기
    • 소게티의 데이터 보호 툴
      • 데이터 보호 툴 설치
      • 브루트포스 공격 툴 제작
      • 필수 파이썬 라이브러리 빌드
    • 암호화 키 추출
      • 키 추출 페이로드
      • 커스텀 launchd 제작
      • 램 디스크 준비
      • 커널 준비
      • 브루트포스 실행
    • 키체인 복호화
    • 로우 디스크 복호화
    • 아이튠스 백업 복호화
    • 스파이웨어를 이용한 암호화 깨부수기
      • 스파이웨어 페이로드
      • spyd 데몬화
      • 커스텀 launchd 제작
      • 램 디스크 준비
      • 페이로드 실행
    • 연습문제
    • 요약
  • 6장 삭제된 파일 복구
    • HFS 저널 수집
    • 빈 공간 카빙
    • 복구 가능한 주요 데이터
      • 애플리케이션 스크린샷
      • 삭제된 프로퍼티 리스트
      • 삭제된 음성 사서함 메시지와 음성 메모
      • 삭제된 키보드 캐시
      • 사진과 기타 개인 정보
    • 요약
  • 7장 런타임 조작
    • 바이너리 분석
      • 마크오 형식
      • class-dump-z 사용
      • 심볼 테이블
    • 암호화된 바이너리
      • 오프셋 계산
      • 메모리 덤프
      • 복호화된 코드를 파일로 다시 복사
      • cryptid 재설정
    • 쓰크립트로 런타임 조작
      • 쓰크립트 설치
      • 쓰크립트 사용
      • 간단한 잠금 기능 무력화
      • 메소드 바꿔치기
      • 데이터 자세히 살펴보기
      • 데이터 기록
      • 훨씬 심각한 사례
    • 연습문제
      • 스프링보드 애니메이션
      • 일종의 전화 도청
      • 스크린샷 생성
    • 요약
  • 8장 런타임 라이브러리를 사용한 공격
    • 오브젝티브C 완전 해부
      • 인스턴스 변수
      • 메소드
      • 메소드 캐시
    • 디스어셈블링과 디버깅
      • 메시지 엿듣기
      • 기본적인 오브젝티브C 프레임워크
      • 오브젝티브C와 인터페이스로 연결
    • 악성 코드 삽입
      • 코드삽입 페이로드
      • 디버거로 코드 삽입
    • 동적 링커를 사용한 삽입
      • 영구적인 장치 감염
    • 요약
  • 9장 트래픽 하이재킹하기
    • APN 하이재킹
      • 페이로드 설치
      • 제거
    • 간단한 프록시 설정
    • SSL 공격
      • SSLStrip
      • 파로스 프록시
      • 브라우저 경고
    • 애플리케이션 수준의 SSL 검증 공격
      • SSL 공격 페이로드
    • 파운데이션 HTTP 클래스 하이재킹
      • 포스트 공격 페이로드
    • 데이터 분석
    • 드리프트넷
      • 빌드
      • 실행
    • 연습문제
    • 요약
  • 2부 방어
  • 10장 암호화 구현
    • 암호 강도
      • 무작위 암호 생성기를 조심하자
    • 커먼 크립토 라이브러리
      • 무상태형 연산
      • 상태유지형 암호화
    • 마스터 키 암호화
    • 위치 기반 암호화
      • 암호를 결합한 위치 기반 암호화
    • 별도의 서버 측 키
    • 메모리 보호
      • 메모리 완전 삭제
    • 공개 키 암호화
    • 연습문제
  • 11장 포렌식 대비책
    • 보안 완전 삭제
      • DOD 5220.22-M 완전 삭제
      • 오브젝티브C
    • SQLite 레코드 완전 삭제
    • 키보드 캐시
    • 숫자 입력 패드 무작위화
    • 애플리케이션 스크린샷
  • 12장 런타임 보호
    • 변조 대응
      • 사용자 데이터 완전 삭제
      • 네트워크 접속 비활성화
      • 서버 보고
      • 로깅 활성화
      • 미끼와 킬 스위치
    • 프로세스 추적 검사
    • 디버거 차단
    • 런타임 클래스 무결성 검사
      • 주소 공간 검증
    • 인라인 함수
    • 디스어셈블링 복잡도 높이기
      • 최적화 플래그
      • 스트립
      • 뺑뺑이를 돌리자! -funroll-loops
    • 연습문제
  • 13장 탈옥 탐지
    • 샌드박스 무결성 검사
    • 파일시스템 검사
      • 탈옥 파일 존재 여부
      • /etc/fstab의 크기
      • 심볼릭 링크 검사
    • 페이지 실행 검사
  • 14장 다음 단계
    • 공격자의 입장에서 생각해보자
    • 책에서 다루지 않은 리버스 엔지니어링 툴
    • 보안 vs 코드 관리
    • 보안을 대하는 유연한 자세
    • 그 밖의 훌륭한 책

  • 『Ajax 보안』
  • 1장 Ajax 보안 소개
    • Ajax 첫걸음
      • Ajax란 무엇인가?
      • 비동기 방식
      • 자바스크립트
      • XML
      • DHTML(다이내믹 HTML)
    • Ajax 아키텍처로의 패러다임 전환
      • 무거운 클라이언트 아키텍처
      • 가벼운 클라이언트 아키텍처
      • Ajax: 아키텍처계의 금발 미녀
      • 보안 관점에서 본 무거운 클라이언트 애플리케이션
      • 보안 관점에서 본 가벼운 클라이언트 애플리케이션
      • 보안 관점에서 본 Ajax 애플리케이션
    • 보안 취약점의 재앙
      • 복잡도, 투명성 그리고 규모의 확장
      • 사회학적인 이슈
      • Ajax 애플리케이션: 매력적인 전략 목표
    • 결론
  • 2장 보이지 않는 도둑
    • 이브
    • HighTechVacations.net 해킹
      • 쿠폰 시스템 해킹
      • 클라이언트단 데이터 바인딩 공격
      • Ajax API 공격
    • 보이지 않는 도둑
  • 3장 웹 공격
    • 공격의 종류
      • 리소스 열거
      • 파라미터 조작
    • 그 밖의 공격 방법
      • 크로스 사이트 요청 변조
      • 피싱
      • 서비스 거부 공격
    • 리소스 열거와 파라미터 조작으로부터 보호하라
      • 보안 소켓 계층
    • 결론
  • 4장 Ajax 공격 영역
    • 공격 영역의 이해
    • 전통적인 웹 애플리케이션 공격 영역
      • 폼 입력
      • 쿠키
      • 헤더
      • 숨겨진 폼 입력
      • 쿼리 파라미터
      • 업로드 파일
    • 전통적인 웹 애플리케이션 공격: 성적표
    • 웹 서비스 공격 영역
      • 웹 서비스 메소드
      • 웹 서비스 정의
    • Ajax 애플리케이션 공격 영역
      • Ajax 애플리케이션 공격 영역의 근원
      • 해커에게 최고의 먹잇감
    • 적절한 입력 확인
      • 블랙리스트와 특별 조치의 문제
      • 병 대신 병의 징후 다루기
      • 화이트리스트 입력 검증
      • 정규 표현
      • 입력 검증에 대한 숙고
    • 리치 사용자 입력 검증
      • 마크업 언어 검증
      • 이진 파일 검증
      • 자바스크립트 소스코드 검증
      • 시리얼라이즈 데이터 검증
    • 사용자 지원 콘텐츠의 신화
    • 결론
  • 5장 Ajax 코드 복잡도
    • 다양한 언어와 구조
      • 배열 인덱싱
      • 스트링 연산
      • 코드 주석
      • 다른 사람의 문제
    • 자바스크립트와 관련하여
      • 인터프리트, 컴파일이 아니야
      • 약한 타입 체크
    • 비동기
      • 경쟁 상태
      • 데드락과 철학자의 식사 문제
      • 클라이언트단 동기화
    • 누구의 조언을 듣느냐가 중요하다
    • 결론
  • 6장 Ajax 애플리케이션의 투명성
    • 블랙박스와 화이트박스
      • 예: MyLocalWeatherForecast.com
      • 예: MyLocalWeatherForecast.com을 ‘Ajax’로
      • 비교
    • API로서의 웹 애플리케이션
      • 데이터 타입과 메소드 시그너처
    • 보안과 관련한 특정 오판
      • 부당한 인증
      • 기능이 나뉜 서버 API
      • 자바스크립트에서의 세션 상태 저장
      • 민감한 정보가 사용자에게 노출될 때
      • 클라이언트단 코드에 있는 주석과 문서화
      • 클라이언트단에서 수행하는 데이터 변환
    • 모호함을 통한 보안
      • 난독화
    • 결론
  • 7장 Ajax 애플리케이션 하이재킹
    • Ajax 프레임워크의 하이재킹
      • 실수로 인한 함수 덮어쓰기
      • 함수 덮어쓰기의 예
    • 주문형 Ajax의 하이재킹
    • JSON API의 하이재킹
      • 객체 리터럴의 하이재킹
      • JSON 하이재킹이 가능한 이유
      • JSON 하이재킹을 막자
    • 결론
  • 8장 클라이언트단 스토리지 공격
    • 클라이언트단 스토리지 시스템 개관
      • 일반적인 클라이언트단 스토리지 보안
    • HTTP 쿠키
      • 쿠키 접근 제어 규칙
      • HTTP 쿠키의 저장용량
      • 쿠키의 생존시간
      • 쿠키 스토리지에 대한 추가 기억사항
      • 쿠키 스토리지 요약
    • 플래시 로컬 공유 객체
      • 플래시 로컬 공유 객체 요약
    • DOM 스토리지
      • 세션 스토리지
      • 글로벌 스토리지
      • DOM 스토리지의 구멍
      • DOM 스토리지 보안
      • DOM 스토리지 요약
    • 인터넷 익스플로러 userData
      • 보안 요약
    • 일반적인 클라이언트단 스토리지 공격법과 대처법
      • 크로스 도메인 공격
      • 크로스 디렉토리 공격
      • 크로스 포트 공격
    • 결론
  • 9장 오프라인 Ajax 애플리케이션
    • 오프라인 Ajax 애플리케이션
    • 구글 기어
      • 자체 보안 기능과 구글 기어의 단점
      • 작업풀의 이용
      • LocalServer 데이터의 노출과 감염
      • 구글 기어 데이터베이스로의 직접 접근
      • SQL 인젝션과 구글 기어
      • 클라이언트단 SQL 인젝션도 위험한가?
    • Dojo.Offline
      • 키를 안전하게 보호하자
      • 데이터를 안전하게 보호하자
      • 패스워드의 선택이 멋진 키를 좌우한다
    • 클라이언트단 입력을 검증하자
    • 오프라인 애플리케이션에 대한 그 밖의 접근법
    • 결론
  • 10장 요청 출처 이슈
    • 로봇, 스파이더, 브라우저, 크롤러
      • 안녕, 내 이름은 파이어폭스야. 청크화된 인코딩, PDF도
      • 좋아하고 해변에서 오랫동안 산책하는 것도 좋아해
    • 요청 출처 불확정성과 자바스크립트
      • 웹 서버 관점에서 본 Ajax 요청
      • 당신일까, 당신을 가장한 누구일까
      • 자바스크립트로 HTTP 요청 보내기
      • pre-Ajax 세계에서의 자바스크립트 HTTP 공격
      • XMLHttpRequest로 콘텐츠 사냥하기
      • XSS/XHR 조합 공격
    • 방어
    • 결론
  • 11장 웹 매시업과 애그리게이터
    • 머신에서 활용하는 인터넷 데이터
      • 90년대 초기: 웹의 시대가 오다
      • 90년대 중반: 머신 웹의 탄생
      • 2000년대: 머신 웹의 성숙기
      • 공개적으로 사용 가능한 웹 서비스
    • 매시업: 웹의 프랑켄슈타인
      • ChicagoCrime.org
      • HousingMaps.com
      • 그 밖의 매시업
    • 매시업 생성3
      • 매시업과 Ajax
    • 브리지, 프록시, 게이트웨이 - 이런!
      • Ajax 프록시 대안
    • Ajax 프록시 공격
      • HousingMaps.com?
    • 매시업의 입력 검증
    • 애그리게이트 사이트
    • 보안과 신뢰가 떨어지는 상황
    • 결론
  • 12장 프리젠테이션 계층에 대한 공격
    • 프리젠테이션의 콘텐츠 괴롭히기
    • 프리젠테이션 계층에 대한 공격
    • CSS에서 정보 가져오기
    • 해킹의 룩앤필
      • 발전된 형태의 해킹 룩앤필
    • 삽입된 프로그램 로직
    • CSS 요소
      • 브라우저 캐시 수정
    • 프리젠테이션 계층 공격 방지
    • 결론
  • 13장 자바스크립트 웜
    • 자바스크립트 웜 개요
      • 기존의 컴퓨터 바이러스
      • 자바스크립트 웜
    • 자바스크립트 웜의 구성
      • 자바스크립트의 한계
      • 자바스크립트 웜의 복제
      • 자바스크립트 웜 실행부
      • 중간 정리
    • 사례 연구: 새미 웜
      • 어떻게 동작하는가
      • 바이러스 실행부
      • 새미 웜에 대한 결론
    • 사례 연구: 야매너 웜(JS/Yamanner-A)
      • 어떻게 동작하는가
      • 바이러스 실행부
      • 야매너 웜에 대한 결론
    • 실제 자바스크립트 웜에서 배우는 교훈
    • 결론
  • 14장 Ajax 애플리케이션 테스트
    • 블랙 매직
    • 모든 사람이 웹 브라우저를 이용해 웹 서핑을 하는 것은 아니다.
      • Catch-22
    • 보안 테스트 도구 - 생각만큼 멋지지는 않군요
      • 사이트 목록 생성
      • 취약점 탐지
      • 분석 도구: Sprajax
      • 분석 도구: Paros Proxy
      • 분석 도구: LAPSE
      • 분석 도구: WebInspect™
    • 보안 테스트에 대한 숙고
  • 15장 Ajax 프레임워크 분석
    • ASP.NET
      • ASP.NET AJAX(이전에 ATLAS)
      • ScriptService
      • 보안성 비교: UpdatePanel과 ScriptService
      • ASP.NET AJAX와 WSDL
      • ValidateRequest
      • ViewStateUserKey
      • ASP.NET 환경설정과 디버깅
    • PHP
      • Sajax
      • Sajax와 크로스 사이트 요청 변조
    • Java EE
      • DWR
    • 자바스크립트 프레임워크
      • 클라이언트단 코드에서 주의할 사항
      • Prototype
    • 결론
  • 부록 A 새미 웜 소스코드
  • 부록 B 야매너 웜 소스코드

  • 『웹 애플리케이션 해킹 대작전』
  • 1장 웹이 특별한 이유
    • 1장에서 다루는 내용
    • 개요
    • 월드와이드웹
    • 웹 유토피아의 가치
    • 웹과 클라이언트/서버
    • 웹 애플리케이션을 위한 결함 모델
      • 웹 서버
      • 웹 클라이언트
      • 네트워크
      • 결론

  • 2장 목표물에 대한 정보 수집
    • 2장에서 다루는 내용
    • 개요
      • 공격 사금 채취
      • 공격 파일과 디렉토리 추정
      • 공격 예제 애플리케이션의 보안 취약점
  • 3장 클라이언트 공격
    • 3장에서 다루는 내용
    • 개요
      • 공격 입력 선택 제한 회피
      • 공격 클라이언트에서의 검증 회피
  • 4장 상태 기반 공격
    • 4장에서 다루는 내용
    • 개요
      • 공격 숨은 필드
      • 공격 CGI 인자
      • 공격 쿠키 조작
      • 공격 URL 건너뛰기
      • 공격 세션 가로채기
  • 5장 사용자 입력 데이터 공격
    • 5장에서 다루는 내용
    • 개요
      • 공격 크로스 사이트 스크립팅
      • 공격 SQL 삽입
      • 공격 디렉토리 노출
  • 6장 언어 기반 공격
    • 6장에서 다루는 내용
    • 개요
      • 공격 버퍼 오버플로우
      • 공격 정규화
      • 공격 널 문자열 공격
  • 7장 서버 공격
    • 7장에서 다루는 내용
    • 개요
      • 공격 SQL 삽입 II - 저장 프로시저
      • 공격 명령 삽입
      • 공격 핑거프린팅 공격
      • 공격 서비스 거부
  • 8장 인증
    • 8장에서 다루는 내용
    • 개요
      • 공격 암호 해독
      • 공격 인증 파괴
      • 공격 크로스 사이트 트레이싱
      • 공격 암호 기법 약화시키기
  • 9장 프라이버시
    • 9장에서 다루는 내용
    • 개요
    • 사용자 에이전트
    • 리퍼러
    • 쿠키
    • 웹 버그
    • 클립보드 접근
    • 페이지 캐싱
    • 액티브X 컨트롤
    • 브라우저 헬퍼 오브젝트
  • 10장 웹 서비스
    • 10장에서 다루는 내용
    • 개요
    • 웹 서비스란?
      • XML
      • SOAP
      • WSDL
      • UDDI
    • 위협
      • WSDL 스캔 공격
      • 인자 조작
      • XPATH 삽입 공격
      • 재귀 페이로드 공격
      • 대형 페이로드 공격
      • 외부 객체 공격
  • 부록 A 소프트웨어 년: 소프트웨어 품질을 위한 핵심 요소
    • 1950~1959: 기원
    • 1960~1969: 대이동
    • 1970~1979: 혼돈의 시대
    • 1980~1989: 회복기
      • CASE 툴
      • 정형 기법
    • 1990~1999: 프로세스
    • 2000~2009: 엔지니어링
  • 부록 B Flowershop 버그
  • 부록 C 툴
    • TextPad
    • Nikto
    • Wikto
    • Stunnel
    • BlackWidow
    • Wget
    • cURL
    • Paros
    • SPIKE Proxy
    • SSLDigger

도서 오류 신고

도서 오류 신고

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

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

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