[Tutorial] [Informaciуn] Ataques y como defenderse
#1

Fuente: Pawnoscripting

Hola a todos, mi nombre es Stella, conocido antes como, bueno, muchos sabrбn que en el pasado me dedicaba a atacar servidores por puro placer sin ningъn objetivo, con mi detenciуn he madurado muchнsimo y ahora hago lo que me gusta (seguridad informбtica) pero para el lado del bien, para ayudar a las personas, quiero compartir esta informaciуn por que creo que todos tienen derecho a proteger su servidor y que su proyecto salga adelante, sobretodo hoy en dнa que al parecer cualquier chico de 15 aсos con un VPS puede llegar a causar problemas a los administradores de servidores, la mayorнa de estas personas no tienen mucho conocimiento de seguridad informбtica y se limitan a descargar programas creados por terceras personas que ni si quiera conocen como funciona, en este post, que serб bastante largo voy a explicar todas las vulnerabilidades que se han descubierto a dнa de hoy en SA-MP y como arreglarlas, se escribirбn detalles tйcnicos y se intentarбn reproducir estos ataques de una manera segura en mi ordenador, dando la informaciуn necesaria para repararla sin que este post se convierta en informaciуn para atacar, se trata de decir lo justo de como atacar para luego entender como hay que defenderse, їcуmo defenderse si no conoces tu vulnerabilidad?

Bueno comenzaremos con uno de los ataques mбs conocidos a dнa de hoy....

Vulnerabilidad 01, Query Flood

Bien, esto por si mismo no es una vulnerabilidad, primero tendremos que explicar que es una query y por que hace daсo.
SA-MP usa el protocolo UDP para la comunicaciуn entre cliente/servidor, entre ellos se envian lo que se conoce como paquetes de datos, estos paquetes contienen informaciуn que servirб para que el cliente y el servidor se entiendan, si nosotros conectamos a un server, nuestro cliente estб enviando paquetes UDP diciйndole al servidor "Oye, quiero conectar" y el responde "Ok, adelante" obviamente es una representaciуn, pues los paquetes reales estбn encriptados usando un algoritmo de RakNet + un cifrado de Kalcor, de esto no darй mбs informaciуn por que no viene a cuento y podrнa ser peligroso.
Bien un query es un simple paquete mбs que usa el cliente y el servidor para compartir la informaciуn bбsica del servidor, cuando nosotros damos click en un server, le damos a refresh, se estбn enviando las siguientes querys:

Como no vamos a hablar de los paquetes reales, simplemente indicarй los opcodes, el opcode viene de option code, codigo de opciуn, segъn el cуdigo que enviemos, recibiremos una respuesta en concreto, automбticamente SA-MP envia estas 5 querys al dar click a un servidor.
i - Si enviamos este opcode recibiremos informaciуn bбsica como nombre del mapa, nombre del server, cantidad de jugadores, slots, password...
c - Si enviamos este opcode recibiremos la lista de jugadores
d - Si enviamos este opcode recibiremos una lista de jugadores pero mбs detallada, con ping, score, etc..
r - Si enviamos este opcode recibiremos la lista de rules, es decir, version, time, weather, etc
p - Este es el opcode del ping, define nuestro ping en un servidor, el cliente envia este opcode + una cantidad de datos arbitrarios, a lo que el sa-mp responde con el mismo opcode y la copia de esos datos, el tiempo que tarda en responder el servidor a esto delimitarб el ping.

Bien, vamos a realizar un pequeсo programa en C que imite estas querys hacia mi propio servidor en localhost, todas las pruebas serбn realizadas de forma segura en mi ordenador.



Solo muestro parte del cуdigo en C, bien, ahora estamos preparados desde mi programa para enviar unas cuantas querys al servidor, si tenemos activado loqueries, en la consola veremos las querys que recibe el servidor, de echo si las haces manualmente puedes incluso falsificar el opcode, esto no sirve de nada, solo para demostrar que se estбn haciendo manualmente, ejemplo, enviemos una query inexistente, la Z.



