Quais são os sinais indicadores de que um servidor Linux foi invadido? Existem ferramentas que podem gerar e enviar por email um relatório de auditoria de maneira programada?
Se o estado é desconhecido, não há realmente nenhuma maneira. É por isso que é tão importante usar fontes de instalação confiáveis e configurar ferramentas como o Tripwire antes de expô-lo a qualquer outra coisa além de si próprio.
Você quer dizer "rachado". Hacking é como conseguimos o Linux em primeiro lugar.
Gbarry #
Uma vez, um amigo meu, que estava hospedado no servidor, pediu para eu olhar para o servidor, pois parecia haver algo estranho nele. Assim que vi os logs, soube que algo estava acontecendo. Eles tentaram encobrir seus rastros e acho que instalamos um kit raiz, mas estragamos um pouco. De qualquer forma, para encurtar a história, tivemos que reconstruir todo o servidor do zero. Demorou a noite toda e, em seguida, configuramos algumas ferramentas de auditoria de segurança.
Matt
@ Matt Mind nos dizendo quais ferramentas? Ainda é o mesmo hoje?
Rodrigo
Respostas:
34
Mantenha uma cópia original dos arquivos críticos do sistema (como ls, ps, netstat, md5sum) em algum lugar, com um md5sum, e compare-os regularmente com as versões ao vivo. Rootkits invariavelmente modificam esses arquivos. Use essas cópias se suspeitar que os originais foram comprometidos.
um assessor ou tripwire informará todos os arquivos que foram modificados - supondo que seus bancos de dados não tenham sido violados.
Configure o syslog para enviar seus arquivos de log para um servidor de log remoto, onde eles não podem ser violados por um invasor. Assista a esses arquivos de log remotos em busca de atividades suspeitas
ler seus registros regularmente - uso logwatch ou logcheck para sintetizar a informação crítica.
Conheça seus servidores . Saiba que tipos de atividades e logs são normais.
MD5 foi enfraquecido severamente se não jogado fora. Você pode mudar para sha512.
Broam
12
Você não
Eu sei, eu sei - mas é a verdade paranóica e triste, na verdade;) Existem muitas dicas, é claro, mas se o sistema foi direcionado especificamente - pode ser impossível dizer. É bom entender que nada é completamente seguro. Mas precisamos trabalhar para ter mais segurança; portanto, apontarei para todas as outras respostas;)
Se o seu sistema foi comprometido, nenhuma das ferramentas do sistema pode ser confiável para revelar a verdade.
Você está assumindo que seu invasor tem alguma habilidade, quer ser furtivo de qualquer forma e não está puramente interessado em eliminar spam e adicionar seu OC3 a uma botnet. Atualmente, você geralmente descobre que grandes quantidades de spam estão saindo do seu servidor, geralmente em um sistema sobrecarregado que não deveria estar. A maioria dos "hackers" é motivada por dinheiro atualmente.
Ernie
2
As ferramentas de ataque mais avançadas hoje exigem pouca habilidade e estão disponíveis com facilidade e algumas são extremamente furtivas por padrão e por design. Botnets / zumbis pode ser ocioso um longo tempo antes de ser usado para o mal, mas erros nas ferramentas de ataque pode causar falhas indesejadas e comportamento estranho etc.
Oskar Duveborn
11
O Tripwire é uma ferramenta comumente usada - notifica quando os arquivos do sistema foram alterados, embora obviamente você precise instalá-lo com antecedência. Caso contrário, itens como novas contas de usuário desconhecidas, processos e arquivos estranhos que você não reconhece ou aumento do uso da largura de banda sem motivo aparente são os sinais usuais.
Outros sistemas de monitoramento como o Zabbix podem ser configurados para alertá-lo quando arquivos como / etc / passwd são alterados.
Segfaults estranhos, por exemplo. de utilitários padrão como ls(isso pode acontecer com kits raiz quebrados)
Diretórios ocultos /ou /var/(a maioria das crianças de script é burra ou preguiçosa demais para cobrir suas trilhas)
netstat mostra portas abertas que não deveriam estar lá
Daemons na lista de processos dos quais você normalmente usa tipos diferentes (por exemplo bind, mas você sempre usa djbdns)
Além disso, descobri que há um sinal confiável de que uma caixa está comprometida: se você tiver um mau pressentimento sobre a diligência (com atualizações, etc.) do administrador de quem você herdou um sistema, fique de olho nele!
Existe um método de verificar servidores invadidos por meio de kill:
Essencialmente, quando você executa "kill -0 $ PID", está enviando um sinal nop para processar o identificador $ PID. Se o processo estiver em execução, o comando kill sairá normalmente. (FWIW, como você está transmitindo um sinal de nop kill, nada acontecerá com o processo). Se um processo não estiver em execução, o comando kill falhará (o status de saída é menor que zero).
Quando seu servidor é invadido / um rootkit é instalado, uma das primeiras coisas que ele faz é dizer ao kernel para ocultar os processos afetados das tabelas de processos etc. processos. E então isso significa que
a) Esta verificação não é uma verificação extensa, pois os rootkits bem codificados / inteligentes garantirão que o kernel responda com uma resposta "processo não existe", tornando a verificação redundante. b) De qualquer maneira, quando um servidor invadido tem um processo "ruim" em execução, seu PID geralmente não é exibido em / proc.
Portanto , se você está aqui até agora, o método é matar -0 todos os processos disponíveis no sistema (qualquer coisa entre 1 -> / proc / sys / kernel / pid_max) e ver se há processos em execução, mas não relatados em / proc.
Se alguns processos aparecerem em execução, mas não foram relatados em / proc, você provavelmente tem um problema da maneira que vê.
Aqui está um script bash que implementa tudo isso - https://gist.github.com/1032229 . Salve isso em algum arquivo e execute-o, se você encontrar um processo que não é relatado no proc, você deve ter algumas pistas para começar a pesquisar.
Isso é realmente útil para o meu servidor doméstico, onde eu não tenho tempo para manter o sistema como um sistema de trabalho produtivo. De qualquer forma, eu poderia usar isso em um ambiente profissional e ter uma "relativa" certeza dos resultados? E para a resposta ter três anos de idade: esse método ainda é válido para verificar infecções comuns hoje em 2014?
cubo
7
Seguirei as respostas dadas aqui e adicionarei uma das minhas.
find /etc /var -mtime -2
Isso fornecerá uma indicação rápida se algum dos arquivos do servidor principal foi alterado nos últimos 2 dias.
O SNORT® é um sistema de prevenção e detecção de intrusões de rede de código aberto que utiliza uma linguagem orientada por regras, que combina os benefícios dos métodos de inspeção baseados em assinaturas, protocolos e anomalias. Com milhões de downloads até o momento, o Snort é a tecnologia de detecção e prevenção de intrusões mais amplamente implantada no mundo e se tornou o padrão de fato para o setor.
O Snort lê o tráfego da rede e pode procurar coisas como "teste de unidade por caneta", onde alguém apenas executa uma verificação completa de metasploit nos servidores. É bom saber esse tipo de coisa, na minha opinião.
Use os logs ...
Dependendo do seu uso, você pode configurá-lo para que você saiba sempre que um usuário efetuar logon ou logon de um IP ímpar, ou sempre que o root efetuar logon ou sempre que alguém tentar efetuar login. Na verdade, tenho o servidor por e-mail todas as mensagens de log maiores que Debug. Sim, mesmo aviso. Eu filtro alguns deles, é claro, mas todas as manhãs quando recebo 10 e-mails sobre coisas, me faz querer corrigi-lo para que isso pare de acontecer.
Monitore sua configuração - eu realmente mantenho meu / etc inteiro no subversion para que eu possa acompanhar as revisões.
Execute verificações. Ferramentas como Lynis e Rootkit Hunter podem fornecer alertas sobre possíveis falhas de segurança em seus aplicativos. Existem programas que mantêm um hash ou árvore de hash de todos os seus compartimentos e podem alertá-lo sobre alterações.
Monitore seu servidor - assim como você mencionou o espaço em disco - os gráficos podem dar uma dica se algo for incomum. Eu uso o Cacti para ficar de olho na CPU, tráfego de rede, espaço em disco, temperaturas etc. Se algo parece estranho, é estranho e você deve descobrir por que é estranho.
Verifique seu histórico do bash, se ele estiver vazio e você não o tiver desmarcado ou esvaziado, existe uma boa possibilidade de alguém comprometer seu servidor.
Verifique por último. Você verá IPs desconhecidos ou parecerá muito vazio.
Então, como a resposta aceita afirmou, os arquivos do sistema geralmente são alterados, verifique a data da modificação. No entanto, muitas vezes eles violam a data de modificação.
Eles costumam instalar outra versão do ssh em execução em uma porta aleatória. Isso geralmente está oculto em alguns lugares realmente estranhos. Observe que normalmente será renomeado para algo diferente de ssh. Portanto, verifique o netstat (pode não funcionar, pois geralmente o substitui) e use o iptables para bloquear qualquer porta desconhecida.
De qualquer forma, é uma situação em que prevenir é melhor que remediar. Se você foi comprometido, é melhor formatar e começar novamente. É quase impossível confirmar que você limpou com sucesso o hack.
Observe o seguinte para evitar que seu servidor seja comprometido.
Alterar porta ssh
Impedir que o root possa fazer login
permitir apenas determinados usuários
Impedir login de senha
Use chaves ssh, chaves protegidas por senha, preferíveis
Sempre que possível, coloque todos os ip na lista negra e na lista de permissões os ips necessários.
Instale e configure fail2ban
Use arame de trip para detectar invasões
Monitore o número de usuários conectados com o Nagios ou zabbix. Mesmo se você for notificado toda vez que fizer login, pelo menos saberá quando outra pessoa está jogando.
Se possível, mantenha seu servidor em uma VPN, e permita apenas o ssh via IP VPN. Proteja seu vpn.
Vale a pena notar que, uma vez que eles estejam em um servidor, eles verificarão seu histórico do bash e procurarão outros servidores aos quais você se conectou via ssh nesse servidor. Eles tentarão se conectar a esses servidores. Portanto, se você for brutalmente forçado devido a uma senha ruim, é muito possível que eles consigam se conectar ao outro servidor e comprometê-los também.
É um mundo feio, reitero que prevenir é melhor que remediar.
Você deve verificar o GuardRail. Ele pode verificar seu servidor diariamente e informar o que mudou de uma maneira visual agradável. Ele não requer um agente e pode conectar-se através de SSH, para que você não precise juntar a máquina e os recursos com um agente.
O melhor de tudo é que é gratuito para até 5 servidores.
Este é um serviço de nuvem que faz login na sua máquina com direitos de root? O que acontece se o serviço estiver comprometido?
cubo
Você não precisa criar raiz. Você também pode optar por usar um agente, o que significa que sua máquina faz polling em vez de fazer a conexão SSH. As senhas para coisas como DB são sempre armazenadas em sua máquina, e não na nuvem também.
Respostas:
fonte
Você não
Eu sei, eu sei - mas é a verdade paranóica e triste, na verdade;) Existem muitas dicas, é claro, mas se o sistema foi direcionado especificamente - pode ser impossível dizer. É bom entender que nada é completamente seguro. Mas precisamos trabalhar para ter mais segurança; portanto, apontarei para todas as outras respostas;)
Se o seu sistema foi comprometido, nenhuma das ferramentas do sistema pode ser confiável para revelar a verdade.
fonte
O Tripwire é uma ferramenta comumente usada - notifica quando os arquivos do sistema foram alterados, embora obviamente você precise instalá-lo com antecedência. Caso contrário, itens como novas contas de usuário desconhecidas, processos e arquivos estranhos que você não reconhece ou aumento do uso da largura de banda sem motivo aparente são os sinais usuais.
Outros sistemas de monitoramento como o Zabbix podem ser configurados para alertá-lo quando arquivos como / etc / passwd são alterados.
fonte
Algumas coisas que me deram dicas no passado:
ls
(isso pode acontecer com kits raiz quebrados)/
ou/var/
(a maioria das crianças de script é burra ou preguiçosa demais para cobrir suas trilhas)netstat
mostra portas abertas que não deveriam estar lábind
, mas você sempre usadjbdns
)Além disso, descobri que há um sinal confiável de que uma caixa está comprometida: se você tiver um mau pressentimento sobre a diligência (com atualizações, etc.) do administrador de quem você herdou um sistema, fique de olho nele!
fonte
Existe um método de verificar servidores invadidos por meio de
kill
:Essencialmente, quando você executa "kill -0 $ PID", está enviando um sinal nop para processar o identificador $ PID. Se o processo estiver em execução, o comando kill sairá normalmente. (FWIW, como você está transmitindo um sinal de nop kill, nada acontecerá com o processo). Se um processo não estiver em execução, o comando kill falhará (o status de saída é menor que zero).
Quando seu servidor é invadido / um rootkit é instalado, uma das primeiras coisas que ele faz é dizer ao kernel para ocultar os processos afetados das tabelas de processos etc. processos. E então isso significa que
a) Esta verificação não é uma verificação extensa, pois os rootkits bem codificados / inteligentes garantirão que o kernel responda com uma resposta "processo não existe", tornando a verificação redundante. b) De qualquer maneira, quando um servidor invadido tem um processo "ruim" em execução, seu PID geralmente não é exibido em / proc.
Portanto , se você está aqui até agora, o método é matar -0 todos os processos disponíveis no sistema (qualquer coisa entre 1 -> / proc / sys / kernel / pid_max) e ver se há processos em execução, mas não relatados em / proc.
Se alguns processos aparecerem em execução, mas não foram relatados em / proc, você provavelmente tem um problema da maneira que vê.
Aqui está um script bash que implementa tudo isso - https://gist.github.com/1032229 . Salve isso em algum arquivo e execute-o, se você encontrar um processo que não é relatado no proc, você deve ter algumas pistas para começar a pesquisar.
HTH.
fonte
Seguirei as respostas dadas aqui e adicionarei uma das minhas.
Isso fornecerá uma indicação rápida se algum dos arquivos do servidor principal foi alterado nos últimos 2 dias.
Isto é de um artigo sobre detecção de hackers. Como detectar se seu servidor foi invadido.
fonte
De Como posso detectar invasões indesejadas nos meus servidores?
Use um IDS
O Snort lê o tráfego da rede e pode procurar coisas como "teste de unidade por caneta", onde alguém apenas executa uma verificação completa de metasploit nos servidores. É bom saber esse tipo de coisa, na minha opinião.
Use os logs ...
Dependendo do seu uso, você pode configurá-lo para que você saiba sempre que um usuário efetuar logon ou logon de um IP ímpar, ou sempre que o root efetuar logon ou sempre que alguém tentar efetuar login. Na verdade, tenho o servidor por e-mail todas as mensagens de log maiores que Debug. Sim, mesmo aviso. Eu filtro alguns deles, é claro, mas todas as manhãs quando recebo 10 e-mails sobre coisas, me faz querer corrigi-lo para que isso pare de acontecer.
Monitore sua configuração - eu realmente mantenho meu / etc inteiro no subversion para que eu possa acompanhar as revisões.
Execute verificações. Ferramentas como Lynis e Rootkit Hunter podem fornecer alertas sobre possíveis falhas de segurança em seus aplicativos. Existem programas que mantêm um hash ou árvore de hash de todos os seus compartimentos e podem alertá-lo sobre alterações.
Monitore seu servidor - assim como você mencionou o espaço em disco - os gráficos podem dar uma dica se algo for incomum. Eu uso o Cacti para ficar de olho na CPU, tráfego de rede, espaço em disco, temperaturas etc. Se algo parece estranho, é estranho e você deve descobrir por que é estranho.
fonte
Eu gostaria de adicionar a isso:
Verifique seu histórico do bash, se ele estiver vazio e você não o tiver desmarcado ou esvaziado, existe uma boa possibilidade de alguém comprometer seu servidor.
Verifique por último. Você verá IPs desconhecidos ou parecerá muito vazio.
Então, como a resposta aceita afirmou, os arquivos do sistema geralmente são alterados, verifique a data da modificação. No entanto, muitas vezes eles violam a data de modificação.
Eles costumam instalar outra versão do ssh em execução em uma porta aleatória. Isso geralmente está oculto em alguns lugares realmente estranhos. Observe que normalmente será renomeado para algo diferente de ssh. Portanto, verifique o netstat (pode não funcionar, pois geralmente o substitui) e use o iptables para bloquear qualquer porta desconhecida.
De qualquer forma, é uma situação em que prevenir é melhor que remediar. Se você foi comprometido, é melhor formatar e começar novamente. É quase impossível confirmar que você limpou com sucesso o hack.
Observe o seguinte para evitar que seu servidor seja comprometido.
Vale a pena notar que, uma vez que eles estejam em um servidor, eles verificarão seu histórico do bash e procurarão outros servidores aos quais você se conectou via ssh nesse servidor. Eles tentarão se conectar a esses servidores. Portanto, se você for brutalmente forçado devido a uma senha ruim, é muito possível que eles consigam se conectar ao outro servidor e comprometê-los também.
É um mundo feio, reitero que prevenir é melhor que remediar.
fonte
Depois de pesquisar um pouco, também é o que eu listei acima, entre outras coisas: http://www.chkrootkit.org/ e http://www.rootkit.nl/projects/rootkit_hunter.html
fonte
Você deve verificar o GuardRail. Ele pode verificar seu servidor diariamente e informar o que mudou de uma maneira visual agradável. Ele não requer um agente e pode conectar-se através de SSH, para que você não precise juntar a máquina e os recursos com um agente.
O melhor de tudo é que é gratuito para até 5 servidores.
Confira aqui:
https://www.scriptrock.com/
fonte