Pyssly

Los robotsLa ficha del ladrón

La lista del ladrón

Cada día, algunos programas le piden a Pyssly archivos que nunca hemos tenido: contraseñas, código fuente y copias de seguridad. Aquí tienes la lista, cuántas veces los han pedido, por qué los quiere el ladrón y cómo proteger tu propio sitio.

Un robot de papel con un saco vacío se acerca a hurtadillas a un archivador.

¿Quién es el ladrón?

El ladrón casi nunca es una persona que se sienta a buscar. Es un programa que va de sitio en sitio con la misma lista y pide cada archivo de ella.

Si un sitio responde con el archivo, el ladrón ya tiene la llave, sin forzar nada. Pyssly no tiene ninguno de esos archivos, así que el ladrón recibe una página falsa y nosotros contamos la petición.

Si tienes una página web, un sitio o un servidor: asegúrate de que esos archivos no se puedan descargar. Al final te explicamos cómo comprobarlo.

Los más buscados

Las veces que los robots han pedido estos archivos a Pyssly.

Contando …

Contraseñas y claves

El mayor tesoro: un solo archivo con todo lo que abre el sitio.

Cómo protegerte

  • No pongas nunca secretos en la carpeta que muestra el servidor web. Léelos de variables de entorno o de un servicio de secretos (secrets de Kubernetes, GitHub Actions o la nube).
  • Bloquea en el servidor web todos los archivos y carpetas que empiezan por punto, salvo /.well-known/. Más abajo verás cómo.
  • No pongas nunca una clave privada en la carpeta web, y guarda para ti tus propias claves de acceso, protegidas con una frase de contraseña.

El código fuente

Todo el código del sitio, con cada cambio que se ha hecho alguna vez.

Cómo protegerte

  • No subas nunca la carpeta .git. Compila el sitio y sube solo lo compilado, o deja la carpeta fuera con un .dockerignore.
  • Bloquea también las carpetas que empiezan por punto en el servidor web, como seguridad extra.
  • Si alguna vez hubo una contraseña en el código, cámbiala. Borrarla en un cambio nuevo no basta: sigue en el historial.

Bases de datos y copias de seguridad

Copias que alguien dejó un rato en el servidor y luego olvidó.

Cómo protegerte

  • Guarda las copias de seguridad fuera de la carpeta web, mejor en otra máquina.
  • Bloquea .sql, .bak, .zip y similares en el servidor web.
  • No edites archivos directamente en el servidor: los editores dejan copias como .swp y ~.

WordPress

WordPress mueve buena parte de la web, así que el ladrón siempre prueba sus puertas, también en sitios que no usan WordPress, como Pyssly.

Cómo protegerte

  • Actualiza WordPress, los temas y los plugins, y borra los plugins que no uses.
  • Activa la verificación en dos pasos y desactiva xmlrpc.php si no lo necesitas.
  • WordPress también busca wp-config.php una carpeta por encima de su instalación. Muévelo ahí solo si esa carpeta no se sirve en la web, y no dejes nunca copias del archivo.

Herramientas de bases de datos

Programas que te dejan manejar la base de datos desde una página web.

Cómo protegerte

  • No pongas herramientas de bases de datos en el sitio público. Úsalas en tu ordenador y llega a la base de datos por un túnel SSH o una VPN.
  • Si tienen que estar ahí: ciérralas con un acceso extra o con una lista de direcciones permitidas.

Páginas de depuración

Páginas que los desarrolladores usan para mirar dentro de un sitio mientras funciona. Muy útiles en tu ordenador, peligrosas en la web.

Cómo protegerte

  • No ejecutes nunca un sitio en modo depuración en la web: APP_DEBUG=false y ningún entorno de desarrollo en producción.
  • Borra los archivos phpinfo y las herramientas de pruebas antes de publicar el sitio (composer install --no-dev).
  • Limita las páginas de gestión, como Actuator y server-status, a tu propia dirección o a una red interna.

Puertas viejas

Programas y páginas que el servidor ejecuta cuando alguien los pide.

Cómo protegerte

  • Quita todo lo que el servidor no necesite ejecutar: scripts viejos, páginas de prueba y carpetas como cgi-bin.
  • Cambia la contraseña de fábrica de routers y cámaras, actualízalos y no muestres nunca sus páginas de ajustes en internet.
  • Que se ejecute solo lo que debe ejecutarse: un archivo subido nunca debería poder ejecutarse como código.

