diff --git a/monkey_island/cc/ui/src/components/pages/ReportPage.js b/monkey_island/cc/ui/src/components/pages/ReportPage.js
index 4eb847053..48a2d1e55 100644
--- a/monkey_island/cc/ui/src/components/pages/ReportPage.js
+++ b/monkey_island/cc/ui/src/components/pages/ReportPage.js
@@ -76,7 +76,7 @@ class ReportPageComponent extends React.Component {
generateSmbPasswordIssue(issue) {
return (
-
+
Change {issue.username}'s password to a complex one-use password
that is not shared with other computers on the network.
@@ -87,13 +87,13 @@ class ReportPageComponent extends React.Component {
The attack succeeded by authenticating over SMB protocol with user {issue.username} and its password.
-
+
);
}
generateSmbPthIssue(issue) {
return (
-
+
Change {issue.username}'s password to a complex one-use password
that is not shared with other computers on the network.
@@ -104,13 +104,13 @@ class ReportPageComponent extends React.Component {
The attack succeeded by using a pass-the-hash attack over SMB protocol with user {issue.username}.
-
+
);
}
generateWmiPasswordIssue(issue) {
return (
-
+
Change {issue.username}'s password to a complex one-use password
that is not shared with other computers on the network.
@@ -121,13 +121,13 @@ class ReportPageComponent extends React.Component {
The attack succeeded by authenticating over WMI protocol with user {issue.username} and its password.
-
+
);
}
generateWmiPthIssue(issue) {
return (
-
+
Change {issue.username}'s password to a complex one-use password
that is not shared with other computers on the network.
@@ -138,13 +138,13 @@ class ReportPageComponent extends React.Component {
The attack succeeded by using a pass-the-hash attack over WMI protocol with user {issue.username}.
-
+
);
}
generateSshIssue(issue) {
return (
-
+
Change {issue.username}'s password to a complex one-use password
that is not shared with other computers on the network.
@@ -155,13 +155,13 @@ class ReportPageComponent extends React.Component {
The attack succeeded by authenticating over SSH protocol with user {issue.username} and its password.
-
+
);
}
generateRdpIssue(issue) {
return (
-
+
Change {issue.username}'s password to a complex one-use password
that is not shared with other computers on the network.
@@ -172,13 +172,13 @@ class ReportPageComponent extends React.Component {
The attack succeeded by authenticating over RDP protocol with user {issue.username} and its password.
-
+
);
}
generateSambaCryIssue(issue) {
return (
-
+
Change {issue.username}'s password to a complex one-use password
that is not shared with other computers on the network.
@@ -192,13 +192,13 @@ class ReportPageComponent extends React.Component {
className="label label-success">{issue.username} and its password, and by using the SambaCry
vulnerability.
-
+
);
}
generateElasticIssue(issue) {
return (
-
+
Update your Elastic Search server to version 1.4.3 and up.
The machine {issue.machine} with the following IP address
The attack succeeded because the Elastic Search server was not parched against CVE-2015-1427.
-
+
);
}
generateShellshockIssue(issue) {
return (
-
+
Update your Bash to a ShellShock-patched version.
The machine {issue.machine} with the following IP address {issue.port} was vulnerable to a shell injection attack on the
paths: {this.generateShellshockPathListBadges(issue.paths)}.
-
+
);
}
generateConfickerIssue(issue) {
return (
-
+
Install the latest Windows updates or upgrade to a newer operating system.
The machine {issue.machine} with the following address
-
+
);
}
generateCrossSegmentIssue(issue) {
return (
-
+
Segment your network. Make sure machines can't access machines from other segments.
The network can probably be segmented. A monkey instance on
-
+
);
}
generateTunnelIssue(issue) {
return (
-
+
Use micro-segmentation policies to disable communication other than the required.
Machines are not locked down at port level. Network tunnel was set up from {issue.machine} to {issue.dest}.
-
+
);
}
- generateIssue = (issue, index) => {
+ generateIssue = (issue) => {
let data;
switch (issue.type) {
case 'smb_password':
@@ -312,23 +312,22 @@ class ReportPageComponent extends React.Component {
data = this.generateTunnelIssue(issue);
break;
}
- return (
-
-
Recommendation #{index + 1}
- {data}
-
- );
+ return data;
};
generateIssues = (issues) => {
let issuesDivArray = [];
for (var machine of Object.keys(issues)) {
issuesDivArray.push(
- {machine}
+
+ {machine}
+
+ {issues[machine].map(this.generateIssue)}
+
+
);
- issuesDivArray.push(issues[machine].map(this.generateIssue));
}
- return issuesDivArray;
+ return ;
};
render() {
diff --git a/monkey_island/cc/ui/src/components/report-components/CollapsibleWell.js b/monkey_island/cc/ui/src/components/report-components/CollapsibleWell.js
index 6dee76601..d896b6d59 100644
--- a/monkey_island/cc/ui/src/components/report-components/CollapsibleWell.js
+++ b/monkey_island/cc/ui/src/components/report-components/CollapsibleWell.js
@@ -1,5 +1,5 @@
import React from 'react';
-import {Collapse, Well} from 'react-bootstrap';
+import {Button, Collapse, Well} from 'react-bootstrap';
class CollapsibleWellComponent extends React.Component {
constructor(props) {
@@ -20,9 +20,9 @@ class CollapsibleWellComponent extends React.Component {
return (