Merge pull request #1748 from guardicore/1675-remove-32bit-from-hadoop

Remove 32-bit references from Hadoop
This commit is contained in:
Mike Salvatore 2022-02-28 09:52:21 -05:00 committed by GitHub
commit 54715df43d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 30 additions and 72 deletions

View File

@ -1,4 +1,5 @@
import logging import logging
from pathlib import Path
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -16,27 +17,21 @@ def get_target_monkey(host):
from infection_monkey.control import ControlClient from infection_monkey.control import ControlClient
if host.monkey_exe:
return host.monkey_exe
if not host.os.get("type"): if not host.os.get("type"):
return None return None
monkey_path = ControlClient.download_monkey_exe(host)
if host.os.get("machine") and monkey_path:
host.monkey_exe = monkey_path
if not monkey_path:
if host.os.get("type") == platform.system().lower(): 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, try:
# use our exe # When running from source, sys.executable will be "python", not an agent.
if (not host.os.get("machine") and sys.maxsize < 2 ** 32) or host.os.get( if "monkey" in Path(sys.executable).name:
"machine", "" return sys.executable
).lower() == platform.machine().lower(): except Exception as ex:
monkey_path = sys.executable logger.warning(
"Unable to retrieve this executable's path, downloading executable from the island "
f"instead: {ex}"
)
return monkey_path return ControlClient.download_monkey_exe(host)
def get_target_monkey_by_os(is_windows, is_32bit): def get_target_monkey_by_os(is_windows, is_32bit):
@ -54,7 +49,7 @@ def get_monkey_depth():
def get_monkey_dest_path(url_to_monkey): def get_monkey_dest_path(url_to_monkey):
""" """
Gets destination path from monkey's source url. Gets destination path from monkey's source url.
:param url_to_monkey: Hosted monkey's url. egz : http://localserver:9999/monkey/windows-32.exe :param url_to_monkey: Hosted monkey's url. egz : http://localserver:9999/monkey/windows-64.exe
:return: Corresponding monkey path from configuration :return: Corresponding monkey path from configuration
""" """
from infection_monkey.config import WormConfiguration from infection_monkey.config import WormConfiguration

View File

@ -274,7 +274,7 @@ class WebRCE(HostExploiter):
"monkey_path": dest_path, "monkey_path": dest_path,
"http_path": http_path, "http_path": http_path,
} }
self.telemetry_messenger.send_telemtry( self.telemetry_messenger.send_telemetry(
T1197Telem(ScanStatus.USED, self.host, BITS_UPLOAD_STRING) T1197Telem(ScanStatus.USED, self.host, BITS_UPLOAD_STRING)
) )
resp = self.exploit(url, backup_command) resp = self.exploit(url, backup_command)
@ -334,10 +334,10 @@ class WebRCE(HostExploiter):
command = CHMOD_MONKEY % {"monkey_path": path} command = CHMOD_MONKEY % {"monkey_path": path}
try: try:
resp = self.exploit(url, command) resp = self.exploit(url, command)
self.telemetry_messenger.send_telemtry(T1222Telem(ScanStatus.USED, command, self.host)) self.telemetry_messenger.send_telemetry(T1222Telem(ScanStatus.USED, command, self.host))
except Exception as e: except Exception as e:
logger.error("Something went wrong while trying to change permission: %s" % e) logger.error("Something went wrong while trying to change permission: %s" % e)
self.telemetry_messenger.send_telemtry(T1222Telem(ScanStatus.SCANNED, "", self.host)) self.telemetry_messenger.send_telemetry(T1222Telem(ScanStatus.SCANNED, "", self.host))
return False return False
# If exploiter returns True / False # If exploiter returns True / False
if isinstance(resp, bool): if isinstance(resp, bool):
@ -432,8 +432,7 @@ class WebRCE(HostExploiter):
except KeyError: except KeyError:
logger.error( logger.error(
'Unknown key was found. Please use "linux" and "win64" keys to ' 'Unknown key was found. Please use "linux" and "win64" keys to '
"initialize " "initialize custom dict of monkey's destination paths"
"custom dict of monkey's destination paths"
) )
return False return False

View File

@ -8,7 +8,6 @@ class VictimHost(object):
self.os = {} self.os = {}
self.services = {} self.services = {}
self.icmp = False self.icmp = False
self.monkey_exe = None
self.default_tunnel = None self.default_tunnel = None
self.default_server = None self.default_server = None
@ -42,7 +41,6 @@ class VictimHost(object):
for k, v in list(self.services.items()): for k, v in list(self.services.items()):
victim += "%s-%s " % (k, v) victim += "%s-%s " % (k, v)
victim += "] ICMP: %s " % (self.icmp) victim += "] ICMP: %s " % (self.icmp)
victim += "target monkey: %s" % self.monkey_exe
return victim return victim
def set_island_address(self, ip: str, port: Optional[str]): def set_island_address(self, ip: str, port: Optional[str]):

