2.8. 설계와 구현 지침의 출처

몇몇 문서들은 보안적인 프로그램 작성 방법 (또는 대안으로 기존 프로그램에서 보안 문제들을 찾는 방법) 을 기술하는데 도움이 되는데 이들이 이 책의 나머지부분에서 강조된 지침들에 기초가 되었다.

범용 서버와 setuid/setgid 프로그램의 경우는 많은 가치있는 문서들이 있다. 물론 이들에 대한 참조없이는 찾기 어려운 문서들이다.

Matt Bishop [1996, 1997] 은 이 주제에 대해 몇몇의 지극히 가치있는 논문들과 발표들을 발표해왔으며 사실 이 주제를 위한 웹 페이지 http://olympus.cs.ucdavis.edu/~bishop/secprog.html 를 갖고 있다. AUSCERT 는 보안적인 SUID 및 네트워크 프로그램 작성 방법을 논의한 Garfinkel 과 Spafford 의 책 [Garfinkel 1996] 의 23 장의 부분적으로 기초한 프로그래밍 체크리스트 [AUSCERT 1996] 를 공개하였다. Galvin [1998a] 은 보안적인 프로그램 개발을 위한 간단한 프로세스와 체크리스트를 기술했는데 나중에 Galvin [1998b] 에서 체크리스트를 갱신했다. Sitaker [1999] 는 ``리눅스 보안 감사팀"이 찾아야 할 문제점들의 목록을 제출하고 있다. Shostack [1999] 는 보안에 민감한 코드 검토를 위한 다른 체크리스트를 정의하고 있다. NCSA [NCSA] 는 일련의 간결하지만 유용한 보안적인 프로그래밍 지침들을 제공하고 있다. 다른 유용한 정보의 출처들은 Secure Unix Programming FAQ [Al-Herbish 1999], Security-Audit's Frequently Asked Questions [Graham 1999]Ranum [1998] 들이 있다. 약간의 권고안들은 주의를 갖고 받아들여야 하는데 예를 들어 BSD 의 setuid(7) 맨페이지 [Unknown] 는 보통 수반되는 경쟁 상태 (race conditions) 를 언급하지 않고서 access(3) 의 사용을 추천하고 있다. Wood [1985] 는 ``Security for Programmers" 장에서 약간 유용하지만 오래된 충고를 하고 있다. [Bellovin 1994] 는 ftpd 구현을 어떻게 더욱 간단하고 보안적으로 재구축하는 가와 같은 유용한 지침들과 약간의 특정 예를 포함하고 있다. FreeBSD 는 약간의 지침들을 제공하고 있다 FreeBSD [1999]. [Quintero 1999] 는 기본적으로 GNOME 프로그래밍 지침에 관심이 있지만 보안 고려에 대한 절을 포함하고 있다. [Venema 1996] 는 보안적인 프로그램을 작성할 때 약간의 공통적인 에러들에 대한 세부적인 논의를 예와 함께 제공하고 있다 (널리 알려진 또는 예측가능한 패스워드, 악의있는 데이타에 속아넘어가기, 사용자가 접근가능한 데이타에서의 비밀과 다른 프로그램에 의존하기). [Sibert 1996] 는 악의있는 데이타로부터 생기는 위협들을 기술하고 있다.

웹을 방해하는 CGI (Common Gateway Interface) 를 사용한 프로그램들에 대한 보안 지침들을 제공하는 많은 문서들이 있다. 이들은 Van Biesbrouck [1996], Gundavaram [unknown], [Garfinkel 1997], Kim [1996], Phillips [1995] Stein [1999], [Peteanu 2000][Advosys 2000] 들을 포함한다.

언어에 고유한 많은 문서들도 있는데 이는 이 책의 언어에 특정적인 절에서 더욱 논의된다. 예를 들어 펄 배포판은 perlsec(1) 을 포함하는데 이는 펄을 더욱 보안적으로 사용하는 방법을 기술하고 있다. Secure Internet Programming 사이트인 http://www.cs.princeton.edu/sip 는 일반적인 보안 컴퓨터 보안 문제에 관계되어 있지만 자바, 액티브X (ActiveX) 와 자바스크립트와 같은 모바일 코드 시스템에도 중점을 두고 있다; Ed Felten 은 9.6절 에서 논의되는 자바를 안전하게 하기 ([McGraw 1999]) 에 대한 책을 공동 작성했다. 썬사의 보안 코드 지침들은 본질적으로 자바와 C 에 대한 약간의 지침들을 제공하고 있는데 이는 http://java.sun.com/security/seccodeguide.html 에서 얻을 수 있다.

