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