Primeiramente precisamos esclarecer algumas coisas.
O que é Ransomware?
Ransomware é um tipo de malware que restringe o acesso ao sistema infectado e cobra um valor de “resgate” para que o acesso possa ser reestabelecido.
Porque crie um arquivo malicioso?
Na verdade depois de uma noite conversando com amigos em um evento de PHP (PHPeste), falamos sobre as diversas faces do PHP. Logo no dia seguinte acordei com a ideia de criar um Ransomware como prova de conceito, mostrar que é possível e o que pode ser feito com um único arquivo.
O que significa Heimall?
Da mitologia nórdica, é um deus, com a missão de guardar a ponte Bifrost – um arco-íris ligando o céu à Terra.
A ideia…
A ideia era simples, criptografar arquivos utilizando criptografia simétrica, editando ele mesmo com o resultado da criptografia.
Diferente de outros Ransomware, ele não criptografa todos em um único arquivo como um .rar(exemplo) e coloca uma senha. E sim criptografar um por um gastando o mínimo de memória e sem estourar ela e o tempo de execução.
Problemas…
Problemas com estouro de memória:
- Quando listava todos os arquivos do sistema, 50 mil por exemplo;
- Quando chamava arquivo por arquivo sem muito tempo de intervalo;
- Arquivos muito pesados;
Problemas com estouro de tempo de execução:
- Quando listava todos arquivos do sistema;
- Arquivos muito pesados;
Problemas com quantidade de requisições, servidores bloqueiam muitas requisições em pouco tempo.
- Quando criptografava arquivo por arquivo.
Soluções…
- Não listar arquivos, pois o maior gasto da memória era para escrever o conteúdo na tela. Apensas contabilizar o total depois de certa quantidade de arquivos.
- Criptografar arquivos em lote de 500, com maior tempo entre as chamadas
- Eliminando a criptografia de arquivo maiores de 10MB, no futuro ( Na próxima versão irei tentar outras opções como deixar arquivos maiores por último na fila)
Tecnologia…
PHP utilizado foi superior ou igual ao 5.3.0.
Foi utilizado criptografia de padrão AES de 128 bits, para empacotar os arquivos. Para chamada da chave utilizei as função openssl_decrypt e openssl_encrypt que roda do php 5.3, para criptografar e descriptografar.
Criptografar:
Descriptografar:
Parâmetros necessários para o openssl_encrypt e openssl_decrypt é o texto/hash, o tipo do algoritmo, senha e o iv.
Utilizei jQuery para poder fazer as auto-chamadas em blocos de 500 em 500, para diminuir quantidade de requisição e também não estourar memória.
Veja mais…
Github:
https://github.com/aszone/heimdall-ransomware
Youtube exemplo:
muito inteligente, gostei pelo conteudo e ser em portugues(ainda nao sei ingles).
Que bom cara, pena que tive que tirar o projeto do ar. =(