Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2024 Paulo Masson (PaulMass)

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
96 changes: 96 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# Segurança do Toolkit de Pentest

## ⚠️ Avisos Legais e de Segurança

### Uso Responsável
Este toolkit é projetado para **testes de segurança autorizados** em ambientes controlados. O uso não autorizado para acessar sistemas, redes ou dados sem permissão explícita é **ilegal** e viola:

- Leis de privacidade e proteção de dados
- Leis de acesso não autorizado a sistemas computacionais
- Termos de serviço de provedores de internet

### Requisitos Legais
- **Sempre obtenha autorização escrita** antes de testar qualquer sistema
- **Teste apenas sistemas que você possui ou tem permissão para testar**
- **Respeite todas as leis locais, estaduais e federais**

## 🔒 Melhores Práticas de Segurança

### Ao Usar Este Toolkit

1. **Ambiente Controlado**: Execute testes apenas em redes isoladas ou ambientes de laboratório
2. **Permissões Mínimas**: Use o princípio do menor privilégio - execute com privilégios mínimos necessários
3. **Registro de Atividades**: Mantenha registros de todas as atividades de teste para auditoria
4. **Proteção de Dados**: Não armazene ou compartilhe dados sensíveis capturados durante os testes

### Proteções Implementadas

Este toolkit inclui as seguintes proteções:

- **Validação de Entrada**: Todos os parâmetros são validados antes do processamento
- **Limitação de Dados**: Exibição limitada de dados capturados para evitar exposição acidental
- **Avisos de Segurança**: Mensagens claras sobre requisitos de permissão e implicações legais
- **Tratamento de Erros**: Manipulação robusta de erros para evitar vazamento de informações

### Vulnerabilidades Conhecidas e Mitigações

| Componente | Risco | Mitigação |
|------------|-------|------------|
| ARP Scan | Requer privilégios de root | Aviso claro sobre requisitos de permissão |
| Port Scan | Pode ser detectado como ataque | Limitação de taxa (--max-rate) |
| Sniffer | Captura dados sensíveis | Limitação de exibição de dados |
| Whois/DNS | Consulta serviços externos | Validação de domínio |

## 🛡️ Configurações Recomendadas

### Para Ambientes de Produção

1. **Desative funcionalidades não necessárias**
2. **Implemente autenticação** para acesso ao toolkit
3. **Use redes isoladas** para testes
4. **Monitore atividades** com ferramentas de logging

### Para Desenvolvimento

1. **Teste em ambiente sandbox**
2. **Use dados fictícios** para testes
3. **Revise o código** regularmente para vulnerabilidades

## 📋 Checklist de Segurança

Antes de usar este toolkit:

- [ ] Tenho autorização escrita para testar o alvo
- [ ] O alvo está em um ambiente controlado
- [ ] Estou ciente das leis aplicáveis
- [ ] Tenho permissão para capturar e analisar o tráfego
- [ ] Os dados capturados serão protegidos adequadamente
- [ ] Os resultados serão usados apenas para fins legítimos

## 🚨 O Que NÃO Fazer

- ❌ NÃO teste sistemas sem autorização
- ❌ NÃO capture tráfego em redes públicas
- ❌ NÃO armazene dados sensíveis sem proteção
- ❌ NÃO compartilhe resultados com terceiros não autorizados
- ❌ NÃO use este toolkit para atividades maliciosas

## 📞 Reportando Problemas de Segurança

Se você encontrar vulnerabilidades neste toolkit, por favor:

1. **NÃO divulgue publicamente** até que uma correção esteja disponível
2. Contate o mantenedor do projeto de forma privada
3. Forneça detalhes suficientes para reproduzir o problema
4. Dê tempo razoável para correção antes da divulgação

## 📜 Licença e Responsabilidade

Este software é fornecido "COMO ESTÁ", sem garantias de qualquer tipo. Os autores não se responsabilizam por:

- Uso indevido do software
- Danos causados pelo uso do software
- Violações de leis resultantes do uso do software
- Qualquer consequência do uso não autorizado

O usuário assume toda a responsabilidade pelo uso deste toolkit.
115 changes: 111 additions & 4 deletions info_analysis.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,98 @@
import hashlib
import os
import socket
import whois
import requests
from colorama import Fore, Style
from urllib.parse import urlparse


def validate_file_path(file_path):
"""
Valida se o caminho do arquivo é seguro e existe.

Args:
file_path (str): Caminho do arquivo

Returns:
tuple: (bool, str) - (True, path) se válido, (False, mensagem_de_erro) caso contrário
"""
# Verificar se o caminho é absoluto e tentará acessar fora da árvore de diretórios
if os.path.isabs(file_path):
# Permitir apenas arquivos no diretório de trabalho atual ou subdiretórios
current_dir = os.path.abspath(os.getcwd())
file_dir = os.path.abspath(os.path.dirname(file_path))
if not file_dir.startswith(current_dir):
return False, f"Caminho absoluto fora do diretório de trabalho não é permitido: {file_path}"

# Verificar se o arquivo existe
if not os.path.exists(file_path):
return False, f"Arquivo não encontrado: {file_path}"

# Verificar se é um arquivo (não um diretório)
if not os.path.isfile(file_path):
return False, f"Caminho não é um arquivo: {file_path}"

# Verificar permissões de leitura
if not os.access(file_path, os.R_OK):
return False, f"Sem permissão de leitura para o arquivo: {file_path}"

return True, file_path


