Top

소프트웨어 보안 평가 The Art of Software Security Assessment

  • 원서명The Art of Software Security Assessment: Identifying and Preventing Software Vulnerabilities (ISBN 9780321444424)
  • 지은이마크 다우드, 존 맥도날드, 저스틴 슈
  • 옮긴이삼성SDS 정보보안연구회
  • ISBN : 9788960775114
  • 58,000원
  • 2013년 12월 31일 펴냄
  • 페이퍼백 | 1,256쪽 | 188*250mm
  • 시리즈 : 해킹과 보안

책 소개

이 책은 소프트웨어 보안 감사에 대하여 이전까지 쓰여진 어떤 책보다 상세하고, 정교하고 유용한 가이드를 제공한다. 능력 있는 보안 컨설턴트이자 VPN 같은 애플리케이션의 알려지지 않은 취약점을 개인적으로 연구하는 저자들의 특별한 경험을 바탕으로, 감지하기 어렵고 잘 숨겨진 보안 취약점들을 처음부터 끝까지 밝혀내는 방법을 소개한다. 이 책에서는 유닉스/리눅스와 윈도우 환경 모두에 대한 소프트웨어 취약점에 대한 모든 범위를 다룸으로써 네트워크와 웹 소프트웨어를 포함한 모든 종류의 애플리케이션과 함수에 대한 보안감사를 할 수 있게 해준다. 또한 과거 산업 전반에서 이목을 끌었던 취약점에 대한 소스코드 사례를 이용해 기술을 가르쳐준다.

이 책에서 다루는 내용

■ 소스코드 감사: 이론, 실전, 방법론, 알려지지 않은 자료 교환
■ 보안 소프트웨어 디자인과 보안심사 간 불일치 조율
■ 구조 리뷰 수행
■ 메모리 관리, 데이터 타입, 비정상적인 데이터와 관련된 취약점 식별 방법
■ 유닉스/리눅스 평가: 권한, 파일 및 절차
■ 객체나 파일시스템을 포함한 윈도우 관련 이슈
■ 프로세스 간 통신, 동기화 및 상태 감사
■ 네트워크 소프트웨어 평가: IP 스택, 방화벽, 일반적인 애플리케이션 프로토콜
■ 웹 애플리케이션과 기술 감사

이 책의 대상 독자

이 책은 경험이 있는 개발자가 이해할 수 있게 작성됐다. 독자는 적어도 하나의 프로그래밍 언어에 능통해야 하며, 기본적인 C/C++ 프로그래밍에 익숙해야 한다. 이 책의 여러 단계에 걸쳐 인텔 어셈블리 언어가 사례로 사용됐지만, 최소한으로 사용했으며 최대한 C코드와 비슷하게 옮기려고 노력했다. 가장 일반적인 운영체제와 자주 사용되는 플랫폼을 사용했고, 최대한 플랫폼에 제약을 받지 않은 일반적인 내용을 포함하게 최선을 다해 만들었다. 필요에 따라 이 책에서 다루지 않는 배경 지식을 제공하기 위해 추가적인 리소스를 참조했다.

이 책의 구성

1부, 소프트웨어 보안 평가 소개(1~4장): 1부는 코드 진단 방법을 소개하고, 이를 어떻게 소프트웨어 개발 과정에 적용하는지 설명한다. 디자인 검토, 위협 모델링, 운영 검토의 기능(코드뿐 아니라 애플리케이션 전체의 평가를 위한 유용한 틀)을 배울 수 있다. 마지막으로 다양한 기능과 크기를 갖는 애플리케이션의 코드 검토를 수행하기 위한 포괄적이고 고차원적인 방법을 배울 수 있다.
2부, 소프트웨어 취약점(5~13장): 2부는 실질적인 점검 방법으로 관심을 옮겨 애플리케이션 코드에서 어떻게 특정 취약점을 찾아낼 수 있는지에 대해 배운다. 공격에 주로 이용되는 소프트웨어 취약 클래스들을 설명하며, 애플리케이션에서 어떻게 치명적인 보안 결함을 발견하는지에 대해 배울 수 있다. 실전에 적용할 수 있는 많은 보안 취약점의 사례가 주어지는데, 이러한 예를 통해 소스코드에서 소프트웨어 버그가 어떻게 동작하는지 이해할 수 있다.
3부, 소프트웨어 취약점 사례(14~18장)" 3부는 앞에서 배운 기법들의 실제적인 사례를 보여준다. 3부에서는 일반적인 애플리케이션 클래스들과 취약점을 내포하고 있는 여러 타입의 버그를 설명한다. 또한 2부에서 얻은 기술적인 지식을 어떻게 애플리케이션에 적용할 수 있는지 보여준다. 특히 네트워킹, 방화벽 기술, 웹 보안 기술 등을 설명하며, 각 장에서는 애플리케이션의 일반적인 프레임워크와 설계에서 일반적으로 나타날 수 있는 결함을 설명한다.

