{"id":78514,"date":"2020-04-20T01:42:32","date_gmt":"2020-04-19T23:42:32","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/kak-zashhishhat-proczessy-i-rasshireniya-yadra-v-macos"},"modified":"2020-04-20T01:42:32","modified_gmt":"2020-04-19T23:42:32","slug":"kak-zashhishhat-proczessy-i-rasshireniya-yadra-v-macos","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/kak-zashhishhat-proczessy-i-rasshireniya-yadra-v-macos","title":{"rendered":"Como proteger processos e extens\u00f5es do n\u00facleo no macOS","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ol\u00e1, Habr! Hoje eu gostaria de falar sobre como proteger processos contra as investidas de invasores no macOS. Por exemplo, isso \u00e9 \u00fatil para antiv\u00edrus ou sistemas de backup, especialmente considerando que existem v\u00e1rias maneiras de 'matar' um processo no macOS. Sobre isso e os m\u00e9todos de prote\u00e7\u00e3o, leia mais abaixo.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/acronis\/blog\/497714\/\"><img decoding=\"async\" alt=\"Como proteger processos e extens\u00f5es do n\u00facleo no macOS\" src=\"\/wp-content\/uploads\/2020\/04\/621276e5dd7c90dd48c34c94f3b37cf2.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>M\u00e9todo cl\u00e1ssico para 'matar' um processo<\/h3>\n<p>\nUm m\u00e9todo bem conhecido para 'matar' um processo \u00e9 enviar um sinal SIGKILL ao processo. Atrav\u00e9s do bash, voc\u00ea pode usar o comando padr\u00e3o 'kill -SIGKILL PID' ou 'pkill -9 NAME' para realizar a a\u00e7\u00e3o. O comando 'kill' \u00e9 conhecido desde os tempos do UNIX e est\u00e1 dispon\u00edvel n\u00e3o apenas no macOS, mas tamb\u00e9m em outros sistemas semelhantes ao UNIX.<\/p>\n<p>Assim como nos sistemas semelhantes ao UNIX, o macOS permite interceptar qualquer sinal para um processo, exceto dois: SIGKILL e SIGSTOP. Este artigo se concentrar\u00e1 principalmente no sinal SIGKILL, que \u00e9 o sinal que provoca a morte do processo.<\/p>\n<h3>Particularidades do macOS<br \/>\n<\/h3>\n<p>\nNo macOS, a chamada de sistema kill no n\u00facleo XNU invoca a fun\u00e7\u00e3o psignal(SIGKILL,&#8230;). Vamos explorar quais outras a\u00e7\u00f5es do usu\u00e1rio no userspace podem chamar a fun\u00e7\u00e3o psignal. Iremos filtrar as chamadas da fun\u00e7\u00e3o psignal nos mecanismos internos do n\u00facleo (embora possam ser n\u00e3o triviais, deixaremos isso para outro artigo \ud83d\ude42 \u2014 verifica\u00e7\u00e3o de assinatura, erros de mem\u00f3ria, tratamento de exit\/terminate, viola\u00e7\u00e3o de prote\u00e7\u00e3o de arquivos, etc.). <\/p>\n<p>Come\u00e7aremos a an\u00e1lise com a fun\u00e7\u00e3o e a respectiva chamada de sistema <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/apple\/darwin-xnu\/blob\/a449c6a3b8014d9406c2ddbdc81795da24aa7443\/bsd\/kern\/kern_sig.c#L1672\">terminate_with_payload<\/a><\/noindex>. \u00c9 vis\u00edvel que, al\u00e9m da chamada cl\u00e1ssica kill, existe uma abordagem alternativa que \u00e9 espec\u00edfica para o sistema operacional macOS e n\u00e3o \u00e9 encontrada no BSD. Os princ\u00edpios de funcionamento de ambas as chamadas de sistema tamb\u00e9m s\u00e3o semelhantes. Elas consistem em chamadas diretas \u00e0 fun\u00e7\u00e3o do n\u00facleo psignal. Tamb\u00e9m devemos observar que, antes de matar um processo, \u00e9 feita a verifica\u00e7\u00e3o 'cansignal' \u2013 se o processo pode enviar um sinal para outro processo, o sistema n\u00e3o permite que qualquer aplicativo mate processos do sistema, por exemplo.<\/p>\n<pre><code class=\"cpp\">static int\nterminate_with_payload_internal(struct proc *cur_proc, int target_pid, uint32_t reason_namespace,\n\t\t\t\tuint64_t reason_code, user_addr_t payload, uint32_t payload_size,\n\t\t\t\tuser_addr_t reason_string, uint64_t reason_flags)\n{\n...\n\ttarget_proc = proc_find(target_pid);\n...\n\tif (!cansignal(cur_proc, cur_cred, target_proc, SIGKILL)) {\n\t\tproc_rele(target_proc);\n\t\treturn EPERM;\n\t}\n...\n\tif (target_pid == cur_proc-&gt;p_pid) {\n\t\t\/*\n\t\t * psignal_thread_with_reason() ir\u00e1 pendurar um SIGKILL no thread especificado ou\n\t\t * retornar se o thread e\/ou tarefa j\u00e1 estiverem terminando. De qualquer forma, o\n\t\t * thread atual n\u00e3o retornar\u00e1 ao espa\u00e7o do usu\u00e1rio.\n\t\t * \/\n\t\tpsignal_thread_with_reason(target_proc, current_thread(), SIGKILL, signal_reason);\n\t} else {\n\t\tpsignal_with_reason(target_proc, SIGKILL, signal_reason);\n\t}\n...\n}\n<\/code><\/pre>\n<p><\/p>\n<h3>launchd<\/h3>\n<p>\nO m\u00e9todo padr\u00e3o para criar d\u00e9monios durante a inicializa\u00e7\u00e3o do sistema e controlar seu tempo de vida \u00e9 o launchd. Vale destacar que os c\u00f3digos fonte apresentados s\u00e3o da vers\u00e3o antiga do launchctl antes do macOS 10.10, os exemplos de c\u00f3digo s\u00e3o meramente ilustrativos. O launchctl moderno envia sinais ao launchd atrav\u00e9s do XPC, e a l\u00f3gica do launchctl foi transferida para l\u00e1.<\/p>\n<p>Vamos considerar como a interrup\u00e7\u00e3o de aplicativos \u00e9 realizada. Antes de enviar o sinal SIGTERM, o aplicativo \u00e9 tentado ser interrompido usando a chamada de sistema \"proc_terminate\".<\/p>\n<pre><code class=\"cpp\">...\n\terror = proc_terminate(j-&gt;p, &amp;sig);\n\tif (error) {\n\t\tjob_log(j, LOG_ERR | LOG_CONSOLE, \"N\u00e3o foi poss\u00edvel encerrar o trabalho: %d: %s\", error, strerror(error));\n\t\tjob_log(j, LOG_NOTICE | LOG_CONSOLE, \"Usando a op\u00e7\u00e3o de fallback para encerrar o trabalho...\");\n\t\terror = kill2(j-&gt;p, SIGTERM);\n\t\tif (error) {\n\t\t\tjob_log(j, LOG_ERR, \"N\u00e3o foi poss\u00edvel sinalizar o trabalho: %d: %s\", error, strerror(error));\n\t\t} \n...\n<\/code><\/pre>\n<p>\nSob o cap\u00f4, a proc_terminate, apesar do seu nome, pode enviar n\u00e3o apenas psignal com SIGTERM, mas tamb\u00e9m SIGKILL.<\/p>\n<h3>Morte indireta - restri\u00e7\u00e3o de recursos<\/h3>\n<p>\nUm caso mais interessante pode ser visto em outra chamada de sistema <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/apple\/darwin-xnu\/blob\/a449c6a3b8014d9406c2ddbdc81795da24aa7443\/bsd\/kern\/process_policy.c#L652\">process_policy<\/a><\/noindex>. O uso padr\u00e3o dessa chamada de sistema \u00e9 a restri\u00e7\u00e3o de recursos dos aplicativos, por exemplo, para um indexador, limitar a cota de tempo de CPU e mem\u00f3ria, para que o sistema n\u00e3o desacelere significativamente devido \u00e0s a\u00e7\u00f5es de cache do arquivo. Se o aplicativo alcan\u00e7ar o limite de recursos, como pode ser visto na fun\u00e7\u00e3o proc_apply_resource_actions, um sinal SIGKILL \u00e9 enviado ao processo.<\/p>\n<p>Apesar do fato de que essa chamada de sistema pode potencialmente executar a morte do processo, o sistema n\u00e3o verificou adequadamente os direitos do processo que est\u00e1 chamando a chamada de sistema. Na verdade, a verifica\u00e7\u00e3o <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/apple\/darwin-xnu\/blob\/a449c6a3b8014d9406c2ddbdc81795da24aa7443\/bsd\/kern\/process_policy.c#L267\">existia<\/a><\/noindex>, mas \u00e9 suficiente usar a flag alternativa PROC_POLICY_ACTION_SET para contornar essa condi\u00e7\u00e3o.<\/p>\n<p>A partir daqui, se voc\u00ea \"limitar\" a cota de uso de CPU de um aplicativo (por exemplo, permitindo a execu\u00e7\u00e3o de apenas 1 ns), \u00e9 poss\u00edvel matar qualquer processo no sistema. Assim, um malware pode encerrar qualquer processo no sistema, incluindo o processo do antiv\u00edrus. Tamb\u00e9m \u00e9 interessante o efeito que ocorre ao matar o processo com pid 1 (launchctl) \u2014 um kernel panic ao tentar processar o sinal SIGKILL \ud83d\ude42<\/p>\n<p><img decoding=\"async\" alt=\"Como proteger processos e extens\u00f5es do n\u00facleo no macOS\" src=\"\/wp-content\/uploads\/2020\/04\/46adadb9b3f28b78f0b9df410e601bb9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Como resolver o problema?<\/h3>\n<p>\nA maneira mais direta de proibir o encerramento de um processo \u00e9 substituir o ponteiro da fun\u00e7\u00e3o na tabela de chamadas do sistema. Infelizmente, esse m\u00e9todo n\u00e3o \u00e9 trivial por v\u00e1rias raz\u00f5es.<\/p>\n<p>Primeiro, o s\u00edmbolo que representa a posi\u00e7\u00e3o do sysent na mem\u00f3ria n\u00e3o s\u00f3 \u00e9 um s\u00edmbolo privado do n\u00facleo XNU, como tamb\u00e9m n\u00e3o pode ser encontrado nos s\u00edmbolos do n\u00facleo. Ser\u00e1 necess\u00e1rio usar m\u00e9todos heur\u00edsticos de busca, como a desassemblagem din\u00e2mica da fun\u00e7\u00e3o e a busca do ponteiro nela.<\/p>\n<p>Em segundo lugar, a estrutura dos registros na tabela depende das flags com as quais o n\u00facleo foi compilado. Se a flag CONFIG_REQUIRES_U32_MUNGING estiver declarada, o tamanho da estrutura ser\u00e1 alterado \u2014 um campo adicional ser\u00e1 adicionado. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/apple\/darwin-xnu\/blob\/a449c6a3b8014d9406c2ddbdc81795da24aa7443\/bsd\/sys\/sysent.h#L45\">sy_arg_munge32<\/a><\/noindex>. \u00c9 necess\u00e1rio realizar uma verifica\u00e7\u00e3o adicional sobre qual flag foi usada na compila\u00e7\u00e3o do n\u00facleo, como uma op\u00e7\u00e3o de comparar ponteiros para fun\u00e7\u00f5es conhecidas.<\/p>\n<pre><code class=\"cpp\">struct sysent {         \n        \/* Tabela de chamadas do sistema *\/\n        sy_call_t       *sy_call;       \/* fun\u00e7\u00e3o de implementa\u00e7\u00e3o *\/\n#if CONFIG_REQUIRES_U32_MUNGING || (__arm__ &amp;&amp; (__BIGGEST_ALIGNMENT__ &gt; 4))\n        sy_munge_t      *sy_arg_munge32; \/* munger de argumentos de chamada do sistema para processos de 32 bits *\/\n#endif\n        int32_t         sy_return_type; \/* tipos de retorno de chamadas do sistema *\/\n        int16_t         sy_narg;        \/* n\u00famero de argumentos *\/\n        uint16_t        sy_arg_bytes;   \/* Tamanho total dos argumentos em bytes para\n                                         * chamadas de sistema de 32 bits *\/\n};\n<\/code><\/pre>\n<p>\nFelizmente, nas vers\u00f5es modernas do macOS, a Apple fornece uma nova API para trabalhar com processos. A Endpoint Security API permite que os clientes autorizem muitas solicita\u00e7\u00f5es a outros processos. Assim, \u00e9 poss\u00edvel bloquear qualquer sinal para processos, incluindo o sinal SIGKILL, atrav\u00e9s da API mencionada.<\/p>\n<pre><code class=\"cpp\">#include &lt;bsm\/libbsm.h&gt;\n#include &lt;EndpointSecurity\/EndpointSecurity.h&gt;\n#include &lt;unistd.h&gt;\n\nint main(int argc, const char * argv[]) {\n    es_client_t* cli = nullptr;\n    {\n        auto res = es_new_client(&amp;cli, ^(es_client_t * client, const es_message_t * message) {\n            switch (message-&gt;event_type) {\n                case ES_EVENT_TYPE_AUTH_SIGNAL:\n                {\n                    auto&amp; msg = message-&gt;event.signal;\n                    auto target = msg.target;\n                    auto&amp; token = target-&gt;audit_token;\n                    auto pid = audit_token_to_pid(token);\n                    printf(&quot;signal '%d' sent to pid '%d'n&quot;, msg.sig, pid);\n                    es_respond_auth_result(client, message, pid == getpid() ? ES_AUTH_RESULT_DENY : ES_AUTH_RESULT_ALLOW, false);\n                }\n                    break;\n                default:\n                    break;\n            }\n        });\n    }\n\n    {\n        es_event_type_t evs[] = { ES_EVENT_TYPE_AUTH_SIGNAL };\n        es_subscribe(cli, evs, sizeof(evs) \/ sizeof(*evs));\n    }\n\n    printf(&quot;%dn&quot;, getpid());\n    sleep(60); \/\/ could be replaced with other waiting primitive\n\n    es_unsubscribe_all(cli);\n    es_delete_client(cli);\n\n    return 0;\n}\n<\/code><\/pre>\n<p>\nDa mesma forma, no n\u00facleo, \u00e9 poss\u00edvel registrar uma Pol\u00edtica MAC, que fornece um m\u00e9todo de prote\u00e7\u00e3o contra sinais (policy proc_check_signal), embora a API n\u00e3o seja oficialmente suportada.<\/p>\n<h3>Prote\u00e7\u00e3o da extens\u00e3o do n\u00facleo<\/h3>\n<p>\nAl\u00e9m da prote\u00e7\u00e3o dos processos no sistema, \u00e9 essencial proteger a pr\u00f3pria extens\u00e3o do kernel (kext). O macOS oferece aos desenvolvedores um framework para o desenvolvimento conveniente de drivers de dispositivos, o IOKit. Al\u00e9m de fornecer ferramentas para interagir com dispositivos, o IOKit oferece m\u00e9todos para empilhamento de drivers (driver stacking) por meio de inst\u00e2ncias de classes em C++. Um aplicativo em userspace pode \"encontrar\" uma inst\u00e2ncia de classe registrada para estabelecer uma conex\u00e3o entre kernel e userspace.<\/p>\n<p>Para detectar o n\u00famero de inst\u00e2ncias de classes no sistema, existe a utilidade ioclasscount.<\/p>\n<pre><code class=\"cpp\">my_kext_ioservice = 1\nmy_kext_iouserclient = 1\n<\/code><\/pre>\n<p>\nQualquer extens\u00e3o do kernel que deseje registrar-se na pilha de drivers deve declarar uma classe herdada de IOService, por exemplo, my_kext_ioservice neste caso. A conex\u00e3o de aplicativos personalizados provoca a cria\u00e7\u00e3o de uma nova inst\u00e2ncia de classe, que herda de IOUserClient, no exemplo my_kext_iouserclient.<\/p>\n<p>Ao tentar descarregar o driver do sistema (comando kextunload), a fun\u00e7\u00e3o virtual \"bool terminate(IOOptionBits options)\" \u00e9 chamada. \u00c9 suficiente retornar false na chamada da fun\u00e7\u00e3o terminate ao tentar descarregar para proibir o kextunload.<\/p>\n<pre><code class=\"cpp\">bool Kext::terminate(IOOptionBits options)\n{\n\n  if (!IsUnloadAllowed)\n  {\n    \/\/ Descarregamento n\u00e3o permitido, retornando false\n    return false;\n  }\n\n  return super::terminate(options);\n}\n\n<\/code><\/pre>\n<p>\nA flag IsUnloadAllowed pode ser definida pelo IOUserClient durante o carregamento. Com a restri\u00e7\u00e3o de descarregamento, o comando kextunload retornar\u00e1 a seguinte sa\u00edda:<\/p>\n<pre><code class=\"cpp\">admin@admins-Mac drivermanager % sudo kextunload .\/test.kext\nSenha:\n(kernel) N\u00e3o \u00e9 poss\u00edvel remover o kext my.kext.test; servi\u00e7os falharam ao terminar - 0xe00002c7.\nFalha ao descarregar my.kext.test - (iokit\/common) fun\u00e7\u00e3o n\u00e3o suportada.\n<\/code><\/pre>\n<p>\nUma prote\u00e7\u00e3o semelhante deve ser realizada para o IOUserClient. Inst\u00e2ncias de classes podem ser descarregadas por meio da fun\u00e7\u00e3o IOKitLib em userspace \"IOCatalogueTerminate(mach_port_t, uint32_t flag, io_name_t description);\". \u00c9 poss\u00edvel retornar false na chamada do comando \"terminate\" at\u00e9 que o aplicativo em userspace \"morra\", ou seja, at\u00e9 que a fun\u00e7\u00e3o \"clientDied\" seja chamada.<\/p>\n<h3>Prote\u00e7\u00e3o de arquivos<\/h3>\n<p>\nPara proteger arquivos, basta usar a API Kauth, que permite restringir o acesso a arquivos. A Apple fornece aos desenvolvedores notifica\u00e7\u00f5es sobre diversos eventos em escopo, sendo importantes para n\u00f3s as opera\u00e7\u00f5es KAUTH_VNODE_DELETE, KAUTH_VNODE_WRITE_DATA e KAUTH_VNODE_DELETE_CHILD. Restringir o acesso aos arquivos \u00e9 mais f\u00e1cil pelo caminho \u2014 usamos a API 'vn_getpath' para obter o caminho do arquivo e realizamos a compara\u00e7\u00e3o do prefixo do caminho. Vale notar que, para otimizar a renomea\u00e7\u00e3o de caminhos de pastas com arquivos, o sistema n\u00e3o autoriza o acesso a cada arquivo, mas apenas \u00e0 pr\u00f3pria pasta que foi renomeada. \u00c9 necess\u00e1rio realizar a compara\u00e7\u00e3o do caminho pai e restringir o KAUTH_VNODE_DELETE para ele.<\/p>\n<p><img decoding=\"async\" alt=\"Como proteger processos e extens\u00f5es do n\u00facleo no macOS\" src=\"\/wp-content\/uploads\/2020\/04\/409cf53d1cdbeee6a6f56f5c90574bf6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUma desvantagem dessa abordagem pode ser a baixa performance com o aumento do n\u00famero de prefixos. Para que a compara\u00e7\u00e3o n\u00e3o seja igual a O(prefix*length), onde prefix \u00e9 o n\u00famero de prefixos e length \u00e9 o tamanho da string, pode-se usar um aut\u00f4mato finito determin\u00edstico (AFD) constru\u00eddo a partir dos prefixos. <\/p>\n<p>Vamos considerar a forma de construir um AFD para este conjunto de prefixos. Inicializamos os cursores no in\u00edcio de cada prefixo. Se todos os cursos apontam para o mesmo s\u00edmbolo, ent\u00e3o aumentamos cada cursor em um s\u00edmbolo e lembramos que o comprimento da string igual aumentou em uma unidade. Se existem dois cursores com s\u00edmbolos diferentes, dividimos os cursores em grupos de acordo com o s\u00edmbolo que est\u00e3o apontando e repetimos o algoritmo para cada grupo.<\/p>\n<p>No primeiro caso (todos os s\u00edmbolos sob os cursores s\u00e3o iguais), obtemos um estado do AFD que tem apenas uma transi\u00e7\u00e3o pela string igual. No segundo caso, obtemos uma tabela de transi\u00e7\u00f5es com tamanho 256 (n\u00famero de s\u00edmbolos e a quantidade m\u00e1xima de grupos) para os estados subsequentes, obtidos ao chamar a fun\u00e7\u00e3o recursivamente.<\/p>\n<p>Consideremos um exemplo. Para o conjunto de prefixos ('\/foo\/bar\/tmp\/', '\/var\/db\/foo\/', '\/foo\/bar\/aba\/', 'foo\/bar\/aac\/') podemos obter o seguinte AFD. Na ilustra\u00e7\u00e3o, est\u00e3o indicadas apenas as transi\u00e7\u00f5es que levam a outros estados; as outras transi\u00e7\u00f5es n\u00e3o ser\u00e3o finais.<\/p>\n<p><img decoding=\"async\" alt=\"Como proteger processos e extens\u00f5es do n\u00facleo no macOS\" src=\"\/wp-content\/uploads\/2020\/04\/6f5c4734ee6c677749f2f7b55307549d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAo percorrer os estados do AFD, podem existir 3 casos.<\/p>\n<ol>\n<li>Um estado final foi alcan\u00e7ado \u2014 o caminho \u00e9 protegido, restringindo as opera\u00e7\u00f5es KAUTH_VNODE_DELETE, KAUTH_VNODE_WRITE_DATA e KAUTH_VNODE_DELETE_CHILD.<\/li>\n<li>N\u00e3o foi alcan\u00e7ado um estado final, mas o caminho \"terminou\" (um zero-terminador foi alcan\u00e7ado) \u2014 o caminho \u00e9 pai, \u00e9 necess\u00e1rio limitar KAUTH_VNODE_DELETE. Vale notar que se o vnode for uma pasta, deve-se adicionar um \u2018\/\u2019 no final; caso contr\u00e1rio, pode-se tentar restringir ao arquivo \"\/foor\/bar\/t\", o que \u00e9 incorreto.<\/li>\n<li>N\u00e3o foi alcan\u00e7ado um estado final, o caminho n\u00e3o terminou. Nenhum dos prefixos corresponde a este, n\u00e3o aplicamos restri\u00e7\u00f5es.<\/li>\n<\/ol>\n<p><\/p>\n<h3>Conclus\u00e3o<\/h3>\n<p>\nO objetivo das solu\u00e7\u00f5es de seguran\u00e7a desenvolvidas \u00e9 aumentar o n\u00edvel de seguran\u00e7a do usu\u00e1rio e de seus dados. Por um lado, esse objetivo \u00e9 alcan\u00e7ado atrav\u00e9s do desenvolvimento do produto Acronis, que fecha as vulnerabilidades onde o pr\u00f3prio sistema operacional est\u00e1 \"fraco\". Por outro lado, n\u00e3o se deve negligenciar o fortalecimento daqueles aspectos de seguran\u00e7a que podem ser aprimorados no lado do SO, especialmente porque fechar tais vulnerabilidades aumenta nossa pr\u00f3pria resili\u00eancia como produto. A vulnerabilidade foi relatada pela Apple Product Security Team e foi corrigida no macOS 10.14.5 (https:\/\/support.apple.com\/en-gb\/HT210119).<\/p>\n<p><img decoding=\"async\" alt=\"Como proteger processos e extens\u00f5es do n\u00facleo no macOS\" src=\"\/wp-content\/uploads\/2020\/04\/98cd51cb47a81e8262a87bc792d59455.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTudo isso s\u00f3 pode ser feito se sua ferramenta estiver oficialmente instalada no n\u00facleo. Ou seja, n\u00e3o h\u00e1 brechas para software externo e indesejado. No entanto, como voc\u00ea pode ver, at\u00e9 para proteger programas leg\u00edtimos, como antiv\u00edrus e sistemas de backup, \u00e9 preciso trabalhar duro. Mas agora os novos produtos Acronis para macOS ter\u00e3o prote\u00e7\u00e3o adicional contra descarregamento do sistema.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/acronis\/blog\/497714\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043e\u0442 \u043f\u043e\u0441\u044f\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u0432 macOS. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u0430 \u0438\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0441\u0432\u0435\u0442\u0435 \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u043f\u043e\u0434 macOS \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u201c\u0443\u0431\u0438\u0442\u044c\u201d \u043f\u0440\u043e\u0446\u0435\u0441\u0441. \u041e\u0431 \u044d\u0442\u043e\u043c \u0438 \u043e \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u0437\u0430\u0449\u0438\u0442\u044b \u0447\u0438\u0442\u0430\u0439\u0442\u0435 \u043f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c. \u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u201c\u0443\u0431\u0438\u0442\u044c\u201d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0412\u0441\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":78515,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-78514","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043e\u0442 \u043f\u043e\u0441\u044f\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u0432 macOS.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/kak-zashhishhat-proczessy-i-rasshireniya-yadra-v-macos\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041a\u0430\u043a \u0437\u0430\u0449\u0438\u0449\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u044f\u0434\u0440\u0430 \u0432 macOS | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043e\u0442 \u043f\u043e\u0441\u044f\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u0432 macOS.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/kak-zashhishhat-proczessy-i-rasshireniya-yadra-v-macos\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-04-19T23:42:32+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-04-19T23:42:32+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Como proteger processos e extens\u00f5es do n\u00facleo em macOS | ProHoster","description":"Ol\u00e1, Habr! Hoje eu gostaria de falar sobre como proteger processos contra ataques de criminosos em macOS.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/kak-zashhishhat-proczessy-i-rasshireniya-yadra-v-macos","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041a\u0430\u043a \u0437\u0430\u0449\u0438\u0449\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u044f\u0434\u0440\u0430 \u0432 macOS | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043e\u0442 \u043f\u043e\u0441\u044f\u0433\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432 \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u0432 macOS.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/kak-zashhishhat-proczessy-i-rasshireniya-yadra-v-macos","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-04-19T23:42:32+00:00","article:modified_time":"2020-04-19T23:42:32+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"78514","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 16:56:36","updated":"2022-09-28 22:19:40","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/78514","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=78514"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/78514\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/78515"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=78514"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=78514"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=78514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}