def validate_domain(domain):
"""
Valida se o domínio é seguro para consulta.

Args:
domain (str): Domínio a ser validado

Returns:
bool: True se válido, False caso contrário
"""
# Remover protocolos se presentes
domain = domain.replace('http://', '').replace('https://', '').replace('www.', '')

# Padrao para domínio válido
domain_pattern = r'^[a-zA-Z0-9\-]+(\.[a-zA-Z0-9\-]+)*$'

if not domain_pattern.match(domain):
return False

# Verificar se o domínio não é um IP (para whois)
ip_pattern = r'^(\d{1,3}\.){3}\d{1,3}$'
if ip_pattern.match(domain):
return False

return True


def calculate_file_hash(file_path, algorithm='sha256'):
"""
Calcula o hash de um arquivo usando o algoritmo especificado.

Args:
file_path (str): Caminho para o arquivo
algorithm (str): Algoritmo de hash (md5, sha1, sha256, sha512)

Returns:
str: Hash do arquivo ou None em caso de erro
"""
print(f"{Fore.CYAN}Calculando o hash {algorithm.upper()} para {file_path}...{Style.RESET_ALL}")

# Validar algoritmo
valid_algorithms = ['md5', 'sha1', 'sha256', 'sha512']
if algorithm.lower() not in valid_algorithms:
print(f"{Fore.RED}Erro: Algoritmo não suportado. Use: {', '.join(valid_algorithms)}{Style.RESET_ALL}")
return None

# Validar caminho do arquivo
is_valid, message = validate_file_path(file_path)
if not is_valid:
print(f"{Fore.RED}{message}{Style.RESET_ALL}")
return None

try:
if not os.path.exists(file_path):
print(f"{Fore.RED}Erro: Arquivo não encontrado em {file_path}{Style.RESET_ALL}")
return None

hash_func = hashlib.new(algorithm)
with open(file_path, 'rb') as f:
# Lê o arquivo em blocos para lidar com arquivos grandes
Expand All @@ -28,15 +107,29 @@ def calculate_file_hash(file_path, algorithm='sha256'):
print(f"{Fore.RED}Ocorreu um erro ao calcular o hash: {e}{Style.RESET_ALL}")
return None


# Nota: A extração de metadados de arquivos (como PDF, DOCX, Imagens) geralmente requer bibliotecas específicas (ex: PIL, exifread, python-docx, PyPDF2).
# Para manter o escopo inicial e evitar muitas dependências, focaremos no hash e Whois.
# Uma função de metadados básica pode ser adicionada posteriormente.


def whois_lookup(domain):
"""
Realiza uma consulta Whois para um domínio.

Args:
domain (str): Domínio alvo (ex: google.com)

Returns:
whois.parser.WhoisEntry: Objeto com informações Whois ou None em caso de erro
"""
print(f"{Fore.CYAN}Realizando consulta Whois para {domain}...{Style.RESET_ALL}")

# Validar domínio
if not validate_domain(domain):
print(f"{Fore.RED}Erro: Domínio inválido para consulta Whois: {domain}{Style.RESET_ALL}")
return None

try:
w = whois.whois(domain)
print(f"{Fore.GREEN}Consulta Whois concluída.{Style.RESET_ALL}")
Expand All @@ -46,11 +139,24 @@ def whois_lookup(domain):
print(f"{Fore.RED}Ocorreu um erro durante a consulta Whois: {e}{Style.RESET_ALL}")
return None


def dns_lookup(domain):
"""
Realiza uma consulta DNS básica para obter o endereço IP.

Args:
domain (str): Domínio alvo (ex: github.com)

Returns:
str: Endereço IP ou None em caso de erro
"""
print(f"{Fore.CYAN}Realizando consulta DNS para {domain}...{Style.RESET_ALL}")

# Validar domínio
if not validate_domain(domain):
print(f"{Fore.RED}Erro: Domínio inválido para consulta DNS: {domain}{Style.RESET_ALL}")
return None

try:
ip_address = socket.gethostbyname(domain)
print(f"{Fore.GREEN}Consulta DNS concluída. IP: {ip_address}{Style.RESET_ALL}")
Expand All @@ -62,6 +168,7 @@ def dns_lookup(domain):
print(f"{Fore.RED}Ocorreu um erro durante a consulta DNS: {e}{Style.RESET_ALL}")
return None


if __name__ == '__main__':
# Exemplo de uso
# Criar um arquivo de teste
Expand Down
8 changes: 4 additions & 4 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,10 @@ def print_banner():
banner = f"""
{Fore.RED}
____ _ _ ____ _____ _____ _____ _ _ _____ _____
| _ \| \ | | _ \| ____| ____|_ _| \ | | ____|_ _|
| |_) | \| | |_) | _| | _| | | | \| | _| | |
| __/| |\ | _ <| |___| |___ | | | |\ | |___ | |
|_| |_| \_|_| \_\_____|_____| |_| |_| \_|_____| |_|
| _ \\ | \\ | | _ \\| ____| ____|_ _| \\ | | ____|_ _|
| |_) | \\| | |_) | _| | _| | | | \\| | _| | |
| __/| |\\ | _ <| |___| |___ | | | |\\ | |___ | |
|_| |_| \\_|_| \\_\\_____|_____| |_| |_| \\_|_____| |_|
{Style.RESET_ALL}
{Fore.GREEN} Toolkit de Pentest em Python - Manus AI{Style.RESET_ALL}
"""
Expand Down
Loading