diff --git a/xtoskrnl/CMakeLists.txt b/xtoskrnl/CMakeLists.txt index 3d7767a..f542251 100644 --- a/xtoskrnl/CMakeLists.txt +++ b/xtoskrnl/CMakeLists.txt @@ -126,6 +126,8 @@ list(APPEND XTOSKRNL_SOURCE ${XTOSKRNL_SOURCE_DIR}/rtl/time.cc ${XTOSKRNL_SOURCE_DIR}/rtl/unicode.cc ${XTOSKRNL_SOURCE_DIR}/rtl/widestr.cc + ${XTOSKRNL_SOURCE_DIR}/se/access.cc + ${XTOSKRNL_SOURCE_DIR}/se/audit.cc ${XTOSKRNL_SOURCE_DIR}/se/descript.cc ${XTOSKRNL_SOURCE_DIR}/se/privileg.cc) diff --git a/xtoskrnl/includes/se.hh b/xtoskrnl/includes/se.hh index 75ef5bf..7f92143 100644 --- a/xtoskrnl/includes/se.hh +++ b/xtoskrnl/includes/se.hh @@ -11,6 +11,8 @@ #include +#include +#include #include #include diff --git a/xtoskrnl/includes/se/access.hh b/xtoskrnl/includes/se/access.hh new file mode 100644 index 0000000..0d98931 --- /dev/null +++ b/xtoskrnl/includes/se/access.hh @@ -0,0 +1,28 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/includes/se/access.hh + * DESCRIPTION: Security access state check routines + * DEVELOPERS: Aiken Harris + */ + +#ifndef __XTOSKRNL_SE_ACCESS_HH +#define __XTOSKRNL_SE_ACCESS_HH + +#include + + +/* Kernel Security */ +namespace SE +{ + class Access + { + public: + STATIC XTFASTCALL ACCESS_MASK ComputeDeniedAccesses(IN ACCESS_MASK GrantedAccess, + IN ACCESS_MASK DesiredAccess); + STATIC XTFASTCALL ACCESS_MASK ComputeGrantedAccesses(IN ACCESS_MASK GrantedAccess, + IN ACCESS_MASK DesiredAccess); + }; +} + +#endif /* __XTOSKRNL_SE_ACCESS_HH */ diff --git a/xtoskrnl/includes/se/audit.hh b/xtoskrnl/includes/se/audit.hh new file mode 100644 index 0000000..0666def --- /dev/null +++ b/xtoskrnl/includes/se/audit.hh @@ -0,0 +1,29 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/includes/se/audit.hh + * DESCRIPTION: Security Auditing + * DEVELOPERS: Aiken Harris + */ + +#ifndef __XTOSKRNL_SE_AUDIT_HH +#define __XTOSKRNL_SE_AUDIT_HH + +#include + + +/* Kernel Security */ +namespace SE +{ + class Audit + { + public: + STATIC XTAPI VOID OperationAuditAlarm(IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId, + IN PUNICODE_STRING ObjectTypeName, + IN ACCESS_MASK AccessMask, + IN PSID UserSid); + }; +} + +#endif /* __XTOSKRNL_SE_AUDIT_HH */ diff --git a/xtoskrnl/includes/se/descript.hh b/xtoskrnl/includes/se/descript.hh index 5a4c87d..5493c10 100644 --- a/xtoskrnl/includes/se/descript.hh +++ b/xtoskrnl/includes/se/descript.hh @@ -28,7 +28,7 @@ namespace SE OUT PULONG QuotaSize); STATIC XTAPI VOID ReleaseSecurityDescriptor(IN PSECURITY_DESCRIPTOR Descriptor, IN KPROCESSOR_MODE ProcessorMode, - IN BOOLEAN ForceRelease); + IN BOOLEAN Force); }; } diff --git a/xtoskrnl/se/access.cc b/xtoskrnl/se/access.cc new file mode 100644 index 0000000..b79cfd6 --- /dev/null +++ b/xtoskrnl/se/access.cc @@ -0,0 +1,54 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/se/access.cc + * DESCRIPTION: Security access state check routines + * DEVELOPERS: Aiken Harris + */ + +#include + + +/** + * Computes the access rights that are requested but not granted. + * + * @param GrantedAccessMask + * Supplies the mask of access rights currently granted to the subject. + * + * @param DesiredAccessMask + * Supplies the mask of access rights requested by the subject. + * + * @return This routine returns an access mask with the bits in DesiredAccess that are not present in GrantedAccess. + * + * @since XT 1.0 + */ +XTFASTCALL +ACCESS_MASK +SE::Access::ComputeDeniedAccesses(IN ACCESS_MASK GrantedAccessMask, + IN ACCESS_MASK DesiredAccessMask) +{ + /* Return the desired denied accesses */ + return ~GrantedAccessMask & DesiredAccessMask; +} + +/** + * Computes the access rights that are both requested and granted. + * + * @param GrantedAccessMask + * Supplies the mask of access rights currently granted to the subject. + * + * @param DesiredAccessMask + * Supplies the mask of access rights requested by the subject. + * + * @return This routine returns an access mask containing the intersection of DesiredAccess and GrantedAccess bits. + * + * @since XT 1.0 + */ +XTFASTCALL +ACCESS_MASK +SE::Access::ComputeGrantedAccesses(IN ACCESS_MASK GrantedAccessMask, + IN ACCESS_MASK DesiredAccessMask) +{ + /* Return the desired granted accesses */ + return GrantedAccessMask & DesiredAccessMask; +} diff --git a/xtoskrnl/se/audit.cc b/xtoskrnl/se/audit.cc new file mode 100644 index 0000000..15bd18e --- /dev/null +++ b/xtoskrnl/se/audit.cc @@ -0,0 +1,43 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/se/audit.cc + * DESCRIPTION: Security Auditing + * DEVELOPERS: Aiken Harris + */ + +#include + + +/** + * Generates a security audit alarm for an object access operation. + * + * @param SubsystemName + * Supplies the name of the subsystem triggering the audit alarm. + * + * @param HandleId + * Supplies the handle or identifier of the object being accessed. + * + * @param ObjectTypeName + * Supplies the name of the object type being accessed. + * + * @param AccessMask + * Supplies the access mask containing the specific rights that triggered the audit. + * + * @param UserSid + * Optionally supplies the SID of the user initiating the operation. + * + * @return This routine does not return any value. + * + * @since XT 1.0 + */ +XTAPI +VOID +SE::Audit::OperationAuditAlarm(IN PUNICODE_STRING SubsystemName, + IN PVOID HandleId, + IN PUNICODE_STRING ObjectTypeName, + IN ACCESS_MASK AccessMask, + IN PSID UserSid) +{ + UNIMPLEMENTED; +} diff --git a/xtoskrnl/se/descript.cc b/xtoskrnl/se/descript.cc index 0a4e3c7..ae91b14 100644 --- a/xtoskrnl/se/descript.cc +++ b/xtoskrnl/se/descript.cc @@ -101,7 +101,7 @@ SE::Descriptor::ComputeQuotaInformationSize(IN PSECURITY_DESCRIPTOR SecurityDesc * @param ProcessorMode * Supplies the processor mode that was originally used to capture the descriptor. * -* @param ForceRelease +* @param Force * Supplies a boolean value indicating whether to force the deallocation. * * @return This routine does not return any value. @@ -112,10 +112,10 @@ XTAPI VOID SE::Descriptor::ReleaseSecurityDescriptor(IN PSECURITY_DESCRIPTOR Descriptor, IN KPROCESSOR_MODE ProcessorMode, - IN BOOLEAN ForceRelease) + IN BOOLEAN Force) { /* Check if the descriptor should be released */ - if(((ProcessorMode == KernelMode) && (ForceRelease == TRUE)) || (ProcessorMode == UserMode)) + if(((ProcessorMode == KernelMode) && (Force == TRUE)) || (ProcessorMode == UserMode)) { /* Ensure the descriptor is valid */ if(Descriptor)