Seguridad Informática
Los Grandes Avances trae Como mejoras nueva Segirudad
lunes, 11 de mayo de 2015
Bienvenida
La Seguridad Informática es una disciplina que trata de asegurar la integridad y la privacidad de los sistemas de la información. Cubre todos los componentes que forma un sistema de información: datos, software, redes, usuarios, etc.
En este Blog te ayudaremos con información importante para que estés Protegido y te daremos herramientas útiles para evitar ataques a tu equipo.
10 consejos de seguridad informática
- Hay cosas que tu antivirus, por muy bueno que sea, no puede hacer. Te explico qué medidas de seguridad informática necesitas aplicar por tu cuenta.
1. Mantén actualizados los programas
Para evitar sorpresas, debes mantener actualizados tus programas. Aplicaciones comoSecunia PSI o Softonic for Windows te ayudan a conseguirlo.
2. En redes públicas, navega con cifrado
En las redes WiFi públicas, tus datos pueden ser interceptados de muchas maneras. Navegar desde ellas sin protección es una imprudencia que se paga muy cara.
Para defenderte, navega siempre con el protocolo HTTPS activado; con HTTPS Everywherees muy fácil. Y para añadir seguridad extra, te recomiendo usar estas apps.
3. Crea usuarios y contraseñas distintos
Crea contraseñas distintas y seguras para todos tus servicios, y usa nombres de usuario diferentes cuando se te dé esa opción. Y usa un gestor de contraseñas como Dashlane.
4. Cambia tus contraseñas a menudo
Las contraseñas envejecen. Y si las vulnera un intruso discreto, puede que tardes mucho en saber si alguien ha accedido a tus archivos y mensajes.
Por muy fuertes que sean tus contraseñas, cámbialas periódicamente. Y para añadir un factor de protección adicional, activa la verificación en dos pasos allá donde puedas.
5. Comprueba las apps autorizadas
"¿Puede la aplicación X leer tus datos de Facebook y Google?". Cuando autorizas una app maligna, el desastre está servido: spam enviado en tu nombre, robo de datos...
Revocando una aplicación en Facebook
Para prevenir problemas, controla las apps autorizadas de Google, Facebook, Twitter y otros sitios importantes. Revocar permisos es fácil y rápido.
6. Protege tu red WiFi frente a intrusos
Una red WiFi abierta es un gesto solidario... y peligroso. Un visitante mal intencionado puede intentar acceder a los datos de tu ordenador. Y entonces hablamos de intrusos.
Revisar la seguridad de tu red WiFi es la mejor manera de evitar sorpresas desagradables. Sigue mis ocho consejos para reforzar tu red WiFi.
7. Controla la privacidad de tus redes
En tus perfiles de Facebook y Google hay un montón de información personal que puede usarse en tu contra (por ejemplo, para adivinar contraseñas).
Cuidado con los perfiles falsos en Facebook, podrían ser ladrones de datos...
Rechaza solicitudes de amistad sospechosas y configura bien la privacidad de Facebook yotras redes sociales. Es una cuestión de privacidad fundamental.
8. Crea usuarios para cada persona
He visto un montón de ordenadores con una sola cuenta para toda la familia. O con varias cuentas, pero desprotegidas. Es un camino seguro hacia el desastre.
Dos usuarios conviven en el mismo PC con Windows 7 (fuente)
Si más de una persona va a usar un PC, crea diferentes cuentas, cada una protegida por una contraseña fuerte u otro sistema de identificación. ¡Y por favor, bloquea el PC!
9. Desconfía de los archivos que te envían
Uno de los virus más dañinos de los últimos tiempos se propagó a través de Skype: un amigo enviaba un archivo y la gente, al confiar en su origen, lo abría. Y kaputt.
Estés donde estés, no abras un archivo misterioso por ninguna razón, ni siquiera si te lo envía un amigo. Pregúntale antes qué es. En la duda, escanéalo en la web.
10. Aprende a ser escéptico
La seguridad es una actitud. Implica desconfiar sanamente de las cosas que ves a diario en Internet, ese mágico mundo de colores... y estafas.
Sé escéptico. En mis guías Cómo detectar y desmontar bulos y Qué hacer ante un mail sospechoso te proporciono pautas de sentido común para ser más vigilante.
Tips de Seguridad informatica
Relacionados con su equipo informático:
- Actualice regularmente su sistema operativo y el software instalado en su equipo, poniendo especial atención a las actualizaciones de su navegador web. A veces, los sistemas operativos presentan fallos, que pueden ser aprovechados por delincuentes informáticos. Frecuentemente aparecen actualizaciones que solucionan dichos fallos. Estar al día con las actualizaciones, así como aplicar los parches de seguridad recomendados por los fabricantes, le ayudará a prevenir la posible intrusión de hackers y la aparición de nuevos virus.
- Instale un Antivirus y actualícelo con frecuencia. Analice con su antivirus todos los dispositivos de almacenamiento de datos que utilice y todos los archivos nuevos, especialmente aquellos archivos descargados de internet.
- Instale un Firewall o Cortafuegos con el fin de restringir accesos no autorizados de Internet.
- Es recomendable tener instalado en su equipo algún tipo de software anti-spyware, para evitar que se introduzcan en su equipo programas espías destinados a recopilar información confidencial sobre el usuario.

