이 장에서는 Trusted Solaris 환경의 감사 기능을 소개합니다. 감사는 시스템의 사용자 활동 및 그 밖의 이벤트를 포착하여 감사 내역이라는 일련의 파일에 그 정보를 저장하고, 사이트 보안 정책을 수행하기 위해 시스템 활동 보고서를 작성하는 프로세스를 말합니다. 보안 위반이 발생하면 감사 보고서를 통해 어떻게 위반이 발생했으며 어떤 사용자들이 그에 관련되었는지 알 수 있습니다. 감사 과정의 자세한 설명은 Trusted Solaris Audit Administration 설명서를 참조하십시오.
사이트에 감사 기능을 설정하기 전에 먼저 다음을 수행해야 합니다.
감사할 이벤트 클래스를 결정합니다(예: 사이트에 추가할 이벤트나 새 클래스 등)
감사 정보를 저장할 장소를 결정합니다.
감사 구성 파일을 정의합니다.
감사할 이벤트를 결정해야 합니다. 사용자의 동작뿐만 아니라 속성을 알 수 없는 이벤트 즉, 특정 사용자에 대한 속성이 될 수 없는 인터럽트도 포착할 수 있습니다. 사용자 동작은 성공한 트랜잭션과 실패한 트랜잭션으로 구분할 수 있습니다. Trusted Solaris에서 감사 이벤트는 클래스로 구성되며, 파일에 대한 감사 클래스는 다음과 같은 일반적인 영역에 포함됩니다.
읽기 위해 열기
쓰기 위해 열기
속성 변경
작성
삭제
필요한 경우 자신의 고유한 클래스나 이벤트도 작성할 수 있으며, 이벤트에 대한 클래스 매핑을 재배열할 수 있습니다. 다른 클래스들은 프로세스 동작, 네트워크 이벤트, 윈도우 동작, IPC 동작, 관리자 동작, 로그인, 로그아웃, 응용프로그램 정의 이벤트, ioctl 시스템 호출, 프로그램 실행, Xserver 동작 및 기타 이벤트들과 같은 항목을 추적합니다. 감사 정보는 많은 저장 공간을 필요로 하므로 어떤 이벤트를 감사할지 신중하게 결정해야 하며, 사이트 보안 정책상 꼭 필요한 이벤트가 수록된 클래스만 선택해야 합니다.
수집된 감사 정보의 양을 줄이는 좋은 방법은 파일과 디렉토리를 공용 객체로 지정하는 것입니다. 공용 객체는 일반적으로 읽기 전용 정보를 수록하고 있어, 일반 사용자가 수정할 수 없으며 보안에 구애받지 않아 그 객체를 액세스하는 사용자를 추적할 필요가 없습니다. 시스템 시계를 공용 객체의 좋은 예로 들 수 있습니다. 공용 객체를 지칭하는 공용 객체 플래그를 설정하면 그 객체를 지정하는 감사 플래그는 무시됩니다.
감사에는 다량의 디스크 공간이 필요하므로 정보가 수집될 장소를 세심하게 계획해야 합니다.
사이트가 네트워크로 연결되지 않은 개별 워크스테이션을 사용하는 경우 각 워크스테이션마다 감사 레코드를 저장할 전용 디스크를 갖추는 것이 바람직합니다. 전용 디스크에는 적어도 다음과 같은 두 개의 분할 영역이 있어야 합니다.
주 기억 영역
초과 레코드를 저장하기 위한 분할 영역
워크스테이션 네트워크의 경우 적어도 하나 이상의 별도 서버를 감사 정보 수집 전용으로 두어야 하며, 감사 데이터 관리와 분석을 위한 또 하나의 서버가 있어야 합니다.
어느 경우이든 무결성을 유지하고 탐지를 방지하기 위해 감사 파일과 디렉토리에 MAC과 DAC 보호를 설정해야 합니다.
사이트에서의 감사 사양은 /etc/security 하위 디렉토리에 상주하는 이들 구성 파일에 저장되어 있습니다.
audit_control(4) - 감사 정보가 저장되는 디렉토리의 우선 순위(감사 대몬은 최소 여유 공간 한계에 이를 때까지 하나의 디렉토리를 사용하고, 한계에 이르면 목록의 다음 디렉토리에 감사 레코드를 저장), 최소 여유 공간 한계, 감사 대상 클래스를 나타내는 시스템 전반의 감사 플래그 및 특정 사용자에게 지정할 수 없는 이벤트에 대한 특벌 감사 플래그를 포함하여 감사 대몬이 사용하는 감사 제어 정보를 저장합니다. 이 파일에 설정된 감사 플래그는 모든 사용자에게 적용됩니다. 이 플래그에 대한 예외는 모두 사용자 단위로 설정되어 audit_user 파일에 지정됩니다.
audit_user(4) - 감사 지정의 예외인 사용자에 대한 감사 기준을 audit_control에 저장합니다. 여기에는 사용자 이름, 항상 감사되는 이벤트, 감시되지 않는 이벤트 등에 대한 정보가 포함됩니다.
audit_class(4) - 클래스 마스크(추적될 클래스를 결정하는 필터), 클래스 이름 및 설명을 포함하여 감사 클래스 정의를 저장합니다.
audit_event(4) - 이벤트 번호, 이벤트 이름, 설명, 감사 클래스를 식별하는 감사 플래그 등을 포함하여 감사 이벤트 정보를 저장합니다.
네트워크에 대한 감사를 설정할 경우에는 각 워크스테이션에 audit_user, audit_class 및 audit_event 파일의 동일한 버전이 있어야 합니다.
이 절에서는 감사 기능 관리를 위한 주 유틸리티 프로그램과 스크립트에 대해서 설명합니다. 요약하여 말하자면, 감사 기능은 시스템이 설치되는 동안 활성화됩니다. /etc/init.d/audit 스크립트와 /etc/system파일을 편집하여 감사 기능을 활성화하거나 비활성화할 수 있습니다. auditd 명령은 감사 기능이 활성화된 경우 감사 대몬을 시작합니다. audit 명령은 대몬을 정지하며, 이때 이 명령으로 감사 레코드 기록은 중단되지만 감사 레코드의 수집은 중단되지 않습니다. 또한 audit 명령은 대몬을 제어하기 위한 다른 옵션도 제공합니다. audit_startup 스크립트를 사용하면 시스템이 시작하는 동안 감사 매개변수를 구성할 수 있습니다. audit_warn 스크립트를 사용하면 감사 문제가 발생할 경우 나타나는 경고와 조치를 지정할 수 있습니다. praudit 명령으로 감사 레코드를 볼 수 있으며, auditreduce는 레코드를 선택할 때 편리하도록 감사 내역 파일을 병합하고, auditstat는 감사 통계를 표시합니다.
audit(1M) 명령은 현재 감사 대몬을 제어하는 인터페이스입니다. 감사 대몬(auditd)은 audit_control 파일 정보를 사용하여 감사 추적 파일의 생성과 위치를 제어합니다. audit 명령을 사용하면 다음과 같은 작업을 할 수 있습니다.
audit_control 파일에서 감사 저장 디렉토리 목록의 첫 번째 디렉토리를 재설정할 수 있습니다.
감사 대몬에서 마지막으로 읽은 audit_control 파일에 지정된 감사 디렉토리에서 새 감사 파일을 열 수 있습니다.
감사 추적 파일을 닫고 기록을 중단하되, 감사 레크드의 수집은 중단하지 않도록 감사 대몬에 신호를 보낼 수 있습니다.
auditconfig(1M) 명령은 여러 가지 감사 정책 설정을 포함하여 커널 감사 매개변수를 획득하고 설정하는 명령줄 인터페이스를 제공합니다.
audit_startup(1M) 스크립트는 감사 대몬이 시작되기 전에 감사 하위 시스템을 초기화합니다. 현재 이 스크립트는 시스템 기본 정책을 설정하고 초기 이벤트 대 클래스 매핑을 다운로드하는 여러 개의 auditconfig 명령으로 구성되어 있습니다. 보안 관리자는 응용프로그램 관리자에서 system_admin 폴더를 열어서 audit_startup에 액세스할 수 있습니다. 사이트에 맞도록 이 명령을 구성할 수 있습니다.
audit_warn(1M) 스크립트는 감사 대몬으로부터 받은 경고 및 오류 메시지를 처리합니다. 문제가 발생하면 감사 대몬이 해당 인수와 함께 audit_warn을 호출합니다. 옵션 인수는 오류 유형을 지정합니다. aliases(4)에서 audit_warn이라는 우편 별명을 정의하면, audit_warn 상황이 발생할 경우에 알림 메시지를 받을 우편 수신인 목록을 지정할 수 있습니다.
praudit(1M) 명령은 감사 추적 파일의 내용을 읽을 수 있는 형식으로 출력합니다.
auditreduce(1M) 명령을 사용하면 하나 이상의 시스템으로부터 받은 감사 추적 파일의 레코드를 선택하거나 병합할 수 있습니다. merge 함수는 하나 이상의 입력 감사 추적 파일의 감사 레코드를 하나의 출력 파일로 병합합니다. select 함수를 사용하면 레코드의 내용과 관련된 기준에 따라 감사 레코드를 선택할 수 있습니다. praudit 명령을 사용해서 merge 함수와 select 함수를 조합하면 사이트에 필요한 사용자 정의 보고서를 작성할 수 있습니다.
auditstat(1M) 명령은 처리된 감사 레코드 수 및 커널 감사 모듈에 사용되는 메모리 양과 같은 커널 감사 통계를 표시합니다.