Extrai detalhes do hardware, OS e patches de segurança instalados.

Contexto

O objetivo deste módulo é realizar o levantamento de informações do sistema (Fingerprinting). Para um Software Architect ou Pentester, esses dados são fundamentais para:

  • Identificar Vetores de Exploração: Versões específicas de kernels ou sistemas operacionais podem ter vulnerabilidades conhecidas (CVEs).
  • Evadir Detecção: Saber se você está em uma Máquina Virtual (VM) ou em um "Sandbox" (ambiente controlado para enganar atacantes).
  • Planejar Persistência: Entender o hardware e os patches instalados ajuda a decidir qual tipo de malware ou script de persistência será mais eficaz.

Possibilidades de Implementação

  • Bibliotecas Nativas (platform, os, sys): Fornecem detalhes básicos como arquitetura (x64/x86), versão do Python e nome do host.
  • WMI (Windows Management Instrumentation): No Windows, permite extrair detalhes profundos como números de série, lista de patches (KBxxxxxx) e status do antivírus.
  • Comandos de Sistema: Executar systeminfo (Windows) ou uname -a (Linux) via Python para capturar a saída textual completa.

Código

Este módulo utiliza bibliotecas nativas para garantir portabilidade entre Windows e Linux, além de comandos específicos para listar patches de segurança.

import platform
import os
import subprocess
import sys

def get_security_patches():
    """
    Tenta listar patches de segurança instalados (Windows) ou atualizações (Linux).
    """
    print("[*] Verificando Patches de Segurança...")
    try:
        if platform.system() == "Windows":
            # Comando Windows para listar hotfixes
            output = subprocess.check_output("wmic qfe get Caption,Description,HotFixID,InstalledOn", shell=True).decode()
            return output
        else:
            # No Linux, verificamos o histórico do gerenciador de pacotes (exemplo Debian/Ubuntu)
            if os.path.exists("/var/log/apt/history.log"):
                return "Consulte /var/log/apt/history.log para histórico de patches."
            return "Comando de patches não implementado para este SO."
    except:
        return "Não foi possível recuperar patches."

def main():
    print("=" * 60)
    print("Módulo: System Info Gatherer | Projeto: 30 Lessons in Python")
    print("=" * 60)

    # Coleta de dados básicos
    info = {
        "Sistema Operacional": platform.system(),
        "Versão do OS": platform.version(),
        "Release": platform.release(),
        "Arquitetura": platform.machine(),
        "Hostname": platform.node(),
        "Processador": platform.processor(),
        "Versão Python": sys.version.split()[0]
    }

    for key, value in info.items():
        print(f"[*] {key:20}: {value}")

    print("-" * 60)

    # Coleta de patches (fator crítico para Penteasts)
    patches = get_security_patches()
    print(patches)

    print("\n" + "=" * 60)
    print("[*] Levantamento de informações concluído.")

if __name__ == "__main__":
    main()

Observações

  • Identificação de Sandbox: Muitos scripts avançados verificam o fabricante da BIOS ou o tamanho do disco rígido. Se o disco for menor que 60GB ou o fabricante for "VMware/VBOX", o script pode se autodestruir para evitar análise forense.
  • Privilégios: Alguns comandos do wmic no Windows ou acesso a certos logs no Linux exigem privilégios de administrador/root para retornar dados completos.
  • Utilidade para Arquitetos: Como Software Architect, você pode usar este módulo para criar um inventário automatizado de servidores e garantir que todos os nós de um cluster estejam com os patches em dia.