4 scripts para se prevenir contra ransomware (e algumas dicas extras)

09:40 Adriano Rocha 5 Comentarios




Você sabe o que é ransomware?
O ransomware é um tipo de malware que bloqueia o acesso ao computador e/ou arquivos que ele infecta. Para que esse acesso seja liberado é exigido o pagamento de um “resgate”.
Alguns tipos de ransomwares criptografam os arquivos infectados impossibilitando sua abertura de forma simples. Já outros, apenas travam o sistema mostrando uma mensagem que irá coagir o usuário a pagar pelo resgate de seus arquivos. O valor do resgate é algo que pode variar entre US$100 e US$1.000 (algo por volta de R$353 e R$3.530) e, em alguns casos, o pagamento precisa ser realizado por meio de Bitcoin.
Aqui neste link, já explicamos, mais detalhadamente, sobre o ransomware e algumas formas de recuperar seus arquivos.
Desta vez, iremos explorar em nosso artigo um pouco mais sobre as medidas que podem ser tomadas para a prevenção, a fim de dificultar as ações do ransomware.


Como se prevenir de um ransomware?
Como existem diversas ramificações de ransomware, e eles são atualizados e editados constantemente, os antivírus normalmente ficam um passo atrás desses malwares maliciosos, pois até que sejam capazes de identificar, o sistema provavelmente já estará infectado.
Vamos usar como exemplo o seguinte cenário: o usuário recebe um arquivo malicioso por email, abre o anexo, permitindo, desta forma, que o ransomware inicie os estágios de análise e infecção dos arquivos do sistema.
Uma vez que todas as peças estão em jogo, o ransomware começa a criptografar arquivos - na maioria das vezes com extensões conhecidas, como as que são pertinentes a documentos do Office, arquivos de áudio, vídeos, imagens e, em alguns casos, extensões de arquivos de script. O ransomware também começa a criptografar a raiz do C:/ ou então começa a criptografar os arquivos em execução no perfil do usuário local.
Uma vez que o drive local é criptografado, o malware muda o alvo e começa a mapear as outras unidades e os conteúdos compartilhados.
Sabendo desses elementos de ataque do ransomware, vamos agora criar um cenário que automaticamente irá responder quando algum desses arquivos for alterado, salvo ou reescrito para ser criptografado.


Scripts para reduzir ou atrasar o ransomware
Veja abaixo algumas técnicas interessantes e scripts (retirados daqui) que podem ser realizados para diminuir e/ou atrasar o ransomware no caso de um ataque.
Para ilustrar, separamos um curto exemplo em Powershell que poderia ser usado como base para monitorar mudanças de arquivo. Esse script cria um arquivo, habilita o monitoramento do arquivo para a última alteração, responde a uma conta de e-mail quando o arquivo é gravado e desconecta qualquer drive mapeado.
Esta é uma medida passiva, visando a detecção e contenção do malware. Trata-se de uma forma não muito invasiva para mitigar o ransomware em um endpoint e prevenir para que os recursos da rede não sejam afetados.
Exemplo 1:
$DirPath = "C:\Temp\"
$FName = "Redemptio*.docx"
$FilePath = Join-Path -Path $Dirpath -ChildPath $FName


function DriveUnMapper {
$MappedDrives = Get-WmiObject -Class Win32_MappedLogicalDisk
ForEach($Drive in $MappedDrives){
net use $Drive.name /delete
 }
}


