Active Directory Structure

Active Directory (AD) es un servicio de directorio para entornos de red Windows. Es una estructura jerárquica distribuida que permite la gestión centralizada de los recursos de una organización, incluyendo usuarios, computadoras, grupos, dispositivos de red y comparticiones de archivos, políticas de grupo, servidores y estaciones de trabajo, y trusts. AD proporciona funciones de autenticación y autorización dentro de un entorno de dominio Windows. Un servicio de directorio, como Active Directory Domain Services (AD DS), ofrece a una organización formas de almacenar datos de directorio y hacerlos disponibles tanto para usuarios estándar como para administradores en la misma red. AD DS almacena información como nombres de usuario y contraseñas, y gestiona los derechos necesarios para que los usuarios autorizados accedan a esta información. Se lanzó por primera vez con Windows Server 2000; ha sido objeto de ataques crecientes en los últimos años. Está diseñado para ser compatible con versiones anteriores, y muchas características no son "secure by default". Es difícil de gestionar adecuadamente, especialmente en entornos grandes donde puede ser fácilmente mal configurado.

Las fallas y malas configuraciones en Active Directory a menudo se pueden utilizar para obtener un foothold (acceso interno), moverse lateral y verticalmente dentro de una red, y obtener acceso no autorizado a recursos protegidos como bases de datos, comparticiones de archivos, código fuente, y más. AD es esencialmente una gran base de datos accesible para todos los usuarios dentro del dominio, independientemente de su nivel de privilegio. Una cuenta de usuario básica de AD sin privilegios adicionales puede usarse para enumerar la mayoría de los objetos contenidos en AD, incluyendo pero no limitándose a:

Domain Computers Domain Users
Domain Group Information Organizational Units (OUs)
Default Domain Policy Functional Domain Levels
Password Policy Group Policy Objects (GPOs)
Domain Trusts Access Control Lists (ACLs)

Por esta razón, debemos entender cómo está configurado Active Directory y los conceptos básicos de administración antes de intentar atacarlo. Siempre es más fácil "romper" cosas si ya sabemos cómo construirlas.


Active Directory está organizado en una estructura jerárquica en forma de árbol, con un forest en la parte superior que contiene uno o más domains, los cuales pueden tener subdominios anidados. Un forest es el límite de seguridad dentro del cual todos los objetos están bajo control administrativo. Un forest puede contener múltiples domains, y un domain puede incluir subdominios o child domains. Un domain es una estructura dentro de la cual los objetos contenidos (usuarios, computadoras y grupos) son accesibles. Tiene muchas Organizational Units (OUs) integradas, como Domain Controllers, Users, Computers, y se pueden crear nuevas OUs según sea necesario. Las OUs pueden contener objetos y sub-OUs, permitiendo la asignación de diferentes group policies.

A un nivel muy (simplista) alto, una estructura de AD puede verse de la siguiente manera:

INLANEFREIGHT.LOCAL/
├── ADMIN.INLANEFREIGHT.LOCAL   ├── GPOs   └── OU       └── EMPLOYEES           ├── COMPUTERS              └── FILE01           ├── GROUPS              └── HQ Staff           └── USERS               └── barbara.jones
├── CORP.INLANEFREIGHT.LOCAL
└── DEV.INLANEFREIGHT.LOCAL

Aquí podríamos decir que INLANEFREIGHT.LOCAL es el dominio raíz y contiene los subdominios (ya sean subdominios hijos o dominios raíz de árbol) ADMIN.INLANEFREIGHT.LOCAL, CORP.INLANEFREIGHT.LOCAL, y DEV.INLANEFREIGHT.LOCAL, así como otros objetos que conforman un domain como usuarios, grupos, computadoras, y más, como veremos en detalle a continuación. Es común ver múltiples domains (o forests) vinculados entre sí a través de relaciones de trust en organizaciones que realizan muchas adquisiciones. A menudo es más rápido y fácil crear una relación de trust con otro domain/forest que recrear todos los nuevos usuarios en el domain actual. Como veremos en módulos posteriores, los domain trusts pueden introducir una serie de problemas de seguridad si no se administran adecuadamente.

image

El gráfico a continuación muestra dos forests, INLANEFREIGHT.LOCAL y FREIGHTLOGISTICS.LOCAL. La flecha bidireccional representa una bidirectional trust entre los dos forests, lo que significa que los usuarios en INLANEFREIGHT.LOCAL pueden acceder a recursos en FREIGHTLOGISTICS.LOCAL y viceversa. También podemos ver múltiples child domains bajo cada root domain. En este ejemplo, podemos ver que el root domain confía en cada uno de los child domains, pero los child domains en el forest A no necesariamente tienen trusts establecidos con los child domains en el forest B. Esto significa que un usuario que es parte de admin.dev.freightlogistics.local NO podría autenticarse en máquinas en el domain wh.corp.inlanefreight.local por defecto, aunque exista un bidirectional trust entre los domains inlanefreight.local y freightlogistics.local. Para permitir la comunicación directa entre admin.dev.freightlogistics.local y wh.corp.inlanefreight.local, sería necesario configurar otro trust.

image