macOSTriageCollectionScript
macOS용 트라이지(triage) 데이터 수집 스크립트로, sysdiagnose를 활용하고 몇 가지 추가 기능을 더해 조사에 유용한 트라이지 데이터를 수집합니다.
스크립트는 무엇을 수집하나요?
수집되는 데이터는 다음과 같습니다:
- sysdiagnose: 다양한 macOS/iOS 운영 체제에서 '시스템 전반의 진단 정보'를 수집하는 유틸리티입니다. 주로 로그 파일과 수집되는 실시간 데이터를 위해 사용됩니다.
- 파일 목록: APFS는 NTFS와 같은 마스터 파일 테이블이 없으므로 파일 시스템에 무엇이 존재하는지 파악하기 위해 stat, shasum, _file_을 조합하여 여러 CSV 파일을 생성합니다. 수집된 데이터는 위협 인텔리전스 피드와 함께 사용하여 파일 해시로 악성 파일을 식별하거나 비정상적인 파일을 탐지하는 데 활용할 수 있습니다. 이 과정은 상당히 집약적이므로 스크립트에는 이 단계를 제외하는 빠른 모드 플래그가 있습니다.
- Safari, Chrome, Firefox의 브라우저 데이터는 악성 다운로드, 피싱 공격을 배제하거나 의심스러운 브라우저 확장 프로그램을 식별하기 위해 수집됩니다.
- Bash/Zsh 히스토리는 일반적인 활동을 파악하고, 이상 징후나 직접적인 키보드 입력 활동을 식별하기 위해 수집됩니다.
- FSEvents: Windows 머신의 USN 저널과 유사한 휘발성 로그 소스입니다. _sysdiagnose_가 수집하는 'system_logs.logarchive'에 포함되어 있지만, 아직 'system_logs.logarchive'에 기록되지 않았을 수 있는 파일 시스템의 최근 활동을 파악하는 데 사용할 수 있습니다.
- 확장 속성 수집: _xattr_과 _mdfind_을 활용하여 속성을 찾고 파싱한 뒤 Sqlite3 데이터베이스에 저장합니다. 속성의 파일 유형을 결정하고 데이터를 16진수로 저장하며, 기본적으로 수집되는 속성은 "kMDItemDownloadedDate"와 "kMDItemWhereFroms"뿐입니다. 그러나 section_7 함수의 attributes 배열에 추가하여 더 많은 속성을 수집할 수 있습니다.
- LaunchAgents, LaunchDaemons, LoginItems, Emond 규칙을 포함한 여러 지속성(persistence) 메커니즘도 수집됩니다.
- 마지막으로 _lsof_의 일부 실시간 데이터를 통해 비정상적인 파일, 프로세스 또는 네트워크 연결을 식별합니다.
사용 방법
스크립트는 sysdiagnose 및 다양한 파일 시스템 위치에서 수집을 허용하려면 sudo로 실행해야 하며, sudo로만 실행할 수 있습니다.
터미널은 기본적으로 필요한 다양한 위치에 접근할 수 없으므로 터미널에 '전체 디스크 접근 권한(full disk access)'을 활성화해야 합니다. 이는 시스템 환경설정 > 보안 및 개인 정보 보호 > 개인 정보 보호 > 전체 디스크 접근 권한에서 설정할 수 있으며, 변경 사항을 확인하려면 창 왼쪽 하단의 자물쇠를 클릭하고 터미널 세션을 다시 시작하세요.
오류가 발생하면 수집 섹션에 해당하는 *.errors 파일 중 하나에 저장됩니다.
수집된 데이터는 현재 작업 디렉터리에 '호스트 이름의 md5'_YYYY-MM-DD_HHMMSS/ 패턴의 디렉터리에 저장됩니다. 수집이 완료되면 데이터는 호스트 이름의 md5로 명명된 tar.gz로 압축되며, 호스트 이름을 변환하는 이유는 특수 문자 관련 문제를 방지하기 위함입니다.
스크립트 플래그:
'''
빠른 모드: -q
파일 목록 생성을 건너뛰려면 스크립트 실행 시 이 플래그를 포함하세요.
도움말: -h
짧은 도움말 메시지를 출력합니다.
'''
면책 조항
이 스크립트는 압축 후 수집한 데이터를 삭제하지 않습니다. 여기에는 민감한 정보가 포함되어 있으므로 사용 후 반드시 안전하게 삭제하세요.
사용 편의를 위해 이 스크립트는 터미널에 전체 디스크 접근 권한을 활성화해야 하며, 수집 후에는 이 권한을 비활성화하는 것이 좋습니다.
마지막으로 수집된 데이터는 법의학적으로 완전히 신뢰할 수 있는 것으로 간주해서는 안 됩니다.
macOS 10.15에서 테스트됨