Tiendas y sitios de phishing

Dos tipos de búsqueda que no son un robo inmediato, pero casi.

Cómo protegerte

  • Lo que una tienda muestra a todos lo puede leer cualquiera. No pongas nada secreto en los productos ni en sus campos.
  • Si ves en tu servidor una carpeta o un archivo que no reconoces, como lander/: puede que alguien haya entrado. Bórralo, cambia todas las contraseñas y actualiza todo.

Bloquear en el servidor web

La mejor protección es que los archivos nunca estén en el servidor. Estos bloqueos son una seguridad extra por si alguno acaba ahí.

Todos dejan abierta la carpeta /.well-known/, porque hace falta, por ejemplo, para los certificados. Pruébalos primero en un sitio de pruebas.

nginx Al principio del bloque server del sitio. nginx usa la primera regla regex que encaja, y una location ^~ (por ejemplo para /static/) se las salta del todo, así que pon las mismas reglas también dentro.
# First in the server block: nginx takes the first regex location that matches,
# and a location ^~ (such as /static/) skips them, so repeat these inside it.
# Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
location ~ /\.(?!well-known/) {
    return 404;
}
# Databases, backups and old copies
location ~* \.(sql|bak|old|orig|swp|zip|tar|gz|7z)$ {
    return 404;
}
Apache En la configuración del sitio o en .htaccess (Apache 2.4).
# Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
RedirectMatch 404 "/\.(?!well-known/)"
# Databases, backups and old copies
<FilesMatch "\.(sql|bak|old|orig|swp|zip|tar|gz|7z)$">
    Require all denied
</FilesMatch>
Caddy En el bloque del sitio en el Caddyfile.
# Dotfiles (.env, .git, .htaccess) at any depth, but not /.well-known/
@hidden {
    path_regexp /\.
    not path_regexp ^/\.well-known/([^./][^/]*/?)*$
}
respond @hidden 404
# Databases, backups and old copies, /.well-known/ included
@copies path_regexp \.(sql|bak|old|orig|swp|zip|tar|gz|7z)$
respond @copies 404
.dockerignore Decide qué entra en la imagen cuando se construye, en todas las carpetas. No cubre los archivos que se montan mientras el contenedor funciona, y no es un bloqueo en Traefik: el bloqueo va en la aplicación o en el servidor web.
**/.git
**/.env*
**/*.sql
**/*.bak
**/*.zip
**/id_*
**/*.tfvars

Cómo comprobarlo

Cinco minutos en una terminal. Cambia example.com por tu propia dirección.

Comprueba solo tu propio sitio. Buscar archivos ajenos es justo lo que hace el ladrón.

  1. Pide .env

    curl -sS -i https://example.com/.env

    Mira la respuesta y también el contenido. 404 o 403 está bien. Si llegan tus ajustes, el archivo es público. (Si el sitio responde 200 a todo, como muchas aplicaciones, el contenido debería ser tu página normal.)

  2. Pide .git

    curl -sS -i https://example.com/.git/HEAD

    Si ves una línea como ref: refs/heads/main, todo el código fuente está a la vista. Una página de error o tu página normal está bien.

  3. Prueba en otras carpetas

    curl -sS -i https://example.com/static/.env

    Un bloqueo puede faltar en carpetas que se sirven directamente, como /static/ o /assets/. Prueba ahí, y prueba más archivos de la lista, como un .sql o una copia vieja de un archivo de configuración. Lo que cuenta es si se ve el contenido.

  4. Mira el registro

    grep -E '\.env|\.git/|wp-login|phpinfo|\.sql' /var/log/nginx/access.log

    Las peticiones llegan todos los días, así que verlas no es raro. Un 200 en el registro no demuestra una filtración, porque muchas aplicaciones responden 200 con su página normal. Si ves un 200 para .env o .git/HEAD, pide la dirección como arriba y mira el contenido.

Si un archivo se ha filtrado

  • Borra el archivo y bloquea la dirección.
  • Cambia todas las contraseñas y claves que había en él: la base de datos, el correo, los servicios de pago y la cuenta en la nube. Da por hecho que el ladrón ya las tiene.
  • Mira en el registro quién descargó el archivo y si ha pasado algo con las cuentas desde entonces.

Más sobre ladrones y otros tipos de robots en Así funcionan los robots.