Restricted Group - Problemi con l’applicazione delle Group Policy
In questo post approfondiremo i possibili problemi che si possono verificare nell’ applicazione dei Restricted Group tramite Group Policy .
Problema
Quando si presenta il problema durante il boot la configurazione del Restricted Group non è applicata completamente ed è creato un evento SceCli 1001:
Event ID : 1001
Category : None
Source : SceCli
Type : Error
Generated : 11/10/2008 5:27:44 AM
Written : 11/10/2008 5:27:44 AM
Machine : W010010312
Message : Security policy cannot be propagated. Impossibile eliminare la cache dei criteri di gruppo.
Considerando come funziona l’applicazione dei Restricted Group, leggi il precedente post , ho ipotizzato che il problema fosse causato da un lock sul file tmpgptfl.inf. Per avere una conferma alla mia ipotesi ho abilitato l’audit sui tutti i file e cartelle sotto la cartella C:\Windows\Security\Templates avendo una conferma alla mia idea. Infatti l’evento 560 mostra che il processo con PID 2972 “tocca” il file tenendolo “bloccato”.
Event ID : 560
Source : Security
Type : Audit Success
Generated : 11/10/2008 5:27:44 AM
Written : 11/10/2008 5:27:44 AM
Machine : MBXP
Message : Object Open:
Object Server: Security
Object Type: File
Object Name: C:\WINNT\security\templates\policies\tmpgptfl.inf
Handle ID: -2147478420
Operation ID: {0,207111}
Process ID: 2972
Image File Name:
Primary User Name: MBXP$
Primary Domain: DISNEY
Primary Logon ID: (0x0,0x3E7)
Client User Name: -
Client Domain: -
Client Logon ID: -
Accesses: %%4416
%%4423
Privileges: -
Restricted Sid Count: 0
Access Mask: Security8
Il PID è elevato (2972) e non è sicuramente quello del processo Winlogon. Aprendo task manager scopro che il processo con il PID 2972 è ALG.exe ovvero Application Layer Gateway Service. Questo processo non dovrebbe andare a leggere questi file e quindi è inspiegabile come mai questi file siano letti e soprattutto messi in lock rendendoli illeggibili dal processo Winlogon per l’applicazione delle policy.
Con process monitor, configurandolo per collezionare i dati durante il boot, il sistema ha tracciato l’accesso ai file sotto la cartella “C:\WINNT\security\templates\policies”.
Il log di Process Monitor mostra che il processo ALG.exe accede ad un notevole numero di file e cartelle. Tra le cartelle che sono aperte dal processo ALG.exe c’è anche la cartella C:\WINNT\SECURITY\TEMPLATES\POLICIES e tutti i file contenuti in essa e quindi anche il file TMPGPTFL.INF.
Qui sotto la sequenza del process monitor log:
13:34:41.1974394 alg.exe 3384 QueryDirectory C:\WINNT\security SUCCESS 0: ., 1: .., 2: Database, 3: logs, 4: templates...
13:34:41.2118214 alg.exe 3384 CreateFile C:\WINNT\security\TEMPLATES SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Open For Backup, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened...
13:34:41.2317561 alg.exe 3384 CreateFile C:\WINNT\security\templates\policies SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Open For Backup, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
13:34:41.2379169 alg.exe 3384 QueryDirectory C:\WINNT\security\templates\policies SUCCESS 0: ., 1: .., 2: gpt00000.dom, 3: gpt00001.inf, 4: gpt00002.inf, 5: tmpgptfl.inf
13:34:41.2380052 alg.exe 3384 QueryDirectory C:\WINNT\security\templates\policies NO MORE FILES
13:34:41.2380490 alg.exe 3384 CloseFile C:\WINNT\security\templates\policies SUCCESS
13:34:42.6791166 alg.exe 3384 CreateFile C:\WINNT\security\templates\policies\tmpgptfl.inf SUCCESS Desired Access: Read Data/List Directory, Read Attributes, Disposition: Open, Options: Non-Directory File, Attributes: N, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
13:34:42.6817174 alg.exe 3384 QueryStandardInformationFile C:\WINNT\security\templates\policies\tmpgptfl.inf SUCCESS AllocationSize: 144, EndOfFile: 142, NumberOfLinks: 1, DeletePending: False, Directory: False
13:34:42.7097160 alg.exe 3384 CreateFile C:\WINNT\security\templates\policies\gpt00000.dom SUCCESS Desired Access: Read Data/List Directory, Read Attributes, Disposition: Open, Options: Non-Directory File, Attributes: N, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
13:34:42.7177564 alg.exe 3384 QueryStandardInformationFile C:\WINNT\security\templates\policies\gpt00000.dom SUCCESS AllocationSize: 2,048, EndOfFile: 1,822, NumberOfLinks: 1, DeletePending: False, Directory: False
13:34:42.7609479 alg.exe 3384 CreateFile C:\WINNT\security\templates\policies\gpt00001.inf SUCCESS Desired Access: Read Data/List Directory, Read Attributes, Disposition: Open, Options: Non-Directory File, Attributes: N, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
13:34:42.7613351 alg.exe 3384 QueryStandardInformationFile C:\WINNT\security\templates\policies\gpt00001.inf SUCCESS AllocationSize: 5,120, EndOfFile: 4,638, NumberOfLinks: 1, DeletePending: False, Directory: False
13:34:42.7811776 alg.exe 3384 CreateFile C:\WINNT\security\templates\policies\gpt00002.inf SUCCESS Desired Access: Read Data/List Directory, Read Attributes, Disposition: Open, Options: Non-Directory File, Attributes: N, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
13:34:42.7953439 alg.exe 3384 QueryStandardInformationFile C:\WINNT\security\templates\policies\gpt00002.inf SUCCESS AllocationSize: 1,536, EndOfFile: 1,282, NumberOfLinks: 1, DeletePending: False, Directory: False
13:34:44.6352280 alg.exe 3384 CloseFile C:\WINNT\security\templates\policies\tmpgptfl.inf SUCCESS
13:34:44.6376565 alg.exe 3384 CloseFile C:\WINNT\security\templates\policies\gpt00000.dom SUCCESS
13:34:44.6379161 alg.exe 3384 CloseFile C:\WINNT\security\templates\policies\gpt00001.inf SUCCESS
13:34:44.6381773 alg.exe 3384 CloseFile C:\WINNT\security\templates\policies\gpt00002.inf SUCCESS
Ho preso il call stack da process monitor per la createfile del processo ALG.exe sul file TMPGPTFL.INF . Qui sotto il call stack preso da process monitor:
13:34:40.5168152 alg.exe 3384 CreateFile C:\ SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Open For Backup, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
-----------------------------------------------------------------------------------------------------
0 fltMgr.sys fltMgr.sys + 0x1944 0xf84b1944 C:\WINNT\System32\Drivers\fltMgr.sys
1 fltMgr.sys fltMgr.sys + 0x3352 0xf84b3352 C:\WINNT\System32\Drivers\fltMgr.sys
2 fltMgr.sys fltMgr.sys + 0xfccb 0xf84bfccb C:\WINNT\System32\Drivers\fltMgr.sys
3 fltMgr.sys fltMgr.sys + 0x10142 0xf84c0142 C:\WINNT\System32\Drivers\fltMgr.sys
4 ntkrnlpa.exe ntkrnlpa.exe + 0x17003 0x804ee003 C:\WINNT\system32\ntkrnlpa.exe
5 ntkrnlpa.exe ntkrnlpa.exe + 0x17003 0x804ee003 C:\WINNT\system32\ntkrnlpa.exe
6 ntkrnlpa.exe ntkrnlpa.exe + 0xdc996 0x805b3996 C:\WINNT\system32\ntkrnlpa.exe
7 ntkrnlpa.exe ntkrnlpa.exe + 0xd8e77 0x805afe77 C:\WINNT\system32\ntkrnlpa.exe
8 ntkrnlpa.exe ntkrnlpa.exe + 0x93431 0x8056a431 C:\WINNT\system32\ntkrnlpa.exe
9 ntkrnlpa.exe ntkrnlpa.exe + 0x93da8 0x8056ada8 C:\WINNT\system32\ntkrnlpa.exe
10 ntkrnlpa.exe ntkrnlpa.exe + 0x9647a 0x8056d47a C:\WINNT\system32\ntkrnlpa.exe
11 ntkrnlpa.exe ntkrnlpa.exe + 0x65a48 0x8053ca48 C:\WINNT\system32\ntkrnlpa.exe
12 ntkrnlpa.exe ntkrnlpa.exe + 0x26755 0x804fd755 C:\WINNT\system32\ntkrnlpa.exe
13 ntkrnlpa.exe ntkrnlpa.exe + 0x13e1cc 0x806151cc C:\WINNT\system32\ntkrnlpa.exe
14 ntkrnlpa.exe ntkrnlpa.exe + 0x13eb9d 0x80615b9d C:\WINNT\system32\ntkrnlpa.exe
15 ntkrnlpa.exe ntkrnlpa.exe + 0x13efd4 0x80615fd4 C:\WINNT\system32\ntkrnlpa.exe
16 ntkrnlpa.exe ntkrnlpa.exe + 0xedca7 0x805c4ca7 C:\WINNT\system32\ntkrnlpa.exe
17 ntkrnlpa.exe ntkrnlpa.exe + 0x6a1e2 0x805411e2 C:\WINNT\system32\ntkrnlpa.exe
Process Monitor, non avendo configurato i simboli, non mostra il call stack decodificato, procedendo alla decodifica degli indirizzi che vediamo sul call stack,tramite i simboli di debugging, ho ottenuto quanto segue:
1:34:41.2317561 PM alg.exe 3384 CreateFile C:\WINNT\security\templates\policies SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Open For Backup, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
-----------------------------------------------------------------------------------------------------
0 fltMgr.sys fltMgr!FltpPerformPreCallbacks+0x2d4 0xf84b1944 C:\WINNT\System32\Drivers\fltMgr.sys
1 fltMgr.sys fltMgr!FltpPassThroughInternal+0x32 0xf84b3352 C:\WINNT\System32\Drivers\fltMgr.sys
2 fltMgr.sys fltMgr!FltpPassThrough+0x1df 0xf84b3c15 C:\WINNT\System32\Drivers\fltMgr.sys
3 fltMgr.sys fltMgr!FltpDispatch+0xf3 0xf84b3ffb C:\WINNT\System32\Drivers\fltMgr.sys
4 ntkrnlpa.exe nt!IopfCallDriver+0x31 0x804ee003 C:\WINNT\system32\ntkrnlpa.exe
5 ntkrnlpa.exe nt!IopfCallDriver+0x31 0x804ee003 C:\WINNT\system32\ntkrnlpa.exe
6 ntkrnlpa.exe nt!NtQueryDirectoryFile+0x5d 0x8056e29f C:\WINNT\system32\ntkrnlpa.exe
7 ntkrnlpa.exe nt!KiFastCallEntry+0xf8 0x8053ca48 C:\WINNT\system32\ntkrnlpa.exe
8 ntkrnlpa.exe nt!ZwQueryDirectoryObject 0x804fdfc5 C:\WINNT\system32\ntkrnlpa.exe
9 ntkrnlpa.exe nt!CcPfPrefetchMetadata+0x76 0x806151cc C:\WINNT\system32\ntkrnlpa.exe
10 ntkrnlpa.exe nt!CcPfPrefetchScenario+0x6d 0x80615b9d C:\WINNT\system32\ntkrnlpa.exe
11 ntkrnlpa.exe nt!CcPfBeginAppLaunch+0x158 0x80615fd4 C:\WINNT\system32\ntkrnlpa.exe
12 ntkrnlpa.exe nt!PspUserThreadStartup+0xeb 0x805c4ca7 C:\WINNT\system32\ntkrnlpa.exe
13 ntkrnlpa.exe nt!KiThreadStartup+0x16 0x805411e2 C:\WINNT\system32\ntkrnlpa.exe
Analizzando le funzioni riportare sopra si identifica che il sistema di prefetching ha generato la scansione dei file e delle cartelle. Quando il processo ALG parte e crea il primo thread è eseguito in kernel mode il codice che esegue il prefetching.
Riporto il log che mostra questa sequenza:
13:34:40.1881511 alg.exe 3384 Process Start SUCCESS Parent PID: 1100
13:34:40.1966276 alg.exe 3384 Load Image C:\WINNT\system32\alg.exe SUCCESS Image Base: 0x1000000, Image Size: 0xd000
13:34:40.1967013 alg.exe 3384 Load Image C:\WINNT\System32\ntdll.dll SUCCESS Image Base: 0x7c910000, Image Size: 0xb6000
13:34:40.2724867 alg.exe 3384 CreateFile C:\WINNT\Prefetch\ALG.EXE-231187DC.pf SUCCESS Desired Access: Generic Read, Disposition: Open, Options: Synchronous IO Non-Alert, Attributes: n/a, ShareMode: None, AllocationSize: n/a, OpenResult: Opened
13:34:40.2725487 alg.exe 3384 QueryStandardInformationFile C:\WINNT\Prefetch\ALG.EXE-231187DC.pf SUCCESS AllocationSize: 54,784, EndOfFile: 54,568, NumberOfLinks: 1, DeletePending: False, Directory: False
13:34:40.2725791 alg.exe 3384 ReadFile C:\WINNT\Prefetch\ALG.EXE-231187DC.pf SUCCESS Offset: 0, Length: 54,568
13:34:40.2728658 alg.exe 3384 CloseFile C:\WINNT\Prefetch\ALG.EXE-231187DC.pf SUCCESS
13:34:40.5168152 alg.exe 3384 CreateFile C:\ SUCCESS Desired Access: Read Data/List Directory, Synchronize, Disposition: Open, Options: Directory, Synchronous IO Non-Alert, Open For Backup, Attributes: n/a, ShareMode: Read, Write, Delete, AllocationSize: n/a, OpenResult: Opened
Come potete vedere nel log il processo ALG.exe legge il file alg.exe.<hashcode>.pf per determinare quali cartelle e file caricarsi in memoria durante il prefetching. In questo caso specifico ho riscontrato una dimensione notevole del file alg.exe.<hashcode>.pf (54K) cherivela come il file contenga notevoli cartelle e file da caricare e sicuramente anche il path C:\WINNT\SECURITY\TEMPLATES\POLICIES.
Per comprendere come mai il file alg.exe.<hashcode>.pf contenga cosi tante cartelle e file ho effettuato un test notando che eseguendo un processo qualsiasi, nel nostro caso la calcolatrice, durante la scansione dell’Antivirus, il file Calc.exe.<hashcode>.pg generato è di 60k mentre normalmente è di 10-15k.
Causa
Durante l’aggiornamento del file alg.exe.<hashcode>.pf, l’antivirus o qualsiasi altra applicazione esegue la scansione del sistema accedendo tutti i file e generando un file *.pf di grosse dimensione. Quando il servizio ALG.exe è avviato leggerà, durante il prefetching, il file alg.exe.<hashcode>.pf che contiene tutti i file e cartelle di sistema e anche il file C:\WINNT\security\templates\policies\tmpgptfl.inf
Soluzione
Individuare il software che fa la scansione di tutti i file anche se molto probabilmente si tratta dell’Antivirus. Configurare questa applicazione per non accedere ai file sotto C:\WINNT\SECURITY\TEMPLATES\POLICIES. Nel nostro caso troviamo prima dell’evento 1001 un evento generato dal processo ntrtscan.exe (Trend Micro OfficeScan Real-time Scan Service) che conferma che la causa è l’antivirus.
Description: Trend Micro OfficeScan Real-time Scan Service (32-bit)
Company: Trend Micro Inc.
Name: ntrtscan.exe
Version: 8.00.0000.1189
Path: C:\Programmi\Trend Micro\OfficeScan Client\ntrtscan.exe
Command Line: "C:\Programmi\Trend Micro\OfficeScan Client\ntrtscan.exe"
PID: 800
Parent PID: 1100
Session ID: 0
User: NT AUTHORITY\SYSTEM
Auth ID: 00000000:000003e7
Architecture: 32-bit
Virtualized: n/a
Integrity: n/a
Started: 12/16/2008 1:33:57 PM
Ended: (Running)
Modules:
NTRtScan.exe 0x400000 0xd8000 C:\Programmi\Trend Micro\OfficeScan Client\NTRtScan.exe
Date & Time: 12/16/2008 1:34:42 PM
Event Class: Registry
Operation: RegSetValue
Result: SUCCESS
Path: HKLM\SOFTWARE\TrendMicro\PC-cillinNTCorp\CurrentVersion\Misc.\LastScannedFileName
TID: 868
Duration: 0.0000277
Type: REG_SZ
Length: 101
Data: C:\WINNT\SECURITY\TEMPLATES\POLICIES\TMPGPTFL.INF
L’evento sopra mostra che l’antivirus verifica i file TMPGPTFL.INF infatti il servizio ha impostato la chiave LastScannedFileName con il valore C:\WINNT\SECURITY\TEMPLATES\POLICIES\TMPGPTFL.INF.
Per verificare velocemente se siete in questa condizione potete provare a disabilitare il prefetching in modo da evitare il comportamento descritto sopra.
Key: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
Name: EnablePrefetcher
Type: REG_DWORD
Value: 0The EnablePrefetcher key has the following values:
0 = Disabled
1 = Application launch prefetching enabled
2 = Boot prefetching enabled
3 = Application launch and boot enabledTo disable Prefetch, set the value to 0.
Se il problema si risolve con il prefetching disabilitato avete una conferma alla analisi.
In caso affermativo dovrete lavorare con il supporto dell ’Applicativo per configurare e applicare l’exclusion dell’antivirus per la cartella C:\WINNT\SECURITY\TEMPLATES\POLICIES
Matteo Belloni
Support Escalation Engineer
Microsoft Enterprise Platform Support