Introduce fingerprint manager to avoid having to explictly import classes in configuration.
Similar to PBA manager.
This commit is contained in:
parent
ab591fcf4c
commit
8edb55723c
|
@ -33,9 +33,6 @@ class Configuration(object):
|
||||||
if self._depth_from_commandline and key == "depth":
|
if self._depth_from_commandline and key == "depth":
|
||||||
continue
|
continue
|
||||||
# handle in cases
|
# handle in cases
|
||||||
if key == 'finger_classes':
|
|
||||||
class_objects = [getattr(network_import, val) for val in value]
|
|
||||||
setattr(self, key, class_objects)
|
|
||||||
elif key == 'exploiter_classes':
|
elif key == 'exploiter_classes':
|
||||||
class_objects = [getattr(exploit_import, val) for val in value]
|
class_objects = [getattr(exploit_import, val) for val in value]
|
||||||
setattr(self, key, class_objects)
|
setattr(self, key, class_objects)
|
||||||
|
|
|
@ -12,6 +12,7 @@ from infection_monkey.utils.environment import is_windows_os
|
||||||
from infection_monkey.config import WormConfiguration
|
from infection_monkey.config import WormConfiguration
|
||||||
from infection_monkey.control import ControlClient
|
from infection_monkey.control import ControlClient
|
||||||
from infection_monkey.model import DELAY_DELETE_CMD
|
from infection_monkey.model import DELAY_DELETE_CMD
|
||||||
|
from infection_monkey.network.fingerprinter_manager import get_fingerprint_instances
|
||||||
from infection_monkey.network.firewall import app as firewall
|
from infection_monkey.network.firewall import app as firewall
|
||||||
from infection_monkey.network.network_scanner import NetworkScanner
|
from infection_monkey.network.network_scanner import NetworkScanner
|
||||||
from infection_monkey.system_info import SystemInfoCollector
|
from infection_monkey.system_info import SystemInfoCollector
|
||||||
|
@ -145,7 +146,7 @@ class InfectionMonkey(object):
|
||||||
|
|
||||||
self._exploiters = WormConfiguration.exploiter_classes
|
self._exploiters = WormConfiguration.exploiter_classes
|
||||||
|
|
||||||
self._fingerprint = [fingerprint() for fingerprint in WormConfiguration.finger_classes]
|
self._fingerprint = get_fingerprint_instances()
|
||||||
|
|
||||||
if not self._keep_running or not WormConfiguration.alive:
|
if not self._keep_running or not WormConfiguration.alive:
|
||||||
break
|
break
|
||||||
|
@ -182,7 +183,8 @@ class InfectionMonkey(object):
|
||||||
if self._default_server:
|
if self._default_server:
|
||||||
if self._network.on_island(self._default_server):
|
if self._network.on_island(self._default_server):
|
||||||
machine.set_default_server(get_interface_to_target(machine.ip_addr) +
|
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:
|
else:
|
||||||
machine.set_default_server(self._default_server)
|
machine.set_default_server(self._default_server)
|
||||||
LOG.debug("Default server for machine: %r set to %s" % (machine, machine.default_server))
|
LOG.debug("Default server for machine: %r set to %s" % (machine, machine.default_server))
|
||||||
|
|
|
@ -0,0 +1,42 @@
|
||||||
|
import importlib
|
||||||
|
import inspect
|
||||||
|
import logging
|
||||||
|
from os.path import dirname, basename, isfile, join
|
||||||
|
import glob
|
||||||
|
|
||||||
|
from infection_monkey.network.HostFinger import HostFinger
|
||||||
|
|
||||||
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def get_fingerprint_files():
|
||||||
|
"""
|
||||||
|
Gets all files under current directory(/actions)
|
||||||
|
:return: list of all files without .py ending
|
||||||
|
"""
|
||||||
|
files = glob.glob(join(dirname(__file__), "*.py"))
|
||||||
|
return [basename(f)[:-3] for f in files if isfile(f) and not f.endswith('__init__.py')]
|
||||||
|
|
||||||
|
|
||||||
|
def get_fingerprint_instances():
|
||||||
|
"""
|
||||||
|
Returns the fingerprint objects according to configuration as a list
|
||||||
|
:return: A list of HostFinger objects.
|
||||||
|
"""
|
||||||
|
fingerprinter_objects = []
|
||||||
|
fingerprint_files = get_fingerprint_files()
|
||||||
|
# Go through all of files
|
||||||
|
for file in fingerprint_files:
|
||||||
|
# Import module from that file
|
||||||
|
module = importlib.import_module(__package__ + '.' + file)
|
||||||
|
# Get all classes in a module
|
||||||
|
classes = [m[1] for m in inspect.getmembers(module, inspect.isclass)
|
||||||
|
if ((m[1].__module__ == module.__name__) and issubclass(m[1], HostFinger))]
|
||||||
|
# Get object from class
|
||||||
|
for class_object in classes:
|
||||||
|
LOG.debug("Checking if should run Fingerprinter {}".format(class_object.__name__))
|
||||||
|
if class_object.should_run(class_object.__name__):
|
||||||
|
fingerprinter = class_object()
|
||||||
|
fingerprinter_objects.append(fingerprinter)
|
||||||
|
LOG.debug("Added fingerprinter {} to fingerprint list".format(class_object.__name__))
|
||||||
|
return fingerprinter_objects
|
Loading…
Reference in New Issue