Mostrando entradas con la etiqueta seguridad. Mostrar todas las entradas
Mostrando entradas con la etiqueta seguridad. Mostrar todas las entradas

jueves, 8 de agosto de 2019

Como guardar registros detallados de las sesiones de PowerShell

Auditar la el historial de actividad de PowerShell es algo que puede venir útil en caso de incidentes de seguridad o con fines de documentación. En este post, se muestra como habilitar una transcripción detallada de la actividad de PowerShell mediante directivas de grupo.

En una nueva directiva de grupo, ir a "Configuración del equipo > Directivas > Plantillas Administrativas > Componentes de Windows > Windows Powershell" y seleccionar "Activar la transcripción de Powershell". Aquí debe habilitarse la política y seleccionar un directorio donde se guardaran las transcripciones.



Despues de un gpupdate /force para forzar la aplicación de la nueva política, podemos probar si la nueva configuración está en efecto corriendo un comando de PowerShell:


Y finalmente revisar que los comandos ingresados esten siendo registrados en el directorio especificado:


Eso es todo, en otro post se mostrará como utilizar Start-Transcript para registrar los comandos de una sesión individual.

sábado, 6 de julio de 2019

PowerShell: Determinar el historial de membresias de grupo en Active Directory

Hay ocasiones en donde es necesario conocer en que momento un usuario fué agregado a un grupo, en estos casos, esta información puede extraerse de Active Directory gracias a ciertos atributos existentes en los metadatos de replicación.

PS C:\Users\Administrador>
PS C:\Users\Administrador> $username = "juan"
PS C:\Users\Administrador> $userobj  = Get-ADUser $username
PS C:\Users\Administrador>
PS C:\Users\Administrador> Get-ADUser $userobj.DistinguishedName -Properties memberOf |
>>  Select-Object -ExpandProperty memberOf |
>>  ForEach-Object {
>>     Get-ADReplicationAttributeMetadata $_ -Server localhost -ShowAllLinkedValues |
>>       Where-Object {$_.AttributeName -eq 'member' -and
>>       $_.AttributeValue -eq $userobj.DistinguishedName} |
>>       Select-Object FirstOriginatingCreateTime, Object, AttributeValue
>>     } | Sort-Object FirstOriginatingCreateTime -Descending

FirstOriginatingCreateTime Object                                               AttributeValue
-------------------------- ------                                               --------------
6/7/2019 17:48:59          CN=Administradores clave,CN=Users,DC=seclab,DC=local CN=juan,CN=Users,DC=seclab,DC=local


PS C:\Users\Administrador> 

Como se ve en la salida del script anterior, con esto puede determinarse en que fecha un usuario fué agregado a uno o mas grupos. Podría ser que necesitamos esa información con fines forenses, o bien para determinar que membresias de grupo podrían ser reducidas en caso de que algún usuario experimente problemas de "token bloat". El script es una colaboración de Ashley McGlone, ex Premier Field Engineer de Microsoft, aquí puede verse el articulo original.

Por último vale mencionar que ademas de funcionar con cuentas de usuario, puede utilizarse con cuentas de equipos, sustituyendo Get-ADUser por Get-ADComputer

lunes, 8 de abril de 2019

Explorando la red con PowerShell: Escaneo de puertos TCP y barridos ping

A continuación comparto una recopilación de algunos comandos útiles a la hora de explorar la red utilizando PowerShell.

Barridos ping

Para descubrir todos los hosts activos de una red de forma rápida podemos realizar un barrido ping o ICMP. En este ejemplo se usa un operador de rango para hacer ping a todas las IP's de una red /24 y del resultado filtramos los que contienen la linea TTL, que son los que nos interesan (esto excluye las IP's que respondieron con tiempo de espera agotado)


PS C:\> 1..254 | % {echo "192.168.88.$_"; ping -n 1 -w 100 192.168.88.$_} | Select-String ttl

Respuesta desde 192.168.88.1: bytes=32 tiempo=2ms TTL=64
Respuesta desde 192.168.88.214: bytes=32 tiempo=2ms TTL=64
Respuesta desde 192.168.88.229: bytes=32 tiempo<1m TTL=128

PS C:\>

Escaneo de puertos TCP

Para probar si un puerto TCP está abierto, podemos usar el cmdlet Test-NetConnection

PS C:\> foreach ($ip in 1..254) {Test-NetConnection -Port 80 -InformationLevel "Detailed" 192.168.88.$ip}



ComputerName            : 192.168.88.1
RemoteAddress           : 192.168.88.1
RemotePort              : 80
NameResolutionResults   : 192.168.88.1
MatchingIPsecRules      :
NetworkIsolationContext : Private Network
InterfaceAlias          : vEthernet (Ether-wifi)
SourceAddress           : 192.168.88.229
NetRoute (NextHop)      : 0.0.0.0
TcpTestSucceeded        : True


ADVERTENCIA: TCP connect to (192.168.88.2 : 80) failed
ADVERTENCIA: Ping to 192.168.88.2 failed with status: TimedOut

ComputerName            : 192.168.88.2
RemoteAddress           : 192.168.88.2
RemotePort              : 80
NameResolutionResults   : 192.168.88.2
MatchingIPsecRules      :
NetworkIsolationContext : Private Network
InterfaceAlias          : vEthernet (Ether-wifi)
SourceAddress           : 192.168.88.229
NetRoute (NextHop)      : 0.0.0.0
PingSucceeded           : False
PingReplyDetails (RTT)  : 0 ms
TcpTestSucceeded        : False


