it-swarm-es.com

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

Estoy automatizando un script que busca comandos peligrosos en todos los archivos php en un sitio grande. El código de los archivos que se encuentran se revisará manualmente.

¿Alguien tiene alguna recomendación para mi guión? ¿Hay algo que me haya olvidado buscar? Tenga en cuenta que este script se creó en 10 minutos, por lo que estoy seguro de que se pueden hacer muchas mejoras para hacerlo más fácil y mejor (como múltiples argumentos 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 
8
Chris Dale

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 web-shells y otros scripts maliciosos.

Para tales propósitos, hace mucho tiempo, escribí mi propio script PHP para buscar lugares peligrosos: http://0x416d73.name/proj/fcc.html . 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. Le aconsejo que lo pruebe 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 PHP código, hace algún tiempo he creado un sencillo script bash - http://privatepaste.com/88a5d5eaa . It no está completo, puede requerir ajustes y críticas de bash guru's :)

Si desea continuar con su propio script, aquí hay una buena lista de la que puede extraer lo que necesita: http://privatepaste.com/dc335ccb86 .

Actualizado: como se descubrió, el tema trata sobre la revisión de código. Las soluciones mencionadas anteriormente todavía tienen sentido, pero luego me gustaría mencionar este proyecto: http://sourceforge.net/projects/rips-scanner/ . En mi opinión, actualmente es el mejor analizador de código fuente disponible gratuitamente para PHP aplicaciones web.

8
anonymous

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

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

Fuente abierta

Comercial

5
Scott Pack

No soy un genio de PHP, por lo que no tengo mucho que agregar en cuanto a cosas adicionales que buscar, pero debe tener en cuenta que cualquier tipo de espacio en blanco aleatorio estropeará sus hallazgos.
P.ej.

fopen  ( 

no se encontrará ...

3
AviD

Creo que extracto también es una construcción de lenguaje peligrosa. (Aunque se usa con menos frecuencia que eval (), no muchas personas se dan cuenta).

También puede intentar usar Php Code Sniffer y escribirlos como sus propios 'sniffs'. Aquí hay uno Escribí para un proyecto de código abierto en el que trabajo.

2
Mark E. Haase