Lucene search
+L

OS Identification : NTP

🗓️ 19 May 2007 00:00:00Reported by TenableType 
nessus
 nessus
🔗 www.tenable.com👁 22 Views

OS Identification : NTP plugin for determining remote OS based on NTP dat

Code
##
# (C) Tenable, Inc.
##

include("compat.inc");

if (description)
{
  script_id(25244);
  script_version("1.55");
  script_set_attribute(attribute:"plugin_modification_date", value:"2025/03/31");

  script_name(english:"OS Identification : NTP");

  script_set_attribute(attribute:"synopsis", value:
"It is possible to identify the remote operating system based on the
data returned by the NTP server.");
  script_set_attribute(attribute:"description", value:
"This plugin attempts to identify the operating system type and version
by looking at the NTP data returned by the remote server.");
  script_set_attribute(attribute:"solution", value:"n/a");
  script_set_attribute(attribute:"risk_factor", value:"None");

  script_set_attribute(attribute:"plugin_publication_date", value:"2007/05/19");

  script_set_attribute(attribute:"plugin_type", value:"remote");
  script_set_attribute(attribute:"asset_inventory", value:"True");
  script_set_attribute(attribute:"os_identification", value:"True");
  script_end_attributes();

  script_category(ACT_GATHER_INFO);
  script_family(english:"General");

  script_copyright(english:"This script is Copyright (C) 2007-2025 and is owned by Tenable, Inc. or an Affiliate thereof.");

  script_dependencies("ntp_open.nasl");
  script_require_keys("Host/OS/ntp");

  exit(0);
}

#
# If NTP is open, try to read data from there. We have to
# normalize the data we get, which is why we don't simply
# spit out 'Host/OS/ntp'
#
var os, processor, version, num, match, conf, matches, confidence, v;

os = get_kb_item("Host/OS/ntp");
if ( os )
{
 set_kb_item(name:"Host/OS/NTP/Fingerprint", value:os);

 replace_kb_item(name:'Host/OS/NTP/Protocol', value:'udp');
 replace_kb_item(name:'Host/OS/NTP/Port', value:123); # ntp_open.nasl has this port hardcoded

 processor = get_kb_item("Host/processor/ntp");
 # Normalize intel CPUs
 if ( processor && preg(pattern:"i[3-9]86", string:processor)) processor = "i386";

 if ("QNX" >< os )
 {
  version = str_replace(find:"QNX", replace:"QNX ", string:os);
  set_kb_item(name:"Host/OS/NTP", value:version);
  set_kb_item(name:"Host/OS/NTP/Confidence", value:90);
  set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
  exit(0);
 }
 if ("sparcv9-wrs-vxworks" >< os )
 {
   version = "VxWorks";
   set_kb_item(name:"Host/OS/NTP", value:version);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:50);
   set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
   exit(0);
 }
 if ( "Darwin" >< os && "Power Macintosh" >< processor )
 {
   if ( "Darwin/" >< os )
     os -= "Darwin/";
   else
     os -= "Darwin";
   num = split(os, sep:".", keep:FALSE);
   version = "Mac OS X 10." + string(int(num[0]) - 4) + "." + num[1];
   set_kb_item(name:"Host/OS/NTP", value:version);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:98);
   set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
   exit(0);
 }

 if ("OpenVMS AXP" >< os || "OpenVMS/V" >< os)
 {
   set_kb_item(name:"Host/OS/NTP", value: "OpenVMS");
   set_kb_item(name:"Host/OS/NTP/Confidence", value: 80);
   set_kb_item(name:"Host/OS/NTP/Type", value: "general-purpose");
   exit(0);
 }

 if ( "Darwin" >< os && ("i386" >< processor || "x86_64" >< processor) )
 {
   if ( "Darwin/" >< os )
     os -= "Darwin/";
   else
     os -= "Darwin";
   num = split(os, sep:".", keep:FALSE);
   if ( int(num[0]) == 8 && int(num[1]) == 8 && int(num[2]) == 2 )
   {
    version = "AppleTV/3.0";
    set_kb_item(name:"Host/OS/NTP", value:version);
    set_kb_item(name:"Host/OS/NTP/Confidence", value:98);
    set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
   }
   else
   {
    version = "Mac OS X 10." + string(int(num[0]) - 4) + "." + num[1] + " (intel)";
    set_kb_item(name:"Host/OS/NTP", value:version);
    set_kb_item(name:"Host/OS/NTP/Confidence", value:98);
    set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
   }
   exit(0);
 }

 if ("UNIX/HPUX" >< os )
 {
   set_kb_item(name:"Host/OS/NTP", value:"HP-UX");
   set_kb_item(name:"Host/OS/NTP/Confidence", value:50);
   set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
   exit(0);
 }

 if ("HP-UX/" >< os )
 {
  set_kb_item(name:"Host/OS/NTP", value:"HP-UX");
  set_kb_item(name:"Host/OS/NTP/Confidence", value:80);
  set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
  exit(0);
 }

 if ("NetBSD" >< os )
 {
   if ("NetBSD/" >< os) os -= "NetBSD/";
   else os -= "NetBSD";
   version = "NetBSD " + os;
   if ( processor ) version += " (" + processor + ")";

   set_kb_item(name:"Host/OS/NTP", value:version);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:98);
   set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
   exit(0);
 }

 if ("FreeBSD" >< os && "-NETSCALER-" >!< os)
 {
   os -= "FreeBSD";
   if ( os =~ "^/" ) os -= "/";
   version = "FreeBSD " + os;

   if ( processor ) version += " (" + processor + ")";

   set_kb_item(name:"Host/OS/NTP", value:version);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:98);
   set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
   exit(0);
 }

 if ("WINDOWS/NT" >< os || os == "Windows" )
 {
   os = "Microsoft Windows";
   set_kb_item(name:"Host/OS/NTP", value:os);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:10);
   set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
   exit(0);
 }

 if ("OpenBSD" >< os )
 {
   os -= "OpenBSD";
   version = "OpenBSD" + os;
   if ( processor ) version += " (" + processor + ")";

   set_kb_item(name:"Host/OS/NTP", value:version);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:98);
   set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
   exit(0);
 }

 if (preg(pattern:"^Linux/.+-nam$", string:os))
 {
   set_kb_item(name:"Host/OS/NTP", value:"CISCO Network Analysis Module (NAM)");
   set_kb_item(name:"Host/OS/NTP/Confidence", value:95);
   set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
   exit(0);
 }

 if (preg(pattern:"^Linux/.+\.[^.]*LEAF$", string:os))
 {
   match = pregmatch(pattern:"^Linux/(.+)\.([^.]*LEAF)$", string:os);
   os = "Linux Kernel " + match[1] + ' on ' + match[2];
   set_kb_item(name:"Host/OS/NTP", value:os);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:95);
   set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
   exit(0);
 }

 if (preg(pattern:"^Linux/.+\.amzn[0-9]+\.", string:os))
 {
   match = pregmatch(pattern:"^Linux/(.+)\.amzn[0-9]+\.", string:os);
   os = "Linux Kernel " + match[1] + ' on Amazon Linux AMI';
   set_kb_item(name:"Host/OS/NTP", value:os);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:90);
   set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
   exit(0);
 }

 if (preg(pattern:"^Linux/(\d+\.\d+).*\.vz(\d+)\.([0-9.]+)", string:os))
 {
   conf = 90;
   matches = pregmatch(
     pattern:"^Linux/(\d+\.\d+).*\.vz(\d+)\.([0-9.]+)",
     string:os
   );

   if (matches[3] == "20.18")
     os = 'Linux Kernel ' + matches[1] + ' on Virtuozzo release 7.3';
   else if (matches[3] == "15.2")
     os = 'Linux Kernel ' + matches[1] + ' on Virtuozzo release 7.2';
   else
   {
     os = 'Linux Kernel ' + matches[1] + ' on Virtuozzo release ' + matches[2];
     conf = 70;
   }

   set_kb_item(name:"Host/OS/NTP", value:os);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:conf);
   set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
   exit(0);
 }

 # This needs to be before the if ("Linux" >< os) block since it can look like "Linux2.6.11LantronixSLC"
 if ("LantronixSLC" >< os )
 {
   set_kb_item(name:"Host/OS/NTP", value:"Lantronix SLC");
   set_kb_item(name:"Host/OS/NTP/Confidence", value:90);
   set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
   exit(0);
 }

 if ("Linux" >< os )
 {
   confidence = 75;
   if ("Linux/" >< os ) os -= "Linux/";
   else os -= "Linux";
   os = "Linux Kernel " + os;
   version = os;
   if ( version =~ "Linux Kernel [0-9]\.[0-9]\.[0-9]" )
	confidence = 95;

   match = pregmatch(pattern:"\.mga(\d*)$", string:os);
   if (!isnull(match))
   {
     if (strlen(match[1]) == 0) version += " on Mageia 1";
     else version += " on Mageia " + match[1];
   }

   if ( processor )
   {
     version += " (" + processor + ")";

     # nb: reduce confidence for Linux on ARM so other
     #     fingerprints take precedence.
     if ("armv" >< processor) confidence -= 15;
   }

   set_kb_item(name:"Host/OS/NTP", value:version);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:confidence);
   set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
   exit(0);
 }
 if ("SunOS5." >< os )
 {
  os -= "SunOS5.";
  if (int(os) >= 7) os = "Solaris " + os;
  else os = "Solaris 2." + os;
  version = os;
  if ( processor ) version += " (" + processor + ")";
  set_kb_item(name:"Host/OS/NTP", value:version);
  set_kb_item(name:"Host/OS/NTP/Confidence", value:98);
  set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
  exit(0);
 }
 else if ("SunOS/5." >< os )
 {
  os -= "SunOS/5.";
  if (int(os) >= 7) os = "Solaris " + os;
  else os = "Solaris 2." + os;
  version = os;
  if ( processor ) version += " (" + processor + ")";
  set_kb_item(name:"Host/OS/NTP", value:version);
  set_kb_item(name:"Host/OS/NTP/Confidence", value:98);
  set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
  exit(0);
 }
 else if ( os == "SunOS" )
 {
  set_kb_item(name:"Host/OS/NTP", value:"Solaris");
  set_kb_item(name:"Host/OS/NTP/Confidence", value:75);
  set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
  exit(0);
 }
 if ( "UNIX/AIX" >< os )
 {
  set_kb_item(name:"Host/OS/NTP", value:"AIX");
  set_kb_item(name:"Host/OS/NTP/Confidence", value:75);
  set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
  exit(0);
 }
 if ( os == "cisco" )
 {
  set_kb_item(name:"Host/OS/NTP", value:"Cisco Device");
  set_kb_item(name:"Host/OS/NTP/Confidence", value:75);
  set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
  exit(0);
 }
 if ( os =~ "cisco")
 {
  set_kb_item(name:"Host/OS/NTP", value:"Cisco Device");
  set_kb_item(name:"Host/OS/NTP/Confidence", value:60);
  set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
  exit(0);
 }
 if ( os =~ "^OSF1V[0-9.]*$" )
 {
  os -= "OSF1V";
  set_kb_item(name:"Host/OS/NTP", value:"Tru64 UNIX " + os);
  set_kb_item(name:"Host/OS/NTP/Confidence", value:98);
  set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
  exit(0);
 }
 if ( os == "SCO_SV" )
 {
  set_kb_item(name:"Host/OS/NTP", value:"SCO OpenServer");
  set_kb_item(name:"Host/OS/NTP/Confidence", value:75);
  set_kb_item(name:"Host/OS/NTP/Type", value:"general-purpose");
  exit(0);
 }
 if ( os =~ "junos")
 {
   # 'os' looks like "JUNOS10.2R3.10"
   #         or like "JUNOS12.1X44-D10.4"
   v = pregmatch(string:os, pattern:"^JUNOS([0-9]+\.[0-9]+[A-Z][A-Z0-9.-]+)$");
   if (! isnull(v))
   {
     set_kb_item(name:"Host/OS/NTP", value:"Juniper Junos Version " + v[1]);
     set_kb_item(name:"Host/OS/NTP/Confidence", value:90);
     set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
     exit(0);
   }
   else
   {
     set_kb_item(name:"Host/OS/NTP", value:"Juniper Junos");
     set_kb_item(name:"Host/OS/NTP/Confidence", value:60);
     set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
     exit(0);
   }
 }

 if ( os == "IPSO" )
 {
  set_kb_item(name:"Host/OS/NTP", value:"Nokia IPSO Firewall");
  set_kb_item(name:"Host/OS/NTP/Confidence", value:75);
  set_kb_item(name:"Host/OS/NTP/Type", value:"firewall");
  exit(0);
 }

 v = pregmatch(string: os, pattern: "^VMkernel/([0-9][0-9.]+)$");
 if (! isnull(v))
 {
  set_kb_item(name:"Host/OS/NTP", value: "VMware ESX "+v[1]);
  set_kb_item(name:"Host/OS/NTP/Confidence", value:90);
  set_kb_item(name:"Host/OS/NTP/Type", value:"hypervisor");
  exit(0);
 }

 if ("-NETSCALER-" >< os )
 {
   v = pregmatch(string:os, pattern:"-NETSCALER-([0-9][0-9.]+)");
   os = "Citrix NetScaler";
   if (!isnull(v)) os += " " + v[1];

   set_kb_item(name:"Host/OS/NTP", value:os);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:98);
   set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
   exit(0);
 }

 if ("SecureOS/" >< os )
 {
   v = pregmatch(string:os, pattern:"SecureOS/([0-9][0-9.]+)");
   os = "SecureOS";
   if (!isnull(v)) os += " " + v[1];

   set_kb_item(name:"Host/OS/NTP", value:os);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:98);
   set_kb_item(name:"Host/OS/NTP/Type", value:"firewall");
   exit(0);
 }

 if ("Isilon OneFS" >< os )
 {
   v = pregmatch(string:os, pattern:"Isilon OneFS/v([0-9][0-9.]+)");
   os = "Isilon OneFS";
   if (!isnull(v)) os += " v" + v[1];

   set_kb_item(name:"Host/OS/NTP", value:os);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:98);
   set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
   exit(0);
 }

 if ("Data ONTAP" >< os )
 {
   v = pregmatch(string:os, pattern:"Data ONTAP/([0-9]+\.[0-9][^ ]+)");
   os = "NetApp";
   if (!isnull(v)) os += " Release " + v[1];

   set_kb_item(name:"Host/OS/NTP", value:os);
   set_kb_item(name:"Host/OS/NTP/Confidence", value:98);
   set_kb_item(name:"Host/OS/NTP/Type", value:"embedded");
   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

31 Mar 2025 00:00Current
5.6Medium risk
Vulners AI Score5.6
22