최소한 한 번은 책을 처음부터 끝까지 정독하는 것이 내용을 숙지하고 저자의 의도를 알 수 있는 가장 효과적인 학습 방법이다. 이런 접근 방법이 가장 효과적인 이유는 각 장마다 핵심적인 기술과 툴을 사용하기 위한 기회를 제공했기 때문이며, 이를 통한 애플리케이션 평가를 수행할 수 있다. 특히 각 섹션에서 중요한 개념에 대해 정리를 하는 데 사용한 칼럼과 참고에 관심을 기울이길 바란다.

물론 바쁜 일정 때문에 정독이 불가능한 독자를 위해 다른 타입의 검토에 초점을 맞춰 몇 개의 트랙으로 구분했다. 그러나 1~4장은 책 전체에 대한 개념을 확립하는 부분이므로, 모든 독자는 1부를 정독하기를 바란다. 그 후 필요에 따라 다음 트랙에 따라 해당 장들을 읽으면 된다.

유닉스 트랙(5~10장, 13장): 이 트랙은 일반적인 소프트웨어 취약점 클래스, 메모리 오염(corruption), 프로그램 제어 흐름, 형식이 정해진 데이터에 대해 언급하는 것으로 시작한다. 다음으로 다양한 유닉스 운영체제에 있는 특이점 때문에 비롯되는 유닉스 보안 문제점에 대해 설명하고, 마지막으로 대부분 플랫폼에서 공통적으로 존재하는 동기화 취약점을 언급한다.
윈도우 트랙(5~8장, 11~13장): 이 트랙도 유닉스와 마찬가지로 일반적으로 플랫폼이 갖고 있는 보안 문제를 다룬다. 그런 다음, 두 장에서 윈도우 API 및 관련 취약점을 설명한다. 마지막으로 이 트랙은 일반적인 동기화 취약점을 설명한다.
웹 보안 트랙(8장, 13장, 17~18장): 웹 진단은 일반적인 보안 취약점에 대한 이해뿐 아니라 웹 기반 프레임워크와 언어에 대한 이해를 필요로 한다. 이 트랙은 웹 기반 언어와 관련된 일반적인 취약 클래스를 설명하고, 웹에 특정하게 나타나는 보안을 언급한다. 유닉스/윈도우 관련 내용은 이 트랙에 포함되지 않았지만, 웹 애플리케이션의 운영 환경에 따라 연관이 있을 수 있다.
네트워크 응용 트랙(5~8장, 13장, 16장): 이 장들에서는 네트워크 클라이언트/서버 응용상에 나타날 수 있는 취약점을 잘 설명한다. 16장은 응용 프로토콜을 주로 설명하고, 또한 일반적인 응용 프로토콜 진단 방법에 대한 내용을 포함하고 있다. 다른 트랙과 마찬가지로 개발 환경에 따라 유닉스 또는 윈도우 관련 장이 필요할 수 있다.
네트워크 분석 트랙(5~8장, 13~16장): 이 트랙은 방화벽이나 IPS, 스니퍼, 라우팅 소프트웨어 등과 같은 네트워크 분석 애플리케이션을 상세히 설명한다. 널리 사용되는 네트워크 기반 기술 또는 이 제품에서 공통적으로 나타나는 일반적인 취약점들을 포함한다. 다른 트랙과 마찬가지로 개발 환경에 따라 유닉스 또는 윈도우 관련 장이 필요할 수 있다.

저자/역자 소개

저자 서문

지난 몇 년간 특히 소프트웨어 취약점을 비롯한 컴퓨터 보안 분야에 있어서 놀라운 변화가 있었다.

