diff --git a/monkey/infection_monkey/config.py b/monkey/infection_monkey/config.py index ff66ff167..723806388 100644 --- a/monkey/infection_monkey/config.py +++ b/monkey/infection_monkey/config.py @@ -161,6 +161,10 @@ class Configuration(object): keep_tunnel_open_time = 60 + # Monkey files directories + monkey_dir_linux = '/tmp/monkey_dir' + monkey_dir_windows = r'C:\Windows\Temp\monkey_dir' + ########################### # scanners config ########################### diff --git a/monkey/infection_monkey/monkey.py b/monkey/infection_monkey/monkey.py index 92913749e..4089a1c07 100644 --- a/monkey/infection_monkey/monkey.py +++ b/monkey/infection_monkey/monkey.py @@ -76,6 +76,9 @@ class InfectionMonkey(object): LOG.info("Monkey couldn't find server. Going down.") return + # Create a dir for monkey files if there isn't one + utils.create_monkey_dir() + if WindowsUpgrader.should_upgrade(): self._upgrading_to_64 = True self._singleton.unlock() @@ -215,6 +218,7 @@ class InfectionMonkey(object): self.send_log() self._singleton.unlock() + utils.remove_monkey_dir() InfectionMonkey.self_delete() LOG.info("Monkey is shutting down") diff --git a/monkey/infection_monkey/utils.py b/monkey/infection_monkey/utils.py index 635f2360d..741d7c950 100644 --- a/monkey/infection_monkey/utils.py +++ b/monkey/infection_monkey/utils.py @@ -1,5 +1,6 @@ import os import sys +import shutil import struct from infection_monkey.config import WormConfiguration @@ -35,3 +36,25 @@ def utf_to_ascii(string): # Converts utf string to ascii. Safe to use even if string is already ascii. udata = string.decode("utf-8") return udata.encode("ascii", "ignore") + + +def create_monkey_dir(): + """ + Creates directory for monkey and related files + """ + if not os.path.exists(get_monkey_dir_path()): + os.mkdir(get_monkey_dir_path()) + + +def remove_monkey_dir(): + """ + Removes monkey's root directory + """ + shutil.rmtree(get_monkey_dir_path(), ignore_errors=True) + + +def get_monkey_dir_path(): + if is_windows_os(): + return WormConfiguration.monkey_dir_windows + else: + return WormConfiguration.monkey_dir_linux diff --git a/monkey/monkey_island/cc/services/config_schema.py b/monkey/monkey_island/cc/services/config_schema.py index 8d99540bf..cbcc6ba0a 100644 --- a/monkey/monkey_island/cc/services/config_schema.py +++ b/monkey/monkey_island/cc/services/config_schema.py @@ -423,7 +423,19 @@ SCHEMA = { "type": "integer", "default": 60, "description": "Time to keep tunnel open before going down after last exploit (in seconds)" - } + }, + "monkey_dir_windows": { + "title": "Monkey's windows directory", + "type": "string", + "default": r"C:\Windows\temp\monkey_dir", + "description": "Directory containing all monkey files on windows" + }, + "monkey_dir_linux": { + "title": "Monkey's linux directory", + "type": "string", + "default": "/tmp/monkey_dir", + "description": "Directory containing all monkey files on linux" + }, } }, "classes": {