이미 소장하고 있다면 판매해 보세요.
|
『모두를 위한 소프트웨어 보안 설계와 구현』
1부 l 안전한 소프트웨어를 위한 기본 개념 1장 보안의 기초 보안에 대한 이해 신뢰 __신뢰감 __비트는 눈에 보이지 않는다 __능숙함과 불완전성 __신뢰는 스펙트럼이다 __신뢰 결정 __암묵적으로 신뢰할 수 있는 컴포넌트 __제품 신뢰도 높이기 고전적인 원칙 __정보 보안의 C-I-A 원칙 __황금표준 __개인정보보호 2장 위협 모델링 적대적인 관점 4가지 질문 위협 모델링 __모델 기반 작업 __자산 식별 __공격 표면 식별 __신뢰 경계 식별 __위협 식별 __위협 완화 개인정보보호 고려사항 어디에나 존재하는 위협 모델링 3장 보안 위협의 완화 위협 처리 구조적 완화 전략 __공격 표면 최소화 __좁은 취약점 창 __데이터 노출 최소화 접근 정책과 접근 제어 인터페이스 통신 스토리지 4장 보안 설계 패턴 설계 속성 __설계의 경제성 패턴 __투명한 설계 노출 최소화 __최소 권한 __최소 정보 __안전이 기본 __차단목록보다 허용목록 __예측 가능성 방지 __안전한 실패 강력한 집행 __완전한 중재 __최소 공통 메커니즘 중복성 __심층 방어 __권한 분리 신뢰와 책임 __신뢰에 대한 저항 __보안 책임 수용 안티패턴 __혼동된 대리인 __신뢰의 역류 __서드파티 훅 __패치 불가능한 컴포넌트 5장 보안을 위한 암호화 기법 암호화 도구 난수 __의사 난수 __암호학적으로 안전한 의사 난수 메시지 인증 코드 __변조 방지를 위한 메시지 인증 코드 사용 __재전송 공격 __안전한 MAC 통신 대칭 암호화 __일회용 패드 __고급 암호화 표준 대칭 암호화 사용 비대칭 암호화 __RSA 암호체계 디지털 서명 디지털 인증서 키 교환 암호화 사용 2부 l 안전한 소프트웨어 설계 6장 보안 설계 원칙 설계에 보안 통합 __설계 가정의 명시화 __범위 정의 __보안 요구사항 설정 __위협 모델링 완화의 구현 __인터페이스 설계 __데이터 처리 설계 소프트웨어 설계에 개인정보보호 통합 전체 소프트웨어 수명주기 계획 트레이드오프 처리 설계 단순성 7장 보안 설계 리뷰 보안 설계 리뷰의 실행 계획 __수행 목적 __수행 시기 __문서화는 필수적이다 보안 설계 리뷰 프로세스 __검토 __질문 __식별 __협력 __작성 __후속 조치 설계 보안 평가 __4가지 질문을 지침으로 사용하라 __좀 더 파고 들어본다면 __개인정보보호 리뷰 __업데이트 리뷰 이견 관리 __재치 있게 소통하라 __사례 연구: 어려운 리뷰 __의견 불일치의 조정 실습, 실습, 실습 3부 l 보안 구현 8장 안전한 프로그래밍 안전한 프로그래밍이 어려운 이유 __악의적인 영향 __취약점은 버그다 __취약점 체인 __버그와 엔트로피 __경계심 사례연구: goto fail 취약점 __코드 한 줄의 취약점 __풋건을 조심하라 __goto fail의 교훈 코딩 취약점 __원자성 __시차 공격 __직렬화 유력한 용의자 9장 로우레벨 코딩의 취약점 사례 산술적 취약점 __고정너비 정수 취약점 __부동소수점 정밀도 취약점 __예제: 부동소수점 언더플로 __예제: 정수 오버플로 __안전한 연산 메모리 접근 취약점 __메모리 관리 __버퍼 오버플로 __예제: 메모리 할당 취약점 __사례 연구: 하트블리드 보안 대참사 10장 신뢰할 수 없는 입력의 보안 위협 입력 유효성 검사 __유효성 결정 __검사 기준 __잘못된 입력 거부 __잘못된 입력 수정 문자열 취약점 __문자열 길이 문제 __유니코드 문제 인젝션 취약점 __SQL 인젝션 __경로 탐색 __정규표현식 __XML의 위험성 인젝션 공격의 완화 조치 11장 웹 보안 프레임워크 기반 구축 웹 보안 모델 __HTTP 프로토콜 __디지털 인증서와 HTTPS __동일 출처 정책 __웹 쿠키 일반적인 웹 취약점 __크로스 사이트 스크립팅(XSS) __크로스 사이트 요청 위조(CSRF) 기타 취약점과 완화 방법 12장 보안 테스팅 보안 테스팅이란 무엇인가 goto fail 취약점에 대한 보안 테스팅 __기능 테스트 __취약점을 갖는 기능 테스팅 __보안 테스트 케이스 __보안 테스팅의 한계 보안 테스트 케이스 작성 __입력 유효성 검사 테스팅 __XSS 취약점 테스트 퍼즈 테스팅 보안 회귀 테스트 가용성 테스팅 __리소스 소비 __임계치 테스트 __분산 서비스 거부 공격(디도스 공격) 보안 테스팅 모범사례 __테스트 주도 개발 __통합 테스팅 활용 __보안 테스팅 따라잡기 13장 안전한 개발 모범사례 코드 품질 __코드 관리 습관 __예외 및 오류 처리 __보안 문서화 __보안 코드 리뷰 의존성 __보안 컴포넌트 선택 __인터페이스 보안 __보안 도구를 재발명하지 말라 __레거시 보안과의 경쟁 취약점 분류 __DREAD 평가 __작동하는 공격 코드 제작 __분류 결정 안전한 개발환경 유지 __운영환경과 개발환경의 분리 __개발 도구 보안 __제품 출시 14장 끝나지 않는 보안의 여정 실천하고 행동할 것 __보안은 모두의 일이다 __보안의 내재화 보안의 미래 __소프트웨어 품질 향상 __복잡성 관리 __투명성 최소화에서 최대화로 __소프트웨어의 진본성, 신뢰, 책임감 개선 라스트 마일: 마지막 한걸음 완수 마치며 부록 A 소프트웨어 설계 문서 샘플 부록 B 용어집 부록 C 생각해볼 문제 부록 D 핵심 요약 자료 『기업과 고객을 파괴하는 해킹과 사이버 보안의 모든 것』 1부 l 우리가 알던 사이버 보안 지식은 모두 틀렸다 1장 사이버 보안, 잘 안다는 착각 모두가 ‘사이버 보안’의 의미를 알고 있다 시스템이 얼마나 안전한지 측정 가능하다 __신뢰와 위험 __위협 __보안 정책 __결국… 추구해야 할 최우선 목표는 보안이다 사이버 보안은 명백한 위험에 관한 것이다 사이버 위협 정보가 많이 공유될수록 상황은 더 나아진다 우리에게 중요한 것은 모두에게 중요하다 제품 ○○는 반드시 우리를 안전하게 만들어 줄 것이다 PC보다 안전한 맥, 윈도우보다 안전한 리눅스 오픈소스 소프트웨어는 폐쇄형 소프트웨어보다 안전하다 기술 ○○가 보안을 보장해줄 것이다 프로세스 ○○가 보안을 보장해 줄 것이다 오래된 아이디어를 새것으로 만들 마법의 요정가루가 있다 비밀번호는 자주 바꿔야 한다 해킹 데모는 모두 믿고 두려워하라 사이버 공격은 방어보다 쉽다 운영 기술(OT)은 취약하지 않다 시스템을 뚫는 것은 나 자신을 입증하는 최고의 방법이다 할 수 있다면 해야 한다 보안이 강화될수록 개인정보보호는 약화된다 더 읽을거리 2장 보안 관점에서 다시 바라보는 ‘인터넷’ ‘인터넷’이 무엇인지 모두 잘 안다 IP 주소는 고유한 기기를 식별한다 인터넷은 중앙기관에 의해 관리되고 통제된다 인터넷은 대체로 정적이다 네트워크는 정적이다 __여러분은 핵심 자산이 무엇이며 어디에 있는지를 잘 안다 이메일은 사적인 것이다 암호화폐는 추적이 불가능하다 모든 것이 블록체인으로 해결될 수 있다 인터넷은 마치 빙산과 같다 __다크웹은 오직 범죄 활동을 위한 것이다 __다크웹 활동은 추적 불가능하다 VPN은 사용자를 익명으로 만들어준다 방화벽 하나면 충분하다 더 읽을거리 2부 l 인간 심리로 풀어보는 사이버 보안과 침해 사고 3장 위협을 불러들이는 잘못된 믿음과 과도한 기대 인간은 합리적으로 행동할 것이다, 그러니 저 사용자 탓이다! 우리는 사이버 보안에 대해 알아야 할 모든 것을 알고 있다 규정 준수는 (완전한) 보안과 같다 인증은 기밀성을 보장한다 절대 안전해질 수 없는데 왜 애써야 할까 나는 너무 작고 하찮아서 공격 대상이 되지 않을 것이다 모두가 나를 노리고 있다 신뢰할 수 있는 웹사이트만 이용하므로 내 데이터는 안전하다 모호성에 의한 보안은 어느 정도 안전하다 가시성과 통제에 대한 환상 사이버 보안의 핵심은 5개의 9다 모두가 최첨단 기술을 갖추고 있다 미래의 위협을 예측할 수 있다 보안 담당자는 보안 결과를 통제할 수 있다 모든 나쁜 결과는 잘못된 결정의 결과다 보안은 강화될수록 무조건 좋다 모범사례는 언제나 최선이다 온라인에 있으니 반드시 진실이거나 정확할 것이다 더 읽을거리 4장 보안 판단을 그르치는 20가지 사고 오류 잘못된 인과의 오류: 상관관계는 인과관계다 증거의 부재는 부재의 증거다 허수아비 해커의 오류 인신공격의 오류 성급한 일반화의 오류 회귀 오류 기저율 오류 도박꾼의 오류 이상징후의 오류 블랙스완에 대한 무지 결합 오류와 분리 오류 낙관적 편향 효과 소유 효과 매몰비용 오류 그 밖의 오류들 __외부에 대한 호소 오류 __의심스러운 증거 인용 오류 __유도 질문 오류 __거짓 선택지 오류 __투 쿠오퀘 오류 __질문 재정의 오류 더 읽을거리 5장 보안의 빈틈을 노리는 24가지 인지 편향 행동 편향 부작위 편향 생존 편향 확증 편향 선택 확증 편향 사후 편향 가용성 편향 사회적 증거 편향 과신 편향 제로 리스크 편향 빈도 편향 그 밖의 편향 __결과 편향 __할인 편향 __근접성 편향 __액면가 편향 __부인 편향 __후광 편향 __원 업맨십 편향: 우월 경쟁 의식 __앵커링 편향 __점화 효과 __지식 편향 __현상유지 편향 __이즘 편향 __자기 본위적 편향 더 읽을거리 6장 보안을 위협하는 왜곡된 상벌 체계와 인센티브 보안 업체의 목표는 고객을 안전하게 지키는 것이다 내가 내린 사이버 보안 결정은 나에게만 영향을 미친다 버그 바운티 프로그램은 공격용 취약점을 사라지게 한다 사이버 보안 보험 덕분에 사람들이 감수할 위험이 줄어든다 벌금과 벌칙은 사람들이 위험을 덜 감수하게 만든다 보복 공격은 사이버 범죄를 막는 데 도움이 될 것이다 혁신은 보안 및 개인정보 유출 사고를 증가시킨다 더 읽을거리 7장 문제와 해결책: 이분법의 함정 사이버 보안에서 실패는 선택사항이 아니다 모든 문제는 해결책이 있다 __빅데이터로 모든 문제를 해결할 수 있다 __올바른 해결책은 세상에서 오직 단 하나뿐이다 __주어진 사이버 보안 문제는 모두가 동일한 방식으로 해결해야 한다 개인적인 경험은 사이버 보안 솔루션의 좋은 출발점이 될 수 있다 '나쁜 것'을 더 많이 감지하니 새로운 시스템이 더 나은 것이다 모든 보안 프로세스는 자동화돼야 한다 전문 자격증은 쓸모없다 __사이버 보안 분야에서 일하려면 컴퓨터 관련 학위가 필수다 __사이버 보안 자격증은 가치가 있다 __사이버 보안 인력은 부족하다 __학문과 실무 사이에는 괴리가 있다 더 읽을거리 3부 l 현실과 상황을 고려한 보안 관련 기술 이슈 8장 사이버 공간에 관한 비유와 추상화 사이버 공간은 현실 세계와 같다 __사이버 보안은 성곽 방어와 같다 __디지털 절도는 물리적 절도와 같다 __사용자는 ‘가장 약한 고리’다 사이버 보안은 의학이나 생물학과 같다 사이버 보안은 마치 전쟁과 같다 __사이버 진주만 __사이버 무기 __사이버 테러 사이버 보안의 법은 물리적 세계의 법과 같다 비유와 추상화를 위한 팁 더 읽을거리 9장 사이버 공간의 법과 제도, 정책 사이버 보안의 법은 현실 세계의 법에서 유사하다 그곳의 법은 내가 있는 곳에선 적용되지 않는다 그건 내 수정헌법 제1조 권리를 침해한다! __법에 대한 무지 __관할권의 차이 컴퓨터 코드는 법적 코드보다 우선한다 __법은 컴퓨터 코드로 단순하게 변환될 수 있다 __입법자, 규제 당국, 법원은 기술을 규제할 만큼 충분히 알고 있다 __법과 법원은 개발자들을 부당하게 제약한다 사법기관은 사이버 범죄에 절대로 대응하지 않는다 소송을 통해 언제든지 정보를 숨길 수 있다 데이터 유출 사고를 은폐하려면 소송이 최선의 대응이다 이용약관은 중요치 않다 법은 내 편이므로 걱정할 필요가 없다 더 읽을거리 10장 보안 도구, 과연 제대로 사용하고 있을까 도구는 많을수록 좋다 __새로운 위협마다 새로운 도구가 필요하다 기본 구성은 항상 안전하다 도구 하나로 모든 나쁜 것을 막을 수 있다 도구를 보면 의도를 파악할 수 있다 보안 도구는 본질적으로 안전하며 신뢰할 수 있다 아무것도 탐지하지 못했음은 곧 모든 것이 괜찮다는 뜻이다 __스캐너가 아무것도 탐지하지 못했음은 곧 우리가 안전하다는 뜻이다 __알람이 없다는 것은 안전하다는 뜻이다 __취약점 보고가 없다는 것은 취약점이 없다는 뜻이다 더 읽을거리 11장 소프트웨어 취약점과 사회공학 공격 우리는 취약점에 대해 알아야 할 모든 것을 알고 있다 취약점은 드물다 공격자들은 점점 더 능숙해지고 있다 제로데이 취약점이 가장 중요하다 __제로데이가 가장 무섭다 __제로데이는 지속성을 의미한다 모든 공격은 취약점에 의존한다 익스플로잇 공격 도구와 개념증명은 나쁜 것이다 취약점은 복잡한 코드에서만 발생한다 선발주자는 보안을 희생해야 한다 패치는 항상 완벽하고 적용 가능하다 방어 조치는 시간이 지나면 보안 취약점이 될 수도 있다 모든 취약점은 수정될 수 있다 취약점 평가 시스템은 쉽고 잘 알려져 있다 할 수 있으니 해야 한다 [취약점 편] 취약점의 이름은 그 중요성을 반영한다 더 읽을거리 12장 진화하는 악성코드와 랜섬웨어의 위협 샌드박스를 사용하면 필요한 모든 것을 알 수 있다 리버스 엔지니어링을 사용하면 필요한 모든 것을 알 수 있다 악성코드는 지리적 위치와 관련이 없다 언제든지 누가 악성코드를 만들고 나를 공격했는지 알아낼 수 있다 악성코드는 항상 복잡하며 이해하기도 어려운 프로그램이다 무료 악성코드 보호 기능이면 충분하다 악성코드는 수상한 웹사이트에서만 감염될 것이다 할 수 있으니 해야 한다 [악성코드 편] 랜섬웨어는 전혀 새로운 종류의 악성코드다 서명된 소프트웨어는 항상 신뢰할 수 있다 악성코드의 이름은 중요성을 반영한다 더 읽을거리 13장 실패하지 않는 디지털 포렌식과 사고 대응 영화와 TV는 사이버 세계의 현실을 그대로 반영한다 사이버 사고는 발생 즉시 발견된다 사이버 침해 사고는 개별적이고 독립적이다 모든 사이버 사고의 심각성은 동일하다 표준 사고 대응 기법만으로 충분히 랜섬웨어에 대응할 수 있다 사고 대응팀이 스위치 몇 개만 누르면 모든 것이 마법처럼 해결된다 공격자의 신원은 항상 규명할 수 있다 공격자의 신원은 반드시 규명해야 한다 대부분의 공격과 데이터 유출은 조직 외부에서 시작된다 트로이 목마 방어 논리는 끝났다 엔드포인트 데이터만으로 사고 탐지에 충분하다 사고 복구는 단순하고 선형적인 과정이다 더 읽을거리 4부 l 데이터 없는 보안, 과연 안전할까? 14장 거짓말, 새빨간 거짓말, 그리고 통계 운이 좋으면 사이버 공격을 피할 수 있다 숫자만으로 모든 것이 설명된다 확률은 확실성이다 통계는 법이다 __맥락이 필요하다 __통계를 이용한 추론 예측 __상관관계는 인과관계를 의미한다 __분류 오류는 중요하지 않다 데이터는 통계에서 중요하지 않다 AI와 머신러닝만 있으면 모든 사이버 보안 문제를 해결할 수 있다 더 읽을거리 15장 이미지, 데이터 시각화, 그리고 착각 시각화와 대시보드는 본래 보편적으로 유용하다 사이버 보안 데이터는 시각화하기 쉽다 __인터넷 지리적 위치 정보 시각화는 유용하다 __IP와 포트의 시각화는 명확하고 이해하기 쉽다 더 읽을거리 16장 그래도 희망은 있다 속설에 덜 휘둘리는 세상을 위해 문서화는 중요하다 속설의 공통 패턴과 권고사항 __속설의 공통 패턴 __공통 권고사항 또 다른 미래의 함정을 피하자 마치면서 부록 A 주요 용어 개념 정리 부록 B 보안 용어 약어집 |
Loren Kohnfelder
로렌 콘펠더의 다른 상품
Eugene H. Spafford
유진 스파포드의 다른 상품
Leigh Metcalf
리 메트칼프의 다른 상품
Josiah Dykstra
조사이어 다이크스트라의 다른 상품
김영기의 다른 상품
김경곤의 다른 상품
장은경의 다른 상품
박기성의 다른 상품
|
| 이 책에서 다루는 내용 |
- 시스템에서 중요한 자산, 공격 표면, 신뢰 경계 식별 - 다양한 위협 완화 조치에 대한 효과 평가 - 잘 알려진 완화 조치와 보안 설계 패턴을 통한 작업 - 크로스 사이트 스크립팅과 크로스 사이트 요청 위조, 메모리 결함 등의 취약점 - 보안 테스팅을 이용한 코드 취약점의 사전 식별 - 보안 결함을 찾기 위한 소프트웨어 설계의 객관적 평가 | 이 책의 대상 독자 | - 보안에 초보인 사람들, 특히 보안을 어렵다고 느끼는 사람들 - 보안에 관심이 있지만 지식은 많지 않은, 보안에 대한 인식이 있는 독자들 - 보안 분야를 주도하는 보안 전문가들 [이 책에서 다루는 내용] 이 책은 14개 장으로 구성돼 있으며, 전체 내용은 개념, 설계, 구현을 다루는 3개 부로 나뉘어 있다. [1부, 안전한 소프트웨어를 위한 기본 개념] 1부에서는 이 책에 대한 개념적 기반을 제공한다. 1장 ‘보안의 기초’는 정보 보안과 개인정보보호 기본사항을 개괄한다. 2장 ‘위협 모델링’에서는 위협 모델링을 소개하고 공격 표면과 신뢰 경계에 대한 핵심 개념을 자산 보호 맥락에서 구체화한다. 이어지는 3개 장은 안전한 소프트웨어를 구축하기 위해 독자들이 이용할 수 있는 귀중한 도구들을 소개한다. 3장 ‘보안 위협의 완화’에서는 식별된 위협을 방어적으로 완화하기 위해 일반적으로 사용되는 전략을 설명하고, 4장 ‘보안 설계 패턴’에서는 여러 가지 효과적인 보안 설계 패턴을 제시하고 피해야 할 안티 패턴 몇 가지를 살펴본다. 5장 ‘암호화 기법’에서는 일반적인 위험을 완화하기 위해 표준 암호 라이브러리를 사용하는 방법을 설명하는 복합적 기법을 다루되, 기반이 되는 수학까지는 다루지 않는다(실제로 거의 필요하지 않기도 하다). [2부, 안전한 소프트웨어 설계] 2부에서는 가장 독특하면서도 이 책의 대상 독자들에게 가장 도움이 될 만한 내용을 다룬다. 6장 ‘보안 설계 원칙’과 7장 ‘보안 설계 리뷰’에서는 안전한 소프트웨어 설계와 이를 달성하기 위한 실제 기법에 대한 가이드를 제공하며, 각각 설계자와 리뷰어 관점에서 주제에 접근한다. 이를 통해 소프트웨어 설계 초기부터 보안을 내재화하는 것이 왜 중요한지도 설명한다. 2부에서는 1부에서 살펴본 아이디어를 보안 설계에 통합시키기 위한 구체적인 방법론을 알아본다. 리뷰 방법론은 나의 업계 경험에 바탕을 둔 것으로, 여러분의 작업에 적용할 수 있는 단계별 프로세스도 다룬다. 이런 아이디어를 실행에 옮기는 방법의 예로서 부록 A의 샘플 설계 문서를 함께 살펴보자. [3부, 보안 구현] 8장에서 14장까지는 구현 단계에서의 보안을 다루며 배포, 운영, 수명 종료 단계를 살펴본다. 안전한 설계 이후의 단계로서, 이 책의 3부에서는 취약점의 추가적인 발생을 방지하면서 소프트웨어를 개발하는 방법을 알아본다. 3부의 각 장에는 코드가 포함되어 있으며, 취약점이 코드에 침투하는 방식과 취약점을 방지하는 방법을 설명한다. 8장 ‘안전한 프로그래밍’에서는 프로그래머가 직면하게 될 보안 문제와 실제 취약점이 코드에서는 어떻게 보이는지를 소개한다. 9장 ‘로우레벨 코딩의 취약점 사례’에서는 컴퓨터 산술의 약점과 동적 메모리 할당에 대한 C 언어 스타일의 명시적인 관리가 보안을 어떻게 훼손하는지를 다룬다. 10장 ‘신뢰할 수 없는 입력의 보안 위협’과 11장 ‘웹 보안’에서는 오랫동안 잘 알려져 있지만, 여전히 해결되지 않은 다양하고도 일상적인 버그(인젝션 공격, 경로 탐색, XSS, CSRF 취약점 등)를 다룬다. 12장 ‘보안 테스팅’에서는 제대로 활용되고 있지는 않지만, 코드 안전성을 보장해 줄 수 있는 테스트 기법들을 다룬다. 13장 ‘안전한 개발 모범사례’는 몇 가지 모범사례와 흔히 빠지기 쉬운 함정을 다룸으로써 안전한 구현 가이드를 마무리한다. 3부에서 다루는 코드부는 일반적으로 피해야 하는 취약점을 보여준 후, 뒤이어 이 코드를 안전하게 만드는 방법을 보여주는 패치 버전을 제시한다(각각 ‘취약한 코드’와 ‘수정된 코드’로 표시된다). 따라서 이 책에 있는 코드는 운영 환경의 소프트웨어에 바로 복사해서 사용하라고 만든 것이 아니다. 심지어 수정된 코드라도 환경이 달라지면 다른 문제가 생겨 취약점이 생길 수 있기 때문에, 이 책에 제시된 코드가 모든 애플리케이션에서 안전하다고 생각해서는 안 된다. 마지막으로, 14장 ‘끝나지 않는 보안의 여정’에서는 이 책이 긍정적인 영향을 미치게 될 것으로 기대하는 몇 가지 방안에 대해 설명한다. 이 책에서 다뤄진 핵심 포인트를 요약하고 미래까지 전망해 본다. 아울러, 이 책이 어떤 식으로 소프트웨어 보안 향상에 기여할 수 있는지 그 비전을 설명하는 것으로 시작해서, 소프트웨어 보안을 점진적으로 개선하는 데 도움이 될 만한 실험적인 아이디어까지 이야기한다. [부록] 부록 A는 실제 보안을 고려한 설계를 보여주는 샘플 설계 문서다. 부록 B는 이 책 전반에 걸쳐 쓰인 소프트웨어 보안 용어를 정리한 용어집이다. 부록 C에는 의욕적인 독자들이 기꺼이 연구해볼 만한 개방형 연습 문제와 질문 몇 가지가 들어 있다. 부록 D는 핵심 개념과 과정을 요약한 자료 모음이다. [지은이의 말] 이 책은 소프트웨어 보안 분야의 필수 개념을 더 잘 이해하고 안전한 소프트웨어 설계와 구현을 배우고자 하는 소프트웨어 전문가를 위한 가이드다. 여기서 다루는 주제 중 몇 가지는 운 좋게도 내가 직접 혁신할 수 있었으며, 그 밖의 주제들 역시 발전하고 뿌리내리는 과정을 지켜봤다. 업계에서의 내 경험을 바탕으로, 여러분이 작업하는 소프트웨어를 더 안전하게 만들기 위해 바로 실행할 수 있는 아이디어를 이 책에 가득 담았다. 이 책은 2가지 중심 주제를 다룬다. 소프트웨어 전문가들이 소프트웨어 구축 과정 초기에 보안에 집중하도록 장려하는 것, 그리고 전체 팀이 보안에 대한 책임을 질 뿐만 아니라 보안 프로세스에까지 동참하게 하는 것이다. 확실히 이 두 영역 모두에서 아직 개선의 여지가 충분하며, 이 책은 이런 목표들을 실현하는 방법을 보여준다. 나는 경력 내내 소프트웨어 보안의 최전선에서 일할 수 있는 흔치 않은 기회를 얻었고, 이제 내가 배운 것을 가능한 대로 폭넓게 공유하고 싶다. 20여 년 전, 나는 마이크로소프트에서 대규모 소프트웨어 기업에 위협 모델링을 최초로 적용한 팀에 속해 일한 적이 있다. 몇 년 후 구글에서도 그와 동일한 기법을 발전시키는 일에 참여했으며, 문제점에 접근하는 완전히 새로운 방식을 이때 경험했다. 이 책의 2부에서는 내가 수행한 100회 이상의 설계 리뷰를 통해 얻게 된 정보를 살펴본다. 우리가 거쳐온 길을 돌아봄으로써 커다란 시각을 얻고 모든 것을 새롭게 설명할 수 있게 됐다. 소프트웨어 시스템을 설계, 구축, 운영하는 일은 본질적으로 위험을 수반한다. 모든 단계에 걸쳐 모든 선택은 보안 취약점을 초래하는 위험을 높이기도 낮추기도 한다. 이 책은 누구보다도 내가 가장 잘 아는 것, 그리고 직접 경험하며 배운 것들을 다룬다. 이 책에서 나는 보안적 사고를 첫 번째 원칙부터 전달하고, 어떻게 해야 개발 전반에 걸쳐 보안을 내재화할 수 있을지를 살펴보고자 한다. 이 과정에서 제공하는 설계와 코드 예시는 대체로 특정 기술에 의존하지 않으므로 매우 광범위하게 적용될 수 있다. 본문에는 다양한 일화, 비유, 사례들을 많이 가미해서 추상적인 아이디어를 최대한 효과적으로 전달한다. 보안적 사고를 체득하는 데는 저마다 개인 차가 있다. 따라서 나는 직관을 기르는 데 중점을 둠으로써 여러분이 자신의 작업에서 소프트웨어 보안 관점을 촉진할 수 있는 새로운 방법을 생각해내는 데 도움을 주려 한다. 내 경험에 따르면, 태생적으로 보안적 사고를 쉽게 습득하는 이들조차 항상 더 많은 통찰을 얻을 수 있다는 점을 덧붙이고 싶다. 이 책에서는 방대한 내용을 간결하게 다루는데, 이 책을 쓰면서 나는 그런 간결함이 책의 성공에 필수적이라는 생각이 들었다. 소프트웨어 보안은 엄청나게 방대하고도 심오한 분야이므로, 간결한 책이어야만 더 널리 읽힐 것이라 기대한다. 모쪼록 독자 여러분이 새로운 방식으로 보안을 고려하고 이 새로운 관점을 여러분의 작업에 쉽게 적용할 수 있기를 바란다. - 로렌 콘펠더 [옮긴이의 말] 보안이란 주제는 다소 딱딱하고 어려운 느낌을 풍깁니다. 난해한 개념과 어려운 수학 등이 어우러져 전문가의 영역이라 간주되며, 모두가 관심은 많지만 접근하기 어려운 영역이라 여겨집니다. 그러나 이 책은 전문 보안 서적과는 다른 재미를 주는 책입니다. 이 책은 보안 엔지니어링에 대한 입문서로 보안의 기본 개념들과 소프트웨어 개발에서의 다양한 보안 사례를 풍부하게 다룹니다. 그간 보안을 주제로 한 책들은 적지 않게 출간됐지만 보안 전문가와 소프트웨어 개발자 모두를 대상으로 한 경우는 드물었다고 생각합니다. 네트워크 보안과 암호학 분야의 중요 인물로 공개 키 인프라(PKI) 개념을 제안하고, 프레리트 가그(Praerit Garg)와 함께 위협 모델링 분야의 걸출한 업적인 STRIDE 모델을 개발한 저자 로렌 콘펠더는 현대적인 소프트웨어 개발에서 보안이 매우 중요한 요소라 이야기합니다. 콘펠더는 이 책에서 소프트웨어 개발자와 보안 전문가가 소프트웨어를 설계하고 개발할 때 보안을 고려하는 방법에 대해 개념 수준부터 실사례까지 전반적으로 가이드해 줍니다. 어려운 개념을 나열하기보다는 저자가 현업에서 실제로 겪은 경험이나 각종 사례를 예로 들어 보안에 접근할 때의 장벽을 낮춰 주므로 개발 실무자들에게도 많은 도움이 될 것입니다. 이 책은 보안 개념부터 시작해, 보안 위협과 취약점 분석, 보안 모델링부터 사례 연구까지 보안에 관련한 많은 분야를 다룹니다. 또한 보안 설계 리뷰(SDR) 같은 각 조직이나 회사에서 보안을 적용할 때 도움이 되는 많은 팁이 담겨 있습니다. 따라서 이 책은 소프트웨어 개발 과정에 보안을 통합하고 싶은 개발자, 보안 전문가, 시스템 아키텍트, 보안 관리자 등 보안에 관련된 모든 이가 참고 자료로 활용할 수 있습니다. 더욱 안전한 소프트웨어를 개발하는 데 큰 도움이 될 책이라 확신합니다. - 김영기 요즘은 계정이 새로운 기기에서 로그인됐다거나, 해외에서 접속됐다거나, 아니면 미사용 중인 자산이 있으니 빨리 찾아가라는 등의 피싱 메시지를 받는 것이 일상이 됐다. 그중 일부는 너무나 교묘해서, 혹시 무심코 접속했다가 내 PC나 폰이 해킹되지 않을까 전전긍긍하는 일도 흔해졌다. 지난 여름에는 크라우드 스트라이크라는 사이버 보안 회사의 소프트웨어 업데이트 파일 오류로 수많은 윈도우 PC에 블루스크린이 발생하며 윈도우 부팅이 제대로 시작되지 않아 전 세계의 은행, 항공사, 방송국 등이 일대 혼란을 겪으며 우리나라 공항에서도 전산 마비 사태를 빚기도 했다. 사실 이제 이런 문제는 일상이 되어서 일일이 손으로 꼽기도 어려울 정도다. 모든 것이 인터넷으로 연결되면서 작은 실수와 한 번의 악의적인 공격으로 엄청난 피해가 초래되는 세상이 된 것이다. 그럼에도 소프트웨어 개발 현장에서 보안은 여전히 후순위로 밀려나기 일쑤다. 빠르게 변화하는 시장과 소비자의 요구를 따라잡기에도 벅차다 보니, 보안은 개발 막바지에나 고려하게 되곤 한다. 또한 아직도 IT 업계의 많은 종사자에게 보안은 반드시 전문가들에게 맡겨야 할, 난해하고 골치 아픈 문제로만 여겨진다. 앞으로 악의적인 공격은 AI 기술과 결합해 훨씬 더 교묘해질 것이고, 그로 인한 피해는 상상을 초월할 수도 있다. 이제 소프트웨어 보안을 더 이상 전문가에만 맡겨둘 수 없는 시대가 됐다. 진실은 진즉부터 그래야 했던 것이고, 우리가 그 진실을 외면해 왔을 뿐일 것이다. 개발자나 보안 전문가뿐만 아니라 업계의 모든 종사자들이 보안을 고려해서 각자의 직무를 수행해야만, 악의적인 공격과 사고로부터 자신과 조직, 고객의 소중한 자산을 지킬 수 있는 시대가 된 것이다. 이 책의 주요 기획의도는 소프트웨어 개발자들이 보안을 고려한 안전한 소프트웨어를 설계하고 구현하는 데 필요한 개념과 방법론을 설명하는 것이지만, 보안의 본질에 대한 통찰을 기반으로 보안에 필요한 마인드셋을 갖추는 데 초점이 맞춰져 있어, 번역을 진행하면서 개발자뿐만 아니라 모든 업계 종사자가 보안을 이해하는 데 더할 나위 없이 적합한 책이란 생각이 들었다. 이 책의 저자인 로렌 콘펠더는 누구보다도 보안의 본질을 얘기할 수 있는 자격이 있는 인물이다. 마이크로소프트와 구글에서 현대적 보안 기법의 기반을 구축했을 뿐만 아니라, 오늘날 널리 사용되는 암호화 기술의 핵심 기반인 디지털 인증서 시스템을 최초로 고안한 보안의 선구자다. 20여 년에 걸친 저자의 풍부한 실무 경험과 깊은 통찰이 이 책 곳곳에 녹아 들어 있다. 나 또한 이 책을 번역하면서, 그간 IT 업계에 오래 종사하며 알고 있던 보안에 대한 단편적인 지식들이 하나의 큰 그림으로 맞춰져 가는 것을 느낄 수 있었다. 모쪼록 이 책을 읽을 독자 여러분도 나와 비슷한 경험을 하기를 기대하며, 자신의 소프트웨어와 디지털 자산을 안전하게 지키는 데 도움을 얻기 바란다. - 박기성 |