Relacionados con la navegación en internet y la utilización del correo electrónico:
- Utilice contraseñas seguras, es decir, aquellas compuestas por ocho caracteres, como mínimo, y que combinen letras, números y símbolos. Es conveniente además, que modifique sus contraseñas con frecuencia. En especial, le recomendamos que cambie la clave de su cuenta de correo si accede con frecuencia desde equipos públicos.
- Navegue por páginas web seguras y de confianza. Para diferenciarlas identifique si dichas páginas tienen algún sello o certificado que garanticen su calidad y fiabilidad. Extreme la precaución si va a realizar compras online o va a facilitar información confidencial a través de internet. En estos casos reconocerá como páginas seguras aquellas que cumplan dos requisitos:
- Deben empezar por https:// en lugar de http.
- En la barra del navegador debe aparecer el icono del candado cerrado. A través de este icono se puede acceder a un certificado digital que confirma la autenticidad de la página.
- Sea cuidadoso al utilizar programas de acceso remoto. A través de internet y mediante estos programas, es posible acceder a un ordenador, desde otro situado a kilómetros de distancia. Aunque esto supone una gran ventaja, puede poner en peligro la seguridad de su sistema.
- Ponga especial atención en el tratamiento de su correo electrónico, ya que es una de las herramientas más utilizadas para llevar a cabo estafas, introducir virus, etc. Por ello le recomendamos que:
- No abra mensajes de correo de remitentes desconocidos.
- Desconfíe de aquellos e-mails en los que entidades bancarias, compañías de subastas o sitios de venta online, le solicitan contraseñas, información confidencial, etc.
- No propague aquellos mensajes de correo con contenido dudoso y que le piden ser reenviados a todos sus contactos. Este tipo de mensajes, conocidos como hoaxes, pretenden avisar de la aparición de nuevos virus, transmitir leyendas urbanas o mensajes solidarios, difundir noticias impactantes, etc. Estas cadenas de e-mails se suelen crear con el objetivo de captar las direcciones de correo de usuarios a los que posteriormente se les enviarán mensajes con virus, phishing o todo tipo de spam.
- Utilice algún tipo de software Anti-Spam para proteger su cuenta de correo de mensajes no deseados.

En general, es fundamental estar al día de la aparición de nuevas técnicas que amenazan laseguridad de su equipo informático, para tratar de evitarlas o de aplicar la solución más efectiva posible.
Inseguridad Bancaria Online.
Usualmente recibimos propaganda de nuestras entidades financieras acerca del cuidado que se debe tener de nuestra contraseña para acceder a los portales de banca online. Sin embargo, muy pocas veces se nos advierte que el nombre de usuario/login/etc es tan importante o tal vez más que el tan celosamente guardado "password".
La razón es simple: sin la contraseña, nuestro criminal informático puede no tener acceso a realizar operaciones bancarias en linea a nuestro nombre; sin embargo, con el nombre de usuario, el atacante puede lograr que nosotros tampoco las hagamos.




