Mayo de 2017

Volumen 32, número 5

DevOps: cumplimiento como código con InSpec

Por Michael Ducy | Mayo de 2017

El cumplimiento de la normativa es un hecho cotidiano para todas las empresas. Al mismo tiempo, las presiones competitivas aumentan con la llegada de nuevas tecnologías que revolucionan los videojuegos y cambian las expectativas de los clientes en lo que a servicios digitales se refiere. ¿Es posible que los sectores ofrezcan nuevos productos y servicios a gran velocidad sin dejar de satisfacer sus obligaciones de cumplimiento de la normativa?

La respuesta es sí. La solución es insertar el cumplimiento de la normativa en la línea de producción de software del mismo modo que se insertan otras cualidades, como la rigidez del chasis de los automóviles o el tiempo de respuesta de ida y vuelta en las aplicaciones bancarias.

Convertir el cumplimiento en una parte fundamental del proceso de implementación es posible cuando el cumplimiento se expresa como código. Igual que la configuración de los sistemas ha cambiado a infraestructura como código (por ejemplo, Desired State Configuration de PowerShell o Chef), puede administrar el cumplimiento a través de un lenguaje programático.

InSpec es un proyecto de código abierto que permite definir los requisitos de cumplimiento en un lenguaje legible por el ojo humano y por máquina. Una vez codificados los requisitos, puede ejecutarlos como pruebas automatizadas que auditen sus sistemas. InSpec proporciona un agente local, además de compatibilidad total de pruebas remotas.

InSpec admite varias plataformas diferentes, desde Windows hasta Linux. En la Figura 1 se enumeran algunas de las más populares. (Puede encontrar una lista completa de las plataformas compatibles en el sitio web de InSpec en inspec.io).

Figura 1 Lista de plataformas populares compatibles con InSpec

Plataforma Versiones
AIX 6.1, 7.1, 7.2
Mac OS X 10.9, 10.10, 10.11
Oracle Enterprise Linux 5, 6, 7
Red Hat Enterprise Linux (y las variantes) 5, 6, 7
Solaris 10, 11
Windows 7, 8, 8.1, 10, 2008, 2008 R2, 2012, 2012 R2, 2016
Ubuntu Linux  
SUSE Linux Enterprise Server 11, 12
OpenSUSE 13.1, 13.2, 42.1
HP-UX 11.31

Gracias a la amplia compatibilidad con la plataforma que ofrece, InSpec es una solución completa para administrar el cumplimiento en toda su infraestructura. Dado que InSpec es un proyecto de código abierto, algunos proveedores de sistemas operativos ofrecen compatibilidad para sus propias plataformas. Por ejemplo, IBM aporta gran parte de la compatibilidad para su sistema operativo AIX.

Introducción a InSpec

Comenzar a usar InSpec es fácil. InSpec se incluye en Chef Development Kit (Chef DK), o bien puede descargar paquetes para una variedad de plataformas desde el sitio web de descarga de Chef en downloads.chef.io/inspec. Después de descargar e instalar el paquete, puede comenzar a escribir reglas de cumplimiento. (Tenga en cuenta que un nombre alternativo para una regla de cumplimiento, que a menudo usan los equipos de seguridad, es control de auditoría).

Las reglas de InSpec son fáciles de escribir una vez se entiende el formato. Todas las reglas comienzan con un recurso. Un recurso es un elemento de configuración que quiere probar. Por ejemplo, aquí existe una regla de InSpec que usa el recurso windows_feature:

describe windows_feature('DHCP Server') do
  it { should_not be_installed }
end

El recurso windows_feature declara el nombre de una característica de Windows y prueba si coincide con una configuración concreta. En este ejemplo, la regla prueba que el servidor DHCP no está instalado.

Existen recursos para muchos componentes estándar de su red, como archivos, directorios, usuarios, grupos y claves de registro. Para obtener una lista completa, puede consultar la documentación de InSpec en bit.ly/2n3ekZe. También puede ampliar fácilmente InSpec con sus propios recursos para comprobar los elementos de configuración que no se admiten de manera predefinida o que son específicos para su aplicación concreta.

