OP.ACC.6 Acceso local
Finalidad
Este documento define los controles para el acceso local al sistema de información conforme al control OP.ACC.6 del Anexo II del Real Decreto 311/2022, aplicable a un sistema de categoría ALTO. El acceso local se refiere a las conexiones realizadas desde estaciones de trabajo y dispositivos dentro de la red de la organización.
Controles de acceso local
La organización aplica las siguientes medidas para el acceso local:
Antes de conceder el acceso
- Se muestra exclusivamente el diálogo de autenticación, evitando información que pueda atraer a usuarios no autorizados (no se indica el tipo de información que contiene el sistema).
- Se requiere identificación y autenticación conforme a OP.ACC.1 y OP.ACC.5.
- Para categoría ALTO, se requiere autenticación de doble factor en el acceso local.
Bloqueo por intentos fallidos
Se limita a 3 intentos fallidos consecutivos antes de bloquear la cuenta, impidiendo ataques de fuerza bruta. El bloqueo se gestiona conforme a la política de autenticación (OP.ACC.5).
Registro de accesos
Se registran todos los accesos al sistema, tanto exitosos como fallidos, incluyendo:
- Identificador del usuario.
- Fecha y hora.
- Resultado (exitoso o fallido).
- Dirección de origen.
Los registros se conservan durante un mínimo de 2 años (requisito para categoría ALTO) y se revisan periódicamente o mediante herramientas automatizadas para detectar patrones anómalos.
Notificación al usuario
Tras un acceso exitoso, el sistema informa al usuario del último acceso realizado con su identidad (fecha y hora), permitiéndole detectar posibles suplantaciones.
Restricción de horarios y ubicaciones
Se controla el acceso al sistema restringiendo, cuando proceda, los horarios y las ubicaciones desde las que se permite el acceso. Las excepciones se documentan y justifican.
Entorno protegido
Para categoría ALTO, el acceso local se realiza desde un entorno protegido que cumple las siguientes condiciones:
- Las estaciones de trabajo están configuradas conforme a las guías CCN-STIC aplicables (Serie 500 para entornos Windows, Serie 600 para otros entornos).
- El cifrado de disco está habilitado.
- El firewall local está activo.
- Las actualizaciones de seguridad se aplican de forma periódica.
- Los dispositivos de almacenamiento extraíble están deshabilitados salvo autorización expresa del Responsable de Seguridad.
Verificación puntual de identidad
En puntos críticos del sistema se requiere verificación adicional de la identidad del usuario (por ejemplo, para operaciones sensibles), acotando la ventana de riesgo ante un posible robo de sesión.
Implementación técnica en macOS
Todos los equipos del alcance del ENS son MacBook Pro con macOS. La implementación de los controles de acceso local se realiza mediante scripts nativos de macOS, sin necesidad de un MDM (Mobile Device Management) externo.
Aviso de derechos y obligaciones en la pantalla de inicio de sesion
La pantalla de inicio de sesion de macOS muestra un aviso legal permanente que informa al usuario de sus derechos y obligaciones antes de acceder al sistema. Se configura mediante defaults write en las preferencias del sistema, lo que garantiza que el mensaje persiste entre reinicios sin necesidad de LaunchAgents ni scripts adicionales.
Configuracion (requiere sudo):
sudo defaults write /Library/Preferences/com.apple.loginwindow LoginwindowText -string \
"AVISO LEGAL: Este equipo es propiedad de la empresa y esta sujeto a las politicas de seguridad del Esquema Nacional de Seguridad (RD 311/2022). Al acceder, usted acepta las obligaciones establecidas en la Normativa de Seguridad. El uso de este sistema es monitorizado. Cualquier uso no autorizado puede dar lugar a medidas disciplinarias y/o legales."
Verificacion:
defaults read /Library/Preferences/com.apple.loginwindow LoginwindowText
Ultimo inicio de sesion
macOS muestra la fecha y hora del ultimo inicio de sesion en la pantalla de login, permitiendo al usuario detectar accesos no autorizados.
Configuracion (requiere sudo):
sudo defaults write /Library/Preferences/com.apple.loginwindow ShowLastLoginDate -bool true
sudo defaults write /Library/Preferences/com.apple.loginwindow AdminHostInfo HostName
Verificacion:
defaults read /Library/Preferences/com.apple.loginwindow ShowLastLoginDate
# Debe devolver: 1
defaults read /Library/Preferences/com.apple.loginwindow AdminHostInfo
# Debe devolver: HostName
Ambos ajustes son persistentes y se aplican a partir del siguiente cierre de sesion o reinicio. No es necesario reinstalarlos salvo que se restablezcan las preferencias del sistema.
Dialogo de aviso tras inicio de sesion
Ademas del banner en la pantalla de login, un LaunchAgent ejecuta un dialogo tras cada inicio de sesion que muestra la fecha y hora del ultimo acceso y un aviso sobre derechos y obligaciones con enlace a la Normativa de Seguridad (ORG.2). El usuario debe pulsar "Acknowledge" para continuar.
Script (~/bin/ens-login-notice.sh):
#!/bin/bash
# ens-login-notice.sh — ENS Login Security Notice
# ENS Control: op.acc.6
sleep 3
PREV_LOGIN_LINE=$(last console | grep -v "still logged in" | head -1)
if [ -n "$PREV_LOGIN_LINE" ]; then
LOGIN_DATE=$(echo "$PREV_LOGIN_LINE" | awk '{for(i=1;i<=NF;i++){if($i~/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun)$/){printf "%s %s %s %s",$i,$(i+1),$(i+2),$(i+3);exit}}}')
LAST_LOGIN_MSG="Previous login: ${LOGIN_DATE}"
else
LAST_LOGIN_MSG="No previous login record found."
fi
osascript -e "
display dialog \"${LAST_LOGIN_MSG}
Your rights and obligations as a user of the organization's information systems are documented in the Information Security Standards:
https://qms.legit.health/docs/procedures/gp-110/org-marco-organizativo/org-2-normativa-de-seguridad
By using this system, you confirm awareness of and compliance with these standards.\" buttons {\"Acknowledge\"} default button \"Acknowledge\" with title \"Security Notice\" with icon caution
"
LaunchAgent (~/Library/LaunchAgents/health.legit.ens-login-notice.plist):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>health.legit.ens-login-notice</string>
<key>ProgramArguments</key>
<array>
<string>/Users/USERNAME/bin/ens-login-notice.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Reemplazar USERNAME por el nombre de usuario del equipo. El RunAtLoad hace que se ejecute una vez cada vez que el usuario inicia sesion.
Bloqueo por intentos fallidos
El bloqueo tras 3 intentos fallidos se configura mediante pwpolicy (política de cuentas nativa de macOS). La política incluye un tiempo de restablecimiento automático de 15 minutos (900 segundos) para evitar bloqueos permanentes en equipos sin administrador de red.
Política (ens-lockout-policy.plist):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>policyCategoryAuthentication</key>
<array>
<dict>
<key>policyContent</key>
<string>(policyAttributeFailedAuthentications < policyAttributeMaximumFailedAuthentications) OR (policyAttributeCurrentTime > policyAttributeLastFailedAuthenticationTime + policyAttributeFailedResetTime)</string>
<key>policyIdentifier</key>
<string>com.apple.maximumFailedLoginAttempts</string>
<key>policyParameters</key>
<dict>
<key>policyAttributeMaximumFailedAuthentications</key>
<integer>3</integer>
<key>policyAttributeFailedResetTime</key>
<integer>900</integer>
</dict>
</dict>
</array>
</dict>
</plist>
Aplicación:
sudo pwpolicy setaccountpolicies ens-lockout-policy.plist
Verificación:
pwpolicy getaccountpolicies
Instalación en un equipo nuevo
Para instalar ambos controles en un Mac:
- Crear el directorio
~/bin/y copiarens-login-notice.shcon permisos de ejecución (chmod 755). - Generar el fichero LaunchAgent en
~/Library/LaunchAgents/health.legit.ens-login-notice.plistcon la ruta correcta al script. - Cargar el agente:
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/health.legit.ens-login-notice.plist - Aplicar la política de bloqueo:
sudo pwpolicy setaccountpolicies ens-lockout-policy.plist - Verificar: reiniciar sesión y comprobar que aparece el diálogo; entrar 3 contraseñas incorrectas y comprobar que se bloquea la cuenta durante 15 minutos.
Responsabilidades
| Rol ENS | Responsabilidad |
|---|---|
| Responsable de Seguridad | Definir la política de acceso local, aprobar excepciones |
| Responsable del Sistema | Configurar y mantener las estaciones de trabajo, aplicar las políticas técnicas |
| Responsable del Servicio | Definir restricciones de horarios y ubicaciones para el servicio |
| Responsable de la Información | Definir restricciones de acceso a la información desde entornos locales |
Documentos de referencia
- Real Decreto 311/2022, Anexo II, OP.ACC.6
- Guías CCN-STIC: Serie 500 (Entornos Windows), Serie 600 (Otros Entornos)
- ISO/IEC 27002:2013, 9.4.2 - Procedimientos seguros de inicio de sesión
- NIST SP 800-53 rev. 4: AC-7, AC-8, AC-9
Signature meaning
The signatures for the approval process of this document can be found in the verified commits at the repository for the QMS. As a reference, the team members who are expected to participate in this document and their roles in the approval process, as defined in Annex I Responsibility Matrix of the GP-001, are:
- Author: Team members involved
- Reviewer: JD-003 Design & Development Manager, JD-004 Quality Manager & PRRC
- Approver: JD-001 General Manager