Lucene search
+L

Operating System (OS) Detection (NTP)

🗓️ 01 Jun 2019 00:00:00Reported by Copyright (C) 2019 Greenbone AGType 
openvas
 openvas
🔗 plugins.openvas.org👁 44 Views

Operating System (OS) Detection for NTP server based on Network Time Protocol (NTP)

Code
# SPDX-FileCopyrightText: 2019 Greenbone AG
# Some text descriptions might be excerpted from (a) referenced
# source(s), and are Copyright (C) by the respective right holder(s).
#
# SPDX-License-Identifier: GPL-2.0-only

if(description)
{
  script_oid("1.3.6.1.4.1.25623.1.0.108590");
  script_version("2024-06-13T05:05:46+0000");
  script_tag(name:"last_modification", value:"2024-06-13 05:05:46 +0000 (Thu, 13 Jun 2024)");
  script_tag(name:"creation_date", value:"2019-06-01 07:09:18 +0000 (Sat, 01 Jun 2019)");
  script_tag(name:"cvss_base_vector", value:"AV:N/AC:L/Au:N/C:N/I:N/A:N");
  script_tag(name:"cvss_base", value:"0.0");
  script_name("Operating System (OS) Detection (NTP)");
  script_category(ACT_GATHER_INFO);
  script_family("Product detection");
  script_copyright("Copyright (C) 2019 Greenbone AG");
  script_dependencies("ntp_open.nasl");
  script_mandatory_keys("ntp/full_banner/available");

  script_tag(name:"summary", value:"Network Time Protocol (NTP) server based Operating System (OS)
  detection.");

  script_tag(name:"qod_type", value:"remote_banner");

  exit(0);
}

include("host_details.inc");
include("os_func.inc");
include("port_service_func.inc");

SCRIPT_DESC = "Operating System (OS) Detection (NTP)";
BANNER_TYPE = "NTP Server banner";

port = service_get_port( default:123, ipproto:"udp", proto:"ntp" );

sys_banner = get_kb_item( "ntp/" + port + "/system_banner" );
full_banner = get_kb_item( "ntp/" + port + "/full_banner" );
vers_banner = get_kb_item( "ntp/" + port + "/version_banner" );

# nb: This should be before the system banner check below because the Meinberg LANTIME devices are
# (usually) also exposing a Linux banner but we want to register the LANTIME Firmware before...
if( full_banner ) {
  # LANTIME=LANTIME/PZF/M300
  # LANTIME=tsmc/GPS170/M3x
  # LANTIME=metronom/GRC181/M2x/V5.34p6/SN060211011270
  # nb: More detailed OS detection in gsf/gb_meinberg_lantime_ntp_detect.nasl
  if( concl = egrep( string:full_banner, pattern:"LANTIME=(LANTIME|tsmc|metronom)", icase:FALSE ) ) {
    concl = chomp( concl );
    os_register_and_report( os:"Meinberg LANTIME Firmware", cpe:"cpe:/o:meinbergglobal:lantime_firmware", banner_type:BANNER_TYPE, banner:concl, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
  }
}

# nb:
# - This check should be before the version banner below because some NTPsec services are still
#   exposing the system banner and that one is more detailed and should be used first
# - There are around 23k of such systems using "/" as the system banner available on Shodan and it's
#   not clear what's behind this pattern so these have been excluded here
if( sys_banner && sys_banner != "/" ) {

  sys_banner_lo = tolower( sys_banner );

  if( "linux" >< sys_banner_lo ) {

    # Linux/4.9.72-gentoo
    # Linux/2.6.24-gentoo-r4
    if( "-gentoo" >< sys_banner ) {
      os_register_and_report( os:"Gentoo", cpe:"cpe:/o:gentoo:linux", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }

    # Linux/2.6.24-ARCH
    # Linux/5.0.9-arch1-1-ARCH
    # Linux/4.12.8-2-ARCH
    # Linux/3.2.8-1-ARCH
    else if( "-arch" >< sys_banner_lo ) {
      os_register_and_report( os:"Arch Linux", cpe:"cpe:/o:archlinux:arch_linux", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }

    # Linux2.4.18_mvl30-amazon
    else if( "-amazon" >< sys_banner_lo ) {
      os_register_and_report( os:"Amazon Linux", cpe:"cpe:/o:amazon:linux", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {

      # Linux/2.6.35em1-g9733209
      # Linux2.4.20_mvl31-bcm95836cpci
      # Linux2.2.13
      version = eregmatch( pattern:"Linux/?([0-9.]+)", string:sys_banner );
      if( ! isnull( version[1] ) ) {
        os_register_and_report( os:"Linux", version:version[1], cpe:"cpe:/o:linux:kernel", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
      } else {
        os_register_and_report( os:"Linux", cpe:"cpe:/o:linux:kernel", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
      }
    }
  }

  else if( "windows" >< sys_banner_lo || sys_banner =~ "^win" ) {

    # Win2008R2 x64
    # Win2016
    # Win2012R2
    # Win2003
    # or just: Windows
    if( sys_banner =~ "win2008r2" ) {
      os_register_and_report( os:"Microsoft Windows Server 2008 R2", cpe:"cpe:/o:microsoft:windows_server_2008:r2", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"windows" );
    } else if( sys_banner =~ "win2008" ) {
      os_register_and_report( os:"Microsoft Windows Server 2008", cpe:"cpe:/o:microsoft:windows_server_2008", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"windows" );
    } else if( sys_banner =~ "win2016" ) {
      os_register_and_report( os:"Microsoft Windows Server 2016", cpe:"cpe:/o:microsoft:windows_server_2016", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"windows" );
    } else if( sys_banner =~ "win2012r2" ) {
      os_register_and_report( os:"Microsoft Windows Server 2012 R2", cpe:"cpe:/o:microsoft:windows_server_2012:r2", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"windows" );
    } else if( sys_banner =~ "win2012" ) {
      os_register_and_report( os:"Microsoft Windows Server 2012", cpe:"cpe:/o:microsoft:windows_server_2012", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"windows" );
    } else if( sys_banner =~ "win2003" ) {
      os_register_and_report( os:"Microsoft Windows Server 2003", cpe:"cpe:/o:microsoft:windows_server_2003", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"windows" );
    } else {
      os_register_and_report( os:sys_banner, cpe:"cpe:/o:microsoft:windows", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"windows" );
    }
  }

  # UNIX
  else if( "unix" >< sys_banner_lo ) {
    os_register_and_report( os:"Linux/Unix", cpe:"cpe:/o:linux:kernel", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
  }

  else if( "freebsd" >< sys_banner_lo ) {

    # FreeBSDJNPR-12.1-20221028.898be19_buil
    # FreeBSDJNPR-11.0-20180730.2cd3a6e_buil
    # FreeBSDJNPR-10.3-20170422.348838_build
    # FreeBSD/10.1-RELEASE-p25
    # FreeBSD/11.2-RELEASE-p6
    version = eregmatch( pattern:"FreeBSD(/|JNPR-)([0-9.]+)(-RELEASE-(p[0-9]+))?", string:sys_banner );
    if( ! isnull( version[2] ) && ! isnull( version[4] ) ) {
      os_register_and_report( os:"FreeBSD", version:version[2], patch:version[4], cpe:"cpe:/o:freebsd:freebsd", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else if( ! isnull( version[2] ) ) {
      os_register_and_report( os:"FreeBSD", version:version[2], cpe:"cpe:/o:freebsd:freebsd", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"FreeBSD", cpe:"cpe:/o:freebsd:freebsd", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  else if( "netbsd" >< sys_banner_lo ) {

    # NetBSD/8.0
    # NetBSD/6.1.5
    # NetBSD/7.1_STABLE
    # NetBSD/6.99.23
    # NetBSD/6.1_STABLE
    # NetBSD/8.1_RC1
    version = eregmatch( pattern:"NetBSD/([0-9.]+)", string:sys_banner );
    if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"NetBSD", version:version[1], cpe:"cpe:/o:netbsd:netbsd", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"NetBSD", cpe:"cpe:/o:netbsd:netbsd", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  else if( "openbsd" >< sys_banner_lo ) {

    # OpenBSD/3.2
    # OpenBSD/6.3
    # OpenBSD/6.5
    version = eregmatch( pattern:"OpenBSD/([0-9.]+)", string:sys_banner );
    if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"OpenBSD", version:version[1], cpe:"cpe:/o:openbsd:openbsd", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"OpenBSD", cpe:"cpe:/o:openbsd:openbsd", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  else if( "sunos" >< sys_banner_lo ) {

    # SunOS/5.10
    # SunOS/5.11
    # SunOS/5.8
    version = eregmatch( pattern:"SunOS/([0-9.]+)", string:sys_banner );
    if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"SunOS", version:version[1], cpe:"cpe:/o:sun:sunos", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"SunOS", cpe:"cpe:/o:sun:sunos", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  else if( "hp-ux" >< sys_banner_lo ) {

    # HP-UX/
    version = eregmatch( pattern:"HP-UX/([0-9.]+)", string:sys_banner );
    if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"HP-UX", version:version[1], cpe:"cpe:/o:hp:hp-ux", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"HP-UX", cpe:"cpe:/o:hp:hp-ux", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  else if( "data ontap" >< sys_banner_lo ) {

    # Data ONTAP/8.2.4P1
    # Data ONTAP/8.2.5
    # Data ONTAP/9.4P1
    version = eregmatch( pattern:"Data ONTAP/([0-9.a-zA-Z\-]+)", string:sys_banner );
    if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"NetApp Data ONTAP", version:version[1], cpe:"cpe:/o:netapp:data_ontap", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"NetApp Data ONTAP", cpe:"cpe:/o:netapp:data_ontap", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  else if( "junos" >< sys_banner_lo ) {

    # JUNOS11.4R13.5
    # JUNOS12.1X46-D40.2
    # JUNOS14.2R5-S1.2
    # JUNOS15.1R6.7
    version = eregmatch( pattern:"JUNOS([0-9.a-zA-Z]+)", string:sys_banner );
    if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"Juniper Networks Junos OS", version:version[1], cpe:"cpe:/o:juniper:junos", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"Juniper Networks Junos OS", cpe:"cpe:/o:juniper:junos", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  else if( "secureos" >< sys_banner_lo ) {

    # SecureOS/8.3.2P09
    # SecureOS/7.0.1.03.H15
    # SecureOS/8.1.2
    # SecureOS/8.3.2E178
    # SecureOS/8.3.2P11
    version = eregmatch( pattern:"SecureOS/([0-9.]+)((\.H|P|E)([0-9]+))?", string:sys_banner );
    if( ! isnull( version[1] ) && ! isnull( version[4] ) ) {
      version[3] = str_replace( string:version[3], find:".H", replace:"H" );
      os_register_and_report( os:"Secure64 SecureOS", version:version[1], patch:version[3] + version[4], cpe:"cpe:/o:secure64:secureos", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"Secure64 SecureOS", version:version[1], cpe:"cpe:/o:secure64:secureos", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"Secure64 SecureOS", cpe:"cpe:/o:secure64:secureos", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  # sparcv9-wrs-vxworks
  # powerpc-wrs-vxworks
  # arm-wrs-vxworks
  else if( "vxworks" >< sys_banner_lo ) {
    os_register_and_report( os:"Wind River VxWorks", cpe:"cpe:/o:windriver:vxworks", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
  }

  # Darwin/16.7.0
  # Darwin7.6.0
  # Darwin/9.5.1
  # Darwin/8.11.1
  # Darwin8.11.0
  #
  # TODO: We might be able to do a matching between the Darwin version and OS X / iOS:
  # https://en.wikipedia.org/wiki/Darwin_(operating_system)#Release_history
  else if( sys_banner =~ "Darwin[0-9/]" ) {
    os_register_and_report( os:"Apple Mac OS X / macOS / iOS", cpe:"cpe:/o:apple:mac_os_x", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
  }

  else if( sys_banner =~ "^QNX" ) {

    # QNX/6.5.0
    # QNX/6.4.1
    # QNX/6.3.2
    version = eregmatch( pattern:"QNX/([0-9.]+)", string:sys_banner );
    if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"QNX Neutrino Realtime Operating System", version:version[1], cpe:"cpe:/o:blackberry:qnx_neutrino_rtos", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"QNX Neutrino Realtime Operating System", cpe:"cpe:/o:blackberry:qnx_neutrino_rtos", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  else if( "isilon onefs" >< sys_banner_lo ) {

    # Isilon OneFS/v8.0.1.1
    # Isilon OneFS/v7.2.1.0
    # Isilon OneFS/v8.0.0.6
    # Isilon OneFS/v8.1.0.2
    # Isilon OneFS/v8.0.0.4
    version = eregmatch( pattern:"Isilon OneFS/v([0-9.]+)", string:sys_banner );
    if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"Dell EMC PowerScale OneFS", version:version[1], cpe:"cpe:/o:dell:emc_powerscale_onefs", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
      os_register_and_report( os:"EMC Isilon OneFS", version:version[1], cpe:"cpe:/o:emc:isilon_onefs", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"Dell EMC PowerScale OneFS", cpe:"cpe:/o:dell:emc_powerscale_onefs", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
      os_register_and_report( os:"EMC Isilon OneFS", cpe:"cpe:/o:emc:isilon_onefs", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  else if( sys_banner =~ "^GBOS" ) {

    # GBOS/6.2.12
    # GBOS/6.2.10
    # GBOS/6.2.11
    version = eregmatch( pattern:"GBOS/([0-9.]+)", string:sys_banner );
    if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"GTA GB-OS", version:version[1], cpe:"cpe:/o:gta:gb-os", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"GTA GB-OS", cpe:"cpe:/o:gta:gb-os", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  # powerpc-ecos-ecos
  # eCos/0x7fffff00
  else if( "ecos-ecos" >< sys_banner_lo || sys_banner =~ "^ecos" ) {
    os_register_and_report( os:"eCos RTOS", cpe:"cpe:/o:ecoscentric:ecos_rtos", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
  }

  # BRIX
  # nb: Not absolutely clear about this, assuming http://brix-os.sourceforge.net for now
  else if( sys_banner =~ "^BRIX" ) {
    os_register_and_report( os:"BRiX", cpe:"cpe:/o:brix:brix", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
  }

  else if( "eq/os" >< sys_banner_lo ) {

    # EQ/OS_84.118.6-RELEASE-p4
    # EQ/OS_84.118.5-RELEASE-p4
    version = eregmatch( pattern:"EQ/OS_([0-9.]+)(-RELEASE-(p[0-9]+))?", string:sys_banner );
    if( ! isnull( version[1] ) && ! isnull( version[3] ) ) {
      os_register_and_report( os:"Fortinet EQ/OS", version:version[1], patch:version[3], cpe:"cpe:/o:fortinet:eq%2Fos", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"Fortinet EQ/OS", version:version[1], cpe:"cpe:/o:fortinet:eq%2Fos", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"Fortinet EQ/OS", cpe:"cpe:/o:fortinet:eq%2Fos", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  else if( "chiaros" >< sys_banner_lo ) {

    # Chiaros/4.10-RELEASE
    version = eregmatch( pattern:"Chiaros/([0-9.]+)", string:sys_banner );
    if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"Chiaro Networks Chiaros", version:version[1], cpe:"cpe:/o:chiaro:chiaros", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"Chiaro Networks Chiaros", cpe:"cpe:/o:chiaro:chiaros", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  else if( "mitautm" >< sys_banner_lo ) {

    # MitaUTM/10.1-RELEASE-p15
    version = eregmatch( pattern:"MitaUTM/([0-9.]+)(-RELEASE-(p[0-9]+))?", string:sys_banner );
    if( ! isnull( version[1] ) && ! isnull( version[3] ) ) {
      os_register_and_report( os:"MitaUTM", version:version[1], patch:version[3], cpe:"cpe:/o:mitautm:mitautm", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"MitaUTM", version:version[1], cpe:"cpe:/o:mitautm:mitautm", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"MitaUTM", cpe:"cpe:/o:mitautm:mitautm", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  # Moscad ACE
  # nb: VX-Works based real-time operating system
  else if( "moscad ace" >< sys_banner_lo ) {
    os_register_and_report( os:"Motorola Moscad ACE", cpe:"cpe:/o:motorola:moscad_ace_firmware", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
  }

  # UnixWare5
  # nb: The 5 in the banner above is not the actual version, at least the same system had e.g. SCO UnixWare 7.1.4 in the telnet banner.
  # As we can't differentiate between the company here we're using the most recent one in the CPE.
  else if( "unixware" >< sys_banner_lo ) {
    os_register_and_report( os:"Univel/Novell/SCO/Xinuos UnixWare", cpe:"cpe:/o:xinuos:unixware", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
  }

  else if( "brickstoros" >< sys_banner_lo ) {

    # BrickStorOS/19.01
    version = eregmatch( pattern:"BrickStorOS/([0-9.]+)", string:sys_banner );
    if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"RackTop Systems BrickStor OS", version:version[1], cpe:"cpe:/o:racktopsystems:brickstoros", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"RackTop Systems BrickStor OS", cpe:"cpe:/o:racktopsystems:brickstoros", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  # "VMkernel is a POSIX-like operating system developed by VMware."
  else if( sys_banner =~ "^VMkernel" ) {

    # VMkernel/5.5.0
    # VMkernel/6.0.0
    # VMkernel/4.0.0
    # VMkernel/4.1.0
    # VMkernel/5.0.0
    # VMkernel/6.5.0
    # VMkernel/5.1.0
    # VMkernel/3.5.0
    version = eregmatch( pattern:"VMkernel/([0-9.]+)", string:sys_banner );
    if( ! isnull( version[1] ) ) {
      os_register_and_report( os:"VMware VMkernel", version:version[1], cpe:"cpe:/o:vmware:vmkernel", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    } else {
      os_register_and_report( os:"VMware VMkernel", cpe:"cpe:/o:vmware:vmkernel", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    }
  }

  else if( "cisco" >< sys_banner_lo ) {
    os_register_and_report( os:"Cisco IOS", cpe:"cpe:/o:cisco:ios", banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
  }

  else {
    # nb: Setting the runs_key to unixoide makes sure that we still schedule VTs using Host/runs_unixoide as a fallback
    os_register_and_report( os:sys_banner, banner_type:BANNER_TYPE, banner:sys_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
    os_register_unknown_banner( banner:sys_banner, banner_type_name:BANNER_TYPE, banner_type_short:"ntp_banner", port:port, proto:"udp" );
  }
}

if( vers_banner ) {

  # nb:
  # - NTPsec is (at least currently) only supported / running on Unixoide systems according to https://www.ntpsec.org/supported-platforms.html
  # - Some NTPsec services are still exposing the system banner
  if( "ntpd ntpsec" >< vers_banner ) {
    os_register_and_report( os:"Linux/Unix", cpe:"cpe:/o:linux:kernel", banner_type:BANNER_TYPE, banner:vers_banner, port:port, proto:"udp", desc:SCRIPT_DESC, runs_key:"unixoide" );
  }

  # nb: Don't report something like e.g. the following as this usually doesn't include any OS info...
  # ntpd [email protected] Tue Apr 25 02:46:00 UTC 2017 (2)
  # 4 -> Yes, this was just "4"
  # 4.2.4p8
  # unknown
  # ntpq 4.2.4p7
  # sntp [email protected] Tue Jun 23 09:22:10 UTC 2020 (10)
  else if( "ntpd" >!< vers_banner && vers_banner !~ "^[0-9.p]+$" && "unknown" >!< vers_banner && "ntpq" >!< vers_banner && "sntp" >!< vers_banner ) {
    os_register_unknown_banner( banner:vers_banner, banner_type_name:BANNER_TYPE, banner_type_short:"ntp_banner", port:port, proto:"udp" );
  }
}

exit( 0 );

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

13 Jun 2024 00:00Current
7.3High risk
Vulners AI Score7.3
44