]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
Merge pull request #1620 in SNORT/snort3 from ~SATHIRKA/snort3:icmp_bruteforce to...
authorShravan Rangarajuvenkata (shrarang) <shrarang@cisco.com>
Mon, 3 Jun 2019 20:06:02 +0000 (16:06 -0400)
committerShravan Rangarajuvenkata (shrarang) <shrarang@cisco.com>
Mon, 3 Jun 2019 20:06:02 +0000 (16:06 -0400)
Squashed commit of the following:

commit d6298c44470c752ccdbd2abd098814e7b36a27e5
Author: Sreeja Athirkandathil Narayanan <sathirka@cisco.com>
Date:   Thu May 23 14:24:42 2019 -0400

    appid: Protocol based detection for non-TCP non-UDP traffic.

src/network_inspectors/appid/appid_config.cc
src/network_inspectors/appid/appid_config.h
src/network_inspectors/appid/appid_discovery.cc
src/network_inspectors/appid/test/appid_discovery_test.cc

index da2f6a5b077b7fee47544185c383f0dbbee261e2..93dbadee0f68b1df2a7dfa17c9c09751abfa38ac 100644 (file)
@@ -818,14 +818,17 @@ AppId AppIdConfig::get_port_service_id(IpProtocol proto, uint16_t port)
 
     if (proto == IpProtocol::TCP)
         appId = tcp_port_only[port];
-    else if (proto == IpProtocol::UDP)
-        appId = udp_port_only[port];
     else
-        appId = ip_protocol[(uint16_t)proto];
+        appId = udp_port_only[port];
 
     return appId;
 }
 
+AppId AppIdConfig::get_protocol_service_id(IpProtocol proto)
+{
+    return ip_protocol[(uint16_t)proto];
+}
+
 static void display_port_exclusion_list(SF_LIST* pe_list, uint16_t port)
 {
     char inet_buffer[INET6_ADDRSTRLEN];
index 2b53688da1c33341fb4c4da1576cee66fe9d7e08..0d4595046efc0824e5a8a22f63dda84eb1fd2eae 100644 (file)
@@ -117,6 +117,7 @@ public:
     void show();
     void set_safe_search_enforcement(bool enabled);
     AppId get_port_service_id(IpProtocol, uint16_t port);
+    AppId get_protocol_service_id(IpProtocol);
 
     unsigned max_service_info = 0;
 #ifdef USE_RNA_CONFIG
index 90d971910237988ce32cc99a4625387ca2d04403..aae4e48f7432e03a6d80031ad5bab791e054275c 100644 (file)
@@ -147,7 +147,7 @@ void AppIdDiscovery::do_application_discovery(Packet* p, AppIdInspector& inspect
     if ( !do_pre_discovery(p, &asd, inspector, protocol, direction) )
         return;
 
-    AppId service_id;
+    AppId service_id = APP_ID_NONE;
     AppidChangeBits change_bits;
     bool is_discovery_done = do_discovery(p, *asd, protocol, direction, service_id, change_bits);
 
@@ -870,6 +870,30 @@ bool AppIdDiscovery::do_discovery(Packet* p, AppIdSession& asd, IpProtocol proto
 
     asd.check_app_detection_restart(change_bits);
 
+    if (protocol != IpProtocol::TCP and protocol != IpProtocol::UDP)
+    {
+        if ( !asd.get_session_flags(APPID_SESSION_PORT_SERVICE_DONE) )
+        {
+            AppId id = asd.config->get_protocol_service_id(protocol);
+            if (id > APP_ID_NONE)
+            {
+                asd.service.set_port_service_id(id);
+                service_id = id;
+                asd.service_disco_state = APPID_DISCO_STATE_FINISHED;
+                if (appidDebug->is_active())
+                {
+                    const char *app_name = AppInfoManager::get_instance().get_app_name(asd.service.get_port_service_id());
+                    LogMessage("AppIdDbg %s Protocol service %s (%d) from protocol\n",
+                        appidDebug->get_debug_session(), app_name ? app_name : "unknown", asd.service.get_port_service_id());
+                }
+            }
+            asd.set_session_flags(APPID_SESSION_PORT_SERVICE_DONE);
+        }
+        else
+             service_id = asd.pick_service_app_id();
+        return true;
+    }
+
     // Third party detection
 #ifdef ENABLE_APPID_THIRD_PARTY
     if ( TPLibHandler::have_tp() )
@@ -892,7 +916,6 @@ bool AppIdDiscovery::do_discovery(Packet* p, AppIdSession& asd, IpProtocol proto
             if (direction != APP_ID_FROM_RESPONDER)
                 break;
         // fallthrough
-        // All protocols other than TCP and UDP come straight here.
         default:
         {
             AppId id = asd.config->get_port_service_id(protocol, p->ptrs.sp);
index 60a1aa039b6353e2e787fea66f95a02a645e5dd9..c5cea991a185cc8e66c4ce9ba3970eb3fb9e8ef6 100644 (file)
@@ -146,6 +146,11 @@ AppId AppIdConfig::get_port_service_id(IpProtocol, uint16_t)
     return APP_ID_NONE;
 }
 
+AppId AppIdConfig::get_protocol_service_id(IpProtocol)
+{
+    return APP_ID_NONE;
+}
+
 // Stubs for AppIdInspector
 AppIdInspector::AppIdInspector(AppIdModule&) {}
 AppIdInspector::~AppIdInspector() = default;