La solución definitiva a esta problemática es por supuesto el uso de nombres de usuario que sean dificiles de predecir. Sin embargo, es posible disminuir el impacto de esta vulnerabilidad sustituyendo los bloqueos permanentes por bloqueos temporales. La intención es por supuesto evitar el escenario apocaliptico dando acceso a las victimas despues de un tiempo prudencial, pero previniendo en cierta medida que el criminal informático lleve a cabo un ataque de fuerza bruta contra las credenciales de sus victimas. Esta medida paliativa, por supuesto, se hace imposible de implementar si el espacio de contraseñas es muy pequeño. Por ejemplo, en el caso en que la clave de acceso sea una cadena de 4 digitos.
ataques de fuerza bruta
Implementando ataques de fuerza bruta.
"En teoria, la práctica y la teoría son iguales. En la práctica, no lo son."
Bruce Schneier.
Y en efecto, en algunos casos, la teoría y la práctica, llegan a ser muy distintas. Especificamente, por ejemplo, muchos clientes de mis pruebas de penetración consideran que los ataques descritos en artículos anteriores son imprácticos pues: "cualquier firewall/IPS es capaz de bloquear tu dirección IP apenas se detecte el ataque de fuerza bruta". Sin embargo, esta medida de mitigación funciona sólo en teoría y sólo si tu atacante es un novicio.
En la práctica, la medida de bloquear la dirección IP de tu atacante no sería tan mala de no ser por la gran cantidad deproxies libres y pagos a la disposición de cualquiera que pueda ejecutar una busqueda en google. Si además agregamos la gran cantidad de servicios baratos en "las nubes" (ya sea de amazon, o las creadas por los criminales informáticos en lo que se conoce como "botnets"), nos damos cuenta que en realidad nuestro atacante dispone de una cantidad casi inagotable de direcciones IP desde donde puede lanzar su ataque! En la práctica, lo que sucederá al bloquear la dirección IP de nuestro atacante "no-novicio" es que simplemente se utilizará otra dirección IP casi instantaneamente. Antes de detener a tu atacante efectivamente mediante el bloqueo de su cada vez nueva dirección IP, será tu firewall/IPS quien muy probablemente tendrá serios problemas de desempeño al intentar bloquear tantas direcciones IP particulares. Esta consecuencia es muy bien conocida por los que nos hemos enfrentado a estos tipos de ataque de forma rutinaria y conocemos los intringulis de la bestia de forma práctica, no sólo teórica.
Pero ¿qué tan fácil es implementar un ataque de cambio de dirección IP automático luego que el administrador novicio intente bloquear nuestra dirección IP? la respuesta es: trivial. Por ejemplo, si estamos trabajando contra un sistema web, con nuestro propio script en perl y usando la libreria LWP::UserAgent, agregar la funcionalidad mencionada requiere una sola linea de código:
DIGRESIÓN: Si no conocias la información anterior y estas pensando iniciar tu carrera criminal con las técnicas descritas aquí, te tengo malas noticias. Usar proxies de esta manera no provee la anonimidad que muchos probablemente piensan. Es muy fácil dejar pistas de tu identidad por muchos lados y si tu víctima tiene los recursos y tiempo para buscarte te van a atrapar. En mis trabajos de forénsica de redes hemos logrado atrapar a muchos atacantes novicios de forma muy rápida debido a errores muy tontos de su parte. Mi recomendación: olvida el mundo criminal y ejecuta este tipo de demostraciones de forma profesional, con permiso y ganando buen dinero por ello.
Esta digresión me lleva al siguiente punto equivocado que escucho con cierta frecuencia de mis clientes con un poco más de experiencia en estos temas. El argumento es mas o menos el siguiente: "en la presencia de un ataque de fuerza bruta, nosotros no bloqueamos ninguna dirección IP, nosotros bloqueamos directamente al individuo que ejecuta el ataque, lo buscamos con ayuda de las autoridades y lo visitamos a su casa". Esta política es mucho más efectiva que la anterior pero sólo hasta cierto punto. Asumiendo que tu organización tiene los recursos y el tiempo para ejecutar tal respuesta en todos los casos, lo cual no es usual, y asumiendo también que tu atacante se encuentra en tu jurisdicción o una jurisdicción colaboradora, esta medida sólo será efectiva contra los atacantes menos sofisticados. Tu criminal informático "profesional", del tipo que va tras organizaciones con los recursos y tiempo que estamos considerando, muy probablemente también sepa contra-medidas para no ser encontrado. Hablamos no sólo de medidas técnicas, como encadenamiento de proxies, sino que incluso pueden tambien hacerle una visita mafiosa al investigador técnico a cargo de tu investigación. En otras palabras, tu atacante cuenta con exactamente las mismas posibilidades que tú, sólo que desde el punto de vista criminal y sin restricciones legales.
En cuanto a las técnicas avanzadas de anonimidad que usan estos "criminales informáticos avanzados", pienso que no tienen cabida en este tipo de artículos. Por un lado, porque para el pentester profesional tienen muy poca utilidad. En nuestras pruebas de penetracion nosotros no sólo tratamos de no cambiar IP. Por el contrario, intentamos ser lo más identificables posible. Esta situación es, por supuesto, con la idea de proveer a la organización que nos contrata de un método efectivo para diferenciar un ataque verdadero de las actividades de nuestro servicio. Por el otro lado, tampoco tienen cabida pues este blog trata de ser un punto de referencia para los profesionales de seguridad informática y no una enciclopedia de ayuda a los pichones de criminales informáticos.
El problema es el siguiente: ¿Cuándo es un espacio de busqueda lo suficientemente grande sin hacer que mis usuarios tengan que recordar credenciales inhumanamente grandes? En este tema intervienen demasiados factores como para dar una respuesta adecuada para todos los casos. En consecuencia, yo siempre recomiendo hacer lo que equivale a un "análisis de stress" a la aplicación. Simplemente se ejecuta un ataque de fuerza bruta controlado sobre los procesos importantes incluyendo el de "login" y se estudian los resultados. Al final de este trabajo no sólo se tiene un estimado de cúal es la capacidad de atención real del sistema, sino que también se tiene un estimado de la velocidad con que un atacante puede conseguir la información que necesita para continuar su ataque. Es con esta información que se deben tomar decisiones sobre controles de mitigación en lugar de abusar de los "estandares" y/o "buenas practicas" y/o ISO-XXXX como se quieran llamar. Siempre hay que recordar: los estandares no dejan de ser una recomendación meramente teorica y que se quedan, en la gran mayoría de casos, muy cortos en la práctica.
El tema es tán sutíl que hasta colegas pentesters con cierta trayectoria reportan una tasa muy pequeña de velocidad de revisión en los ataques de fuerza bruta ejecutados por sus scripts. Una de las formas en que pentesters (y criminales) profesionales hacen scripts de gran desempeño es mediante el uso de multi-threading.
La clase InputThread se encarga de manejar la interacción con el usuario. Por el momento, escribir la palabra "quit" ocasiona la señal de parada para todos los threads y termina limpiamente. Cualquier otro input simplemente produce la impresión de estadisticas de velocidad, avance y status general del programa. Esta clase se podría mejorar para proveer otras acciones como aumento de threads, disminución de threads, etc. La clase RequestThread se encarga de hacer el trabajo bruto. En el loop "while 1" se ejecuta la tarea que se asigna en la cola request_queue y es necesario manejar todos los casos de respuesta. Para el caso de aplicaciones web, es necesario manejar una situación de éxito, una de fracaso y una de ninguna de las dos. En los comentarios del código hay un poco más de explicación.
Finalmente, a pesar de que este artículo está enfocado a aplicaciones web, no hay ninguna razón por la que estas ideas no se puedan aplicar a otro tipo de aplicaciones. Por supuesto, habrán detalles teóricos que hay que sortear. Pero eso nunca es problema en la práctica. Si estos detalles no los han descubiertos los expertos en seguridad informática, de seguro lo habrán hecho los criminales informáticos. En ambos casos, lo único que hay que hacer es aprender de éstos y adaptar nuestros sistemas.



