diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/common/ExternalLink.tsx b/monkey/monkey_island/cc/ui/src/components/report-components/common/ExternalLink.tsx
new file mode 100644
index 000000000..14a724bb2
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/common/ExternalLink.tsx
@@ -0,0 +1,19 @@
+import React, {ReactFragment, ReactElement} from 'react';
+import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
+import {faExternalLinkSquareAlt} from '@fortawesome/free-solid-svg-icons';
+
+type Props = {
+ url: string,
+ text: string,
+}
+
+function ExternalLink(props: Props): ReactElement {
+ return (
+
+ {props.text}
+
+
+ )
+}
+
+export default ExternalLink
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/AttackSection.tsx b/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/AttackSection.tsx
index 58e1bc1a3..10f39e4b0 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/AttackSection.tsx
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/AttackSection.tsx
@@ -3,11 +3,21 @@ import IslandHttpClient from '../../IslandHttpClient';
import {FileEncryptionTable, TableRow} from './FileEncryptionTable';
import NumberedReportSection from './NumberedReportSection';
import LoadingIcon from '../../ui-components/LoadingIcon';
+import ExternalLink from '../common/ExternalLink';
+
+const ATTACK_DESCRIPTION = <>
+ After the attacker or malware has propagated through your network,
+ your data is at risk on any machine the attacker can access. It can be
+ encrypted and held for ransom, exfiltrated, or manipulated in
+ whatever way the attacker chooses.
+
+
+
+ >
-const ATTACK_DESCRIPTION = 'After the attacker or malware has propagated through your network, \
- your data is at risk on any machine the attacker can access. It can be \
- encrypted and held for ransom, exfiltrated, or manipulated in \
- whatever way the attacker chooses.'
const HOSTNAME_REGEX = /^(.* - )?(\S+) :.*$/;
function AttackSection(): ReactElement {
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/BreachSection.tsx b/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/BreachSection.tsx
index 1c2b71d99..fb4498e8e 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/BreachSection.tsx
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/BreachSection.tsx
@@ -3,11 +3,23 @@ import IslandHttpClient from '../../IslandHttpClient';
import NumberedReportSection from './NumberedReportSection';
import LoadingIcon from '../../ui-components/LoadingIcon';
import {renderLimitedArray} from '../common/RenderArrays';
+import ExternalLink from '../common/ExternalLink';
+
+const BREACH_DESCRIPTION = <>
+ Ransomware attacks start after machines in the internal network get
+ compromised. The initial compromise was simulated by running Monkey Agents
+ manually. Detecting ransomware at this stage will minimize the impact to the
+ organization.
+
+
+
+ >
function BreachSection() {
const [machines, setMachines] = useState(null);
- let description = 'Ransomware attacks start after machines in the internal network get compromised. ' +
- 'The initial compromise was simulated by running Monkey Agents manually.';
useEffect(() => {
IslandHttpClient.get('/api/exploitations/manual')
@@ -16,7 +28,7 @@ function BreachSection() {
if(machines !== null){
let body = getBreachSectionBody(machines);
- return ()
+ return ()
} else {
return
}
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
index a5f76f722..75af68ea5 100644
--- 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
@@ -2,19 +2,20 @@ import React, {ReactElement} from 'react';
import NumberedReportSection from './NumberedReportSection';
import pluralize from 'pluralize'
import BreachedServersComponent from '../security/BreachedServers';
+import ExternalLink from '../common/ExternalLink';
-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. \
-
\
-
\
- \
- See some real-world examples on Guardicore\'s blog. \
- '
+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.
+
+
+
+ >
type PropagationStats = {
num_scanned_nodes: number,
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/NumberedReportSection.tsx b/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/NumberedReportSection.tsx
index c0876137b..6312fd665 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/NumberedReportSection.tsx
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/ransomware/NumberedReportSection.tsx
@@ -5,7 +5,7 @@ import {faInfoCircle} from '@fortawesome/free-solid-svg-icons';
type Props = {
index: number,
title: string,
- description: string,
+ description: ReactFragment,
body: ReactFragment
}
@@ -14,7 +14,7 @@ function NumberedReportSection(props: Props): ReactElement {
@@ -27,11 +27,11 @@ function Header({index, title}: {index: number, title: string}): ReactElement {
)
}
-function Description({text}: {text: string}): ReactElement {
+function Description({description}: {description: ReactFragment}): ReactElement {
return (
-
+ {description}
)
}
diff --git a/monkey/monkey_island/cc/ui/src/styles/pages/report/RansomwareReport.scss b/monkey/monkey_island/cc/ui/src/styles/pages/report/RansomwareReport.scss
index 143e3f835..57eeed88d 100644
--- a/monkey/monkey_island/cc/ui/src/styles/pages/report/RansomwareReport.scss
+++ b/monkey/monkey_island/cc/ui/src/styles/pages/report/RansomwareReport.scss
@@ -22,3 +22,7 @@
.ransomware-breach-section .ip-address {
display: inline-block;
}
+
+.numbered-report-section .external-link-icon {
+ margin-left: .25em;
+}