Seguridad en aplicaciones web

BLZKZ

A raíz de un comentario de olemoudi en otro hilo, y por no desvirtuarlo más expondré mi duda aquí.

Iré actualizando #1 con las respuestas y recursos.

Hacemos una web desde 0, o bien usando frameworks, nada de cms prefabricados. Y lo último que miramos muchas veces es la seguridad, aunque siempre vamos haciendo pruebas, nunca sabemos los posibles riesgos hasta que no está montado y podemos hacer mejores y mayores pruebas para pasar a "producción".

Soy neofito en estos temas, y no voy más allá de meter un captcha o vigilar bien lo que se guarda en cookies y cómo se gestionan estas, además de los permisos de los directorios, y sobre todo que no puedan inyectar html a pelo (y así de paso me curo en parte con sql injection dado que todos los campos de texto son pasados por filtros). Nunca me he preocupado como vigilar sql injection (pero estos dos ultimos dias he intentado con mis escasos conocimientos de sql intentar petar el login y de momento no lo he conseguido pero casi xD)

¿Qué haceis vosotros para que vuestros sitios web sean lo más seguros posible?

Edit: he mirado y es poco probable que se pasen un login (como el mio) donde al registrarte se encripta la contraseña con md5 hash xD

Principales vulnerabilidades

XSS
SQL injection
DDoS
Explotacion ajax
Escapar correctamente las sentencias SQL
Subsanacion de errores (dejar errores a la vista del tipo SQL o headers)
Mal uso de criptografía
Configuración erronea del php

Recursos

· Comunidad sobre seguridad en aplicaciones: https://www.owasp.org/index.php/Main_Page
· PHPIDS
· https://browserid.org/
· http://www.elwebmaster.com/general/21-hacks-de-htaccess-que-todo-desarrollador-deberia-conocer
· http://www.modsecurity.org/
· http://www.petefreitag.com/item/505.cfm
· http://php.net/manual/es/function.crypt.php
· http://stackoverflow.com/questions/2571978/what-type-of-penetration-testing-tools-are-available-for-web-applications
· http://www.elladodelmal.com/2008/01/time-based-blind-sql-injection-using.html

6
B

Yo para muchas cosas procuro utilizar frameworks. Y normalmente los tíos que hacen estos frameworks controlan mucho más que yo y no hay mucho problema con SQL injection y cosas básicas.

Yo hice el PFC con Tapestry + Spring + Hibernate y mis compañeros de carrera iban de listillos a intentar petarme y no fueron capaces xDD.

Recurso: https://www.owasp.org/index.php/Main_Page

Ahora mismo no sé donde está pero hay un documento de unas 10 páginas con las vulnerabilidades más frecuentes y como solucionarlas (SQL Injection, XSS...).

Luego también es muy interesante buscar por internet métodos para "securizar" las herramientas que uses (desde Apache / Tomcat / Jetty a los frameworks que uses y demás).

Es un campo muy interesante este y en países con fuerza tecnológica es un perfil bastante buscado (un compañero de carrera está en Yahoo en Silicon Valley por controlar de este tema).

1 respuesta
seche

Hola buenas, en esto estoy un poco especializado y te podría aconsejar en privado.
Existen varias maneras de tener una web segura, pero nunca 100% por mucho framework que utilices hay huecos para los hackers y solo ellos lo van a ver y no te lo contaran xD

Yo soy de los que opina de hacerse una web desde 0 para saber lo que realmente estas haciendo, tambien soy de los que trabaja bastante con jQuery y como debes saber, dejas huecos por los metodos POST y ni te cuento por GET, todo ello hay maneras y trucos que puedes evitar que alguien te intente joder
Un buen sistema que no se si todavía sigue actualizandose es PHPIDS.
Respecto a la SQL injection,XSS y otras explotaciones, hoy en dia es lo mas fácil de evitar, hay problemas mucho mayores que te pueden joder aun estando la web "segura"

Tambien te aconsejo utilizar tokens con saltos variados (crypt, y alguno mas) y utilizar bastantes sesiones, cookies evitar lo maximo

Saludos

3 respuestas
BLZKZ

#2 gracias, le echare un ojo mañana a ver qué encuentro xD

1 respuesta
B

#3, #4: Efectivamente luego está el tema de tener una buena monitorización con IDS, tener una pasarela SSL montada y todo ese rollo.

Yo no sé mucho en la práctica, he tenido una asignatura con un profesor algo freak y bueno... lo que me quedó de ahí.

Eso sí #3, soy plenamente consciente de que un framework no te garantiza la seguridad, solo digo que seguro que está más securizado de lo que yo podré hacer de momento. Eso sí, hay que utilizar últimas versiones y estar atento, porque como saquen un exploit os joden a todos los usuarios del framework.

BLZKZ

#3 Te agradezco el ofrecimiento, pero me gustaría que todo fuera público xD, aunque imagino que determinadas cosas no se podrán hacer así, pero no lo veo conveniente ahora.

Con respecto a los consejos muchas gracias, investigaré esos campos e intentaré mantener actualizado #1 con lo que encuentre

1 respuesta
seche

Te entiendo #6, este jodido mundo esta bastante oculto ya que no interesa mostrar los conocimientos del hacking xD, aquí te dejo unas webs interesantes sobre el tema:

https://browserid.org/ un sistem de puta madre, y aunque parezca mentira, es seguro
http://phpids.org/ es una libreria que establece una capa de seguridad y te va avisando de algun melon quiera hacer cosas que te puedan joder
http://www.elwebmaster.com/general/21-hacks-de-htaccess-que-todo-desarrollador-deberia-conocer algunos consejillos sobre htaccess
Utilizar mucha url amigable y esconder todo el .php que puedas xD
http://www.modsecurity.org/ un modulo de apache recomendable
http://www.petefreitag.com/item/505.cfm consejos de seguridad en apache
Licencia SSL para el envio cifrado de datos, esta parte es algo cara xD (utilizo verisign)
El metodo de ofuscar javascript que muchos lo hacen es una tonteria ya que se te puede sacar, hay cosas que es inevitable si mantienes una conexion cliente-servidor
http://php.net/manual/es/function.crypt.php Funcion que hace saltos de codificación, ejemplo: md5+"hola"+hash+md5

Vulnerabilidades
XSS
SQL injection
Explotacion ajax
Escapar correctamente las sentencias SQL
Subsanacion de errores (dejar errores a la vista del tipo SQL o headers)
Mal uso de criptografia (como dije arriba existen funciones para encriptar de forma segura, o hacerlo tu mismo)
Configuración erronea del php (estar al tanto de las versiones de PHP para no cagarla en errores graves)

Es un poco sobre este tema, espero que sirva de ayuda a toda la comunidad!

B

Yo particularmente me aseguro el culo verificando todas las entradas de datos que recibe la aplicación. Si cubres eso, 99% seguro no tendrás problemas de seguridad en tu aplicación. Y nunca, NUNCA alojes en hostings compartidos!.

1 1 respuesta
eXtreM3

Testeos que suelo hacer en mis webs:

  • Login seguro. Funciones para escapar caracteres chungos que puedan petar las consultas.
  • Control de entrada de datos. Quitar tags no permitidos y denegar el input de js y cosas raras.
  • Urls amigables. Ocultar los php y variables post/get siempre con htaccess y de paso ganar en posicionamiento.

Hubo una vez que me obsesioné con las contraseñas y a la hora de hacer el registro de usuarios hacía lo siguiente:

$pass = md5($pass);
$passSegura = md5(substr($pass, 0, 10));

xDDD

(sí, es innecesario)

EnZo

Yo estoy con #8. Parseo cada entrada con una regexp, formularios y urls. Y hasta ahora pensaba que lo que hacia era seguro. Pero por lo que dice #3 no es suficiente :/
Ilustranos un poquito!! :P

sonkxx

MD5 no es muy seguro que digamos... SHA-2 me parece mucho más seguro.

2 respuestas
HeXaN

#11 What? Que yo sepa MD5 es seguro xD

1 2 respuestas
DarkSoldier

#11 esto... xd tenia entendido k era de lo mas seguro ya k no se puede descifrar no? xD

eXtreM3

jaja, otra vez con lo que md5 no es seguro :palm:

Si poneis de contraseña hola1234 o messid10s es NORMAL que te saquen la contraseña, simplemente porque hacen comparaciones y coli... en fin paso de explicarlo.

#12 Deseando que se pase por aquí aquel user que afirmaba partir los md5 en 2 horas xD

1 respuesta
HeXaN

#14 Sí, cuando escribí el comentario estaba pensando en ti xD

P.D.: <3

1
BLZKZ

se referira al problema de colisionde hash, no a la seguridad en si

Meleagant

Pues no, MD5 para una aplicación web en la que no puedes controlar las contraseñas que van a elegir los usuarios no es lo más seguro.

Lo ideal es SHA2 combinado con salts.

1 1 respuesta
B

#12: MD5 NO es seguro: http://2.bp.blogspot.com/-0m5xtmB4EO8/Teidf_TVY4I/AAAAAAAAAts/wVLWYIuDD6M/s1600/life-crypthashes.JPG

1 1 respuesta
HeXaN

#18 Supongo que eso será por fuerza bruta tirando de GPU. Pero para ello tienes que tener las claves primero. Digo yo xD

#17 En la mayoría de páginas te piden ya varios requisitos: números, caracteres raros y demás.

eXtreM3

Sí sí, vosotros seguid poniendo contraseñas como

admin
ddmmyyyy (fecha nacimiento)
password
messi
hola123

Y luego llorad porque md5 no es seguro. Es normal que haciendo colisiones y comparaciones con los distintos diccionarios y además con scripts mejorados (como cambiar letras por números, etc) se saquen las contraseñas "normales".

Lo que me lleva a... por qué un 90% de la gente tiene de clave secreta de su tarjeta de crédito (4 caracteres numéricos) el día y mes de su cumpleaños? Es en plan "hola me robas la cartera y róbame toda la pasta de la cuenta antes de que pueda anular la tarjeta"

1 respuesta
elkaoD

#20 ojalá fuera tan sencillo. MD5 NO es seguro.

Piénsalo: los ataques por diccionario son igual de eficaces con SHA2 y con MD5. ¿Entonces por qué han nombrado SHA2?

1 respuesta
DarkSoldier

eso digo yo, que diferencia hay entre sha2 y md5 con relación al ataque por diccionario?? #21 (hablo desde el desconocimiento eh? solo curiosidad)

3 respuestas
elkaoD

#22 en el sentido que creo que lo preguntas, ninguna.

eXtreM3

#22 pero uno se parte y el otro no, te has quedao eh.

LOc0

Sobre MD5, por si alguien tiene alguna duda sobre su efectividad criptográfica, comentar que los de Flame http://es.wikipedia.org/wiki/Flame_%28malware%29 (el súper malware que circula ahora mismo) aparte de 1001 truquis de pros, consiguieron FIRMARLO como si fueran de Microsoft mediante un certificado "güeno" que no valía para firmar, pero al que le hicieron perrerías a su firma "protegida" con MD5 hasta que colisionó con otro certificado que sí servía para firmar.

OLVIDAD MD5 (para errores "fortuitos" con un CRC de "mierda" sobra) . Si ya es para cosas "serias" de integridad, SHA-1 como mínimo (y para algo "importante" SHA-512 q es más rápido que SHA-256 por cierto).

Pero sobre todo, en estos temas, estar al día es fundamental.

Salu2 ;)

#22 Si es un ataque de ir probando todas las combinaciones, a priori la única diferencia es que el que devuelva un hash más largo, de media tardará más en colisionar ( http://es.wikipedia.org/wiki/Ataque_de_cumplea%C3%B1os ). PEEEEERO, los ataques "peligrosos" son los que "analizan" el algoritmo para sacar debilidades que permitan con un cambio mínimo de bits en la fuente obtener una colisión determinada.

1
elkaoD

Aprovecho y enlazo: http://crypto.stackexchange.com/

Tunnecino

Yo solo digo que en mi época de niñato y los phpnukes si que crackaba pass md5 en pocas horas xD

bLero

una pass de unos 25 caracteres alfanuméricos encriptada en md5 te la sacas con el forro.

Contratas algún servicio de computación en la nube, tipo amazon EC2 con 10.000 instancias y tiras de fuerza bruta y la sacas en nada.

lo mismo para desencriptar WPA.

Y si es una pass fácil con el PC de casa y un buen diccionario.

Josepanaero

¿Conocéis alguna herramienta automatizada para el reconocimiento de fallos de seguridad?

Es decir, un programa o aplicación web a la que tú le digas dónde tienes alojada la página web y él te devuelva una lista con los fallos de tu web, del estilo: en tal dirección puedes usar inyección sql, en tal otra puedes usar XSS.

Salu2.

1 respuesta
B

#29: Creo que te valdrá http://stackoverflow.com/questions/2571978/what-type-of-penetration-testing-tools-are-available-for-web-applications

1 1 respuesta

Usuarios habituales