Cron Jobs e Tarefas Agendadas

LinuxBeginner
Pratique Agora

Introdução

Em sistemas Linux, os administradores frequentemente utilizam agendadores de tarefas automatizadas para realizar manutenções de rotina, backups e atualizações do sistema. O utilitário mais comum para esse propósito é o Cron. Embora o Cron seja extremamente útil, tarefas agendadas configuradas incorretamente podem introduzir graves vulnerabilidades de segurança.

Tarefas agendadas tornam-se perigosas quando a confiança e o acesso de escrita não estão alinhados. Se uma tarefa privilegiada executa algo que usuários com menos privilégios podem modificar, o agendamento torna-se um mecanismo de escalação de privilégios retardado.

Neste laboratório, você explorará um cenário onde um administrador de sistema criou um script de manutenção que é executado automaticamente como usuário root. No entanto, o administrador deixou as permissões do arquivo excessivamente permissivas. Você aprenderá como identificar essa configuração incorreta, entender suas implicações e explorá-la injetando seu próprio payload de comando para elevar seus privilégios de um usuário padrão para root.

Enumerar Cron Jobs

Nesta etapa, você aprenderá como enumerar Cron jobs em todo o sistema. O Cron é um agendador de tarefas baseado em tempo em sistemas operacionais do tipo Unix. Administradores de sistema o utilizam para agendar tarefas (comandos ou scripts shell) para serem executadas periodicamente em horários, datas ou intervalos fixos.

Cron jobs de todo o sistema são frequentemente definidos no arquivo /etc/crontab ou dentro do diretório /etc/cron.d/. Esses arquivos de configuração especificam o agendamento, a conta de usuário sob a qual o comando deve ser executado e o próprio comando.

Isso significa que as entradas do cron revelam três fatos críticos de uma só vez: quando o código será executado, sob qual identidade ele será executado e qual arquivo ou comando será processado.

Vamos inspecionar o diretório /etc/cron.d/ para ver se existem tarefas agendadas personalizadas. Use o comando cat para ler o conteúdo do arquivo de cron job de manutenção.

cat /etc/cron.d/maintenance

Saída:

* * * * * root /usr/local/bin/maintenance.sh

A saída mostra um cron job agendado para ser executado a cada minuto, indicado pelos cinco asteriscos (* * * * *). Ele está configurado para ser executado como usuário root e executa o script bash localizado em /usr/local/bin/maintenance.sh.

Identificar Scripts Graváveis

Nesta etapa, você investigará o script executado pelo cron job para identificar possíveis vulnerabilidades de segurança. Quando um script é executado por um usuário altamente privilegiado como o root, quaisquer comandos dentro desse script também serão executados com privilégios de root.

É por isso que caminhos de scripts graváveis são um sinal importante para escalação. O controle do conteúdo do script torna-se um controle indireto da tarefa agendada privilegiada.

Se usuários padrão puderem modificar este script, eles podem injetar seus próprios comandos, que o sistema executará como root. Este é um vetor comum de escalação de privilégios.

Vamos verificar as permissões de arquivo do script de manutenção usando o comando ls com a flag -l para uma listagem detalhada.

ls -l /usr/local/bin/maintenance.sh

Saída:

-rwxrwxrwx 1 root root 78 Oct 10 10:00 /usr/local/bin/maintenance.sh

Observe as permissões rwxrwxrwx no início da linha de saída. Isso significa que o arquivo é legível, gravável e executável pelo proprietário, pelo grupo e por todos os outros usuários no sistema. Como ele é gravável por todos, seu usuário padrão atual pode modificar seu conteúdo.

Injetar um Payload de Comando Root

Nesta etapa, você explorará as permissões de arquivo fracas injetando seu próprio comando no script de manutenção.

Como o script é executado como root a cada minuto, qualquer comando que você adicionar a ele também será executado como root. Para uma prova de conceito confiável e amigável para iniciantes, adicionaremos um comando que escreve a saída de id em um arquivo no seu diretório de projeto.

Usaremos o comando echo para adicionar este payload ao script. O operador >> garante que adicionaremos nosso payload ao final do arquivo sem excluir seu conteúdo original.

echo "id > /home/labex/project/cron_pwned.txt" >> /usr/local/bin/maintenance.sh

Você pode verificar se seu payload foi adicionado com sucesso lendo o final do arquivo usando o comando tail.

tail -n 2 /usr/local/bin/maintenance.sh

Saída:

echo "Maintenance run at $(date)" >> /var/log/maintenance.log
id > /home/labex/project/cron_pwned.txt

Aguardar a Execução da Tarefa do Root

Nesta etapa, você aguardará o cron job executar seu payload injetado.

O cron job é executado uma vez a cada minuto. Quando ele for executado, ele processará o comando id como root e salvará a saída em ~/project/cron_pwned.txt.

Aguarde até 60 segundos e, em seguida, leia o arquivo de prova:

cat /home/labex/project/cron_pwned.txt

Se o exploit funcionou corretamente, você verá uma saída semelhante a esta:

uid=0(root) gid=0(root) groups=0(root)

Parabéns. Você sequestrou com sucesso um cron job para executar comandos como root.

Resumo

Neste laboratório, você aprendeu como identificar e explorar tarefas de manutenção do sistema mal protegidas para elevar privilégios em um ambiente Linux. Você começou enumerando cron jobs de todo o sistema para encontrar tarefas executadas como usuário root. Em seguida, investigou o script alvo e descobriu que ele possuía permissões de arquivo fracas, permitindo que qualquer usuário o modificasse. Ao injetar um payload no script gravável, você sequestrou com sucesso o processo automatizado e obteve privilégios de root. Este exercício destaca a importância crítica do gerenciamento adequado de permissões de arquivo, especialmente para scripts executados por processos automatizados privilegiados.