Sítio do Piropo

B. Piropo

< Coluna em Fórum PCs >
Volte
06/11/2006

< Segurança no Vista V: >
<
Windows Service Hardening
>


Abrimos esta série de colunas com uma visão geral da situação do Vista, atualmente em fase final de desenvolvimento com a liberação do RC2 (Release Candidate 2, a última versão beta antes do lançamento da versão final) e com uma abordagem ampla das novidades implementadas no campo da segurança. Depois, passamos a discutir cada uma destas novidades divulgadas pela Microsoft, começando pelo “Security Development Lifecycle – SDL”, uma política que incorpora medidas de segurança a cada ciclo de desenvolvimento do produto, e seguindo para a discussão do novo controle de contas de usuário implementado no Vista.

A diferença mais óbvia entre estes dois itens é que o primeiro é de natureza essencialmente abstrata, uma política de desenvolvimento, da qual o usuário final somente poderá perceber seus efeitos futuros. Já o segundo implica alterações que se manifestam assim que o novo usuário começa a usar o sistema e se depara com as janelas informando sobre o grau de privilégios exigidos para a execução de algumas tarefas, tornando óbvio que certas coisas mudaram.

Hoje vamos discutir um avanço na segurança do Vista que a MS denominou de “Windows Service Hardening” (rigidez dos serviços de Windows) que, como o SDL, é transparente ao usuário. Por sua ação, nenhuma janela aparece solicitando autorização para isto ou aquilo, nenhum ajuste é feito, aparentemente nada muda. Mas, garante a MS, trata-se de um dos avanços mais importantes no que toca à segurança de seus produtos, já que seu objetivo é proteger contra a ação de intrusos mal intencionados alguns dos componentes que se situam mais próximos do próprio “coração” do sistema operacional: os serviços.

Mas o que é um serviço?

Bem, a forma mais singela – embora pouco técnica, mas os puristas hão de me perdoar pela simplificação – de explicar o que é um “serviço” é dizer que se trata de um programa auxiliar que, como bem diz o nome, presta um “serviço” a seu “dono ou senhor”, geralmente outro programa ou o próprio sistema operacional. Os “serviços” rodam sempre em segundo plano, são invocados (ou “carregados”) por outros programas ou pelo próprio sistema operacional e encerrados (ou “descarregados”) quando o seu “senhor” sai de cena. Na imensa maioria das vezes rodam todo o tempo enquanto a máquina permanece ligada e, apesar disso, raramente o usuário toma conhecimento que eles existem.

Quer uma definição mais decente e de acordo com o que manda a boa técnica? Pois lá vai a fornecida pela própria MS e traduzida diretamente do...
< http://technet2.microsoft.com/WindowsServer/en/library/a958b9d2-3ec1-4ab0-9f9f-7cb396605f3e1033.mspx?mfr=true >
... documento da TechNet que os descreve: “Um serviço é um tipo de aplicativo que roda em segundo plano e é semelhante aos aplicativos tipo ‘daemon’ do Unix. Serviços prestam funções que fazem parte do cerne do sistema como servir a Internet, registrar de eventos, fornecer arquivos, ajuda e suporte, imprimir, criptografar e informar sobre a ocorrência de erros”. Facilitou ou complicou?

Como eu acho que complicou, vou tentar esclarecer melhor com exemplos.

Vamos por partes. Se você está lendo esta coluna em uma máquina rodando Windows (mesmo que uma das versões beta do Vista), faça o seguinte: abra a entrada “Executar” do menu “Iniciar” (em vista, basta abrir o menu “Iniciar”), digite “services.msc” (assim mesmo, porém sem aspas) e tecle ENTER para abrir o “Console de serviços” (no Vista ele pode ser aberto clicando-se diretamente na entrada “Services” de “Administrative Tools” de “All Programs” ou na entrada correspondente da versão em português).

Clique para ampliar...
Figura 1: Console de Serviços no Windows XP.

Se seu Windows é XP deverá abrir uma janela semelhante à exibida na Figura 1 (sem os destaques em vermelho, naturalmente). Repare: no painel esquerdo, apenas a indicação que se trata da lista de “Serviços (local)”. No painel direito, se a aba “Estendido” houver sido selecionada, aparecerá ao alto, à esquerda, a descrição do serviço selecionado e destacado na lista da direita (seleciona-se o serviço clicando sobre sua linha na lista). E a lista é encabeçada pela linha de títulos com o nome do serviço, uma descrição sumária que é repetida à esquerda, seu estado (iniciado, finalizado, pausado, reiniciado...) o tipo de inicialização (automática, manual ou desativada) e quem fez o registro (“logon”) do serviço, item especialmente importante porque define seu nível de privilégio (voltaremos a isso em breve). No Vista a janela do console de serviços é semelhante à do XP e tem o aspecto exibido na Figura 2:

Clique para ampliar...
Figura 2: Console de Serviços no Windows Vista.