View File

@ -11,61 +11,23 @@ from monkey_island.cc.server_utils.consts import MONKEY_ISLAND_ABS_PATH
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
MONKEY_DOWNLOADS = [ MONKEY_DOWNLOADS = [
{
"type": "linux",
"machine": "x86_64",
"filename": "monkey-linux-64",
},
{
"type": "linux",
"machine": "i686",
"filename": "monkey-linux-32",
},
{
"type": "linux",
"machine": "i386",
"filename": "monkey-linux-32",
},
{ {
"type": "linux", "type": "linux",
"filename": "monkey-linux-64", "filename": "monkey-linux-64",
}, },
{ {
"type": "windows", "type": "windows",
"machine": "x86",
"filename": "monkey-windows-32.exe",
},
{
"type": "windows",
"machine": "amd64",
"filename": "monkey-windows-64.exe", "filename": "monkey-windows-64.exe",
}, },
{
"type": "windows",
"machine": "64",
"filename": "monkey-windows-64.exe",
},
{
"type": "windows",
"machine": "32",
"filename": "monkey-windows-32.exe",
},
{
"type": "windows",
"filename": "monkey-windows-32.exe",
},
] ]
def get_monkey_executable(host_os, machine): def get_monkey_executable(host_os):
for download in MONKEY_DOWNLOADS: for download in MONKEY_DOWNLOADS:
if host_os == download.get("type") and machine == download.get("machine"): if host_os == download.get("type"):
logger.info("Monkey exec found for os: {0} and machine: {1}".format(host_os, machine)) logger.info(f"Monkey exec found for os: {host_os}")
return download return download
logger.warning( logger.warning(f"No monkey executables could be found for the host os: {host_os}")
"No monkey executables could be found for the host os or machine or both: host_os: {"
"0}, machine: {1}".format(host_os, machine)
)
return None return None
@ -80,7 +42,7 @@ class MonkeyDownload(flask_restful.Resource):
host_json = json.loads(request.data) host_json = json.loads(request.data)
host_os = host_json.get("os") host_os = host_json.get("os")
if host_os: if host_os:
result = get_monkey_executable(host_os.get("type"), host_os.get("machine")) result = get_monkey_executable(host_os.get("type"))
if result: if result:
# change resulting from new base path # change resulting from new base path

View File

@ -25,7 +25,7 @@ class LocalMonkeyRunService:
@staticmethod @staticmethod
def run_local_monkey(): def run_local_monkey():
# get the monkey executable suitable to run on the server # get the monkey executable suitable to run on the server
result = get_monkey_executable(platform.system().lower(), platform.machine().lower()) result = get_monkey_executable(platform.system().lower())
if not result: if not result:
return False, "OS Type not found" return False, "OS Type not found"

View File

@ -16,7 +16,6 @@ HOST_AS_DICT = {
"os": {}, "os": {},
"services": {}, "services": {},
"icmp": False, "icmp": False,
"monkey_exe": None,
"default_tunnel": None, "default_tunnel": None,
"default_server": None, "default_server": None,
} }
@ -37,7 +36,13 @@ ERROR_MSG = "failed because yolo"
@pytest.fixture @pytest.fixture
def exploit_telem_test_instance(): def exploit_telem_test_instance():
return ExploitTelem(EXPLOITER_NAME, HOST, ExploiterResultData(RESULT, RESULT, OS_LINUX, EXPLOITER_INFO, EXPLOITER_ATTEMPTS, ERROR_MSG)) return ExploitTelem(
EXPLOITER_NAME,
HOST,
ExploiterResultData(
RESULT, RESULT, OS_LINUX, EXPLOITER_INFO, EXPLOITER_ATTEMPTS, ERROR_MSG
),
)
def test_exploit_telem_send(exploit_telem_test_instance, spy_send_telemetry): def test_exploit_telem_send(exploit_telem_test_instance, spy_send_telemetry):

View File

@ -14,7 +14,6 @@ HOST_AS_DICT = {
"os": {}, "os": {},
"services": {}, "services": {},
"icmp": False, "icmp": False,
"monkey_exe": None,
"default_tunnel": None, "default_tunnel": None,
"default_server": None, "default_server": None,
} }