Asegurar su aplicaci贸n Node.js

    De forma predeterminada, Node.js es bastante seguro por s铆 mismo. Aunque, definitivamente hay cosas de las que debes tener cuidado. Si su aplicaci贸n web Node comienza a volverse cada vez m谩s popular, por ejemplo, tendr谩 que pensar cada vez m谩s en la seguridad para asegurarse de mantener seguros los datos de sus usuarios.

    Despu茅s de ver algunas preguntas sobre la seguridad de Node.js en la web en las 煤ltimas semanas, pens茅 que ser铆a 煤til escribir una gu铆a breve sobre lo que puede hacer para proteger sus aplicaciones.

    Muchas, si no todas, las sugerencias aqu铆 son realmente f谩ciles de seguir e implementar, y en su mayor铆a son espec铆ficas de Node o sus m贸dulos. Por lo tanto, no cubrir茅 cosas como el cifrado o la autenticaci贸n de usuario, que est谩 un poco fuera del alcance de este art铆culo. Muchos de los consejos aqu铆 se centrar谩n en los marcos web de Node, ya que suelen ser los m谩s vulnerables a los ataques.

    No ejecute c贸digo con Sudo

    Esto sucede mucho m谩s de lo que cree y es peligroso. Dado que otorga permisos de root, ejecutar c贸digo con sudo puede hacer que desaparezcan problemas molestos, como escribir en un directorio que el usuario no posee. Pero esa es solo la salida m谩s f谩cil, y estos atajos plantean un l铆o de otros problemas que no debe ignorar.

    En su lugar, encuentre la causa ra铆z del problema y descubra una manera de solucionarlo sin comprometer todo el sistema.

    Entonces, por ejemplo, si necesita abrir el puerto 80 para un servicio web pero no puede porque no est谩 ejecutando bajo root, deber铆a usar un proxy como Nginx para reenviar las solicitudes desde el puerto 80 a cualquier otro puerto en el que se est茅 ejecutando su servicio.

    Si se ejecuta bajo root y los atacantes se apoderan de su aplicaci贸n, pueden hacer lo que quieran con su sistema y sus datos. Este es el peor de los casos del que est谩 tratando de protegerse.

    Evitar eval cueste lo que cueste

    De acuerdo, lo admito, a veces puede ser tentador hacer que su c贸digo sea m谩s din谩mico al permitirle ejecutar JavaScript arbitrario usando eval, pero cr茅ame, esta es una mala idea.

    Algunas personas incluso intentan usarlo cuando se les da pereza analizar la entrada del usuario. Despu茅s de todo, el motor JavaScript V8 es realmente bueno para analizar cosas como operaciones matem谩ticas simples, por lo que ser铆a tentador usar eso para su ventaja:

    var result = eval('(13 + (2 * 23.249) / 0.981)');
    // result = 60.398572884811415
    

    Hay demasiadas formas en que esto puede volver a morderlo. A menos que sea un experto y sepa c贸mo protegerse de todos los diferentes tipos de JavaScript malicioso c贸digo, simplemente mant茅ngase alejado de esto.

    Aqu铆 hay un ejemplo simple del exploit:

    var userInput = req.body.userInput;    // User entered 'process.exit()'
    var answer = eval(userInput);          // App quits here
    

    La ejecuci贸n de este c贸digo cerrar谩 su aplicaci贸n, provocando una denegaci贸n de servicio (DOS) a sus usuarios.

    Agregar / quitar encabezados HTTP

    Hay bastantes encabezados HTTP que pueden ayudarte y perjudicarte. Usar los correctos de la manera correcta es la parte complicada.

    Express, por defecto, agrega el X-Powered-By: Express header, que realmente no hace m谩s que decirles a los atacantes potenciales qu茅 marco web est谩 utilizando y, por lo tanto, c贸mo explotarlo en funci贸n de las vulnerabilidades conocidas p煤blicamente. Cuanta m谩s informaci贸n tengan sobre su pila de tecnolog铆a, m谩s formas podr谩n atacarla.

    Ah铆 es donde Yelmo entra en juego. Helmet es un peque帽o m贸dulo para Node que ayuda a proteger las aplicaciones Express / Connect al agregar / eliminar varios encabezados HTTP.

    Puedes hacer cualquier cosa desde habilitar HSTS para prevenir ataques de click-jacking. Estas son cosas que requieren poco o ning煤n trabajo de su parte, pero pueden marcar una gran diferencia. Entonces, si est谩 creando una aplicaci贸n Express, esto deber铆a ser una obviedad (y realmente, para cualquier servicio web, debe hacerlo).

    Utilice utilidades de escaneo como Retire.js

    No todos los programadores son expertos en seguridad y, si bien debe hacer todo lo posible para mantenerse actualizado sobre exploits comunes como XSS o inyecci贸n SQL, es dif铆cil conocerlos todos.

    Para compensar esto, deber铆a intentar usar herramientas como Retire.js, que analiza su aplicaci贸n Node en busca de dependencias que contengan vulnerabilidades.

    Por ejemplo, Ember.js tiene una vulnerabilidad XSS espec铆fica en algunas versiones diferentes (CVE-2014-0046), todos los cuales son verificados por Retire.js. Cuando ejecutas retire en el directorio de su proyecto, comparar谩 paquetes en node_modules a un repositorio p煤blico de vulnerabilidades e informarle cu谩les de sus dependencias son inseguras.

    Hay demasiadas vulnerabilidades en muchos de estos paquetes para que las revise usted mismo, por lo que es mejor dejar que una herramienta como esta lo haga por usted.

    Puede hacer que esto sea parte de su flujo de trabajo f谩cilmente integr谩ndolo con Grunt o Gulp, gracias a los plugins proporcionados. Los detalles est谩n en el archivo README.

    Otra opci贸n es ejecutarlo en un prepublish comando, que se ejecutar铆a antes de que npm env铆e su paquete al repositorio. Simplemente agregue algo como esto a su package.json:

    {
      "name": "myProject",
      "version": "0.0.1",
      "scripts": {
        "prepublish": "retire",
      }
    }
    

    Tenga cuidado con el child_process M贸dulo

    Me gusta eval, utilizando spawn y exec desde el child_process El m贸dulo puede ser realmente 煤til, pero tambi茅n muy peligroso. Cualquier entrada del usuario que ingrese a estos comandos podr铆a significar que su sistema se vea comprometido con bastante rapidez (隆especialmente si est谩 ejecutando su aplicaci贸n con sudo!).

    Por ejemplo, Magia de la imagen es una herramienta de l铆nea de comandos muy popular para mostrar, convertir y editar im谩genes. Con tantas aplicaciones web que usan im谩genes en estos d铆as, Image Magick se usa a menudo en segundo plano para cosas como recortar y cambiar el tama帽o. Para usar esta herramienta con Node, es posible que vea un c贸digo como este:

    child = child_process.exec('convert ' + imageFilename + ' ' + imageFilename + '.bmp', ['-depth', '24'], function(err, stdout, stderr) {
        console.log('Done');
    });
    

    Esto puede parecer inofensivo, pero con un dise帽o cuidadosamente elaborado imageFilename, puede ejecutar cualquier c贸digo que desee en el shell.

    exec solo debe usarse si no depende de la entrada del usuario o si los argumentos est谩n muy desinfectados. A煤n mejor, busque en npm una biblioteca que envuelva la herramienta de l铆nea de comandos. Por lo general, se crean con este tipo de seguridad en mente, o al menos tienen m谩s ojos en el c贸digo para verificar si hay problemas. Para Image Magick, hay algunos m贸dulos disponibles, como gm.

    Comprender las vulnerabilidades

    Muchas vulnerabilidades en las aplicaciones web se aplican a todos los servicios, independientemente del lenguaje de programaci贸n y el marco utilizado. Sin embargo, la forma en que ataca esos servicios puede diferir seg煤n la pila de tecnolog铆a que est茅 utilizando. Para defenderse mejor, realmente necesita aprender c贸mo funcionan estos exploits.

    Suerte para ti, OWASP publica una lista de los 10 principales riesgos para las aplicaciones web. Rev铆selos y luego haga un an谩lisis exhaustivo de su sitio web para ver si alguno de ellos se aplica a usted.

    A煤n mejor, echa un vistazo nodeCabra, que es un sitio web desplegable creado por OWASP destinado a ense帽arle c贸mo identificar estos riesgos en aplicaciones de node espec铆ficamente. No hay mejor manera de aprender estos conceptos que hacerlo usted mismo.

    los tutorial proporcionado lo guiar谩 a trav茅s de todos los riesgos, mostrando ejemplos espec铆ficos de c贸mo explotar y defenderse de las vulnerabilidades. Por ejemplo, aqu铆 hay un video proporcionado por OWASP que muestra c贸mo inyectar JavaScript usando un formulario web:

    M谩s informaci贸n

    La seguridad de los nodes es un tema importante, por lo que no ser铆a razonable intentar cubrirlo todo aqu铆. Si est谩 interesado en obtener m谩s detalles, le sugiero que lea algunos recursos m谩s, como estos:

    Conclusi贸n

    Con demasiada frecuencia, la seguridad de una aplicaci贸n es una idea posterior del desarrollo y el dise帽o. Ya es bastante dif铆cil hacer que su c贸digo funcione correctamente, y mucho menos hacer que sea seguro para sus usuarios.

    Afortunadamente, no eres el 煤nico que est谩 pasando por estos problemas, por lo que eso significa que hay muchas herramientas y recursos creados por otros para ayudarte a proteger tus aplicaciones de forma r谩pida y sencilla. Solo t贸mate el tiempo para buscar NPM, hacer preguntas en foros o incluso contratar a un experto. 隆Definitivamente vale la pena el tiempo y el dinero!

    驴De qu茅 otras formas protege sus aplicaciones de Node? 隆H谩znoslo saber en los comentarios!

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *