본문 바로가기
+ 펴낸 책

모두를 위한 소프트웨어 보안 설계와 구현

by 책만 2024. 12. 2.

 

 모두를 위한 
 소프트웨어 보안 설계와 구현 

취약점 분석부터 위협 모델링과 완화 전략, 보안 패턴, 암호화까지
안전한 소프트웨어의 모든 것

로렌 콘펠더 지음 | 김영기, 박기성 옮김
424쪽 | 32,000원 | 2024년 12월 11일 출간 | 185*240*21 | ISBN 9791189909765 (93000)

판매처 | [교보문고] [YES24] [알라딘] [영풍문고] + 전국 교보/영풍문고 매장
전자책 판매처 | [교보문고] [YES24] [알라딘] [리디북스] | 2025년 1월 출간 예정

 원서: Designing Secure Software: A Guide for Developers

 

정오표: https://www.onlybook.co.kr/entry/secure-software-errata (아직 등록된 정오표가 없습니다)

소프트웨어 개발에 종사하는 모든 엔지니어가 읽어야 할 보안 실천 가이드!
MS와 구글에서 현대 보안 기술을 선도하고 디지털 인증서를 창시한 저자의 20년 노하우!

공개 키 인증서 개념을 최초로 만들고 마이크로소프트에서 위협 모델링 STRIDE 개념을 창안한 현대 보안 기술의 선구자인 로렌 콘펠더가 집대성한 보안 엔지니어링의 모든 것!

 

저자 로렌 콘펠더가 20여 년 동안 보안 업계에서 겪은 경험을 간결하고 세련되게 집약한 소프트웨어 보안 가이드로서, 소프트웨어 아키텍트, 디자이너, 개발자, IT 관리자를 비롯한 광범위한 소프트웨어 전문가를 위한 책이다. 저자는 소프트웨어 설계 초기부터 보안을 내재화하고 전체 팀이 함께 프로세스에 참여할 것을 강조한다. 

핵심 보안 개념인 신뢰, 위협, 완화, 보안 설계 패턴, 암호화를 설명하며 1부를 시작한다. 2부에서는 보안을 염두에 두고 소프트웨어를 설계하고 검토하는 과정을 다룬다. 마지막 3부에서는 C와 파이썬으로 작성된 다양한 코드 예제를 활용해 취약점이 만들어지는 코딩 결함에 대해 자세하게 살펴본다. 

소프트웨어의 미래에 대한 현대적이고 실용적인 모범사례, 통찰, 아이디어가 담겨 있으므로, IT 분야에 종사하는 누구나 읽어야 하는 필독서다.

 

 이 책 8장~12장에 수록된 소스코드:

nostarch_book1-master_2022-01-21_1554.zip
0.17MB

 

소스 코드는 각 장에서 설명하는 개념을 독자들의 이해하기 목적으로 제공된다. 따라서, 일부 과정이 빠져 있거나 완전히 동작하지 않을 수도 있으나, 각 장에서 설명하는 내용을 이해하는 데에는 어려움이 없을 것이다. 독자들은 약간의 추가적인 노력을 통해 해당 코드를 개선하고 비영리 목적에 한해 자유롭게 활용할 수 있다. 
이 책에서 제시하는 보안 지식을 책임감 있게 다뤄야 한다. 소프트웨어를 안전하게 만드는 방법을 설명하기 위해 이 책에서는 다양한 취약점이 어떻게 동작하는지, 공격자는 이 취약점을 어떻게 악용하는지를 정리했다. 실험은 공격과 방어 양면에서 스킬을 연마하는 좋은 방법이지만, 이런 지식은 사려 깊게 사용하는 것이 중요하다. 운영환경 시스템에서 보안을 연구하면서 실험적인 시도를 하는 것은 금물이다. 

 

★ 참고문헌 파일 다운로드:

#secure-software-references_20241211.pdf
0.52MB

 

 

| 이 책에서 다루는 내용 |
- 시스템에서 중요한 자산, 공격 표면, 신뢰 경계 식별 
- 다양한 위협 완화 조치에 대한 효과 평가 
- 잘 알려진 완화 조치와 보안 설계 패턴을 통한 작업 
- 크로스 사이트 스크립팅과 크로스 사이트 요청 위조, 메모리 결함 등의 취약점 
- 보안 테스팅을 이용한 코드 취약점의 사전 식별 
- 보안 결함을 찾기 위한 소프트웨어 설계의 객관적 평가
| 이 책의 대상 독자 |
- 보안에 초보인 사람들, 특히 보안을 어렵다고 느끼는 사람들
- 보안에 관심이 있지만 지식은 많지 않은, 보안에 대한 인식이 있는 독자들
- 보안 분야를 주도하는 보안 전문가들

추천의 글

로렌은 디지털 인증서의 창시자로서 지금까지 정보 보안에 엄청난 공헌을 했다. 그리고 이 책에서 그 여정을 이어간다. 
마틴 헬먼(Martin Hellman) / 스탠포드 대학 명예 교수, ACM 튜링상 수상자
여러분이 방금 읽기 시작한 이 책은 여러 면에서 특이하다. 방대하지는 않지만 진중하게 쓰였으며, 거의 코드 없이도 기술적인 내용을 훌륭히 다루는 책이다. 그리고 보안 전문가가 아닌 ‘일반 개발자를 위한 보안 책’이다. 저자 로렌이 직접 언급했듯이, 이 책은 대규모 상업용 제품을 출시하고 중요한 보안 기술을 창안했으며 제품 보안 분야에서 광범위하게 작업해온 이가 보안 기술에 대해 지극히 개인적 관점을 피력한 책이다.

이 책은 존중과 배려가 필요한 이들, 즉 보안에 새로이 입문한 IT 전문가를 위한 책이다. 보안 분야에 발을 내디딘 여러분을 환영한다. 이 책을 읽다 보면 알겠지만, 여러분이 다루는 시스템에 대해 내리는 개개의 선택은 곧바로 보안에 영향을 미칠 수 있다. 그러나 선택을 잘 내리기 위해 반드시 보안 전문가가 될 필요는 없다. 이 책에서는 다양한 주제를 다룬다. 만일 여러분이 여기서 더 깊이 들어가고 싶다면, 더 읽을 만한 자료들이 많다. 하지만 그냥 여기서 배운 것만 적용해도 잘 해낼 수 있을 것이다.
애덤 쇼스택(Adam Shostack) / 『보안 위협 모델링』 저자, 워싱턴대학교 폴 앨런 컴퓨터공학대학 겸임교수
1996년 유럽 우주국에서 70억 달러를 투자해 10년간 구축한 로켓이 채 1분도 되기 전에 비행 경로를 이탈하면서 폭발한 사고가 있었습니다(이 책의 13장 참조). 사고 원인은 놀랍게도 정수 오버플로(9장 참조)라는 소프트웨어 설계의 결함 때문이었습니다. 안전한 소프트웨어를 설계하는 작업은 복잡한 건축물이나 때로는 인공위성 발사만큼 실로 매우 까다롭습니다. 이 글을 쓰기 직전인 지난 주에도 xz라는 리눅스 압축 유틸리티가 사용되는 라이브러리에서 백도어가 존재할 가능성이 발견되어 전 세계가 발칵 뒤집힐 만큼 시끄러웠습니다. 왜냐하면 수많은 시스템에서 사용하고 있는 소프트웨어의 공급망에 결함이 있는 코드가 존재할 경우 그 영향력은 상상을 초월하기 때문이죠. 로켓 사고 이후 30년 가까이 지난 지금도 여전히 안전한 소프트웨어를 설계하고 구현하는 작업의 난이도는 코드의 규모와 복잡성 때문에 별반 다르지 않거나 오히려 더 높아졌습니다.