Yoder [1998] 은 애플리케이션 보안을 다룰 때 사용되는 패턴들의 집합을 포함하고 있는데 이는 실제 일련의 특별한 지침이라기 보다는 프로그래밍을 위해 유용하다고 생각될 수 있는 공통적으로 사용되는 일련의 패턴들이다. Schmoo 그룹은 http://www.shmoo.com/securecode 에 보안적인 코드 작성 방법에 대한 정보를 링크하고 있는 웹 페이지를 관리하고 있다.

다른 관점 (예 시스템을 크랙하는 방법) 에서 문제점들을 기술하고 있는 많은 문서들이 있다. 한 예는 McClure [1999] 로 인터넷에는 이 입장으로 바라 본 셀 수 없을 만큼 많은 자료들이 있다. 컴퓨터 아키텍쳐를 악용하기 위해 어떤 공격을 해야하는 가에 대해 컴퓨터 아키텍처에 관한 더욱 일반적인 문서도 있다 (예, [LSD 2001]). Honeynet 프로젝트는 공격자가 실제 어떤 공격을 수행하는 가에 대한 정보를 수집해 왔다; 더욱 자세한 정보는 웹 사이트 http://project.honeynet.org 를 보라.

또한 기존 프로그램에서 이미 확인된 취약성에 대한 많은 정보들도 있다. 이는 많은 특정 예들로부터 더욱 일반적인 지침들을 추출하는데 많은 노력이 들어감에도 불구하고 ``하지 말아야 할 것"에 대한 일련의 유용한 예들일 수 있다. 보안 쟁점들을 논의하는 메일링 리스트들도 있다; 가장 널리 알려진 것 중의 하나는 Bugtraq 으로 무엇보다도 취약성 목록을 발전시키고 있다. CERT Coordination Center (CERT/CC) 는 인터넷 보안 문제들에 대해 취약성을 보고하는 주요 보고 센터로 가끔 패치 또는 착수한 작업의 세부사항들을 얻는 방법에 대한 지시와 함께 심각한 보안 문제와 이의 영향을 설명하는 권고안을 내놓고 있다; 더욱 자세한 정보는 http://www.cert.org/ 를 보라. 원래 CERT 는 소규모 컴퓨터 응급 대책팀이었지만 공식적으로 CERT 는 현재 이를 의미하지 않음을 주목해라. 노동부 (Department of Energy, 에너지부) 의 Computer Incident Advisory Capability (CIAC) 도 또한 취약성을 보고하고 있다. 이러한 여러 그룹들은 동일한 취약성을 식별할 수도 있지만 다른 이름을 사용할 수도 있다. 이 문제를 해결하기 위해 MITRE 는 모든 공개적으로 알려진 취약성과 다른 사람에 의해 확인된 보안 적발 (exposure) 에 대해 유일한 고유 식별자 (``이름") 를 만드는 CVE (Common Vulnerabilities and Exposures) 목록을 지지하고 있다; http://www.cve.mitre.org/ 를 보라. NIST 의 ICAT 는 검색가능한 컴퓨터 취약성들의 목록으로 각 CVE 취약성을 갖고 이들에 대한 목록을 작성함으로써 나중에 검색 및 비교될 수 있도록 한다; http://csrc.nist.gov/icat 를 보라.

이 책은 저자가 믿기에 가장 유용하고 중요한 지침들의 요악이다; 저자의 목적은 훌륭한 프로그래머가 그저 이 책을 읽은 후 보안적인 프로그램을 구현하는데 잘 준비가 되어 있도록 하는데 있다. 어떠한 하나의 문서도 실제 이 목적을 충족시킬 수는 없지만 저자는 시도할 만한다고 믿는다. 저자의 목적은 ``자주 되풀이되고 이해하기 어려운 모든 가능한 지침들의 완벽한 목록"과 ``훌륭하고 짧지만 많은 중대한 문제들을 생략한 온라인상에서 얻을 수 있는 많은 짧은 목록"사이의 균형에 도달하는 것이다. 불확실할 때는 본보기를 포함한다; 저자는 그런 경우 이 ``one stop shop" 문서내에서 모든 사람에게 도움이 되는 정보를 만드는 것이 가장 좋다고 믿고 있다. 이 책은 저자 스스로 구성한 것으로 (모든 리스트는 자신만의 다른 구조를 갖는다) 지침들의 일부 (능력들과 fsuid 값에 대한 것들과 같은 특히 리눅스 고유의 것들) 도 스스로 만든 것이다. 위에 열거된 모든 참조된 문서들을 읽는 것 또한 강력히 추천한다.