Google Processa Grupo Chinês que Vende Kits de Phishing: Como Proteger Sua Infraestrutura e Usuários
Olá HaWkers, uma notícia significativa surgiu recentemente: Google abriu ação judicial contra um grupo chinês organizado que está comercializando kits de phishing sofisticados através da dark web e plataformas clandestinas.
Este não é um crime isolado — é a operação de um cartel altamente organizado que vende infrastructure-as-a-service para ataques de phishing, com centenas de clientes ativos pagando por acesso a templates, servidores e ferramentas de automação.
Para nós desenvolvedores e DevOps engineers, essa notícia é um alerta crítico sobre os riscos atuais de infraestrutura. Vamos destrinchar como esses ataques funcionam, como detectá-los, e implementar defesas reais em nossas aplicações.
O Que É o Grupo e Como Opera
Escala da Operação
Dados revelados pela Google:
- Período de operação: 2018-2025 (7 anos ativo)
- Clientes pagantes: 800+ grupos criminosos registrados
- Ataques executados: ~50.000+ por mês
- Targets: Empresas Fortune 500, governo, academia
- Faturamento estimado: $2-5 milhões/mês
Modelo de Negócio Criminal
Funciona como um Phishing-as-a-Service (PaaS) legítimo:
Serviços oferecidos:
Templates prontos:
- Clones exatos de páginas Gmail, Outlook, AWS, GitHub
- Atualizados automaticamente a cada mudança nos serviços reais
- Landing pages com detection evasion
Infrastructure:
- Hosting em servidores comprometidos
- CDN para distribuição global
- Rotação automática de URLs para evitar detecção
Ferramentas de automação:
- Mass email dispatchers
- SMS phishing (smishing)
- Voice phishing (vishing) com IA
- QR code phishing
Evasão de segurança:
- Bypass de 2FA
- Credential harvesters avançados
- Session hijacking tools
Analytics em tempo real:
- Dashboard mostrando taxa de clique
- Captura de credenciais coletadas
- Geolocalização de vítimas
Pricing:
Serviço de Phishing à la carte:
Starter Pack: $50
- 10.000 emails
- 1 template customizado
- 30 dias de hosting
Professional: $200
- 100.000 emails
- 5 templates
- Evasão de 2FA
- 90 dias de hosting
Enterprise: $500/mês
- Unlimited emails
- Acesso a 50+ templates
- Suporte técnico 24/7
- Infrastructure customizadaComo Funcionam os Ataques
Fluxo de Ataque Típico
1. Reconnaissance (Coleta de informações)
Estágio 1: Identificar alvo
1. Coletar nomes de funcionários (LinkedIn, GitHub)
2. Mapear domínios da empresa
3. Identificar ferramentas usadas (AWS, GitHub, Slack)
4. Encontrar padrões de email
5. Detectar sistemas de autenticação (2FA, SSO)
Resultado: Lista de 500+ funcionários + metadata2. Crafting (Preparação do ataque)
Estágio 2: Criar email convincente
Template utilizado: Clone de "AWS Security Alert"
Corpo do email:
From: aws-security@amazon-verify.com ❌
Subject: "⚠️ URGENT: Suspicious Activity Detected"
Caros Cliente,
Detectamos login suspeito em sua conta AWS:
- IP: 203.0.113.5 (China)
- Hora: 2025-11-16 14:32 UTC
- Recurso: S3 access
👉 Verificar Atividade: [PHISHING_LINK]
Se não foi você, resetar senha agora!
---
AWS Security TeamPor que é convincente:
- Email parece vir de domínio Amazon legítimo (typosquatting)
- Urgência artificial ("atividade suspeita")
- Autoridade falsa ("AWS Security Team")
- Call-to-action imediato ("clique agora")
- Prova social ("detectamos...")
3. Delivery (Envio em massa)
Estágio 3: Enviar para 100.000 funcionários
Técnicas de evasão:
✓ Spaced emails (1 por minuto, não em burst)
✓ Rotating IPs (diferentes servidores para cada email)
✓ Custom headers (SPF/DKIM forjados)
✓ Image-only content (evita spam filters)
✓ JavaScript no corpo (verifica se é humano)
Taxa esperada:
- Delivered: 60-70%
- Opened: 20-30%
- Clicou no link: 8-15%
- Inseriu credenciais: 3-5%
Para 100.000 emails = ~3.000-5.000 credenciais roubadas
4. Harvesting (Coleta de dados)
Estágio 4: Roubar credenciais
Usuário clica → Landing page falsa → Inseriu email + senha
Página captura:
- Email/username
- Senha
- 2FA code (se digitado)
- Session cookies
- IP do usuário
- User agent
- Timezone
- Linguagem do navegador
Resultado: Credenciais ativas em tempo real5. Access (Comprometimento de conta)
Estágio 5: Usar credenciais roubadas
Tempo decorrido: 15 minutos desde envio
1. Login com credenciais roubadas
2. Se 2FA está habilitado:
- Usar código capturado (valido por 30 segundos)
- OU fazer login antes de vítima notar
3. Uma vez dentro:
- Desabilitar 2FA
- Criar backdoor/chave SSH
- Acessar dados sensíveis
- Movimentar lateralmente na redeDetecção e Prevenção Técnica
1. Detecção em Nível de Email
// Sistema de detecção avançada de phishing para Node.js
import emailValidator from 'email-validator';
import dns from 'dns';
import Anthropic from '@anthropic-ai/sdk';
class PhishingDetector {
constructor() {
this.client = new Anthropic();
this.suspiciousPatterns = [
/verify.*account/i,
/urgent.*action/i,
/confirm.*identity/i,
/update.*payment/i,
/security.*alert/i,
/unusual.*activity/i,
/click.*link.*now/i,
/reset.*password/i
];
}
// Verificar domínio remetente vs SPF/DKIM
async validateEmailAuthentication(sender, domain) {
return new Promise((resolve, reject) => {
dns.resolveMx(domain, (err, addresses) => {
if (err) {
resolve({
valid: false,
reason: 'SPF failed - invalid domain'
});
return;
}
// Verificar SPF records
dns.resolveTxt(domain, (err, records) => {
if (!records) {
resolve({
valid: false,
reason: 'No SPF record found'
});
return;
}
const hasSpf = records.some(r => r.join('').includes('v=spf1'));
resolve({
valid: hasSpf,
reason: hasSpf ? 'SPF verified' : 'SPF missing'
});
});
});
});
}
// Analisar corpo do email com Claude AI
async analyzeEmailContent(subject, body, sender) {
const suspiciousKeywords = this.suspiciousPatterns.filter(p =>
p.test(subject) || p.test(body)
).length;
const response = await this.client.messages.create({
model: 'claude-3-5-sonnet-20241022',
max_tokens: 256,
system: `You are a phishing detection expert. Analyze the email and determine:
1. Legitimacy score (0-100, 0=definitely phishing, 100=definitely legitimate)
2. Threat level (low, medium, high, critical)
3. Key suspicious indicators
4. Recommended action
Respond as JSON.`,
messages: [{
role: 'user',
content: `Analyze this email:
From: ${sender}
Subject: ${subject}
Body:
${body}
Is this phishing?`
}]
});
let analysis;
try {
analysis = JSON.parse(
response.content[0].type === 'text'
? response.content[0].text
: '{}'
);
} catch (e) {
analysis = { legitimacy_score: 50, threat_level: 'medium' };
}
return {
suspiciousKeywords,
aiAnalysis: analysis,
shouldBlock: (analysis.legitimacy_score || 100) < 40
};
}
// Verificar links no email
async analyzeLinks(body) {
const urlRegex = /https?:\/\/[^\s<>]+/g;
const links = body.match(urlRegex) || [];
const analyzed = await Promise.all(
links.map(async (link) => {
try {
const url = new URL(link);
// Verificar se domínio é similar ao esperado
const isSuspicious =
url.hostname !== 'aws.amazon.com' &&
url.hostname.includes('amazon') &&
url.hostname !== url.origin; // Typosquatting
return {
url,
suspicious: isSuspicious,
reason: isSuspicious
? 'Domain typosquatting detected'
: 'Domain looks legitimate'
};
} catch (e) {
return {
url: link,
suspicious: true,
reason: 'Invalid URL format'
};
}
})
);
return analyzed.filter(l => l.suspicious);
}
// Função principal de detecção
async detect(email) {
const {
sender,
subject,
body,
replyTo
} = email;
const [authCheck, contentAnalysis, linkAnalysis] = await Promise.all([
this.validateEmailAuthentication(sender, new URL(`mailto:${sender}`).hostname),
this.analyzeEmailContent(subject, body, sender),
this.analyzeLinks(body)
]);
const riskScore =
(authCheck.valid ? 0 : 30) +
(contentAnalysis.suspiciousKeywords * 5) +
(contentAnalysis.aiAnalysis.legitimacy_score < 40 ? 40 : 0) +
(linkAnalysis.length > 0 ? 30 : 0);
return {
isPhishing: riskScore > 60,
riskScore,
threats: {
authenticationFailed: !authCheck.valid,
suspiciousContent: contentAnalysis.shouldBlock,
phishingLinks: linkAnalysis.length > 0
},
recommendation: riskScore > 80
? 'BLOCK - High confidence phishing'
: riskScore > 60
? 'QUARANTINE - Suspicious email'
: 'ALLOW - Low risk'
};
}
}
// Uso em API de segurança
const detector = new PhishingDetector();
// No seu servidor de email
app.post('/api/security/email-check', async (req, res) => {
const email = req.body;
const result = await detector.detect(email);
if (result.isPhishing) {
// Quarantine email
await quarantineEmail(email.id);
// Notificar usuário
await notifyUser(email.recipient, 'Phishing attempt blocked');
}
res.json(result);
});
2. Proteção em Nível de Aplicação
// Middleware de proteção contra credential harvesting
import rateLimit from 'express-rate-limit';
import helmet from 'helmet';
// Rate limiting para login
const loginAttempts = new Map();
const protectLogin = rateLimit({
store: new Map(),
windowMs: 5 * 60 * 1000, // 5 minutos
max: 5, // 5 tentativas máximo
message: 'Muitas tentativas de login. Tente novamente em 5 minutos.',
standardHeaders: true,
legacyHeaders: false,
skip: (req) => {
// Não aplicar rate limit para IPs conhecidas (office, VPN)
const whitelistedIPs = process.env.WHITELIST_IPS?.split(',') || [];
return whitelistedIPs.includes(req.ip);
}
});
// Validar credenciais
const validateLoginAttempt = async (req, res, next) => {
const { email, password } = req.body;
// Verificar se está usando HTTPS
if (req.protocol !== 'https') {
return res.status(403).json({
error: 'HTTPS required',
message: 'Por razões de segurança, login deve ser via HTTPS'
});
}
// Verificar se email existe (lentamente, para não revelar)
const user = await User.findByEmail(email);
if (!user) {
// Simular delay para dificultar enumeração de usuários
await new Promise(resolve => setTimeout(resolve, Math.random() * 2000));
return res.status(401).json({ error: 'Invalid credentials' });
}
// Verificar senha
const isValid = await user.verifyPassword(password);
if (!isValid) {
// Log attempt
await LogSuspiciousActivity.create({
userId: user.id,
type: 'FAILED_LOGIN',
ip: req.ip,
userAgent: req.get('user-agent'),
timestamp: new Date()
});
return res.status(401).json({ error: 'Invalid credentials' });
}
// Login bem-sucedido
next();
};
// Rotas de login
app.post('/auth/login', protectLogin, validateLoginAttempt, async (req, res) => {
const { email } = req.body;
const user = await User.findByEmail(email);
// Gerar session segura
const session = await createSecureSession(user, {
ipAddress: req.ip,
userAgent: req.get('user-agent'),
timestamp: new Date(),
expiresIn: 30 * 60 * 1000 // 30 minutos
});
// Usar secure, httpOnly cookies
res.cookie('sessionId', session.id, {
secure: true,
httpOnly: true,
sameSite: 'strict',
maxAge: 30 * 60 * 1000
});
res.json({
success: true,
requiresMFA: user.mfaEnabled,
user: {
id: user.id,
email: user.email
}
});
});
3. Detecção de Anomalias em Nível de Infraestrutura
// Sistema de detecção de anomalias com machine learning
import tf from '@tensorflow/tfjs';
class AnomalyDetector {
constructor() {
this.model = null;
this.normalBehavior = {
avgLoginTime: 9, // 9 AM
avgDayOfWeek: 3, // Wednesday
commonCountries: ['BR', 'US'],
commonDevices: [],
avgSessionLength: 2400 // 40 minutos
};
}
// Treinar modelo com histórico de login
async train(historicalLogins) {
const features = historicalLogins.map(login => [
login.hour,
login.dayOfWeek,
this.countryToNumber(login.country),
login.deviceAge,
login.sessionLength
]);
const xs = tf.tensor2d(features);
const ys = tf.ones([features.length, 1]);
this.model = tf.sequential({
layers: [
tf.layers.dense({
inputShape: [5],
units: 16,
activation: 'relu'
}),
tf.layers.dense({
units: 8,
activation: 'relu'
}),
tf.layers.dense({
units: 1,
activation: 'sigmoid'
})
]
});
this.model.compile({
optimizer: 'adam',
loss: 'meanSquaredError'
});
await this.model.fit(xs, ys, {
epochs: 50,
batchSize: 32,
verbose: 0
});
}
// Detectar login anômalo
async detectAnomaly(loginAttempt) {
const features = tf.tensor2d([[
loginAttempt.hour,
loginAttempt.dayOfWeek,
this.countryToNumber(loginAttempt.country),
loginAttempt.deviceAge,
loginAttempt.sessionLength
]]);
const prediction = this.model.predict(features);
const anomalyScore = 1 - (await prediction.data())[0];
features.dispose();
prediction.dispose();
return {
isAnomaly: anomalyScore > 0.7,
anomalyScore: (anomalyScore * 100).toFixed(2) + '%',
factors: this.explainAnomaly(loginAttempt)
};
}
// Explicar o que é anômalo
explainAnomaly(login) {
const factors = [];
// Horário incomum
if (Math.abs(login.hour - this.normalBehavior.avgLoginTime) > 6) {
factors.push({
factor: 'Unusual time',
detail: `Login às ${login.hour}:00, usual: ${this.normalBehavior.avgLoginTime}:00`
});
}
// País incomum
if (!this.normalBehavior.commonCountries.includes(login.country)) {
factors.push({
factor: 'New country',
detail: `Login de ${login.country}, locais comuns: ${this.normalBehavior.commonCountries.join(', ')}`
});
}
// Dispositivo novo
if (login.deviceAge < 7) { // Menos de 7 dias
factors.push({
factor: 'New device',
detail: 'Dispositivo não visto antes'
});
}
return factors;
}
countryToNumber(country) {
const countryMap = {
'BR': 1,
'US': 2,
'CN': 3,
'RU': 4
};
return countryMap[country] || 0;
}
}
// Usar em middleware
app.post('/auth/login', async (req, res, next) => {
const loginAttempt = {
hour: new Date().getHours(),
dayOfWeek: new Date().getDay(),
country: req.geoip.country,
deviceAge: await getDeviceAgeInDays(req.headers['user-agent']),
sessionLength: 0 // Será preenchido depois
};
const anomalyDetector = new AnomalyDetector();
const anomaly = await anomalyDetector.detectAnomaly(loginAttempt);
if (anomaly.isAnomaly) {
// Exigir verificação adicional
return res.status(403).json({
error: 'Suspicious activity detected',
message: 'Enviaremos um código de verificação para seu email',
requiresVerification: true,
anomalyFactors: anomaly.factors
});
}
next();
});
Estratégias Organizacionais
1. Educação de Segurança
Programa recomendado:
Frequência: Mensal
Módulos:
1. Reconhecimento de phishing (30 min)
- Exemplos reais
- Como verificar domínios
- Red flags comuns
2. Gestão de credenciais (20 min)
- Usar password managers
- Nunca compartilhar senhas
- 2FA em tudo
3. Relatório de suspeitas (15 min)
- Como reportar
- Não deletar emails suspeitos
- Quem contatar
Avaliação: Teste simulado mensal com phishing fake
Resultado: Empresa com 0% de cliques em phishing fake2. Implementar Zero Trust Architecture
Princípios:
- Verificar toda credencial (nunca confiar implicitamente)
- MFA obrigatório em tudo
- Rate limiting agressivo
- Logging de tudo
- Detecção de anomalias
- Revogação rápida de tokens3. Monitoramento em Tempo Real
// Dashboard de segurança
const securityMetrics = {
failedLogins: [],
suspiciousEmails: [],
newDevices: [],
geochanges: []
};
// Alertar em tempo real
io.on('connection', (socket) => {
socket.emit('securityAlert', {
type: 'NEW_LOCATION',
user: 'usuario@empresa.com',
location: 'Beijing, China',
device: 'Unknown Chrome on Linux',
action: 'REQUIRE_MFA_VERIFICATION'
});
});Conclusão e Recomendações
A ação do Google contra esse cartel chinês marca um ponto de inflexão importante, mas o problema está longe de resolvido. Operações similares continuam funcionando ativamente.
Para sua infraestrutura, prioridades:
✅ Curto prazo (semana 1):
- Implementar rate limiting em logins
- Ativar 2FA obrigatório
- Monitorar anomalias de login
- Educar time sobre phishing
✅ Médio prazo (mês 1):
- Implementar detecção com IA
- Logs detalhados de autenticação
- Zero Trust Architecture
- Testes simulados regulares
✅ Longo prazo (trimestre 1):
- Sistema de anomalias com ML
- SIEM (Security Information Event Management)
- Incident response playbooks
- Parceria com SOC (Security Operations Center)
O custo de implementação é bem menor que o custo de um breach. Uma conta comprometida pode custar $500k+ em investigação, notificação de clientes e conformidade regulatória.
Se você quer entender mais sobre segurança em aplicações, recomendo: Autenticação JWT: Implementação Segura em Node.js onde exploramos token-based security.
Bora pra cima! 🦅
📚 Aprofunde Seus Conhecimentos em Segurança DevOps
A segurança é um processo contínuo, não um destino. Desenvolvedores que entendem tanto desenvolvimento quanto segurança são extremamente valorizados no mercado.
Se você quer dominar segurança em aplicações modernas, preparei um material completo:
Opções de investimento:
- R$9,90 (pagamento único)
👉 Conhecer o Guia Segurança Web
💡 Material atualizado com técnicas atuais de detecção e prevenção