서점에는 보안성을 고려한 개발(secure development) 및 소프트웨어의 취약점을 공격(exploiting software)하는 방법을 소개하는 책들만 모아놓은 코너도 생겨났다. 애플리케이션 보안을 다루는 책들은 소프트웨어 디자이너나 개발자의 관점으로 애플리케이션에서 소프트웨어 취약점이 발생하지 않게 하는 테크닉에 중점을 둔다. 이런 테크닉은 견고한 보안 설계 원칙과 위협 모델링부터 시작해서 베스트 프랙티스 방어 개발 전략을 구현하는 모든 방법을 설명한다. 이런 책들은 애플리케이션 개발에 대한 방어의 근간을 만드는 데 도움이 되지만, 취약점의 본질은 거의 다루지 않고 어떻게 취약점을 회피하는지에만 초점을 맞춘다. 더욱이 모든 개발이 기본부터 보안 애플리케이션을 고려할 수 있는 것도 아니다. 현실적으로는 이미 공통적으로 사용하는 거대한 코드모음(codebases)이 있고 제한된 시간과 예산을 고려해야 하기 때문이다. 반면 보안 코딩의 목표는 “조금이라도 취약점이 발생할 수 있는 방법은 사용하지 말라!”라고 말한다. 이 사실이 맞기는 하지만, 너무 비용이 많이 들거나 시간을 많이 소모함으로써 합리적이지 않는 경우도 종종 발생하기 때문에 침투 테스트와 윤리적 해킹에 관심을 돌리게 된다. 이런 주제는 시중에서 다양한 범위의 지식을 얻을 수 있고, 소프트웨어 시스템의 생성, 입력, 삭제, 수정 테스트 시 유용하게 이용할 수 있다. 그렇지만 기술적으로 상세한 자료들조차도 취약점의 공격에만 초점을 두고 있을 뿐 취약점이 발견되는 첫 번째 위치를 어떻게 찾아야 하는지에 대해서는 거의 다루지 않는다. 이러한 접근은 현존하는 애플리케이션의 문제점을 어떻게 찾아내며, 합리적인 수준의 소프트웨어 안전을 보장할 수 있는지에 대한 문제점을 남겨둔다.

이는 전문적인 소프트웨어 보안을 평가하는 사람들에게 직면한 문제다. 보안 시스템의 설치, 테스트에 대한 관심은 더욱 증가하고 있지만 취약점을 찾을 수 있는 현실적인 방법을 설명하는 자료는 그리 많지 않다. 결국 취약점을 찾아가는 절차는 복잡한 이슈에 대한 깊이 있는 기술적인 이해가 필요하며, 애플리케이션 분석에도 체계적인 접근이 필요하다. 취약점을 어떻게 찾을 것인가에 대한 공식적인 언급이 없다면 소프트웨어 보안 산업은 소프트웨어 보안 평가의 기준을 확립하거나 다음 세대를 교육할 수 없다. 나는 이런 질문에 답을 찾고, 보안 소프트웨어 개발과 개발 후 심사에서의 차이점을 좁히는 데 도움을 주기 위해 이 책을 썼다. 이 책은 주로 컨설턴트나 보안 전문가를 위해 쓰였으나, 나머지 IT 분야에 종사하는 사람들에게도 도움이 되는 내용을 포함하고 있다. 개발자는 이 책을 통해 언어와 운영체제가 어떻게 동작하며 이런 요소들이 안전해 보이는 애플리케이션에 어떻게 취약점을 유발하는지, 그 차이와 뉘앙스를 이해할 수 있을 것이다. 품질 평가원(Quality Assurance Personnel)은 사내에서 개발한 소프트웨어의 무결성을 확신하거나, 다양한 공격을 받는 애플리케이션의 취약점을 감소시키는 가이드라인으로 이 책을 사용할 수 있을 것이다. 관리자는 네트워크상에서 애플리케이션의 보안 영향력을 평가하는 가이드라인으로 이 책을 사용할 수 있을 것이며, 향후 좀 더 나은 결정과 개발을 계획할 수 있을 것이다. 마지막으로 어떻게 애플리케이션을 평가하는지 관심이 있는 독자는 이 책에서 애플리케이션 보안 검토에 대한 중요한 정보를 얻고, 점검 기술을 향상시키는 데 도움을 받을 수 있을 것이다.

저자 소개

마크 다우드(Mark Dowd)

맥아피(McAfee)의 수석 보안 아키텍트로 근무하고 있으며, 애플리케이션 보안 분야에서 다년간의 경험을 갖고 있다. 인터넷 보안 시스템(ISS)인 엑스포스(X-Force)에서 다년간 수석 연구가로 근무한 경험을 기반으로 유비쿼터스 인터넷 소프트웨어 분야에서 수많은 취약점을 발견했으며, 마이크로소프트의 익스체인지 서버 같은 메일 전송 서비스, OpenSSH, 파이어폭스의 모질라 같은 인터넷 브라우저, VPN, 마이크로소프트의 SSL 같은 분야에서 주소 체계 등의 심각한 문제점을 찾거나 식별하는 데 탁월한 능력을 보여준다. 그의 연구는 산업계의 유명 컨퍼런스인 블랙햇이나 럭스콘(RUXCON)의 주제를 포괄하고 있다.

존 맥도날드(John McDonald)

다양한 분야의 기술 및 플랫폼을 포괄해 진보된 애플리케이션 보안 평가를 수행할 수 있는 전문성을 가진 네오햅시스(Neohapsis)의 상급 컨설턴트다. 보안 아키텍처나 맥아피, GmbH, 시티은행 등을 위한 취약점 연구가로 높은 평판을 갖고 있다. 취약점 연구가로서 솔라리스, BSD, 방화벽, OpenSSL, BIND 등의 이슈를 포함해 많은 분야의 취약점을 해결하는 데 도움을 주거나 취약점을 식별한다.

저스틴 쉬허(Justin Schuh)

애플리케이션 보안 점검을 수행하는 네오햅시스의 상급 컨설턴트이자 점검 리더로서 이식된 장치의 펌웨어부터 배포되는 기업 웹 애플리케이션까지 시스템의 다양한 범위에 걸쳐 보안 평가를 수행하고 있다. 네오햅시스에 들어가기 전에는 미국 국방부 및 관련 업체의 컴퓨터 보안 분야에서 10년 동안 근무했다. 대정부서비스를 할 때에는 미국 국가안전보장국(National Security Agency)의 침투 테스트 팀(Red Team)의 수석 선임 연구원의 역할을 했다.

옮긴이의 말

내용도 분량도 엄청나고 방대한 책이다. 공역자도, 검수자도 많아 통일된 내용으로 정리하기가 매우 어려웠지만, 꼭 번역을 완수해야 한다는 책임감을 느끼게 해주는 책이었다. 보안을 시작해서 실력이 오르지 않고 정체기에 있는 많은 보안 담당자, 컨설턴트, 학습자의 실력을 두 단계 향상시켜줄 수 있는 훌륭한 책이기 때문이다.

이 책은 보안컨설팅 전문가, 개발자, 모의해킹 담당자 모두가 만족할 수 있게 구성돼 있다. 즉, 개발 단계, 모델링 단계, 구현 단계에 대한 보안 가이드와 실전에 사용할 수 있는 소스코드를 포함하고 있고, 해당 점검 기술을 활용할 수 있도록 네트워크, 서버, 홈페이지 전반에 걸쳐 실전에 활용할 수 있는 내용이 포함돼 있다.

소스코드를 직접 실행하고 하나씩 알아가면서 기술 속에 담긴 진의를 터득할 수 있을 것이고, 이는 더욱 능력 있는 전문가로 나아가는 초석이 될 것이라 확신한다.

아무쪼록 방대한 분량에 지레 겁먹어서 미리 포기하지 말고 내용을 하나씩 자신의 것으로 만들어 보안전문가로서 한발 더 내디딜 수 있기를 희망한다.

옮긴이 소개

삼성SDS 정보보안연구회

2001년 해킹바이러스연구회로 시작한 삼성SDS 정보보안연구회는 해킹 기술을 공격자 입장에서 생각하고, 이를 토대로 안전한 시스템 운영 방안을 찾기 위해 보안성 검토 기술, 점검 기술, 신기술 트렌드 등을 연구하는 사내 모임이다. 초기 30여 명으로 시작해 현재 200여 명으로 성장했다. 보안에 대해서 이야기하며 이를 통한 발전을 지향한다.

양해용

삼성SDS의 보안 업무를 담당하고 있으며, 정보보안연구회 총무를 다년간 역임 중이다. 리버스 엔지니어링과 제로데이 취약점에 관심이 많지만, 실력 있는 후배 및 해킹 전문가들과 보안에 관해 이야기하는 것을 더 좋아한다. 나이는 먹어가지만 생각하는 방식은 어려져야 한다고 생각하고 있는 몽상가이기도 하다.

배영부

영상 보안 제품 개발을 시작으로, 임베디드 리눅스 기반 웹 방화벽 및 보안 스위치, SIEM 등 다양한 네트워크 및 보안 제품 개발에 참여했다. 현재 보안 솔루션 개발에 참여 중이며, 리눅스 기반 개발을 가장 좋아한다. 요즘은 인생의 목표를 찾고, 다양한 것을 시도하면서 그것을 이루는 최적의 방법이 무엇일까 고민 중이다.

윤종화

2003년부터 웹 애플리케이션 운영, 보안 진단, 품질 기획 업무를 수행했으며, 현재는 VDI를 운영한다. 실용주의, 애자일, 오픈소스에 관심이 많으며, 최근에는 칸반(Kanban)을 운영 업무에 적용하는 방법을 연구 중이다. 스스로 개발한 코드를 오픈소스로 운영해 보고픈 작은 소망이 있다.

김수민

2001년부터 삼성SDS에서 보안 및 솔루션 개발 업무를 담당하고 있다. 최근에는 자체 암호 모듈을 개발해 국정원 인증을 받았으며, 현재 APM 및 응답 속도 측정 자동화 솔루션을 개발 중이다. 개발을 하지 않을 때는 리버스 엔지니어링 내공 연마에 힘을 쏟고 있다.