function CreateWatcher {
$global:FSWatcherObj = New-Object IO.FileSystemWatcher $DirPath, $FName -Property @{
IncludeSubdirectories = $false;
EnableRaisingEvents = $true;
NotifyFilter = [IO.NotifyFilters]'LastWrite'
 }
}
function RegisterWatcher {
Register-ObjectEvent $FSWatcherObj Changed -SourceIdentifier FileChanged -Action {
$name = $Event.SourceEventArgs.Name
$changeType = $Event.SourceEventArgs.ChangeType
$timeStamp = $Event.TimeGenerated
Write-Host "The file '$name' was $changeType at $timeStamp" -fore red
$logdata = "$(Get-Date), $changeType, $FilePath, was altered! Disconnecting Drives"
Add-content "C:\Users\user\Desktop\Redemptio.bla" -value $logdata
$smtp = New-Object Net.Mail.SmtpClient("smtp.yoursite.notreal")
$smtp.Send("SecurityNerds@yoursite.notreal","Management@yoursite.notreal","Ransomware File Canary has been written to on " + $env:computername,"Information on the Event:" + $logdata + "Disconnecting network drives.")
DriveUnMapper
 }
}
function CreateCanary {
New-Item C:\Temp\Redemptio-canary.docx -ItemType File -value "Redemptio canary file - do not write to file"
}
CreateCanary
CreateWatcher
RegisterWatcher


Segue outro exemplo de Powershell que, neste caso, ativa as Regras de Auditoria para um diretório e de todos os arquivos daquela pasta. Neste exemplo, o diretório é chamado de ‘$’.
Exemplo 2:
$AuditUser = "Everyone"
$AuditRules = "WriteData"
$InheritType = "ContainerInherit,ObjectInherit"
$AuditType = "Success"
$AccessRule = New-Object System.Security.AccessControl.FileSystemAuditRule(
   $AuditUser,
   $AuditRules,
   "None",
   "None",
   $AuditType
   )


$HoneyPot = Get-ChildItem 'C:\$'
ForEach($FileCanary in $HoneyPot){
$ACL = Get-Acl $FileCanary.FullName
$ACL.SetAuditRule($AccessRule),$FileCanary.FullName
$ACL | Set-Acl $FileCanary.FullName
}


Os scripts dos primeiros exemplos darão algum tempo para encontrar, alertar, remover os mapeamentos e finalizar os processos maliciosos. Mas, dependendo de onde você colocar sua pasta, os seus arquivos e como você nomeá-los, o malware pode ser capaz de criptografá-los facilmente.


Boa parte dos ransomwares utilizam métodos criptográficos relativamente simples que quase não levam tempo e, por isso, nos desafiam a agirmos rapidamente.


Sendo assim, é necessário criar uma maneira de manter o malware ocupado e fazendo algo inofensivo, até alcançar os arquivos realmente importantes. Neste exemplo, abaixo, será criado o diretório de nome “$$”, a fim de ocupar o ransomware e mantê-lo num looping, mapeando e criptografando arquivos inofensivos.


Exemplo 3:
Exemplo Powershell para montar uma unidade “$$” apontada para o C:


#Let's grab the DeviceID for the C volume
$Volume_info_for_C = Get-WMIObject -Class Win32_Volume -Filter "driveletter='c:'"
$Device_ID_of_C = $Volume_info_for_C.DeviceID
#Normally, everything is mounted only to the root (C:\) but we are going to get creative.
$Sinkholes = @('$$')
ForEach($Sinkhole in $Sinkholes){
   New-Item c:\$Sinkhole -ItemType directory
   $Volume_info_for_C.AddMountPoint("c:\$Sinkholes")


Então, acontecerá isso, um loop, quando abrir o diretório:


https://1.bp.blogspot.com/-oAgxxrHMQn4/VvV881PkZfI/AAAAAAAAABQ/0wrZy1Sx2oU1PbW4cfgXDF9XxsxwFw6vA/s400/2016-03-18%2B19_33_58-C__.png


Imagem da unidade C:


https://2.bp.blogspot.com/-uY10Q_ekD-A/VvV8_VjWSrI/AAAAAAAAABU/NqNqP1xeMEcoDfCcEcJzdBV0BB0WcVkIQ/s400/2016-03-18%2B19_34_22-C__%2524%2524.png


A unidade C:\$$
https://2.bp.blogspot.com/-ccQHxsRd7HQ/VvV9BQnyJZI/AAAAAAAAABY/w5XOgKNlXZMlz9SHbA2g968Qmc0lOP21g/s400/2016-03-18%2B19_35_26-C__%2524%2524_%2524%2524_%2524%2524.png


Dessa forma, se o ransomware iniciar a partir do primeiro volume, este ciclo infinito de pastas aumentará a “distância” até alcançar os arquivos que devem ser protegidos.


Abaixo é possível ver um exemplo de enumeration do Teslacrypt através de uma VM do Windows:


https://2.bp.blogspot.com/-OabDQvG_pus/VvV-YWIeJxI/AAAAAAAAABk/l8Bb0ylIoXsMKuxf7gkm6M0EqMuRVCSDg/s400/withoutsinkhole.png


É possível notar que o C:\* é consultado e a pasta $Recycle é a primeira a retornar, daí então ransomware começa a procurar os arquivos.


Veja abaixo a imagem de quando o Teslacrypt atinge a unidade:


https://4.bp.blogspot.com/-2TYuhmz1ShE/VvV-YcUwAAI/AAAAAAAAABo/4_GD39Ibe4YHRaeRSs7mlVoka65JonlIQ/s400/withsinkhole.png


O ransomware não consegue atingir a unidade C por conta do script que foi criado. Ele só ira bater sobre o C:\$$. E para dificultar ainda mais, você pode criar múltiplos ‘sinkholes’ no perfil do usuário.


$Sinkholes = @('$$','Users\$GoToJail','Users\username\Documents\$GoDirectlyToJail')
ForEach($Sinkhole in $Sinkholes){
New-Item c:\$Sinkhole -ItemType directory
$Volume_info_for_C.AddMountPoint("c:\$Sinkhole")


Se o ranwomware atingir a pasta: Users\username\Documents\$GoDirectlyToJail, ele irá retornar ao topo do volume onde está a pasta sinkhole C:\$$


O exemplo abaixo usa o arquivo de cenário e os sinkholes juntos. Este script irá forçar o ransomware para o loop, fazendo com ele criptografe os mesmos arquivos falsos do cenário várias vezes.


Exemplo 4:


$HoneyPot =  "c:\`$\"
New-Item $HoneyPot -ItemType directory
#Here are a few of the popular extensions for Ransomware to target.
$exts = @(".c",".h",".m",".ai",".cs",".db",".db",".nd",".pl",".ps",".py",
         ".rm",".3dm",".3ds","3fr",".3g2",".3gp",".ach",".arw",".asf",".asx",
         ".avi",".bak",".bay",".cdr",".cer",".cpp",".cr2",".crt",".crw",".dbf",
         ".dcr",".dds",".der",".des",".dng",".doc",".dtd",".dwg",".dxf",".dxg",
         ".eml",".eps",".erf",".fla",".flv",".hpp",".iif",".jpe",".jpg",".kdc",
         ".key",".lua",".m4v",".max",".mdb",".mdf",".mef",".mov",".mp3",".mp4",
         ".mpg",".mrw",".msg",".nef",".nk2",".nrw",".oab",".obj",".odb",".odc",
         ".odm",".odp",".ods",".odt",".orf",".ost",".p12",".p7b",".p7c",".pab",
         ".pas",".pct",".pdb",".pdd",".pdf",".pef",".pem",".pfx",".pps",".ppt",
         ".prf",".psd",".pst",".ptx",".qba",".qbb",".qbm",".qbr",".qbw",".qbx",
         ".qby",".r3d",".raf",".raw",".rtf",".rw2",".rwl",".sql",".sr2",".srf",
         ".srt",".srw",".svg",".swf",".tex",".tga",".thm",".tlg",".txt",".vob",
         ".wav",".wb2",".wmv",".wpd",".wps",".x3f",".xlk",".xlr",".xls",".yuv",
         ".back",".docm",".docx",".flac",".indd",".java",".jpeg",".pptm",".pptx",
         ".xlsb",".xlsm",".xlsx")


ForEach($ext in $exts){
 #For each extension, this will create a puedorandom number of files between 2 and 5
 #We don't want this ransomware to get bored while we are trying to kill it.
 For($i=1; $i -le $(Get-Random -Minimum 2 -Maximum 5 ); $i++){
 #Now we are going to create the file contents.
$textout = ""
     For($i=1; $i -le $(Get-Random -Minimum 10 -Maximum 1000 ); $i++){
         #For puedorandom characters
         #$textout += -join ((65..90) + (97..122)|Get-Random -Count 64| % {[char]$_})
         #For some plaintext easy to read
         $textout += "Completely Plaintext File. "
     }
#More random filenames because...why not?
$RandomFileName = -join ((65..90) + (97..122)|Get-Random -Count 8|% {[char]$_})
#Save random file contents to random file name with our extension
$RandomFilePath = ($HoneyPot + $RandomFileName + $ext)
$textout| Out-File -FilePath $RandomFilePath -Force -ErrorAction SilentlyContinue
 }
}


#Next we create the sinkhole.
#Let's grab the volume info for C
$Volume_info_for_C = Get-WMIObject -Class Win32_Volume -Filter "driveletter='c:'"
#Now lets snag the DeviceID
$Device_ID_of_C = $Volume_info_for_C.DeviceID
#We are going to use the DeviceID to setup some new mountpoints for this volume.
#Normally, everything is mounted only to C:\ but we're going to get creative.
$Sinkholes = @('$$','Users\$GoToJail','Users\username\Documents\$GoDirectlyToJail')
ForEach($Sinkhole in $Sinkholes){
   New-Item c:\$Sinkhole -ItemType directory
   $Volume_info_for_C.AddMountPoint("c:\$Sinkhole")


Proteção extra contra ransomware



Os scripts que listamos acima dificultam o ransomware a atingir os seus arquivos e retardam a infecção dos mesmos.


Entretanto, sabemos que os ransomwares são constantemente atualizados pelos atacantes e qualquer malware novo poderá ser inteligente (mais aperfeiçoado que os anteriores) ao ponto de passar facilmente pelo cenário criado. Por causa disso, para garantir uma maior proteção, sugerimos agora alguns itens que podem identificar e limitar o ataque:


  • AppLocker – É um meio de mitigar o ransomware bloqueando executáveis que não sejam assinados digitalmente. Use o AppLocker para bloquear executáveis em lugares comuns que o ransomware rastreia, como:
<users profile>\AppData\Local\Temp
<users profile>\AppData\Local\Temp\*
<users profile>\AppData\Local\Temp\*\*


Você pode obter informações ainda mais detalhadas sobre isso aqui.

Por fim, espero que algumas dessas etapas possam ajudar a mitigar o ransomware no seu sistema! Lembrando que alguns destes exemplos podem vir a trazer um risco para o seu ambiente, o ideal seria testar para ver qual solução pode ser uma possibilidade mais adequada para evitar o ransomware e, ao mesmo tempo, preservar ao máximo seu ambiente.

5 comentários:

  1. Ótimo conteúdo! Só gostaria de saber se esses scripts devem ser executados no momento em que o malware está executando ou antes?

    ResponderExcluir
  2. Ola, boa tarde. Devem ser executados antes, a ideia é "mascarar" o virus, fazer com que ele fique em um looping e não alcance dados relevantes.

    Obrigado pelo feedback.

    Abs,

    ResponderExcluir
  3. Se eu tenho um servidor de arquivos freenas bsb/unix e permito apenas gravar e ler sem dar poderes de adm, o randsomeware consegue criptografar o HD de dados?

    ResponderExcluir
    Respostas
    1. Sim, consegue, existem variantes do ransomware e já houveram casos em Unix/Linux/MAC OS X/Bsd.

      Excluir