이 책은 안전한 소프트웨어를 설계하기 위한 여러 주제를 크게 3가지 측면에서 잘 다루고 있습니다. 우선 기본 개념으로서, 고전적인 정보 보안의 원칙, 위협과 완화, 암호화, 일반적인 원칙 등을 다룹니다. 다음으로 설계 관점에서, 소프트웨어 설계 시점에 보안이라는 요소를 고려하는 방식을 설명하며, 마지막으로, 구현 관점에서 안전한 프로그래밍, 소프트웨어 결함의 종류와 입력값 통제, 보안 테스팅과 모범사례까지 폭넓게 다룹니다. 한마디로, 좀 더 큰 관점에서 나무를 볼 수 있도록 소프트웨어 설계와 구현 프로세스 전체에서 보안을 고려할 수 있는 방법을 여러 예시와 함께 안내하는 좋은 기본서입니다. 모든 내용을 한 권에 종합해 다루므로 이를 바탕으로 각자 궁금한 주제에 대해 세부내용을 더 찾아보고 익힐 수 있는 좋은 나침반 역할을 해줄 것입니다.
구형준 / 성균관대학교 소프트웨어융합대학 소프트웨어학과 교수
이 책은 20여 년이 넘는 로렌 콘펠더의 경험을 토대로 작성된 보안에 관한 실전 가이드로, 소프트웨어 설계 초기에 보안을 구축하고 팀 전체를 참여시키는 것을 강조합니다. 핵심 개념인 ‘신뢰, 위협, 완화, 보안 설계 패턴, 암호화’ 등을 집중해 다루며, 보안 고려사항을 염두에 두고 소프트웨어를 설계하고 검토하는 프로세스를 다룹니다. 또한, 취약점을 만드는 일반적인 코딩 결함을 자세히 설명하고, 보안 테스트를 통해 취약점을 사전에 식별하는 방법을 소개합니다. 소프트웨어 공학의 전반적인 개발생명주기에서 보안이라는 특별한 관점에서 유의사항을 친절히 안내하므로 보안이라는 설계 요인을 고려한 개발에 실질적인 도움을 받을 수 있습니다.

마이크로소프트와 구글에서 지낸 저자의 경력을 토대로 쓰여진 이 책은 모든 수준의 소프트웨어 엔지니어가 안전한 소프트웨어를 만드는 데 필요한 보안 사고방식과 도구를 제공합니다. 또한, 소프트웨어 제작과 관련된 모든 사람에게도 잠재적인 영향을 미치며, 특히 IT 프로젝트 관리자는 코드 수준의 상세 내용까지 뛰어들지 않아도 되기 때문에 많은 도움을 받을 수 있습니다. 
실제로 해본 사람만이 다룰 수 있는 다양한 얘기들이기에 소프트웨어 엔지니어와 관리자들에게 훌륭한 리소스를 제공하리라 기대합니다.
김진태 / 서강대 정보통신대학원 대우교수, (주)스펙트라 CTO
다년간 보안 컨설턴트 및 개발 조직장으로서 개발 팀과 긴밀하게 함께 일하며 다양한 소프트웨어 코드 분석과 구현에 참여해왔다. 그 과정 중에 가장 큰 아쉬움이라면 개발과 보안이 아직까지 완벽한 조화를 이루지 못한다는 점이다. 개발자와 이용자 모두 안전하고 신뢰할 수 있는 소프트웨어를 원하지만, 촉박한 일정, 부족한 리소스로 인해 보안이 후순위로 밀리거나, 부족한 보안 설계 및 구현 경험과 지식으로 인해 원하지 않는 결과물이 도출되는 경우가 많다. 

이 책은 20년 넘게 보안 전문가, 개발 조직장으로서 일해온 저자가 평소 전하고 싶었던 개발과 보안에 대한 소신과 경험, 지식을 잘 담아 냈으며, 경험이 부족한 개발자나 보안 담당자가 알아야 하는 기본 개념과 현장에서 마주할 수 있는 다양한 문제들을 다룬다. 이에 독자는 다양한 취약 코드를 살펴봄으로써 문제의 원인을 이해하고 개선하는 데 도움을 얻을 수 있다. 
완벽한 소프트웨어를 개발하고자 하는 개발자, 보안 취약점을 이해하고자 하는 보안 담당자, 그리고 핸드북으로 활용하고자 하는 보안 전문가에게 이 책을 추천한다.
여성구 / 하이브(HYBE) CISO, CPO, DPO 
이 책은 보안 분야가 전문가만의 영역이 아니라 프로젝트에 참여하는 인력 모두가 고민해야 하는 핵심 개념이라는 인식을 심어 줍니다. 특히 1부 ‘안전한 소프트웨어를 위한 기본 개념’은 막연하게 이해하고 있던 보안이라는 개념을 쉽게 이해시키며 용어부터 정확하게 알려주기에 인력 간/부서 간에 나타나는 다양한 보안 이슈를 쉽게 해결할 수 있는 기초를 제공해 줍니다. 이 책의 각 장에는 개발 단계별로 항상 옆에 두고 참고해야 하는 체크리스트와 같은 곱씹을 내용이 많이 담겨 있습니다. 특히, 부록으로 수록된 용어집은 미리 알고 있던 내용이더라도 다시 한번 개념을 정리해주므로 본문을 읽기에 앞서 미리 읽어 보기 바랍니다. 
최근 대두되는 보안 이슈가 고민인 분이라면 이 책이 좋은 길잡이가 될 것을 믿어 의심치 않습니다.
이호상 / 삼성전자 네트워크사업부 SE 그룹, SW 개발 프로세스 담당 수석
보안과 품질은 어쩌면 닮은 면이 많은 것 같습니다. 제품이 성공적으로 출시되면 크게 티가 나지 않지만, 출시 이후 보안이나 품질 관련 이슈들이 드러나기 시작하면 그제서야 개발 단계에서 챙기지 못했던 것들, 아쉬웠던 것들을 복기하고 한발 늦게 미래를 대비하는 전략을 세우곤 합니다. 항상 마음은 먼저 앞서지만 현실적으로 실행은 쉽지 않다는 측면에서 보안과 품질에 종사하는 사람들은 늘 비슷한 아쉬움을 가지고 있을 겁니다. 