Inclusión de metadatos

InSpec permite incluir metadatos sobre las reglas de cumplimiento. Los metadatos ayudan a vincular las pruebas a requisitos normativos o de seguridad específicos. Tradicionalmente, podía encontrar los requisitos de cumplimiento publicados en documentos, hojas de cálculo u otros formatos no accionables. La información de estos documentos de cumplimiento oficiales es importante porque proporciona a los administradores contexto sobre la importancia de la directiva de cumplimiento, aunque a menudo no esté disponible a conveniencia.

En la Figura 2 se muestra un ejemplo de regla de InSpec que incluye esta información como metadatos.

Figura 2 Ejemplo de InSpec con metadatos sobre las reglas de cumplimiento

control 'sshd-8' do
  impact 0.6
  title 'Server: Configure the service port'
  desc '
    Always specify which port the SSH server should listen to.
    Prevent unexpected settings.
  '
  tag 'ssh','sshd','openssh-server'
  tag cce: 'CCE-27072-8'
  ref 'NSA-RH6-STIG - Section 3.5.2.1',
    url: 'https://www.nsa.gov/ia/_files/os/redhat/rhel5-guide-i731.pdf'
  describe sshd_config do
    its('Port') { should eq('22') }
  end
end

Este ejemplo es de una regla (o control) denominada ssh-8. Los campos impact, title y desc definen metadatos que explican la importancia de la regla, su finalidad y una descripción. El campo tag incluye información opcional y el campo ref hace referencia a documentos externos.

El campo describe señala el principio del bloque que contiene la regla. El recurso que se prueba es sshd_config, que es el demonio OpenSSH en las plataformas Linux y Unix. La regla realiza pruebas para ver si el servidor SSH escucha en el puerto 22.

Existen tres puntos importantes a tener en cuenta. En primer lugar, sin los metadatos, la regla se aislaría y carecería de contexto. Luego, toda la información pertinente se incluye con la regla. No es necesario que lo contraste con otros documentos. Por último, el lenguaje InSpec es extremadamente fácil de leer. Las partes interesadas, tales como los responsables de cumplimiento normativo, que podrían no ser programadores, pueden comprender lo que la regla prueba, y los metadatos les indican por qué existe la regla y qué requisitos audita. Incluso podrían inclinarse a aportar sus propias reglas.

Uso de perfiles de código abierto

Para hacer la vida más fácil, InSpec tiene muchos perfiles de código abierto disponibles, que ya incluyen todas las reglas y todos los metadatos importantes. Por ejemplo, existe un perfil DevSec Linux Baseline y un perfil DevSec Apache Baseline. Puede descargar estos perfiles de bit.ly/2mBVXNr.

Muchos de los perfiles de código abierto que proporciona InSpec se basan en las pruebas comparativas estándar del sector de Center for Internet Security (CIS) sobre la seguridad del sistema. Mientras que las líneas base del CIS proporcionan un buen punto de partida, es posible que deba modificarlas para satisfacer sus necesidades de cumplimiento específicas. InSpec le permite crear sus propios perfiles y heredar reglas de otros perfiles. InSpec también permite ignorar reglas de los perfiles. Resulta útil porque no tiene que modificar directamente los perfiles de código abierto que InSpec proporciona. Puede crear sus propios perfiles que heredan los perfiles de código abierto que necesita y, después, ignorar las reglas que no sean aplicables. Cuando se publiquen nuevos perfiles de código abierto, puede actualizar simplemente su versión de las reglas de código abierto sin tener que modificar sus reglas personalizadas.

Exploración de un host

InSpec usa un modelo de cliente-servidor, lo que significa que puede auditar sistemas remotos desde una estación de trabajo centralizada. También existen opciones que permiten que los exámenes de InSpec se ejecuten como parte de un sistema de automatización continua, como Chef Automate (chef.io/automate). Se ofrece un breve ejemplo de esta opción más adelante en este artículo.