Pero ¿qué tan fácil es implementar un ataque de cambio de dirección IP automático luego que el administrador novicio intente bloquear nuestra dirección IP? la respuesta es: trivial. Por ejemplo, si estamos trabajando contra un sistema web, con nuestro propio script en perl y usando la libreria LWP::UserAgent, agregar la funcionalidad mencionada requiere una sola linea de código:
$ENV{HTTP_PROXY} = 'http://direccion.ip.del.proxy:puerto_del_proxy';
Y por supuesto, es necesario codificar el manejo de error cuando la conexión falle y cambiar la variable anterior. Este método tiene la ventaja que cualquier otro script que esté atento a la variable de entorno, continuará funcionando transparentemente luego de hacer este cambio en vivo. En caso que el proxy requiera autenticación, las modificaciones necesarias son igualmente triviales. El último ingrediente necesario es una lista de proxies que como hemos visto, es de muy fácil acceso hasta para el principiante.



La conclusión de este segundo error común con respecto a los ataques de fuerza bruta es: no siempre podrás identificar físicamente a tu atacante. En consecuencia, no puedes confiar enteramente en esta medida tampoco.
El tercer y último "error" que escucho, aunque no muy frecuentemente debido al detalle técnico que requiere, de mis clientes es el siguiente: "para una organización incluso tan pequeña como la mía, es relativamente barato hacer que el espacio de búsqueda de mi atacante sea lo suficientemente grande como para que su ataque requiera tanto tiempo que se genere un cambio de interés en sus objetivos". Este argumento es 100% correcto. Por supuesto, usualmente lo escucho de clientes con sistemas de nombres de usuario de 8 caracteres y un password de 4 dígitos. Obviamente, este espacio de búsqueda es realmente muy pequeño para los estándares de recursos actuales, pero no dejan de tener razón en la teoría.