Na lista, todo serviço cujo “status” consta como “iniciado” (ou “started”) estava rodando no momento em que a janela foi aberta. Repare, tanto no XP quanto no Vista (figuras 1 e 2), a quantidade de serviços em uso (e note, pela proporção entre o elevador e a barra de rolamento vertical mostrada junto à moldura direita de ambas as janelas, que o trecho exibido mostra apenas uma pequena porção da lista de serviços). São dezenas deles. De onde vieram? Quem os invocou?

Bem, como qualquer programa lançado por um usuário, para ter acesso aos objetos e recursos do sistema operacional, um “serviço” tem que se registrar em uma conta. Os privilégios que vier a desfrutar são inerentes à conta na qual está registrado. E existem três contas que podem registrar serviços: “Network Service”, “Local Service” e “Local System”.

A “ Network Service Account” (conta de serviço de rede) é uma conta especial, criada pelo próprio sistema operacional, semelhante a uma conta autenticada de usuário comum, com o mesmo (e limitado) nível de privilégios. Serviços que necessitam de acesso aos recursos da rede usam as credenciais desta conta.

A “Local Service Account” (conta de serviço local) também é criada automaticamente pelo sistema e detém privilégios de mesmo nível que uma conta de usuário comum. Os serviços registrados nesta conta atendem aos programas que rodam no computador local e, se eventualmente tiverem acesso à rede, o farão sem quaisquer credenciais ou privilégios.

A “Local System Account” (conta do sistema local), ainda criada automaticamente pelo sistema operacional para rodar os “serviços” que atendem ao próprio sistema, ao contrário das duas primeiras, é poderosíssima. “Serviços” nela registrados têm pleno acesso ao sistema operacional, incluindo serviços de diretório dos controladores de domínios. Se um “serviço” se registra através da “Local System Account” em um controlador de domínio, terá amplo acesso a todo o domínio. Serviços registrados nesta conta são, portanto, os de maior potencial de dano se controlados por intrusos que invadirem o sistema aproveitando-se de alguma eventual vulnerabilidade.

Além do limite de privilégios inerente ao tipo de conta na qual se registrou, um “serviço” pode dispor ou não de permissões especiais oferecidas ou negadas usando comandos específicos (comando SC ou Security Templates; ver mais detalhes no artigo...
< http://technet2.microsoft.com/WindowsServer/en/library/a958b9d2-3ec1
[Na mesma linha. N.do WM.] -4ab0-9f9f-7cb396605f3e1033.mspx?mfr=true
>
... “Services permissions” da MS TechNet). Tais permissões vão desde “Full control”, que outorga ao “serviço” controle total do sistema, até funções específicas como “Start” e “Stop” (que permitem, respectivamente, iniciar ou interromper outro serviço) e “Change Permissions” (que permite alterar as permissões outorgadas a outros serviços), além de diversas outras.

O que sabemos até agora? Que “Serviços” desfrutam de diversos graus de privilégios que podem chegar até o controle total do sistema. Que há formas de controlar e limitar tais privilégios. E que os serviços mais poderosos são aqueles registrados na conta “Local System” (ou “Sistema Local”). Que, como se pode notar de um exame ainda que superficial das figuras 1 e 2, são os mais abundantes tanto sob XP quanto sob Vista.

Considerando o grande número de “serviços” rodando simultaneamente, levando-se em conta que uma boa parte deles é carregado pelo sistema operacional assim que a máquina é inicializada e permanece rodando todo o tempo em que ela se mantém em funcionamento, tendo em mente o nível de privilégios de que eles podem desfrutar, privilégios estes que podem ser aproveitados por ataques mal intencionados para instalar e executar código indesejado na máquina, não é de admirar que tais “serviços” sejam o alvo principal de ataques de “malwares”. Para ilustrar, basta lembrar dos “vermes” Slammer, Blaster e Sasser, todos eles voltados para atacar e se aproveitar de vulnerabilidades detectadas em um dos serviços de Windows, o RPC (voltaremos a falar disso adiante).

Pois é justamente para atenuar este problema que a MS implementou a estratégia denominada “Services Hardening” que consiste basicamente em aplicar o conceito de “restricted services” (serviços restritos) que reduz os privilégios dos “serviços” ao grau mínimo indispensável e limita seu raio de ação à máquina ou à rede, dependendo do serviço.

A implementação do “Service Hardening” consiste na adoção simultânea de um conjunto de medidas que incluem:

  • atribuição de um identificador de segurança (“Security Identifier”, ou SID) a cada serviço iniciado e criação de uma “Access Control List – ACL” (lista de controle de acessos) que arrola os objetos e recursos do sistema aos quais aquele identificador pode ter acesso, impedindo que outros serviços e usuários não autorizados tenham acesso a tais recursos;
  • alteração, sempre que possível, da “conta” na qual um serviço é registrado, movendo-o de “Local System Account” para “Local Services” ou “Network Service”, reduzindo assim seu nível de privilégios (uma estratégia que, no que toca a “serviços”, é muito semelhante à adotada em relação a usuários com o controle das contas de usuários – UAC);
  • exame de cada “serviço” individualmente e exclusão de quaisquer privilégios desnecessários – como por exemplo a possibilidade de “debugar” código, que pode ser explorada por programas mal intencionados;
  • rotulagem de determinados serviços que os identificam como de capacidade limitada de “escrever em” (alterar) objetos, sempre que o conjunto de objetos nos quais o “serviço” tem autorização de escrita puder ser configurado, fazendo com que sejam abortadas tentativas de escrever em objetos que não estejam explicitados na lista de recursos permitidos ao SID do referido “serviço”;
  • integração entre a política do novo “Firewall” bidirecional do Vista com a estratégia do “Service Hardening”, ligando as permissões e bloqueios do firewall aos SID dos diversos serviços, impedindo assim que um serviço estenda sua ação para setores da rede aos quais não tem permissão de acesso. Com isto o Firewall pode implementar restrições às comunicações da máquina para a rede, da rede para a máquina solicitadas por serviços.