이 책은 오랫동안 소프트웨어 보안 업무에 종사한 저자의 경험과 노하우가 그대로 드러나는 책입니다. 소프트웨어 보안에 대한 기본적인 개념과 방법론뿐만 아니라, 실무에 바로 적용할 수 있는 코드 작성법과 테스팅 방법론 등은 소프트웨어 보안과 관련된 업무를 수행하는 사람들이라면 반드시 읽어봐야 할 내용이라 생각됩니다. 소프트웨어의 품질을 관리하고 있는 저는 특히 12장의 보안 테스팅에서 많은 도움을 얻었습니다. 12장의 내용들은 보안 테스팅을 새롭게 시작하거나, 기존 보안 테스팅을 리뉴얼해야 하는 QA들에게 매우 유용하리라 생각합니다. 

보안과 관련된 업무에 익숙하지 않은 분들은 부록에 수록된 용어집을 참고하시면서 천천히 책을 정독하시길 추천해 드립니다. 저자의 실전 경험은 물론이고, 다양하고 쉽게 이해할 수 있는 예제들 덕분에 다소 어렵게 느껴지던 소프트웨어 보안이라는 분야가 한 편의 흥미로운 다큐멘터리를 보듯이 잘 정리되는 느낌을 받을 수 있을 겁니다. 모쪼록 독자 여러분들도 이 책을 통해 소프트웨어 보안을 먼저 챙기지 못하던 아쉬움을 덜어내고, 좀 더 단단해진 소프트웨어를 개발하고 출시할 수 있기를 바라 봅니다
진석준 / 데브시스터즈 기술본부 SQA
오늘날 수많은 소프트웨어 제품들이 오픈소스를 포함하거나 기반으로 개발되고 있으며 COTS 서버 기반의 소프트웨어 제품으로 변경되고 있습니다. 이렇듯 오픈소스 사용이 증가함에 따라 보안에 대한 위협이나 요구 또한 급증하고 있음에도, 여전히 소프트웨어 개발자들은 보안을 그저 특정 보안 인력이 전담해야 하는 것으로 인식하거나 끊임없이 제기되는 취약점의 특성에도 불구하고 보안 취약점을 일시에 보완하면 될 뿐이라고 한정해서 생각하는 경향이 큽니다. 그러다 보니 보안 취약점에 대한 처리를 미루고 미루다가 출시 마지막 단계에서 수습하거나 출시 후에 보완하는 경우가 많이 발생합니다.

이 책은 소프트웨어 개발자들에게 보안의 중요 개념은 무엇이며 보안이 왜 필요한지를 알려주며, 개발 초기 계획과 설계 시점에서는 위협 모델링부터 시작해야 함을 강조하고, 개발 프로세스 전반에 걸쳐 보안을 각 단계에 통합해 지속적으로 유지하고 개선해야 한다는 점을 일깨워줍니다. 개발자뿐 아니라 보안 담당자에게도 보안 관련 핵심 개념들을 다시 각인시켜 줄 뿐 아니라 실질적인 해결책을 찾도록 가이드하기에, 보안 관련 종사자들(감사, 회계, 컨설팅 등)이나 각종 자격증에 도전하는 독자들에게도 보안 관련 지식과 용어들에 대한 이해의 폭을 넓혀 줄 것입니다. 이에 이 책은 무엇보다도, 모두가 보안에 대한 공통의 이해와 언어를 갖고 서로 소통하는 데 커다란 역할을 해줄 것이라 기대가 큽니다.
황철훈 / 삼성전자 네트워크사업부 시큐리티 랩, 보안 담당 수석, CISSP

