forked from p15670423/monkey
Agent: Minor code quality improvements to SSHFingerprinter
This commit is contained in:
parent
1c7ec9c41f
commit
f9b803b1ae
|
@ -1,38 +1,40 @@
|
||||||
import re
|
import re
|
||||||
from typing import Dict, Tuple, Union
|
from typing import Dict, Optional, Tuple
|
||||||
|
|
||||||
from infection_monkey.i_puppet import FingerprintData, IFingerprinter, PortScanData
|
from infection_monkey.i_puppet import FingerprintData, IFingerprinter, PingScanData, PortScanData
|
||||||
|
|
||||||
SSH_PORT = 22
|
|
||||||
SSH_REGEX = r"SSH-\d\.\d-OpenSSH"
|
SSH_REGEX = r"SSH-\d\.\d-OpenSSH"
|
||||||
LINUX_DIST_SSH = ["ubuntu", "debian"]
|
LINUX_DIST_SSH = ["ubuntu", "debian"]
|
||||||
|
DISPLAY_NAME = "SSH"
|
||||||
|
|
||||||
|
|
||||||
class SSHFingerprinter(IFingerprinter):
|
class SSHFingerprinter(IFingerprinter):
|
||||||
_SCANNED_SERVICE = "SSH"
|
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._banner_regex = re.compile(SSH_REGEX, re.IGNORECASE)
|
self._banner_regex = re.compile(SSH_REGEX, re.IGNORECASE)
|
||||||
|
|
||||||
def get_host_fingerprint(
|
def get_host_fingerprint(
|
||||||
self, host: str, _ping_scan_data, port_scan_data: Dict[int, PortScanData], _options
|
self,
|
||||||
|
host: str,
|
||||||
|
_ping_scan_data: PingScanData,
|
||||||
|
port_scan_data: Dict[int, PortScanData],
|
||||||
|
_options: Dict,
|
||||||
) -> FingerprintData:
|
) -> FingerprintData:
|
||||||
os_type = None
|
os_type = None
|
||||||
os_version = None
|
os_version = None
|
||||||
services = {}
|
services = {}
|
||||||
|
|
||||||
for ps_data in list(port_scan_data.values()):
|
for ps_data in port_scan_data.values():
|
||||||
if ps_data.banner and self._banner_regex.search(ps_data.banner):
|
if ps_data.banner and self._banner_regex.search(ps_data.banner):
|
||||||
os_type, os_version = self._get_host_os(ps_data.banner)
|
os_type, os_version = self._get_host_os(ps_data.banner)
|
||||||
services[f"tcp-{ps_data.port}"] = {
|
services[f"tcp-{ps_data.port}"] = {
|
||||||
"display_name": SSHFingerprinter._SCANNED_SERVICE,
|
"display_name": DISPLAY_NAME,
|
||||||
"port": ps_data.port,
|
"port": ps_data.port,
|
||||||
"name": "ssh",
|
"name": "ssh",
|
||||||
}
|
}
|
||||||
return FingerprintData(os_type, os_version, services)
|
return FingerprintData(os_type, os_version, services)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _get_host_os(banner) -> Tuple[Union[str, None], Union[str, None]]:
|
def _get_host_os(banner) -> Tuple[Optional[str], Optional[str]]:
|
||||||
os = None
|
os = None
|
||||||
os_version = None
|
os_version = None
|
||||||
for dist in LINUX_DIST_SSH:
|
for dist in LINUX_DIST_SSH:
|
||||||
|
|
Loading…
Reference in New Issue