김진하

펜실베니아주립대학 컴퓨터공학부에서 박사학위를 받고 2006년부터 삼성SDS에서 소프트웨어 개발 및 연구를 수행 중이다. IEEE의 TPDS 등 저명한 저널에 보안, 분산 처리 등에 대한 여러 논문을 발표했으며, 2007년 세계 인명사전인 마르퀴즈 후스후에 등재됐다.

권기훈

카이스트 산업공학과를 졸업하고 동 대학원에서 통신과 보안 분야를 연구해 박사학위를 취득했다. 삼성SDS에서 공공기관 및 기업체를 대상으로 보안 컨설팅, 모의해킹, 보안 점검 등의 다양한 업무를 수행했으며, 현재 새로운 IT 환경에서의 취약점 분석 및 보안 점검 업무를 주로 수행한다.

오인석

2003년부터 삼성그룹 제조관계사 시스템 및 네트워크 운영, 삼성 CERT 활동 및 제조사 ISO27001 인증 태스크포스 활동 등을 수행했고, 현재 시스템 운영 및 기획업무를 수행 중이다. 융복합 보안 및 오픈소스 보안에 관심이 많으며, 최근에는 스테가노그래피 (Steganography) 차단 및 이를 실제 업무에 적용하는 방법을 연구 중이다.

윤중원

삼성SDS의 보안 시스템 구축/운영 및 웹 애플리케이션 보안성 검토 업무를 담당하고 있다. 현재 리버스 엔지니어링에 대한 기반 기술을 공부 중이며, 최근에는 소스코드 분석 툴 자동 점검에도 관심이 많다.

김태홍

다양한 정보보호 분야에 관심을 갖고 있으며, 삼성SDS 정보보안연구회 회원으로 활동하고 있다.

목차

