00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
#include <nt.h>
00027
#include <ntlsa.h>
00028
#include <msaudite.h>
00029
#include "tokenp.h"
00030
#include "adt.h"
00031
#include "adtp.h"
00032
00033
00034
#ifdef ALLOC_PRAGMA
00035
#pragma alloc_text(PAGE,SeAuditHandleDuplication)
00036
00037
#pragma alloc_text(PAGE,SepAdtPrivilegeObjectAuditAlarm)
00038
#pragma alloc_text(PAGE,SepAdtPrivilegedServiceAuditAlarm)
00039
#pragma alloc_text(PAGE,SepAdtOpenObjectAuditAlarm)
00040
#pragma alloc_text(PAGE,SepAdtOpenObjectForDeleteAuditAlarm)
00041
#pragma alloc_text(PAGE,SepAdtHandleAuditAlarm)
00042
#pragma alloc_text(PAGE,SepAdtObjectReferenceAuditAlarm)
00043
#pragma alloc_text(PAGE,SepQueryNameString)
00044
#pragma alloc_text(PAGE,SepQueryTypeString)
00045
#pragma alloc_text(PAGE,SeAuditProcessCreation)
00046
#pragma alloc_text(PAGE,SeAuditProcessExit)
00047
#pragma alloc_text(PAGE,SepAdtGenerateDiscardAudit)
00048
#endif
00049
00050
00051 #define SepSetParmTypeSid( AuditParameters, Index, Sid ) \
00052
{ \
00053
(AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeSid; \
00054
(AuditParameters).Parameters[(Index)].Length = SeLengthSid( (Sid) ); \
00055
(AuditParameters).Parameters[(Index)].Address = (Sid); \
00056
}
00057
00058
00059 #define SepSetParmTypeString( AuditParameters, Index, String ) \
00060
{ \
00061
(AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeString; \
00062
(AuditParameters).Parameters[(Index)].Length = \
00063
sizeof(UNICODE_STRING)+(String)->Length; \
00064
(AuditParameters).Parameters[(Index)].Address = (String); \
00065
}
00066
00067
00068 #define SepSetParmTypeFileSpec( AuditParameters, Index, String ) \
00069
{ \
00070
(AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeFileSpec; \
00071
(AuditParameters).Parameters[(Index)].Length = \
00072
sizeof(UNICODE_STRING)+(String)->Length; \
00073
(AuditParameters).Parameters[(Index)].Address = (String); \
00074
}
00075
00076 #define SepSetParmTypeUlong( AuditParameters, Index, Ulong ) \
00077
{ \
00078
(AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeUlong; \
00079
(AuditParameters).Parameters[(Index)].Length = sizeof( (Ulong) ); \
00080
(AuditParameters).Parameters[(Index)].Data[0] = (ULONG)(Ulong); \
00081
}
00082
00083 #define SepSetParmTypeNoLogon( AuditParameters, Index ) \
00084
{ \
00085
(AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeNoLogonId; \
00086
}
00087
00088 #define SepSetParmTypeLogonId( AuditParameters, Index, LogonId ) \
00089
{ \
00090
LUID UNALIGNED * TmpLuid; \
00091
\
00092
(AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeLogonId; \
00093
(AuditParameters).Parameters[(Index)].Length = sizeof( (LogonId) ); \
00094
TmpLuid = (LUID UNALIGNED *)(&(AuditParameters).Parameters[(Index)].Data[0]); \
00095
*TmpLuid = (LogonId); \
00096
}
00097
00098 #define SepSetParmTypeAccessMask( AuditParameters, Index, AccessMask, ObjectTypeIndex ) \
00099
{ \
00100
(AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeAccessMask; \
00101
(AuditParameters).Parameters[(Index)].Length = sizeof( ACCESS_MASK ); \
00102
(AuditParameters).Parameters[(Index)].Data[0] = (AccessMask); \
00103
(AuditParameters).Parameters[(Index)].Data[1] = (ObjectTypeIndex); \
00104
}
00105
00106 #define SepSetParmTypePrivileges( AuditParameters, Index, Privileges ) \
00107
{ \
00108
(AuditParameters).Parameters[(Index)].Type = SeAdtParmTypePrivs; \
00109
(AuditParameters).Parameters[(Index)].Length = SepPrivilegeSetSize( (Privileges) ); \
00110
(AuditParameters).Parameters[(Index)].Address = (Privileges); \
00111
}
00112
00113 #define SepSetParmTypeObjectTypes( AuditParameters, Index, ObjectTypes, ObjectTypeCount, ObjectTypeIndex ) \
00114
{ \
00115
(AuditParameters).Parameters[(Index)].Type = SeAdtParmTypeObjectTypes; \
00116
(AuditParameters).Parameters[(Index)].Length = sizeof( SE_ADT_OBJECT_TYPE ) * (ObjectTypeCount);\
00117
(AuditParameters).Parameters[(Index)].Address = (ObjectTypes); \
00118
(AuditParameters).Parameters[(Index)].Data[1] = (ObjectTypeIndex); \
00119
}
00120
00121
00122
00123
00124 BOOLEAN
00125 SepAdtPrivilegeObjectAuditAlarm (
00126 IN PUNICODE_STRING CapturedSubsystemName OPTIONAL,
00127 IN PVOID HandleId,
00128 IN PTOKEN ClientToken OPTIONAL,
00129 IN PTOKEN PrimaryToken,
00130 IN PVOID ProcessId,
00131 IN ACCESS_MASK DesiredAccess,
00132 IN PPRIVILEGE_SET CapturedPrivileges,
00133 IN BOOLEAN AccessGranted
00134 )
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201 {
00202 SE_ADT_PARAMETER_ARRAY AuditParameters;
00203 PSID CapturedUserSid;
00204 LUID ClientAuthenticationId;
00205 LUID PrimaryAuthenticationId;
00206
00207
PAGED_CODE();
00208
00209
00210
00211
00212
00213
if (
SepAdtAuditThisEvent( AuditCategoryPrivilegeUse, &AccessGranted ) &&
00214
SepFilterPrivilegeAudits( CapturedPrivileges )) {
00215
00216
if ( ARGUMENT_PRESENT(
ClientToken )) {
00217
00218 CapturedUserSid =
SepTokenUserSid(
ClientToken );
00219 ClientAuthenticationId =
SepTokenAuthenticationId(
ClientToken );
00220
00221 }
else {
00222
00223 CapturedUserSid =
SepTokenUserSid(
PrimaryToken );
00224 }
00225
00226
if (
RtlEqualSid(
SeLocalSystemSid, CapturedUserSid )) {
00227
00228
return (
FALSE);
00229 }
00230
00231 PrimaryAuthenticationId =
SepTokenAuthenticationId(
PrimaryToken );
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241 RtlZeroMemory (
00242 (PVOID) &AuditParameters,
00243
sizeof( AuditParameters )
00244 );
00245
00246
ASSERT( SeAdtParmTypeNone == 0 );
00247
00248 AuditParameters.CategoryId = SE_CATEGID_PRIVILEGE_USE;
00249 AuditParameters.AuditId = SE_AUDITID_PRIVILEGED_OBJECT;
00250 AuditParameters.ParameterCount = 0;
00251
00252
if ( AccessGranted ) {
00253
00254 AuditParameters.Type = EVENTLOG_AUDIT_SUCCESS;
00255
00256 }
else {
00257
00258 AuditParameters.Type = EVENTLOG_AUDIT_FAILURE;
00259 }
00260
00261
00262
00263
00264
00265
SepSetParmTypeSid( AuditParameters, AuditParameters.ParameterCount, CapturedUserSid );
00266
00267 AuditParameters.ParameterCount++;
00268
00269
00270
00271
00272
00273
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, CapturedSubsystemName );
00274
00275 AuditParameters.ParameterCount++;
00276
00277
00278
00279
00280
00281
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, CapturedSubsystemName );
00282
00283 AuditParameters.ParameterCount++;
00284
00285
00286
00287
00288
00289
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)HandleId) );
00290
00291 AuditParameters.ParameterCount++;
00292
00293
00294
00295
00296
00297
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)ProcessId) );
00298
00299 AuditParameters.ParameterCount++;
00300
00301
00302
00303
00304
00305
SepSetParmTypeLogonId( AuditParameters, AuditParameters.ParameterCount, PrimaryAuthenticationId );
00306
00307 AuditParameters.ParameterCount++;
00308
00309
00310
00311
00312
00313
if ( ARGUMENT_PRESENT(
ClientToken )) {
00314
00315
SepSetParmTypeLogonId( AuditParameters, AuditParameters.ParameterCount, ClientAuthenticationId );
00316
00317 }
else {
00318
00319
SepSetParmTypeNoLogon( AuditParameters, AuditParameters.ParameterCount );
00320 }
00321
00322 AuditParameters.ParameterCount++;
00323
00324
00325
00326
00327
00328
if ( (CapturedPrivileges !=
NULL) && (CapturedPrivileges->PrivilegeCount > 0) ) {
00329
00330
SepSetParmTypePrivileges( AuditParameters, AuditParameters.ParameterCount, CapturedPrivileges );
00331 }
00332
00333 AuditParameters.ParameterCount++;
00334
00335
SepAdtLogAuditRecord( &AuditParameters );
00336
00337
return(
TRUE );
00338
00339 }
00340
00341
return(
FALSE );
00342 }
00343
00344
00345
VOID
00346 SepAdtPrivilegedServiceAuditAlarm (
00347 IN PUNICODE_STRING CapturedSubsystemName,
00348 IN PUNICODE_STRING CapturedServiceName,
00349 IN PTOKEN ClientToken OPTIONAL,
00350 IN PTOKEN PrimaryToken,
00351 IN PPRIVILEGE_SET CapturedPrivileges,
00352 IN BOOLEAN AccessGranted
00353 )
00354
00355
00356
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396
00397
00398
00399
00400
00401
00402
00403
00404
00405
00406
00407
00408
00409
00410
00411
00412
00413
00414
00415
00416
00417 {
00418
00419 SE_ADT_PARAMETER_ARRAY AuditParameters;
00420 PSID CapturedUserSid;
00421 LUID ClientAuthenticationId;
00422 LUID PrimaryAuthenticationId;
00423 PUNICODE_STRING SubsystemName;
00424
00425
PAGED_CODE();
00426
00427
00428
00429
00430
00431
if (
SepAdtAuditThisEvent( AuditCategoryPrivilegeUse, &AccessGranted )) {
00432
00433
if ( ARGUMENT_PRESENT(
ClientToken )) {
00434
00435 CapturedUserSid =
SepTokenUserSid(
ClientToken );
00436 ClientAuthenticationId =
SepTokenAuthenticationId(
ClientToken );
00437
00438 }
else {
00439
00440 CapturedUserSid =
SepTokenUserSid(
PrimaryToken );
00441 }
00442
00443 PrimaryAuthenticationId =
SepTokenAuthenticationId(
PrimaryToken );
00444
00445
if ( !ARGUMENT_PRESENT( CapturedSubsystemName )) {
00446
00447 SubsystemName = &
SeSubsystemName;
00448
00449 }
else {
00450
00451 SubsystemName = CapturedSubsystemName;
00452 }
00453
00454
00455
00456
00457
00458
00459
00460
00461
00462 RtlZeroMemory (
00463 (PVOID) &AuditParameters,
00464
sizeof( AuditParameters )
00465 );
00466
00467
ASSERT( SeAdtParmTypeNone == 0 );
00468
00469 AuditParameters.CategoryId = SE_CATEGID_PRIVILEGE_USE;
00470 AuditParameters.AuditId = SE_AUDITID_PRIVILEGED_SERVICE;
00471 AuditParameters.ParameterCount = 0;
00472
00473
if ( AccessGranted ) {
00474
00475 AuditParameters.Type = EVENTLOG_AUDIT_SUCCESS;
00476
00477 }
else {
00478
00479 AuditParameters.Type = EVENTLOG_AUDIT_FAILURE;
00480 }
00481
00482
00483
00484
00485
00486
00487
SepSetParmTypeSid( AuditParameters, AuditParameters.ParameterCount, CapturedUserSid );
00488
00489 AuditParameters.ParameterCount++;
00490
00491
00492
00493
00494
00495
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, SubsystemName );
00496
00497 AuditParameters.ParameterCount++;
00498
00499
00500
00501
00502
00503
00504
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, SubsystemName );
00505
00506 AuditParameters.ParameterCount++;
00507
00508
00509
00510
00511
00512
00513
if ( ARGUMENT_PRESENT( CapturedServiceName )) {
00514
00515
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, CapturedServiceName );
00516 }
00517
00518 AuditParameters.ParameterCount++;
00519
00520
00521
00522
00523
00524
00525
SepSetParmTypeLogonId( AuditParameters, AuditParameters.ParameterCount, PrimaryAuthenticationId );
00526
00527 AuditParameters.ParameterCount++;
00528
00529
00530
00531
00532
00533
00534
if ( ARGUMENT_PRESENT(
ClientToken )) {
00535
00536
SepSetParmTypeLogonId( AuditParameters, AuditParameters.ParameterCount, ClientAuthenticationId );
00537
00538 }
else {
00539
00540
SepSetParmTypeNoLogon( AuditParameters, AuditParameters.ParameterCount );
00541 }
00542
00543 AuditParameters.ParameterCount++;
00544
00545
00546
00547
00548
00549
00550
00551
if ( (CapturedPrivileges !=
NULL) && (CapturedPrivileges->PrivilegeCount > 0) ) {
00552
00553
SepSetParmTypePrivileges( AuditParameters, AuditParameters.ParameterCount, CapturedPrivileges );
00554 }
00555
00556 AuditParameters.ParameterCount++;
00557
00558
00559
SepAdtLogAuditRecord( &AuditParameters );
00560
00561 }
00562
00563 }
00564
00565
00566
00567
00568
00569
00570 BOOLEAN
00571 SepAdtOpenObjectAuditAlarm (
00572 IN PUNICODE_STRING CapturedSubsystemName,
00573 IN PVOID *HandleId OPTIONAL,
00574 IN PUNICODE_STRING CapturedObjectTypeName,
00575 IN PVOID Object OPTIONAL,
00576 IN PUNICODE_STRING CapturedObjectName OPTIONAL,
00577 IN PTOKEN ClientToken OPTIONAL,
00578 IN PTOKEN PrimaryToken,
00579 IN ACCESS_MASK DesiredAccess,
00580 IN ACCESS_MASK GrantedAccess,
00581 IN PLUID OperationId,
00582 IN PPRIVILEGE_SET CapturedPrivileges OPTIONAL,
00583 IN BOOLEAN ObjectCreated,
00584 IN BOOLEAN AccessGranted,
00585 IN BOOLEAN GenerateAudit,
00586 IN BOOLEAN GenerateAlarm,
00587 IN HANDLE ProcessID,
00588 IN POLICY_AUDIT_EVENT_TYPE AuditType,
00589 IN
PIOBJECT_TYPE_LIST ObjectTypeList OPTIONAL,
00590 IN ULONG ObjectTypeListLength,
00591 IN PACCESS_MASK GrantedAccessArray OPTIONAL
00592 )
00593
00594
00595
00596
00597
00598
00599
00600
00601
00602
00603
00604
00605
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616
00617
00618
00619
00620
00621
00622
00623
00624
00625
00626
00627
00628
00629
00630
00631
00632
00633
00634
00635
00636
00637
00638
00639
00640
00641
00642
00643
00644
00645
00646
00647
00648
00649
00650
00651
00652
00653
00654
00655
00656
00657
00658
00659
00660
00661
00662
00663
00664
00665
00666
00667
00668
00669
00670
00671
00672
00673
00674
00675
00676
00677
00678
00679
00680
00681
00682
00683
00684
00685
00686
00687
00688
00689
00690
00691
00692
00693
00694
00695
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705 {
00706 SE_ADT_PARAMETER_ARRAY AuditParameters;
00707 ULONG ObjectTypeIndex;
00708 PSID CapturedUserSid;
00709 LUID PrimaryAuthenticationId;
00710 LUID ClientAuthenticationId;
00711 PSE_ADT_OBJECT_TYPE AdtObjectTypeBuffer =
NULL;
00712
00713
PAGED_CODE();
00714
00715
if ( ARGUMENT_PRESENT(
ClientToken )) {
00716
00717 CapturedUserSid =
SepTokenUserSid(
ClientToken );
00718 ClientAuthenticationId =
SepTokenAuthenticationId(
ClientToken );
00719
00720 }
else {
00721
00722 CapturedUserSid =
SepTokenUserSid(
PrimaryToken );
00723 }
00724
00725 PrimaryAuthenticationId =
SepTokenAuthenticationId(
PrimaryToken );
00726
00727
00728
00729
00730
00731
00732
00733
00734
00735 RtlZeroMemory (
00736 (PVOID) &AuditParameters,
00737
sizeof( AuditParameters )
00738 );
00739
00740
ASSERT( SeAdtParmTypeNone == 0 );
00741
00742
ASSERT( ( AuditType == AuditCategoryObjectAccess ) ||
00743 ( AuditType == AuditCategoryDirectoryServiceAccess ) );
00744
00745
if (AuditType == AuditCategoryObjectAccess) {
00746
00747 AuditParameters.CategoryId = SE_CATEGID_OBJECT_ACCESS;
00748 }
else {
00749
00750 AuditParameters.CategoryId = SE_CATEGID_DS_ACCESS;
00751 }
00752
00753 AuditParameters.AuditId = SE_AUDITID_OPEN_HANDLE;
00754 AuditParameters.ParameterCount = 0;
00755
00756
if ( AccessGranted ) {
00757
00758 AuditParameters.Type = EVENTLOG_AUDIT_SUCCESS;
00759
00760 }
else {
00761
00762 AuditParameters.Type = EVENTLOG_AUDIT_FAILURE;
00763 }
00764
00765
00766
00767
00768
00769
SepSetParmTypeSid( AuditParameters, AuditParameters.ParameterCount, CapturedUserSid );
00770
00771 AuditParameters.ParameterCount++;
00772
00773
00774
00775
00776
00777
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, CapturedSubsystemName );
00778
00779 AuditParameters.ParameterCount++;
00780
00781
00782
00783
00784
00785
if ( ARGUMENT_PRESENT( CapturedSubsystemName )) {
00786
00787
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, CapturedSubsystemName );
00788 }
00789
00790 AuditParameters.ParameterCount++;
00791
00792
00793
00794
00795
00796
if ( ARGUMENT_PRESENT( CapturedObjectTypeName )) {
00797
00798
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, CapturedObjectTypeName );
00799 ObjectTypeIndex = AuditParameters.ParameterCount;
00800 }
00801
00802 AuditParameters.ParameterCount++;
00803
00804
00805
00806
00807
00808
if ( ARGUMENT_PRESENT( CapturedObjectName )) {
00809
00810
SepSetParmTypeFileSpec( AuditParameters, AuditParameters.ParameterCount, CapturedObjectName );
00811 }
00812
00813 AuditParameters.ParameterCount++;
00814
00815
00816
00817
00818
00819
if ( ARGUMENT_PRESENT( HandleId )) {
00820
00821
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)*HandleId) );
00822 }
00823
00824 AuditParameters.ParameterCount++;
00825
00826
if ( ARGUMENT_PRESENT( OperationId )) {
00827
00828
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (*OperationId).HighPart );
00829
00830 AuditParameters.ParameterCount++;
00831
00832
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (*OperationId).LowPart );
00833
00834 AuditParameters.ParameterCount++;
00835
00836 }
else {
00837
00838 AuditParameters.ParameterCount += 2;
00839 }
00840
00841
00842
00843
00844
00845
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)ProcessID) );
00846
00847 AuditParameters.ParameterCount++;
00848
00849
00850
00851
00852
00853
SepSetParmTypeLogonId( AuditParameters, AuditParameters.ParameterCount, PrimaryAuthenticationId );
00854
00855 AuditParameters.ParameterCount++;
00856
00857
00858
00859
00860
00861
if ( ARGUMENT_PRESENT(
ClientToken )) {
00862
00863
SepSetParmTypeLogonId( AuditParameters, AuditParameters.ParameterCount, ClientAuthenticationId );
00864
00865 }
else {
00866
00867
SepSetParmTypeNoLogon( AuditParameters, AuditParameters.ParameterCount );
00868 }
00869
00870 AuditParameters.ParameterCount++;
00871
00872
00873
00874
00875
00876
if ( AccessGranted ) {
00877
00878
SepSetParmTypeAccessMask( AuditParameters, AuditParameters.ParameterCount, GrantedAccess, ObjectTypeIndex );
00879
00880 }
else {
00881
00882
SepSetParmTypeAccessMask( AuditParameters, AuditParameters.ParameterCount, DesiredAccess, ObjectTypeIndex );
00883 }
00884
00885 AuditParameters.ParameterCount++;
00886
00887
00888
00889
00890
00891
if ( (CapturedPrivileges !=
NULL) && (CapturedPrivileges->PrivilegeCount > 0) ) {
00892
00893
SepSetParmTypePrivileges( AuditParameters, AuditParameters.ParameterCount, CapturedPrivileges );
00894 }
00895
00896 AuditParameters.ParameterCount++;
00897
00898
00899
00900
00901
00902
if ( ObjectTypeListLength != 0 ) {
00903 ULONG GuidCount;
00904 ULONG i;
00905
USHORT FlagMask = AccessGranted ?
OBJECT_SUCCESS_AUDIT :
OBJECT_FAILURE_AUDIT;
00906
00907
00908
00909
00910
00911 GuidCount = 0;
00912
for ( i=0; i<ObjectTypeListLength; i++ ) {
00913
00914
if ( i == 0 ) {
00915 GuidCount++;
00916 }
else if ( ObjectTypeList[i].Flags &
FlagMask ) {
00917 GuidCount ++;
00918 }
00919 }
00920
00921
00922
00923
00924
00925
00926
if ( GuidCount > 0 ) {
00927
00928 AdtObjectTypeBuffer =
ExAllocatePoolWithTag(
PagedPool, GuidCount *
sizeof(SE_ADT_OBJECT_TYPE), 'pAeS' );
00929
00930
00931
00932
00933
00934
00935
00936
00937
if ( AdtObjectTypeBuffer !=
NULL ) {
00938
00939
00940
00941
00942
00943 GuidCount = 0;
00944
for ( i=0; i<ObjectTypeListLength; i++ ) {
00945
00946
if ( ( i > 0 ) && !( ObjectTypeList[i].Flags &
FlagMask ) ) {
00947
00948
continue;
00949
00950 }
else {
00951
00952 AdtObjectTypeBuffer[GuidCount].ObjectType = ObjectTypeList[i].ObjectType;
00953 AdtObjectTypeBuffer[GuidCount].Level = ObjectTypeList[i].Level;
00954
00955
if ( i == 0 ) {
00956
00957
00958
00959
00960 AdtObjectTypeBuffer[GuidCount].Flags = SE_ADT_OBJECT_ONLY;
00961 AdtObjectTypeBuffer[GuidCount].AccessMask = 0;
00962
00963 }
else {
00964
00965 AdtObjectTypeBuffer[GuidCount].Flags = 0;
00966
if ( ARGUMENT_PRESENT(GrantedAccessArray) && AccessGranted ) {
00967
00968 AdtObjectTypeBuffer[GuidCount].AccessMask = GrantedAccessArray[i];
00969 }
00970 }
00971 GuidCount ++;
00972 }
00973 }
00974
00975
00976
00977
00978
00979
SepSetParmTypeObjectTypes( AuditParameters, AuditParameters.ParameterCount, AdtObjectTypeBuffer, GuidCount, ObjectTypeIndex );
00980 AuditParameters.ParameterCount ++;
00981 AuditParameters.AuditId = SE_AUDITID_OPEN_HANDLE_OBJECT_TYPE;
00982 }
00983 }
00984
00985 }
00986
00987
00988
00989
00990
00991
00992
SepAdtLogAuditRecord( &AuditParameters );
00993
00994
if ( AdtObjectTypeBuffer !=
NULL ) {
00995
ExFreePool( AdtObjectTypeBuffer );
00996 }
00997
00998
return(
TRUE );
00999 }
01000
01001
01002 BOOLEAN
01003 SepAdtOpenObjectForDeleteAuditAlarm (
01004 IN PUNICODE_STRING CapturedSubsystemName,
01005 IN PVOID *HandleId OPTIONAL,
01006 IN PUNICODE_STRING CapturedObjectTypeName,
01007 IN PVOID Object OPTIONAL,
01008 IN PUNICODE_STRING CapturedObjectName OPTIONAL,
01009 IN PTOKEN ClientToken OPTIONAL,
01010 IN PTOKEN PrimaryToken,
01011 IN ACCESS_MASK DesiredAccess,
01012 IN ACCESS_MASK GrantedAccess,
01013 IN PLUID OperationId,
01014 IN PPRIVILEGE_SET CapturedPrivileges OPTIONAL,
01015 IN BOOLEAN ObjectCreated,
01016 IN BOOLEAN AccessGranted,
01017 IN BOOLEAN GenerateAudit,
01018 IN BOOLEAN GenerateAlarm,
01019 IN HANDLE ProcessID
01020 )
01021
01022
01023
01024
01025
01026
01027
01028
01029
01030
01031
01032
01033
01034
01035
01036
01037
01038
01039
01040
01041
01042
01043
01044
01045
01046
01047
01048
01049
01050
01051
01052
01053
01054
01055
01056
01057
01058
01059
01060
01061
01062
01063
01064
01065
01066
01067
01068
01069
01070
01071
01072
01073
01074
01075
01076
01077
01078
01079
01080
01081
01082
01083
01084
01085
01086
01087
01088
01089
01090
01091
01092
01093
01094
01095
01096
01097
01098
01099
01100
01101
01102
01103
01104
01105
01106
01107
01108
01109
01110
01111
01112
01113
01114
01115
01116
01117
01118
01119
01120
01121 {
01122 SE_ADT_PARAMETER_ARRAY AuditParameters;
01123 ULONG ObjectTypeIndex;
01124 PSID CapturedUserSid;
01125 LUID PrimaryAuthenticationId;
01126 LUID ClientAuthenticationId;
01127
01128
PAGED_CODE();
01129
01130
if ( ARGUMENT_PRESENT(
ClientToken )) {
01131
01132 CapturedUserSid =
SepTokenUserSid(
ClientToken );
01133 ClientAuthenticationId =
SepTokenAuthenticationId(
ClientToken );
01134
01135 }
else {
01136
01137 CapturedUserSid =
SepTokenUserSid(
PrimaryToken );
01138 }
01139
01140 PrimaryAuthenticationId =
SepTokenAuthenticationId(
PrimaryToken );
01141
01142
01143
01144
01145
01146
01147
01148
01149
01150 RtlZeroMemory (
01151 (PVOID) &AuditParameters,
01152
sizeof( AuditParameters )
01153 );
01154
01155
ASSERT( SeAdtParmTypeNone == 0 );
01156
01157 AuditParameters.CategoryId = SE_CATEGID_OBJECT_ACCESS;
01158 AuditParameters.AuditId = SE_AUDITID_OPEN_OBJECT_FOR_DELETE;
01159 AuditParameters.ParameterCount = 0;
01160
01161
if ( AccessGranted ) {
01162
01163 AuditParameters.Type = EVENTLOG_AUDIT_SUCCESS;
01164
01165 }
else {
01166
01167 AuditParameters.Type = EVENTLOG_AUDIT_FAILURE;
01168 }
01169
01170
01171
01172
01173
01174
SepSetParmTypeSid( AuditParameters, AuditParameters.ParameterCount, CapturedUserSid );
01175
01176 AuditParameters.ParameterCount++;
01177
01178
01179
01180
01181
01182
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, CapturedSubsystemName );
01183
01184 AuditParameters.ParameterCount++;
01185
01186
01187
01188
01189
01190
if ( ARGUMENT_PRESENT( CapturedSubsystemName )) {
01191
01192
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, CapturedSubsystemName );
01193 }
01194
01195 AuditParameters.ParameterCount++;
01196
01197
01198
01199
01200
01201
if ( ARGUMENT_PRESENT( CapturedObjectTypeName )) {
01202
01203
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, CapturedObjectTypeName );
01204 ObjectTypeIndex = AuditParameters.ParameterCount;
01205 }
01206
01207 AuditParameters.ParameterCount++;
01208
01209
01210
01211
01212
01213
if ( ARGUMENT_PRESENT( CapturedObjectName )) {
01214
01215
SepSetParmTypeFileSpec( AuditParameters, AuditParameters.ParameterCount, CapturedObjectName );
01216 }
01217
01218 AuditParameters.ParameterCount++;
01219
01220
01221
01222
01223
01224
if ( ARGUMENT_PRESENT( HandleId )) {
01225
01226
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)*HandleId) );
01227 }
01228
01229 AuditParameters.ParameterCount++;
01230
01231
if ( ARGUMENT_PRESENT( OperationId )) {
01232
01233
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (*OperationId).HighPart );
01234
01235 AuditParameters.ParameterCount++;
01236
01237
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (*OperationId).LowPart );
01238
01239 AuditParameters.ParameterCount++;
01240
01241 }
else {
01242
01243 AuditParameters.ParameterCount += 2;
01244 }
01245
01246
01247
01248
01249
01250
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)ProcessID) );
01251
01252 AuditParameters.ParameterCount++;
01253
01254
01255
01256
01257
01258
SepSetParmTypeLogonId( AuditParameters, AuditParameters.ParameterCount, PrimaryAuthenticationId );
01259
01260 AuditParameters.ParameterCount++;
01261
01262
01263
01264
01265
01266
if ( ARGUMENT_PRESENT(
ClientToken )) {
01267
01268
SepSetParmTypeLogonId( AuditParameters, AuditParameters.ParameterCount, ClientAuthenticationId );
01269
01270 }
else {
01271
01272
SepSetParmTypeNoLogon( AuditParameters, AuditParameters.ParameterCount );
01273 }
01274
01275 AuditParameters.ParameterCount++;
01276
01277
01278
01279
01280
01281
if ( AccessGranted ) {
01282
01283
SepSetParmTypeAccessMask( AuditParameters, AuditParameters.ParameterCount, GrantedAccess, ObjectTypeIndex );
01284
01285 }
else {
01286
01287
SepSetParmTypeAccessMask( AuditParameters, AuditParameters.ParameterCount, DesiredAccess, ObjectTypeIndex );
01288 }
01289
01290 AuditParameters.ParameterCount++;
01291
01292
01293
01294
01295
01296
if ( (CapturedPrivileges !=
NULL) && (CapturedPrivileges->PrivilegeCount > 0) ) {
01297
01298
SepSetParmTypePrivileges( AuditParameters, AuditParameters.ParameterCount, CapturedPrivileges );
01299 }
01300
01301 AuditParameters.ParameterCount++;
01302
01303
SepAdtLogAuditRecord( &AuditParameters );
01304
01305
return(
TRUE );
01306 }
01307
01308
01309
01310
01311
VOID
01312 SepAdtCloseObjectAuditAlarm (
01313 IN PUNICODE_STRING CapturedSubsystemName,
01314 IN PVOID HandleId,
01315 IN PVOID Object,
01316 IN PSID UserSid,
01317 IN LUID AuthenticationId
01318 )
01319
01320
01321
01322
01323
01324
01325
01326
01327
01328
01329
01330
01331
01332
01333
01334
01335
01336
01337
01338
01339
01340
01341
01342
01343
01344
01345
01346
01347
01348
01349
01350
01351
01352
01353
01354
01355
01356
01357
01358
01359
01360
01361
01362
01363
01364
01365
01366
01367
01368
01369
01370
01371
01372 {
01373
01374 SE_ADT_PARAMETER_ARRAY AuditParameters;
01375 BOOLEAN AccessGranted =
TRUE;
01376 HANDLE ProcessId;
01377
01378
PAGED_CODE();
01379
01380
if (
SepAuditOptions.
DoNotAuditCloseObjectEvents ) {
01381
01382
return;
01383 }
01384
01385
if (
SepAdtAuditThisEvent( AuditCategoryObjectAccess, &AccessGranted ) ) {
01386
01387
01388
01389
01390
01391
01392
01393
01394
01395 RtlZeroMemory (
01396 (PVOID) &AuditParameters,
01397
sizeof( AuditParameters )
01398 );
01399
01400
ASSERT( SeAdtParmTypeNone == 0 );
01401
01402 AuditParameters.CategoryId = SE_CATEGID_OBJECT_ACCESS;
01403 AuditParameters.AuditId = SE_AUDITID_CLOSE_HANDLE;
01404 AuditParameters.ParameterCount = 0;
01405 AuditParameters.Type = EVENTLOG_AUDIT_SUCCESS;
01406
01407
01408
01409
01410
01411
01412
SepSetParmTypeSid( AuditParameters, AuditParameters.ParameterCount, UserSid );
01413
01414 AuditParameters.ParameterCount++;
01415
01416
01417
01418
01419
01420
01421
if ( ARGUMENT_PRESENT( CapturedSubsystemName )) {
01422
01423
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, CapturedSubsystemName );
01424 }
01425
01426 AuditParameters.ParameterCount++;
01427
01428
01429
01430
01431
01432
if ( ARGUMENT_PRESENT( CapturedSubsystemName )) {
01433
01434
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, CapturedSubsystemName );
01435 }
01436
01437 AuditParameters.ParameterCount++;
01438
01439
01440
01441
01442
01443
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)HandleId) );
01444
01445 AuditParameters.ParameterCount++;
01446
01447
01448
01449
01450
01451 ProcessId =
PsProcessAuditId(
PsGetCurrentProcess() );
01452
01453
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)ProcessId) );
01454
01455 AuditParameters.ParameterCount++;
01456
01457
SepAdtLogAuditRecord( &AuditParameters );
01458
01459 }
01460 }
01461
01462
01463
01464
VOID
01465 SepAdtDeleteObjectAuditAlarm (
01466 IN PUNICODE_STRING CapturedSubsystemName,
01467 IN PVOID HandleId,
01468 IN PVOID Object,
01469 IN PSID UserSid,
01470 IN LUID AuthenticationId
01471 )
01472
01473
01474
01475
01476
01477
01478
01479
01480
01481
01482
01483
01484
01485
01486
01487
01488
01489
01490
01491
01492
01493
01494
01495
01496
01497
01498
01499
01500
01501
01502
01503
01504
01505
01506
01507
01508
01509
01510
01511
01512
01513
01514
01515
01516
01517
01518
01519
01520
01521
01522
01523
01524
01525 {
01526
01527 SE_ADT_PARAMETER_ARRAY AuditParameters;
01528 BOOLEAN AccessGranted =
TRUE;
01529 HANDLE ProcessId;
01530
01531
PAGED_CODE();
01532
01533
if (
SepAdtAuditThisEvent( AuditCategoryObjectAccess, &AccessGranted ) ) {
01534
01535
01536
01537
01538
01539
01540
01541
01542
01543 RtlZeroMemory (
01544 (PVOID) &AuditParameters,
01545
sizeof( AuditParameters )
01546 );
01547
01548
ASSERT( SeAdtParmTypeNone == 0 );
01549
01550 AuditParameters.CategoryId = SE_CATEGID_OBJECT_ACCESS;
01551 AuditParameters.AuditId = SE_AUDITID_DELETE_OBJECT;
01552 AuditParameters.ParameterCount = 0;
01553 AuditParameters.Type = EVENTLOG_AUDIT_SUCCESS;
01554
01555
01556
01557
01558
01559
01560
SepSetParmTypeSid( AuditParameters, AuditParameters.ParameterCount, UserSid );
01561
01562 AuditParameters.ParameterCount++;
01563
01564
01565
01566
01567
01568
01569
if ( ARGUMENT_PRESENT( CapturedSubsystemName )) {
01570
01571
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, CapturedSubsystemName );
01572 }
01573
01574 AuditParameters.ParameterCount++;
01575
01576
01577
01578
01579
01580
if ( ARGUMENT_PRESENT( CapturedSubsystemName )) {
01581
01582
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, CapturedSubsystemName );
01583 }
01584
01585 AuditParameters.ParameterCount++;
01586
01587
01588
01589
01590
01591
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)HandleId) );
01592
01593 AuditParameters.ParameterCount++;
01594
01595
01596
01597
01598
01599 ProcessId =
PsProcessAuditId(
PsGetCurrentProcess() );
01600
01601
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)ProcessId) );
01602
01603 AuditParameters.ParameterCount++;
01604
01605
SepAdtLogAuditRecord( &AuditParameters );
01606
01607 }
01608 }
01609
01610
01611
01612
01613
01614
01615
01616
01617
01618
01619
01620
01621
01622
01623
01624
01626
01627
01628
01629
01630
01631
01632
01633
01634
01635
01636
01637
01638
01639
01640
01641
01642
01643
01644
01645
01646
01647
01648
01649
01650
01651
01652
01653
01654
01655
01656
01657
01658
01659
01660
01661
01662
01663
01664
01665
01666
01667
01668
01669
01670
01671
01672
01673
01674
01675
01676
01677
01679
01680
01681
01682
01683
01684
01685
01686
01687
01688
01689
01690
01691
01692
01693
01694
01695
01696
01698
01699
01700
01701
01702
01703
01704
01705
01706
01707
01708
01709
01710
01711
01712
01713
01714
01715
01716
01717
01718
01719
01720
01721
01722
01723
01724
01725
01726
01727
01728
01729
01730
01731
01733
01734
01735
01736
01737
01738
01739
01740
01741
01742
01743
01744
01745
01746
01747
01748
01750
01751
01752
01753
01754
01755
01756
01757
01758
01759
01760
01761
01762
01763
01764
01765
01766
01767
01768
01769
01770
01771
01772
01773
01774
01775
01776
01777
01778
01779
01780
01781
01782
01783
01784
01785
01786
01787
01788
01789
01790
01791
01792
01793
VOID
01794 SepAdtHandleAuditAlarm(
01795 IN PUNICODE_STRING Source,
01796 IN LUID OperationId,
01797 IN HANDLE Handle,
01798 IN PSID UserSid
01799 )
01800
01801
01802
01803
01804
01805
01806
01807
01808
01809
01810
01811
01812
01813
01814
01815
01816 {
01817 BOOLEAN AccessGranted =
TRUE;
01818 SE_ADT_PARAMETER_ARRAY AuditParameters;
01819 HANDLE ProcessID;
01820
01821
PAGED_CODE();
01822
01823
if (
SepAdtAuditThisEvent( AuditCategoryObjectAccess, &AccessGranted )) {
01824
01825
01826
01827
01828
01829
01830
01831
01832
01833 RtlZeroMemory (
01834 (PVOID) &AuditParameters,
01835
sizeof( AuditParameters )
01836 );
01837
01838
ASSERT( SeAdtParmTypeNone == 0 );
01839
01840 AuditParameters.CategoryId = SE_CATEGID_OBJECT_ACCESS;
01841 AuditParameters.AuditId = SE_AUDITID_CREATE_HANDLE;
01842 AuditParameters.ParameterCount = 0;
01843 AuditParameters.Type = EVENTLOG_AUDIT_SUCCESS;
01844
01845
01846
01847
01848
01849
01850
SepSetParmTypeSid( AuditParameters, AuditParameters.ParameterCount, UserSid );
01851
01852 AuditParameters.ParameterCount++;
01853
01854
01855
01856
01857
01858
01859
if ( ARGUMENT_PRESENT( Source )) {
01860
01861
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, Source );
01862 }
01863
01864 AuditParameters.ParameterCount++;
01865
01866
01867
01868
01869
01870
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)
Handle) );
01871
01872 AuditParameters.ParameterCount++;
01873
01874
01875
01876
01877
01878
01879
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, OperationId.HighPart );
01880
01881 AuditParameters.ParameterCount++;
01882
01883
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, OperationId.LowPart );
01884
01885 AuditParameters.ParameterCount++;
01886
01887
01888
01889
01890
01891
01892 ProcessID =
PsProcessAuditId(
PsGetCurrentProcess() );
01893
01894
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)ProcessID) );
01895
01896 AuditParameters.ParameterCount++;
01897
01898
SepAdtLogAuditRecord( &AuditParameters );
01899
01900 }
01901 }
01902
01903
01904
01905
01906
VOID
01907 SepAdtObjectReferenceAuditAlarm(
01908 IN PLUID OperationId OPTIONAL,
01909 IN PVOID Object,
01910 IN
PSECURITY_SUBJECT_CONTEXT SubjectSecurityContext,
01911 IN ACCESS_MASK DesiredAccess,
01912 IN PPRIVILEGE_SET Privileges OPTIONAL,
01913 IN BOOLEAN AccessGranted,
01914 IN BOOLEAN GenerateAudit,
01915 IN BOOLEAN GenerateAlarm
01916 )
01917
01918
01919
01920
01921
01922
01923
01924
01925
01926
01927
01928
01929
01930
01931
01932
01933
01934
01935
01936
01937
01938
01939
01940
01941
01942
01943
01944
01945
01946
01947
01948
01949
01950
01951
01952
01953
01954
01955
01956 {
01957 SE_ADT_PARAMETER_ARRAY AuditParameters;
01958 ULONG ObjectTypeIndex;
01959 POBJECT_NAME_INFORMATION ObjectNameInformation;
01960 PUNICODE_STRING ObjectTypeInformation;
01961 PSID UserSid;
01962 LUID PrimaryAuthenticationId;
01963 LUID ClientAuthenticationId;
01964
01965
PTOKEN ClientToken = (
PTOKEN)SubjectSecurityContext->ClientToken;
01966
PTOKEN PrimaryToken = (
PTOKEN)SubjectSecurityContext->PrimaryToken;
01967
01968
PAGED_CODE();
01969
01970
01971
if ( ARGUMENT_PRESENT(
ClientToken )) {
01972
01973 UserSid =
SepTokenUserSid(
ClientToken );
01974 ClientAuthenticationId =
SepTokenAuthenticationId(
ClientToken );
01975
01976 }
else {
01977
01978 UserSid =
SepTokenUserSid(
PrimaryToken );
01979 }
01980
01981 PrimaryAuthenticationId =
SepTokenAuthenticationId(
PrimaryToken );
01982
01983
01984
01985
01986
01987
01988
01989
01990
01991 RtlZeroMemory (
01992 (PVOID) &AuditParameters,
01993
sizeof( AuditParameters )
01994 );
01995
01996
ASSERT( SeAdtParmTypeNone == 0 );
01997
01998 AuditParameters.CategoryId = SE_CATEGID_DETAILED_TRACKING;
01999 AuditParameters.AuditId = SE_AUDITID_INDIRECT_REFERENCE;
02000 AuditParameters.ParameterCount = 8;
02001
02002
if ( AccessGranted ) {
02003
02004 AuditParameters.Type = EVENTLOG_AUDIT_SUCCESS;
02005
02006 }
else {
02007
02008 AuditParameters.Type = EVENTLOG_AUDIT_FAILURE;
02009 }
02010
02011
02012
02013
02014
02015
02016 ObjectNameInformation =
SepQueryNameString( Object );
02017
02018
02019 ObjectTypeInformation =
SepQueryTypeString( Object );
02020
02021
02022
02023
02024
02025
02026
02027
02028
SepSetParmTypeSid( AuditParameters, 0, UserSid );
02029
02030
02031
02032
02033
02034
02035
SepSetParmTypeString( AuditParameters, 1, &
SeSubsystemName );
02036
02037
02038
02039
02040
02041
02042
if ( ObjectTypeInformation !=
NULL ) {
02043
02044
SepSetParmTypeString( AuditParameters, 2, ObjectTypeInformation );
02045 ObjectTypeIndex = 2;
02046 }
02047
02048
02049
02050
02051
02052
02053
02054
if ( ObjectNameInformation !=
NULL ) {
02055
02056
SepSetParmTypeString( AuditParameters, 3, &ObjectNameInformation->Name );
02057 }
02058
02059
02060
02061
02062
02063
02064
02065
02066
02067
02068
02069
02070
SepSetParmTypeUlong( AuditParameters, 4, (ULONG)((ULONG_PTR)(SubjectSecurityContext->ProcessAuditId)) );
02071
02072
02073
02074
02075
02076
02077
02078
02079
02080
SepSetParmTypeLogonId( AuditParameters, 5, PrimaryAuthenticationId );
02081
02082
02083
02084
02085
02086
02087
02088
02089
if ( ARGUMENT_PRESENT(
ClientToken )) {
02090
02091
SepSetParmTypeLogonId( AuditParameters, 6, ClientAuthenticationId );
02092
02093 }
else {
02094
02095
SepSetParmTypeNoLogon( AuditParameters, 6 );
02096
02097 }
02098
02099
02100
02101
02102
02103
02104
SepSetParmTypeAccessMask( AuditParameters, 7, DesiredAccess, ObjectTypeIndex );
02105
02106
02107
SepAdtLogAuditRecord( &AuditParameters );
02108
02109
if ( ObjectNameInformation !=
NULL ) {
02110
ExFreePool( ObjectNameInformation );
02111 }
02112
02113
if ( ObjectTypeInformation !=
NULL ) {
02114
ExFreePool( ObjectTypeInformation );
02115 }
02116
02117 }
02118
02119
02120
02121
02122
02123
02124
02125
02126
02127
02128
02129
02130
02131
02132
02134
02135
02136
02137
02138
02139
02140
02141
02142
02143
02144
02145
02146
02147
02148
02149
02150
02151
02152
02153
02154
02155
02156
02157
02158
02159
02160
02161
02162
02163
02164
02165
02166
02167
02168
02169
02171
02172
02173
02174
02175
02176
02177
02178
02179
02180
02181
02182
02184
02185
02186
02187
02188
02189
02190
02191
02192
02193
02194
02195
02196
02197
02198
02199
02200
02201
02202
02203
02204
02205
02206
02207
02208
02209
02210
02211
02212
02213
02214
02215
02216
02217
02218
02219
02220
02221
02222
02223
02224
02225
02226
02227
02228
02229
02230
02231
02232
02233
02234
02235
02236
02237
02238
02239
02240
02241
02242
02243
02244
02245
02246
02247
02248
02249
02250
02251
02252
02253
02254
02255
02256
02257
02258
02259
02260
02261
02262
02263
02264
02265
02266
02267
02268
02269
02270
02271
02272
02273
02274
02275
02276
02277
02278
02279
02280
02281
02282
02283
02284
02285
02286
02287
02288
02289
02290
02291
02292
02293
02294
02295
02296
02297
02298
02299
02300
02301
02302
02303
02304
02305
02306
02307
02308
02309
02310
02311
02312
02313
02314
02315
02316
02317
02318
02319
02320
02321
02322
02323 POBJECT_NAME_INFORMATION
02324 SepQueryNameString(
02325 IN PVOID Object
02326 )
02327
02328
02329
02330
02331
02332
02333
02334
02335
02336
02337
02338
02339
02340
02341
02342
02343
02344
02345
02346
02347
02348
02349
02350 {
02351
NTSTATUS Status;
02352 ULONG ReturnLength = 0;
02353 POBJECT_NAME_INFORMATION ObjectNameInfo =
NULL;
02354 PUNICODE_STRING ObjectName =
NULL;
02355
02356
PAGED_CODE();
02357
02358
Status =
ObQueryNameString(
02359 Object,
02360 ObjectNameInfo,
02361 0,
02362 &ReturnLength
02363 );
02364
02365
if (
Status == STATUS_INFO_LENGTH_MISMATCH ) {
02366
02367 ObjectNameInfo =
ExAllocatePoolWithTag(
PagedPool, ReturnLength, 'nOeS' );
02368
02369
if ( ObjectNameInfo !=
NULL ) {
02370
02371
Status =
ObQueryNameString(
02372 Object,
02373 ObjectNameInfo,
02374 ReturnLength,
02375 &ReturnLength
02376 );
02377
02378
if (
NT_SUCCESS(
Status )) {
02379
02380
if (ObjectNameInfo->Name.Length != 0) {
02381
02382
return( ObjectNameInfo );
02383
02384 }
else {
02385
02386
ExFreePool( ObjectNameInfo );
02387
return(
NULL );
02388 }
02389 }
02390 }
02391 }
02392
02393
return(
NULL );
02394 }
02395
02396
02397
02398
02399 PUNICODE_STRING
02400 SepQueryTypeString(
02401 IN PVOID Object
02402 )
02403
02404
02405
02406
02407
02408
02409
02410
02411
02412
02413
02414
02415
02416
02417
02418
02419
02420
02421
02422
02423
02424
02425 {
02426
02427
NTSTATUS Status;
02428 PUNICODE_STRING TypeName =
NULL;
02429 ULONG ReturnLength;
02430
02431
PAGED_CODE();
02432
02433
Status =
ObQueryTypeName(
02434 Object,
02435 TypeName,
02436 0,
02437 &ReturnLength
02438 );
02439
02440
if (
Status == STATUS_INFO_LENGTH_MISMATCH ) {
02441
02442 TypeName =
ExAllocatePoolWithTag(
PagedPool, ReturnLength, 'nTeS' );
02443
02444
if ( TypeName !=
NULL ) {
02445
02446
Status =
ObQueryTypeName(
02447 Object,
02448 TypeName,
02449 ReturnLength,
02450 &ReturnLength
02451 );
02452
02453
if (
NT_SUCCESS(
Status )) {
02454
02455
return( TypeName );
02456 }
02457 }
02458 }
02459
02460
return(
NULL );
02461 }
02462
02463
02464
02465
VOID
02466 SeAuditProcessCreation(
02467
PEPROCESS Process,
02468
PEPROCESS Parent,
02469 PUNICODE_STRING ImageFileName
02470 )
02471
02472
02473
02474
02475
02476
02477
02478
02479
02480
02481
02482
02483
02484
02485
02486
02487
02488
02489
02490
02491
02492
02493 {
02494 ANSI_STRING Ansi;
02495 LUID UserAuthenticationId;
02496
NTSTATUS Status;
02497 PSID UserSid;
02498
SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
02499 SE_ADT_PARAMETER_ARRAY AuditParameters;
02500
02501
PAGED_CODE();
02502
02503
if ( ImageFileName ==
NULL )
02504 {
02505
return ;
02506 }
02507
02508
02509
02510
02511
02512
02513
02514
if ( ImageFileName->Buffer ==
NULL )
02515 {
02516
return;
02517 }
02518
02519
SeCaptureSubjectContext( &SubjectSecurityContext );
02520
02521 RtlZeroMemory (
02522 (PVOID) &AuditParameters,
02523
sizeof( AuditParameters )
02524 );
02525
02526
ASSERT( SeAdtParmTypeNone == 0 );
02527
02528 AuditParameters.CategoryId = SE_CATEGID_DETAILED_TRACKING;
02529 AuditParameters.AuditId = SE_AUDITID_PROCESS_CREATED;
02530 AuditParameters.ParameterCount = 0;
02531 AuditParameters.Type = EVENTLOG_AUDIT_SUCCESS;
02532
02533
02534
02535
02536
02537
02538 UserSid =
SepTokenUserSid( SubjectSecurityContext.
PrimaryToken );
02539
02540 UserAuthenticationId =
SepTokenAuthenticationId( SubjectSecurityContext.
PrimaryToken );
02541
02542
02543
02544
02545
02546
SepSetParmTypeSid( AuditParameters, AuditParameters.ParameterCount, UserSid );
02547 AuditParameters.ParameterCount++;
02548
02549
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, &
SeSubsystemName );
02550 AuditParameters.ParameterCount++;
02551
02552
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)Process) );
02553 AuditParameters.ParameterCount++;
02554
02555
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, ImageFileName );
02556 AuditParameters.ParameterCount++;
02557
02558
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)Parent) );
02559 AuditParameters.ParameterCount++;
02560
02561
SepSetParmTypeLogonId( AuditParameters, AuditParameters.ParameterCount, UserAuthenticationId );
02562 AuditParameters.ParameterCount++;
02563
02564
SepAdtLogAuditRecord( &AuditParameters );
02565
02566
SeReleaseSubjectContext( &SubjectSecurityContext );
02567
02568
return;
02569 }
02570
02571
02572
VOID
02573 SeAuditHandleDuplication(
02574 PVOID SourceHandle,
02575 PVOID NewHandle,
02576
PEPROCESS SourceProcess,
02577
PEPROCESS TargetProcess
02578 )
02579
02580
02581
02582
02583
02584
02585
02586
02587
02588
02589
02590
02591
02592
02593
02594
02595
02596
02597
02598
02599
02600
02601
02602
02603 {
02604 SE_ADT_PARAMETER_ARRAY AuditParameters;
02605
SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
02606 PSID UserSid;
02607
02608
PAGED_CODE();
02609
02610
SeCaptureSubjectContext( &SubjectSecurityContext );
02611
02612 UserSid =
SepTokenUserSid(
EffectiveToken( &SubjectSecurityContext ));
02613
02614 RtlZeroMemory (
02615 (PVOID) &AuditParameters,
02616
sizeof( AuditParameters )
02617 );
02618
02619
02620
ASSERT( SeAdtParmTypeNone == 0 );
02621
02622 AuditParameters.CategoryId = SE_CATEGID_DETAILED_TRACKING;
02623 AuditParameters.AuditId = SE_AUDITID_DUPLICATE_HANDLE;
02624 AuditParameters.ParameterCount = 0;
02625 AuditParameters.Type = EVENTLOG_AUDIT_SUCCESS;
02626
02627
SepSetParmTypeSid( AuditParameters, AuditParameters.ParameterCount, UserSid );
02628 AuditParameters.ParameterCount++;
02629
02630
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, &
SeSubsystemName );
02631 AuditParameters.ParameterCount++;
02632
02633
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)SourceHandle) );
02634 AuditParameters.ParameterCount++;
02635
02636
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)
PsProcessAuditId( SourceProcess )));
02637 AuditParameters.ParameterCount++;
02638
02639
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)NewHandle) );
02640 AuditParameters.ParameterCount++;
02641
02642
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)
PsProcessAuditId( TargetProcess )));
02643 AuditParameters.ParameterCount++;
02644
02645
02646
SepAdtLogAuditRecord( &AuditParameters );
02647
02648
SeReleaseSubjectContext( &SubjectSecurityContext );
02649 }
02650
02651
02652
VOID
02653 SeAuditProcessExit(
02654
PEPROCESS Process
02655 )
02656
02657
02658
02659
02660
02661
02662
02663
02664
02665
02666
02667
02668
02669
02670
02671
02672
02673 {
02674
PTOKEN Token;
02675 SE_ADT_PARAMETER_ARRAY AuditParameters;
02676 PSID UserSid;
02677 LUID LogonId;
02678
02679
PAGED_CODE();
02680
02681
Token = (
PTOKEN)Process->
Token;
02682
02683 UserSid =
SepTokenUserSid(
Token );
02684 LogonId =
SepTokenAuthenticationId(
Token );
02685
02686 RtlZeroMemory (
02687 (PVOID) &AuditParameters,
02688
sizeof( AuditParameters )
02689 );
02690
02691
02692
ASSERT( SeAdtParmTypeNone == 0 );
02693
02694 AuditParameters.CategoryId = SE_CATEGID_DETAILED_TRACKING;
02695 AuditParameters.AuditId = SE_AUDITID_PROCESS_EXIT;
02696 AuditParameters.ParameterCount = 0;
02697 AuditParameters.Type = EVENTLOG_AUDIT_SUCCESS;
02698
02699
SepSetParmTypeSid( AuditParameters, AuditParameters.ParameterCount, UserSid );
02700 AuditParameters.ParameterCount++;
02701
02702
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, &
SeSubsystemName );
02703 AuditParameters.ParameterCount++;
02704
02705
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount, (ULONG)((ULONG_PTR)
PsProcessAuditId( Process )));
02706 AuditParameters.ParameterCount++;
02707
02708
SepSetParmTypeLogonId( AuditParameters, AuditParameters.ParameterCount, LogonId );
02709 AuditParameters.ParameterCount++;
02710
02711
SepAdtLogAuditRecord( &AuditParameters );
02712 }
02713
02714
02715
02716
VOID
02717 SepAdtGenerateDiscardAudit(
02718 VOID
02719 )
02720
02721
02722
02723
02724
02725
02726
02727
02728
02729
02730
02731
02732
02733
02734
02735
02736
02737 {
02738
02739 SE_ADT_PARAMETER_ARRAY AuditParameters;
02740 PSID UserSid;
02741
02742
PAGED_CODE();
02743
02744 UserSid =
SeLocalSystemSid;
02745
02746 RtlZeroMemory (
02747 (PVOID) &AuditParameters,
02748
sizeof( AuditParameters )
02749 );
02750
02751
02752
ASSERT( SeAdtParmTypeNone == 0 );
02753
02754 AuditParameters.CategoryId = SE_CATEGID_SYSTEM;
02755 AuditParameters.AuditId = SE_AUDITID_AUDITS_DISCARDED;
02756 AuditParameters.ParameterCount = 0;
02757 AuditParameters.Type = EVENTLOG_AUDIT_SUCCESS;
02758
02759
SepSetParmTypeSid( AuditParameters, AuditParameters.ParameterCount, UserSid );
02760 AuditParameters.ParameterCount++;
02761
02762
SepSetParmTypeString( AuditParameters, AuditParameters.ParameterCount, &
SeSubsystemName );
02763 AuditParameters.ParameterCount++;
02764
02765
SepSetParmTypeUlong( AuditParameters, AuditParameters.ParameterCount,
SepAdtCountEventsDiscarded );
02766 AuditParameters.ParameterCount++;
02767
02768
SepAdtLogAuditRecord( &AuditParameters );
02769 }