Tentaiks.egloos.com

天體觀測

포토로그



보안 SW전문가를 위한 조언 IT이야기



출처 : 지디넷 (www.zdnet.co.kr)


보안 SW 프로그래머를 위한 충고「10가지」

보안 분석가들과 필자는 프로그래머들에게 보안 소프트웨어 개발을 위한 10가지 원칙을 소개하려 한다.

① 최대의 약점이 무엇인지를 알아내고 취약점에 대한 보안 대책을 강구한다. 필자는 오늘날 소프트웨어가 최대의 약점이라고 생각하고 있다.

② 심층적인 방어 연습을 하라. 즉 다양한 전략을 통해 위험을 관리하는 방법을 생각해볼 수 있다. 좋은 예로 사용자를 알아내고자 할 때는 여러 가지 형태의 ID 정보를 이용한다.

③ 소프트웨어를 무조건 신뢰하지 말라. 벤더들로부터 구입한 소프트웨어에 대해 전적으로 신뢰해서는 안된다. 기술적인 예로, 클라이언트 서버 시스템을 구축할 때 서버는 항상 클라이언트의 소프트웨어를 의심해봐야 한다.

④소스 코드의 비밀을 유지하기 어렵다는 점을 기억하라. 많은 이들이 소스 코드를 컴파일해 기계어 코드를 생성하면 아무도 못 읽을 것이라고 믿고 있다. 또한 사람들은 누가 가르쳐주지 않는 이상 특정 소프트웨어가 동작하는 방식을 알아낼 수 없다고 믿고 있지만 그렇지 않다.

⑤ 최소 특권의 원칙을 준수하라. 즉, 필요 이상의 특권을 부여하지 말라. 예를 들어 파일 시스템 전체에 대한 접근 권한을 차단하는 방법을 들 수 있다. 하나의 파일에 대해 접근 권한을 부여하거나 확인 작업을 거쳐라.

⑥ 발생된 에러와 복구 작업에 대해서는 비밀을 유지하라. 그렇지 않으면 에러가 발생할 경우 위험한 상황에 처하게될 수도 있다. 이는 매우 심각한 문제로, 수준 높은 해커들은 코드를 훼손하거나 어떤 일이 생기는지 관찰한다. 예기치 않았던 상황이 발생해 당신의 코드에 에러가 발견될 경우 해당 상황에 적절한 조치가 취해졌는지 확인한다.

⑦ 공격 대상이 될 수 있는 시스템을 분산시켜 해킹 피해의 범위를 줄여라. 이는 잠수함을 여러 개의 공간으로 나눠 하나의 공간이 침수돼도 잠수함 전체에 영향을 미치지 않도록 하는 것과 마찬가지다. 소프트웨어를, 예로 들면 유닉스 시스템의 수퍼유저(superuser)를 들 수 있다. 유닉스 시스템에서와 같이 수퍼유저나 '루트(root)' 권한에 모든 특권을 부여하는 것은 좋은 모델이라고 할 수 없다. 특권을 여러 개로 나누는 것이 바람직하다. 코드를 설계할 때는 모듈화해 하나의 모듈이 실패해도 전체 시스템은 그대로 동작할 수 있도록 하는 것이 중요하다.

⑧ 프로그램은 가급적 단순하게 설계하라. 복잡한 코드에는 당연히 버그가 많다. 상당히 단순한 웹 브라우저에 버추얼 머신, 매크로 언어, COM 등이 추가되고 운영체제에 통합된 것을 볼 수 있다. 하지만, 프로그램이 복잡할수록 보안성을 유지하기 힘들어진다.

⑨ 필요 이상의 정보를 공개하지 말라. 예를 들면 대부분의 포트 기반 프로그램은 그들의 버전을 쉽게 알려주는데, 책을 찾아보면 얼마나 쉽게 이들 프로그램을 해킹할 수 있는지 알게 된다. 대부분의 브라우저는 출시 번호, 패치 수준, 운영체제, 그리고 웹 서버 운영에 필요하지 않는 다양한 정보를 제공하고 있으며, 인터넷에도 이런 종류의 정보가 제공되고 있지만, 있어서는 안될 일이다.

⑩ 아무것도 가정하지 말라. 소프트웨어 개발 과정에서 있었던 모든 가정과 선택에 대해 질문해보라. 그렇지 않으면 근시안이 되기 쉽다. 타인에게 자신이 설계한 프로그램을 평가해보도록 하고 보안 위험을 분석하도록 하는 것은 매우 바람직한 일이다. 같은 맥락에서 사람들은 보안에 대한 주장을 믿지 않을 뿐 아니라 오늘날의 컴퓨터 보안은 허풍으로 가득하다.