Como pueden ver he enviado la query Z, en este caso que pasa, їle pasarб algo al servidor? la respuesta general es no, enviado desde una botnet si puede que haga daсo, pero desde un ordenador normal no, y ahora os explicarй por que. SA-MP solo responde a los opcodes citados anteriormente, por lo que si envio un opcode para el que no fue diseсado simplemente lo ignorarб, el problema viene cuando enviamos alguno de los opcodes anteriores: i,r,c por ejemplo, en este caso el sa-mp server si que responderнa, y comenzarнa a trabajar en obtener esa informaciуn y enviarla a nuestro cliente, este proceso repetido una y otra vez debido a que alguien estб enviando demasiadas querys usando un programa o un script, es lo que hace que el servidor se quede prбcticamente fuera de servicio, pues estб atendiendo todas esas querys y no puede atender a los paquetes que hacen que el juego funcione.

Bien, atacando con el opcode Z mi servidor quedу vivo, no hubo ningъn efecto, como ya dije el opcode Z no existe, asн que para ver un ejemplo real de ataque, esta vez usarй el opcode "i", y lanzarй peticiones masivas a mi servidor.



Como pueden ver, nada mбs comenzar ya el servidor deja de responder, y acto despuйs revive mostrando un ping mayor a 6.000 el servidor queda totalmente inutilizable debido a que el servidor se dedica a atender las querys, y ignora a los demбs jugadores que estбn reclamando respuestas para poder jugar.

Vulnerabilidad 01 - Soluciуn

Para solucionar esta vulnerabilidad, estais de suerte, pues he desarrollado una versiуn mнnima de Stella Firewall para 0.3e que te proteje de estos ataques, solo hay 2 opciones para decirle adiуs a este tipo de ataques, inyectando una DLL en SA-MP y hookear la funciуn que recibe los querys para controlarla, o usar un firewall bien diseсado, este firewall ha sido diseсado y testeado por mi durante meses, por lo que se garantisa que funcionarб al 100%, como en el foro estб prohibido subir ejecutables, solo os darй el link al cуdigo fuente para que ustedes lo compilen y lo usen, solo funciona en Linux y estб programado en C, estб configurado para actuar sobre el puerto 7777, cambiando el cуdigo podeis adaptarlo a otro puerto.

Protecciуn: http://kevinsecurity.altervista.org/stella_firewall.c

Nota: Si tienen dudas sobre como compilarlo solo me avisan.

Vulnerabilidad 02, RCON Flood (Bad RCON Attempt)

RCON Flood es lo mismo que query flood, de echo, es una query mбs solo que al paquete final se le aсaden mбs datos, se usa el opcode 'x', el firewall que os he dejado antes tambiйn bloquea sin ningъn problema este ataque, que tambiйn es muy peligroso y puede dejar fuera de servicio tu servidor.

Vulnerabilidad 02 - Soluciуn

Protecciуn: http://kevinsecurity.altervista.org/stella_firewall.c

Vulnerabilidad 03, DialogResponse Exploit

Esto si es una vulnerabilidad, nunca se dio una explicaciуn detallada por parte del team sa-mp, pero ahora que este bug estб parchado, se puede hacer una explicaciуn.

Intйrnamente sa-mp almacena los dialogos usando un vector de estructuras, los atacantes usando un programa externo enviaban un valor negativo, "-1" en el paquete de respuesta de un dialogo, sa-mp al tratar de acceder al miembro -1 se cerraba debido a que estб accediendo a una zona de memoria que no existe o que no fue creada por sa-mp y pertenece a otra parte del sistema operativo, lamentablemente tambiйn se dedican a hacer flood de dialogresponses, la mayorнa de estos floods tambiйn pueden afectar al servidor, y todos son usando el programa RakSAMP.

Vulnerabilidad 03, Soluciуn

Para esta soluciуn he diseсado un filterscript y un plugin que deben colocar en el servidor, como el firewall es solo para Linux, y bloquea a cualquier persona que use RakSamp no con un simple Ban, pues mucha gente hace esto cuando realmente sigue siendo igual de peligroso pues se puede hacer llamadas a RPC's aunque estйs baneado:

Soluciуn:Link removido

Vulnerabilidad 04, Warning, RCON Command exploit

