입사한지 이제 3일째..
오늘 갑자기 CC인증을 준비하라고 한다...
아직 제품에 대해서 파악도 하지 않았는데..
음..
CC인증에 대한 용어도 아직잘 모르는데..
해보고 싶었던 사항이지만 너무 갑자기 다가온것같다.
CC인증에 관련된 용어들이다.
TOE, Target of Evaluation
CC의 평가 대상이 되는 소프트웨어, 하드웨어, 펌웨어로 구성된 '집합'을 의미합니다. 일반적으로는 IT 제품과 같은 형태를 갖지만, 흔히 생각하는 제품(product) 개념과는 다릅니다. TOE는 어떤 기술이 제품화된 것일 수도 있고, 라이브러리일 수도 있고, 특정한 경계를 갖는 네트워크일 수도 있습니다. 제품의 일부분을 지칭하는 경우도 있고, 제품의 조합일 수도 있습니다. TOE는 그게 무엇이든 간에, CC를 근거로 보안성 평가의 대상이 되는 대상을 의미합니다. TOE는 동시에 설명서(guidance)를 포함합니다.
PP에서 TOE는 특정한 유형의 정보보호제품을 지칭합니다. 예를 들어 네트워크 침입방지시스템(IPS), 침입탐지시스템(IDS), 침입차단시스템(firewall), 무선랜 인증시스템, 웹 응용프로그램 침입차단시스템 등을 의미합니다.
ST에서 TOE는 특정한 정보보호제품 (또는 제품의 일부 기능)을 지칭합니다. 일반적으로, 특정한 정보보호제품의 모든 기능이 TOE가 되는 경우는 없습니다. 예를 들어 침입차단시스템이라면, 침입차단시스템 소프트웨어는 TOE이면서 하드웨어는 TOE 범위에서 제외될 수도 있습니다. SSL/TLS를 이용하여 원격 관리자 세션을 연결하는 경우, 정보보호제품에 탑재된 SSL 라이브러리가 TOE 범위에서 제외되기도 합니다. UTM을 표방하는 제품도 마찬가지입니다. UTM이라는 제품군에 대한 PP가 없기 때문에, 네트워크 침입방지시스템, 가상사설망시스템 등의 PP를 수용하여 특정 UTM 제품에 대한 ST를 작성했다면, 주요 IPS 기능과 VPN 기능을 제공하는 부분(소프트웨어, 하드웨어, 펌웨어, 설명서)을 묶어서 TOE로 정의하고, 나머지는 비-TOE(non-TOE)가 되는 겁니다.
ST에서, TOE의 모든 보안 기능은, ST에 명시된 보안기능요구사항(SFRs, Security Functional Requirements)과 관계있습니다. TOE를 포함하는 정보보호제품에서, ST에 명시된 보안기능요구사항으로 추적되는 기능을 제공하는 부분은 TOE, 추적되지 않는 기능을 제공하는 부분은 비-TOE가 됩니다.
보호프로파일(PP, Protection Profile)
보호프로파일은 특정한 유형의 TOE에 요구되는 보안기능요구사항과 보증요구사항을 정의하는 문서입니다. 보호프로파일은 구현 독립적인(implementation-independent) 문서이기 때문에, TOE가 구체적으로 어떻게 구현되어야 하는지 정의하지 않습니다. (제안요청서와 비슷하다고 볼 수 있습니다. 필요한 기능을 열거는 하지만, 구체적으로 어떻게 기능을 제공하는 지는 굳이 제시하지 않습니다.)
보호프로파일은 누구나 작성할 수 있습니다만, 국내의 경우, 주요 정보보호제품에 대한 보호프로파일은 국가정보원 IT보안인증사무국에서 관리합니다. 관련 링크는
여기를 참조하세요.
보호프로파일은 정해진 형식에 따라 작성되어야 합니다. 보호프로파일의 형식은 CC 1부 부록에 정의되어 있습니다.
보안목표명세서(ST, Security Target)
보안목표명세서는 특정한 TOE가 충족할 보안기능요구사항과 구체적인 구현에 대해 서술하는 문서입니다. 보안목표명세서는 특정한 보호프로파일을 준수하여 작성되기도 하고, 준수하지 않고 작성할 수도 있습니다. (제안서와 비슷하지요?) 보안목표명세서는 보호프로파일을 구체화하여 작성되는 경우가 일반적입니다.
보안목표명세서는 TOE 개발자가 작성하고, 보안목표명세서의 작성 형식도 CC 1부 부록에 정의되어 있습니다. ('개발자'라고 해서 TOE를 구현한 프로그래머를 의미하는 것은 아닙니다.)
보안목표명세서의 앞 부분은 보안목표명세서의 식별정보, TOE의 개요, 논리적/물리적 경계, TOE의 정상적인 실행에 필요한 소프트웨어/펌웨어/하드웨어, 운영 환경, TOE가 사용되는 환경에 대한 가정사항 등을 나열합니다. 그 외에 보호프로파일과 공통되는 항목인데, TOE를 운영할 조직의 보안정책, 위협, 자산, 보안목적 등을 정의합니다. (이러한 것들 없이 보안기능요구사항을 정리할 수는 없잖아요?)
중반 부분은 TOE가 보안기능요구사항을 만족하기 위해 구체적으로 어떻게 구현될/구현된 것인지 서술하고, TOE의 보안성 보증에 필요한 보증요구사항을 서술합니다. (덧붙임: CEM의 ST평가 항목중에는 보안기능요구사항을 서술할 때 사용되는 주체, 객체, 오퍼레이션을 정의했는 지 확인하도록 요구하고 있습니다. 굳이 명시적으로 정의할 필요는 없지만, 미리 정의해두면 여러모로 편리한 점이 많습니다.) 보증요구사항은 보호프로파일에 제시된 평가보증등급(EAL, Evaluation Assurance Level)을 그대로 차용하는 경우가 많습니다.
마지막으로, TOE 요약명세가 제공되는데, 보안기능요구사항을 중심으로 TOE가 어떻게 보안기능요구사항을 구현하는지 요약된 정보를 제공합니다.
보안목표명세서는 CC에 따른 보안성 평가가 종료된 후, 인증기관의 승인을 거치고 외부에 공개됩니다. 평가기간중 평가기관에 제공되는 보안목표명세서는 개발사의 기밀 사항이 포함될 수 있기 때문에, 외부 공개용 보안목표명세서는 평가기간중 사용되는 보안목표명세서와 그 내용이 다를 수 있습니다. (기밀에 해당하는 내용은 외부로 공개되지 않습니다.)
사용자, Users
CC 인증에서 사용자라 하면, 사람(human user)뿐만 아니라 TOE와 상호작용할 수 있는 외부 IT 실체 (external entities)를 포함합니다. 중요한 것은, 상호작용한다는 것이지요. 사용자가 TOE와 상호작용하지 않으면 아무 의미가 없습니다. 논의 대상이 되지 않는 다는 뜻입니다. TOE는 외부 인터페이스(external interfaces)를 통해 사용자와 상호작용을 주고 받습니다. (사용자도 TOE와 상호작용할 수 있는 인터페이스가 있어야 합니다.)
사용자는 인가된 사용자(authorized users)와 인가되지 않은 사용자(unauthorized users)로 구분됩니다. '인가되었다'는 건, TOE가 제공하는 보안기능을 사용할 권한을 승인해준다는 의미로 생각하시면 됩니다. 인가되지 않은 사용자가 TOE와 상호작용할 수 있는 인터페이스는 당연히 그 기능이나 호출방법 등에 제한이 있어야하고, 신뢰된 사용자와 다른 방법으로 (인터페이스를 통해) TOE와 상호작용하게 됩니다.
사용자와 TOE간 인터페이스는 '외부 인터페이스'라고 말씀드렸습니다. CC 평가에서 '외부 인터페이스'는 기능명세서(FSP, Functional SPecification)에 의해 확인할 수 있습니다.
방화벽 제품이 TOE라면, 사용자는 TOE를 통해 네트워크에 접근하고자 하는 네트워크상의 호스트, 네트워크에 연결을 시도하는 사람, 접근 제어 정책을 원격에서 관리하는 (인가된) 관리자 등을 예로 들 수 있습니다.
인터페이스, Interface
위에서 말씀드린 것 처럼, TOE가 외부 실체 또는 사용자와 상호 작용을 주고받기 위해 TOE가 제공하는 수단을 의미합니다.
사용자와 연결하여 방화벽을 예로 들자면, 네트워크상의 호스트가 TOE(방화벽)와 상호작용하는 인터페이스는 네트워크 인터페이스 카드가 됩니다. 사용자가 인증과정을 거쳐서 네트워크 연결을 사용할 수 있다면, 인증 과정에 사용되는 로그인 창(보통 CLI 또는 GUI가 되겠지요?)도 인터페이스입니다. 관리자가 TOE를 통해 구현하는 보안정책을 관리하기 위해 사용하는 웹 화면도 인터페이스입니다.
이런, 서술하다보니 혼동할 수 있는 여지를 남겼네요. 제가 위에서 설명한 인터페이스들은 모두 TOE 외부에 존재하는 사용자와 상호작용을 하는데 사용되기 때문에 '외부 인터페이스'라고 합니다. '외부 인터페이스' 외에도, TOE를 구성하는 서브시스템 수준에서 인터페이스가 있고, 서브시스템을 구성하는 모듈 수준에서 사용되는 인터페이스와 같은 인터페이스가 있습니다. 서브시스템 수준 인터페이스, 모듈 수준 인터페이스는 TOE 설계서(TDS, TOE Design Specification)에서 서술됩니다.
CC에서, 각 인터페이스는 사용 목적과 사용 방법, 인터페이스의 행동을 기술하도록 되어 있습니다. 인터페이스에 입력되어야 하는 것은 무엇인지, 인터페이스를 통해 어떤 기능이 수행된 후, 무엇을 출력값으로 내보내는지도 중요한 요소입니다. 인터페이스에 대한 서술 수준은 평가보증등급(EAL, Evaluation Assurance Level)에 따라 다릅니다. 평가보증등급이 높아질수록, 보다 상세하게 인터페이스를 기술합니다.
(외부 인터페이스와 관련있는 중요한 키워드는 TSFI가 되겠네요. 이건 나중에 다루겠습니다.)
주체, Subjects
주체란, 어떤 행동(오퍼레이션)을 시작하는 존재, 말 그대로 주체를 말합니다. 영문법에서도 Subject라는 단어는 '주어'를 의미하죠. 어떤 행동을 시작하는 '주체'를 의미하는 겁니다. 사용자(사용인, 외부 IT 실체)는 주체가 될 수 있겠군요. 사용자를 대신하여 행동하는 프로세스도 주체로 간주합니다. 주체는 객체를 대상으로 오퍼레이션을 수행합니다.
CC 용어 정의에서는 "객체에 대한 오퍼레이션을 수행하는 TOE 내의 능동적인 실체"로 정의합니다. 결국, 사용자를 대신하여 TOE에서 실행되는 프로세스를 의미합니다. Linux 혹은 Unix를 예로 든다면, 사용자가 로그온을 거친 직후 포크(fork)되어 실행되는 사용자 프로세스를 주체로 볼 수 있습니다.
덧붙임 CC 에서 용어정의 부분을 작성한 국가는 미쿡~입니다. 미국에서는 주로 운영체제를, 유럽에서는 스마트 카드를 중심으로 CC 인증이 이뤄집니다. 운영체제를 주로 다루다 보니 주체를 "TOE 내의 능동적인 실체"로 정의했는데, 사실 주체는 TOE 외부에 있을 수도 있습니다. 객체도 마찬가지로 TOE 외부에 있을 수 있습니다. >_<
객체, Objects
주체가 하는 행동(오퍼레이션)의 대상이 되는 것을 의미합니다. 영문법에서 Object는 '목적어'를 의미하죠? '동사'에 해당하는 오퍼레이션의 영향을 받는 대상으로 이해하시면 충분합니다. 객체는 데이터를 포함하거나, 데이터를 수신하는 프로세스와 같은 것들을 의미합니다. 객체로는 파일, 프로세스, 메모리, 패킷 등이 객체가 될 수 있겠습니다.
CC 용어 정의에서는 "주체의 오퍼레이션 대상이며 정보를 포함하거나 수신하는 TOE 내의 수동적인 실체"로 정의합니다.
(객체의) 오퍼레이션, Operation on objects
주체가, 객체를 대상으로 하는 행동을 의미합니다. 이것도 영문법으로 비유하자면, '동사'나 '동사구'와 비슷하다고 할 수 있습니다.
- 객체가 파일이라면, 읽기, 쓰기, 실행, 삭제, 파일 속성/권한 변경, 해쉬값 생성, 압축과 같은 행동이 오퍼레이션이라 할 수 있겠습니다.
- 객체가 프로세스라면, 프로세스 초기화, 프로세스 재구동, 프로세스 종료, 프로세스로 파라미터를 넘기는 것을 오퍼레이션으로 봅니다. 프로세스가 객체라면, 프로세스는 오퍼레이션에 사용될 인터페이스를 가질 수 있습니다.
- 객체가 커널이라면, IOCTL 명령을 전달하는 행동이 오퍼레이션에 해당합니다.
- 객체가 TCP 또는 IP 패킷이라면, 출발지/목적지와 같은 보안 속성에 따른 헤더 조작, 연결 제어(허용, 거부, IPSec 암호화 등)이 오퍼레이션에 해당합니다.
- 객체가 어떤 라이브러리라면, 라이브러리에 속하는 함수를 호출하기 위해 매개변수를 전달하는 것이 오퍼레이션에 해당합니다. (물론, 라이브러리 함수는 자신이 호출될 수 있도록 인터페이스를 제공해야 합니다.
오퍼레이션은 주체/객체의 보안 속성에 따라 오퍼레이션이 다를 수 있겠죠? 만약 주체로 동작하는 프로세스의 보안속성이 일반 사용자인데, 관리자 권한이 필요한 데이터를 읽는 (오퍼레이션을 하는) 것은 허용되지 않을 겁니다.