Ir para conteúdo
  • Desenvolvedor na Alemanha cria primeiro vírus para Linux em Nim


    Fernando Mercês

    Batizado com nome herdado da estrela binária VV Cephei, o Linux.Cephei é provavelmente o primeiro file infector para executáveis ELF (utilizados nos sistemas baseados em Linux, entre outros) escrito na linguagem Nim. Isso mesmo, o autor é um tanto excêntrico e disse em seu blog que o Linux.Cephei é inofensivo (por enquanto) e fez somente para participar de um concurso de programação.

    O vírus é do tipo que chamamos de prepender, ou seja, ele adiciona algo "antes" da execução de um programa saudável, no caso, de um binário ELF. A técnica para isso é a alteração de seu entrypoint.

    Nos testes que fizemos aqui, o Linux.Cephei só funcionou com binários compilados estaticamente:

    $ uname -a
    Linux malinux 4.9.0-4-amd64 #1 SMP Debian 4.9.51-1 (2017-09-28) x86_64 GNU/Linux
    
    $ cat /etc/debian_version
    9.2
    
    $ cat h.c
    #include <stdio.h>
    
    int main(void) {
    	printf("ola mundo do bem!\n");
    	return 0;
    }
    
    $ gcc -static -o hello h.c
    
    $ ./hello
    ola mundo do bem!
    
    $ chmod +x linux.cephei
    
    $ ./linux.cephei
    
    $ ./hello
    Did you know that VV Cephei, also known as HD 208816, is an eclipsing binary star system located in the constellation Cepheus, approximately 5,000 light years from Earth? It is both a B[e] star and shell star. Awesome! https://en.wikipedia.org/wiki/VV_Cephei
    The more you know... :)
    ola mundo do bem!
    
    $ gcc -o hello h.c
    
    $ ./linux.cephei
    
    $ ./hello
    ola mundo do bem!

    Perceba que ele injetou seu código com sucesso no binário hello, mas somente quando foi compilado estaticamente. 

    Além da linguagem exótica, ultimamente não se vê muitos file infectors já que a moda de infectar executáveis passou. De qualquer forma, é bom ficar de olho. Com códigos como o do Linux.Ceiphei, vírus podem permanecer ocultos num sistema por muito tempo. E pouca gente usa antivírus no Linux, mesmo tendo uma alternativa livre como o ClamAV:|

    Editado por Fernando Mercês

    • Agradecer 3


    Feedback do Usuário

    Comentários Recomendados

    Bem interessante, obrigado pela dica Fernando é bom sempre ficar-mos de olho :ph34r:.

    • Curtir 2

    Compartilhar este comentário


    Link para o comentário
    Compartilhar em outros sites

    Valeu, @Rick Santos. Adicionei um teste que fiz e baixando o binário pronto do repositório do Github até que funcionou, mas só para binários estaticamente linkados.

    Quando tentei a partir do fonte, obtive um erro quando o Linux.Cephei tenta ler ele próprio. Acho que o autor está desenvolvendo ainda, ou não quer que saiam por aí utilizando para o mal. :)

    Abraço,

    Fernando

    • Curtir 2

    Compartilhar este comentário


    Link para o comentário
    Compartilhar em outros sites
    2 horas atrás, Fernando Mercês disse:

    Valeu, @Rick Santos. Adicionei um teste que fiz e baixando o binário pronto do repositório do Github até que funcionou, mas só para binários estaticamente linkados.

    Quando tentei a partir do fonte, obtive um erro quando o Linux.Cephei tenta ler ele próprio. Acho que o autor está desenvolvendo ainda, ou não quer que saiam por aí utilizando para o mal. :)

    Abraço,

    Fernando

    O programador do suposto malware realmente gosta de linguagens pouco comerciais haha xD, "nim", "go", "vala". 

    Compartilhar este comentário


    Link para o comentário
    Compartilhar em outros sites

    Autor aqui. Valeu pelo artigo :) Se vc usou o sample binário que eu postei no blog, realmente só vai funcionar com arquivos estáticos, mas se vc compilar o código com o compilador de Nim, deve funcionar com o critério que vc utilizou na hora de compilar :)

    Compartilhar este comentário


    Link para o comentário
    Compartilhar em outros sites

    @Guilherme Thomazi Bonicontro que legal que você viu a notícia aqui e apareceu. És Brasileiro? :)

    Eu tentei novamente mas mesmo compilando a partir do código-fonte, só consegui infectar binários estáticos, veja:

    $ git clone https://github.com/guitmz/nim-cephei.git
    $ cd nim-cephei
    $ nim c -d:release cephei.nim
    Hint: used config file '/etc/nim.cfg' [Conf]
    Hint: system [Processing]
    Hint: cephei [Processing]
    Hint: streams [Processing]
    Hint: os [Processing]
    Hint: strutils [Processing]
    Hint: parseutils [Processing]
    Hint: math [Processing]
    Hint: algorithm [Processing]
    Hint: times [Processing]
    Hint: posix [Processing]
    Hint: osproc [Processing]
    Hint: strtabs [Processing]
    Hint: hashes [Processing]
    Hint: etcpriv [Processing]
    Hint: cpuinfo [Processing]
    Hint: linux [Processing]
    Hint: random [Processing]
    Hint:  [Link]
    Hint: operation successful (24692 lines compiled; 0.265 sec total; 25.188MiB; Release Build) [SuccessX]
    
    $ cat hello.c
    #include <stdio.h>
    
    int main(void) {
    	printf("testando...\n");
    	return 0;
    }
    
    $ make hello
    cc     hello.c   -o hello
    $ file hello
    hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=0c8d7870667080bc470acc95fea4303edf5e1182, not stripped
    
    $ ./hello
    testando...
    
    $ ./cephei
    $ ./hello
    testando...
    
    $ rm hello
    $ CFLAGS=-static make hello
    cc -static    hello.c   -o hello
    $ file hello
    hello: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=c863151b3713bb6ba5d874288509b2a72e2a8428, not stripped
    
    $ ./hello
    testando...
    
    $ ./cephei
    $ ./hello
    Did you know that VV Cephei, also known as HD 208816, is an eclipsing binary star system located in the constellation Cepheus, approximately 5,000 light years from Earth? It is both a B[e] star and shell star. Awesome! https://en.wikipedia.org/wiki/VV_Cephei
    The more you know... :)
    testando...

    Estou fazendo algo errado?

    Grande abraço!

    Compartilhar este comentário


    Link para o comentário
    Compartilhar em outros sites
    Em 12/5/2017 em 15:15, Fernando Mercês disse:

    @Guilherme Thomazi Bonicontro que legal que você viu a notícia aqui e apareceu. És Brasileiro? :)

    Eu tentei novamente mas mesmo compilando a partir do código-fonte, só consegui infectar binários estáticos, veja:

    
    $ git clone https://github.com/guitmz/nim-cephei.git
    $ cd nim-cephei
    $ nim c -d:release cephei.nim
    Hint: used config file '/etc/nim.cfg' [Conf]
    Hint: system [Processing]
    Hint: cephei [Processing]
    Hint: streams [Processing]
    Hint: os [Processing]
    Hint: strutils [Processing]
    Hint: parseutils [Processing]
    Hint: math [Processing]
    Hint: algorithm [Processing]
    Hint: times [Processing]
    Hint: posix [Processing]
    Hint: osproc [Processing]
    Hint: strtabs [Processing]
    Hint: hashes [Processing]
    Hint: etcpriv [Processing]
    Hint: cpuinfo [Processing]
    Hint: linux [Processing]
    Hint: random [Processing]
    Hint:  [Link]
    Hint: operation successful (24692 lines compiled; 0.265 sec total; 25.188MiB; Release Build) [SuccessX]
    
    $ cat hello.c
    #include <stdio.h>
    
    int main(void) {
    	printf("testando...\n");
    	return 0;
    }
    
    $ make hello
    cc     hello.c   -o hello
    $ file hello
    hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=0c8d7870667080bc470acc95fea4303edf5e1182, not stripped
    
    $ ./hello
    testando...
    
    $ ./cephei
    $ ./hello
    testando...
    
    $ rm hello
    $ CFLAGS=-static make hello
    cc -static    hello.c   -o hello
    $ file hello
    hello: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=c863151b3713bb6ba5d874288509b2a72e2a8428, not stripped
    
    $ ./hello
    testando...
    
    $ ./cephei
    $ ./hello
    Did you know that VV Cephei, also known as HD 208816, is an eclipsing binary star system located in the constellation Cepheus, approximately 5,000 light years from Earth? It is both a B[e] star and shell star. Awesome! https://en.wikipedia.org/wiki/VV_Cephei
    The more you know... :)
    testando...

    Estou fazendo algo errado?

    Grande abraço!

    @Fernando Mercês

    Sou Brasileiro sim!

    Hmmm pode ser que seja um bug mesmo! Valeu por notar, vou verificar quando sobrar um tempo.


    Abraços

    • Curtir 1

    Compartilhar este comentário


    Link para o comentário
    Compartilhar em outros sites


    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário

    Criar uma conta

    Crie uma nova conta em nossa comunidade. É fácil!

    Crie uma nova conta

    Entrar

    Já tem uma conta? Faça o login.

    Entrar Agora


×