Zugriffskontrollbedingungen für externe explizite Rollen überprüfen [Neu in Security Center 1.5]
Es wird empfohlen, das Plugin „Explicit Roles“ zu verwenden, um vorzuschreiben, dass alle Benutzer entweder über die Rolle „snc_internal“ für den Zugriff auf interne Ressourcen oder die Rolle „snc_external“ für den Zugriff auf externe Ressourcen verfügen.
Nach der Installation dieses Plugins wird allen vorhandenen Benutzern die Rolle „snc_internal“ zugewiesen, und vorhandene Zugriffssteuerungslisten (ACLs) werden mit den Rollenbedingungen ausgefüllt. Aufgrund der Automatisierungslogik oder des Eingreifens eines Instanzadministrators können die Rollen snc_internal oder snc_external fälschlicherweise einer ACL hinzugefügt werden, die bereits eine strengere Rollenanforderung enthält. Da die ACL-Rollenbewertung für jeden Benutzer übergeben wird, der eine einer ACL zugeordnete Rolle enthält, ist das Hinzufügen von snc_internal oder snc_external möglicherweise zu weit für den beabsichtigten Zweck einer ACL. Dies kann zu Datenverlust führen, wenn einem Benutzer mit geringen Berechtigungen Zugriff über die ACL gewährt wird.
Beispielsweise wäre es nicht erforderlich, dass die Rollen „snc_internal“ und „admin“ derselben ACL innerhalb einer Tabelle zugeordnet werden. Die ACL soll Administratoren Zugriff gewähren. In diesem Fall ist die Rolle snc_internal ein Fehler. Oder die ACL soll allen snc_internal-Benutzern Zugriff gewähren, wodurch die Administratorrolle unnötig wird. Wenn das Plugin „Explicit Roles“ installiert ist, überprüfen Sie die ACLs, die eine Rollenbedingung für snc_internal oder snc_external sowie eine Bedingung für eine andere Rolle enthalten. Wenn die Rollen für einen bestimmten Anwendungsfall funktionieren, sollte das Ergebnis regelmäßig überprüft werden.
Führen Sie das folgende Hintergrundskript aus, um eine Liste von ACLs zu erfassen, bei denen snc_internal oder snc_external einer ACL hinzugefügt wurde, die bereits einer anderen Rolle zugeordnet ist. Überprüfen Sie, ob ACLs Benutzern mit den Rollen snc_internal oder snc_external Zugriff gewähren sollen. Wenn Benutzer mit geringen Berechtigungen keinen Zugriff über die ACL haben sollen, entfernen Sie die Rollen snc_internal oder snc_external. Das Entfernen dieser Rollen kann dazu führen, dass Benutzer nicht über eine verbleibende Rolle verfügen und nicht auf die durch die ACL geschützte Ressource zugreifen können.
var ExplicitRolesEnabled = new GlidePluginManager().isActive('com.glide.explicit_roles');
// Only check if Explicit Roles is enabled
if (ExplicitRolesEnabled) {
var counterBadInternalACLs = 0;
var counterBadExternalACLs = 0;
var sysIdSncInternal = '7fcaa702933002009c8579b4f47ffbde';
var sysIdSncExternal = '940ba702933002009c8579b4f47ffbe2';
var api = new SNC.RoleManagementAPI();
var gr = new GlideRecord('sys_security_acl_role');
gr.addQuery('sys_user_role', sysIdSncInternal);
gr.query();
while (gr.next()) {
var aclSysId = gr.sys_security_acl;
var gr2 = new GlideRecord('sys_security_acl_role');
gr2.addQuery('sys_security_acl', aclSysId);
gr2.addQuery('sys_user_role', '!=', sysIdSncInternal);
gr2.addQuery('sys_user_role', '!=', sysIdSncExternal);
gr2.query();
while (gr2.next()) {
// exclude the roles if that contain snc_external
var role = gr2.sys_user_role;
var containedRoles = api.findAllContainedRolesForRole(role);
if (containedRoles.contains(sysIdSncExternal))
continue;
gs.print('Found an ACL with snc_internal and yet another role=' + role + '; ACL sys_id=' + aclSysId);
counterBadInternalACLs++;
break;
}
}
var gr = new GlideRecord('sys_security_acl_role');
gr.addQuery('sys_user_role', sysIdSncExternal);
gr.query();
while (gr.next()) {
var aclSysId = gr.sys_security_acl;
var gr2 = new GlideRecord('sys_security_acl_role');
gr2.addQuery('sys_security_acl', aclSysId);
gr2.addQuery('sys_user_role', '!=', sysIdSncInternal);
gr2.addQuery('sys_user_role', '!=', sysIdSncExternal);
gr2.query();
while (gr2.next()) {
// exclude the roles if that contain snc_internal
var role = gr2.sys_user_role;
var containedRoles = api.findAllContainedRolesForRole(role);
if (containedRoles.contains(sysIdSncInternal))
continue;
gs.print('Found an ACL with snc_external and yet another role=' + role + '; ACL sys_id=' + aclSysId);
counterBadExternalACLs++;
break;
}
}
gs.print('Total number of ACLs with snc_internal and other roles: ' + counterBadInternalACLs);
gs.print('Total number of ACLs with snc_external and other roles: ' + counterBadExternalACLs);
}Weitere Informationen
| Attribut | Beschreibung |
|---|---|
| Konfigurationsname | com.glide.explicit_roles, sys_security_acl und sys_security_acl_role |
| Konfigurationstyp | Systemeigenschaften (/sys_properties_list.do) |
| Datentyp | Kein Datentyp |
| Empfohlener Wert | Kein empfohlener Wert |
| Standardwert | Kein Standardwert |
| Kategorie | Zugriffssteuerung |
| Sicherheitsrisiko |
|
| Referenzen | Explizite Rollen |