El comando anterior arroja resultados muy verbose para mi gusto, la siguiente alternativa facilita probar un rango de puertos y da como resultado una salida mas limpia:

PS C:\> 1..1024 | % { echo ((new-object Net.Sockets.TcpClient).Connect("192.168.61.1",$_)) "$_ is open" } 2>$null
22 is open
80 is open
443 is open
PS C:\>

Eso es todo. En una próxima entrada analizaremos opciones para probar puertos UDP con PowerShell.

domingo, 7 de abril de 2019

Preparación para el examen AZ-500: Sesiones de Ignite

Recientemente se lanzó el examen beta AZ-500: Microsoft Azure Security Engineer, siendo el único necesario para obtener la certificación Microsoft Certified: Azure Security Engineer Associate. De momento no hay una guía de preparación oficial, por lo cual lo que voy a apoyarme exclusivamente en la documentación de Microsoft y en Sesiones de Ignite y Microsoft Mechanics.

Si quieres tomar este exámen beta, puedes conseguir un voucher con un 80% de descuento en este post de Microsoft Learning Blog.

A continuación, una lista de las sesiones de Ignite que estoy usando como preparación para este examen.

Azure Essentials: Defense in depth security



Azure Security Center | Azure Friday



Azure security & management - BRK2021



Azure Security fundamentals: Protecting infrastructure apps and data in the cloud - BRK2395



Built-in not bolted on - securing your Azure resources in practice - THR3064



Governing Azure subscriptions with auditing management groups and policies - BRK3268



Protect server workloads across datacenter and cloud with Azure Security Center and - BRK3235



Protect the keys to your kingdom with Privileged Identity Management - BRK3248



Securing your data with Azure SQL DB : Build 2018



Understanding how Microsoft Information Protection capabilities work together to - BRK3002



Accelerate deployment and adoption of Microsoft Information Protection solutions - BRK3009



Securing your hybrid cloud environments with Azure ATP and AAD Identity Protection - BRK3237



Securing web applications using Web Application Firewall



Securing Azure SQL Database Managed Instance: Overview and best practices - BRK3163



Secure customer identity and access management using Azure Active Directory B2C - BRK3240



Monitoring your networks in Azure - BRK3298



Monitor your infrastructure and analyze operational logs at scale with Azure Monitor - BRK3354



MNA 02/08/2019 - Azure DDoS



Common sense in the world of Azure governance - THR2102




Manage keys secrets and certificates for secure apps and data with Azure Key Vault - BRK3059



Lock down access to Azure using identity - BRK3383



Learn how to protect your data in Azure Storage with new features and capabilities - BRK3340



In the security trenches of Azure SQL Database and Azure SQL Data Warehouse - BRK3149



Identity and secure resource access in App Service and Azure Functions - Matthew Henderson



Granting partners and suppliers access to resources using Azure Active Directory B2B - BRK3249



From the trenches: Hardening your Azure Active Directory tenant - THR2214



Expose APIs with peace of mind when using Azure API Management - BRK2200



Enable Azure Active Directory Conditional Access to secure user access while - BRK3241



Deep dive into Implementing governance at scale through Azure Policy - BRK3085



CYA (covering your assets) with security and threat detection in Azure - BRK2421



Azure Update Inventory and Automation for Linux and Windows VM management - BRK3063



Azure Information Protection and Exchange Online - better together - THR3076



Azure Firewall and Best Practices in building an enterprise-grade DMZ in Azure - BRK4029



Azure Active Directory security insights with Conditional Access Identity Protection - BRK3401



Azure Active Directory best practices from around the world - BRK3408



Attack discovery and investigation with Azure Advanced Threat Protection - THR3037



AKS (Azure Kubernetes Service) Security & Identity updates | Best of Microsoft Ignite 2018



How to delegate administration in Azure AD - BRK3239



Early look at Microsoft Threat Protection





lunes, 11 de junio de 2018

Solución al error de autenticación en conexión a Escritorio remoto "Oracle/CredSSP"

Las actualizaciones de Mayo del 2018 trajeron sorpresas para los administradores de entornos donde las conexiones RDP dejaron de funcionar repentinamente. Microsoft publicó un articulo donde detalla el alcance de la vulnerabilidad de CredSSP cuyos parches trajeron consigo este inconveniente que se presenta principalmente en los casos donde el cliente ya tiene las actualizaciones de 05/2018 y el servidor aún no cuenta con las mismas.

El error que se presenta al intentar conectarse desde un cliente actualizado a un servidor sin el parche es el siguiente:

An authentication error occurred. The function requested is not supported.This could be due to CredSSP encryption oracle remediation
Error de autenticacion. No se permite la funcion solicitada.Puede deberse a una actualizacion de Oracle de cifrado CredSSP

Desde luego la solución mas recomendable es aplicar la actualización en clientes y servidores que se manejaran vía RDP, pero en casos donde es imperioso acceder a un servidor que aún no esta parchado es posible cambiar el comportamiento del cliente para que ignore la vulnerabilidad utilizando políticas de grupo o directamente modificando el registro, el cambio requiere un reinicio para tomar efecto.

Via gpedit.msc:





Vía regedit:



PS C:\Users\Administrator> reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\CredSSP\Parameters" /f /v AllowEncryptionOracle /t REG_DWORD /d 2
The operation completed successfully.

PS C:\Users\Administrator>



Luego de parchear los servidores, lo recomendable es revertir el cambio para no dejar el sistema expuesto al robo de credenciales.