Muchas veces preguntan los usuarios sobre esta vulnerabilidad, esta vulnerabilidad fuй parcheada mucho tiempo, por lo que ya no es una vulnerabilidad sino un simple flood, la vulnerabilidad consistнa en logearse por rcon Ingame con una contraseсa demasiado grande, sa-mp usaba de manera insegura una serie de funciones produciendo un buffer overflow, escribнa en memoria que no le pertenecнa, bien, al realizar un pequeсo test de rcon login ingame, (son diferentes paquetes, no confundir con una query) obtengo lo siguiente:

Warning: /rcon command exploit from: 127.0.0.1:1745

Evidйntemente al server no le pasу nada, si usaramos una versiуn no parcheada, el samp server se cerrarнa, Kalcor puso este mensaje solo para avisarnos que alguien intentу atacarlo. Como dije como no pueden cerrar el servidor, envian el exploit muchas veces para intentarlo mediante flood.

Vulnerabilidad 04 - Soluciуn

En OnRconLoginAttempt, no permitir mбs de 5 logins fallidos, si es asн, lo recomendable es banear por iptables usando el plugin exec.so.

Vulnerabilidad 05, Join flood

Aquн vamos con otro flood, se trata de que un bot entra muchas veces llamando a "OnPlayerConnect" esto es posible debido a que no existe un lнmite a la hora de enviar el RPC de JOIN por lo que el mensaje de join que tiene el servidor serб ejecutado, para poner en la prбctica esta vulnerabilidad escribo un pequeсo programa en C y hago las pruebas:



Esto puede dejar el servidor caido, si se envia con la suficiente fuerza, pues se estarнan generando mбs de 5.000 joins por segundo, afortunadamente tiene una fбcil soluciуn.

Vulnerabilidad 05 - Soluciуn

Soluciуn :Link removido

Vulnerabilidad 06, Componentes de vehнculos invбlidos

Realmente el servidor SA-MP no hace una comprobaciуn de los componentes que envia cada jugador, por lo que sa-mp se limita a repartir esta informaciуn con los clientes, el GTA San Andreas tiene una serie de componentes que producen crash en el juego, si un jugador mediante cheats activa uno de esos componentes, crasearб a los demбs jugadores, es un bug que afecta al cliente, no al servidor.

Vulnerabilidad 06 - Soluciуn

Soluciуn: https://sampforum.blast.hk/showthread.php?tid=317303

Vulnerabilidad 07, Ataques UDP a puertos aleatorios

La mayorнa de gente que tiene su propio VPS sufre este tipo de ataques, hay algunos atacantes que se dedican a enviar flood UDP no al puerto del sa-mp, sino a cualquier otro con el fin de usar la gran conexiуn del VPS desde el que atacan para dejar fuera de servicio el servidor.


Vulnerabilidad 07 - Soluciуn
Para esto aplicaremos una regla de iptables en Linux donde aislaremos nuestro server, que serб el ъnico puerto que podrб recibir trбfico, pero debemos controlarlo con el firewall, recuerden.
Para bloquear todo el trбfico de otros puertos mediante UDP y solo permitir nuestro server podemos hacerlo de 2 maneras:

iptables -A INPUT -p udp ! --dport 7777 -j DROP

Este ejemplo solo permitirб trбfico UDP al puerto 7777, suponiendo que ese sea el puerto de nuestro servidor.

Otro manera podrнa ser usando 2 reglas:

iptables -A INPUT -p udp --dport 7777 -j ACCEPT
iptables -A INPUT -p udp -j DROP

Con esto evitariamos que los ataques UDP a puertos aleatorios llegen a nuestra mбquina.

Vulnerabilidad 08, Server full

Incluso aunque esta vulnerabilidad estй parcheada, he descubierto que hay una forma de burlar esa protecciуn y dejar el servidor full, el firewall que he posteado antes incluye protecciуn contra este ataque, que ya no es tan comъn debido a la protecciуn, pero si yo descubrн que se puede burlar de cierta manera, no significa que nadie mбs consiga hacerlo, tarde o temprano lo lograrбn, pero afortunadamente les tengo la soluciуn.
Este ataque simplemente se ha basado durante aсos en sa-mp en enviar el primer paquete de conexiуn de manera repetida causando que el sa-mp ocupe todos los slots del servidor, la verdad que era un bug bastante grave, afortunadamente ya se controla mejor.
Vulnerabilidad 08 - Soluciуn

