Manual de uso de AccessScope
Esta guía explica cómo usar una herramienta de diagnóstico que encuentra intentos de ataque en los registros de acceso de un servidor, y muestra la línea de registro que los respalda. Primero se explica el diagnóstico desde la ventana, y el uso desde la línea de comandos está reunido en el capítulo 8.
1. Qué es AccessScope
AccessScope es una herramienta de diagnóstico que lee los registros que ya dejan los servidores web y SSH y busca intentos de ataque. Cada hallazgo se muestra con la línea de registro que lo respalda. Es útil para quien administra su propio servidor y quiere comprobar si en los registros quedó algún acceso sospechoso.
Los registros solo se leen. No se modifican ni se borran, no se bloquea ninguna comunicación y no se elevan privilegios. El diagnóstico en sí no usa ningún LLM ni la red.
| Entorno | Qué se puede usar |
|---|---|
| Mac (macOS 12 o posterior) | App con ventanas y comandos |
| Versión cliente de Linux | App con ventanas y comandos |
| Paquete Server Edition de Linux | Solo comandos |
En Mac viene dentro del DMG de RoamSwitch, y en Linux dentro de los paquetes deb, rpm y tarball de RoamSwitch. Es una herramienta independiente de RoamSwitch y su licencia es Apache License 2.0. Para abrirla, en Mac se elige el icono de la app, y en Linux se elige «AccessScope» en la lista de aplicaciones.
Archivos que se guardan
AccessScope guarda automáticamente los ajustes, la lista de registros encontrados, las reglas de exclusión y el registro de la comparación con la vez anterior. Todo se coloca bajo ~/.config/accessscope/ con permisos de lectura y escritura solo para el propio usuario.
Actualizaciones
En Mac, solo se conecta a lafine.net cuando se pulsa «Buscar actualizaciones» en «Actualizaciones» de los ajustes. No se envía información de este equipo ni de los registros, y el archivo descargado se instala después de comprobar su firma. En Linux no hay actualización dentro de la app, así que se actualiza con la actualización de los paquetes.
2. Su primer diagnóstico
- Elija los registros. Lo más sencillo es «Buscar registros en este equipo». Busca automáticamente los registros de nginx, Apache, SSH y otros, y los coloca en «Registros encontrados en este equipo». Si ya sabe dónde están, use «Elegir archivos» o «Elegir una carpeta», o arrastre archivos o carpetas sobre la ventana.
- Elija el «Periodo». El valor inicial es «Últimos 7 días», y también se puede cambiar a «Últimas 24 horas», «Últimos 30 días» o «Todo». El periodo se cuenta desde ahora, así que para diagnosticar registros antiguos elija «Todo».
- Pulse «Diagnosticar». Aparece el avance con «Leyendo registros» y «Analizando», y al terminar se abre el resultado.
3. Registros que se pueden leer y dónde buscarlos
El tipo de registro se reconoce automáticamente mirando su contenido. También se leen tal cual los registros rotados y comprimidos con gzip. Si se elige una carpeta, se leen de una vez los archivos que parecen registros.
| Tipo | Qué se puede leer |
|---|---|
| Servidor web | Apache, nginx, Caddy, Traefik, HAProxy, AWS ALB y CloudFront (se descargan los registros y se eligen con «Elegir archivos») |
| SSH y autenticación | sshd, sudo, su y PAM. En Linux se leen auth.log y secure, y también journald. En Mac se lee el registro unificado de macOS |
| Otros | fail2ban, correo (Postfix, Dovecot), bases de datos (MySQL, MariaDB, PostgreSQL) y registros de contenedores de Docker |
«Buscar registros en este equipo» revisa las ubicaciones estándar y las ubicaciones de registros a las que apuntan los archivos de configuración del servidor web. En la lista solo aparece lo que se ha comprobado que se puede leer como registro.
Contenedores de Docker
Si se marca «Comprobar también los contenedores de Docker», también se pueden incluir los registros de Docker de este equipo. Antes del diagnóstico, la pantalla de confirmación muestra los comandos que se ejecutarán y los contenedores afectados, y solo se leen cuando se pulsa «Aceptar y diagnosticar». Es solo lectura y no se elevan privilegios.
Buscar registros con un LLM (opcional)
Si no se encuentra nada, con «Buscar también con un LLM» se puede pedir a un LLM que busque las ubicaciones. Solo se le pasan datos del entorno, como el nombre de los servidores en marcha y los nombres de archivo en /var/log y similares, y nunca el contenido de los archivos. Las sugerencias aparecen con la casilla sin marcar, después de comprobar que se pueden leer. Para los ajustes, consulte el capítulo 7.
4. Cómo leer los resultados
Cuando termina el diagnóstico, el resultado se puede revisar en cuatro pestañas.
| Pestaña | Qué se ve |
|---|---|
| Panel | Riesgo global (Ninguno, Bajo, Medio, Alto), número de detecciones por gravedad y por categoría, evolución en el tiempo, y las IP y rutas con más solicitudes |
| Detecciones | Lista de las detecciones encontradas. Se puede filtrar por gravedad y buscar por título |
| Registros de entrada | Qué registros se leyeron y cuántas líneas. Los registros que no se pudieron leer y el motivo |
| Analizar con LLM | Hace que un LLM redacte el texto del informe (capítulo 7) |
Cómo leer una detección
Las detecciones se muestran con un nombre, como «Intentos de inyección SQL», y llevan una gravedad (Alta, Media, Baja) y una confianza. La confianza indica hasta dónde se puede afirmar algo solo con el registro.
- Confirmado es lo que se puede afirmar solo con el registro.
- Probable es lo que indica una alta probabilidad de que el intento ocurriera.
- Hipótesis es lo que no se puede comprobar solo con el registro.
Al abrir «Líneas de evidencia» se ven tal cual las líneas de registro en las que se basa esa detección. Normalmente están cerradas, así que primero lea el nombre y el motivo, y abra solo las que le llamen la atención.
El riesgo global (de 0 a 100) es una referencia ponderada por gravedad y confianza. No crece solo porque haya muchas detecciones, y si no hay ninguna detección de gravedad alta, no llega a «Alto». No es una probabilidad, así que tómelo solo como orientación.
5. Reducir lo que se ve
Reglas de exclusión
Las detecciones que ya se sabe que aparecerán, como la IP de la propia oficina, la monitorización de disponibilidad o los análisis de vulnerabilidades propios, se pueden quitar del informe. Las detecciones quitadas no se descartan, sino que se conserva su número junto con el motivo.
- En la pestaña «Detecciones», pulse «Excluir esta IP…» junto a la IP de la detección.
- Escriba el motivo y pulse «Añadir a las reglas de exclusión». El motivo queda en el informe.
- Compruebe el contenido en el cuadro de diálogo de confirmación y apruébelo. Surte efecto desde el siguiente diagnóstico.
En «Reglas de exclusión» de los ajustes aparece la lista de las reglas activas. Es solo para ver y aquí no se puede editar. Las reglas con condiciones detalladas se escriben en un archivo (suppress.toml) que se coloca en la carpeta de ajustes. La forma de escribirlo está en el capítulo 8. Las detecciones de gravedad «Alta» no se quitan aunque se excluyan y permanecen en el informe.
Comparación con la vez anterior
Si se diagnostica varias veces seguidas la misma combinación de registros, se compara con el registro anterior y las detecciones que aparecen por primera vez llevan la marca «Nueva». Si se marca «Solo nuevas» en la pestaña «Detecciones», se filtran solo las nuevas. La primera vez, todas se tratan como nuevas. En el registro solo entran la huella (hash) de la detección, el tipo, la gravedad, el número y la hora, y nunca el texto del registro.
6. Exportar los resultados
Con los botones de la parte superior de la pantalla de resultados se pueden sacar los resultados.
| Botón | Qué hace |
|---|---|
| Guardar informe (Markdown) | Guarda el informe del diagnóstico en un archivo Markdown |
| Copiar resumen | Copia el resumen al portapapeles |
| Exportar… | Exporta una lista de bloqueo (lista de IP) o la lista de detecciones |
En «Exportar…» se puede elegir como formato de la lista de bloqueo fail2ban-ip, nftables, ipset, nginx-deny, apache-require o csv. La lista de detecciones se puede exportar en CSV, SARIF o JSON.
En la lista de bloqueo se puede elegir «Qué incluir» entre «predeterminado», «más estricto» y «más amplio», y el número de IP que se exportarán se muestra antes de guardar. Las IP de los rastreadores oficiales y las IP afectadas por las reglas de exclusión nunca se incluyen.
7. Análisis con un LLM (opcional)
Es una función que hace que un LLM resuma en texto el resultado del diagnóstico. Está desactivada de forma predeterminada. Para usarla, en «Integración con LLM» de los ajustes marque «Activar el análisis con un LLM», elija el «LLM que se usará» y pulse «Guardar». Se puede elegir entre claude, opencode, codex y agy, los que tengan su comando instalado en el equipo.
Qué se envía
- No se envían los registros en bruto. Se envían las estadísticas y los datos de las detecciones, y por cada detección un máximo de 3 líneas de registro como evidencia (hasta 300 caracteres por línea).
- Los secretos, como claves, tokens y contraseñas, y las direcciones de correo se ocultan antes de enviarlos.
- Las IP se entregan de forma neutralizada, como
203[.]0[.]113[.]9. Si se marca «No enviar IP reales (usar seudónimos)», se sustituyen por seudónimos comoip-001.
Al pulsar «Mostrar exactamente lo que se enviará» en la pestaña «Analizar con LLM» se ve el texto completo que se enviará. Con esta acción no se envía nada. Solo se envía por primera vez cuando se pulsa «Analizar con LLM».
- El contenido de los registros lo puede escribir un atacante. AccessScope informa como detección de las cadenas que parecen instrucciones para una IA, y muestra la salida del LLM como una cita en la que no se confía. Un LLM también puede interpretar una detección como más grave de lo que es, así que compruebe las conclusiones con las líneas de registro que las respaldan.
- Con claude y opencode, AccessScope los inicia con las herramientas (ejecutar comandos y leer archivos) desactivadas. Con codex y agy no se pueden desactivar las herramientas, así que hay que marcar la confirmación que aparece en los ajustes. El análisis con LLM también puede usarse como root, pero el LLM se ejecuta entonces con los derechos de root; se recomienda un usuario sin privilegios (los ajustes muestran una nota mientras la app se ejecuta como root).
8. Uso desde la línea de comandos
En entornos solo de comandos, como Server Edition, o cuando se quiere ejecutar periódicamente con cron, se usa el comando accessscope. Es el mismo motor que la ventana, así que las detecciones que encuentra son las mismas.
accessscope discover
accessscope scan --auto --since 7d --report report.md
accessscope scan /var/log/nginx/access.log /var/log/auth.log
| Opción | Qué hace |
|---|---|
--auto | Busca registros en las ubicaciones estándar y otras, y los diagnostica. Con --since 7d se puede acotar el periodo |
--report FILE | Escribe un informe en Markdown |
--format json|csv|sarif | Cambia el formato de la salida estándar |
--export-blocklist FORMAT[:FILE] | Exporta una lista de bloqueo |
--fail-on high|medium|low | Si hay detecciones de esa gravedad o superior, termina con el código de salida 3 |
--since-last、--new-only | Compara con la vez anterior y muestra solo las detecciones nuevas |
--llm NAME、--show-prompt | Hace que un LLM analice. --show-prompt muestra el texto completo que se enviaría y termina (no se envía nada) |
Ejecutarlo cada día con cron
accessscope scan --auto --since 24h --since-last --new-only --fail-on medium
Muestra solo las detecciones que no estaban en la ejecución anterior, y termina con el código de salida 3 únicamente cuando las detecciones nuevas son de gravedad media o superior. El diagnóstico sin --llm también funciona como root.
Cómo se escribe suppress.toml
Las reglas de exclusión se escriben en ~/.config/accessscope/suppress.toml. Si el archivo existe, se lee automáticamente.
[[rule]]
reason = "office"
ip = ["203.0.113.0/28"]
expires = 2027-03-31
[[rule]]
reason = "uptime monitor"
ua_prefix = ["Mozilla/5.0 (compatible; UptimeRobot"]
path_prefix = ["/healthz"]
- Una regla se aplica a las solicitudes que coinciden con todos los campos escritos.
reasones obligatorio y aparece en todos los informes. Las reglas pasadas suexpiresno se aplican. - Las detecciones de gravedad «Alta» no se quitan si la regla no lleva
allow_high = true. - El User-Agent y la ruta son valores que puede escribir el cliente. Una regla que no incluya la IP y se limite a ellos no puede quitar detecciones de ataques, de autenticación, de web shells y similares.
9. Lo que no puede hacer
- Solo se ve lo que quedó en los registros. No se sabe el cuerpo de las solicitudes, el contenido de las respuestas, el estado interno de la aplicación ni el periodo que se perdió al rotar los registros. Que no haya detecciones no demuestra que todo esté seguro.
- Una detección significa que «hubo un intento» y no es prueba de que tuviera éxito. El User-Agent es una autodeclaración y se puede falsificar.
- Las cadenas que abarcan varios registros se basan únicamente en el hecho de que la dirección es la misma. Detrás de un NAT o un proxy, personas sin relación aparecen con la misma dirección. Las direcciones internas (un proxy inverso o una pasarela de Docker) representan a muchos clientes a la vez, por lo que no se incluyen en una cadena. Una cadena sin indicios de éxito recibe la gravedad «baja».
- «Inicios de sesión desde un origen poco habitual» significa que el origen es poco habitual para ese registro, y no tiene por qué ser fraudulento. «Cambios respecto a lo habitual» solo indica un cambio y no tiene por qué ser un ataque.
- Los registros de AWS ALB y CloudFront se han probado con líneas creadas según las definiciones de la documentación de AWS, y no con salidas reales de AWS.
10. Si algo no funciona
Aparece en «Registros que ahora no se pueden leer»
Es lo que se muestra cuando faltan permisos. AccessScope no eleva privilegios para leer. Resuélvalo con una de las siguientes opciones.
- Para los registros en archivos, inicie con un usuario que tenga permisos, o elija una copia del registro con «Elegir archivos».
- Para journald en Linux, inicie como root o con un usuario de los grupos adm, systemd-journal o wheel.
- Para el registro unificado de macOS, inicie con un usuario del grupo admin.
Aparece «No se encontraron registros que se puedan diagnosticar»
El motivo se muestra en una frase. Por ejemplo, aparece «No hay registros de servidor web (Apache, nginx, etc.)». En Mac, cuando no hay registros de SSH, aparece «Es posible que el inicio de sesión remoto (SSH) esté desactivado». Con «Elegir archivos», «Buscar con un LLM» e «Indicar otra ubicación», que aparecen en pantalla, se puede probar el siguiente paso. Para saber dónde se buscó, abra «Resultado detallado de la búsqueda», que está cerrado.
Aparece «No se pudieron leer los registros de Docker»
Puede ser por una de estas causas. Docker no se está ejecutando, no se encuentra Docker, no hay permisos o Docker devolvió un error. Si faltan permisos, inicie AccessScope con un usuario que pueda usar Docker. AccessScope no vuelve a leer elevando privilegios, ni pide ni recomienda unirse al grupo docker, porque los permisos del grupo docker equivalen a los de root en el host.
Aparece «No se pudo leer como registro»
Es lo que se muestra cuando no se pudo analizar ni una sola línea del archivo elegido. Ese archivo no se incluye en el diagnóstico y no se envía a ningún sitio. Compruebe si es un tipo de registro compatible y vuelva a elegirlo.
No se puede pulsar «Analizar con LLM»
Junto al botón aparece el motivo. Si aparece «La integración con LLM está desactivada», actívela en los ajustes. Si aparece «No hay ningún LLM seleccionado», elíjalo en los ajustes. Tampoco se puede usar si se inició como root o si el comando del LLM que se va a usar no está instalado en el equipo.
El origen de los accesos es siempre la IP del proxy
En registros que están detrás de un proxy inverso o de una CDN, el origen del acceso puede ser la IP del proxy. Con el valor inicial «Automático», la IP del cliente se decide a partir de X-Forwarded-For solo para las líneas cuyo origen registrado es una dirección interna, como un proxy inverso o una pasarela de Docker. Las líneas que llegaron directamente desde fuera conservan el origen registrado. Como la cabecera se puede falsificar, una IP decidida así nunca se trata como un rastreador verificado. Para desactivarlo, elija «No usar» en «Análisis» de los ajustes. También se puede elegir usar la primera dirección desde la derecha que no sea un proxy de confianza, o la dirección situada más a la izquierda; como el cliente puede reescribir este valor, úselas solo detrás de un intermediario de confianza que usted administre. Surte efecto desde el siguiente diagnóstico.