Registry + ControlSet's

ControlSet… uma das sub chaves que devemos conhecer do nosso sistema Operativo.

Esta é uma chave do Windows que existe no registry.
Os conjuntos de chaves começadas por ControlSet são extremamente importantes.
É aqui que temos guardadas todas as configurações do nosso Windows.

Aqui podemos encontrar os serviços, drivers e outro tipo de informação.
Estas chaves estão dentro da chave de registo HKEY_LOCAL_MACHINESYSTEM.
Podem existir várias entradas deste tipo dependendo do número de alterações que fizemos no nosso sistema.
Uma instalação normal do Windows tem 4 control Set.

ControlSet002
ControlSet
ControlSet001
clone

O ControlSet001 são as definições da última vez em que fizemos logon.
O ControlSet002 é conhecido como o ultimo controlSet conhecido em boas condições ou mesmo o ultimo controlset que foi usado para arranque no Windows com sucesso.

O ControlSet é apenas um apontador para um dos 2 anteriores.

O Clone é um “clone” do CurrentControlSet e é criado cada vez que o nosso computador arranca na fase de inicialização do Kernel.

Existe outra chave relacionada com estas. É a chave Select, também está localizado dentro da chave System e contem os seguintes valores:
Current
Default
Failed
LastKnownGood

Cada um destes valores contem uma REG_DWORD que aponta para um dos Controlset.
Por exemplo, se o valor está definido 0x1, então o CurrentControlSet está a apontar para ControlSet001. Á semelhança do LastKnownGood se estiver configurado para 0x2, então o last known good control set é o ControlSet002.
O valor por defeito normalmente é o corrente e o Failed é um apontador para um ControlSet que não conseguiu arrancar com sucesso.

O mais fiável é o CurrentControlSet.
Se necessitarmos de ver ou alterar definições esta é a chave que devemos procurar. Se por algum motivo as nossas alterações não funcionarem sempre podemos arrancar com a lastknown good configuration, mas para isso é importante não fazermos logon logo, visto ser nesse momento em que o Windows substitui os controlSet existentes. Devemos esperar sempre um pouco pelo menos até já não existir tanta actividade nos discos. Caso contrário podemos ter problemas em recuperar o Windows caso um dos seus serviços / drivers provoque um erro que nos impeça de fazer logon. Pois podemos perder a Last Known Good Configuration.

Ocultar password em asp.net

Uma das coisas que me faz muita confusão é ter a password e o username em texto simples nos ficheiros de web.config.

Isto faz-me confusão porque na realidade em caso de falha de segurança damos muito pouco trabalho aos hackers… 🙂

Uma das formas de ocultar a informação relativa ao utilizador e à sua password é ocultando a no registo da máquina.

A ferramenta a usar é o aspnet_setreg.exe, uma ferramenta que vem com a Framework da Microsoft. (Microsoft .Net Framework).

Esta ferramenta permite-nos guardar no registo informações como o utilizador e a password de uma ligação como por exemplo ao SQL. Assim escusamos de ter a connection string com user e password no ficheiro web.config.

A ferramenta utiliza internamente 2 funções ou métodos que são locais na máquina, a CryptProtectData e a CryptUnprotectData, uma é o método que usamos para cifrar a nossa ligação a outra é o que usamos para decifrar a nossa ligação.
Atenção que quem tiver acesso à máquina tem acesso a estes métodos e por isso pode ver a informação cifrada.

Ao utilizarmos o aspnet_setreg.exe usamos uma sintaxe do género

aspnet_setreg.exe -k:SOFTWAREMINHA_APLICACAO_SEGURAidentity -u:”dominiopassword” -p:”password”

Este comando cifra o utilizador e a sua password na chave de registo indicada com a flag -k: também gera o output que devemos colocar no nosso web.config ou na nossa machine.config para que o user asp.net possa saber como localizar as chaves no registo e usa-las.

O output que recebemos é semelhante a este:

username=”registry:HKLMSOFTWAREMINHA_APLICACAO_SEGURAidentityASPNET_SETREG,username”
password=”registry:HKLMSOFTWAREMINHA_APLICACAO_SEGURAidentityASPNET_SETREG,password”

O Windows atribui à chave de registry FULL control ao utilizador de system, aos administradores e ao utilizador que a criou.

Se os administradores não tiverem nada a ver com isto podem ser removidos que não fazem falta… Atenção que ao removerem as permissões dos administradores ficam com menos apoio na tentativa de resolução de erros. Deixem sempre o user system e o que criou a chave se esta tiver sido criada com o user que corre o site. Para estas alterações ou adicionar outro utilizador podem usar o regedt32.exe para dar permissões às pastas.

Agora é só alterar a aplicação correspondente no seu web.config ou na suma machinec.config com o retorno do aspnet_setreg para começar a funcionar com as password e users menos visíveis

username=”registry:HKLMSOFTWAREMINHA_APLICACAO_SEGURAidentityASPNET_SETREG,username”
password=”registry:HKLMSOFTWAREMINHA_APLICACAO_SEGURAidentityASPNET_SETREG,password” />

Deixei o nome dos métodos usados internamente para mais tarde num outro texto do blog falar deles.