-
Remediation & Prioritization Recommendations
-
- Consider remediating share ACEs by risk level, starting with critical and high risks. Consider reviewing the share creation timeline and data details from the other sections for additional context. Next, prioritize remediating groups of shares to speed up the process. Prioritize by folder group (shares containing exactly the same files) or by share names that have a high similarity score.
-
Prioritizing those groups may help reduce remediation actions by as much as $RemediationSavings percent for this environment. Below is a summary of the potential task reduction for each approach.
-
View the
-
Folder Group or
-
Share Names sections for more details.
+
+
+
Remediation & Prioritization Recommendations
+
+ Remediate share ACEs by risk level, starting with critical and high risks. Review the share creation timeline and share name details from other sections for additional context.
+ Consider remediating mutliple ACEs at one time based on natural share groupings to reduce the number of remediation tasks.
+ Group Examples:
+
+ - Group ACE remediation tasks by folder groups, which contain exactly the same file listing.
+ - Group ACE remediation tasks by share names with a high similarity scores.
+
+
+ Remediating ACEs by group may reduce remediation tasks by as much as
$RemediationSavings% for this environment. The chart below shows the task savings.
+
-
@@ -10500,95 +10858,6 @@ var TimelineCreationChartVar = new ApexCharts(document.querySelector("#TimelinCr
TimelineCreationChartVar.render();
-// --------------------------
-// Dashboard Page: Sankey Chart
-// --------------------------
-
-
- const SankeyData = {
- nodes: [
- {
- id: 'Networks ($SubnetsCount)',
- title: 'Networks ($SubnetsCount)',
- color: '#6f5420',
- },
- {
- id: 'Computers ($ComputerWithExcessive)',
- title: 'Computers ($ComputerWithExcessive)',
- color: '#7D825E',
- },
- {
- id: 'Shares ($ExcessiveSharesCount)',
- title: 'Shares ($ExcessiveSharesCount)',
- color: '#f29650',
- },
- {
- id: 'ACEs ($ExcessiveSharePrivsCount)',
- title: 'ACEs ($ExcessiveSharePrivsCount)',
- color: '#345367',
- },
- {
- id: 'Critical ($RiskLevelCountCritical)',
- title: 'Critical ($RiskLevelCountCritical)',
- color: '#772400',
- },
- {
- id: 'High ($RiskLevelCountHigh)',
- title: 'High ($RiskLevelCountHigh)',
- color: '#f56a00',
- },
- {
- id: 'Medium ($RiskLevelCountMedium)',
- title: 'Medium ($RiskLevelCountMedium)',
- color: '#6f5420',
- },
- {
- id: 'Low ($RiskLevelCountLow)',
- title: 'Low ($RiskLevelCountLow)',
- color: '#f3f1e6',
- },
- ],
- edges: [
- {
- source: 'Networks ($SubnetsCount)',
- target: 'Computers ($ComputerWithExcessive)',
- value: $ComputerWithExcessive,
- color: '#000', // Custom color for this edge
- },
- {
- source: 'Computers ($ComputerWithExcessive)',
- target: 'Shares ($ExcessiveSharesCount)',
- value: $ExcessiveSharesCount,
- color: '#000', // Custom color for this edge
- },
- {
- source: 'Shares ($ExcessiveSharesCount)',
- target: 'ACEs ($ExcessiveSharePrivsCount)',
- value: $ExcessiveSharePrivsCount,
- color: '#000', // Custom color for this edge
- },
- $SanKeyCritical
- $SanKeyHigh
- $SanKeyMedium
- $SanKeyLow
- ],
-};
-
-const graphOptions = {
- nodeWidth: 10,
- fontFamily: 'Quicksand, sans-serif',
- fontSize: '14px',
- fontWeight: 400,
- fontColor: '#345367',
- height: 200,
- width: 1200,
- spacing: 10, // margin
- enableTooltip: true,
- canvasStyle: 'border: 0px solid #caced0;',
-};
-const s = new ApexSankey(document.getElementById('svg-sankey'), graphOptions);
-s.render(SankeyData);
-
// --------------------------
// side menu collapse function
@@ -11116,6 +11385,10 @@ ChartFGRiska.render();
const datanetwork = $subnetChartString;
const categoriesnetwork = ['Low','Medium','High','Critical'];
+// Reverse the order of the array
+datanetwork.reverse();
+categoriesnetwork.reverse();
+
const ChartNetworkRiskOptions = {
series: [{
data: datanetwork
@@ -11323,6 +11596,12 @@ const ChartDashboardIFOptions = {
},
xaxis: {
categories: categories,
+ axisTicks: {
+ show: false
+ },
+ labels: {
+ show: false // Hide the x-axis labels
+ }
},
colors: ['#f29650','#345367'], // Orange for discovered, Blue for verified
title: {
@@ -11344,40 +11623,44 @@ const ChartDashboardIFOptions = {
const ChartDashboardIF = new ApexCharts(document.querySelector("#ChartDashboardIF"), ChartDashboardIFOptions);
ChartDashboardIF.render();
+
// --------------------------
// Dashboard Page: Risk Level chart
// --------------------------
// Set data series
-var DataSeriesComputers = [$RiskLevelComputersCountLow, $RiskLevelComputersCountMedium, $RiskLevelComputersCountHigh, $RiskLevelComputersCountCritical];
-var DataSeriesShares = [$RiskLevelSharePathCountLow, $RiskLevelSharePathCountMedium, $RiskLevelSharePathCountHigh, $RiskLevelSharePathCountCritical];
+var DataSeriesNetwork = [$AllNetworksWithLowCount, $AllNetworksWithMediumCount, $AllNetworksWithHighCount, $AllNetworksWithCriticalCount];
+var DataSeriesComputers = [$AllComputersWithLowCount, $AllComputersWithMediumCount, $AllComputersWithHighCount, $AllComputersWithCriticalCount];
+var DataSeriesShares = [$AllSharesWithLowCount, $AllSharesWithMediumCount, $AllSharesWithHighCount, $AllSharesWithCriticalCount];
var DataSeriesACEs = [$RiskLevelCountLow, $RiskLevelCountMedium, $RiskLevelCountHigh,$RiskLevelCountCritical];
// Reverse each array
+DataSeriesNetwork.reverse();
DataSeriesComputers.reverse();
DataSeriesShares.reverse();
DataSeriesACEs.reverse();
// Find max values
-var maxComputer = Math.max(...DataSeriesComputers);
-var maxShares = Math.max(...DataSeriesShares);
-var maxACEs = Math.max(...DataSeriesACEs);
-var maxValueOverall = Math.max(maxComputer, maxShares, maxACEs);
+var maxNetwork = Math.max(...DataSeriesNetwork);
+var maxComputer = Math.max(...DataSeriesComputers);
+var maxShares = Math.max(...DataSeriesShares);
+var maxACEs = Math.max(...DataSeriesACEs);
+var maxValueOverall = Math.max(maxNetwork, maxComputer, maxShares, maxACEs);
// Initialize ApexCharts
const ChartDashboardRiskOptions = {
series: [{
+ name: 'Network',
+ data: DataSeriesNetwork
+ }, {
name: 'Computers',
data: DataSeriesComputers
- //color: 'blue' // Set color for Computers series
- },{
+ }, {
name: 'Shares',
data: DataSeriesShares
- //color: 'green' // Set color for Shares series
- },{
+ }, {
name: 'ACEs',
data: DataSeriesACEs
- //color: 'red' // Set color for ACEs series
}],
chart: {
type: 'bar',
@@ -11385,40 +11668,48 @@ const ChartDashboardRiskOptions = {
},
plotOptions: {
bar: {
- borderRadius: 0,
- borderRadiusApplication: 'end',
horizontal: true,
- barHeight: '90%', // Reduce bar height for more space
- barGap: '0%', // Adds gap between bars in the same group
- // barSpacing: 0.0 // Adds space between the groups (risk levels)
+ barHeight: '90%', // Reduce bar height for more space
+ borderWidth: 0 // Remove borders around bars
}
},
- colors: ['#7D825E', '#f29650', '#345367'], // Colors for the bars
+ colors: ['#71808D', '#7D825E', '#f29650', '#345367'], // Added a new color for the Network series
dataLabels: {
enabled: true,
+ formatter: function (val) {
+ return val === 0 ? '' : val; // Hide the label if the value is 0
+ },
+ offsetX: 4, // Move the labels 4px to the right of the bar
+ textAnchor: 'start', // Ensure the label starts at the end of the bar
style: {
fontSize: '12px',
- colors: ['#345367', '#345367', '#f29650'] // colors for the lables #FF9965
- },
- offsetX: 0
+ colors: ['#345367','#345367', '#345367', '#f29650'] // Updated colors for the labels
+ }
},
grid: {
- show: false,
- opacity: 0.5
+ show: false
},
xaxis: {
- categories: ['Critical','High','Medium','Low'],
- max: maxValueOverall,
- min: 0
+ categories: ['Critical', 'High', 'Medium', 'Low'],
+ max: maxValueOverall,
+ labels: {
+ show: false // Hide the x-axis labels
+ },
+ axisBorder: {
+ show: true
+ },
+ axisTicks: {
+ show: false
+ }
},
title: {
- text: 'Asset Count by Risk Level',
+ text: 'Affected Asset Count by Risk Level',
align: 'center',
margin: 10,
style: {
- fontSize: '14px',
- fontWeight: 'bold',
- color: '#71808d'
+ fontSize: '14px',
+ fontWeight: 'bold',
+ color: '#71808d'
}
}
};
@@ -11430,106 +11721,106 @@ ChartDashboardRisk.render();
// Dashboard Page: Chart - Remediation Prioritization
// --------------------------
- // Set data series
- var DataSeriesAverage = $RemediationBase;
- var DataSeriesActual = $RemediationSave;
+ // Set data series
+ var DataSeriesAverage = $RemediationBase;
+ var DataSeriesActual = $RemediationSave;
-
- // Find max values
- var maxValueAverage = Math.max(...DataSeriesAverage);
- var maxValueActual = Math.max(...DataSeriesActual);
- var maxValueOverall = Math.max(maxValueAverage, maxValueActual);
+ // Find max values
+ var maxValueAverage = Math.max(...DataSeriesAverage);
+ var maxValueActual = Math.max(...DataSeriesActual);
+ var maxValueOverall = Math.max(maxValueAverage, maxValueActual);
- var RemCompareOptions = {
- series: [{
- name: 'Affected Shares',
- data: DataSeriesAverage
- }, {
- name: 'Grouping',
- data: DataSeriesActual
- }],
- chart: {
- type: 'bar',
- height: 250
+ var RemCompareOptions = {
+ series: [{
+ name: 'Affected ACEs',
+ data: DataSeriesAverage
+ }, {
+ name: 'Remediation Tasks',
+ data: DataSeriesActual
+ }],
+ chart: {
+ type: 'bar',
+ height: 250
+ },
+ plotOptions: {
+ bar: {
+ horizontal: false,
+ columnWidth: '55%',
+ endingShape: 'rounded',
+ dataLabels: {
+ position: 'top' // Moves the label to the top of the bar
+ }
},
- plotOptions: {
- bar: {
- horizontal: false,
- columnWidth: '55%',
- endingShape: 'rounded'
- },
+ },
+ colors: ['#345367', '#f29650'], // Reversed colors for Average and Actual bars
+ dataLabels: {
+ enabled: true, // Enable data labels
+ offsetY: -20, // Move the label 20px above the bar
+ style: {
+ fontSize: '12px',
+ colors: ['#345367', '#345367'], // Colors for labels
},
- colors: ['#345367', '#f29650'], // Reversed colors for Average and Actual bars
- dataLabels: {
- enabled: true, // Enable data labels
+ formatter: function (val) {
+ return val; // Append percentage sign to data labels
+ }
+ },
+ stroke: {
+ show: true,
+ width: 2,
+ colors: ['transparent']
+ },
+ grid: {
+ show: false,
+ opacity: 0.5
+ },
+ xaxis: {
+ categories: ['By ACE (Default)', 'By Folder Group (Perfect Match)', 'By Share Name (High Similarity)'], // X-axis categories
+ labels: {
style: {
- fontSize: '12px',
- colors: ['#f29650', '#345367'], // Colors for labels
- },
- formatter: function (val, opts) {
- return val; // Display values with percentage sign
- },
- offsetY: -6 // Adjust position of the label
- },
- stroke: {
- show: true,
- width: 2,
- colors: ['transparent']
- },
- grid: {
- show: false,
- opacity: 0.5
- },
- xaxis: {
- categories: ['Individul ACEs (No Grouping)','Folder Grouping', 'Share Name Grouping (High Similarity)'], // X-axis categories
- labels: {
- style: {
- colors: '#71808d', // Set x-axis labels to gray
- }
- }
- },
- yaxis: {
- title: {
- text: 'Remediation Tasks',
- style: {
- fontWeight: 'normal',
- color: '#71808d' // Set "Percentage" text to gray
- }
- },
- labels: {
- style: {
- colors: '#71808d', // Set y-axis labels to gray
- },
- formatter: function (val) {
- return val; // Format y-axis labels with percentage sign
- }
- },
- max: Math.ceil(maxValueOverall * 1.1),
- min: 0
- },
- fill: {
- opacity: 1
- },
- tooltip: {
- y: {
- formatter: function (val) {
- return val; // Show percentage in tooltip
- }
+ colors: '#71808d' // Set x-axis labels to gray
}
},
+ axisTicks: {
+ show: false // Hide x-axis ticks
+ }
+ },
+ yaxis: {
title: {
- text: 'Remediation Effort by Task Grouping Approach', // Updated chart title
- align: 'center',
+ text: '', // Remediation Tasks
style: {
- fontSize: '14px',
- fontWeight: 'bold',
- color: '#71808d'
+ fontWeight: 'normal',
+ color: '#71808d' // Set text color to gray
+ }
+ },
+ labels: {
+ show: false // Hide y-axis labels
+ },
+ max: Math.ceil(maxValueOverall * 1.1),
+ min: 0
+ },
+ fill: {
+ opacity: 1
+ },
+ tooltip: {
+ y: {
+ formatter: function (val) {
+ return val + "%"; // Show percentage in tooltip
}
}
- };
+ },
+ title: {
+ text: 'Number of Remediation Tasks by Grouping Approach', // Updated chart title
+ align: 'center',
+ style: {
+ fontSize: '14px',
+ fontWeight: 'bold',
+ color: '#71808d'
+ }
+ }
+ };
- var RemCompareOptionschart = new ApexCharts(document.querySelector("#ChartDashboardRemediate"), RemCompareOptions);
- RemCompareOptionschart.render();
+var RemCompareOptionschart = new ApexCharts(document.querySelector("#ChartDashboardRemediate"), RemCompareOptions);
+RemCompareOptionschart.render();
// --------------------------
// Dashboard Page: Chart - Peer Comparison
@@ -11537,101 +11828,101 @@ ChartDashboardRisk.render();
// Set data series
var DataSeriesAverage = $PeerCompareAverageP;
- var DataSeriesActual = $PeerCompareActuaP;
+ var DataSeriesActual = $PeerCompareActuaP;
-
- // Find max values
- var maxValueAverage = Math.max(...DataSeriesAverage);
- var maxValueActual = Math.max(...DataSeriesActual);
- var maxValueOverall = Math.max(maxValueAverage, maxValueActual);
+ // Find max values
+ var maxValueAverage = Math.max(...DataSeriesAverage);
+ var maxValueActual = Math.max(...DataSeriesActual);
+ var maxValueOverall = Math.max(maxValueAverage, maxValueActual);
var PeerCompareOptions = {
series: [{
- name: 'Peer Average',
- data: DataSeriesAverage
- }, {
- name: 'This Environment',
- data: DataSeriesActual
- }],
+ name: 'Peer Average',
+ data: DataSeriesAverage
+ }, {
+ name: 'This Environment',
+ data: DataSeriesActual
+ }],
chart: {
- type: 'bar',
- height: 250
- },
- plotOptions: {
- bar: {
- horizontal: false,
- columnWidth: '55%',
- endingShape: 'rounded'
+ type: 'bar',
+ height: 250
},
- },
- colors: ['#345367', '#f29650'], // Reversed colors for Average and Actual bars
- dataLabels: {
- enabled: true, // Enable data labels
- style: {
- fontSize: '12px',
- colors: ['#f29650', '#345367'], // Colors for labels
+ plotOptions: {
+ bar: {
+ horizontal: false,
+ columnWidth: '55%',
+ endingShape: 'rounded',
+ dataLabels: {
+ position: 'top' // Moves the label to the top of the bar
+ }
+ },
},
- formatter: function (val, opts) {
- return val + '%'; // Display values with percentage sign
- },
- offsetY: -6 // Adjust position of the label
- },
- grid: {
- show: false,
- opacity: 0.5
- },
- stroke: {
- show: true,
- width: 2,
- colors: ['transparent']
- },
- xaxis: {
- categories: ['Computers', 'Shares', 'ACEs'], // X-axis categories
- labels: {
- style: {
- colors: '#71808d', // Set x-axis labels to gray
- }
- }
- },
- yaxis: {
- title: {
- text: 'Percentage (%)',
+ colors: ['#345367', '#f29650'], // Reversed colors for Average and Actual bars
+ dataLabels: {
+ enabled: true,
+ offsetY: -20, // Move the label 10px above the bar
style: {
fontSize: '12px',
- fontWeight: 'normal',
- color: '#71808d' // Set "Percentage" text to gray
- }
- },
- labels: {
- style: {
- colors: '#71808d', // Set y-axis labels to gray
+ colors: ['#345367', '#345367'] // Custom colors for labels
},
formatter: function (val) {
- return val + '%'; // Format y-axis labels with percentage sign
+ return val + '%'; // Append '%' to the data label
}
},
- max: Math.ceil(maxValueOverall * 1.1),
- min: 0
- },
- fill: {
- opacity: 1
- },
- tooltip: {
- y: {
- formatter: function (val) {
- return val + "%"; // Show percentage in tooltip
+ grid: {
+ show: false,
+ opacity: 0.5
+ },
+ stroke: {
+ show: true,
+ width: 2,
+ colors: ['transparent']
+ },
+ xaxis: {
+ categories: ['Computers', 'Shares', 'ACEs'], // X-axis categories
+ labels: {
+ style: {
+ colors: '#71808d' // Set x-axis labels to gray
+ }
+ },
+ axisTicks: {
+ show: false // Hide x-axis ticks
+ }
+ },
+ yaxis: {
+ title: {
+ text: '', // Percentage (%)
+ style: {
+ fontSize: '12px',
+ fontWeight: 'normal',
+ color: '#71808d' // Set "Percentage" text to gray
+ }
+ },
+ labels: {
+ show: false // Hide y-axis labels
+ },
+ max: Math.ceil(maxValueOverall * 1.1),
+ min: 0
+ },
+ fill: {
+ opacity: 1
+ },
+ tooltip: {
+ y: {
+ formatter: function (val) {
+ return val + "%"; // Show percentage in tooltip
+ }
+ }
+ },
+ title: {
+ text: 'Percent of Assets with Excessive Privileges', // Updated chart title - Percent of Assets with Excessive Privileges
+ align: 'center',
+ style: {
+ fontSize: '14px',
+ fontWeight: 'bold',
+ color: '#71808d'
}
}
- },
- title: {
- text: 'Percent of Assets with Excessive Privileges', // Updated chart title
- align: 'center',
- style: {
- fontSize: '14px',
- fontWeight: 'bold',
- color: '#71808d'
- }
- }
};
var PeerCompareOptionschart = new ApexCharts(document.querySelector("#ChartDashboardPeerCompare"), PeerCompareOptions);