Como se proteger de ransomware utilizando FSRM

Um dos maiores medos dos profissionais de TI atualmente são os “Ransomwares”, não é aquela banda americana, Hanson, que ficou conhecida pela música “MMMBop”, mas sim um tipo de malware que restringe o acesso ao sistema infectado e tenta cobrar um valor de “resgate” para que o acesso possa ser restabelecido. Geralmente esse tipo de malware compacta os arquivos do computador com uma criptografia que não é possível reverter. Ou você paga o resgate e mesmo assim pode não conseguir resgatar seus dados, ou então você desinfecta a sua máquina, restaura o seu backup e volta a rotina  quase normalmente.

No Windows Server é possível ativar o File Server Resource Manager (FSRM), que em português seria “Gerenciador de Recursos do Servidor de Arquivos”. Nele é possível realizar uma melhor gerência dos arquivos do servidor, como cota, mover arquivos antigos, triagem, etc. Pra tentar se proteger dos “Ransomware” utilizaremos a triagem de arquivos.

Se você não tiver instalado o FSRM, acesse o gerenciador do servidor -> Gerenciar -> Adicionar Funções e Recursos, e habilite a opção conforme figura abaixo:

Crie um pasta em C:\dados\scripts ou em lugar de sua preferência e faça o download do script em: https://github.com/wanderleihuttel/protect-ransomware

Precisamos criar um novo grupo de arquivo, com as extensões conhecidas dos ransomwares, para isso acesse o powershell como administrador e digite o seguinte comando:

# Para criar o grupo de arquivos (executar somente na primeira vez)
new-FsrmFileGroup -name "Arquivos Ransomware" -IncludePattern @((Invoke-WebRequest -Uri "https://fsrm.experiant.ca/api/v1/combined").content | convertfrom-json | % {$_.filters})

# Para atualizar o grupo de arquivos
Set-FsrmFileGroup -name "Arquivos Ransomware" -IncludePattern @((Invoke-WebRequest -Uri "https://fsrm.experiant.ca/api/v1/combined").content | convertfrom-json | % {$_.filters})

Com o grupo de arquivos criado, podemos acessar o FSRM, para isso no menu iniciar procure por fsrm.msc.

1) Em triagem de arquivos, clique em “criar triagem de arquivos”. Vai abrir uma tela conforme a tela abaixo, selecione o compartilhamento que deseja monitorar e clique em “propriedades personalizadas”



2) Selecione o grupo de arquivos “Arquivos Ransomware”

3) Marque a opção “Enviar aviso para log de eventos”

4) Marque a opção “Executar este comando ou script” e coloque o caminho do powershell:

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe



Em argumentos do comando coloque o comando abaixo:

-ExecutionPolicy Unrestricted -NoLogo -Command C:\dados\scripts\email_ransomware.ps1 '[Source Io Owner]' '[Source File Path]' '[File Screen Path]' '[Server]' '[Violated File Group]'

Em executar comando como, selecione a opção “Sistema Local”

5) Configurar opções

6) Alterar o tempo limite de notificação para 2 minutos

Para efetuar um teste pasta tentar salvar um arquivo com uma extensão “.cerber” por exemplo e tentar copiar para o diretório compartilhado onde está aplicada a triagem.
Você irá receber um email e uma mensagem no telegram e também seu acesso será bloqueado em todos os compartilhamentos de rede do servidor.

Para desbloquear utilize o comando abaixo no poweshell, substituindo o “UserName” pelo login do usuário bloqueado.

Get-SmbShare -Special $false | ForEach-Object { Unblock-SmbShareAccess -Name $_.Name -AccountName 'UserName' -Force }

Não é garantido que a triagem e o script vão proteger efetivamente contra ransomware, mas é uma forma de bloquear o acesso do usuário que por ventura tentar salvar um arquivo no servidor com uma extensão que geralmente pertence aos ransomwares.
Lembre-se de fazer backup constantemente, manter seu sistema operacional e antivírus sempre atualizados, e nunca clique em arquivos ou links suspeitos.

Fontes consultadas
http://blog.netwrix.com/2016/04/11/ransomware-protection-using-fsrm-and-powershell/
https://fsrm.experiant.ca/

Facebooktwittergoogle_pluslinkedinFacebooktwittergoogle_pluslinkedinby feather

Salvar log de impressões do Windows Server 2012 em banco de dados MySQL

