Como posso auditar usuários e acessar tentativas de SSH no meu servidor?

28

Eu tive alguns problemas de segurança com um servidor meu, alguns usuários do SSH criaram incêndios, também conhecidos como problemas.

Eu gostaria de:

  • Rastrear logins e logins de usuários
  • Acompanhe a atividade desses SSH, a fim de descobrir qualquer atividade maliciosa
  • Impedir que usuários excluam logs

Não sou um administrador de sistemas e sou bastante inexperiente nesse assunto; portanto, qualquer tipo de conselho seria muito bem-vindo e muito útil. :)

RadiantHex
fonte

Respostas:

27

Como estamos falando de servidores SSH, darei soluções de linha de comando.

  • Acompanhe logins e logins de usuários. Isso é fácil, o arquivo /var/log/auth.logdeve ter essas informações.

  • Acompanhar a atividade desses usuários: se eles forem bastante inocentes, você poderá verificar o arquivo .bash_historyno diretório inicial. Você verá uma lista dos comandos que eles executaram. O problema é que eles podem excluir ou editar este arquivo.

  • Impedir que os usuários excluam logs: os usuários não devem poder tocar auth.log. Para impedi-los de brincar, .bash_historyvocê precisa fazer alguns truques .

  • E se o usuário conseguir obter acesso root? : Você está ferrado. A menos que cometam um erro, poderão esconder todos os seus passos.

Javier Rivera
fonte
Observe que não há como impedir que os usuários digitem unset HISTFILEdentro do bash, e o histórico do bash não será registrado.
Gilles 'SO- stop be evil'
@ Gilles, leia o link dos truques. Eles definem HITSFILE como uma variável somente leitura em .profile.
Javier Rivera
Eu pensei que você poderia desmarcar uma variável readonly em um bash não restrito, mas aparentemente não. Isso melhora um pouco a rastreabilidade, uma vez que o início de outro shell (que não será lido ~/.bash_historyou ~/.bashrc) será exibido $HISTFILE. Mas isso por si só pode ser perfeitamente legítimo (por exemplo, o usuário apenas deseja executar zshou deseja definir sua própria opção de forma alternativa bashrc).
Gilles 'SO- stop be evil'
1
Sim. Você pode restringi-lo ao bash ou a algum outro shell. Afinal, a segurança é apenas uma corrida.
Javier Rivera
Não é verdade que "se o usuário conseguir obter acesso root", ele poderá ocultar todas as etapas. Você sempre pode usar um servidor externo para auditoria, onde todas as etapas seriam gravadas, incluindo a obtenção de raiz.
Petr
6

[AVISO LEGAL] Percebo que estou atrasado para a festa, mas gostaria de colar uma resposta que dei a outra pergunta , porque sinto que ela pode oferecer uma boa percepção aos leitores, e essa pergunta parece ser a melhor opção. local para informações básicas sobre ssh.

Houve um problema semelhante que me ocorreu depois de ler esta pergunta aqui no AskUbuntu e verificar meu VPS, apenas para ver um bazilhão de tentativas de força bruta. Foi quando eu decidi agir.

Agora, de acordo com a pergunta à qual vinculei, se você gostaria de ver tentativas de logon com falha na sua máquina sobre ssh (poderiam ser tentativas de força bruta ou algo assim), tente digitar o seguinte:

grep sshd.\*Failed /var/log/auth.log | less

Se a saída consistir em várias linhas, ou seja, muitas tentativas de força bruta, especialmente se elas ocorrerem entre intervalos curtos, convém executar as seguintes ações:

Alterar o arquivo de configuração ssh

Para fazer isso, abra o arquivo localizado em / etc / ssh / sshd_config com seu editor favorito, como este vim /etc/ssh/sshd_config.

1. Tente mover o ssh da porta 22 : Agora localize a linha que diz:

# What ports, IPs and protocols we listen for
Port 22

e comente a Porta 22 e use quem você quiser. Exemplo:

# What ports, IPs and protocols we listen for
# Port 22
Port 28934

Lembre-se de que portas abaixo de 1024 precisam de permissão especial (root). Não sei como isso poderia interferir, mas estou apenas dizendo.

2. Desativar logins raiz via ssh : como o nome de usuário raiz é previsível e fornece acesso completo ao seu sistema, fornecer acesso irrestrito a essa conta pelo SSH não é aconselhável. Localize a linha que permite PermitRootLogin e defina-a como não .

PermitRootLogin no

3. Desativar autenticação de senha : gere e use chaves SSH para efetuar login no seu sistema. Sem as senhas ativadas, os invasores precisarão adivinhar (ou roubar) sua chave privada SSH para obter acesso ao seu servidor. Algo que é muito, muito difícil. Prossiga para localizar a linha que lê PasswordAuthentication e defina-a como não

PasswordAuthentication no

!ATENÇÃO! Antes de fazer isso, consulte este guia aqui sobre como configurar a autenticação de certificado.

NOTA: Depois de fazer as alterações, use sudo /etc/init.d/ssh restart. Para se conectar a outra porta via uso ssh: ssh [email protected] -p <port_number>.

Configurar um firewall

Confira este guia sobre como configurar o firewall extremamente poderoso e eficaz, integrado ao Linux, IPTables .

Scripts de configuração para ajudá-lo com segurança

Um que eu uso pessoalmente e rapidamente me vem à mente é o Fail2Ban . Fail2ban monitorará seus arquivos de log em busca de falhas nas tentativas de login. Depois que um endereço IP exceder o número máximo de tentativas de autenticação, ele será bloqueado no nível da rede e o evento será registrado /var/log/fail2ban.log. Para instalá-lo:sudo apt-get install fail2ban

Verifique o histórico de comandos via ssh

Existe um comando linux, nomeado history, que permite ver quais comandos foram inseridos até aquele momento. Tente digitar historyum terminal para ver todos os comandos até esse ponto. Poderia ajudar se você fosse root .

Para procurar um comando específico, tente:history | grep command-name

Para listar todos os comandos após o ssh :fc -l ssh

Você também pode editar comandos usando o vi (não tentei o vim, embora eu assuma que funcione também):fc -e vi

Você também pode excluir o histórico :history -c

NOTA: Se você não é um fã do comando history, também há um arquivo em seu diretório pessoal ( cd ~), chamado .bash_history (se estiver usando o bash), catpara ver tudo o que foi digitado no shell do bash.

NlightNFotis
fonte
resposta muito boa. Você também deve olhar para o guia apontado por @radu em askubuntu.com/a/3906/59250
Cerber
3
  1. Javier já respondeu a este: /var/log/auth.log
  2. Eu encontrei um ótimo artigo sobre isso aqui .
  3. Se seus usuários não tiverem acesso à raiz, seus arquivos de log deverão estar seguros. Você pode tentar criar algumas regras personalizadas no arquivo sudoers para restringir o que seus usuários podem acessar e como. Além disso, você pode aumentar o nível de log do daemon sshd.
Radu Cotescu
fonte
3

Além do próprio login, não há uma maneira segura de rastrear / registrar as ações dos usuários após o login, assumindo que eles possuam conhecimentos básicos de Linux e que possam desativar o log do shell ou simplesmente executar comandos de outros shells (por exemplo, python).

Em vez disso, você deve ser conservador em fornecer acesso ssh, eles realmente precisam? Não é muito comum conceder acesso ssh, a menos que você esteja no shell fornecendo negócios.

João Pinto
fonte