27 de agosto de 2015

WP-CLI para Auditores II


Una nueva entrada, y la idea de hoy es explorar algunas cosas que WP-CLI trae y que podemos sacar partido en cada auditoría que tengamos que llevar adelante.

Mi primera recomendación, es que siempre tengan presente el modo de instalar WP-CLI, yo soy partidario de descarga la herramienta, utilizarla y finalmente eliminarla, con esto siempre vamos a estar utilizando la última versión y no dejarlo dentro del sistema que quizás nunca más se vuelva a utilizar, esto simplemente es una apreciación personal.

Los comandos y argumentos asociados a WP-CLI son en algunos casos bastante intuitivos y con bastante ayuda dentro de la línea de comandos, de todas maneras y para consultas específicas, lo mejor que pueden hacer es recurrir a la documentación oficial del proyecto.

Nos afrontamos a un proceso de auditoría sobre una instancia de WordPress que aparentemente fue vulnerada o comprometida, ya sea que depositaron algún backdoor o lograron descifrar las credenciales de un usuario y cambiaron la integridad del mismo.

Con el mayor de los recaudo posibles tratamos de sacarla de línea a dicha web pero evitar que los usuarios continúen accediendo, por otro lado realizamos una copia de seguridad de todo el sitio y su base de datos para luego poder reproducirlo en un entorno controlado y poder hacer alguna de las pruebas.

Estaremos o no de acuerdo que este proceso nos va a llevar mas tiempo, o quizás implica asignar el doble de recursos, sin embargo para garantizar un buen trabajo de auditoría y posteriormente una buena restauración de las cosas, es mucho mejor y más cómodo trabajar con esta metodología.

Las auditorías implican conocer un poco más de información sobre lo que estamos trabajando, para este caso es buenos saber las versiones de cada componente y tomar nota de todas y cada una de las cosas.

Afortunadamente WP-CLI esta para ayudarnos y dentro de la instancia de WordPress que estamos auditando podemos ejecutar el argumento core para obtener más información:

$ ./wp-cli.phar core
usage: wp core check-update [--minor] [--major] [--field=<field>] [--fields=<fields>] [--format=<format>]
   or: wp core config --dbname=<dbname> --dbuser=<dbuser> [--dbpass=<dbpass>] [--dbhost=<dbhost>] [--dbprefix=<dbprefix>] [--dbcharset=<dbcharset>] [--dbcollate=<dbcollate>] [--locale=<locale>] [--extra-php] [--skip-salts] [--skip-check]
   or: wp core download [--path=<path>] [--locale=<locale>] [--version=<version>] [--force]
   or: wp core install --url=<url> --title=<site-title> --admin_user=<username> --admin_password=<password> --admin_email=<email>
   or: wp core is-installed [--network]
   or: wp core language <command>
   or: wp core multisite-convert [--title=<network-title>] [--base=<url-path>] [--subdomains]
   or: wp core multisite-install [--url=<url>] [--base=<url-path>] [--subdomains] --title=<site-title> --admin_user=<username> --admin_password=<password> --admin_email=<email>
   or: wp core update [<zip>] [--version=<version>] [--force] [--locale=<locale>]
   or: wp core update-db 
   or: wp core verify-checksums 
   or: wp core version [--extra]

See 'wp help core <command>' for more information on a specific command.

Es importante no intentar actualizar absolutamente nada, estamos en la fase de recopilar todo tipo de información actual.

Para determinar la version de WordPress lo podemos hacer de la siguiente manera:

$ ./wp-cli.phar core version
4.2.2

$ ./wp-cli.phar core version --extra
WordPress version: 4.2.2
Database revision: 31535
TinyMCE version:   4.109 (4109-20150505)

Mientra más detallada sea la información, en muchos casos va a ser mejor.

En un modo paranoico podemos verificar algunos archivos dentro de WordPress para realizar las comprobaciones:

$ cat wp-includes/version.php

Ahora que ya contamos con la información de WordPress, podemos verificar si dentro del core tenemos alguna actualización:

$ ./wp-cli.phar core check-update
+---------+-------------+-------------------------------------------+
| version | update_type | package_url                               |
+---------+-------------+-------------------------------------------+
| 4.3     | major       | https://wordpress.org/wordpress-4.3.zip   |
| 4.2.4   | minor       | https://wordpress.org/wordpress-4.2.4.zip |
+---------+-------------+-------------------------------------------+

Por otro lado, podemos obtener información del lenguaje que se encuentra activo:

$ ./wp-cli.phar core language list 

Aquí, vamos a poder ver un gran listado donde figura el lenguaje, el estado que tiene y su última actualización, mientras continuamos obteniendo más información.

Finalmente, si a la instancia de WordPress se le modificó alguno de los archivos importante, podemos realizar una verificación por medio de checksums y obtener una aproximación del problema.

Veamos los siguiente ejemplos:

$ ./wp-cli.phar core verify-checksums
Success: WordPress install verifies against checksums.

Como se puede ver, la comprobación fue exitosa, ahora les propongo modificar de forma intencional alguno de los archivos que incorpora wordpress, por ejemplo wp-comments-post.php incorporando algunos espacios o saltas de línea, volviendo a realizar la comprobación obtenemos lo siguiente:

$ ./wp-cli.phar core verify-checksums
Warning: File doesn't verify against checksum: wp-comments-post.php
Error: WordPress install doesn't verify against checksums.

Es bueno aclarar un punto, esta verificación por checksums no va a lograr determinar cuando por ejemplo agregamos algún archivo, suponiendo el caso que se agregó en /wp-content/plugins/backdoor.php esto lo va a pasar por alto, por esta razón tenemos que tener mucho cuidado en los reportes y el análisis que vamos a realizar de esta información que vamos recopilando.

Hasta aquí, son temas sumamente interesantes verdad? Buenos los invito a seguir en las próximas entregas.

Saludos!

No hay comentarios.:

Publicar un comentario

Entradas populares