Para realizar un examen de cumplimiento, necesita un sistema de destino, que es el servidor que quiere probar, y un perfil de cumplimiento, que es el conjunto de reglas que usa para probar el sistema de destino. Para este ejemplo, el sistema de destino es Windows Server. Usaré la línea base de desarrollo-seguridad de Windows, según se define en CIS, que se almacena en un repositorio de GitHub. En la Figura 3 se muestra un ejemplo de ejecución de InSpec.

Ejemplo de una ejecución de InSpec
Figura 3 Ejemplo de una ejecución de InSpec

Si examina los resultados, la ejecución muestra que existen varias configuraciones que no cumplen las líneas base de cumplimiento del CIS. Vale la pena mencionar que el servidor que se está probando es la imagen predeterminada de Windows Server 2016 que ofrece un proveedor de nube destacado. Así, puede observar inmediatamente que InSpec le permite visualizar el grado de cumplimiento de la red con las directivas de seguridad de la empresa.

Si observa la regla de InSpec real para la primera prueba con errores, cis-­enforce-password-history-1.1.1, puede ver cómo se convierte en algo accionable:

control 'cis-enforce-password-history-1.1.1' do
  impact 0.7
  title '1.1.1 Set Enforce password history to 24 or more passwords'
  desc 'Set Enforce password history to 24 or more passwords'
  describe security_policy do
    its('PasswordHistorySize') { should be >= 24 }
  end
end

La prueba no se realiza correctamente porque la directiva requiere que exista un historial de contraseñas de 24 entradas como mínimo, pero, en realidad, no se mantiene ningún historial. Obviamente, la configuración actual se debe modificar para cumplir con la regla.

Uso de InSpec con canalizaciones de versiones automatizadas

InSpec puede, por sí mismo, ayudarle a administrar el cumplimiento de sus sistemas. Asimismo, se puede ejecutar como una serie de pruebas automatizadas que se ejecuten como parte de las canalizaciones de versiones estándar. Las pruebas de InSpec se pueden agregar fácilmente para actuar como una puerta de calidad del cumplimiento. En esta sección, usaré InSpec con Chef Automate.

Chef Automate es una solución integrada para administrar e implementar infraestructuras y aplicaciones. Depende de una base de productos de código abierto, que incluye InSpec y Chef, destinada a la automatización de infraestructuras. Chef Automate proporciona una canalización automatizada para la administración de cambios e incluye características para garantizar la visibilidad de dichos cambios.

Con Chef Automate, puede ejecutar sus pruebas de cumplimiento de InSpec a petición, ver los resultados en el panel y corregir el problema. También puede generar informes de auditoría siempre que los necesite.

Por ejemplo, la administración de revisiones es uno de los aspectos más importantes de la seguridad de TI. Es importante que pueda identificar sistemas obsoletos y actualizarlos. La mayoría de los marcos normativos, como el Estándar de Seguridad de Datos para la Industria de Tarjeta de Pago (Payment Card Industry Data Security Standard, PCI DSS), lo exigen. Para garantizar que sus sistemas estén actualizados, puede usar Chef Automate para administrar todo el proceso, desde la identificación inicial hasta la corrección.

Primero, puede examinar los sistemas para determinar si cumplen con la directiva y si el software está actualizado. Recibirá un informe que le indicará el estado de su infraestructura. En la Figura 4 se muestra un ejemplo de este informe. Muestra el estado de los servidores en una red, en términos de grado de satisfacción de los requisitos de cumplimiento.

Ejemplo de informe de cumplimiento
Figura 4 Ejemplo de informe de cumplimiento

Cuando tenga el informe, puede usar Chef DK para crear su corrección y, después, probarla localmente antes de la implementación en producción. Chef DK contiene todas las herramientas que necesita para crear y probar el código.

Cuando los cambios le satisfagan, puede enviarlos a través de la canalización de Chef Automate para implementar la corrección. La canalización contiene fases para probar los cambios y asegurarse de que funcionan. Dentro de la canalización, existen dos puertas manuales. Una de ellas es para la revisión del código, mientras que la otra envía el código a los entornos de lanzamiento. Puede involucrar a los responsables del cumplimiento y la seguridad en uno o ambos aspectos para asegurarse de que participan activamente en el proceso de lanzamiento.

