Procura por arquivos com permissões erradas (SUID) ou kernels desatualizados.

Contexto

A Escalação de Privilégios ocorre quando exploramos falhas de configuração ou vulnerabilidades no sistema operacional para elevar nosso nível de permissão.

Este módulo foca em dois vetores principais no Linux:

  • Arquivos SUID (Set User ID): Arquivos que, quando executados, rodam com as permissões do proprietário (geralmente o Root). Se um binário como o find, vim ou bash tiver o bit SUID ativado indevidamente, ele pode ser usado para obter um shell de administrador.
  • Versão do Kernel: Kernels antigos possuem vulnerabilidades famosas (como Dirty COW ou PwnKit). O script identifica a versão para que o Pentester possa buscar o exploit correspondente.

Possibilidades de Implementação

  • Busca de Binários SUID: Utiliza o comando find do sistema ou percorre diretórios via Python para listar arquivos com a permissão 4000.
  • Checagem de Kernel: Lê o arquivo /proc/version ou executa uname -a para extrair a versão exata do sistema.
  • Escriturabilidade em Pastas Críticas: Verifica se o usuário atual pode escrever em arquivos sensíveis como /etc/passwd ou /etc/shadow.

Código

Este módulo utiliza a biblioteca os e subprocess para interagir com o sistema operacional e coletar dados de configuração.

import os
import subprocess

def check_kernel_version():
    """
    Coleta informações sobre a versão do Kernel e arquitetura.
    """
    print("[*] Verificando versão do Kernel...")
    try:
        kernel = subprocess.check_output("uname -a", shell=True).decode().strip()
        print(f"[+] Kernel Info: {kernel}")
    except Exception as e:
        print(f"[!] Não foi possível obter o kernel: {e}")

def find_suid_files():
    """
    Busca por arquivos com o bit SUID definido.
    """
    print("\n[*] Buscando por arquivos com permissão SUID...")
    print("[*] Isso pode levar alguns segundos...")

    # Comando find para buscar arquivos com permissão 4000 (SUID)
    # 2>/dev/null descarta erros de permissão negada durante a busca
    command = "find / -perm -4000 -type f 2>/dev/null | head -n 20"

    try:
        suid_files = subprocess.check_output(command, shell=True).decode().strip()
        if suid_files:
            print("[!] Binários SUID encontrados (Top 20):")
            print(suid_files)
        else:
            print("[-] Nenhum binário SUID incomum detectado.")
    except Exception:
        print("[!] Erro ao executar a busca por SUID.")

def check_writable_files():
    """
    Verifica se arquivos críticos são editáveis pelo usuário atual.
    """
    critical_files = ["/etc/passwd", "/etc/shadow", "/etc/sudoers"]
    print("\n[*] Verificando permissões em arquivos críticos...")

    for f in critical_files:
        if os.access(f, os.W_OK):
            print(f"[!!!] PERIGO: O arquivo {f} é EDITÁVEL por você!")
        else:
            print(f"[-] {f:12}: Apenas leitura ou sem acesso.")

def main():
    print("=" * 60)
    print("Módulo: Privilege Escalation Checker | Projeto: 30 Lessons")
    print("=" * 60)

    # Verifica se estamos em um sistema Linux
    if os.name != 'posix':
        print("[!] Este módulo foi desenhado para ambientes Linux/Unix.")
        return

    check_kernel_version()
    check_writable_files()
    find_suid_files()

    print("\n" + "=" * 60)
    print("[*] Auditoria de privilégios finalizada.")

if __name__ == "__main__":
    main()

Observações

  • TFOBins: Sempre que encontrar um binário SUID, você deve consultar o site GTFOBins. Ele lista comandos específicos para cada binário (como cp ou nmap) que permitem escalar o privilégio para Root.
  • Falsos Positivos: Nem todo arquivo SUID é uma falha; muitos (como o passwd) precisam dessa permissão para funcionar. O segredo é encontrar binários que permitem execução de comandos ou leitura de arquivos arbitrários.
  • Automatização Profissional: Este script é uma versão minimalista do famoso LinPEAS. Em seu projeto, destaque que a automação da enumeração interna economiza horas de trabalho manual em um exame de certificação como o OSCP.