¡Cumplimos 25 años!
21 diciembre, 2020
¿Cómo iniciarse en la fotogrametría?
2 enero, 2021

En el momento en el que pensamos en un entorno gestionado por MEM (Microsoft Endpoint Manganer), siempre nos planteamos un problema básico en el ámbito de los equipos cliente: Su seguridad. Y una parte muy importante de ésta, es la gestión de permisos administrativos locales sobre los dispositivos. Siendo las soluciones “serverless” hasta día de hoy insuficientes.

Desde hace ya más de un año es comúnmente esperada la llegada de LAPS a este entorno sin dependencia de una conexión a Active Directory, y se han visto populares soluciones como el tan comentado “Serverless LAPS” el cual hace uso de un Key Vault y una Function App para la gestión de estas credenciales.

Esta solución desarrollada en el blog https://www.srdn.io/2018/09/serverless-laps-powered-by-microsoft-intune-azure-functions-and-azure-key-vault/ además de tener un poco de tiempo, nos seguía dejando ciertas carencias de funcionalidad frente a su homónimo en un entorno de Active Directory , por lo que resolveremos estas carencias y añadiremos funcionalidad , a ésta ya útil solución.

 

Funcionamiento de LAPS Serverless

En primer lugar, vamos a ver el funcionamiento básico de esta solución “Serverless” ya conocida, fuera de completarlas con estas nuevas características:

 

Se crea la Function APP que será la encargada de recoger la contraseña provista en el futuro por el dispositivo cliente por medio de un Script y se configura para su correcta comunicación con el script

 

y posteriormente la configuraremos para posibilitar la comunicación entre las diferentes partes involucradas

Creamos y configuramos el Key Vault que almacenará las credenciales de administrador de los equipos cliente. Entre las configuraciones más importantes está la creación de una Access policy en la cual, otorgaremos a la Function App, permisos para crear secretos sobre el Key Vault.

 

Ahora que tenemos el Key Vault completamente configurado nos centraremos en crear la función dentro de la Function App , la cual recordemos, será encargada de recepcionar las credenciales de los dispositivos y enviarlas al Key Vault.

 

Una vez creada la Función será necesario establecer el código del que se compone la misma:

codigo
param( [Parameter(Mandatory = $true)] $Request ) $keyVaultName = “nombredenuestrokeyvault” $vaultTokenUri = ‘https://vault.azure.net’ $apiVersion = ‘2017-09-01’ $authToken = Invoke-RestMethod -Method Get -Headers @{ ‘Secret’ = $env:MSI_SECRET } -Uri “$($env:MSI_ENDPOINT)?resource=$vaultTokenUri&api-version=$apiVersion” $authHeader = @{ Authorization = “Bearer $($authToken.access_token)” } function New-Password { $alphabets = ‘a,b,c,d,e,f,g,h,i,j,k,m,n,p,q,r,t,u,v,w,x,y,z’ $numbers = 2..9 $specialCharacters = ‘!,@,#,$,%,&,*,?,+’ $array = @() $array += $alphabets.Split(‘,’) | Get-Random -Count 10 $array[0] = $array[0].ToUpper() $array[-1] = $array[-1].ToUpper() $array += $numbers | Get-Random -Count 3 $array += $specialCharacters.Split(‘,’) | Get-Random -Count 3 ($array | Get-Random -Count $array.Count) -join “” } $password = New-Password $body = $request.body | Select-Object -Property * -ExcludeProperty keyName $body | Add-Member -NotePropertyName value -NotePropertyValue “$password” $body = $body | ConvertTo-Json $vaultSecretUri = “https://$keyVaultName.vault.azure.net/secrets/$($request.Body.keyName)/?api-version=2016-10-01” $null = Invoke-RestMethod -Method PUT -Body $body -Uri $vaultSecretUri -ContentType ‘application/json’ -Headers $authHeader -ErrorAction Stop Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{ Body = $password })

 

Tan solo ya nos quedaría configurar el script que sería distribuido a nuestros dispositivos. Encargado como ya mencionamos anteriormente de crear un usuario local en el dispositivo (por defecto el nombre de este será “local-admin” siendo fácilmente sustituible en el script de creación).

Ahora obtendremos en nuestra función su URL y sustituiremos en el script que descargaremos en https://gallery.technet.microsoft.com/Serverless-LAPS-Intune-b6dbb37f .

Una vez hecho esto, crearemos una distribución en nuestro entorno MEM de este script al grupo de dispositivos deseado respetando la siguiente configuración:

 

Mejoras aplicadas a la solución

Ya que tenemos esta gran herramienta, nos deja dos grandes carencias respecto a su herramienta sobre Active Directory:

Búsqueda de credenciales: A la hora de buscar un secreto dentro de un Key Vault en caso de haber pocos secretos en el Key Vault, el verdadero reto viene cuando nos encontramos en entornos de mas de 1000 equipos gestionados en el cual la búsqueda de credenciales puede llegar a ser una tarea muy tediosa.

Para ello hemos ideado a través de Poweshell una aplicación en la cual podremos buscar las credenciales con una interfaz muy parecida a la oficial de LAPS provista por Microsoft.

 

 

Restablecimiento de contraseña: pese a tener un buen grado de complejidad, seguíamos manteniendo una insuficiencia en la seguridad de la contraseña, su restablecimiento.

Para ello, haciendo uso de la utilidad de Proactive Remediations en el apartado de reports crearemos una regla en la cual validaremos la antigüedad de la contraseña del usuario administrador diariamente, y si ésta sobrepasa la longevidad que nosotros deseemos para nuestro entorno, la reestablecerá creando una nueva entrada dentro del secreto del dispositivo en nuestro Key Vault.

 

 

Como bien vemos ganamos muchas funcionalidades con esta revisión. Destacando entre ellas: poder llevar un registro de los dispositivos que han restablecido correctamente, los que no han necesitado restablecimiento, los fallidos e incluso podremos visualizar cuándo se realizó el último cambio de contraseña en el dispositivo.

Conclusiones

Finalmente, tenemos una herramienta que se adecua a los estándares de seguridad tal como la oficial distribuida por Microsoft y con la que podremos establecer una periodicidad entre las contraseñas locales de cada administrador local. Además dispondremos de una fiable aplicación para identificar rápidamente las mismas credenciales.

 

Si queréis poneros en contacto con nosotros, podéis hacerlo en info@kabel.es
También podéis seguirnos en Twitter, LinkedIn, Facebook

 

Licencia de Creative Commons

Este obra está bajo una licencia de Creative Commons Reconocimiento-NoComercial 4.0 Internación 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

NEWSLETTER