Finalmente, a pesar de que este artículo está enfocado a aplicaciones web, no hay ninguna razón por la que estas ideas no se puedan aplicar a otro tipo de aplicaciones. Por supuesto, habrán detalles teóricos que hay que sortear. Pero eso nunca es problema en la práctica. Si estos detalles no los han descubiertos los expertos en seguridad informática, de seguro lo habrán hecho los criminales informáticos. En ambos casos, lo único que hay que hacer es aprender de éstos y adaptar nuestros sistemas.
ataques de fuerza bruta
Implementando ataques de fuerza bruta.
"En teoria, la práctica y la teoría son iguales. En la práctica, no lo son."
Bruce Schneier.
Y en efecto, en algunos casos, la teoría y la práctica, llegan a ser muy distintas. Especificamente, por ejemplo, muchos clientes de mis pruebas de penetración consideran que los ataques descritos en artículos anteriores son imprácticos pues: "cualquier firewall/IPS es capaz de bloquear tu dirección IP apenas se detecte el ataque de fuerza bruta". Sin embargo, esta medida de mitigación funciona sólo en teoría y sólo si tu atacante es un novicio.
En la práctica, la medida de bloquear la dirección IP de tu atacante no sería tan mala de no ser por la gran cantidad deproxies libres y pagos a la disposición de cualquiera que pueda ejecutar una busqueda en google. Si además agregamos la gran cantidad de servicios baratos en "las nubes" (ya sea de amazon, o las creadas por los criminales informáticos en lo que se conoce como "botnets"), nos damos cuenta que en realidad nuestro atacante dispone de una cantidad casi inagotable de direcciones IP desde donde puede lanzar su ataque! En la práctica, lo que sucederá al bloquear la dirección IP de nuestro atacante "no-novicio" es que simplemente se utilizará otra dirección IP casi instantaneamente. Antes de detener a tu atacante efectivamente mediante el bloqueo de su cada vez nueva dirección IP, será tu firewall/IPS quien muy probablemente tendrá serios problemas de desempeño al intentar bloquear tantas direcciones IP particulares. Esta consecuencia es muy bien conocida por los que nos hemos enfrentado a estos tipos de ataque de forma rutinaria y conocemos los intringulis de la bestia de forma práctica, no sólo teórica.
Pero ¿qué tan fácil es implementar un ataque de cambio de dirección IP automático luego que el administrador novicio intente bloquear nuestra dirección IP? la respuesta es: trivial. Por ejemplo, si estamos trabajando contra un sistema web, con nuestro propio script en perl y usando la libreria LWP::UserAgent, agregar la funcionalidad mencionada requiere una sola linea de código:
DIGRESIÓN: Si no conocias la información anterior y estas pensando iniciar tu carrera criminal con las técnicas descritas aquí, te tengo malas noticias. Usar proxies de esta manera no provee la anonimidad que muchos probablemente piensan. Es muy fácil dejar pistas de tu identidad por muchos lados y si tu víctima tiene los recursos y tiempo para buscarte te van a atrapar. En mis trabajos de forénsica de redes hemos logrado atrapar a muchos atacantes novicios de forma muy rápida debido a errores muy tontos de su parte. Mi recomendación: olvida el mundo criminal y ejecuta este tipo de demostraciones de forma profesional, con permiso y ganando buen dinero por ello.
Esta digresión me lleva al siguiente punto equivocado que escucho con cierta frecuencia de mis clientes con un poco más de experiencia en estos temas. El argumento es mas o menos el siguiente: "en la presencia de un ataque de fuerza bruta, nosotros no bloqueamos ninguna dirección IP, nosotros bloqueamos directamente al individuo que ejecuta el ataque, lo buscamos con ayuda de las autoridades y lo visitamos a su casa". Esta política es mucho más efectiva que la anterior pero sólo hasta cierto punto. Asumiendo que tu organización tiene los recursos y el tiempo para ejecutar tal respuesta en todos los casos, lo cual no es usual, y asumiendo también que tu atacante se encuentra en tu jurisdicción o una jurisdicción colaboradora, esta medida sólo será efectiva contra los atacantes menos sofisticados. Tu criminal informático "profesional", del tipo que va tras organizaciones con los recursos y tiempo que estamos considerando, muy probablemente también sepa contra-medidas para no ser encontrado. Hablamos no sólo de medidas técnicas, como encadenamiento de proxies, sino que incluso pueden tambien hacerle una visita mafiosa al investigador técnico a cargo de tu investigación. En otras palabras, tu atacante cuenta con exactamente las mismas posibilidades que tú, sólo que desde el punto de vista criminal y sin restricciones legales.
En cuanto a las técnicas avanzadas de anonimidad que usan estos "criminales informáticos avanzados", pienso que no tienen cabida en este tipo de artículos. Por un lado, porque para el pentester profesional tienen muy poca utilidad. En nuestras pruebas de penetracion nosotros no sólo tratamos de no cambiar IP. Por el contrario, intentamos ser lo más identificables posible. Esta situación es, por supuesto, con la idea de proveer a la organización que nos contrata de un método efectivo para diferenciar un ataque verdadero de las actividades de nuestro servicio. Por el otro lado, tampoco tienen cabida pues este blog trata de ser un punto de referencia para los profesionales de seguridad informática y no una enciclopedia de ayuda a los pichones de criminales informáticos.
El problema es el siguiente: ¿Cuándo es un espacio de busqueda lo suficientemente grande sin hacer que mis usuarios tengan que recordar credenciales inhumanamente grandes? En este tema intervienen demasiados factores como para dar una respuesta adecuada para todos los casos. En consecuencia, yo siempre recomiendo hacer lo que equivale a un "análisis de stress" a la aplicación. Simplemente se ejecuta un ataque de fuerza bruta controlado sobre los procesos importantes incluyendo el de "login" y se estudian los resultados. Al final de este trabajo no sólo se tiene un estimado de cúal es la capacidad de atención real del sistema, sino que también se tiene un estimado de la velocidad con que un atacante puede conseguir la información que necesita para continuar su ataque. Es con esta información que se deben tomar decisiones sobre controles de mitigación en lugar de abusar de los "estandares" y/o "buenas practicas" y/o ISO-XXXX como se quieran llamar. Siempre hay que recordar: los estandares no dejan de ser una recomendación meramente teorica y que se quedan, en la gran mayoría de casos, muy cortos en la práctica.
El tema es tán sutíl que hasta colegas pentesters con cierta trayectoria reportan una tasa muy pequeña de velocidad de revisión en los ataques de fuerza bruta ejecutados por sus scripts. Una de las formas en que pentesters (y criminales) profesionales hacen scripts de gran desempeño es mediante el uso de multi-threading. Hace un tiempo y para aprender algo de python decidí hacer un esqueleto de muti-threading para utilizarlo con mis scripts. Al ser mi primer programa en python está un poco áspero en los bordes, pero lleva a cabo el trabajo con efectividad:
class RequestThread(threading.Thread):
def __init__(self, id, request_queue):
threading.Thread.__init__(self, name ="ResquestThread-%d" %(id,))
self.request_queue = request_queue
def run(self):
while 1:
pid = self.request_queue.get()
# trabajar con pid. Manejar errores de la transaccion web con cuidado.
# 3 posibles estados: exito->anotar exito y terminar, error->anotar error y terminar, else->reintentar.
class InputThread(threading.Thread):
def __init__(self, id, salir, tope, startp, startt):
threading.Thread.__init__(self, name ="InputThread-%d" %(id,))
self.salir = salir
self.tope = tope
self.startp = startp
self.startt = startt
def run(self):
while 1:
text = str(raw_input())
if text == "quit":
#salir
salir.put(1)
break
cur = tope.get()
print "pid: " + str(cur) + " Speed: " + str(abs(cur - self.startp)/abs(time.time() - self.startt)) + " thrs/sec",
if __name__ == "__main__":
pid = 0 ### Inicio del ataque de fuerza bruta. Esto puede ser la secuencia de usernames/passwords/etc.
N_compute_threads = 30 ## Numero de Threads concurrentes. 30 es un buen numero para iniciar las pruebas.
request_queue = Queue.Queue(N_compute_threads)
for i in range(N_compute_threads):
RequestThread(i,request_queue).start()
salir = Queue.Queue(1)
tope = Queue.Queue(1)
InputThread(1, salir, tope, pid, time.time()).start()
while salir.full() == False:
if request_queue.full() == False:
request_queue.put(pid)
try:
tope.get_nowait()
except:
pass
tope.put(pid)
pid = pid + 1
for i in range(N_compute_threads):
request_queue.put(None)
print "Shuting down " + str(pid)
while request_queue.empty() == False:
print "!",
time.sleep(1)
La clase InputThread se encarga de manejar la interacción con el usuario. Por el momento, escribir la palabra "quit" ocasiona la señal de parada para todos los threads y termina limpiamente. Cualquier otro input simplemente produce la impresión de estadisticas de velocidad, avance y status general del programa. Esta clase se podría mejorar para proveer otras acciones como aumento de threads, disminución de threads, etc. La clase RequestThread se encarga de hacer el trabajo bruto. En el loop "while 1" se ejecuta la tarea que se asigna en la cola request_queue y es necesario manejar todos los casos de respuesta. Para el caso de aplicaciones web, es necesario manejar una situación de éxito, una de fracaso y una de ninguna de las dos. En los comentarios del código hay un poco más de explicación.
Finalmente, a pesar de que este artículo está enfocado a aplicaciones web, no hay ninguna razón por la que estas ideas no se puedan aplicar a otro tipo de aplicaciones. Por supuesto, habrán detalles teóricos que hay que sortear. Pero eso nunca es problema en la práctica. Si estos detalles no los han descubiertos los expertos en seguridad informática, de seguro lo habrán hecho los criminales informáticos. En ambos casos, lo único que hay que hacer es aprender de éstos y adaptar nuestros sistemas.



