ASL File Format

정의

Apple System Log의 약어로 애플이 개발한 로그 관리를 위한 파일 포맷으로 OS X 10.5(Leopard)부터 사용되었다.

수집할 수 있는 정보

방화벽, 로그인 정보, 프로그램 에러, 네트워크 정보, 설치 정보, 시스템 부팅/재부팅/종료에 대한 정보, 특정 사용자의 권한 상승 여부를 획득할 수 있다.

ASL 저장 경로

ASL 포맷으로 기록된 로그는 /private/var/log/asl/ 에 저장된다. 파일은 3가지 형태로 저장되며, 각각은 다음과 같다.

파일명 규칙 정의 내용
YYYY.MM.DD.[UID].[GID].asl 일일 데이터 수집할 수 있는 정보에 있는 대부분의 정보 저장. UID, GID 별로 파일 생성
YYYY.MM.DD.[GID] 세션 접속 이력 로컬/원격에서 접속한 세션 이력 저장
YYYY.MM.DD.asl 에러 데이터 시스템 또는 애플리케이션의 에러 발생 시 메모리 상태 등의 정보를 저장

ASL 포맷 관리를 위한 aslmanager 프로세스는 ASL 관리를 위해 주요 로그의 로깅 기간을 관리한다. 이러한 정보는 /private/var/log/asl/Logs/ 에 텍스트 형태로 저장된다. aslmanager가 남기는 로그는 최대 2일치가 저장되며, 로그 파일에서 관리 중인 ASL 로그의 정보를 획득할 수 있다.

파일 포맷

ASL 파일 포맷은 공개되어 있으며 asl_file.h에서 확인할 수 있다.

헤더

파일의 헤더는 빅 엔디안으로 구성된다. 총 크기는 0x50 바이트이나 실제로는 0x2C 바이트만 사용된다.

위치(16진수) 크기 이름 정보
0x00 12 쿠키 시그니처 정보(ASL DB)
0x0C 4 버전 ASL 포맷의 리비전 번호. 10.6 이후 현재까지 2를 저장함
0x10 8 시작 레코드 위치 로그의 기록 단위인 레코드의 최초 기록 위치
0x18 8 최종 기록 시간 마지막 레코드가 기록된 시간이 저장
0x20 4 문자열 캐시 크기  
0x24 8  마지막 레코드 위치 마지막으로 기록한 로그의 위치를 저장하기 위해 사용되나 실제로 저장된 정보는 없음

레코드

레코드는 로그를 기록하고 있다. 레코드 첫번 째 인자의 2바이트 값에 따라 MSG 레코드와 STR 레코드로 분류된다.

MSG 레코드

실제 로그가 저장된 레코드이다.

위치(16진수) 크기 이름 정보
0x00 2 타입 MSG, STR 레코드 분류를 위한 정보. 0이면 MSG, 1이면 STR
0x02 4 길이 레코드의 전체 길이
0x06 8 다음 레코드의 위치 다음에 기록된 레코드의 위치 정보 기록. 0이면 마지막 레코드를 의미
0x0E 8 레코드 ID 레코드 고유 값
0x16 8 타임스탬프 현재 시간 정보(유닉스 타임)
0x2E 4 나노초 타임스탬프에서 나노초 값을 저장
0x32 2 플래그 메시지 유형을 저장. 값이 낮을 수록 높은 중요도를 의미
0x34 4 PID 프로세스 식별자
0x38 4 UID 사용자 식별자
0x3C 4 GID 그룹 식별자
0x40 4 RUID 실제 사용자 식별자
0x44 4 RGID 실제 그룹 식별자
0x48 8 참조 ID  
0x50 8 호스트  
0x58 8 송신자  
0x60 8 퍼실리티  
0x68 8 메시지 ㅇㅇㅇ

플래그 값은 다음과 같이 정의된다.

필드 정의
0 긴급(EMERGENCY)
1 주의(ALERT)
2 심각(CRITICAL)
3 에러(ERROR)
4 경로(WARNING)
5 고지(NOTICE)
6 정보(INFO)
7 디버깅(DEBUG)

STR 레코드

STR 레코드는 문자열을 저장하는 레코드로 MSG 레코드에서 문자열이 8바이트 이상인 경우 이 STR 레코드의 문자열을 참조한다. STR 레코드는 전형적인 TLV 구조를 가진다.

위치(16진수) 크기 이름 정보
0x00 2 타입 MSG, STR 레코드 분류를 위한 정보. 0이면 MSG, 1이면 STR
0x02 4 길이 레코드의 전체 길이
0x06 길이 문자열 저장된 문자열(마지막 NULL을 포함)