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 (
    - this.setState({open: !this.state.open})}> +
    {well}