Hacer una búsqueda a través de archivos php para llamadas peligrosas para revisión manual

8

Estoy automatizando un script que busca a través de todos los archivos php en un sitio grande en busca de comandos peligrosos. Los archivos que se encuentren serán revisados manualmente.

¿Alguien tiene alguna recomendación para mi script? ¿Hay algo que haya olvidado buscar? Tenga en cuenta que esta secuencia de comandos se creó en 10 minutos, por lo que estoy seguro de que hay muchas mejoras que se pueden hacer para que sea más fácil y mejor (como varios argumentos de egrep).

find . | grep "php$" | xargs grep -s "eval(" >> /tmp/review.txt
find . | grep "php$" | xargs grep -s "fopen(" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "passthru(" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "exec(" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "proc_" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "dl(" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "require($" >> /tmp/review.txt
find . | grep "php$" | xargs grep -s "require_once($" >> /tmp/review.txt
find . | grep "php$" | xargs grep -s "include($" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "include_once($" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "include($" >> /tmp/review.txt 
find . | grep "php$" | xargs grep -s "query(" >> /tmp/review.txt 
    
pregunta Chris Dale 10.12.2010 - 14:34
fuente

4 respuestas

8

Definitivamente esta lista no es suficiente. En primer lugar, no está completo, en segundo lugar, se pueden utilizar diferentes métodos de ofuscación para ocultar shells web, otros scripts maliciosos.

Hace mucho tiempo que escribí mi propio script PHP para buscar lugares peligrosos: enlace . Está escrito en PHP, así que no espere que sea tan rápido como el comando "buscar". Sin embargo, permite verificar hashes de archivos, ver qué archivos han aparecido, faltan o han cambiado. Te aconsejo que lo pruebes primero con un pequeño script, solo para sentir cómo funciona, antes de ejecutarlo en el servidor de producción. Además, específicamente para la búsqueda de vulnerabilidades en el código PHP, hace un tiempo he reunido un sencillo script de bash - enlace . No está completo, podría requerir afinaciones y críticas de parte de bash guru :)

Si desea continuar con su propio script, aquí hay una buena lista de la que puede extraer lo que necesita: enlace .

Actualizado: según se descubrió, el tema trata sobre la revisión del código. Las soluciones mencionadas anteriormente todavía tienen sentido, pero luego me gustaría mencionar este proyecto: enlace . En mi opinión, actualmente es el mejor analizador de código fuente disponible de forma gratuita para las aplicaciones web de PHP.

    
respondido por el anonymous 10.12.2010 - 15:06
fuente
5

Aunque no tengo experiencia directa en el uso de herramientas de análisis estático en PHP, parece que hay una serie de herramientas, tanto de código abierto como comerciales, disponibles para su uso.

En pocas palabras, parece que PHPLint debería ser bastante rápido y fácil de usar. Mi interpretación indica que funciona de manera muy similar a la pelusa / férula para C, que he usado y me gustó.

OpenSource

Comercial

respondido por el Scott Pack 10.12.2010 - 16:34
fuente
3

No soy un genio de PHP, por lo que no tengo mucho que agregar a la búsqueda de cosas adicionales, pero debes tener en cuenta que cualquier tipo de espacio en blanco al azar desordenará tus hallazgos.
Por ejemplo,

fopen  ( 

no se encontrará ...

    
respondido por el AviD 11.12.2010 - 22:27
fuente
2

Creo que extracto también es una construcción de lenguaje peligrosa. (Aunque se usa más raramente que eval (), por lo que no mucha gente se da cuenta).

También puedes probar a usar Php Code Sniffer y escribir estos como tus propios 'sniffs'. Aquí hay uno que escribí para un proyecto de código abierto en el que trabajo.

    
respondido por el Mark E. Haase 22.12.2011 - 19:58
fuente

Lea otras preguntas en las etiquetas