Finalmente, cuando los cambios hayan superado todas las fases de la canalización, puede enviarlos al servidor de Chef. Posteriormente, el servidor de Chef puede comenzar a actualizar los nodos. Chef Automate le ofrece visibilidad de todo lo que sucede en su infraestructura una vez que se implementan los cambios.

Automatización del cumplimiento con InSpec

Uno de los principales bancos de India empezó a usar InSpec en su división de Servicios Bancarios, que es responsable de la mayoría de las transacciones bancarias. El cumplimiento es un aspecto especialmente crítico para dicha división. Cuenta con aproximadamente 500 servidores HP-UX, que forman sus entornos de desarrollo, pruebas y producción.

Por supuesto, existen muchas directrices normativas y de seguridad que el banco debe seguir. El equipo realiza comprobaciones mensualmente para garantizar la conformidad de sus servidores. Existen alrededor de 100 comprobaciones que, antes de InSpec, se realizaban manualmente. El proceso era realmente difícil. El equipo tenía que iniciar sesión en cada equipo, comprobar la configuración, proporcionar los resultados impresos y, luego, registrarlos. Una sola comprobación tardaba unos 5 minutos en completarse, de modo que eran necesarias unas 8 horas para revisar solo un servidor.

Cuando el equipo empezó a usar el cumplimiento automatizado con InSpec, el impacto fue evidente. Puede ver el resultado del examen completo en cuestión de minutos. El equipo puede ver cuántos servidores eran conformes y cuántos no. En función de estos resultados, podrá tomar decisiones rápidamente. Lo que antes tardaba 500 minutos en procesarse en un servidor se realiza ahora en tan solo 2 minutos.

InSpec también permite satisfacer fácilmente a los auditores bancarios. En ocasiones, los auditores de TI solicitaban ver el estado de un equipo concreto, pero la recuperación de la información era un proceso lento. Los miembros del equipo tenían que ejecutar scripts manualmente, obtener la salida y adaptarla para un informe. Ahora, con un solo clic, el equipo podría mostrar al instante al auditor las comprobaciones realizadas.

Además, InSpec presenta lenguaje natural y es fácil de aprender. La mayoría de los proveedores de seguridad y auditoría emplean un formato binario, y las herramientas resultan difíciles de usar. Cuando los miembros del equipo bancario vieron InSpec, sintieron que podían aprenderlo fácilmente en unos días, ya que la curva de aprendizaje era muy pequeña. (Puede obtener información sobre este tema en el sitio web de Learn Chef en bit.ly/2mGthmE).

Resumen

InSpec es un lenguaje de pruebas de código abierto que permite tratar el cumplimiento como código. Cuando el cumplimiento es código, las reglas son inequívocas y todos los miembros del equipo las pueden entender. Los desarrolladores saben qué estándares esperan cumplir y los auditores saben exactamente qué se está probando. Con InSpec, puede reemplazar documentos y listas de comprobación manuales con pruebas programáticas que tengan una intención clara.

También puede integrar las pruebas de cumplimiento en su canalización de implementación y probar automáticamente si respetan las directivas de seguridad. Ejecute pruebas con la frecuencia que necesite, inicie pruebas de cumplimiento con cada cambio y detecte problemas antes en el proceso de desarrollo, mucho antes del lanzamiento a producción.


Michael Ducy es director de marketing de productos de código abierto de Chef Software. Hace casi 20 años que usa, administra y propugna software de código abierto. Ducy ha desempeñado varios roles en el ámbito de la tecnología, desde ingeniero de sistemas de Linux e instructor de TI, hasta ingeniero de preventa, entre otros. Siempre ha mostrado interés en confraternizar con la comunidad general y se puede encontrar en Twitter: @mfdii.

Gracias a los siguientes expertos técnicos por revisar este artículo: Bakh Inamov, Adam Leff y Roberta Leibovitz