7.1. 안전한 라이브러리 루틴만 호출해라

때때로 보안과 추상화 (정보 숨기기, Information Hiding) 및 재사용의 개발 원리들간에는 모순이 존재한다. 문제는 어떤 고수준 라이브러리 루틴들이 보안적으로 구현될 수 있는 지 또는 아닌지로 이들의 스펙을 통해 알 수는 없을 것이다. 특정 구현이 보안적이라 할지라도 루틴의 다른 버전이 보안적인지 또는 동일한 인터페이스가 다른 플랫폼에서 보안적인 것인지를 보증하는 것은 불가능할 수도 있다.

결국 애플리케이션이 보안적이어야 한다면 때때로 각자의 라이브러리 루틴들을 재구현해야 한다. 기본적으로 라이브러리 루틴들이 보안에 요구되는 필요한 동작을 수행할 것이라고 확신할 수 없다면 루틴들을 재구현해야 한다. 더구나 어떤 경우 라이브러리의 구현은 수정되어야 하는데 보안에 취약한 라이브러리 루틴을 선택한다면 손해를 입을 수 있는 사람은 사용자들이다. 할 수 있다면 무엇인가를 재구현해야 할 때는 고수준 인터페이스를 사용하려고 노력해라 - 이렇게 함으로써 그 사용이 보안적인 시스템에서 고수준 인터페이스로 전환할 수 있다.

할 수 있다면 루틴이 보안적인지 또는 그렇지 않은 지를 보기위해 검사하고 보안적이라면 이를 사용해라 - 원칙적으로는 컴파일 또는 설치의 한 부분으로 이 검사를 수행할 수 있다 (예, "autoconf" 스크립트의 한부분으로). 어떤 조건에서는 이러한 종류의 런타임 검사가 비현실적이지만 다른 조건에서는 많은 문제들을 제거할 수 있다. 라이브러리를 재구현하지 않는다면 최소한 안전한지 확인하고 그렇지 않다면 설치를 중지해라. 이렇게 함으로써 사용자가 뜻하지 않게 비보안적인 프로그램을 설치하지 않을 것이며 문제가 무엇인지를 알 것이다.