Agent: Minor code quality improvements to SSHFingerprinter

This commit is contained in:
Mike Salvatore 2022-02-10 07:08:02 -05:00
parent 1c7ec9c41f
commit f9b803b1ae
1 changed files with 11 additions and 9 deletions

View File

@ -1,38 +1,40 @@
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"
LINUX_DIST_SSH = ["ubuntu", "debian"]
DISPLAY_NAME = "SSH"
class SSHFingerprinter(IFingerprinter):
_SCANNED_SERVICE = "SSH"
def __init__(self):
self._banner_regex = re.compile(SSH_REGEX, re.IGNORECASE)
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:
os_type = None
os_version = None
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):
os_type, os_version = self._get_host_os(ps_data.banner)
services[f"tcp-{ps_data.port}"] = {
"display_name": SSHFingerprinter._SCANNED_SERVICE,
"display_name": DISPLAY_NAME,
"port": ps_data.port,
"name": "ssh",
}
return FingerprintData(os_type, os_version, services)
@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_version = None
for dist in LINUX_DIST_SSH: