diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/RansomwareReport.js b/monkey/monkey_island/cc/ui/src/components/report-components/RansomwareReport.js index 688d3cc67..dd0cc2f53 100644 --- a/monkey/monkey_island/cc/ui/src/components/report-components/RansomwareReport.js +++ b/monkey/monkey_island/cc/ui/src/components/report-components/RansomwareReport.js @@ -2,8 +2,8 @@ import React from 'react'; import ReportHeader, {ReportTypes} from './common/ReportHeader'; import ReportLoader from './common/ReportLoader'; -import pluralize from 'pluralize' import FileEncryptionTable from './ransomware/FileEncryptionTable'; +import LateralMovement from './ransomware/LateralMovement'; import '../../styles/pages/report/RansomwareReport.scss'; @@ -16,55 +16,12 @@ class RansomwareReport extends React.Component { generateReportContent() { return (
- {this.getExploitationStats()} +
) } - getExploitationStats() { - return ( -
-

- Propagation -

- {this.getScannedVsExploitedStats()} - {this.getExploitationStatsPerExploit()} -
- ) - } - - getScannedVsExploitedStats() { - let num_scanned = this.props.report.propagation_stats.num_scanned_nodes; - let num_exploited = this.props.report.propagation_stats.num_exploited_nodes; - - return( -

- The Monkey discovered {num_scanned} machines - and successfully breached {num_exploited} of them. -

- ) - } - - getExploitationStatsPerExploit() { - let exploit_counts = this.props.report.propagation_stats.num_exploited_per_exploit; - - let exploitation_details = []; - - for (let exploit in exploit_counts) { - let count = exploit_counts[exploit]; - exploitation_details.push( -
- {count}  - {pluralize('machine', count)} {pluralize('was', count)} exploited by the  - {exploit}. -
- ); - } - - return exploitation_details; - } - render() { let content = {}; if (this.stillLoadingDataFromServer()) { diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/LateralMovement.tsx b/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/LateralMovement.tsx new file mode 100644 index 000000000..c5a9f9f1e --- /dev/null +++ b/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/LateralMovement.tsx @@ -0,0 +1,60 @@ +import React, {ReactElement} from 'react'; +import NumberedReportSection from './NumberedReportSection'; +import pluralize from 'pluralize' + +const LATERAL_MOVEMENT_DESCRIPTION = 'After the initial breach, the attacker will begin the Lateral \ + Movement phase of the attack. They will employ various \ + techniques in order to compromise other systems in your \ + network and encrypt as many files as possible.' + +type PropagationStats = { + num_scanned_nodes: number, + num_exploited_nodes: number, + num_exploited_per_exploit: Array, +} + +function LateralMovement({propagationStats}: {propagationStats: PropagationStats}): ReactElement { + let body = ( + <> + {getScannedVsExploitedStats(propagationStats.num_scanned_nodes, propagationStats.num_exploited_nodes)} + {getExploitationStatsPerExploit(propagationStats.num_exploited_per_exploit)} + + ) + + return ( + + ); +} + +function getScannedVsExploitedStats(num_scanned_nodes: number, num_exploited_nodes: number): ReactElement { + return( +

+ The Monkey discovered {num_scanned_nodes} machines + and successfully breached {num_exploited_nodes} of them. +

+ ); +} + +function getExploitationStatsPerExploit(num_exploited_per_exploit: Array): Array { + let exploitation_details = []; + + for (let exploit in num_exploited_per_exploit) { + let count = num_exploited_per_exploit[exploit]; + exploitation_details.push( +
+ {count}  + {pluralize('machine', count)} {pluralize('was', count)} exploited by the  + {exploit}. +
+ ); + } + + return exploitation_details; +} + +export default LateralMovement;