Não, não vou contar como escrever meu ransomware ransomware, minerador ou explorar uma vulnerabilidade super nova, como você pode imaginar. E ainda mais, não estou ansioso para aumentar o holivar "O Linux é mais seguro que o Windows? (Sim)". Meu objetivo era escrever um vírus simples para o linux, ninguém, por assim dizer, "Just for Fun", cuja única função é distribuir sua cópia. Sobre o que fiz, vou contar neste artigo. No final, darei um link para o GitHub com a fonte.

Isenção de responsabilidade
Este artigo foi escrito para fins educacionais. O autor em nenhum caso incentiva os leitores a violar as leis da Federação Russa. Por favor, não repita as etapas descritas neste artigo sem ler primeiro o capítulo 28 do Código Penal da Federação Russa.
E o que vamos realmente fazer?
O mecanismo de implementação mais fácil para espalhar o vírus me pareceu se espalhar através de pacotes deb / rpm modificados. Os pacotes deb e rpm agora são a ferramenta de distribuição mais popular para Linux. Optei pelo deb, pois o número de usuários de distribuições baseadas no Debian prevalece sobre os usuários do Red Hat e seus "seguidores".
Também é necessário que o vírus inicie automaticamente e, após determinado período de tempo, verifique o computador em busca de pacotes deb. Para facilitar a depuração, escolhi um período de 10 minutos.
O que é um pacote deb?
O pacote deb é um arquivo no formato
.ar que não usa compactação. Existem mais três arquivos dentro do arquivo:
debian-bynary ,
control.tar e
data.tardebian.binary - um arquivo de texto contendo uma versão do formato do pacote deb, no momento em que eles sempre escrevem "2.0" lá.
control.tar - arquiva com arquivos contendo informações sobre o pacote (por exemplo, o arquivo de controle necessário) e pacotes necessários para instalar o pacote (por exemplo, scripts préinst, postinst, prerm e postrm que são executados antes / depois da instalação / desinstalação do pacote). Ele pode ser compactado usando gzip ou xz. Nesse caso, a extensão .gz ou .xz é adicionada ao nome do arquivo, respectivamente.
data.tar - arquive com diretórios que contêm arquivos instalados. Os diretórios são representados por uma árvore, na forma em que devem ser extraídos para a raiz do sistema de arquivos. Pode ser compactado usando gzip, bzip2, lzma, xz.
Precisamos prestar atenção ao arquivo de controle do arquivo control.tar. Este arquivo contém informações sobre o pacote, como autor, descrição, versão, prioridade do pacote no sistema, etc. Estou interessado no campo
depende , que mostra as dependências (pacotes sem os quais ele não pode funcionar neste pacote). Nesse campo, nosso vírus anexará o
fakeroot e o
dpkg - utilitários necessários para modificar outros pacotes no computador infectado.
Para construir um pacote deb, o diretório raiz do pacote é criado. Diretórios com arquivos instalados e o diretório DEBIAN contendo arquivos de serviço, incluindo controle e scripts para instalação / desinstalação, são colocados nele. Em seguida, o
comando fakeroot dpkg-deb --build ./path é executado .
Primeiro houve um demônio
No momento em que escrevi o vírus, eu ainda tinha uma péssima idéia do que
era Cron e, por isso, escrevi meu próprio daemon para
systemd . Criei o arquivo trojan_penguin.service, que será colocado no diretório / lib / systemd / system e adicionei o seguinte:
[Unit] Description = XXX [Service] ExecStart=/usr/bin/trojan_penguin.sh Type=fork [Install] WantedBy=multi-user.target
ExecStart = / usr / bin / trojan_penguin.sh - aqui indiquei o caminho para o arquivo (para o futuro vírus), que deve ser iniciado na inicialização do sistema.
Tipo = bifurcação - esta linha indica que o processo deve se ramificar do processo pai.
Não vi a necessidade de um arquivo PID, portanto não o adicionei.
Nos manuais para escrever seu próprio daemon, os arquivos .service são propostos para serem colocados nos diretórios / usr / lib / systemd / system / ou / etc / systemd / system /. Mas no meu ubunt eu encontrei o diretório / lib / systemd / system. (Eu tenho o apache2.service lá). Talvez alguém nos comentários escreva para que serve esse diretório e como ele difere dos outros dois.
O arquivo
/usr/bin/trojan_penguin.sh recebi isso:
Estamos procurando pacotes deb na seção / home (onde mais posso encontrá-los?). Os caminhos para os arquivos encontrados são gravados na variável
list . Em seguida, basta percorrer todas as linhas da linha e, para cada arquivo, executamos o script tp_infect.sh, que infectará esse arquivo. Quando escrevi o vírus, os scripts estavam em um diretório separado e, por conveniência, criei uma variável de
depuração na qual escrevi o caminho para esta pasta.
O daemon está pronto, resta saber como executá-lo quando o sistema iniciar. Para isso, escrevi um script
pós-instalação . Ele será iniciado imediatamente após a instalação do pacote infectado e indica que nosso vírus começa com o sistema. Coloquei-o no diretório "/ usr / bin /" para copiá-lo de lá para os pacotes infectados.
Modificando o pacote deb
Como escrevi acima, os arquivos contidos em um pacote deb podem ter permissões diferentes. Eu não me incomodei e considerei apenas o caso em que os arquivos são compactados usando .xz. O arquivo
/usr/bin/tp_infect.sh responsável pela modificação recebeu o seguinte conteúdo:
Problemas com a pós-instalação
Tudo ficaria bem, mas agora temos um problema. Mas e se o pacote já tiver postinstal? A pós-instalação original pode ser escrita em diferentes idiomas (python, bash ...), talvez seja até binária. Isso não nos permitirá simplesmente pegar e adicionar nosso postinstall. Resolvi esse problema da seguinte maneira:
Adicionado o seguinte ao script
tp_infect.sh :
E na
pós-instalação , é o seguinte:
Eu resolvi um problema, mas outro apareceu. Nosso vírus modificará o pacote, mesmo que já esteja infectado. Após a modificação, o vírus verá que existe uma
pós-instalação no pacote (que é realmente nosso), mova-o para / usr / bin /, substituindo assim o original. Para evitar isso, adicionei uma verificação ao "tp_infect.sh", independentemente de termos modificado ou não este arquivo:
if [ -f $temp/new/usr/bin/trojan_penguin.sh ]; then rm -R $temp exit 0 fi
Juntando
O vírus está pronto. Aqui está um
link para o GitHub , como prometido. Este vírus pode ser compilado em um pacote deb separado (execute makedeb.sh) do repositório. Para injetar o vírus em qualquer pacote, basta executar o comando:
tp_infect.sh / deb-/
Existem duas cópias do script
postinst no repositório
DEBIAN / postinst - esta cópia é executada apenas ao instalar um pacote vazio com um vírus. Comentei para que o vírus não inicie após a instalação e modifique os pacotes apenas por comando.
usr / bin / postinst - esta cópia é inserida nos pacotes infectados.
Sumário
E a conclusão é óbvia sem este artigo: você não deve baixar e executar programas de fontes não verificadas.
Por uma questão de curiosidade, enviei o pacote deb do vírus ao VirusTotal para análise. No momento da redação deste documento, nenhum antivírus o detectou. Aqui está o
link para o relatório. Gostaria de saber quanto tempo deve passar e quantos hosts precisam ser infectados com esse vírus, para que os antivírus prestem atenção a ele?