Soluciуn: http://kevinsecurity.altervista.org/stella_firewall.c


Vulnerabilidad 09, Packet was modified

Realmente esto no es una vulnerabilidad, mucha gente piensa que cuando leen esto en el log del servidor estбn siendo atacados, pero realmente este mensaje sale cuando uno de los jugadores estб muy lageado, y su PC no puede enviar correctamente los paquetes, por lo que llega al servidor con un CHECKSUM invбlido, tambiйn es posible que sea un atacante, pero realmente no le servirб de mucho modificar los paquetes si no coloca un checksum vбlido para poder acceder a la red de samp.

NOTA: Tambiйn puede aparecer cuando han atacado nuestro servidor con los anteriores ataques, y los players al estar muy lageados, no envian los paquetes correctamente, ten cuidado al banear cuando sale este mensaje, pues podrнas confundir un ataque con un jugador real.


Vulnerabilidad 09 - Soluciуn

Ninguna soluciуn, no hace efecto al servidor, cuidado con los bans.


Vulnerabilidad 10, Windows Server RCON login exploit

Reciйntemente se descubriу una vulnerabilidad en windows servers que al enviar repetнdamente un login ingame con una contraseсa grande puede llegar a cerrar el ejecutable, no le doy mucha importancia por que ningъn servidor serio usarб windows como host.

Vulnerabilidad 10, Soluciуn

Ban() si un jugador se equivoca mбs de 5 veces.

Vulnerabilidad 11, Null cmds y carбcter % en dialogos

Una nueva vulnerabilidad puede crasear un servidor al enviar un comando sin contenido, cosa que es imposible usando el cliente original, lo mismo para el dialogo, no entrarй mбs a fondo en esto, pues creo que podrнa escribir una biblia explicando como funciona, afortunadamente tengo la soluciуn, debido a que estos ataques son enviados con RakNet, podeis usar mi pack que bloquea las ips que usan Raknet, recuerden que un simple Ban no vale de nada, por eso deben usar mi filterscript y plugin.

Vulnerabilidad 11 - Soluciуn

Soluciуn:Link removido




Prуximamente habrб una segunda parte, pues quedan mбs de 10 vulnerabilidades nuevas que he descubierto y que aъn no son conocidas, obviamente no se publicarб nada de esto y todo se dirб a Kalcor, una vez hablado, ya podrй postear la protecciуn y las soluciones.

Saludos y cualquier duda me dicen.

__________________

Stella-Host ЎEl host mбs seguro de sa-mp!
Reply
#2

Gran trabajo kevin!
Reply
#3

Joder que buen trabajo O.O excelente + rep

pero esto debiу haber estado aquн: http://forum.sa-mp.com/forumdisplay.php?f=59
Reply
#4

Gran aporte Stella, no dudo en йsta informaciуn, tъ sabes mucho de seguridad.
Reply
#5

Muy buen aporte! Gracias stella, tu si sabes!
Reply
#6

Muy buen tutorial Stella, espero la 2Є parte.

PD: +rep
Reply
#7

їCуmo puedo compilarlo? hice unas mejoras pero no puedo porque me muestra errores.
Reply
#8

Woow, stella te desapareces y sale a luz con grandes productos y guнas muy bueno y el tener unos de tus aportes serб como tenerte en el servidor protegiendo.

Muy bueno, aprendн algo que ni idea jajajaj, gracias.

Saludos.
Reply
#9

Kevin es un muy buen aporte para la comunidad y se agradece, pero como el plugin "exec.so" que estaba en uno de los paquetes no cuenta con su codigo fuente correspondiente, debo eliminar dichos links.
Reply
#10

Quote:
Originally Posted by Zume-Zero
Посмотреть сообщение
їCуmo puedo compilarlo? hice unas mejoras pero no puedo porque me muestra errores.
Se tiene que compilar en una terminal de linux con el siguiente comando:

pawn Код:
g++ stella_firewall.c -o firewall
Hay que aclarar qe para poder ejecutarlo necesitas permisos root
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)