Secure Coding in C and C++

@codemaru · January 24, 2008 · 6 min read

책소개
Secure Coding in C and C++

편리한 세상이다. 은행에 가지 않고도 컴퓨터 앞에서 인터넷 뱅킹을 이용해서 거래를 할 수 있고, 증권사에 직접 전화를 걸지 않고도 HTS를 사용하면 원하는 대로 주식을 사고 팔 수 있다. 더 이상 약도를 그려주지 않아도 된다. 주소만 불러주면 GPS를 사용한 네비게이션 시스템이 현재 위치에서의 최단 거리를 찾아주기 때문이다. 휴대폰 속 전화번호부 기능은 너무 좋아서 요즘은 전화번호를 외우고 다니는 사람을 만나기가 힘들다. 점점 더 많은 일들이 컴퓨터로 처리되고 있고, 사람의 손이 개입되지 않는 일들이 늘어나고 있다.

이런 시대에 개발자로 살아가는 필자에게 가장 먼저 드는 생각은 ‘위험하다’라는 것이다. 자동화 될수록 편리함은 늘어나지만 뭔가 오류가 발생했을 때 바로잡는 과정이 힘들어지기 때문이다. 의도하지 않은 계좌로 잔고가 빠져나간다거나, 자신이 원하지 않는 시점에 주식이 팔린다거나 하는 일들이 벌어질 수 있다. 더 이상 영화 속 이야기가 아니다. 실제로 얼마 전 필자와 같이 근무하는 동료 한 분은 ATM 기계의 오류로 이러한 일을 겪었고, 매우 힘들게 잘못된 금액을 다시 계좌로 돌려 받을 수 있었다. ATM 기계에 오류가 발생했다는 그 쪽지 한 장이 없었다면 그마저도 돌려받지 못하는 상황이 발생할 뻔 했다.

이런 ‘위험함’을 보다 더 잘 느끼기 위해서는 좀 더 극적인 시스템을 생각해 보는 것이 도움이 된다. 로켓이나 수술실에 들어가는 프로그램을 상상해보자. 과연 이러한 프로그램 속의 버그가 문제를 일으킨다면 어떻게 될까? 그 대가는 몇 천억의 예산이 집행된 프로젝트의 실패나 한 사람의 죽음을 의미한다. 실제로 아리안 5호는 정수 오버플로 문제로 발사 40초 만에 폭발했다. 아리안 5호의 총 개발비는 80억 달러의 이른다. 물론 많은 개발자들이 이런 극도로 미션 크리티컬한 시스템 개발에 참여하고 있는 것은 아니다. 하지만 분명히 알아야 할 점은 사회가 점점 자동화되고 고도화될 수록 시스템간 결합도는 증가한다는 점이다. 자신이 만든 사소한 시스템이 언제 그러한 시스템과 결합될지는 모를 일이다.

위험한 세상이 오고 있음에도 많은 개발자들은 여전히 안전 불감증 상태다. 자신이 만든 프로그램의 어디가 위험한지, 안전하게 만들기 위해서는 어떤 부분들에 신경을 써야 하는지를 모르는 경우가 대부분이다. 돌아가기만 하는 프로그램을 만드는데 급급한 사회적 풍토 때문인지도 모르겠다. 하지만 앞으로는 단지 돌아가는 것만으로는 부족하다. 안전하게 만드는 것이 더 중요한 시대가 오고 있다.

Secure Coding in C and C++은 C/C++개발자들이 이러한 부분을 인식하는데 좋은 출발점이 될 수 있는 책이다. 어떤 부분이 위험한지 문제를 보여주고 그것에 대한 대처 방법을 상세하게 소개한다. 300페이지가 조금 넘는 얇은 책 속에 이론과 실전을 담백하게 담아내고 있다. 지나치게 원리에 치우친 기존 책들의 무거움과 특정 플랫폼의 안전한 라이브러리 사용법에 초점을 맞춘 책들의 가벼움 사이의 중간을 잘 절충한 책이다.

C/C++ 프로그램의 대표적인 취약점으로 꼽히는 문자열, 포인터, 동적 메모리, 정수 오버플로, 형식 문자열, 파일 I/O에 관해서 한 장씩 할애해서 자세하게 설명하고 있다. C/C++의 경우 하드웨어와 매우 밀접한 언어이기 때문에 일부 내용은 컴퓨터 구조의 문제이기도 하다. 따라서 C/C++ 개발자가 아니라고 하더라도 한번쯤 읽어보는 것도 좋은 선택이 될 것 같다.

@codemaru
돌아보니 좋은 날도 있었고, 나쁜 날도 있었다. 그런 나의 모든 소소한 일상과 배움을 기록한다. 여기에 기록된 모든 내용은 한 개인의 관점이고 의견이다. 내가 속한 조직과는 1도 상관이 없다.
(C) 2001 YoungJin Shin, 0일째 운영 중