Descripción general de Veriexec
Verified Exec (también conocido como veriexec) es un esquema de firma y verificación de archivos que protege el sistema operativo (SO) de Junos contra software y actividades no autorizados que puedan comprometer la integridad de su dispositivo. Originalmente desarrollado para el sistema operativo NetBSD, veriexec fue adaptado para Junos OS y habilitado de forma predeterminada desde Junos OS versión 7.5 en adelante.
Los archivos autorizados, es decir, ciertos archivos que se suministran con Junos OS, tienen una huella digital asociada que veriexec comprueba para determinar si el archivo se puede usar (ejecutar o incluso abrir). Cualquier archivo que carezca de una huella digital válida no puede ser ejecutado o leído por aplicaciones que requieren una entrada verificada.
Tenga en cuenta que /bin/sh no requiere una entrada verificada. Se puede usar para ejecutar scripts arbitrarios porque, desde una perspectiva de riesgo, son lo mismo que los comandos interactivos, que ya se controlan a través de la autenticación y los permisos del usuario. Sin embargo, si una secuencia de comandos de shell comprobada contiene instrucciones para ejecutar una secuencia de comandos arbitraria, es decir, un archivo que no tiene una firma en el manifiesto, se impedirá la ejecución de ese archivo.
Cómo funciona Veriexec
Veriexec proporciona al kernel un manifiesto firmado digitalmente que consiste en un conjunto de huellas digitales para todos los ejecutables y otros archivos que deben permanecer inmutables. El cargador veriexec alimenta el contenido del manifiesto al kernel solo si la firma digital del manifiesto se verifica correctamente. El kernel puede verificar si un archivo coincide con su huella digital. Si se está aplicando veriexec, solo se ejecutarán ejecutables con una huella digital verificada. Los archivos protegidos no se pueden escribir, modificar ni cambiar.
Cada imagen de instalación contiene un manifiesto. El manifiesto es de solo lectura. Contiene entradas como las siguientes:
etc/rc sha1=478eeda6750c455fbfc18eeb06093e32a341911b uid=0 gid=0 mode=644 etc/rc.verify sha1=15566bb2731abee890fabd0ae8799e02071e006c uid=0 gid=0 mode=644 usr/libexec/veriexec-ext.so.1 sha1=8929292d008d12cd5beb2b9d9537458d4974dd22 uid=0 gid=0 mode=550 no_fips sbin/verify-sig sha1=cd3ffd45f30f1f9441e1d4a366955d8e2c284834 uid=0 gid=0 mode=555 no_ptrace sbin/veriexec sha1=7b40c1eae9658f4a450eb1aa3df74506be701baf uid=0 gid=0 mode=555 no_ptrace jail/usr/bin/php sha1=c444144fef5d65f7bbc376dc3ebb24373f1433a2 uid=0 gid=0 mode=555 indirect no_fips usr/sbin/chassisd sha1=61b82b36da9c6fb7eeb413d809ae2764a8a3cebc uid=0 gid=0 mode=555 trusted
Si se ha modificado un archivo y la huella digital resultante difiere de la del manifiesto, verá un mensaje de registro, como el siguiente ejemplo:
/kernel:veriexec:fingerprintfordev100728577,file70750 64ea873ed0ca43b113f87fa25fb30f9f60030cec!= 0d9457c041bb3646eb4b9708ba605facb84a2cd0
El mensaje de registro tiene el siguiente formato:
/kernel:veriexec:fingerprintfordev<deviceid>,file<fileid><calculatedfingerprint>!= <fingerprintinthemanifest>
La falta de coincidencia de huellas digitales indica que el archivo se ha modificado. No intente ejecutar el archivo. Podría contener código dañado. Comuníquese con el JTAC.
La importancia de Veriexec
Veriexec es una herramienta eficaz e importante para protegerse contra aquellos que buscan violar la seguridad del sistema de enrutadores, conmutadores y firewalls de Juniper Networks. Frustra a los actores de amenazas que podrían querer establecer un punto de apoyo en el sistema, obtener acceso no autorizado persistente o hacer la transición del sistema a un estado de falla. Si estos actores pueden ejecutar binarios arbitrarios sin firmar, pueden realizar modificaciones no autorizadas y ejecutar malware u otro código que infrinja la política de seguridad.
Los clientes pueden agregar código firmado y autorizado con veriexec aplicado a Junos OS mediante el SDK de JET. Para obtener más información sobre la solución SDK, consulte Desarrollo de aplicaciones JET en el dispositivo en la Guía para desarrolladores del kit de herramientas de extensión de Juniper.
Cómo verificar si Veriexec se aplica en un dispositivo que ejecuta Junos OS
Las siguientes subsecciones proporcionan procedimientos sobre cómo comprobar si veriexec se aplica o no.
Algunas plataformas Junos OS ofrecen una versión opcional de Junos OS con la aplicación veriexec deshabilitada (denominada Junos Enhanced Automation o Junos Flex). Para obtener más información acerca de Junos Enhanced Automation, consulte Descripción general de las mejoras de Junos Automation en dispositivos que ejecutan Junos OS con automatización mejorada.
- Utilice el comando sysctl security.mac.veriexec.state para Junos OS versión 15.1 y posteriores
- Otra forma de comprobar si veriexec está funcionando
- Resultados
Utilice el comando sysctl security.mac.veriexec.state para Junos OS versión 15.1 y posteriores
Los administradores pueden comprobar si se aplica veriexec ejecutando los siguientes comandos desde el shell de la CLI de Junos OS:
Inicie el shell.
username@hostname> start shell %
Utilice el
sysctl security.mac.veriexec.state
comando.% sysctl security.mac.veriexec.state security.mac.veriexec.state: loaded active enforce %
Si se aplica veriexec, el resultado es
security.mac.veriexec.state: loaded active enforce
. Si no se aplica veriexec, el resultado essecurity.mac.veriexec.state: loaded active
.
El security.mac.veriexec.state
comando solo es válido en Junos OS versión 15.1 y posteriores.
Otra forma de comprobar si veriexec está funcionando
Puede confirmar si veriexec está funcionando copiando un archivo autorizado (aquí, /usr/bin/id), a una nueva ubicación como se muestra a continuación. Veriexec impide la operación porque, aunque hay una huella digital válida para /usr/bin/id, no hay huella digital para /tmp/id aunque el archivo sea idéntico. Lo que está sucediendo es que veriexec evalúa las propiedades subyacentes de Linux del archivo, que no son idénticas después de ser copiadas, en lugar del archivo en sí.
Inicie el shell.
username@hostname> start shell #
Cambie los directorios y, a continuación, copie el archivo de ejemplo, /usr/bin/id a una nueva ubicación.
# /usr/bin/id uid=928(username) gid=20 groups=20,0(wheel),10(field) # cp /usr/bin/id /tmp
Resultados
Si se está aplicando veriexec, aparece un error de autenticación. Si no es así, el archivo se ejecutará normalmente.
Salida cuando se aplica veriexec (el archivo está bloqueado):
# /tmp/id /bin/sh: /tmp/id: Authentication error #
Salida cuando veriexec no se aplica (el archivo se copia):
# /tmp/id #
Cargador compatible con Veriexec para dispositivos de la serie SRX
El cargador compatible con veriexec instala una imagen de Junos OS mediante el install
comando de un servidor TFTP o un dispositivo de almacenamiento USB.
Instale la imagen de Junos OS desde un servidor tftp mediante el
install tftp://[host]/
comando install.loader> install tftp://[host]/package
Instale la imagen de Junos OS desde un dispositivo de almacenamiento USB mediante el comando install
install file:///
.loader> install file:///package
El cargador compatible con veriexec valida la imagen de Junos OS. El cargador compatible con veriexec arranca solo una nueva imagen de Junos OS con huellas digitales y no arranca la imagen de Junos OS existente sin huellas digitales ni kernel. Puede utilizar la nextboot
función para comprobar el dispositivo de arranque actual.
username@hostname# nextboot Platform: srx-sword eUSB usb current bootdev is: eUSB
Bootupgrade es una herramienta disponible en el paquete Junos OS para admitir la actualización del firmware del BIOS. Puede usar el bootupgrade
comando para actualizar, comprobar uboot, cargar manualmente e instalar el cargador compatible con veriexec de mayor tamaño. El bootupgrade -c loader
comando imprime la cadena de versión del cargador actual.
Antes de instalar el cargador compatible con veriexec en la imagen de Junos OS, se lleva a cabo una identificación de huellas digitales de Junos OS en ambas particiones de raíz dual. Solo cuando ambas particiones de raíz dual tienen Junos OS con huellas digitales, se permite la instalación del cargador compatible con veriexec.
Instale el cargador compatible con veriexec desde el shell de la CLI de Junos OS:
Inicie el shell.
username@hostname> start shell %
-
Utilice el
bootupgrade -l /boot/veloader
comando para instalar el cargador compatible con veriexec.% bootupgrade -l /boot/veloader Checking Loader CRC... veloader size 1251641 OK
Puedes ver diferentes escenarios aquí:
Para Junos OS versión 20.3R1 y posteriores, use
request system software add /var/tmp/xxx.tgz no-copy no-validate
comando para instalar Junos OS con huellas digitales normalmente.username@hostname> request system software add /var/tmp/junos-srxsme-20.4I-20200810_dev_common.0.0833.tgz no-copy no-validate Formatting alternate root (/dev/ad0s2a)... /dev/ad0s2a: 600.0MB (1228732 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 150.00MB, 9600 blks, 19200 inodes. super-block backups (for fsck -b #) at: 32, 307232, 614432, 921632 Installing package '/altroot/cf/packages/install-tmp/junos-20.4I-20200810_dev_common.0.0833' ... Verified junos-boot-srxsme.tgz signed by PackageDevelopmentECP256_2020 method ECDSA256+SHA256 Verified junos-srxsme-domestic signed by PackageDevelopmentECP256_2020 method ECDSA256+SHA256 Verified manifest signed by PackageDevelopmentECP256_2020 method ECDSA256+SHA256 WARNING: The software that is being installed has limited support. WARNING: Run 'file show /etc/notices/unsupported.txt' for details. JUNOS 20.4I-20200810_dev_common.0.0833 will become active at next reboot WARNING: A reboot is required to load this software correctly WARNING: Use the 'request system reboot' command WARNING: when software installation is complete Saving state for rollback ...
-
Para las versiones de Junos OS anteriores a 20.3R1, si el cargador compatible con veriexec está en uso y la imagen de Junos OS de destino para versiones anteriores no es compatible con el cargador compatible con veriexec, utilice el
request system software add /var/tmp/xxx.tgz no-copy no-validate
comando para degradar automáticamente al cargador antiguo desde el cargador compatible con veriexec.username@hostname> request system software add /var/tmp/junos-srxsme-19.4R1.3.tgz no-copy no-validate WARNING: Package junos-19.4R1.3 version 19.4R1.3 is not compatible with current loader WARNING: Automatic recovering loader, please wait ... Upgrading Loader... ##################################### Verifying the loader image... OK WARNING: The new boot firmware will take effect when the system is rebooted. WARNING: Loader recover finish. Formatting alternate root (/dev/ad0s1a)... /dev/ad0s1a: 598.5MB (1225692 sectors) block size 16384, fragment size 2048 using 4 cylinder groups of 149.62MB, 9576 blks, 19200 inodes. super-block backups (for fsck -b #) at: 32, 306464, 612896, 919328 Installing package '/altroot/cf/packages/install-tmp/junos-19.4R1.3' ... Verified junos-boot-srxsme-19.4R1.3.tgz signed by PackageProductionEc_2019 method ECDSA256+SHA256 Verified junos-srxsme-19.4R1.3-domestic signed by PackageProductionEc_2019 method ECDSA256+SHA256 Verified junos-boot-srxsme-19.4R1.3.tgz signed by PackageProductionEc_2019 method ECDSA256+SHA256 V erified junos-srxsme-19.4R1.3-domestic signed by PackageProductionEc_2019 method ECDSA256+SHA256 JUNOS 19.4R1.3 will become active at next reboot WARNING: A reboot is required to load this software correctly WARNING: Use the 'request system reboot' command WARNING: when software installation is complete Saving state for rollback ...
-
Utilice el
request system software add /var/tmp/xxx
comando para comprobar si el paquete de Junos OS es compatible con la instalación.username@hostname> request system software add /var/tmp/junos-srxsme-19.4R2.3.tgz WARNING: Package junos-19.4R2.3 version 19.4R2.3 is not compatible with this system. WARNING: Please install a package with veloadr support, 20.3 or higher.
La instalación finaliza porque el cargador compatible con veriexec no es compatible con las versiones de Junos OS anteriores a 20.3R1.