18 enero, 2019

Cifrar passwords con PowerShell

Con PowerShell podemos generar passwords simétricas y guardarlas cifradas en ficheros.

Esto lo utilizo para cifrar mis copias de seguridad. Hice un repositorio donde referencio el código PowerShell utilizado para realizar estas copias de seguridad.

Uno de los pasos en la realización de estas copias era establecer unas passwords y guardarlas en ficheros de forma cifrada. Dejo la referencia al repositorio: https://github.com/adrianlois/Automatizar-Backups-FTP-PowerShell

Crear passwords cifradas con PowerShell para usar desde el mismo usuario

Cuando establecemos una password en Powershell y la volcamos en un fichero, el fichero que contiene la password cifrada solo sería se podría usar desde el usuario que la estableció.

Para establecer una password con Powershell y volcarla a un fichero de forma cifrada convirtiendo la cadena de texto plano establecida a una cadena cifrada segura (ConvertFrom-SecureString).
Read-Host -AsSecureString "Password fichero" | ConvertFrom-SecureString | Set-Content "C:\Passwords\fichero-passw-cifrada"
Llamar al fichero con la password cifrada almacenada en un script Powershell, convertir la cadena cifrada en texto plano (ConvertTo-SecureString).
Get-Content "C:\Passwords\fichero-passw-cifrada" | ConvertTo-SecureString
Repositorio donde se muestra este método y un video demo.
https://github.com/adrianlois/Automatizar-Backups-FTP-PowerShell/tree/master/backup-v2.0


Crear passwords cifradas con PowerShell generando un keyfile (portable) para usar desde cualquier usuario o máquina

Otra forma de cifrar la passwords en Powershell sería generar un keyfile (fichero llave único para descifrarlas). De ese modo teniendo el keyfile y referenciándolo en el script de Powershell se pueden cifrar con el keyfile y posteriormente descifrar las password establecida volcada en el fichero.

La ventaja respecto al método anterior, es que se pueden descifrar los ficheros que almacenan las passwords cifradas desde cualquier usuario de la misma máquina o cualquier usuario de otra máquina distina. Pudiendo así transportar los ficheros de passwords y keyfile para ser utilizados por otros usuarios o máquinas.

Generar el keyfile y establecer la password para volvarla a un fichero asociándola al keyfile (Read-Host -AsSecureString , ConvertFrom-SecureString -key).