Existem vários scripts powershell na internet que identificam os eventos de impressões nos arquivos de log do Windows e geram um arquivo texto com dados das impressões, porém geralmente não geram o nome do arquivo impresso, por causa de uma opção que vem por padrão desabilitada no Windows Server  e geralmente não geram esta informação em tempo real.
Procurando um pouco mais a fundo descobri que é possível ativar uma opção no Windows Server que consegue mostrar o nome do arquivo que foi impresso nos logs. Essa informação nos logs, me instigou a ir atrás de alguma alternativa para fazer um possível controle das impressões mais automatizado.

Este post ficou bem extenso pelo fato de ter que fazer várias configurações, então tenha bastante atenção em seguir os passos corretamente.

Requisitos para funcionamento

Fazer o download dos arquivo “printlog.zip” e salvar na pasta “c:\printlog”. Este arquivo compactado contém os seguintes arquivos:
– printlog.sql (script de criação do banco de dados e da tabelas no MySQL )
– printlog.ps1 (script powershell que vai ler os logs de impressão e fazer a inserção no banco de dados MySQL)
– EventID307_PrintLog.xml (Tarefa do agendador de tarefas com as as devidas modificações)
– microsoft_office_word_forcesetcopycount.ps1 (script powershell para forçar o Microsoft Word à enviar para os logs de impressão o valor correto do número de cópias)

Para editar os arquivos, recomendo que seja utilizado o editor de textos “Notepad++” que pode ser baixado em https://notepad-plus-plus.org/download.

Para o powershell poder interagir com o MySQL é preciso instalar “MySQL Connector/Net” que pode ser baixado em: http://dev.mysql.com/downloads/connector/net/
Não vou abordar a criação do banco de dados no MySQL, então se tiver alguma dúvida procure no Google que existem inúmeros tutoriais.

Após baixar o arquivo printlog.zip e extrair na pasta “c:\printlog”, deve-se editar o arquivo printlog.ps1 e alterar as seguintes variáveis de conexão com o banco de dados MySQL:
$DBAddress, $DBUser, $DBPassword e $DBName.

Primeira parte
É preciso ativar os logs de impressão e também a opção de mostrar o nome do arquivo impresso no log.

Abrir o event viewer e localizar a opção:
Log de Aplicações e Serviços -> Microsoft -> Windows -> PrintService -> Microsoft-Windows-PrintService/Operational

Clicar em propriedades

Marcar a opção “Ativar Logs” e definir o tamanho do log de acordo com a sua estrutura. Deixe a opção “Substituir eventos (quando necessário)”

Acessar o “gpedit.msc” no servidor onde estão instaladas as impressoras e localizar a opção: Configuração do Computador -> Modelos Administrativos -> Impressoras -> “Allow job name in event logs”

Acessar o gerenciador de impressão, em impressoras, clicar em propriedades e na aba “compartilhamento” desabilitar a opção “Processar trabalhos de impressão em computadores cliente”

Em algumas versões do Windows Server pode ser necessário ativar a opção através do registro:[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Policies\Microsoft\Windows NT\Printers]
“ShowJobTitleInEventLogs”=dword:00000001
Caso o nome do documento não apareça nos logs, pode ser necessário a instalação de uma atualização: https://support.microsoft.com/pt-br/kb/2938013

Após realizar os passos acima é preciso realizar algumas impressões e verificar o arquivo de logs para ver se o nome do arquivo está sendo mostrado de acordo com o esperado.

Segunda parte
É preciso anexar uma tarefa ao log dos eventos e passar estas informações para o script powershell, que vai pegar os dados das impressões e salvar no banco de dados MySQL.

Voltando para o visualizador de eventos, na mesma tela onde foi ativado os logs, clicar sobre o EventID 307 e clicar na opção “Anexar Tarefa à este Evento” e configurar conforme as telas abaixo:

Agora é preciso acessar o Gerenciador de Tarefas e procurar a tarefa previamente cadastrada, clicar com o botão direito do mouse em cima da tarefa e clicar em “Exportar” e  salvar em uma pasta qualquer.

Para simplificar, o arquivo printlog.zip contém o XML da tarefa já alterada, então é possível importar esse arquivo diretamente e pular os passos abaixo e ir direto para a “Terceira parte”. Caso tenha algum problema na importação, será preciso seguir os passos abaixo.

Abrir o arquivo com o Notepad++ e abaixo da tag “</Subscription>” incluir as tags conforme abaixo.

