이 책은 소프트웨어 보안 분야의 필수 개념을 더 잘 이해하고 안전한 소프트웨어 설계와 구현을 배우고자 하는 소프트웨어 전문가를 위한 가이드다. 여기서 다루는 주제 중 몇 가지는 운 좋게도 내가 직접 혁신할 수 있었으며, 그 밖의 주제들 역시 발전하고 뿌리내리는 과정을 지켜봤다. 업계에서의 내 경험을 바탕으로, 여러분이 작업하는 소프트웨어를 더 안전하게 만들기 위해 바로 실행할 수 있는 아이디어를 이 책에 가득 담았다.
이 책은 2가지 중심 주제를 다룬다. 소프트웨어 전문가들이 소프트웨어 구축 과정 초기에 보안에 집중하도록 장려하는 것, 그리고 전체 팀이 보안에 대한 책임을 질 뿐만 아니라 보안 프로세스에까지 동참하게 하는 것이다. 확실히 이 두 영역 모두에서 아직 개선의 여지가 충분하며, 이 책은 이런 목표들을 실현하는 방법을 보여준다.
나는 경력 내내 소프트웨어 보안의 최전선에서 일할 수 있는 흔치 않은 기회를 얻었고, 이제 내가 배운 것을 가능한 대로 폭넓게 공유하고 싶다. 20여 년 전, 나는 마이크로소프트에서 대규모 소프트웨어 기업에 위협 모델링을 최초로 적용한 팀에 속해 일한 적이 있다. 몇 년 후 구글에서도 그와 동일한 기법을 발전시키는 일에 참여했으며, 문제점에 접근하는 완전히 새로운 방식을 이때 경험했다. 이 책의 2부에서는 내가 수행한 100회 이상의 설계 리뷰를 통해 얻게 된 정보를 살펴본다. 우리가 거쳐온 길을 돌아봄으로써 커다란 시각을 얻고 모든 것을 새롭게 설명할 수 있게 됐다.
소프트웨어 시스템을 설계, 구축, 운영하는 일은 본질적으로 위험을 수반한다. 모든 단계에 걸쳐 모든 선택은 보안 취약점을 초래하는 위험을 높이기도 낮추기도 한다. 이 책은 누구보다도 내가 가장 잘 아는 것, 그리고 직접 경험하며 배운 것들을 다룬다. 이 책에서 나는 보안적 사고를 첫 번째 원칙부터 전달하고, 어떻게 해야 개발 전반에 걸쳐 보안을 내재화할 수 있을지를 살펴보고자 한다. 이 과정에서 제공하는 설계와 코드 예시는 대체로 특정 기술에 의존하지 않으므로 매우 광범위하게 적용될 수 있다. 본문에는 다양한 일화, 비유, 사례들을 많이 가미해서 추상적인 아이디어를 최대한 효과적으로 전달한다.
보안적 사고를 체득하는 데는 저마다 개인 차가 있다. 따라서 나는 직관을 기르는 데 중점을 둠으로써 여러분이 자신의 작업에서 소프트웨어 보안 관점을 촉진할 수 있는 새로운 방법을 생각해내는 데 도움을 주려 한다. 내 경험에 따르면, 태생적으로 보안적 사고를 쉽게 습득하는 이들조차 항상 더 많은 통찰을 얻을 수 있다는 점을 덧붙이고 싶다.
이 책에서는 방대한 내용을 간결하게 다루는데, 이 책을 쓰면서 나는 그런 간결함이 책의 성공에 필수적이라는 생각이 들었다. 소프트웨어 보안은 엄청나게 방대하고도 심오한 분야이므로, 간결한 책이어야만 더 널리 읽힐 것이라 기대한다. 모쪼록 독자 여러분이 새로운 방식으로 보안을 고려하고 이 새로운 관점을 여러분의 작업에 쉽게 적용할 수 있기를 바란다.