[이 책에서 다루는 내용]
이 책은 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는 핵심 개념과 과정을 요약한 자료 모음이다.
■[옮긴이의 말]
보안이란 주제는 다소 딱딱하고 어려운 느낌을 풍깁니다. 난해한 개념과 어려운 수학 등이 어우러져 전문가의 영역이라 간주되며, 모두가 관심은 많지만 접근하기 어려운 영역이라 여겨집니다. 그러나 이 책은 전문 보안 서적과는 다른 재미를 주는 책입니다. 이 책은 보안 엔지니어링에 대한 입문서로 보안의 기본 개념들과 소프트웨어 개발에서의 다양한 보안 사례를 풍부하게 다룹니다. 그간 보안을 주제로 한 책들은 적지 않게 출간됐지만 보안 전문가와 소프트웨어 개발자 모두를 대상으로 한 경우는 드물었다고 생각합니다.
네트워크 보안과 암호학 분야의 중요 인물로 공개 키 인프라(PKI) 개념을 제안하고, 프레리트 가그(Praerit Garg)와 함께 위협 모델링 분야의 걸출한 업적인 STRIDE 모델을 개발한 저자 로렌 콘펠더는 현대적인 소프트웨어 개발에서 보안이 매우 중요한 요소라 이야기합니다. 콘펠더는 이 책에서 소프트웨어 개발자와 보안 전문가가 소프트웨어를 설계하고 개발할 때 보안을 고려하는 방법에 대해 개념 수준부터 실사례까지 전반적으로 가이드해 줍니다. 어려운 개념을 나열하기보다는 저자가 현업에서 실제로 겪은 경험이나 각종 사례를 예로 들어 보안에 접근할 때의 장벽을 낮춰 주므로 개발 실무자들에게도 많은 도움이 될 것입니다.
이 책은 보안 개념부터 시작해, 보안 위협과 취약점 분석, 보안 모델링부터 사례 연구까지 보안에 관련한 많은 분야를 다룹니다. 또한 보안 설계 리뷰(SDR) 같은 각 조직이나 회사에서 보안을 적용할 때 도움이 되는 많은 팁이 담겨 있습니다. 따라서 이 책은 소프트웨어 개발 과정에 보안을 통합하고 싶은 개발자, 보안 전문가, 시스템 아키텍트, 보안 관리자 등 보안에 관련된 모든 이가 참고 자료로 활용할 수 있습니다. 더욱 안전한 소프트웨어를 개발하는 데 큰 도움이 될 책이라 확신합니다.
- 김영기
요즘은 계정이 새로운 기기에서 로그인됐다거나, 해외에서 접속됐다거나, 아니면 미사용 중인 자산이 있으니 빨리 찾아가라는 등의 피싱 메시지를 받는 것이 일상이 됐다. 그중 일부는 너무나 교묘해서, 혹시 무심코 접속했다가 내 PC나 폰이 해킹되지 않을까 전전긍긍하는 일도 흔해졌다. 지난 여름에는 크라우드 스트라이크라는 사이버 보안 회사의 소프트웨어 업데이트 파일 오류로 수많은 윈도우 PC에 블루스크린이 발생하며 윈도우 부팅이 제대로 시작되지 않아 전 세계의 은행, 항공사, 방송국 등이 일대 혼란을 겪으며 우리나라 공항에서도 전산 마비 사태를 빚기도 했다. 사실 이제 이런 문제는 일상이 되어서 일일이 손으로 꼽기도 어려울 정도다.
모든 것이 인터넷으로 연결되면서 작은 실수와 한 번의 악의적인 공격으로 엄청난 피해가 초래되는 세상이 된 것이다. 그럼에도 소프트웨어 개발 현장에서 보안은 여전히 후순위로 밀려나기 일쑤다. 빠르게 변화하는 시장과 소비자의 요구를 따라잡기에도 벅차다 보니, 보안은 개발 막바지에나 고려하게 되곤 한다. 또한 아직도 IT 업계의 많은 종사자에게 보안은 반드시 전문가들에게 맡겨야 할, 난해하고 골치 아픈 문제로만 여겨진다.
앞으로 악의적인 공격은 AI 기술과 결합해 훨씬 더 교묘해질 것이고, 그로 인한 피해는 상상을 초월할 수도 있다. 이제 소프트웨어 보안을 더 이상 전문가에만 맡겨둘 수 없는 시대가 됐다. 진실은 진즉부터 그래야 했던 것이고, 우리가 그 진실을 외면해 왔을 뿐일 것이다. 개발자나 보안 전문가뿐만 아니라 업계의 모든 종사자들이 보안을 고려해서 각자의 직무를 수행해야만, 악의적인 공격과 사고로부터 자신과 조직, 고객의 소중한 자산을 지킬 수 있는 시대가 된 것이다.
이 책의 주요 기획의도는 소프트웨어 개발자들이 보안을 고려한 안전한 소프트웨어를 설계하고 구현하는 데 필요한 개념과 방법론을 설명하는 것이지만, 보안의 본질에 대한 통찰을 기반으로 보안에 필요한 마인드셋을 갖추는 데 초점이 맞춰져 있어, 번역을 진행하면서 개발자뿐만 아니라 모든 업계 종사자가 보안을 이해하는 데 더할 나위 없이 적합한 책이란 생각이 들었다.
이 책의 저자인 로렌 콘펠더는 누구보다도 보안의 본질을 얘기할 수 있는 자격이 있는 인물이다. 마이크로소프트와 구글에서 현대적 보안 기법의 기반을 구축했을 뿐만 아니라, 오늘날 널리 사용되는 암호화 기술의 핵심 기반인 디지털 인증서 시스템을 최초로 고안한 보안의 선구자다. 20여 년에 걸친 저자의 풍부한 실무 경험과 깊은 통찰이 이 책 곳곳에 녹아 들어 있다. 나 또한 이 책을 번역하면서, 그간 IT 업계에 오래 종사하며 알고 있던 보안에 대한 단편적인 지식들이 하나의 큰 그림으로 맞춰져 가는 것을 느낄 수 있었다.
모쪼록 이 책을 읽을 독자 여러분도 나와 비슷한 경험을 하기를 기대하며, 자신의 소프트웨어와 디지털 자산을 안전하게 지키는 데 도움을 얻기 바란다.
- 박기성