감사 서브시스템 구성
감사 서브시스템에는 감사 서브시스템이 설정되었는지 여부를 표시하는 글로벌 상태 변수가 있습니다. 또한 각 프로세스에는 감사 서브시스템이 이 프로세스에 대한 정보를 기록해야 하는지 여부를 표시하는 로컬 상태 변수가 있습니다.
이러한 변수는 모두 이벤트가 신뢰있는 전산 구조(TCB) 모듈 및 프로그램에서 발견되는지 여부를 판별합니다. 특정 프로세스에 대한 TCB 감사를 설정 해제하면 해당 프로세스가 자체 감사를 수행하고 시스템 책임 정책을 무시하지 않을 수 있습니다. 신뢰 프로그램이 자체적으로 감사할 수 있도록 허용하면 더 효율적이고 효과적으로 정보를 수집할 수 있습니다.
감사 서브시스템 정보 수집
정보 수집은 이벤트 선택 및 커널 감사 레코드 모드를 처리합니다. 이는 감사 가능한 이벤트를 발견하는 TCB 구성요소에서 사용되는 정보 기록용 인터페이스와 감사 로깅 루틴을 제어하기 위해 감사 서브시스템에서 사용되는 구성 인터페이스를 제공하는 커널 루틴을 통해 수행됩니다.
감사 로깅
감사 가능한 이벤트는 사용자 상태 및 감독자 상태 인터페이스에서 기록됩니다. TCB의 사용자 상태 부분은 auditlog 또는 auditwrite 서브루틴을 사용하는 반면에 TCB의 감독자 상태 부분은 커널 프로시저 호출 세트를 사용합니다.
각 레코드마다 감사 이벤트 로거가 이벤트별 정보에 감사 헤더를 접두어로 추가합니다. 이 헤더는 이 이벤트가 감사되는 사용자 및 프로세스와 이벤트 시간을 식별합니다. 이벤트를 발견하는 코드는 이벤트 유형과 리턴 코드 또는 상태를 제공하고 선택적으로 추가 이벤트별 정보(이벤트 추적 레코드)를 제공합니다. 이벤트별 정보는 오브젝트 이름(예를 들어, 액세스가 거부된 파일이나 실패한 로그인 시도에서 사용된 tty), 서브루틴 매개변수 및 기타 수정된 정보로 구성됩니다.
이벤트는 숫자로 정의되지 않고 기호로 정의됩니다. 이를 통해 이벤트 등록 체계를 사용하지 않고 이름 충돌이 발생할 가능성이 줄어듭니다. 서브루틴은 감사 가능하고 확장 가능한 커널 정의에는 고정된 교환 가상 회로(SVC) 번호가 없으므로 숫자로 이벤트를 기록하기 어렵습니다. 커널 인터페이스가 확장되거나 재정의될 때마다 숫자 맵핑을 수정하고 기록해야 할 수 있습니다.
감사 레코드 형식
감사 레코드는 공통 헤더와 그 다음에 오는 레코드 감사 이벤트에 특정한 감사 레코드로 구성됩니다. 헤더의 구조는 /usr/include/sys/audit.h 파일에 정의됩니다. 감사 레코드의 정보 형식은 각각의 기본 이벤트마다 고유하며 /etc/security/audit/events 파일에 표시되어 있습니다.
일반적으로 감사 헤더의 정보는 정확성을 보장하기 위해 로깅 루틴에서 수집되는 반면 감사 레코드의 정보는 이벤트를 발견하는 코드에서 제공됩니다. 감사 로거에는 감사 레코드의 구조 또는 시맨틱에 대한 정보가 없습니다. 예를 들어, login 명령이 실패한 로그인을 발견하면 특정 이벤트가 발생한 터미널과 함께 해당 이벤트를 기록하고 auditlog 서브루틴을 사용하여 감사 레코드에 레코드를 기록합니다. 감사 로거 커널 구성요소는 주체별 정보(사용자 ID, 프로세스 ID, 시간)를 헤더에 기록하고 이를 다른 정보에 첨가합니다. 호출자는 헤더에 이벤트 이름 및 결과 필드만 제공합니다.