De acordo com a estratégia de “serviços restritos”, um “serviço” rodará todo o tempo desfrutando o mínimo indispensável de privilégios e potencialidades, o que reduzirá significativamente o potencial de dano de uma vulnerabilidade que eventualmente venha a apresentar. Por exemplo: o uso combinado do SID com listas de controle de acesso e restrição da capacidade de escrita reduzirá ao mínimo indispensável o número de serviços capazes de alterar configurações do sistema de arquivos, do Registro e de outros recursos do sistema, reduzindo muito sua possibilidade de infectar outras máquinas ligadas à mesma rede (o que inclui, naturalmente, a Internet).

Cuidados especiais foram tomados com os “serviços” que fazem parte do próprio núcleo do sistema operacional (“Core Windows Services”). A definição de seus privilégios inclui regras que discriminam os recursos e portas da rede (entrada e saída) que podem ser acessados por cada um deles. Caso um destes serviços (que, antes, eram “todo-poderosos”) tente acesso a um recurso não autorizado da rede, será imediatamente bloqueado pelo Firewall. Um exemplo: sob Windows Vista o “serviço” conhecido por RPC (Remote Procedure Call), destacado nas Figuras 1 e 2, que mapeia os recursos usados pelos programas que empregam o Component Object Model (COM) ou RPC (Remote Procedure Call), não tem privilégios para substituir Arquivos de Sistema, modificar o Registro ou alterar configurações dos demais “serviços” (como por exemplo reconfigurar serviços que auxiliam a ação de programas antivírus ou substituir seus arquivos de definições de vírus). Exemplo este que é tão simples quanto esclarecedor: se esta providência tivesse sido implementada há mais tempo, os vermes Sasser e Blaster, talvez os mais virulentos e cuja disseminação causou maiores prejuízos, jamais teriam existido, já que se aproveitavam justamente destas facilidades concedidas ao RPC.

Como se vê, a idéia por detrás da estratégia “Service Hardening” é simples (e por isso mesmo provavelmente será eficaz): aplicar aos privilégios concedidos aos serviços e suas “contas” limitações semelhantes às aplicadas aos usuários através do “User Account Control” que discutimos na coluna anterior. Ele não garante imunidade ao sistema contra ataques, apenas cria uma camada adicional de proteção para os serviços. Sua função não é impedir que um serviço no qual exista uma vulnerabilidade eventual seja comprometido (esta é a função de outros componentes, como o Firewall e o Windows Defender), mas sim dificultar este comprometimento e limitar o potencial de causar danos de um serviço eventualmente comprometido.

Uma das vantagens do “Service Hardening” (e que, paradoxalmente, faz com que sua existência passe quase desapercebida tanto ao usuário comum quanto ao experimentado administrador de redes) é que ele foi concebido para ser implementado de forma a não aumentar o nível de complexidade da administração do sistema. Cada “serviço” incluído no Vista foi submetido a um rigoroso escrutínio para determinar seu “Windows Service Hardening Profile”, um perfil que define tanto os privilégios que ele deve dispor quanto aqueles que, por desnecessários àquele serviço em particular, podem ser excluídos. Estes perfis são aplicados individualmente durante a instalação de Vista e dispensam quaisquer ações de administração, manutenção ou interação do usuário ou do administrador.

A estratégia “Windows Service Hardening” é aplicada pela MS aos serviços do sistema, mas a empresa encoraja os desenvolvedores independentes a aplicar as mesmas diretivas aos serviços por eles desenvolvidos (muitos dos serviços que rodam na máquina são criados por terceiros para dar suporte a seus programas, como antivírus, rotinas de detecção de conexão de hardware e coisas que tais). Assim, tais serviços serão mais seguros ao rodar sob Vista. E como todas as ações são opcionais, não haverá qualquer impacto na compatibilidade de aplicativos antigos desenvolvidos para versões anteriores do sistema.

Em resumo: a estratégia “Windows Service Hardening” não é uma garantia que as vulnerabilidades dos serviços de Windows serão eliminadas. Ela apenas garante que seu número será significativamente reduzido e, se ainda assim alguma for detectada, sua exploração por parte de pessoas mal intencionadas terá seu potencial de afetar o computador e de se disseminar bastante reduzidos.

Irá funcionar? Tudo indica que sim. Mas como no caso do SDL, é aguardar para ver o que o futuro nos reserva.

 

B. Piropo