Faaaaaala seus “TREM Bunito” ! Tudo bem com vocês?

Bom, voltei aqui com um novo post falando agora sobre Segurança da Informação em Cloud Computing. (Específicamente em Azure, claro!)

Muitas pessoas me perguntam se a plataforma é segura, e se podemos proteger nosso ambiente de VM’s assim como protegemos On Premises.

A resposta é clara e simples: COM CERTEZA!

 

A Microsoft trouxe para o Azure, uma suíte de ferramentas de monitoramento, prevenção e detecção de ameaças, totalmente voltada para a saúde do ambiente cloud e segurança da informação. (O Azure Security Center)

Essa suíte/funcionalidade/plataforma é gratuita, e se encontra disponível para uso em TODAS as subscriptions do Azure. (Dê uma olhada em sua assinatura aí, o Security Center estava presente o tempo todo e possívelmente vc nem a viu. Hahaha)

Nesse post, não vou aprofundar sobre essa ferramenta, pois existe uma série de funcionalidades que devem ser consideradas e  vistas. Porém, irei falar sobre uma possibilidade que existe de aumentar nossa segurança das nossas VM’s no azure que é o Azure Disk Encryption. (Criptografia de Disco no Azure)

Essa feature utiliza para ambientes Windows o Bitlocker e para ambientes Linux o DM-Crypt, para fornacer criptografia de volumes. Ou seja, criptografia dos discos das VM’s criadas. Obrigatóriamente, a solução tem que ser integrada com o Azure Key Vault, que basicamente é um cofre que guarda as chaves de criptografia que são utilizadas para criptografar os discos das vms. (Cada VM, pode/deve utilizar uma única chave. Porém, é possível armazená-las em um único Key Vault)