목차
  • 1부 소프트웨어 보안 평가 소개

  • 1장 소프트웨어 기본 취약점
    • 소개
    • 취약점
      • 보안 정책
      • 보안 요구 사항
    • 감사의 필요성
      • 코드 감사와 블랙박스 테스트
      • 코드 감사와 개발 라이프 사이클
    • 취약점 분류
      • 설계 취약점
      • 구현 취약점
      • 운영 취약점
      • 구별의 애매모호함
    • 공통점
      • 입력과 데이터 흐름
      • 신뢰 관계
      • 가정과 잘못된 신뢰
      • 인터페이스
      • 환경 공격
      • 예외 조건
    • 정리

  • 2장 설계 검토
    • 소개
    • 소프트웨어 설계의 기본
      • 알고리즘
      • 추상화와 분해
      • 신뢰 관계
      • 소프트웨어 설계의 원칙
      • 설계 결함
    • 보안 정책 강화
      • 인증
      • 인가
      • 책임 추적성
      • 기밀성
      • 무결성
      • 가용성
    • 위협 모델링
      • 정보 수집
      • 애플리케이션 아키텍처 모델링
      • 위협 식별
      • 발견한 위협의 문서화
      • 구현 리뷰에 대한 우선순위 매기기
    • 정리

  • 3장 운영 검토
    • 소개
    • 취약점 노출
      • 공격 영역
      • 안전하지 않은 초기 설정
      • 접근 제어
      • 불필요한 서비스
      • 보안 채널
      • 스푸핑과 식별
      • 네트워크 프로파일
    • 웹과 관련된 고려 사항
      • HTTP 요청 방법
      • 디렉토리 인덱싱
      • 파일 처리기
      • 인증
      • 기본 사이트 설치
      • 너무 자세한 에러 메시지
      • 대중화된 관리자 인터페이스
    • 보호 대책
      • 개발 대책
      • 호스트 기반 대책
      • 네트워크 기반 대책
    • 정리

  • 4장 애플리케이션 검토 프로세스
    • 소개
    • 애플리케이션 검토 프로세스의 개요
      • 근거
      • 프로세스 개요
    • 사전 평가
      • 범위 산정
      • 애플리케이션 접근
      • 정보 수집
    • 애플리케이션 검토
      • 단순 검토의 회피
      • 반복 프로세스
      • 초기 준비
      • 계획
      • 작업
      • 반영
    • 문서화와 분석
    • 보고와 치료 지원
    • 코드 탐색
      • 외부 흐름 민감도
      • 추적 방향
    • 코드 감사 전략
      • 코드 이해 전략
      • 후보 지점 전략
      • 설계 일반화 전략
    • 코드 감사 기법
      • 내부 흐름 분석
      • 서브시스템과 의존성 분석
      • 코드 다시 읽기
      • 탁상 검사
      • 테스트 케이스
    • 코드 감사자의 도구상자
      • 소스코드 탐색기
      • 디버거
      • 이진 탐색 도구
      • 퍼지 테스팅 도구
    • 사례 연구: OpenSSH
      • 사전 평가
      • 구현 분석
      • 고수준 공격
      • 결과의 문서화
    • 정리

  • 2부 소프트웨어 취약점

  • 5장 메모리 오염
    • 소개
    • 버퍼 오버플로우
      • 프로세스 메모리 레이아웃
      • 스택 오버플로우
      • 힙 오버플로우
      • Off-by-One 에러
      • 전역, 정적 데이터 오버플로우
    • 셸코드
      • 코드 작성법
      • 메모리에서 코드 찾기
    • 보호 메커니즘
      • 스택 쿠키
      • 힙 구현 강화
      • 비실행 스택과 힙 보호
      • 주소 공간 구조 랜덤화
      • SafeSEH
      • 함수 포인트 난독화
    • 메모리 오염의 영향 평가
      • 메모리에서 버퍼의 위치
      • 다른 데이터로 덮어쓰기 되는 것
      • 덮어쓰기가 가능한 바이트 수
      • 메모리를 오염시키는 데 사용될 수 있는 데이터
      • 메모리 블록의 공유
      • 적용해야 할 보호
    • 정리

  • 6장 C 언어 이슈
    • 소개
    • C 언어 배경
      • 데이터 저장 개요
      • 바이너리 인코딩
      • 바이트 오더
      • 보편적 구현
    • 산술적 경계 조건
      • 부호 없는 정수 경계
      • 부호 있는 정수 경계
    • 형 변환
      • 개요
      • 변환 규칙
      • 단순 변환
      • 정수 승격
      • 정수 승격의 응용
      • 일반 산술 변환
      • 일반 산술 변환 응용
      • 형 변환 요약
    • 형 변환 취약점
      • 부호 있는/부호 없는 변환
      • 부호 확장
      • 절단
      • 비교
    • 연산자
      • sizeof 연산자
      • 예상하지 못한 결과
    • 포인터 연산
      • 포인터 개요
      • 포인터 연산 개요
      • 취약점
    • 기타 C 특성
      • 연산 순서
      • 구조체 패딩
      • 우선순위
      • 매크로/전처리기
      • 오탈자
    • 정리

  • 7장 프로그램 구성 요소
    • 소개
    • 감사 변수의 사용
      • 변수의 관계
      • 구조체와 객체의 잘못된 처리
      • 변수 초기화
      • 산술 연산 경계
      • 변수 타입 혼동
      • 리스트와 테이블
    • 제어 흐름 감사
      • 반복문의 구조
      • 흐름 전환 구문
      • Switch 구문
    • 함수 감사
      • 함수 감사 로그
      • 반환 값의 확인과 해석
      • 함수 부수 효과
      • 인자의 의미
    • 메모리 관리에 대한 감사
      • ACC 로그
      • 할당 함수
      • 할당자의 스코어카드와 에러의 영역
      • 이중 메모리 해제
    • 정리

  • 8장 문자열과 메타문자
    • 소개
    • C 언어의 문자열 처리
      • 범위가 제한되지 않은 문자열 함수
      • 범위를 제한하는 문자열 함수
      • 일반적인 이슈
    • 메타문자
      • 삽입된 구분자
      • NUL 문자 주입
      • 절단
    • 일반적인 메타문자 형식
      • 경로 메타문자
      • C 형식 문자열
      • 셸 메타문자
      • 펄 open()
      • SQL 질의
    • 메타문자 필터링
      • 메타문자 제거
      • 이스케이프 메타문자
      • 메타문자 회피
    • 문자 집합과 유니코드
      • 유니코드
      • 윈도우 유니코드 함수
    • 정리

  • 9장 유닉스 I: 권한과 파일
    • 소개
    • 유닉스 기초
      • 사용자와 그룹
      • 파일과 디렉토리
      • 프로세스
    • 권한 모델
      • 권한 프로그램
      • 사용자 ID 함수
      • 그룹 ID 함수
    • 권한 취약점
      • 권한의 무모한 사용
      • 영구적인 권한 제거
      • 임시 권한 제거
      • 감사 권한 관리 코드
      • 권한 확장
    • 파일 보안
      • 파일 ID
      • 파일 권한
      • 디렉토리 권한
      • 파일 운영과 권한 관리
      • 파일 생성
      • 디렉토리 안정성
      • 파일명과 경로
      • 위험한 장소
      • 흥미로운 파일
    • 파일 내부
      • 파일 디스크립터
      • inode
      • 디렉토리
    • 링크
      • 심볼릭 링크
      • 하드 링크
    • 경쟁 상태
      • 검사 시점과 사용 시점
      • stat() 함수 계열
      • 돌아온 파일 경쟁
      • 권한 상승
      • 소유권 상승
      • 디렉토리 권한 획득
    • 임시 파일
      • 고유 파일 생성
      • 파일 재사용
      • 임시 디렉토리 청소
    • 표준 입출력 파일 인터페이스
      • 파일 열기
      • 파일에서 읽기
      • 파일에 쓰기
      • 파일 닫기
    • 정리

  • 10장 유닉스 II: 프로세스
    • 소개
    • 프로세스
      • 프로세스 생성
      • fork() 변형 모델
      • 프로세스 종료
      • fork()와 파일 오픈
    • 프로그램 호출
      • 직접 호출
      • 간접 호출
    • 프로세스 속성
      • 프로세스 속성 유지
      • 리소스 제한
      • 파일 디스크립터
      • 환경 배열
      • 프로세스 그룹, 세션, 터미널
    • 프로세스 간 통신
      • 파이프
      • 명명된 파이프
      • 시스템 V IPC
      • 유닉스 도메인 소켓
    • 원격 프로시저 호출
      • RPC 정의 파일
      • RPC 디코딩 경로
      • 인증
    • 정리

  • 11장 윈도우 I: 객체와 파일 시스템
    • 소개
    • 배경
    • 객체
      • 객체 네임스페이스
      • 객체 핸들
    • 세션
      • 보안 ID
      • 로그온 권한
      • 액세스 토큰
    • 보안 기술자
      • 액세스 마스크
      • ACL 상속
      • 기술자 프로그래밍 인터페이스
      • ACL 권한 감사
    • 프로세스와 스레드
      • 프로세스 로딩
      • ShellExecute와 ShellExecuteEx
      • DLL 로딩
      • 서비스
    • 파일 접근
      • 파일 권한
      • 파일 I/O API
      • 링크
    • 레지스트리
      • 키 권한
      • 키와 값 스쿼팅
    • 정리

  • 12장 윈도우 II: 프로세스 간 통신
    • 소개
    • 윈도우 IPC 보안
      • 리다이렉터
      • 가장
    • 윈도우 메시징
      • 윈도우 스테이션 객체
      • 데스크톱 객체
      • 윈도우 메시지
      • 섀터 공격
      • DDE
      • 터미널 세션
    • 파이프
      • 파이프 권한
      • 명명된 파이프
      • 파이프 생성
      • 파이프에서의 가장
      • 파이프 스쿼팅
    • 메일슬롯
      • 메일슬롯 권한
      • 메일슬롯 스쿼팅
    • 원격 프로시저 호출
      • RPC 연결
      • RPC 전송
      • 마이크로소프트 인터페이스 정의 언어
      • IDL 파일 구조
      • 애플리케이션 설정 파일
      • RPC 서버
      • RPC에서의 가장
      • 컨텍스트 핸들과 상태
      • RPC에서의 스레드
      • RPC 애플리케이션 감사
    • COM
      • COM: 빠른 지침서
      • DCOM 설정 유틸리티
      • DCOM 서브시스템 접근 권한
      • DCOM 접근 제어
      • DCOM에서의 가장
      • MIDL 다시 살펴보기
      • 액티브 템블릿 라이브러리
      • DCOM 애플리케이션 감사
      • COM 등록 리뷰
      • 액티브X 보안
    • 정리

  • 13장 동기화와 상태
    • 소개
    • 동기화 문제
      • 재진입과 비동기 안전 코드
      • 경쟁 상태
      • 기아 상태와 교착 상태
    • 프로세스 동기화
      • 시스템 V 프로세스 동기화
      • 윈도우 프로세스 동기화
      • 내부 프로세스 동기화의 취약점
    • 신호
      • 신호 전송
      • 신호 처리
      • 위치 점프
      • 신호 취약점
      • 신호 스코어보드
    • 스레드
      • PThreads API
      • 윈도우 API
      • 스레딩 취약점
    • 정리

  • 3부 소프트웨어 취약점 사례

  • 14장 네트워크 프로토콜
    • 소개
    • 인터넷 프로토콜
      • IP 주소 기초
      • IP 패킷의 구조
      • IP 헤더 검증 기초
      • IP 옵션 처리
      • 발신지 라우팅
      • 단편화
    • UDP
      • 기본적인 UDP 헤더 검증
      • UDP 이슈
      • 전송 제어 프로토콜
      • 기본적인 TCP 헤더 검증
      • TCP의 옵션 처리
      • TCP 커넥션
      • TCP 스트림
      • TCP 처리
    • 정리

  • 15장 방화벽
    • 소개
    • 방화벽 개요
      • 프록시와 패킷 필터
      • 공격 지점
      • 프록시 방화벽
      • 패킷 필터링 방화벽
    • 상태 비보존 방화벽
      • TCP
      • UDP
      • FTP
      • 단편화
    • 간단한 상태 보존 방화벽
      • TCP
      • UDP
      • 방향성
      • 단편화
    • 상태 보존 인스펙션 방화벽
      • 계층화 이슈
    • 스푸핑 공격
      • 떨어진 곳에서의 스푸핑
      • 근거리에서의 스푸핑
      • 멀리 떨어진 곳에서의 유령 공격
    • 정리

  • 16장 네트워크 응용 프로토콜
    • 소개
    • 응용 프로토콜 감사
      • 문서 수집
      • 알려지지 않은 프로토콜의 요소 확인
      • 데이터 타입과 프로토콜 매치
      • 데이터 검증
      • 시스템 리소스 접근
    • 하이퍼텍스트 전송 규약
      • 헤더 해석
      • 리소스 접근
      • 유틸리티 함수
      • 데이터 포스팅
    • 인터넷 보안 연합과 키 관리 프로토콜
      • 페이로드
      • 페이로드 유형
      • 암호화 취약점
    • 추상 구문 기법(ASN.1)
      • 기본 인코딩 규칙
      • 표준 인코딩과 식별 인코딩
      • BER, CER, DER 구현의 취약점
      • 묶음 인코딩 규칙(PER)
      • XML 인코딩 규칙
      • XER 취약점
    • 도메인 네임 시스템
      • 도메인 네임과 리소스 레코드
      • 네임 서버와 리졸버
      • 영역
      • 리소스 레코드 규약
      • 기본 사용 사례
      • DNS 프로토콜 구조 입문
      • DNS 네임
      • 길이 변수
      • DNS 스푸핑
    • 정리

  • 17장 웹 애플리케이션
    • 소개
    • 웹 기술 개요
      • 기본
      • 정적 콘텐츠
      • CGI
      • 웹 서버 API
      • 서버 측 인클루드
      • 서버 측 변환
      • 서버 측 스크립팅
    • HTTP
      • 개요
      • 버전
      • 헤더
      • 메소드
      • 매개변수와 폼
    • 상태(State)와 HTTP 인증
      • 개요
      • 클라이언트 IP 주소
      • 레퍼러 요청 헤더
      • HTML과 URL에 상태 삽입
      • HTTP 인증
      • 쿠키
      • 세션
    • 아키텍처
      • 중복
      • 프레젠테이션 로직
      • 비즈니스 로직
      • 다층 구조
      • 비즈니스 계층
    • 웹 계층: 모델-뷰-컨트롤러
    • 문제 영역
      • 클라이언트 관점
      • 클라이언트 제어
      • 페이지 흐름
      • 세션
      • 인증
      • 인가와 접근 제어
      • 암호화와 SSL/TLS
      • 피싱과 위장
    • 일반 취약점
      • SQL 인젝션
      • 운영체제와 파일 시스템 상호작용
      • XML 인젝션
      • XPath 인젝션
      • 크로스사이트 스크립팅
      • 스레딩 이슈
      • C/C++ 문제
    • 웹의 척박한 현실
    • 점검 전략
    • 정리

  • 18장 웹 테크놀로지
    • 소개
    • 웹 서비스와 서비스 지향 아키텍처
      • SOAP
      • REST
      • AJAX
    • 웹 애플리케이션 플랫폼
    • CGI
      • 인덱스된 쿼리
      • 환경 변수
      • 경로 혼란
      • SQL 인젝션
      • 파일 접근
      • 셸 호출
      • 파일 포함
      • 인라인 계산
      • 크로스사이트 스크립팅
      • 테인트 모드
    • PHP
      • SQL 인젝션
      • 파일 접근
      • 셸 호출
      • 파일 포함
      • 인라인 계산
      • 크로스사이트 스크립팅
      • 설정
    • 자바
      • SQL 인젝션
      • 파일 접근
      • 셸 호출
      • 파일 포함
      • JSP 파일 포함
      • 인라인 계산
      • 크로스사이트 스크립팅
      • 스레딩 이슈
      • 설정
    • ASP
      • SQL 인젝션
      • 파일 접근
      • 셸 호출
      • 파일 포함
      • 인라인 계산
      • 크로스사이트 스크립팅
      • 설정
    • ASP.NET
      • SQL 인젝션
      • 파일 접근
      • 셸 호출
      • 파일 포함
      • 인라인 계산
      • 크로스사이트 스크립팅
      • 설정
      • ViewState
    • 정리

도서 오류 신고

도서 오류 신고

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

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

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