Pero ¿qué tan fácil es implementar un ataque de cambio de dirección IP automático luego que el administrador novicio intente bloquear nuestra dirección IP? la respuesta es: trivial. Por ejemplo, si estamos trabajando contra un sistema web, con nuestro propio script en perl y usando la libreria LWP::UserAgent, agregar la funcionalidad mencionada requiere una sola linea de código:
$ENV{HTTP_PROXY} = 'http://direccion.ip.del.proxy:puerto_del_proxy';
Y por supuesto, es necesario codificar el manejo de error cuando la conexión falle y cambiar la variable anterior. Este método tiene la ventaja que cualquier otro script que esté atento a la variable de entorno, continuará funcionando transparentemente luego de hacer este cambio en vivo. En caso que el proxy requiera autenticación, las modificaciones necesarias son igualmente triviales. El último ingrediente necesario es una lista de proxies que como hemos visto, es de muy fácil acceso hasta para el principiante.



La conclusión de este segundo error común con respecto a los ataques de fuerza bruta es: no siempre podrás identificar físicamente a tu atacante. En consecuencia, no puedes confiar enteramente en esta medida tampoco.
El tercer y último "error" que escucho, aunque no muy frecuentemente debido al detalle técnico que requiere, de mis clientes es el siguiente: "para una organización incluso tan pequeña como la mía, es relativamente barato hacer que el espacio de búsqueda de mi atacante sea lo suficientemente grande como para que su ataque requiera tanto tiempo que se genere un cambio de interés en sus objetivos". Este argumento es 100% correcto. Por supuesto, usualmente lo escucho de clientes con sistemas de nombres de usuario de 8 caracteres y un password de 4 dígitos. Obviamente, este espacio de búsqueda es realmente muy pequeño para los estándares de recursos actuales, pero no dejan de tener razón en la teoría.


