terça-feira, 17 de agosto de 2010

Dica: Remover scripts malicioso

Tempo atrás enfrentei alguns problemas de segurança em um ambiente com (LAMP), nos quais o atacante conseguia colocar c99shell.php c100.php whatever.php com conteúdo malicioso ou injetar um código malicioso no meio da pagina que geralmente retornava a seguinte tela para o usuário final:


Antes de instalarmos ossec, ajustes finos de segurança no PHP, foram tomadas algumas atitudes, então gostaria de compartilhar algo que parece óbvio porém acredito que mesmo assim pode ser útil.


Ajustes de permissão:
A não ser locais aonde precisam-se ser feito upload de arquivos(mesmo assim sugiro que seja feita uma verificação via programação para que verifique se o arquivo que está sendo enviado seja realmente o que você aceita) adicionar nessas pastas um .htaccess contendo
php_flag engine off
isso fará com que dentro dessa pasta não seja permitido executar nenhum .php o que aumenta a segurança do diretório.

Quanto a permissão sugiro as seguintes permissões:
Pastas que não precisam ser inseridos dados - 555
Arquivos que não precisam ser alterados - 444
Pastas que precisam ser inseridos dados - 775
Arquivos que precisam ser alterados - 664
Usar usuário.grupo (Usuário e grupo do webserver)
http://pt.wikipedia.org/wiki/Chown

Algumas dicas para ajustar a permissão mais facilmente:
find /path1/path2/ -type d -exec chmod 0555  {} \; #Pastas
find
/path1/path2/ -type f -exec chmod 0444  {} \; #Arquivos

find
/path1/path2/ -type d -exec chmod 0775  {} \; #Pastas que podem ser alteradas
find
/path1/path2/ -type f -exec chmod 0664  {} \; #Arquivos que podem ser alteradas


Com esses pontos já temos um grande avanço na segurança, porém pretendo em breve aumentar essa documentação relatando mais coisas que foram feitas para ajustar o ambiente e estabiliza-lo.

Caso você já esteja com o script infiltrado em seu servidor uma alternativa para localiza-lo é procura-lo por palavras chaves que possivelmente encontrariamos dentro dos .php como:

find /path1/path2/ -name "*.php" -exec grep "Liloss" {} \; -print
find /path1/path2/  -name "*.php" -exec grep -i "Adobe FlashPlayer" {} \; -print
find /path1/path2/  -name "*.php" -exec grep -i "system(" {} \; -print
find /path1/path2/ -name "*.php" -exec grep -i "s0n_g0ku" {} \; -print

Sendo que esses valores podem ser alterados analise o que está acontecendo em sua infra e ajuste o find para ela.

abs a todos.
:D

Nenhum comentário: