Cosas para buscar una puerta trasera en el código fuente de la aplicación web (archivos .PHP, .JS, etc.) [cerrado]

-1

Estoy en el proceso de agregar funcionalidad a una aplicación web y recibiré algunos archivos de origen (PHP, JS y CSS) de un desarrollador externo contratado.

Estos archivos no están ofuscados ni encriptados y no tendrán ninguna rareza evidente, como un encabezado que comienza con "GIF89a". Lo que quería verificar era cualquier rareza algo menos obvia, como el código que podría usarse para implementar una puerta trasera.

[Actualización: destacó esta oración incluida anteriormente:] Entonces, lo que me gustaría hacer es un escaneo de globo ocular en busca de palabras clave o construcciones simples en el código fuente que se puede usar para este propósito. Mi pensamiento es que pediría una aclaración del desarrollador para cualquier cosa que pueda encontrar (si no puedo determinar lo que hace) en lugar de pedirle que explique cada línea en cada archivo.

La aplicación web solo utiliza el lado del servidor PHP 5.6 y el lado del cliente JS (además de CSS y HTML). Por lo tanto, cualquier funcionalidad de puerta trasera se limitaría a lo que estas tecnologías pueden proporcionar.

Una de las construcciones que buscaré en los archivos PHP y JS son las expresiones que contengan una declaración eval ().

¿Hay otras palabras clave además de eval que pueda verificar?

[Actualización adicional:] En esta etapa, estaba buscando un escaneo del globo ocular de los elementos que pueden requerir una discusión adicional con el desarrollador. Debido al tiempo y otras limitaciones, no estaba buscando evitar todas las posibles vulnerabilidades, ni tampoco estoy tratando de comprender cada una de las miles de líneas de código que estarán en estos archivos.

    
pregunta coderworks 06.10.2015 - 17:04
fuente

2 respuestas

1

Me temo que no es tan simple. Algunas construcciones de lenguaje no son malas en sí mismas, pero su uso en algunos lugares puede hacer que la aplicación sea vulnerable. Considera, por ejemplo, Función strcmp de PHP: se ve bien, no hay vulnerabilidades reportadas, sin embargo, aún puede omitirla si se alimenta directamente con la entrada del usuario. Entonces, si yo fuera usted, consideraría una revisión profunda del código en lugar de un simple escaneo del globo ocular. Cuanta más experiencia tenga, más riesgos de seguridad "no tan obvios" podrá detectar.

Una breve lista para ayudarlo a comenzar con una revisión de la exploración del globo ocular:

  • ¿La entrada del usuario se maneja de manera adecuada y segura?
  • ¿Se realizan controles de igualdad con ===?
  • ¿Se utilizan funciones en desuso?
  • ¿Eres capaz de entender el código?

En general, hay muchas más cosas que debe tener en cuenta y la lista crece aún más con la complejidad de la aplicación. P.ej. puede (debería) querer asegurarse de que todos los algoritmos criptográficos se usen de manera adecuada y que la implementación utilizada sea correcta y segura. Existe una gestión de archivos, conexión de base de datos y potencialmente decenas de otras fuentes de datos con las que se está comunicando su aplicación.

Si siente que no puede manejarlo usted mismo debido a la falta de experiencia o algo así, le recomiendo pedir ayuda a alguien. En realidad, incluso si está seguro de poder hacerlo, pídale a alguien que compruebe dos veces: siempre es mejor tener dos pares de ojos en el código no confiable, que uno.

    
respondido por el Hipolith 06.10.2015 - 18:09
fuente
0

PHP

Por razones de seguridad, puede bloquear las funciones de PHP por nombre en su PHP.ini, por lo que si están en el código no se pueden ejecutar. Aquí hay una placa de caldera de lo que normalmente uso.

disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec, system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo

Puede haber usos legítimos a los anteriores. Pero lo mejor es descubrir por qué, antes de que los pongas en la lista blanca. Incluso si su programador no los está utilizando por razones negativas, podría haber partes mal codificadas que permiten a un pirata informático abusar de esas funciones.

Usted sabe eval pero debería notar shell_exec , exec , system y passthru . Esto le permitirá a su desarrollador interactuar con el sistema directamente. Y para la mayoría de las situaciones, su configuración de PHP no debería permitirlo. También tenga en cuenta cuántos les permitirían interactuar con los procesos en ejecución en su servidor.

Además, volvería a verificar cualquier requisito e incluye. Con una configuración PHP adecuada, no puede incluirlo de forma remota, pero no estaría de más. También buscaría lo mismo usando las funciones fopen y CURL. Si lo encuentra, tiene el potencial de cargar código remoto sin que usted pueda revisarlo o buscarlo.

JavaScript

No puede hacer una puerta trasera a un servidor, ya que JavaScript solo ejecuta el lado del cliente (asumiendo que no está usando Node.js). Pero podrían ponerte en riesgo de un ataque XSS. Asegúrese de que no estén intentando cargar scripts remotos a menos que provengan de un CDN aprobado y confiable. Y asegúrese de que su JavaScript no intente adjuntar ningún elemento de script a su documento que pueda cargarse en archivos JavaScript remotos.

    
respondido por el Bacon Brad 06.10.2015 - 17:45
fuente

Lea otras preguntas en las etiquetas