macOS Gatekeeper / Quarantine / XProtect
Gatekeeper
Gatekeeper é um recurso de segurança desenvolvido para sistemas operacionais Mac, projetado para garantir que os usuários executem apenas software confiável em seus sistemas. Ele funciona validando o software que um usuário baixa e tenta abrir de fontes fora da App Store, como um aplicativo, um plug-in ou um pacote de instalação.
O mecanismo chave do Gatekeeper reside em seu processo de verificação. Ele verifica se o software baixado está assinado por um desenvolvedor reconhecido, garantindo a autenticidade do software. Além disso, ele verifica se o software está notarizado pela Apple, confirmando que está livre de conteúdo malicioso conhecido e não foi adulterado após a notarização.
Além disso, o Gatekeeper reforça o controle e a segurança do usuário, solicitando que os usuários aprovem a abertura do software baixado pela primeira vez. Essa salvaguarda ajuda a evitar que os usuários executem inadvertidamente código executável potencialmente prejudicial que possam ter confundido com um arquivo de dados inofensivo.
Assinaturas de Aplicativos
As assinaturas de aplicativos, também conhecidas como assinaturas de código, são um componente crítico da infraestrutura de segurança da Apple. Elas são usadas para verificar a identidade do autor do software (o desenvolvedor) e para garantir que o código não foi adulterado desde a última assinatura.
Veja como funciona:
Assinando o Aplicativo: Quando um desenvolvedor está pronto para distribuir seu aplicativo, ele assina o aplicativo usando uma chave privada. Essa chave privada está associada a um certificado que a Apple emite para o desenvolvedor quando ele se inscreve no Programa de Desenvolvedores da Apple. O processo de assinatura envolve a criação de um hash criptográfico de todas as partes do aplicativo e a criptografia desse hash com a chave privada do desenvolvedor.
Distribuindo o Aplicativo: O aplicativo assinado é então distribuído aos usuários junto com o certificado do desenvolvedor, que contém a chave pública correspondente.
Verificando o Aplicativo: Quando um usuário baixa e tenta executar o aplicativo, o sistema operacional Mac usa a chave pública do certificado do desenvolvedor para descriptografar o hash. Em seguida, ele recalcula o hash com base no estado atual do aplicativo e compara isso com o hash descriptografado. Se eles coincidirem, isso significa que o aplicativo não foi modificado desde que o desenvolvedor o assinou, e o sistema permite que o aplicativo seja executado.
As assinaturas de aplicativos são uma parte essencial da tecnologia Gatekeeper da Apple. Quando um usuário tenta abrir um aplicativo baixado da internet, o Gatekeeper verifica a assinatura do aplicativo. Se estiver assinado com um certificado emitido pela Apple para um desenvolvedor conhecido e o código não tiver sido adulterado, o Gatekeeper permite que o aplicativo seja executado. Caso contrário, ele bloqueia o aplicativo e alerta o usuário.
A partir do macOS Catalina, o Gatekeeper também verifica se o aplicativo foi notarizado pela Apple, adicionando uma camada extra de segurança. O processo de notarização verifica o aplicativo em busca de problemas de segurança conhecidos e código malicioso, e se essas verificações forem aprovadas, a Apple adiciona um ticket ao aplicativo que o Gatekeeper pode verificar.
Verificar Assinaturas
Ao verificar alguma amostra de malware, você deve sempre verificar a assinatura do binário, pois o desenvolvedor que o assinou pode já estar relacionado com malware.
Notarização
O processo de notarização da Apple serve como uma proteção adicional para proteger os usuários de software potencialmente prejudicial. Envolve o desenvolvedor enviando seu aplicativo para exame pelo Serviço de Notário da Apple, que não deve ser confundido com a Revisão de Aplicativos. Este serviço é um sistema automatizado que analisa o software enviado em busca de conteúdo malicioso e quaisquer problemas potenciais com a assinatura de código.
Se o software passar nesta inspeção sem levantar preocupações, o Serviço de Notário gera um ticket de notarização. O desenvolvedor é então obrigado a anexar este ticket ao seu software, um processo conhecido como 'stapling'. Além disso, o ticket de notarização também é publicado online, onde o Gatekeeper, a tecnologia de segurança da Apple, pode acessá-lo.
Na primeira instalação ou execução do software pelo usuário, a existência do ticket de notarização - seja anexado ao executável ou encontrado online - informa ao Gatekeeper que o software foi notariado pela Apple. Como resultado, o Gatekeeper exibe uma mensagem descritiva no diálogo de lançamento inicial, indicando que o software passou por verificações de conteúdo malicioso pela Apple. Esse processo, portanto, aumenta a confiança do usuário na segurança do software que eles instalem ou executem em seus sistemas.
spctl & syspolicyd
Observe que a partir da versão Sequoia, spctl
não permite mais modificar a configuração do Gatekeeper.
spctl
é a ferramenta CLI para enumerar e interagir com o Gatekeeper (com o daemon syspolicyd
via mensagens XPC). Por exemplo, é possível ver o status do GateKeeper com:
Observe que as verificações de assinatura do GateKeeper são realizadas apenas em arquivos com o atributo de Quarentena, não em todos os arquivos.
O GateKeeper verificará se, de acordo com as preferências e a assinatura, um binário pode ser executado:
syspolicyd
é o principal daemon responsável por impor o Gatekeeper. Ele mantém um banco de dados localizado em /var/db/SystemPolicy
e é possível encontrar o código para suportar o banco de dados aqui e o modelo SQL aqui. Observe que o banco de dados não é restrito pelo SIP e é gravável pelo root, e o banco de dados /var/db/.SystemPolicy-default
é usado como um backup original caso o outro fique corrompido.
Além disso, os pacotes /var/db/gke.bundle
e /var/db/gkopaque.bundle
contêm arquivos com regras que são inseridas no banco de dados. Você pode verificar este banco de dados como root com:
syspolicyd
também expõe um servidor XPC com diferentes operações como assess
, update
, record
e cancel
, que também são acessíveis usando as APIs SecAssessment*
do Security.framework
e xpctl
na verdade se comunica com syspolicyd
via XPC.
Note como a primeira regra terminou em "App Store" e a segunda em "Developer ID" e que na imagem anterior estava habilitado para executar aplicativos da App Store e desenvolvedores identificados. Se você modificar essa configuração para App Store, as regras de "Notarized Developer ID" desaparecerão.
Também existem milhares de regras do tipo GKE:
Estes são hashes que vêm de:
/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth
/var/db/gke.bundle/Contents/Resources/gk.db
/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db
Ou você poderia listar as informações anteriores com:
As opções --master-disable
e --global-disable
do spctl
desativarão completamente essas verificações de assinatura:
Quando completamente ativado, uma nova opção aparecerá:
É possível verificar se um aplicativo será permitido pelo GateKeeper com:
É possível adicionar novas regras no GateKeeper para permitir a execução de certos aplicativos com:
Quanto às extensões de kernel, a pasta /var/db/SystemPolicyConfiguration
contém arquivos com listas de kexts permitidos para serem carregados. Além disso, spctl
possui a permissão com.apple.private.iokit.nvram-csr
porque é capaz de adicionar novas extensões de kernel pré-aprovadas que precisam ser salvas também na NVRAM em uma chave kext-allowed-teams
.
Arquivos de Quarentena
Ao baixar um aplicativo ou arquivo, aplicativos específicos do macOS, como navegadores da web ou clientes de email, anexam um atributo de arquivo estendido, comumente conhecido como "flag de quarentena", ao arquivo baixado. Este atributo atua como uma medida de segurança para marcar o arquivo como proveniente de uma fonte não confiável (a internet) e potencialmente portador de riscos. No entanto, nem todos os aplicativos anexam esse atributo; por exemplo, softwares comuns de cliente BitTorrent geralmente ignoram esse processo.
A presença de um flag de quarentena sinaliza o recurso de segurança Gatekeeper do macOS quando um usuário tenta executar o arquivo.
No caso em que o flag de quarentena não está presente (como com arquivos baixados via alguns clientes BitTorrent), as verificações do Gatekeeper podem não ser realizadas. Assim, os usuários devem ter cautela ao abrir arquivos baixados de fontes menos seguras ou desconhecidas.
Verificar a validade das assinaturas de código é um processo intensivo em recursos que inclui gerar hashes criptográficos do código e todos os seus recursos agrupados. Além disso, verificar a validade do certificado envolve fazer uma verificação online nos servidores da Apple para ver se foi revogado após ser emitido. Por essas razões, uma verificação completa de assinatura de código e notificação é impraticável de ser executada toda vez que um aplicativo é iniciado.
Portanto, essas verificações são realizadas apenas ao executar aplicativos com o atributo de quarentena.
Este atributo deve ser definido pelo aplicativo que cria/baixa o arquivo.
No entanto, arquivos que estão em sandbox terão esse atributo definido para cada arquivo que criam. E aplicativos não sandboxed podem defini-lo eles mesmos ou especificar a chave LSFileQuarantineEnabled no Info.plist, que fará com que o sistema defina o atributo estendido com.apple.quarantine
nos arquivos criados,
Além disso, todos os arquivos criados por um processo chamando qtn_proc_apply_to_self
são colocados em quarentena. Ou a API qtn_file_apply_to_path
adiciona o atributo de quarentena a um caminho de arquivo especificado.
É possível verificar seu status e habilitar/desabilitar (root necessário) com:
Você também pode verificar se um arquivo tem o atributo estendido de quarentena com:
Verifique o valor dos atributos estendidos e descubra o aplicativo que escreveu o atributo de quarentena com:
Na verdade, um processo "poderia definir as flags de quarentena nos arquivos que cria" (já tentei aplicar a flag USER_APPROVED em um arquivo criado, mas não funcionou):
Last updated