지은이 로렌 콘펠더 Loren Kohnfelder

50여 년 전에 프로그래밍을 시작했다. MIT 학부생 시절 졸업 논문으로 제출한 「실용적인 공개 키 암호화 시스템을 향해(Towards a Practical Public-Key Cryptosystem)」는 사상 처음으로 디지털 인증서와 공개 키 인프라(PKI)의 기초를 설명한 논문이었다.
펀치카드, 디스크 컨트롤러 작성, 링킹 로더, 비디오 게임, 2차례의 일본 근무부터 반도체 연구소의 장비 제어 소프트웨어에 이르기까지 다방면의 프로그래밍 작업을 아우르는 소프트웨어 경력을 자랑한다. 마이크로소프트에 재직할 당시 인터넷 익스플로러(IE) 팀의 보안 업무로 복귀했으며, 이후 닷넷(.NET) 플랫폼 보안 팀에서 업계 최초의 사전 예방적 보안 프로세스 방법론에 기여한 바 있다.
최근에는 구글에서 보안 팀 소프트웨어 엔지니어로 일했으며, 개인정보보호 팀의 창립 멤버로서 대규모 상용 시스템에 대한 보안 설계 리뷰를 100회 이상 수행했다.

여러 해에 걸쳐 나는 동료들 사이에 보안에 대한 얘기를 조심스레 알리려고 노력해왔다. 그럼에도 언제나 보안에 대해 빠르게 이해하는 사람이 있는 반면, 그렇지 않은 사람도 있다. 사람들이 왜 그리 다르게 반응하는지는 미스테리다. 어쩌면 기술적인 이유보단 심리적인 이유일 수 있으며, 이는 흥미로운 질문으로 이어진다. 보안을 ‘알게 된다’는 것은 무엇을 의미하며, 또 어떻게 가르칠 것인가? 세계적 수준의 지식이나 통달에 대한 얘기가 아니다. 그저, 도전 과제를 인식하고 점진적 개선을 이루기 위한 기초적 이해를 갖추는 정도면 된다. 일단 그 지점에 이른 소프트웨어 전문가들은 공부를 계속해 간극을 메울 수 있다. 바로 이것이 이 책의 목표다.

이 책을 쓰면서 나도 보안 적용 과정에서 수반되는 어려움을 깊이 이해하게 됐다. 처음에는 이런 종류의 책이 아직 존재하지 않는다는 사실에 놀랐지만 이제는 그 이유를 알 것 같다. 보안 개념은 직관에 반할 때가 많다. 공격은 우회적이고 모호하며, 소프트웨어 설계는 그 자체가 이미 매우 추상적이기 때문이다. 오늘날 소프트웨어는 매우 풍부하고 다양하기 때문에 소프트웨어 보안은 실로 어려운 과제다. 소프트웨어 보안은 여전히 해결되지 않은 문제지만, 우리는 이미 많은 부분을 이해했고 점점 더 능숙해지고 있다. 이렇게 급변하는 목표가 아니라면 더 좋았겠지만 말이다! 분명히 나도 모든 문제에 대해 완벽한 해답을 알고 있지는 못하다. 보안 문제에 대한 기초적인 해결책들은 이미 우리의 소프트웨어 플랫폼에 내재돼 있다. 따라서 남아 있는 문제는 전부 어려운 것뿐이다.

 이 책에서는 전략적으로 보안 의식의 개념과 개발을 강조한다. 이러한 전략적 강조는 더 많은 사람들이 보안에 기여하도록 장려하며, 많은 이의 참여를 통해 신선한 관점이 더욱 다양하게 늘어나고 보안에 대해 더 일관된 초점을 유지할 수 있다.
