
Swift로 작성된 MacOS용 사용자 모드 애플리케이션 인증 시스템
Sinter는 macOS 10.15 이상을 위한 100% 사용자 모드 엔드포인트 보안 에이전트이며, Swift로 작성되었습니다.
Sinter는 사용자 모드 EndpointSecurity API를 사용하여 macOS 커널로부터 인증 콜백을 구독하고 수신하며, 일련의 보안 관련 이벤트 유형을 처리합니다. 현재 버전의 Sinter는 프로세스 실행을 허용/차단하는 기능을 지원합니다. 향후 버전에서는 파일, 소켓, 커널 이벤트와 같은 다른 유형의 이벤트도 지원할 계획입니다.
Sinter는 작업 진행 중입니다. 피드백을 환영합니다. 잠재력을 실현하는 데 기여하거나 후원하는 데 관심이 있다면, 연락 주세요.
계획된 향후 기능:
프로세스 허용/차단을 위한 최초의 오픈소스 macOS 솔루션은 Google Santa였습니다. 우리는 Santa의 팬이며, 과거에 그 코드베이스에 기여한 적이 있습니다. 그러나 오랫동안 macOS 커뮤니티의 많은 사람들은 프로세스 이벤트뿐만 아니라 더 많은 것을 추적하고 관리할 수 있는 오픈소스 솔루션을 요청해 왔습니다.
우리는 macOS 10.15의 EndpointSecurity API로 그러한 기능을 구축하기에 이상적인 플랫폼을 보았습니다. 순수 사용자 모드 API를 중심으로 처음부터 새로 구축함으로써 더 단순한 설계를 시도하고, 더 안전한 메모리 처리와 더 나은 성능을 갖춘 현대적인 프로그래밍 언어를 사용할 수 있었습니다. 그래서 우리는 Sinter를 개발하기 시작했습니다. Sinter는 "Sinter Klausen"의 줄임말로, 산타클로스의 다른 이름입니다.
최신 버전의 Sinter를 Releases 페이지의 pkg 설치 프로그램 링크를 사용하여 다운로드하고 설치합니다.
Sinter를 설치한 후에는 Sinter.app에 대해 '전체 디스크 접근' 권한을 활성화해야 합니다. 시스템 환경설정, 보안 및 개인정보 보호, 개인정보 보호 탭, 전체 디스크 접근을 열어 수행합니다. Sinter.app 항목을 체크합니다. MDM을 사용하는 경우 엔드포인트에서 이 권한을 자동으로 활성화할 수 있으며, 사용자 상호작용이 필요하지 않습니다.
Sinter requires a configuration file to be present at /etc/sinter/config.json. An example is provided in the source tree at ./config/config.json:
{
"Sinter": {
"decision_manager": "local",
"logger": "filesystem",
"allow_unsigned_programs": "true",
"allow_invalid_programs": "true",
"allow_unknown_programs": "true",
"allow_expired_auth_requests": "true",
"allow_misplaced_applications": "true",
"config_update_interval": 600,
"allowed_application_directories": [
"/bin",
"/usr/bin",
"/usr/local/bin",
"/Applications",
"/System",
"/usr/sbin",
"/usr/libexec",
],
},
"FilesystemLogger": {
"log_file_path": "/var/log/sinter.log",
},
"RemoteDecisionManager": {
"server_url": "https://server_address:port",
"machine_identifier": "identifier",
},
"LocalDecisionManager": {
"rule_database_path": "/etc/sinter/rules.json",
}
}
결정 관리자 플러그인은 decision_manager 값을 변경하여 선택할 수 있습니다. local 플러그인은 LocalDecisionManager 구성 섹션을 활성화하여 Sinter가 지정된 경로에 있는 로컬 규칙 데이터베이스를 사용하도록 합니다. sync-server 플러그인을 대신 사용하면 Santa 호환 동기화 서버를 사용할 수 있습니다. 이렇게 하면 RemoteDecisionManager 구성 섹션이 활성화되어 서버 URL과 머신 식별자를 설정할 수 있습니다.
현재 두 가지 로거 플러그인이 구현되어 있습니다:
허용된 폴더에서 시작되지 않은 애플리케이션을 기록하고 선택적으로 차단하도록 Sinter를 구성할 수 있습니다.
sudo /Applications/Sinter.app/Contents/MacOS/Sinter --install-notification-server/Applications/Sinter.app/Contents/MacOS/Sinter --start-notification-serverSinter에서는 모든 것이 규칙 기반이므로 모드가 구현되어 있지 않습니다. 다음 설정을 조정하여 모니터링 기능을 구현할 수 있습니다:
규칙 데이터베이스는 JSON 형식으로 작성됩니다. 다음은 cmake.org의 CMake 애플리케이션 번들을 허용하는 예제 데이터베이스입니다:
{
"rules": [
{
"rule_type": "BINARY",
"policy": "ALLOWLIST",
"sha256": "BDD0AF132D89EA4810566B3E1E0D1E48BAC6CF18D0C787054BB62A4938683039",
"custom_msg": "CMake"
}
]
}
Sinter는 현재 ALLOWLIST 또는 DENYLIST 정책을 사용하는 BINARY 규칙만 지원합니다. 코드 디렉토리 해시 값은 codesign 도구 출력에서 가져올 수 있습니다(예: codesign -dvvv /Applications/CMake.app). CLI 도구는 전체 SHA256 해시를 획득할 수 있지만, 커널/EndpointSecurity API는 처음 20바이트로 제한됩니다.
Sinter를 빌드하려면 Apple이 조직에 부여해야 하는 특정 코드 서명 인증서와 자격이 필요합니다. 그러나 SIP가 비활성화된 테스트 시스템에서 소스에서 빌드하여 로컬로 실행할 수 있습니다. 자세한 지침은 Sinter 위키를 참조하세요.
Sinter는 AGPLv3 라이선스에 따라 라이선스가 부여되고 배포됩니다. 약관에 대한 예외가 필요한 경우 문의해 주세요.