Um outro fato importante, é que o Key Vault (por se tratar de um cofre que armazena as chaves, deve ser criado obrigatoriamente na mesma região onde está a VM que você deseja proteger.

O Azure Disk Encryption é 100% Gratuito. Nenhuma taxa adicional é cobrada pelo seu uso. Logo, é uma feature muito interessante para utilizarmos em nosso ambiente, e garantir assim a confiabilidade e criptografia dos discos.

Ele assegura que as VM’s fiquem protegidas quando desligadas. Ou seja, não é possível ligar uma VM sem essa chave. As VM’s também, podem ser inicializadas através de políticas e chaves controladas por nós, e é possível auditar isso no nosso cofre de chaves.

As versões de S.O. que possuem suporte à esta feature (até hoje 15/02/2018) são:

Ambientes Windows:

  • Windows Server 2008R2 | 2012 | 2012 R2 | 2016
  • Windows Client  8 | 10

Ambientes Linux:

  • Ubuntu  12.04, 12.10 (Apenas discos de dados) | 14.04,16.04 (Disco de Dados e SO)
  • RHEL   6.7 (Apenas discos de dados) | 6.8, 6.9, 7.2, 7.3, 7.4 (Disco de Dados e SO)
  • CentOS   6.5, 6.6, 6.7, 7.0, 7.1 (Disco de Dados) | 6.8, 7.2, 7.3 (Disco de Dados e SO)
  • OpenSUSE 13.2 (Disco de Dados)
  • SLES   11 SP4, HPC 12, 12 SP1 (Disco de Dados)

Mesmo assim, vale a pena dar uma conferida, para ver se essa informação não foi atualizada. (Este artigo oficial, pode lhe ajudar a ver sobre compatibilidade desta feature – https://docs.microsoft.com/pt-br/azure/security/azure-security-disk-encryption)

Antes de iniciarmos a criaçaõ do script para criptografar os discos de nossas VM’s, devemos nos atentar em alguns detalhes que são:

  • MUITO CUIDADO COM A CHAVE! Isso mesmo, coloquei até em caixa alta pra vc não se esquecer ok? Uma vez que a chave foi excluída (e se vc não tiver um backup dela) não será mais possível ter acesso ao disco que está criptografado. Se for disco de S.O. (Sistema Operacional), a VM nem liga.
  • É obrigatório armazenar as chaves em um Key vault, e este deve estar na mesma localização que a vm que você deseja proteger.
  • Uma vez a criptografia habilitada, só é possível reverter o processo de criptografia, desativando-o. Logo, a VM ficará “vulnerável” novamente.
  • O Azure em hipótese nenhuma, habilita essa proteção sem avisar o usuário. Ou seja, se você deseja criptografar seu disco, você deve fazer o procedimento e se assegurar de que a VM foi criptografada com sucesso.

Tendo em vista todos esses detalhes, vamos então iniciar a nossos trabalhos.

Antes de tudo, vamos dar uma olhada no Security Center, como está o estado atual da VM que queremos proteger, se ela está criptografada, e se e ela é elegível para usar esse recurso. [Em breve, gravarei um video sobre isso]

Munidos de algumas informações sobre a VM, vamos então iniciar o processo de criptografia.

[Mãos à Obra! Bora, codificar! #powershell]

 

[sourcecode language=”powershell”]

#Primeiramente, vamos fazer o Login em Nossa Subscription.

#[Se vc deseja dar um "bypass" nesse passo, dá uma lida <a href="http://gustavomagella.com/scriptando-abandone-o-login-azurermaccount/">nesse post que eu fiz</a>, que ensina a NUNCA MAIS usar esse comando, que às vezes é bem chatinho. kakakaka]

Login-AzureRmAccount

#Agora, vamos pegar informações sobre nossa conta. (Mais específicamente, o ID da Subscription)

Get-AzureRmSubscription

#Vamos então, selecionar a subscription em questão, usando o comando abaixo

Select-AzureRmSubscription -SubscriptionId $subscriptionId

[/sourcecode]

1º Passo: Criar um Aplicativo no Azure AD

Agora vamos iniciar a criação de uma Application no AAD (Azure Active Directory). Essa Application, vai servir como um elo de ligação do “tenant” Azure, com os serviços que irão consumir essa API. O Azure AD atribui um ID exclusivo a este aplicativo e um endereço válido.

[sourcecode language=”powershell”]

#Nome da Aplicação

$aadAppName = "nome-da-aplicação"

#Uri de Identificação

$identifierUri = [string]::Format("http://localhost:8080/{0}",[Guid]::NewGuid().ToString("N"))

#HomePage padrão

$defaultHomePage = ‘&amp;amp;amp;amp;amp;lt;a href="http://modelo.com"&amp;amp;amp;amp;amp;gt;http://modelo.com&amp;amp;amp;amp;amp;lt;/a&amp;amp;amp;amp;amp;gt;’

#Variável para setar a data de hoje

$now = [System.DateTime]::Now

#Variável para contar o período de 1 ano de validade da chave desta Web API

$oneYearFromNow = $now.AddYears(1)

#Variável que irá criar uma "senha" par ao acesso a esta API

$aadClientSecret = [Guid]::NewGuid().ToString()

#Variável para transformar essa senha em uma String Segura

$secureAadClientSecret = ConvertTo-SecureString -String $aadClientSecret -AsPlainText -Force

#Criando_AAD_Application | A variável $ADApp irá armazenar os dados de criaçaõ dessa WebAPI.

$ADApp = New-AzureRmADApplication -DisplayName $aadAppName -HomePage $defaultHomePage -IdentifierUris $identifierUri  -StartDate $now -EndDate $oneYearFromNow -Password $secureAadClientSecret

#Variáveis para pegar o ID Dessa API e outras informações, que serão utilizadas nos próximos passos

$servicePrincipal = New-AzureRmADServicePrincipal -ApplicationId $ADApp.ApplicationId

$SvcPrincipals = (Get-AzureRmADServicePrincipal -SearchString $aadAppName)

[/sourcecode]

 2º Passo: Criar um Cofre para Armazenamento das Chaves (Azure Key Vault)

[sourcecode language=”powershell”]

#Nome do KeyVault

$keyVaultName = "brazilsouth-kv-vm"

#Grupo de Recursos onde será criado

$rg = "rg-prod-speech-vms"

#Location onde será criado. Lembrem-se, deve ser criado na mesma location onde a VM que será criptografada, se encontra.

$loc = "brazilsouth"

#Criação do KeyVault

$keyVault = New-AzureRmKeyVault -VaultName $keyVaultName -ResourceGroupName $rg -Sku Standard -Location $loc

#Variável para armazenar a Uri da Chave de Criptografia

$diskEncryptionKeyVaultUrl = $keyVault.VaultUri

#Variável para armazenar o ID do Recurso

$keyVaultResourceId = $keyVault.ResourceId

#Nome da chave a ser armazenada no KeyVault

$keyEncryptionKeyName = "nome-da-chave"

#Criação da Chave a ser armazenada no KeyVault. O ideal é usar uma chave por VM a ser protegida. (Recomandado)

$kek = Add-AzureKeyVaultKey -VaultName $keyVaultName -Name $keyEncryptionKeyName -Destination Software -ErrorAction SilentlyContinue

# Agora, necessitamos conceder alguns privilégios de acesso à nossa Web API

#Variável que irá armazenar o ClientID da Aplicação

$aadClientID = $servicePrincipal.ApplicationId

#Setando as permissões de acesso à nossa WebAPI

Set-AzureRmKeyVaultAccessPolicy -VaultName $keyVaultName -ServicePrincipalName $aadClientID -PermissionsToKeys wrapKey -PermissionsToSecrets set

Set-AzureRmKeyVaultAccessPolicy -VaultName $keyVaultName -EnabledForDiskEncryption

#Agora precisamos listar as seguintes variáveis:

Write-Host "`t aadClientID: $aadClientID" -foregroundcolor Cyan

Write-Host "`t diskEncryptionKeyVaultUrl: $diskEncryptionKeyVaultUrl" -foregroundcolor Cyan

Write-Host "`t keyVaultResourceId: $keyVaultResourceId" -foregroundcolor Cyan

#Guarde bem essas informações. Vamos declarar novamente essas variáveis, agora com essas informações como String.

$aadClientID="valor-fornecido-acima"

$diskEncryptionKeyVaultUrl="valor-fornecido-acima"

$keyVaultResourceId="valor-fornecido-acima"

#E por final, vamos então encriptar os discos de nossa VM

#Nome da Vm que deseja encriptar o(s) disco(s)

$vm = "vm-sp-orc-ws16"

#Grupo de recursos onde a VM se encontra

$rg = "rg-prod-speech-vms"

#Tipo de encriptação: OS (Apenas Disco do Sistema Operacional) | Data (Apenas Discos de Dados) | All (Todos os discos atachados na VM)

$volumeType = "All"

#Variável para armazenar o ID do Recurso

$keyVaultResourceId = $keyVault.ResourceId

#Por sim, o comando para criptografar os discos da VM

Set-AzureRmVMDiskEncryptionExtension -ResourceGroupName $rg -VMName $vm -AadClientID $aadClientID -AadClientSecret $secureAadClientSecret -DiskEncryptionKeyVaultUrl $diskEncryptionKeyVaultUrl -DiskEncryptionKeyVaultId $keyVaultResourceId -VolumeType $volumeType

[/sourcecode]

Ufa! Pronto! Nossa VM agora já possui um sistema de criptografia ativo e rodando. Logo, podemos considerar que estamos bem protegidos no que diz respeito à camada de virtualização e disco.

Espero que eu tenha ajudado a você a entender melhor esse processo. Pesquisei bastante, e os scripts que haviam disponíveis na internet estavam prontos e sem nenhuma explicação sobre COMO REALMENTE O PROCESSO FUNCIONA. Decidi dissecar bem esse processo e dividí-lo, para ficar de mais simples entendimento.

Com o tempo eu vou dar uma aprimorada nesse script e dar uma automatizada, no futuro colocarei ele no GitHub.

 

 

No mais, é isso! 😉

Se gostou, compartilhe esse post! (Acho que vale seu compartilhamento, hein?)

Aguardo você para no próximo post! (#tamojunto, não esquece!)

Um Forte Abraço!

Gustavo Magella

#borapranuvem #cloud4all #uaizure