내가 가장 좋아하는 주제인 보안 분야로의 여행에 여러분이 동참해주기를 바란다. 이 책에서 나는 흥미로운 통찰과 효과적인 방법론을 최대한 공유하고자 한다. 이 책이 소프트웨어 설계 단계부터 보안을 통합시키고, 프로세스 전반에 걸쳐 보안을 고려하는 것의 가치를 여러분에게 납득시킬 수 있다면, 그리고 여러분이 이 책의 내용을 뛰어넘어 더욱 발전한다면, 내 바람은 이뤄진 것이다.

옮긴이 김영기

삼성전자 네트워크 사업부 SE 그룹에서 소프트웨어 개발과 관련한 다양한 업무를 수행하고 있다. 주요 이력으로는 지능망(IN)과 모바일 자바 애플리케이션 개발, 정적 분석과 소프트웨어 구조 분석 등이 있다. 현재는 형상 관리와 SW 개발 전략을 담당하고 있으며 소프트웨어 개발과 관련 조직 구조와 개발 문화, 애자일과 데브옵스, 인프라 자동화, 데이터 사이언스 등에 관심이 많다. 보안과 관련해 5G 통신장비 보안 인증인 NESAS 인증을 위한 사업부 TF 멤버로도 활동했다. 『프로메테우스, 오픈소스 모니터링 시스템』(책만, 2019), 『만들면서 배우는 헥사고날 아키텍처 설계와 구현』(위키북스, 2022) 등을 번역하며 기술 번역가로도 활동하고 있다.

보안이란 주제는 다소 딱딱하고 어려운 느낌을 풍깁니다. 난해한 개념과 어려운 수학 등이 어우러져 전문가의 영역이라 간주되며, 모두가 관심은 많지만 접근하기 어려운 영역이라 여겨집니다. 그러나 이 책은 전문 보안 서적과는 다른 재미를 주는 책입니다. 이 책은 보안 엔지니어링에 대한 입문서로 보안의 기본 개념들과 소프트웨어 개발에서의 다양한 보안 사례를 풍부하게 다룹니다. 그간 보안을 주제로 한 책들은 적지 않게 출간됐지만 보안 전문가와 소프트웨어 개발자 모두를 대상으로 한 경우는 드물었다고 생각합니다.

네트워크 보안과 암호학 분야의 중요 인물로 공개 키 인프라(PKI) 개념을 제안하고, 프레리트 가그(Praerit Garg)와 함께 위협 모델링 분야의 걸출한 업적인 STRIDE 모델을 개발한 저자 로렌 콘펠더는 현대적인 소프트웨어 개발에서 보안이 매우 중요한 요소라 이야기합니다. 콘펠더는 이 책에서 소프트웨어 개발자와 보안 전문가가 소프트웨어를 설계하고 개발할 때 보안을 고려하는 방법에 대해 개념 수준부터 실사례까지 전반적으로 가이드해 줍니다. 어려운 개념을 나열하기보다는 저자가 현업에서 실제로 겪은 경험이나 각종 사례를 예로 들어 보안에 접근할 때의 장벽을 낮춰 주므로 개발 실무자들에게도 많은 도움이 될 것입니다.

이 책은 보안 개념부터 시작해, 보안 위협과 취약점 분석, 보안 모델링부터 사례 연구까지 보안에 관련한 많은 분야를 다룹니다. 또한 보안 설계 리뷰(SDR) 같은 각 조직이나 회사에서 보안을 적용할 때 도움이 되는 많은 팁이 담겨 있습니다. 따라서 이 책은 소프트웨어 개발 과정에 보안을 통합하고 싶은 개발자, 보안 전문가, 시스템 아키텍트, 보안 관리자 등 보안에 관련된 모든 이가 참고 자료로 활용할 수 있습니다. 더욱 안전한 소프트웨어를 개발하는 데 큰 도움이 될 책이라 확신합니다.

옮긴이 박기성

IT 업계와 게임업계에서 기획자, 설계자, PD, 개발총괄 임원, 창업자, 대표이사로서 오랜 기간 활동하며 다양한 프로젝트를 수행했다. SK㈜를 거쳐, 직접 창업하고 대표이사를 맡았던 엔플레이 등에서 근무했으며, 가장 최근에는 게임빌, 컴투스의 개발 담당 임원으로 일했다. 
게임 외에도 IT 업계에 대한 다양한 관심을 바탕으로 경력 중간 틈틈이 (때로는 필명으로 활약하며) 20여 권에 달하는 게임 및 IT 분야 도서를 번역해 왔다. 대표 번역서로는 『알고리즘으로 세상을 지배하라』(이하 에이콘출판, 2016), 『닌텐도는 어떻게 세계를 정복했는가』(2015)가 있으며 『인 더 플렉스: 0과 1로 세상을 바꾸는 구글』(2012)을 번역 감수했다.