def __init__(self, id, request_queue):
threading.Thread.__init__(self, name ="ResquestThread-%d" %(id,))
self.request_queue = request_queue
def run(self):
while 1:
pid = self.request_queue.get()
# trabajar con pid. Manejar errores de la transaccion web con cuidado.
# 3 posibles estados: exito->anotar exito y terminar, error->anotar error y terminar, else->reintentar.
class InputThread(threading.Thread):
def __init__(self, id, salir, tope, startp, startt):
threading.Thread.__init__(self, name ="InputThread-%d" %(id,))
self.salir = salir
self.tope = tope
self.startp = startp
self.startt = startt
def run(self):
while 1:
text = str(raw_input())
if text == "quit":
#salir
salir.put(1)
break
cur = tope.get()
print "pid: " + str(cur) + " Speed: " + str(abs(cur - self.startp)/abs(time.time() - self.startt)) + " thrs/sec",
if __name__ == "__main__":
pid = 0 ### Inicio del ataque de fuerza bruta. Esto puede ser la secuencia de usernames/passwords/etc.
N_compute_threads = 30 ## Numero de Threads concurrentes. 30 es un buen numero para iniciar las pruebas.
request_queue = Queue.Queue(N_compute_threads)
for i in range(N_compute_threads):
RequestThread(i,request_queue).start()
salir = Queue.Queue(1)
tope = Queue.Queue(1)
InputThread(1, salir, tope, pid, time.time()).start()
while salir.full() == False:
if request_queue.full() == False:
request_queue.put(pid)
try:
tope.get_nowait()
except:
pass
tope.put(pid)
pid = pid + 1
for i in range(N_compute_threads):
request_queue.put(None)
print "Shuting down " + str(pid)
while request_queue.empty() == False:
print "!",
time.sleep(1)