$CifradoKeyFile = New-Object Byte[] 32
[Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($CifradoKeyFile)
$CifradoKeyFile | out-file "C:\Passwords\CifradoKeyFile.key"

Read-Host -AsSecureString "Password fichero" | ConvertFrom-SecureString -key (Get-Content "C:\Passwords\CifradoKeyFile.key") | set-content "C:\Passwords\fichero-passw-cifrada"
Concatenar el keyfile para descifrar el fichero password cifrado (ConvertTo-SecureString -Key).
Get-Content "C:\Passwords\fichero-passw-cifrada" | ConvertTo-SecureString -Key (Get-Content "C:\Passwords\CifradoKeyFile.key")
Repositorio donde se muestra este método con generación de keyfile y un video demo.
https://github.com/adrianlois/Automatizar-Backups-FTP-PowerShell/tree/master/backup-v2.1



Saludos!

15 enero, 2019

Ejecutar WMIC en equipos remotos de la red local (Windows Management Instrumentation)

Si nos surgen problemas para la ejecución sentencias WMIC en máquinas o nodos remotos, mostraré los errores más comunes y como solucionarlos.

Un error puede ser que no esté habiliado las llamadas a procedimientos remotos (RPC).
Error:
Descripción = El servidor RPC no está disponible.
Error - "El servidor RPC no está disponible" (wmic)
Figura 1: Error - "El servidor RPC no está disponible" (wmic).

Otro error común podría ser la falta de permisos para ejecutar WMIC en nodos remotos.
Error:
Descripción = Acceso denegado.
Error - "El servidor RPC no está disponible" (wmic)
Figura 2: Error - "Acceso denegado" (wmic).

Comprobar que el servicio "Instrumental de administración de Windows" (Winmgmt) está habilitado en el tipo de inicio automático y esté en ejecución.

Servicios winmgmt (wmic) en Windows
Figura 3: Servicios winmgmt (wmic) en Windows.

Habilitar la regla por aplicaciones permitidas del firewal (WFAS) de Windows para permitir comunicaciones y llamadas RPC de WMI. Dependiendo cada caso si se trata de una red privada o de dominio.

Reglas del WFAS (Windows Firewall Advanced Security) permitir la comunicación para WMI
Figura 4: Reglas del WFAS (Windows Firewall Advanced Security) permitir la comunicación para WMI.

Verificar que el uso compartido de archivos e impresoras esté activado para el tipo de red según sea el caso. Por defecto en una red de dominio esta característica suele estar activada por defecto cuando un equipo cliente se uno al dominio.

Activar el uso de recurso compartido de archivos e impresoras
Figura 5: Activar el uso de recurso compartido de archivos e impresoras.

Comprobar que en la consola del equipo remoto haiga permisos suficientes para el usuario que ejecutará wmic.

Esto se puede modificar en la consola de Microsoft "wmimgmt.msc", en la pestaña de seguridad, se modifican los permisos para permitir la "Llamada remota habilita" y "Ejecutar métodos".

Permisos de seguridad al Control WMI
Figura 6: Permisos de seguridad al Control WMI.

Por último, y algo fundamental según las pruebas que he realizado, es que independientemente de si el equipo cliente remoto en el que se quiere ejecutar WMI forme parte de una red de dominio o una red privada. Será necesario crear un valor en el registro de Windows "LocalAccountTokenFilterPolicy" algo ya comentado en este artículo.

Desde mi punto de vista esto no es aconsejable a métodos de seguridad, no es para nada una buena práctica, pero si se trata de casos puntuales en los que se necesita realizar una serie de acciones remotas simplemente, por seguridad aconsejo volver a eliminar este valor del registro.

Para poder ejecutar este valor en el registro podemos hacerlo ejecutando una CMD en el equipo remoto a través de PsExec (PsTools de Sysinternals). En este artículo hay se detalla como hacerlo.

El valor LocalAccountTokenFilterPolicy se trata básicamente de "deshabilitar" el UAC (User Account Control) para la ejecución de acciones remotas.

Para añadir el valor LocalAccountTokenFilterPolicy a través de una CMD:
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
Para posteriormente eliminar el valor LocalAccountTokenFilterPolicy a través de una CMD:
reg delete HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\system /v LocalAccountTokenFilterPolicy /f

En el siguiente ejemplo se puede ver como se ejecuta WMIC remotamente desde un equipo local a un equipo remoto usando "wmic /node", especificando la dirección IP local o el hostname del equipo remoto y un usuario/password con privilegios administrativos en la máquina remota.
wmic /node:ip_hostname /user:usuario /password:password bios get serialnumber
Ejecución remota de "wmic /node"
Figura 7: Ejecución remota de "wmic /node".

Saludos!

10 enero, 2019

Ejecutar una CMD en un equipo remoto [psexec]

Esto es algo que suelo utlizar en muchos casos cuando los servicios para administraciones remotas que necesito en ese momento no están habilitados en el equipo remoto.

O bien me conecto con este tip para ejecutar una CMD en el equipo remoto y habilitar los servicios que sean necesarios para posteriormente administrar el equipo remoto de forma más cómoda a través del registro remoto (regedit) o los snap-ins MSC (administrador de dispositivos, impresoras, firewall, servicios, etc.) de administración remota añadidos a través de una MMC (Microsoft Management Console).

Como levantamos una CMD con privilegios administrativos ya sea de un administrador local o de dominio podemos ejecutar acciones remotas mediante la consola, "netsh" para la administración de redes o Firewall, "sc" para servicios, "reg" para la manipulación de entradas del registro, "wmic" instrumental de administración de Windows, etc. Aunque como comentaba anteriormente es más cómodo invocar las propias consolas de administración remotas MSC de Microsoft.

Para esto será necesario descargar psexec, parte de la colección de herramientas de Sysinternals de Microsoft.

Haciendo uso de PsExec ejecutamos lo siguiente en una CMD con privilegios de nuestro equipo local.
psexec \\EquipoRemoto -u UserAdmin -p Password cmd.exe
  • EquipoRemoto: nombre o IP del equipo remoto al que nos queremos conectar.
  • UserAdmin: usuario con privilegios de administrador local o de dominio sobre la máquina remota.
  • Password: Passoword del usuario establecido anteriormente.
  • Seguidamente indicamos la aplicación a ejecutar de forma remota, en este caso sería una CMD remota, por lo tanto "cmd.exe".

En la siguiente captura se puede ver un ejemplo y una comprobación consultando las IPs y un whoami de como realmente estamos estamos dentro del equipo remoto.
Ejecución de una CMD en un equipo remoto con psexec
Figura 1: Ejecución de una CMD en un equipo remoto con psexec.

Saludos!

27 diciembre, 2018

Transferir roles FSMO Windows Server y hacer purgado de los servicios del dominio

Los roles de maestros de operaciones FSMO (Flexible Single Master Operations) es una característica de Active Directory. Se trata de un conjunto de tareas de un controlador de dominio usadas principalmente para la replicación entre controladores de dominio.

Existen 5 roles FSMO en un Active Directory:
  • Schema Master (Maestro de Esquema). Uno por Bosque.
  • Domain Naming Master (Maestro de Nomenclatura de Dominios). Uno por Bosque.
  • RID Master - Relative Identifier Master (Maestro Identificador Relativo). Uno por Dominio.
  • Infrastructure Master (Maestro de Infraestructura). Uno por Dominio.
  • PDC Emulator - Primary Domain Controller Emulator (Maestro Controlador Principal de Dominio). Uno por Dominio.

Figura 1: 5 Roles FSMO en Active Directory.


Comprobar el estado de los controladores de dominio

dcdiag (Domain Controller Diagnostic Tool) es una herramienta con la que podemos analizar el estado de los controladores de dominio de un bosque, ejecutando una serie de verificaciones se podrá diagnosticar su funcionamiento.

En el siguiente caso vemos el resultado del análisis en un bosque en el que existen dos controladores de dominio, uno de ellos está activo (SrvDominio Windows Server 2016) y el otro inactivo (apagado, Windows Server 2008 R2).
C:\>dcdiag
... ...

   Probando servidor: Nombre-predeterminado-primer-sitio\SRVDOMINIO
      Iniciando prueba: Advertising
         Advertencia: SRVDOMINIO no se está anunciando como un servidor horario.
         ......................... SRVDOMINIO no superó la prueba Advertising
      Iniciando prueba: FrsEvent
         Existen eventos de advertencia o de error en las últimas 24 horas después de compartir SYSVOL. Los problemas
         de replicación de SYSVOL incorrecta pueden ocasionar problemas de la directiva de grupo.
         ......................... SRVDOMINIO superó la prueba FrsEvent
      Iniciando prueba: DFSREvent
         ......................... SRVDOMINIO superó la prueba DFSREvent
      Iniciando prueba: SysVolCheck
         ......................... SRVDOMINIO superó la prueba SysVolCheck
      Iniciando prueba: KccEvent
         ......................... SRVDOMINIO superó la prueba KccEvent
      Iniciando prueba: KnowsOfRoleHolders
         [ADCONTROL1] Error en DsBindWithSpnEx(): 1722,
         El servidor RPC no está disponible..
         Advertencia: ADCONTROL1 es Schema Owner, pero no responde al enlace RPC de DS.
         Error en la búsqueda de atributos con capacidad de búsqueda LDAP en el servidor ADCONTROL1. Valor devuelto =
         81
         Advertencia: ADCONTROL1 es Schema Owner, pero no responde al enlace LDAP.
         Advertencia: ADCONTROL1 es Domain Owner, pero no responde al enlace RPC de DS.
         Advertencia: ADCONTROL1 es Domain Owner, pero no responde al enlace LDAP.
         Advertencia: ADCONTROL1 es PDC Owner, pero no responde al enlace RPC de DS.
         Advertencia: ADCONTROL1 es PDC Owner, pero no responde al enlace LDAP.
         Advertencia: ADCONTROL1 es Rid Owner, pero no responde al enlace RPC de DS.
         Advertencia: ADCONTROL1 es Rid Owner, pero no responde al enlace LDAP.
         Advertencia: ADCONTROL1 es Infrastructure Update Owner, pero no responde al enlace RPC de DS.
         Advertencia: ADCONTROL1 es Infrastructure Update Owner, pero no responde al enlace LDAP.
         ......................... SRVDOMINIO no superó la prueba KnowsOfRoleHolders

... ...


Transferir roles FSMO entre Domain Controller

netdom es una utilidad de línea de comandos para la administración de Active Directory y Relaciones de confianza.

Listar los roles FSMO

netdom query fsmo
netdom query fsmo
Figura 2: netdom query fsmo

ntdsutil es una utilidad de línea de comandos para la administración de ADDS (Active Directory Domain Services).

Transferir ROLES de un servidor activo a uno nuevo (de ADCONTROL1 a SRVDOMINIO)
C:\>ntdsutil
ntdsutil: roles
fsmo maintenance: connections
server connections: connect to server SrvDominio
Enlazando a SrvDominio ...
Conectado a SrvDominio usando credenciales de usuario conectado localmente.
server connections: q
fsmo maintenance: transfer naming master
fsmo maintenance: transfer infrastructure master
fsmo maintenance: transfer PDC
fsmo maintenance: transfer RID master
fsmo maintenance: transfer schema master
fsmo maintenance: q
ntdsutil: q

Transferir ROLES de un servidor inactivo (apagado) a uno activo (de ADCONTROL1 a SRVDOMINIO)
C:\>ntdsutil
ntdsutil: roles
fsmo maintenance: connections
server connections: connect to server SrvDominio
Enlazando a SrvDominio ...
Conectado a SrvDominio usando credenciales de usuario conectado localmente.
server connections: q
fsmo maintenance: seize naming master
fsmo maintenance: seize infrastructure master
fsmo maintenance: seize PDC
fsmo maintenance: seize RID master
fsmo maintenance: seize schema master
fsmo maintenance: q
ntdsutil: q

Una vez transferidos los roles FSMO volvemos a comprobar su estado y que se transfirieron correctamente.

netdom query fsmo
Figura 3: netdom query fsmo

Purgado de servicios en el caso un DC que ya no vaya estar operativo en el dominio

Si se trata de un servidor que ya no estará operativo en el bosque habrá que limpiar o "purgar" el resto de servicios que puedan estar asociados al DC viejo.

1. Limpiar regisitros DNS

Eliminar todos los registros que apunten al DC viejo en toda la gerarquía del Administrador de DNS.

eliminar registros dns dc viejo fsmo
Figura 4: Eliminar registros DNS del DC viejo.

2. Limpiar Sitios y Servicios de Active Directory

Eliminar el servidor DC viejo de "Sistios y Servicios de Active Directory".

eliminar registros sitios y servicios de active directory dc viejo fsmo
Figura 5: Eliminar registros de "Sistios y servicios de Active Directory".

3. Limpiar Active Directory

Eliminar los objetos de equipos de las OU (Organizational Unit) Computers y Domain Controllers.

eliminar cuentas y objetos de active directory dc viejo fsmo
Figura 6: Eliminar los DC de Active Directory.

4. Cambiar opciones del servicio DHCP

En el caso de tener el rol del servicio DHCP instalado, eliminar de los servidores DNS de las Opciones de ámbito la dirección IP del DC viejo.

eliminar opciones servidores dns del servidor dhcp dc viejo fsmo
Figura 7: Eliminar IP del DC del servicio DHCP.

5. Cambiar direcciones DNS a los equipos de la red interna

Cambiar las direcciones DNS al resto de máquinas de la red interna con ip estática definida Windows o Linux ya sean servidores o equipos clientes.

Saludos!
Entradas Relacionadas