-
- To improve the monkey's detection rates, try adding users and passwords and enable the "Local
- network
- scan" config value under Basic - Network.
-
- }
-
- The first monkey run was started on {this.state.report.overview.monkey_start_time}. After {this.state.report.overview.monkey_duration}, all monkeys finished
- propagation attempts.
-
-
- The monkey started propagating from the following machines where it was manually installed:
-
- {/* Checks if there are any domain issues. If there are more then one: render the title. Otherwise,
- * don't render it (since the issues themselves will be empty. */}
- {Object.keys(this.state.report.recommendations.domain_issues).length !== 0 ?
-
- {/* Checks if there are any issues. If there are more then one: render the title. Otherwise,
- * don't render it (since the issues themselves will be empty. */}
- {Object.keys(this.state.report.recommendations.issues).length !== 0 ?
-
- The Monkey discovered {this.state.report.glance.scanned.length} machines and
- successfully breached {this.state.report.glance.exploited.length} of them.
-
-
-
- {Math.round(exploitPercentage)}% of scanned machines exploited
-
-
-
- From the attacker's point of view, the network looks like this:
-
-
- Legend:
- Exploit
- |
- Scan
- |
- Tunnel
- |
- Island Communication
-
- This map visualizes possible attack paths through the network using credential compromise. Paths represent lateral
- movement opportunities by attackers.
-
-
- Legend:
- Access credentials |
-
-
-
-
-
-
- );
- }
-
- generateAttackSection() {
- return (
-
- ATT&CK report
-
-
- This report shows information about ATT&CK techniques used by Infection Monkey.
-
- Change {issue.username}'s password to a complex one-use password
- that is not shared with other computers on the network.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SMB attack.
-
- The Monkey authenticated over the SMB protocol with user {issue.username} and its password.
-
-
- Change {issue.username}'s password to a complex one-use password
- that is not shared with other computers on the network.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SMB attack.
-
- The Monkey used a pass-the-hash attack over SMB protocol with user {issue.username}.
-
-
- Change {issue.username}'s password to a complex one-use password
- that is not shared with other computers on the network.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a WMI attack.
-
- The Monkey authenticated over the WMI protocol with user {issue.username} and its password.
-
-
- Change {issue.username}'s password to a complex one-use password
- that is not shared with other computers on the network.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a WMI attack.
-
- The Monkey used a pass-the-hash attack over WMI protocol with user {issue.username}.
-
-
- Change {issue.username}'s password to a complex one-use password
- that is not shared with other computers on the network.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SSH attack.
-
- The Monkey authenticated over the SSH protocol with user {issue.username} and its password.
-
-
- Protect {issue.ssh_key} private key with a pass phrase.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SSH attack.
-
- The Monkey authenticated over the SSH protocol with private key {issue.ssh_key}.
-
-
- Change {issue.username}'s password to a complex one-use password
- that is not shared with other computers on the network.
-
- Update your Samba server to 4.4.14 and up, 4.5.10 and up, or 4.6.4 and up.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SambaCry attack.
-
- The Monkey authenticated over the SMB protocol with user {issue.username} and its password, and used the SambaCry
- vulnerability.
-
-
- Update your VSFTPD server to the latest version vsftpd-3.0.3.
-
- The machine {issue.machine} ({issue.ip_address}) has a backdoor running at port 6200.
-
- The attack was made possible because the VSFTPD server was not patched against CVE-2011-2523.
-
In July 2011, it was discovered that vsftpd version 2.3.4 downloadable from the master site had been
- compromised.
- Users logging into a compromised vsftpd-2.3.4 server may issue a ":)" smileyface as the username and gain a command
- shell on port 6200.
-
- The Monkey executed commands by first logging in with ":)" in the username and then sending commands to the backdoor
- at port 6200.
-
Read more about the security issue and remediation here.
-
-
- Update your Elastic Search server to version 1.4.3 and up.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to an Elastic Groovy attack.
-
- The attack was made possible because the Elastic Search server was not patched against CVE-2015-1427.
-
-
- Update your Bash to a ShellShock-patched version.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a ShellShock attack.
-
- The attack was made possible because the HTTP server running on TCP port {issue.port} was vulnerable to a shell injection attack on the
- paths: {this.generateShellshockPathListBadges(issue.paths)}.
-
-
- Delete VM Access plugin configuration files.
-
- Credentials could be stolen from {issue.machine} for the following users {issue.users}. Read more about the security issue and remediation here.
-
-
- Install the latest Windows updates or upgrade to a newer operating system.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a Conficker attack.
-
- The attack was made possible because the target machine used an outdated and unpatched operating system
- vulnerable to Conficker.
-
-
- Segment your network and make sure there is no communication between machines from different segments.
-
- The network can probably be segmented. A monkey instance on {issue.machine} in the
- networks {this.generateInfoBadges(issue.networks)}
- could directly access the Monkey Island server in the
- networks {this.generateInfoBadges(issue.server_networks)}.
-
-
- Some domain users are sharing passwords, this should be fixed by changing passwords.
-
- These users are sharing access password:
- {this.generateInfoBadges(issue.shared_with)}.
-
-
- Some users are sharing passwords, this should be fixed by changing passwords.
-
- These users are sharing access password:
- {this.generateInfoBadges(issue.shared_with)}.
-
-
- Make sure the right administrator accounts are managing the right machines, and that there isn’t an unintentional local
- admin sharing.
-
- Here is a list of machines which the account {issue.username} is defined as an administrator:
- {this.generateInfoBadges(issue.shared_machines)}
-
-
- This critical machine is open to attacks via strong users with access to it.
-
- The services: {this.generateInfoBadges(issue.services)} have been found on the machine
- thus classifying it as a critical machine.
- These users has access to it:
- {this.generateInfoBadges(issue.threatening_users)}.
-
-
- 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}.
-
-
- Upgrade Struts2 to version 2.3.32 or 2.5.10.1 or any later versions.
-
- Struts2 server at {issue.machine} ({issue.ip_address}) is vulnerable to remote code execution attack.
-
- The attack was made possible because the server is using an old version of Jakarta based file upload
- Multipart parser. For possible work-arounds and more info read here.
-
-
- Update Oracle WebLogic server to the latest supported version.
-
- Oracle WebLogic server at {issue.machine} ({issue.ip_address}) is vulnerable to one of remote code execution attacks.
-
- The attack was made possible due to one of the following vulnerabilities:
- CVE-2017-10271 or
- CVE-2019-2725
-
-
- Run Hadoop in secure mode (
- add Kerberos authentication).
-
- The Hadoop server at {issue.machine} ({issue.ip_address}) is vulnerable to remote code execution attack.
-
- The attack was made possible due to default Hadoop/Yarn configuration being insecure.
-
-
- Disable the xp_cmdshell option.
-
- The machine {issue.machine} ({issue.ip_address}) is vulnerable to a MSSQL exploit attack.
-
- The attack was made possible because the target machine used an outdated MSSQL server configuration allowing
- the usage of the xp_cmdshell command. To learn more about how to disable this feature, read
- Microsoft's documentation.
-
-
- );
- }
-
- generateIssue = (issue) => {
- let data;
- switch (issue.type) {
- case 'vsftp':
- data = this.generateVsftpdBackdoorIssue(issue);
- break;
- case 'smb_password':
- data = this.generateSmbPasswordIssue(issue);
- break;
- case 'smb_pth':
- data = this.generateSmbPthIssue(issue);
- break;
- case 'wmi_password':
- data = this.generateWmiPasswordIssue(issue);
- break;
- case 'wmi_pth':
- data = this.generateWmiPthIssue(issue);
- break;
- case 'ssh':
- data = this.generateSshIssue(issue);
- break;
- case 'ssh_key':
- data = this.generateSshKeysIssue(issue);
- break;
- case 'sambacry':
- data = this.generateSambaCryIssue(issue);
- break;
- case 'elastic':
- data = this.generateElasticIssue(issue);
- break;
- case 'shellshock':
- data = this.generateShellshockIssue(issue);
- break;
- case 'conficker':
- data = this.generateConfickerIssue(issue);
- break;
- case 'island_cross_segment':
- data = this.generateIslandCrossSegmentIssue(issue);
- break;
- case 'shared_passwords':
- data = this.generateSharedCredsIssue(issue);
- break;
- case 'shared_passwords_domain':
- data = this.generateSharedCredsDomainIssue(issue);
- break;
- case 'shared_admins_domain':
- data = this.generateSharedLocalAdminsIssue(issue);
- break;
- case 'strong_users_on_crit':
- data = this.generateStrongUsersOnCritIssue(issue);
- break;
- case 'tunnel':
- data = this.generateTunnelIssue(issue);
- break;
- case 'azure_password':
- data = this.generateAzureIssue(issue);
- break;
- case 'struts2':
- data = this.generateStruts2Issue(issue);
- break;
- case 'weblogic':
- data = this.generateWebLogicIssue(issue);
- break;
- case 'hadoop':
- data = this.generateHadoopIssue(issue);
- break;
- case 'mssql':
- data = this.generateMSSQLIssue(issue);
- break;
- }
- return data;
- };
-
- generateIssues = (issues) => {
- let issuesDivArray = [];
- for (let machine of Object.keys(issues)) {
- issuesDivArray.push(
-
-
{machine}
-
- {issues[machine].map(this.generateIssue)}
-
-
- );
- }
- return
{issuesDivArray}
;
- };
}
export default ReportPageComponent;
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage.js b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage.js
index 8c855a974..17dcc9be7 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage.js
@@ -4,7 +4,9 @@ import {Button, Col, Well, Nav, NavItem, Collapse} from 'react-bootstrap';
import CopyToClipboard from 'react-copy-to-clipboard';
import GridLoader from 'react-spinners/GridLoader';
-import {Icon} from 'react-fa';
+import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
+import { faClipboard, faCheck, faSync } from '@fortawesome/free-solid-svg-icons';
+
import {Link} from 'react-router-dom';
import AuthComponent from '../AuthComponent';
import AwsRunTable from '../run-monkey/AwsRunTable';
@@ -147,7 +149,7 @@ class RunMonkeyPageComponent extends AuthComponent {
+
+ To improve the monkey's detection rates, try adding users and passwords and enable the "Local
+ network
+ scan" config value under Basic - Network.
+
+ }
+
+ The first monkey run was started on {this.state.report.overview.monkey_start_time}. After {this.state.report.overview.monkey_duration}, all monkeys finished
+ propagation attempts.
+
+
+ The monkey started propagating from the following machines where it was manually installed:
+
+ {/* Checks if there are any domain issues. If there are more then one: render the title. Otherwise,
+ * don't render it (since the issues themselves will be empty. */}
+ {Object.keys(this.state.report.recommendations.domain_issues).length !== 0 ?
+
+ {/* Checks if there are any issues. If there are more then one: render the title. Otherwise,
+ * don't render it (since the issues themselves will be empty. */}
+ {Object.keys(this.state.report.recommendations.issues).length !== 0 ?
+
+ The Monkey discovered {this.state.report.glance.scanned.length} machines and
+ successfully breached {this.state.report.glance.exploited.length} of them.
+
+
+
+ {Math.round(exploitPercentage)}% of scanned machines exploited
+
+
+
+ From the attacker's point of view, the network looks like this:
+
+
+ Legend:
+ Exploit
+ |
+ Scan
+ |
+ Tunnel
+ |
+ Island Communication
+
+ This map visualizes possible attack paths through the network using credential compromise. Paths represent lateral
+ movement opportunities by attackers.
+
+ Change {issue.username}'s password to a complex one-use password
+ that is not shared with other computers on the network.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SMB attack.
+
+ The Monkey authenticated over the SMB protocol with user {issue.username} and its password.
+
+
+ Change {issue.username}'s password to a complex one-use password
+ that is not shared with other computers on the network.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SMB attack.
+
+ The Monkey used a pass-the-hash attack over SMB protocol with user {issue.username}.
+
+
+ Change {issue.username}'s password to a complex one-use password
+ that is not shared with other computers on the network.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a WMI attack.
+
+ The Monkey authenticated over the WMI protocol with user {issue.username} and its password.
+
+
+ Change {issue.username}'s password to a complex one-use password
+ that is not shared with other computers on the network.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a WMI attack.
+
+ The Monkey used a pass-the-hash attack over WMI protocol with user {issue.username}.
+
+
+ Change {issue.username}'s password to a complex one-use password
+ that is not shared with other computers on the network.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SSH attack.
+
+ The Monkey authenticated over the SSH protocol with user {issue.username} and its password.
+
+
+ Protect {issue.ssh_key} private key with a pass phrase.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SSH attack.
+
+ The Monkey authenticated over the SSH protocol with private key {issue.ssh_key}.
+
+
+ Change {issue.username}'s password to a complex one-use password
+ that is not shared with other computers on the network.
+
+ Update your Samba server to 4.4.14 and up, 4.5.10 and up, or 4.6.4 and up.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a SambaCry attack.
+
+ The Monkey authenticated over the SMB protocol with user {issue.username} and its password, and used the SambaCry
+ vulnerability.
+
+
+ Update your VSFTPD server to the latest version vsftpd-3.0.3.
+
+ The machine {issue.machine} ({issue.ip_address}) has a backdoor running at port 6200.
+
+ The attack was made possible because the VSFTPD server was not patched against CVE-2011-2523.
+
In July 2011, it was discovered that vsftpd version 2.3.4 downloadable from the master site had been
+ compromised.
+ Users logging into a compromised vsftpd-2.3.4 server may issue a ":)" smileyface as the username and gain a command
+ shell on port 6200.
+
+ The Monkey executed commands by first logging in with ":)" in the username and then sending commands to the backdoor
+ at port 6200.
+
Read more about the security issue and remediation here.
+
+
+ Update your Elastic Search server to version 1.4.3 and up.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to an Elastic Groovy attack.
+
+ The attack was made possible because the Elastic Search server was not patched against CVE-2015-1427.
+
+
+ Update your Bash to a ShellShock-patched version.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a ShellShock attack.
+
+ The attack was made possible because the HTTP server running on TCP port {issue.port} was vulnerable to a shell injection attack on the
+ paths: {this.generateShellshockPathListBadges(issue.paths)}.
+
+
+ Delete VM Access plugin configuration files.
+
+ Credentials could be stolen from {issue.machine} for the following users {issue.users}. Read more about the security issue and remediation here.
+
+
+ Install the latest Windows updates or upgrade to a newer operating system.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a Conficker attack.
+
+ The attack was made possible because the target machine used an outdated and unpatched operating system
+ vulnerable to Conficker.
+
+
+ Segment your network and make sure there is no communication between machines from different segments.
+
+ The network can probably be segmented. A monkey instance on {issue.machine} in the
+ networks {this.generateInfoBadges(issue.networks)}
+ could directly access the Monkey Island server in the
+ networks {this.generateInfoBadges(issue.server_networks)}.
+
+
+ Some domain users are sharing passwords, this should be fixed by changing passwords.
+
+ These users are sharing access password:
+ {this.generateInfoBadges(issue.shared_with)}.
+
+
+ Some users are sharing passwords, this should be fixed by changing passwords.
+
+ These users are sharing access password:
+ {this.generateInfoBadges(issue.shared_with)}.
+
+
+ Make sure the right administrator accounts are managing the right machines, and that there isn’t an unintentional local
+ admin sharing.
+
+ Here is a list of machines which the account {issue.username} is defined as an administrator:
+ {this.generateInfoBadges(issue.shared_machines)}
+
+
+ This critical machine is open to attacks via strong users with access to it.
+
+ The services: {this.generateInfoBadges(issue.services)} have been found on the machine
+ thus classifying it as a critical machine.
+ These users has access to it:
+ {this.generateInfoBadges(issue.threatening_users)}.
+
+
+ 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}.
+
+
+ Upgrade Struts2 to version 2.3.32 or 2.5.10.1 or any later versions.
+
+ Struts2 server at {issue.machine} ({issue.ip_address}) is vulnerable to remote code execution attack.
+
+ The attack was made possible because the server is using an old version of Jakarta based file upload
+ Multipart parser. For possible work-arounds and more info read here.
+
+
+ Update Oracle WebLogic server to the latest supported version.
+
+ Oracle WebLogic server at {issue.machine} ({issue.ip_address}) is vulnerable to one of remote code execution attacks.
+
+ The attack was made possible due to one of the following vulnerabilities:
+ CVE-2017-10271 or
+ CVE-2019-2725
+
+
+ Run Hadoop in secure mode (
+ add Kerberos authentication).
+
+ The Hadoop server at {issue.machine} ({issue.ip_address}) is vulnerable to remote code execution attack.
+
+ The attack was made possible due to default Hadoop/Yarn configuration being insecure.
+
+
+ Disable the xp_cmdshell option.
+
+ The machine {issue.machine} ({issue.ip_address}) is vulnerable to a MSSQL exploit attack.
+
+ The attack was made possible because the target machine used an outdated MSSQL server configuration allowing
+ the usage of the xp_cmdshell command. To learn more about how to disable this feature, read
+ Microsoft's documentation.
+
+
+ );
+ }
+
+ generateIssue = (issue) => {
+ let data;
+ switch (issue.type) {
+ case 'vsftp':
+ data = this.generateVsftpdBackdoorIssue(issue);
+ break;
+ case 'smb_password':
+ data = this.generateSmbPasswordIssue(issue);
+ break;
+ case 'smb_pth':
+ data = this.generateSmbPthIssue(issue);
+ break;
+ case 'wmi_password':
+ data = this.generateWmiPasswordIssue(issue);
+ break;
+ case 'wmi_pth':
+ data = this.generateWmiPthIssue(issue);
+ break;
+ case 'ssh':
+ data = this.generateSshIssue(issue);
+ break;
+ case 'ssh_key':
+ data = this.generateSshKeysIssue(issue);
+ break;
+ case 'sambacry':
+ data = this.generateSambaCryIssue(issue);
+ break;
+ case 'elastic':
+ data = this.generateElasticIssue(issue);
+ break;
+ case 'shellshock':
+ data = this.generateShellshockIssue(issue);
+ break;
+ case 'conficker':
+ data = this.generateConfickerIssue(issue);
+ break;
+ case 'island_cross_segment':
+ data = this.generateIslandCrossSegmentIssue(issue);
+ break;
+ case 'shared_passwords':
+ data = this.generateSharedCredsIssue(issue);
+ break;
+ case 'shared_passwords_domain':
+ data = this.generateSharedCredsDomainIssue(issue);
+ break;
+ case 'shared_admins_domain':
+ data = this.generateSharedLocalAdminsIssue(issue);
+ break;
+ case 'strong_users_on_crit':
+ data = this.generateStrongUsersOnCritIssue(issue);
+ break;
+ case 'tunnel':
+ data = this.generateTunnelIssue(issue);
+ break;
+ case 'azure_password':
+ data = this.generateAzureIssue(issue);
+ break;
+ case 'struts2':
+ data = this.generateStruts2Issue(issue);
+ break;
+ case 'weblogic':
+ data = this.generateWebLogicIssue(issue);
+ break;
+ case 'hadoop':
+ data = this.generateHadoopIssue(issue);
+ break;
+ case 'mssql':
+ data = this.generateMSSQLIssue(issue);
+ break;
+ }
+ return data;
+ };
+
+ generateIssues = (issues) => {
+ let issuesDivArray = [];
+ for (let machine of Object.keys(issues)) {
+ issuesDivArray.push(
+
+
{machine}
+
+ {issues[machine].map(this.generateIssue)}
+
+
+ );
+ }
+ return
{issuesDivArray}
;
+ };
+}
+
+export default ReportPageComponent;
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/ZeroTrustReport.js b/monkey/monkey_island/cc/ui/src/components/report-components/ZeroTrustReport.js
new file mode 100644
index 000000000..772802c9d
--- /dev/null
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/ZeroTrustReport.js
@@ -0,0 +1,66 @@
+import React, {Fragment} from 'react';
+import AuthComponent from '../AuthComponent';
+import ReportHeader, {ReportTypes} from './common/ReportHeader';
+import ReportLoader from './common/ReportLoader';
+import PrintReportButton from './common/PrintReportButton';
+import SummarySection from './zerotrust/SummarySection';
+import FindingsSection from './zerotrust/FindingsSection';
+import PrinciplesSection from './zerotrust/PrinciplesSection';
+
+class ZeroTrustReportPageComponent extends AuthComponent {
+
+ constructor(props) {
+ super(props);
+ this.state = this.props.report
+ }
+
+ componentDidUpdate(prevProps) {
+ if (this.props.report !== prevProps.report) {
+ this.setState(this.props.report)
+ }
+ }
+
+ render() {
+ let content;
+ if (this.stillLoadingDataFromServer()) {
+ content = ;
+ } else {
+ content =
:
undefined
diff --git a/monkey/monkey_island/cc/ui/src/components/ui-components/Checkbox.js b/monkey/monkey_island/cc/ui/src/components/ui-components/Checkbox.js
index e143e0aba..6d2d0c035 100644
--- a/monkey/monkey_island/cc/ui/src/components/ui-components/Checkbox.js
+++ b/monkey/monkey_island/cc/ui/src/components/ui-components/Checkbox.js
@@ -14,10 +14,18 @@ class CheckboxComponent extends React.PureComponent {
changeHandler(name, checked) function will be called with these parameters:
this.props.name (the name of this component) and
this.state.checked (boolean indicating if this component is checked or not)
+
+ this.props.status (int) adds a class "status-x" to this checkbox. Used for styling.
*/
constructor(props) {
super(props);
+ if (this.props.hasOwnProperty('status')){
+ this.status = this.props.status;
+ } else {
+ this.status = false
+ }
this.state = {
+ status: this.status,
checked: this.props.checked,
necessary: this.props.necessary,
isAnimating: false
@@ -48,6 +56,9 @@ class CheckboxComponent extends React.PureComponent {
// Creates class string for component
composeStateClasses(core) {
let result = core;
+ if (this.state.status !== false) {
+ result += ' status-'+this.state.status;
+ }
if (this.state.necessary) {
return result + ' blocked'
}
@@ -56,7 +67,6 @@ class CheckboxComponent extends React.PureComponent {
} else {
result += ' is-unchecked'
}
-
if (this.state.isAnimating) {
result += ' do-ping';
}
@@ -69,11 +79,11 @@ class CheckboxComponent extends React.PureComponent {