Antes de adentrarnos, es esencial mencionar que utilizamos KQL para examinar los registros de Azure Monitor. Por ello, es imperativo contar con acceso a los registros pertinentes en su ambiente de Azure. En esta ocasión, nos enfocaremos en analizar los registros de inicio de sesión de Azure Active Directory (Azure AD) con el objetivo de detectar vulnerabilidades en el MFA.
let SigninLogs = AzureActivityLogs
| where TimeGenerated > ago(1d)
| where ResourceType == "Microsoft.AAD/SignIns"
| where OperationName == "SignIn"
| where Status == "Success"
| project UserId, AppId, ClientAppId, IpAddress, UserPrincipalName, AuthenticationRequirement;
let MFACompromised = SigninLogs
| where AuthenticationRequirement == "MFARequired"
| where IpAddress !in ("*.corporate.network", "127.0.0.1");
MFACompromised
| summarize count() by UserId
| order by count_ desc
Este procedimiento empezará seleccionando todos los eventos de acceso del día anterior donde la operación fue exitosa y se solicitó la Autenticación de Doble Factor (MFA). Posteriormente, excluirá cualquier evento de acceso que haya tenido lugar en la red empresarial o en el equipo local. Cualquier evento restante será considerado como una vulnerabilidad en el MFA.
Podemos desglosar el proceso en los siguientes pasos:
1. Recopile todos los eventos de acceso del día previo.
2. Excluya los eventos que no demandaron MFA.
3. Desestime los eventos que se llevaron a cabo desde la red de la empresa o un dispositivo local.
4. Calcule el número de accesos vulnerados por usuario debido a fallos en MFA.
5. Presente los resultados ordenados de mayor a menor según el número de accesos comprometidos por el MFA.
Te podría interesar leer: Descubre sobre MFA y como funciona
Ejecución del Script KQL
Para llevar a cabo este procedimiento, es necesario activar el conector de datos de los Registros de Actividad de Azure en Azure Sentinel. Una vez hecho esto, podrá implementar el script ya sea desde la interfaz de usuario de Azure Sentinel o utilizando la CLI de Azure.
Ahora, desglosemos las distintas secciones del script:
- let SigninLogs = AzureActivityLogs: Esta línea establece una variable denominada SigninLogs, que almacena todos los eventos de acceso presentes en los registros de actividad de Azure.
- where TimeGenerated > ago(1d): Esta línea selecciona los eventos, limitándolos únicamente a los que sucedieron el día previo.
- where ResourceType == "Microsoft.AAD/SignIns" && OperationName == "SignIn" && Status == "Success": Esta línea refina los eventos para considerar únicamente aquellos que corresponden a inicios de sesión efectuados exitosamente por un usuario.
- project UserId, AppId, ClientAppId, IpAddress, UserPrincipalName, AuthenticationRequirement: Esta línea muestra los campos específicos de los eventos, que son: UserId, AppId, ClientAppId, IpAddress, UserPrincipalName y AuthenticationRequirement.
- where AuthenticationRequirement == "MFARequired": Esta línea selecciona los eventos que únicamente solicitaron la Autenticación de Doble Factor (MFA).
- where IpAddress !in ("*.corporate.network", "127.0.0.1"): Esta línea se encarga de seleccionar únicamente los eventos que no provienen de la red empresarial o del equipo local.
- summarize count() by UserId: Esta línea agrupa los eventos según el UserId y calcula la cantidad de eventos asociados a cada usuario.
- order by count_ desc: Esta línea clasifica los resultados según la cantidad de eventos, de mayor a menor.
Paso por Paso: Una Alternativa para Lograrlo
Sigue estos pasos:
1. Inicie sesión en Azure Portal y diríjase a la sección de Azure Monitor (registros).
2. Verifique que cuenta con los permisos requeridos para visualizar y analizar los registros de inicio de sesión de Azure AD.
3. Pulse sobre "Registros" para acceder al editor de Kusto Query Language.
4. Nuestro punto de inicio será consultar los registros de inicio de sesión de Azure AD. La tabla de interés se denomina "SigninLogs". En el área de consultas del editor, introduzca la consulta base indicada:
Código:
SigninLogs
| where TimeGenerated >= ago(7d) // You can adjust the time range as needed.
A continuación, nuestro objetivo es descartar aquellos inicios de sesión exitosos que no utilizaron MFA. Para lograrlo, eliminaremos aquellos registros que tengan la propiedad "IsInteractive" configurada como "falso" y "ResultType" marcada como "0" (que indica éxito).
Código:
SigninLogs
| where TimeGenerated >= ago(7d)
| where IsInteractive == true
| where ResultType != 0
Luego debemos determinar aquellos eventos que señalan vulnerabilidades en el MFA. Estos eventos suelen estar acompañados de un código de error que muestra un intento no exitoso de MFA. Algunos de los códigos de error más habituales relacionados con el MFA son 50076, 50053, 50057, entre otros. Incorpore estos códigos a la búsqueda para identificar intentos vulnerados.
Código:
SigninLogs
| where TimeGenerated >= ago(7d)
| where IsInteractive == true
| where ResultType != 0
| where tostring(AuthenticationDetails.errorCode) in~ ("50076", "50053", "50057")
De manera opcional, es posible añadir más detalles al resultado de su consulta para facilitar un análisis más exhaustivo. Por ejemplo, es viable incorporar el Nombre Principal de Usuario (UPN, por sus siglas en inglés) y la dirección IP.
Código:
SigninLogs
| where TimeGenerated >= ago(7d)
| where IsInteractive == true
| where ResultType != 0
| where tostring(AuthenticationDetails.errorCode) in~ ("50076", "50053", "50057")
| project TimeGenerated, UserPrincipalName, IPAddress, LocationDetails
5. Presione el botón "Ejecutar" para llevar a cabo la consulta.
6. Los datos que se desplieguen reflejarán los eventos de vulnerabilidad en el MFA que tuvieron lugar en el período de tiempo determinado.
Ten en cuenta que esta consulta es simplemente un punto de partida. Según las particularidades de tu situación y entorno, puede ser necesario modificar la consulta o incorporar criterios adicionales de filtrado para adaptarse a tus necesidades. Es esencial establecer políticas adecuadas de conservación de registros y auditorías para asegurar la disponibilidad de la información requerida para tu evaluación.