Finalmente, a pesar de que este artículo está enfocado a aplicaciones web, no hay ninguna razón por la que estas ideas no se puedan aplicar a otro tipo de aplicaciones. Por supuesto, habrán detalles teóricos que hay que sortear. Pero eso nunca es problema en la práctica. Si estos detalles no los han descubiertos los expertos en seguridad informática, de seguro lo habrán hecho los criminales informáticos. En ambos casos, lo único que hay que hacer es aprender de éstos y adaptar nuestros sistemas.
¿Qué es un Hacker?
Pero en realidad, ¿Qué es un Hacker?

Sólo por completitud y con la esperanza de que algún día la comunidad "no-hacker" logre entenderlo, repito aquí la definición más aceptada entre losverdaderos conocedores de la materia. El RFC 1392, "Glosario de usuarios de Internet", define claramente el término "Hacker":
hacker A person who delights in having an intimate understanding of the internal workings of a system, computers and computer networks in particular. The term is often misused in a pejorative context, where "cracker" would be the correct term. See also: cracker.

Como siempre, el post/artículo que lo inicio todo, afirma lo siguiente:
"...
Un hacker es un experto informático especialista
en entrar en bases de datos ajenas sin autorización alguna
..."
Armados con el nuevo conocimiento adquirido del RFC anterior, se puede ver que esta afirmación es doblemente incorrecta. Por un lado, en el contexto peyorativo, el término correcto debería ser "cracker". Sin embargo, aún haciendo esa corrección, se cae en el segundo error de pensar que un "cracker", por definición, es algún tipo de experto informático, cualidad adecuadamente atribuida, por definición, a un "hacker".

El artículo original continúa de la siguiente manera:
"... Generalmente trabajan con seudónimos y compiten entre ellos mismos por vulnerar sistemas de seguridad. Existen varias clasificaciones, pero la más utilizada actualmente es la de hackers sombrero blanco y negro ..."

Continuando con el artículo original:
"... Hacker sombrero blanco (también conocido como hacker ético) Infiltran las redes para mostrar el grado de vulnerabilidad que tienen. Sus motivaciones son inocuas. Generalmente dejan mensajes advirtiendo sobre lo desprotegido que puede estar el sistema. ..."


Finalmente llegamos a la posiblemente única afirmación mas o menos precisa del artículo:
"... Hacker sombrero negro: Son los expertos informáticos que intentan causar –y en algunos casos lo logran- daños a los usuarios y administradores del sistema. También son conocidos como ciberpiratas. Pueden incurrir en la extorsión y en actos criminales. Literalmente “roban” información y hacen uso de esta a su conveniencia. ..."



Por el bien de las generaciones futuras y como lo diría un verdadero hacker hace varios años atras, Ken Thompson, en su discurso donde recibió el premio Turing:
"...I would like to criticize the press in its handling of the "hackers", the 414 gang, the Dalton gang, etc. The acts performed by these kids are vandalism at best and probably trespass and theft at the worst. It is only the inadecuacy of the criminal code that saves the hackers from very serious prosecution..."
Casi 30 años despues, señor Thompson, lastimosamente, se continúa un manejo inadecuado por parte de la prensa, y a pesar de nuevas leyes y castigos, las fuerzas policiales de la gran mayoría de paises poseen capacidades técnicas tan limitadas que con mucha dificultad logran aprehender a los más mediocres y menos sofisticados de los criminales informáticos de hoy en día.
Suscribirse a:
Entradas (Atom)