¿Cuáles son los secretos de LSA? Lo que se almacena en los secretos de LSA? ¿Dónde se guardan los secretos de LSA? LSA Secretos en detalle CurrVal y OldVal estructura de datos Cifrar los secretos de LSA en Windows 2000, XP, 2003 Cifrar los secretos de Windows Vista, Windows 7 La lectura y la edición de los secretos Apéndice
O
¿Cuáles son los secretos de LSA?
1
LSA secretos de Windows
LSA secretos es una memoria especial protección para los datos importantes utilizados por la autoridad de seguridad local (LSA) en Windows. LSA está diseñado para la gestión de la política de un sistema de seguridad local,
O
la auditoría, la autenticación, registro de usuarios en el sistema, el almacenamiento de datos privados. De usuarios y datos sensibles del sistema se guarda en secreto. El acceso a todos los datos secretos está disponible para el sistema sólo.Sin embargo, como se muestra a continuación, algunos programas, en particular la recuperación de contraseñas de Windows , permite anular esta restricción.
0C
Lo que se almacena en los secretos de LSA?
Originalmente, los secretos contenidos en caché los registros de dominio. Más tarde, los desarrolladores de Windows ampliado la zona de aplicación del almacenamiento. En este momento, se pueden almacenar las contraseñas de los usuarios de PC de texto, contraseñas de cuentas de servicio (por ejemplo, los que deben ser ejecutados por un determinado usuario para realizar ciertas tareas), contraseñas de Internet Explorer, contraseñas RAS conexión, SQL y
Z3 R
contraseñas de Cisco, SISTEMA cuenta contraseñas, información privada del usuario, como claves de cifrado EFS, y mucho más. Por ejemplo, NL$KM secreta contiene la contraseña almacenada en caché dominio clave de
cifrado L$RTMTIMEBOMB la cantidad de tiempo que queda hasta el vencimiento de una copia inactiva de Windows L$HYDRAENCKEY almacena el público RSA2 clave utilizada en el protocolo de escritorio remoto. Por cierto, incluso a pesar de que el inicio de sesión automático no está activada, en algunas versiones de Windows 7 secretos pueden contener el texto de la contraseña de la cuenta de administrador, lo que compromete el sistema de destino entero.
¿Dónde se guardan los secretos de LSA?
Secretos de LSA se almacenan en formato cifrado en el registro de Windows, en la clave HKEY_LOCAL_MACHINE/Security/Policy/Secrets La clave primaria HKEY_LOCAL_MACHINE/Security/Policy contiene los datos adicionales necesarios para acceder y descifrar los secretos. Aquí están las descripciones de algunos valores de esta clave.
1 O O 0C Z3 R
El valor 1,1 en PolRevesion coincide con el sistema operativo NT, 1.5 - Windows 2000, 1,7 - Windows XP y Win2K3, 1,9 - Windows Vista, 1,10 - Windows 7 , PolSecretEncryptionKey. Antes de Windows Vista, s贸lo una clave de cifrado se almacenan en el registro, en el valor PolSecretEncryptionKey. . A partir de Windows Vista, PolEKList puede contener varias claves de cifrado.
LSA Secretos en detalle En el plano físico, los secretos se guardan en un archivo binario SEGURIDAD registro con el nombre secreto de la clave.Por ejemplo, SecurityPolicySecrets $ MACHINE.ACC. Cada secreto en el registro está representado por cinco valores: 1. 2.
CurrVal - valor actual de cifrado del secreto. CupdTime - tiempo de la última actualización, como una estructura FILETIME 8-byte.
3. 4.
OldVal - valor previo del secreto. OupdTime - Tiempo de actualización anterior.
5.
SecDesc - descriptor de seguridad, es decir, que los usuarios pueden acceder al secreto, y que se les prohíbe acceder
1
a él.
Si el sistema no es capaz de leer / descifrar uno de los secretos, se escribe el valor del sexto en ella, PolMod, lo que
O
indica que el secreto está dañado. Por ejemplo, si una transacción a la base de datos LSA no se completó debido a un corte de corriente o se daña el archivo de registro.
O
CurrVal y OldVal estructura de datos
A partir de la versión 1.9, la estructura de los secretos ha cambiado drásticamente, por lo que no vamos a cubrir el formato antiguo. En lugar de una clave de cifrado única, ahora se puede enlazar cada secreto de cualquier valor en la lista de claves de cifrado (PolEKList). Hay también una opción para seleccionar un algoritmo de cifrado! Así, los
0C
primeros 4 bytes de la estructura de datos es la versión de los datos, a continuación sigue un identificador de cifrado de 16-byte de la clave para la localización de la clave necesaria en la lista. Esto es seguido por un valor DWORD con un identificador para una lista de los algoritmos de cifrado se cifra el secreto. Por ejemplo, el valor 3 coincide con un paquete del algoritmo SHA-256 hash y el algoritmo de cifrado AES-256 bloque. El algoritmo de identificación es seguida
Z3 R
por un valor 4-byte con banderas diferentes utilizados durante el descifrado. Y, por último, ahí va los datos cifrados.Véase la figura.
Cifrar los secretos de LSA en Windows 2000, XP, 2003
0C
O
O
1
Hasta Windows Vista, el descifrado de los secretos más bien parecía trivial. En primer lugar, era necesario para descifrar la clave de cifrado secretos. Esto es lo que parecía:
Donde m_pSyskey - 16-byte valor SYSKEY
m_pCypherKey - El valor de la clave de registro HKEY_LOCAL_MACHINE/Security/Policy/PolSecretEncryptionKey
Z3 R
Una vez que la clave de cifrado secretos se obtuvo, se puede proceder a la descodificación de los secretos. Los secretos se cifran utilizando el algoritmo DES.
Cifrar los secretos de Windows Vista, Windows 7 A partir de Windows Vista, el algoritmo de cifrado, como se ha mencionado, se ha vuelto mucho más sofisticados.Primero, uno todavía tiene que descifrar la lista de las claves de cifrado (sí, ahora varias claves están permitidos), almacenados en HKEY_LOCAL_MACHINESecurityPolicyPolEKList. A continuación, proceder a los secretos reales.Cada secreto ahora almacena un identificador de clave de identificador, algoritmo de cifrado y los datos cifrados reales.Un algoritmo de trabajo para descifrar la clave siguiente aspecto:
Lea el valor de la clave y encontrar el identificador de clave de cifrado. En la lista de claves de cifrado (PolEKList)), encontrar la clave necesaria utilizando el identificador que obtuvo anteriormente.
Descifrar el secreto utilizando el identificador de algoritmo y la clave que se encuentran.
Por lo tanto, los secretos de la base de datos LSA ahora no sólo puede ser cifrado con algoritmos diferentes, pero también tienen diferente contexto original. Por ejemplo, utilice SYSKEY desde otro PC.
La lectura y la edición de los secretos Hay un conjunto de API para el manejo de secretos disponibles para los desarrolladores de software. Por lo tanto, cualquier aplicación de Windows puede crear y leer sus propios secretos, pero sólo dentro de los límites del contexto del usuario actual. Véase la solicitud 1 con el código fuente de los secretos de la lectura. Si desea ver o editar los secretos de LSA, por ejemplo, para eliminar la contraseña de su cuenta de texto, usted puede tomar ventaja deWindows Password Recover , que tiene un plugin conveniente para el manejo de los secretos de LSA. Por cierto, este plugin funciona con los secretos tanto del sistema operativo actual y con los archivos de registro.
1.
1
Apéndice El código fuente del programa para leer los secretos de LSA. Tenga en cuenta que no todos los secretos se
Z3 R
0C
O
programa se puede descargar en el siguiente enlace .
O
pueden leer en contexto de usuario. Además, los privilegios de administrador son necesarios. El ejecutable del
|===========================================================================================|
O
1
// LsaSecretReader.cpp : Defines the entry point for the console application. #include "stdafx.h" #include <windows.h> #include <stdio.h> #include <ntsecapi.h>
#pragma comment (lib, "Advapi32")
0C
O
PLSA_UNICODE_STRING InitLsaString(IN LPWSTR wszString, OUT PLSA_UNICODE_STRING lsastr) { if ( !lsastr ) return NULL;
return lsastr; }
Z3 R
if ( wszString ) { lsastr->Buffer=wszString; lsastr->Length=(USHORT)lstrlenW(wszString)*sizeof(WCHAR); lsastr->MaximumLength=lsastr->Length+2; } else { lsastr->Buffer=L""; lsastr->Length=0; lsastr->MaximumLength=2; }
O
0C
memset(&att,0,sizeof(att));
O
if ( argc!=2 ) { _tprintf(TEXT("Syntax: %s secretnamen"),argv[0]); return 1; }
1
int _tmain(int argc, _TCHAR* argv[]) { NTSTATUS status; LSA_OBJECT_ATTRIBUTES att; LSA_HANDLE pol; LSA_UNICODE_STRING secret, *data=NULL;
Z3 R
status=LsaOpenPolicy(NULL,&att,0,&pol); if ( status!=ERROR_SUCCESS ) { _tprintf(TEXT("LsaOpenPolicy error: %lXn"),status); return 2; }
InitLsaString(argv[1],&secret); status=LsaRetrievePrivateData(pol,&secret,&data); if ( status!=ERROR_SUCCESS ) { _tprintf(TEXT("LsaRetrievePrivateData error: %lXn"),status); return 3; } LsaClose(pol);
return 0; }
1 O O
0C
if ( data && data->Buffer && data->Length ) { for ( USHORT i=0; i<data->Length; i+=16 ) { _tprintf(TEXT("%04X: "),i); LPBYTE ptr=(LPBYTE)data->Buffer; ptr+=i; for ( int j=0; j<min(16,data->Length-i); j++ ) _tprintf(TEXT("%02X "),ptr[j]); _tprintf(TEXT("n")); } } else { _tprintf(TEXT("No datan")); }
Ejemplo de la salida
Z3 R
|===============================================================================================|
C:> LsaSecretReader.exe DPAPI_SYSTEM 0000: 01 00 00 00 73 4F 19 CF 6B 6C B7 8A BC 6D 35 EF 0010: 19 9C A6 A7 3E 9A 80 0C 9D D4 FD B1 B1 A5 20 C6 0020: 87 5F 7A 2B 51 3E 1D E0 45 99 B2 9B