요즘은 계정이 새로운 기기에서 로그인됐다거나, 해외에서 접속됐다거나, 아니면 미사용 중인 자산이 있으니 빨리 찾아가라는 등의 피싱 메시지를 받는 것이 일상이 됐다. 그중 일부는 너무나 교묘해서, 혹시 무심코 접속했다가 내 PC나 폰이 해킹되지 않을까 전전긍긍하는 일도 흔해졌다. 지난 여름에는 크라우드 스트라이크라는 사이버 보안 회사의 소프트웨어 업데이트 파일 오류로 수많은 윈도우 PC에 블루스크린이 발생하며 윈도우 부팅이 제대로 시작되지 않아 전 세계의 은행, 항공사, 방송국 등이 일대 혼란을 겪으며 우리나라 공항에서도 전산 마비 사태를 빚기도 했다. 사실 이제 이런 문제는 일상이 되어서 일일이 손으로 꼽기도 어려울 정도다.

모든 것이 인터넷으로 연결되면서 작은 실수와 한 번의 악의적인 공격으로 엄청난 피해가 초래되는 세상이 된 것이다. 그럼에도 소프트웨어 개발 현장에서 보안은 여전히 후순위로 밀려나기 일쑤다. 빠르게 변화하는 시장과 소비자의 요구를 따라잡기에도 벅차다 보니, 보안은 개발 막바지에나 고려하게 되곤 한다. 또한 아직도 IT 업계의 많은 종사자에게 보안은 반드시 전문가들에게 맡겨야 할, 난해하고 골치 아픈 문제로만 여겨진다. 

앞으로 악의적인 공격은 AI 기술과 결합해 훨씬 더 교묘해질 것이고, 그로 인한 피해는 상상을 초월할 수도 있다. 이제 소프트웨어 보안을 더 이상 전문가에만 맡겨둘 수 없는 시대가 됐다. 진실은 진즉부터 그래야 했던 것이고, 우리가 그 진실을 외면해 왔을 뿐일 것이다. 개발자나 보안 전문가뿐만 아니라 업계의 모든 종사자들이 보안을 고려해서 각자의 직무를 수행해야만, 악의적인 공격과 사고로부터 자신과 조직, 고객의 소중한 자산을 지킬 수 있는 시대가 된 것이다.  

이 책의 주요 기획의도는 소프트웨어 개발자들이 보안을 고려한 안전한 소프트웨어를 설계하고 구현하는 데 필요한 개념과 방법론을 설명하는 것이지만, 보안의 본질에 대한 통찰을 기반으로 보안에 필요한 마인드셋을 갖추는 데 초점이 맞춰져 있어, 번역을 진행하면서 개발자뿐만 아니라 모든 업계 종사자가 보안을 이해하는 데 더할 나위 없이 적합한 책이란 생각이 들었다. 

이 책의 저자인 로렌 콘펠더는 누구보다도 보안의 본질을 얘기할 수 있는 자격이 있는 인물이다. 마이크로소프트와 구글에서 현대적 보안 기법의 기반을 구축했을 뿐만 아니라, 오늘날 널리 사용되는 암호화 기술의 핵심 기반인 디지털 인증서 시스템을 최초로 고안한 보안의 선구자다. 20여 년에 걸친 저자의 풍부한 실무 경험과 깊은 통찰이 이 책 곳곳에 녹아 들어 있다. 나 또한 이 책을 번역하면서, 그간 IT 업계에 오래 종사하며 알고 있던 보안에 대한 단편적인 지식들이 하나의 큰 그림으로 맞춰져 가는 것을 느낄 수 있었다. 

모쪼록 이 책을 읽을 독자 여러분도 나와 비슷한 경험을 하기를 기대하며, 자신의 소프트웨어와 디지털 자산을 안전하게 지키는 데 도움을 얻기 바란다.

차례

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 핵심 요약 자료

댓글