SYSTEM, causa y efecto III de IV

Estándar

SYSTEM. causa y efecto I de IV

SYSTEM, causa y efecto II de IV

SYSTEM, causa y efecto IV de IV

Hola a tod@s!
Este post está dedicado a observar el funcionamiento de un SID en lo referente a un usuario específico.
Un SID, o identificador de seguridad, es una estructura para identificar inequívocamente a un usuario o un grupo específico.
Desde Windows NT, esta estructura se encuentra definida en la librería WINNT.H.
La estructura de un SID contiene, entre otros, los siguientes elementos:

  • Revisión del SID
  • Un identificador de autoridad que identifica la autoridad de ese SID
  • Un identificador relativo (RID), el cual identifica unívocamente un usuario o grupo, en relación a la autoridad asignada al SID

La combinación del identificador de autoridad, unido a los identificadores de las sub-autoridades, asegura que no haya dos valores SID iguales.
El formato de un SID se forma usando una cadena estandarizada, la cual hace más fácil la identificación de sus componentes. El formato de cadena de un SID es el siguiente:
S-R-I-S[VALORES]
En donde:

Imagen 1.- Relación Valores & Especificación

Aplicando los elementos anteriores, un SID válido sería el siguiente:

S-1-5-32-545

En donde la traducción de este SID sería la siguiente:

 

Imagen 2.- Valores e identificación

Si se quieren obtener los SID validados en el sistema operativo, éstos se pueden extraer de varias formas.
Una forma ágil de obtener los SID del sistema operativo, es utilizando herramientas ya creadas específicamente para este tipo de usos. Las más conocidas con GETSID, del Kit de recursos de NT, y PSGETSID, de la archiconocida SysInternals. La utilización de este tipo de herramientas no conlleva ningún tipo de problemas, y su uso es rápido e intuitivo.

 
 

Imagen 3.- Uso de PsGetSid

Otra vía de acceso a los SID validados en un sistema operativo es por el registro de Windows. Las claves asociadas que guardan información relativa a un SID de usuario son varias, pero las más usuales y prácticas son las siguientes:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList
HKEY_USERS

Imagen.- SID en Registro de Windows

Otra forma rápida, fácil, y para toda la familia, es a través de Scripting. WMI y PowerShell, tienen capacidad para obtener todas las clases asociadas a un SID, y extraer la información de manera ágil. Gracias a que PowerShell tiene acceso rápido a toda la sintaxis de WMI, se puede scriptar todos los comandos de manera sencilla.

 

Imagen.- Extracción de SID a través de PowerShell

 
En el siguiente y último capítulo, veremos cómo se comporta la cuenta SYSTEM, así como el sistema operativo,  a la hora de intentar iniciar una sesión interactiva en el sistema, tal y como se suele utilizar en técnicas de elevación local de privilegios.
Saludos!!
Referencias
PSGETSID
http://technet.microsoft.com/en-us/sysinternals/bb897417
GETSID
http://download.microsoft.com/download/win2000platform/Getsid/1.0/NT5/EN-US/getsid.exe
Win32_SID Class
http://msdn.microsoft.com/en-us/library/aa394450(v=vs.85).aspx
How to Associate a Username with a Security Identifier (SID)
http://support.microsoft.com/kb/154599/en-us
How to deal with localized and renamed user and group names
http://support.microsoft.com/kb/157234/en-us

Introducción a PowerShell (2ª parte) Seguridad

Estándar

Hemos visto alguna pequeña referencia para familiarizarnos  con PowerShell, pero, y la seguridad? Se nos viene a la cabeza alguna que otra pregunta como por ejemplo:

 

Si instalo PowerShell se ejecutarán los scripts que me manden por correo?

La respuesta es sí y no. Para aclarar este tema hay que hablar de los niveles de seguridad que podemos establecer en PowerShell.

PowerShell tiene diferentes directivas de ejecución de scripts que nos servirán para definir qué tipo de seguridad queremos en nuestros sistemas.

Por defecto y cuando instalamos PowerShell en una máquina, la directiva de seguridad establecida por defecto es la llamada Restricted. Esta directiva admite comandos individuales, pero no permite ejecutar scripts. Las directivas que podemos encontrar son:

 

-Restricted

-AllSigned

-RemoteSigned

-Unrestricted

 

La directiva AllSigned

 

Esta directiva requiere que todos los scripts y archivos de configuración estén firmados por un editor de confianza, incluidos los scripts que se escriban en el equipo local. Pregunta cuando un script es invocado.

 

La directiva RemoteSigned

Esta directiva requiere una firma digital de un editor de confianza en scripts y archivos de configuración descargados de Internet, pero no requiere firmas digitales en scripts ejecutados desde el equipo local. Esta directiva no pregunta antes de ejecutar un script que venga de un editor de confianza.

 

La directiva Unrestricted

Esta directiva permite ejecutar los scripts sin firma. Tan solo preguntará cuando ejecutemos un script vía Internet.

 

En función de los escenarios a trabajar, elegiremos una opción u otra. Personalmente recomiendo siempre establecer el nivel de seguridad en RemoteSigned o AllSigned.

Para ejecutar un script en PowerShell, primero debemos guardar este fichero con extensión ps1. PowerShell no ejecutará un script si no tiene esta extensión. El programa asociado a un archivo con extensión .ps1 es por defecto la herramienta más poderosa jamás creada. Eso quiere decir que si hacemos doble-clic en un script de PowerShell, automáticamente se nos abrirá el editor notepad en vez de ejecutarse el script.

Para conocer la directiva de ejecución de script que tenemos configurado en nuestra shell, el comando a ejecutar es:

 

Get-ExecutionPolicy

 

Este comando nos devolverá la directiva de ejecución de PowerShell.

Para cambiar esta directiva, el comando que utilizaremos será:

 

Set-ExecutionPolicy

 

Para cambiar la directiva por defecto de Restricted a RemoteSigned, el comando a utilizar sería:

 

Set-ExecutionPolicy RemoteSigned 

 

En posteriores capítulos veremos cómo ejecutar scripts en PowerShell sin arriesgar la seguridad en nuestro equipo.

Introducción a PowerShell

Estándar

En esta pequeña introducción veremos los intringulis de esta gran herramienta creada para los administradores de sistemas. Estamos hablando de PowerShell.
Pese a que con el anterior intérprete de comandos de Windows se podía hacer casi un 100% del trabajo a base de scripts, Windows PowerShell se diseña para mejorar si cabe el entorno de comandos e incorporar nuevas y variadas funciones.

Requisitos para instalar Windows PowerShell

Tener instalado algún sistema operativo tal como Windows XP SP2, Windows 2003 (con al menos Service Pack 1) o versiones posteriores.

Microsoft .NET FrameWork 2.0

Descargar Windows PowerShell

Empezando a trabajar con PowerShell

Veremos los principales comandos que podremos utilizar para familiarizarnos con PowerShell.
Para seguir los ejemplos, trabajaré con un directorio en el que tengo una serie de archivos. El archivo lo tengo alojado en mi unidad C y lo he llamado power. En este directorio tengo archivos .rar, .zip, .doc, .exe, etc… y mediante una serie de comandos, empezaremos a trabajar con estos archivos.
Empecemos!! :)

El comando Get-ChildItem

Este Cmdlet devolverá una lista con todos los elementos que hay dentro del directorio power.
Para ejecutar este comando la sintaxis sería la siguiente:

Get-ChildItem C:\power

A lo que devolvería una lista como la que aparece

powershell

Pero detengámonos un momento…. Si esto es un vulgar comando dir no? La respuesta es sí y no al mismo tiempo.
Get-ChildItem se diseña para que retorne la información que encuentre en una localización específica, pero puede ser utilizado con otras funciones de Windows PowerShell. Sin ir más lejos, para trabajar con el registro de Windows. Podemos invocar a este comando para que nos devuelva todas las subclaves de una entrada específica del registro, con este comando:

Get-ChildItem hkcu:\

Este comando nos devuelve como salida las ramificaciones del registro que cuelgan de la clave HKEY_CURRENT_USER

Si os fijáis, el comando dir también funciona en Windows PowerShell, y realiza la misma función. Esto es porque el comando dir es un alias, que direcciona al comando Get-ChildItem.
Para ver todos los alias que hay referenciados en PowerShell, podemos escribir estos comandos, que nos darán la misma salida:

Get-Alias
Get-Command –commandtype alias

Si ejecutamos el comando Get-Command dir, este comando nos devuelve como respuesta que ha encontrado un alias con nombre dir, pero que referencia directamente al comando Get-ChildItem.

Para ver toda la ayuda que disponemos sobre este comando, podremos tipear el comando Get-Help comando , y como salida nos mostrará toda la ayuda referenciada sobre el comando que necesitemos obtener ayuda.

Si ejecutamos la ayuda para el comando Get-ChildItem, veremos que este nos proporciona muchas opciones para alterar la salida tanto como queramos. Así que veamos unos ejemplos:

Por ejemplo, si quisiésemos ver todos los archivos del directorio C:\power, excluyendo de la salida los archivos con extensión .tmp, ejecutaríamos el comando:

Get-ChildItem C:\power –exclude *.tmp

Con este comando podemos excluir tantas extensiones como queramos, separando las extensiones por , (comas). Si quisiésemos excluir a parte alguna que otra extensión más, ejecutaríamos:

Get-ChildItem C:\power –exclude *.tmp, *.temp, *.hl_

Estaríamos excluyendo de nuestra salida los ficheros con extensión .tmp, .temp y .hl_.

También podemos incluir en nuestra salida sólo los elementos que nosotros queramos. Esto se consigue con el parámetro –include. El funcionamiento es similar al anterior, pero con un pequeño añadido. Tenemos que incluir en la ruta de búsqueda la cadena *.*

Por ejemplo, si quisiésemos listar sólo los archivos que tengan extensión .zip y .doc, el comando resultante para esta operación será:

Get-ChildItem C:\power\*.* -include *.zip, *.doc

Por defecto, en la salida se nos muestran los siguientes atributos:

Nombre
Modo
Ultimo Acceso
Tamaño

Mode LastWriteTime Length Name
——- —————— ——— ——–
-a— 28/01/2007 0:06 26624 12122006-djtest.doc

Nosotros podemos alterar esta salida, permitiéndonos mostrar o solo el Nombre, o sólo la última fecha de acceso, o el tamaño, el tamaño y el nombre, etc… Esto lo conseguimos filtrando la salida con el cmdlet Select-Object.
Así pues, si quisiésemos que en nuestra salida sólo nos mostrase el nombre y el tamaño de los ficheros, el comando que pondríamos sería:

Get-ChildItem C:\power\*.* –include *.zip, *.doc | Select-Object Name, Length

Truquito para el que no sepa inglés :)

Get-ChildItem C:\power\*.* –include *.zip, *.doc | Select-Object N*, Le*

Con este comando conseguimos exactamente lo mismo, pero con comodines.

Podemos ordenar la salida por tamaño:

Get-ChildItem C:\power\*.* -include *.zip, *.doc | Select-Object N*, Le* | sort length

Agrupar por tipos de extensiones:

Get-ChildItem C:\power | Group-Object extension

Espero que os guste esta primera impresión de PowerShell. En sucesivos artículos nos iremos adentrando un poco más en el mundillo de PowerShell para aprender a automatizar esas tareas que tanto nos cuestan….

1Saludo!