Skip to content

moreirawebmaster/engine-security

Repository files navigation

🛡️ Engine Security

CI/CD Pipeline codecov Pub Version Pana Score License Platform

Sistema avançado de detecção de segurança para aplicações Flutter focado em Android e iOS

📋 Índice

🚀 Recursos

  • 100% de Cobertura de Testes - Todos os componentes testados
  • 🎯 Pontuação Pana 100/100 - Qualidade máxima no pub.dev
  • 🔄 CI/CD Automatizado - Pipeline completo com GitHub Actions
  • 📱 Android & iOS Exclusivo - Otimizado para dispositivos móveis
  • 🛡️ 6 Detectores Especializados - Frida, Root/Jailbreak, HTTPS Pinning, GPS Fake, Emulator, Debugger
  • Detecção Assíncrona - Performance otimizada
  • 🎨 API Intuitiva - Fácil integração e uso
  • 📊 Sistema de Confiança - Níveis de confiança calibrados
  • 🔒 Zero Dependências Externas - Seguro e leve

📦 Instalação

Adicione ao seu pubspec.yaml:

dependencies: engine_security: ^1.2.0

Execute:

flutter pub get

⚡ Uso Rápido

import 'package:engine_security/engine_security.dart'; void main() async { // Detectar Frida final fridaDetector = EngineFridaDetector(); final fridaResult = await fridaDetector.performCheck(); if (!fridaResult.isSecure) { print('⚠️ Frida detectado: ${fridaResult.details}'); print('🎯 Confiança: ${fridaResult.confidence}'); } // Detectar Root/Jailbreak final rootDetector = EngineRootDetector(); final rootResult = await rootDetector.performCheck(); if (!rootResult.isSecure) { print('⚠️ Device comprometido: ${rootResult.details}'); } // Verificação completa await performFullSecurityCheck(); } Future<void> performFullSecurityCheck() async { final detectors = [ EngineFridaDetector(), EngineRootDetector(), EngineHttpsPinningDetector(), EngineGpsFakeDetector(), EngineEmulatorDetector(), EngineDebuggerDetector(), ]; print('🔍 Executando verificação completa de segurança...\n'); for (final detector in detectors) { if (detector.isAvailable) { final result = await detector.performCheck(); final status = result.isSecure ? '✅' : '❌'; print('$status ${detector.detectorName}'); print(' Confiança: ${(result.confidence * 100).toStringAsFixed(1)}%'); print(' Detalhes: ${result.details ?? 'N/A'}'); print(''); } } }

🛡️ Detectores Disponíveis

1. 🔴 Frida Detector (EngineFridaDetector)

  • Ameaça: EngineSecurityThreatType.frida
  • Severidade: 9/10
  • Confiança: 95%
  • Métodos: Detecção de processos, bibliotecas e portas
  • Plataformas: Android ✅ | iOS ✅

2. 🔑 Root/Jailbreak Detector (EngineRootDetector)

  • Ameaça: EngineSecurityThreatType.rootJailbreak
  • Severidade: 8/10
  • Confiança: 90%
  • Métodos: Arquivos de sistema, apps instalados, permissões
  • Plataformas: Android ✅ | iOS ✅

3. 🔒 HTTPS Certificate Pinning Detector (EngineHttpsPinningDetector)

  • Ameaça: EngineSecurityThreatType.httpsPinning
  • Severidade: 8/10
  • Confiança: 95%
  • Métodos: Validação de certificados SSL/TLS, fingerprints SHA-256
  • Plataformas: Android ✅ | iOS ✅

4. 🗺️ GPS Fake Detector (EngineGpsFakeDetector)

  • Ameaça: EngineSecurityThreatType.gpsFake
  • Severidade: 7/10
  • Confiança: 90%
  • Métodos: Mock location, apps falsos, consistência GPS
  • Plataformas: Android ✅ | iOS ✅

5. 📱 Emulator Detector (EngineEmulatorDetector)

  • Ameaça: EngineSecurityThreatType.emulator
  • Severidade: 6/10
  • Confiança: 85%
  • Métodos: Hardware, sensores, características do sistema
  • Plataformas: Android ✅ | iOS ✅

6. 🐛 Debugger Detector (EngineDebuggerDetector)

  • Ameaça: EngineSecurityThreatType.debugger
  • Severidade: 2/10
  • Confiança: 85%
  • Métodos: Processos de debug, timing attacks
  • Plataformas: Android ✅ | iOS ✅

🔒 HTTPS Certificate Pinning

O Engine Security inclui um sistema robusto de certificate pinning que protege contra ataques man-in-the-middle e interceptação de tráfego.

Configuração Básica

import 'package:engine_security/engine_security.dart'; import 'dart:io'; void setupCertificatePinning() { // Configurar pins para diferentes domínios final pins = [ EngineCertificatePinModel( hostname: 'api.example.com', pins: [ 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=', // SHA-256 em base64 '0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef', // SHA-256 em hex ], includeSubdomains: true, enforcePinning: true, ), EngineCertificatePinModel( hostname: 'stmr.tech', pins: [ '17a8d38a1f559246194bccae62a794ff80d419e849fa78811a4910d7283c1f75', // SHA-256 fingerprint real ], includeSubdomains: true, enforcePinning: true, ), ]; // Configurar HttpOverrides global final httpOverrides = EngineSecurityHttpOverrides( pinnedCertificates: pins, onPinningValidation: (hostname, isValid, error) { print('Validação de pin para $hostname: ${isValid ? 'OK' : 'FALHA'}'); if (error != null) print('Erro: $error'); }, ); HttpOverrides.global = httpOverrides; }

Detector de Certificate Pinning

Future<void> checkCertificatePinning() async { final detector = EngineHttpsPinningDetector( enabled: true, pinnedCertificates: [ EngineCertificatePinModel( hostname: 'stmr.tech', pins: ['17a8d38a1f559246194bccae62a794ff80d419e849fa78811a4910d7283c1f75'], includeSubdomains: true, ), ], testConnectivity: false, strictMode: false, // true = só valida pins existentes ); final result = await detector.performCheck(); if (!result.isSecure) { print('Certificate pinning não está configurado!'); print('Detalhes: ${result.details}'); } else { print('Certificate pinning configurado corretamente!'); print('Sites protegidos: ${result.details}'); } }

Obtendo Fingerprints de Certificados

Método 1: Usando Engine Security (Automático)

// Obter o fingerprint diretamente do servidor ativo final pinModel = await EngineHttpsPinningDetector.createPinFromLiveHost('stmr.tech'); print('Fingerprints obtidos: ${pinModel?.pins}');

Método 2: OpenSSL

echo | openssl s_client -connect stmr.tech:443 2>/dev/null | openssl x509 -fingerprint -sha256 -noout

Método 3: Chrome DevTools

  1. Abra o site no Chrome
  2. F12 → Security → View Certificate
  3. Copie o SHA-256 fingerprint

Método 4: A partir de arquivo

// Se você tem um arquivo .crt ou .pem final pinModel = await EngineHttpsPinningDetector.createPinFromCertificateFile( 'api.example.com', '/path/to/certificate.crt', );

Método 5: Hash conhecido

// Se você já tem o hash SHA-256 final pinModel = EngineHttpsPinningDetector.createPinFromHash( 'stmr.tech', '17a8d38a1f559246194bccae62a794ff80d419e849fa78811a4910d7283c1f75', );

🗺️ GPS Fake Detection

O EngineGpsFakeDetector utiliza múltiplas técnicas para detectar manipulação de GPS:

Técnicas de Detecção

1. 🔧 Verificação de Mock Location (Android)

  • Detecta se as "opções de desenvolvedor" têm mock location habilitado
  • Verifica configurações do sistema Android

2. 📱 Detecção de Apps de GPS Fake

  • Verifica instalação de mais de 25 apps conhecidos de GPS fake
  • Lista atualizada dos principais apps de spoofing de localização

3. 📊 Análise de Confiabilidade da Fonte

  • Verifica precisão suspeita do GPS (< 100m pode indicar fake)
  • Detecta valores impossíveis (altitude e velocidade zero)

4. 🔄 Verificação de Consistência GPS

  • Analisa movimento impossível entre leituras GPS
  • Detecta "teletransporte" (distância > 1km em < 10s)

5. 🔐 Análise de Permissões

  • Verifica interferência em permissões de localização
  • Detecta desabilitação suspeita de serviços de localização

Exemplo de Uso

import 'package:engine_security/engine_security.dart'; Future<void> checkGPSFake() async { final gpsDetector = EngineGpsFakeDetector(); // Verificação básica final result = await gpsDetector.performCheck(); if (!result.isSecure) { print('⚠️ GPS Fake detectado!'); print('📍 Detalhes: ${result.details}'); print('🔍 Método: ${result.detectionMethod}'); print('🎯 Confiança: ${(result.confidence * 100).toStringAsFixed(1)}%'); } else { print('✅ GPS é confiável'); } }

📊 Modelos de Dados

EngineSecurityCheckModel

class EngineSecurityCheckModel { final bool isSecure; final EngineSecurityThreatType threatType; final double confidence; final String? details; final String? detectionMethod; final DateTime? timestamp; EngineSecurityCheckModel.secure({...}); EngineSecurityCheckModel.threat({required EngineSecurityThreatType threatType, ...}); }

EngineDetectorInfoModel

class EngineDetectorInfoModel { final String name; final EngineSecurityThreatType threatType; final bool enabled; final String platform; }

EngineCertificatePinModel

class EngineCertificatePinModel { final String hostname; final List<String> pins; // SHA-256 em base64 ou hexadecimal final bool includeSubdomains; final bool enforcePinning; // Métodos de validação bool isValidPinFormat(String pin); bool matchesHostname(String host); }

EngineSecurityThreatType

enum EngineSecurityThreatType { unknown, // Severidade: 5 frida, // Severidade: 9 rootJailbreak, // Severidade: 8 httpsPinning, // Severidade: 8 gpsFake, // Severidade: 7 emulator, // Severidade: 6 debugger, // Severidade: 2 }

🔧 Interface

IEngineSecurityDetector

abstract class IEngineSecurityDetector { EngineSecurityThreatType get threatType; String get detectorName; Future<EngineSecurityCheckModel> performCheck(); bool get isAvailable; EngineDetectorInfoModel get detectorInfo; }

📱 Exemplos

Execute o exemplo interativo:

cd demo/security_demo flutter run

Implementação Personalizada

class MySecurityManager { final List<IEngineSecurityDetector> _detectors = [ EngineFridaDetector(), EngineRootDetector(), EngineHttpsPinningDetector(), EngineGpsFakeDetector(), EngineEmulatorDetector(), EngineDebuggerDetector(), ]; Future<List<EngineSecurityCheckModel>> scanAllThreats() async { final results = <EngineSecurityCheckModel>[]; for (final detector in _detectors) { if (detector.isAvailable) { try { final result = await detector.performCheck(); results.add(result); } catch (e) { results.add(EngineSecurityCheckModel.threat( threatType: detector.threatType, details: 'Erro na detecção: $e', confidence: 0.5, )); } } } return results; } Future<bool> isDeviceSecure({double minimumConfidence = 0.8}) async { final results = await scanAllThreats(); for (final result in results) { if (!result.isSecure && result.confidence >= minimumConfidence) { return false; } } return true; } }

🔧 Desenvolvimento

Estrutura do Projeto

lib/ ├── engine_security.dart # Ponto de entrada principal └── src/ ├── src.dart # Exportações centralizadas ├── detectors/ # Detectores de segurança │ ├── i_engine_security_detector.dart # Interface base │ ├── engine_frida_detector.dart # Detector Frida │ ├── engine_root_detector.dart # Detector Root/Jailbreak │ ├── engine_https_pinning_detector.dart # Detector HTTPS Pinning │ ├── engine_gps_fake_detector.dart # Detector GPS Fake │ ├── engine_emulator_detector.dart # Detector Emulator │ └── engine_debugger_detector.dart # Detector Debugger ├── models/ # Modelos de dados │ ├── engine_security_check_model.dart # Modelo de resultado │ ├── engine_detector_info_model.dart # Informações do detector │ └── engine_certificate_pin_model.dart # Modelo de certificate pin ├── enums/ # Enumerações │ └── engine_security_threat_type.dart # Tipos de ameaças └── network/ # Componentes de rede └── engine_security_http_overrides.dart # HttpOverrides para pinning test/ ├── all_tests.dart # Suite completa de testes ├── models/ # Testes dos modelos ├── enums/ # Testes dos enums ├── interface/ # Testes da interface └── detectors/ # Testes dos detectores demo/ └── security_demo/ # App demonstrativo scripts/ ├── test_coverage.sh # Script de cobertura └── pana_analysis.sh # Script de análise Pana 

Scripts de Desenvolvimento

# Executar testes com cobertura ./scripts/test_coverage.sh # Análise de qualidade Pana ./scripts/pana_analysis.sh # Análise estática dart analyze # Formatação de código dart format . # Publicar (dry-run) dart pub publish --dry-run

Comandos de Qualidade

# Executar todos os testes flutter test # Testes com cobertura flutter test --coverage genhtml coverage/lcov.info -o coverage/html # Verificar cobertura mínima dart pub global activate test_coverage dart pub global run test_coverage --min-coverage=50 # Análise Pana dart pub global activate pana dart pub global run pana

🤝 Contribuição

Contribuições são bem-vindas! Por favor:

  1. Fork o projeto
  2. Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
  3. Commit suas mudanças (git commit -m 'Add some AmazingFeature')
  4. Push para a branch (git push origin feature/AmazingFeature)
  5. Abra um Pull Request

Diretrizes de Contribuição

  • Mantenha 100% de cobertura de testes
  • Siga o padrão de código existente
  • Documente novas funcionalidades
  • Teste em Android e iOS
  • Atualize o CHANGELOG.md

📄 Licença

Este projeto está licenciado sob a Licença MIT - veja o arquivo LICENSE para detalhes.


⚠️ Aviso de Segurança: Este pacote é uma ferramenta de detecção, não uma solução de segurança completa. Sempre implemente múltiplas camadas de segurança em suas aplicações.

Desenvolvido por: Thiago Moreira
Organização: STMR
Domínio: tech.stmr


⭐ Se este projeto te ajudou, considere dar uma estrela no repositório!

GitHub stars

🤝 Contribuições são sempre bem-vindas!

GitHub issues GitHub pull requests


📧 Contato: Email
🌐 Website: stmr.tech
🐦 Twitter: @moreirawebmaster

About

Sistema avançado de detecção de segurança para aplicações Flutter focado em Android e iOS

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors