Más allá de las inyecciones de SQL y XSS

1

Soy un programador que trabaja en un servicio web (por mi cuenta). Dado que no soy un experto en seguridad, vine a este sitio web para formular mi pregunta.

Hice todas las cosas importantes para asegurar mi sitio web. Intenté protegerme contra ...

  1. Inyecciones SQL mediante el uso de declaraciones preparadas.
  2. Ataques XSS utilizando json_encode(htmlspecialchars($str)); al enviar las entradas de cadena de los usuarios (todos mis datos se envían a través de JSON).
  3. Compromisos de contraseña mediante el uso de la siguiente función para cifrar contraseñas:

[Encontré esto en línea, pero ¿debería usar bcrypt en lugar de crypt ?]

$cost = 10;
$salt = strtr(base64_encode(mcrypt_create_iv(16, MCRYPT_DEV_URANDOM)), '+', '.');
$salt = sprintf("$2a$%02d$", $cost) . $salt;
$password = crypt($pass, $salt);

Y luego para iniciar sesión:

if (crypt($pass, $realpass) == $realpass)
{ //$pass = entered password, $realpass = database
    //yay
}

Además, hay una serie de cosas sobre mi cabeza de las que no tuve en cuenta. Estos incluyen:

  1. Cargar en el servidor : ¿pueden ser maliciosas las imágenes / videos si se editan con imagick / ffmpeg?
  2. Legalidad : ¿Cómo desinfectar el contenido ilegal (es decir, la pornografía infantil, etc.) o incluso el contenido ilícito (es decir, la desnudez)?

Tampoco me preocupé por la inyección de comando / código ya que no tengo ninguna ejecución vulnerable a esas. Ah, y por supuesto, estoy enviando / recibiendo todo a través de HTTPS.

SIN EMBARGO , estoy seguro de que todos ustedes están sentados en casa riéndose de mi estupidez en el tema. A los expertos en seguridad no se les paga un salario, ya saben, seguros contra cosas tan elementales como inyecciones de SQL . Dudo seriamente que se produzcan infracciones de seguridad importantes debido a cualquiera de las posibles infracciones de seguridad que mencioné anteriormente.

Y entonces mi pregunta es, ¿qué me estoy perdiendo? Vale la pena señalar que voy a utilizar el EC2 de AWS, por lo que no sé si necesito tomar medidas de seguridad adicionales para el servidor o no.

Gracias de antemano.

    
pregunta Shahar 22.12.2014 - 23:23
fuente

3 respuestas

3
  

Dudo seriamente que ocurran violaciones de seguridad importantes debido a cualquiera de las posibles violaciones de seguridad que mencioné anteriormente.

Parece que está cubriendo estas vulnerabilidades conocidas que se deben a la falta de saneamiento de parámetros, por lo que podría esperar que el resto del mundo también lo hiciera.

Pero, chico, estarías equivocado!

  

De acuerdo con los resultados de una encuesta reciente de 595 profesionales de seguridad de TI con sede en EE. UU., el 65 por ciento de los encuestados dijo que sus empresas habían experimentado ataques de inyección SQL que habían evitado con éxito sus defensas en el perímetro en los últimos 12 meses. source

y XSS es, con mucho, la vulnerabilidad más común según El informe de seguridad web de WhiteHat

¿Qué te estás perdiendo?

Cargas de archivos Creo que esto 8 reglas básicas para la carga segura de archivos por SANS es excelente.

Bibliotecas de terceros Su código podría ser perfecto pero confía en bibliotecas de terceros inseguras para todo tipo de funcionalidad. Estos requieren trabajo para mantenerse al día con los últimos parches.

Escalamiento de privilegios La mayoría de las aplicaciones que pruebo, después de que todos sus parámetros están bien desinfectados, no han prestado atención a la escalada de privilegios. Este es un tipo de vulnerabilidad que los escáneres automatizados no son muy buenos para detectar. Por ejemplo, muchas aplicaciones llenan formularios con opciones basadas en el privilegio del usuario. Un usuario malintencionado puede agregar opciones a estos formularios en el lado del cliente con gran efecto, a menos que el servidor sea sensato a lo que el usuario debería hacer. Algunos marcos web controlan esto mucho mejor que otros.

Registro Asegúrese de que los eventos relacionados con la seguridad se capturen en algún lugar para que pueda saber lo que está sucediendo. Eventos para capturar: inicios de sesión exitosos, inicios de sesión fallidos, cambios de roles, carga de archivos, descargas de archivos, errores de la base de datos y cualquier otra cosa que sea importante para usted.

    
respondido por el mcgyver5 23.12.2014 - 16:49
fuente
2

Dado que está creando una aplicación web, un buen lugar para comenzar es el OWASP Top Ten .

Una vez que crees que lo has hecho bien para fortalecer tu código, debes hacer un análisis tanto estático como dinámico.

Las herramientas de análisis estático variarán según el marco que estés usando. Nuevamente, OWASP puede ayudarlo a comenzar .

Después de eso, verifique los Términos de servicio de AWS y ejecute un escáner de vulnerabilidades en su aplicación web. OWASP ZAP es una herramienta agradable y fácil para esto.

Una vez que haya completado estos pasos, estará bien encaminado para tener una aplicación web segura más .

    
respondido por el KDEx 23.12.2014 - 04:02
fuente
0
  

Además, hay una serie de cosas sobre mi cabeza de las que no tuve en cuenta. Estos incluyen:

     

Subida al servidor: ¿pueden ser maliciosas las imágenes / videos si se editan con imagick / ffmpeg?

No con eso , pero pueden ser perjudiciales de dos maneras:

  • perjudicial para usted. Si la imagen que se está cargando es realmente un código ejecutable, y el servidor puede ser engañado para que lo ejecute, o si la ruta de guardado está bajo el control del usuario, este puede sobrescribir un archivo crítico con un archivo JPEG con un nombre malicioso. Usted puede prevenir esto por:
    • verifica el tipo de imagen cuando se carga (posiblemente quitándole los datos EXIF / APP).
    • guardándolo con un nombre de tu opción, y mejor aún, una ID única; entonces puede guardar el nombre original del usuario; cuando el usuario solicita la imagen, puede enviarla como un archivo adjunto con el nombre original, pero en el servidor el archivo ni siquiera tiene una extensión y no es ejecutable de ninguna manera.
  • Dañino para los demás: puede crear un JPEG que requiera varios gigabytes de RAM para estar completamente representado. A continuación, envíe el enlace a la propia JPEG. Puede verificar esto, veo que está codificando en PHP, usando getImageSize() , que no decodifica la imagen y por lo tanto consume muy poca memoria.
  

Legalidad: ¿Cómo desinfectar el contenido ilegal (es decir, la pornografía infantil, etc.) o incluso el contenido ilícito (es decir, la desnudez)?

Algunos formatos de imagen permiten incrustar una etiqueta de "calificación", pero si no puedes confiar en ella (o no hay una etiqueta para empezar), me temo que no tienes suerte. Hay hay algunos servicios en línea que califican una imagen en función de la extracción de características, pero hay consideraciones de costo, ancho de banda y eficacia. Eche un vistazo aquí . También había una pregunta sobre Desbordamiento de pila .

  

SIN EMBARGO, estoy seguro de que todos ustedes están sentados allí en casa riéndose de mi estupidez en el tema. A los expertos en seguridad no se les paga un salario, ya saben, seguros contra cosas tan elementales como las inyecciones de SQL.

Te sorprenderías ...

  

Dudo seriamente que ocurran violaciones de seguridad importantes debido a cualquiera de las posibles violaciones de seguridad que mencioné anteriormente.

... y ahora me estás haciendo llorar. No estoy tratando de ser halagador o congruente, pero la triste y triste verdad es que muchos de desarrolladores y jefes de proyectos altamente pagados realmente no piensan, implementan y prueban una décima parte de lo que usted cree. He 'considerado' por su cuenta. La seguridad parece no tener ROI, o como dijo Joel , está sumergido. Fácil de pasar por alto. Debido al tiempo de comercialización y la restricción presupuestaria para estar seguro, no es como si no lo hicieran si pudieran . Aún así, podría fácilmente nombrar varios sitios grandes , uno de los cuales parte de un proyecto costó en millones , donde las pequeñas mesas de Bobby tenían una entrada permanente de nivel de administrador. Uno donde la "seguridad" del panel de control de administración estaba asegurada "por el hecho de que la URL debía escribirse manualmente". Y aposté dólares a los cacahuetes para que la mayoría de los desarrolladores tengan su propia historia de horror.

    
respondido por el LSerni 23.12.2014 - 17:46
fuente

Lea otras preguntas en las etiquetas