Written by
n0fate
on
on
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을 포함) |