Arquivo Original:
<Triggers>
  <EventTrigger>
    <Enabled>true</Enabled>
    <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="Microsoft-Windows-PrintService/Operational"&gt;&lt;Select Path="Microsoft-Windows-PrintService/Operational"&gt;*[System[Provider[@Name='Microsoft-Windows-PrintService'] and EventID=307]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>     
  </EventTrigger>
</Triggers>

...

<Actions Context="Author">
   <Exec>
     <Command>powershell.exe</Command>
   </Exec>
</Actions>



Arquivo Alterado:
<Triggers>
  <EventTrigger>
    <Enabled>true</Enabled>
    <Subscription>&lt;QueryList&gt;&lt;Query Id="0" Path="Microsoft-Windows-PrintService/Operational"&gt;&lt;Select Path="Microsoft-Windows-PrintService/Operational"&gt;*[System[Provider[@Name='Microsoft-Windows-PrintService'] and EventID=307]]&lt;/Select&gt;&lt;/Query&gt;&lt;/QueryList&gt;</Subscription>
    <ValueQueries>
       <Value name="Address">Event/UserData/DocumentPrinted/Param6</Value>
       <Value name="Client">Event/UserData/DocumentPrinted/Param4</Value>
       <Value name="EventID">Event/System/EventID</Value>
       <Value name="FileName">Event/UserData/DocumentPrinted/Param2</Value>
       <Value name="JobBytes">Event/UserData/DocumentPrinted/Param7</Value>
       <Value name="JobID">Event/UserData/DocumentPrinted/Param1</Value>
       <Value name="PageCount">Event/UserData/DocumentPrinted/Param8</Value>
       <Value name="Printer">Event/UserData/DocumentPrinted/Param5</Value>
       <Value name="TimeCreated">Event/System/TimeCreated/@SystemTime</Value>
       <Value name="User">Event/UserData/DocumentPrinted/Param3</Value>
    </ValueQueries>
  </EventTrigger>
</Triggers>

...

<Actions Context="Author">
   <Exec>
     <Command>powershell.exe</Command>
     <Arguments>-command C:\printlog\printlog.ps1 '$(EventID)' '$(TimeCreated)' '$(JobID)' '$(FileName)' '$(User)' '$(Client)' '$(Printer)' '$(Address)' '$(JobBytes)' '$(PageCount)'</Arguments>
   </Exec>
</Actions>


Após feita as alterações no arquivo XML, deve-se excluir a tarefa que foi exportada, clicar com o botão direito do mouse e importar o arquivo XML que foi alterado.

Importada a tarefa novamente, é preciso ajustar alguns parâmetros, para isso selecione a tarefa e clique com o botão direito do mouse em propriedades.
– Na aba Geral, marcar a opção: “Executar estando o usuário conectado ou não” e também “Executar com privilégios mais altos”
– Na aba Condições, desmarcar a opção: “Iniciar a tarefa somente se o computador estiver ligado à rede elétrica”
– Na aba Configurações, alterar a opção: “Se a tarefa já estiver sendo executada,a seguinte regra será aplicada” para “Colocar uma nova instância na fila”

Terceira parte
Se tudo ocorreu bem o script vai gerar um arquivo das impressões em arquivo texto e também no banco de dados MySQL. Agora que os dados estão no banco de dados, basta realizar as consultas de acordo com a necessidade.

Consulta MySQL

Quarta parte
Geralmente as impressões do Microsoft Word quando é utilizado impressão e é marcado a opção para imprimir várias cópias, elas não são contabilizadas corretamente, então é preciso executar o script powershell “microsoft_office_word_forcesetcopycount.ps1” nas estações para forçar que a quantidade de páginas seja gerada da maneira correta.

Considerações Finais
Até onde realizei os os testes, não consegui uma contagem apurada em 100% batendo com a numeração das impressoras, pois segundo minhas pesquisas, os drivers das impressoras e os aplicativos podem interferir nessa contabilização de páginas, além de que os usuários pode ter as impressoras instaladas localmente também.

Fontes consultadas:
http://www.analistadeti.com/print-server-gerar-evento-de-impressao-event-viewer/
https://gallery.technet.microsoft.com/Script-to-generate-print-84bdcf69
http://www.thomasmaurer.ch/2011/04/powershell-run-mysql-querys-with-powershell/
https://blogs.technet.microsoft.com/wincat/2011/08/25/trigger-a-powershell-script-from-a-windows-event/
https://support.microsoft.com/en-us/kb/919736

Facebooktwittergoogle_pluslinkedinFacebooktwittergoogle_pluslinkedinby feather