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) ouuname -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
wmicno 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.