]> git.ipfire.org Git - thirdparty/snort3.git/commitdiff
adding stream_size option. New option is 'stream_size:direction,range'
authorJosh <jrosenba@cisco.com>
Tue, 6 Jan 2015 21:22:49 +0000 (15:22 -0600)
committerJosh <jrosenba@cisco.com>
Tue, 6 Jan 2015 21:28:27 +0000 (15:28 -0600)
tools/snort2lua/rule_states/CMakeLists.txt
tools/snort2lua/rule_states/Makefile.am
tools/snort2lua/rule_states/rule_stream_size.cc [new file with mode: 0644]
tools/snort2lua/rule_states/rule_unchanged.cc
tools/snort2lua/tests/snort.conf.in

index aab9bbd3aca52b3e3acd6b23d32d7283aab748fc..cd941584168527375ce0e14cf74fcacfbdb7c3e8 100644 (file)
@@ -10,6 +10,7 @@ add_library( rule_states
     rule_react.cc
     rule_resp.cc
     rule_stream_reassemble.cc
+    rule_stream_size.cc
     rule_tag.cc
     rule_ttl.cc
     rule_threshold.cc
index 3391f3df8b9d526a36b2f85d44296ca072903854..23ce504c59934c6ff6ff791a01d9f824ed9733cf 100644 (file)
@@ -14,6 +14,7 @@ rule_pcre.cc \
 rule_react.cc \
 rule_resp.cc \
 rule_stream_reassemble.cc \
+rule_stream_size.cc \
 rule_tag.cc \
 rule_ttl.cc \
 rule_threshold.cc \
diff --git a/tools/snort2lua/rule_states/rule_stream_size.cc b/tools/snort2lua/rule_states/rule_stream_size.cc
new file mode 100644 (file)
index 0000000..8f120ba
--- /dev/null
@@ -0,0 +1,108 @@
+//--------------------------------------------------------------------------
+// Copyright (C) 2014-2015 Cisco and/or its affiliates. All rights reserved.
+//
+// This program is free software; you can redistribute it and/or modify it
+// under the terms of the GNU General Public License Version 2 as published
+// by the Free Software Foundation.  You may not use, modify or distribute
+// this program under any other version of the GNU General Public License.
+//
+// This program is distributed in the hope that it will be useful, but
+// WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License along
+// with this program; if not, write to the Free Software Foundation, Inc.,
+// 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+//--------------------------------------------------------------------------
+// rule_stream_size.cc author Josh Rosenbaum <jrosenba@cisco.com>
+
+#include <sstream>
+#include <vector>
+#include <cstdlib>
+
+#include "conversion_state.h"
+#include "helpers/converter.h"
+#include "rule_states/rule_api.h"
+#include "helpers/s2l_util.h"
+
+namespace rules
+{
+
+namespace {
+
+
+class StreamSize : public ConversionState
+{
+public:
+    StreamSize(Converter& c) : ConversionState(c) {};
+    virtual ~StreamSize() {};
+    virtual bool convert(std::istringstream& data);
+};
+
+} // namespace
+
+bool StreamSize::convert(std::istringstream& data_stream)
+{
+    std::string args;
+
+    args = util::get_rule_option_args(data_stream);
+    std::istringstream arg_stream(args);
+
+    std::string dir = "";
+    std::string op = "";
+    std::string size = "";
+
+    if (!util::get_string(arg_stream, dir, ",") ||
+        !util::get_string(arg_stream, op, ",") ||
+        !util::get_string(arg_stream, size, ","))
+    {
+        rule_api.bad_rule(data_stream, "stream_size requires 3 arguments.  '<direction>,<operator>,<size>'");
+        return set_next_rule_state(data_stream);
+    }
+
+
+
+    if (!(!op.compare("=")  || !op.compare("<")  || !op.compare(">") ||
+          !op.compare("!=") || !op.compare("<=") || !op.compare(">=")))
+    {
+        rule_api.bad_rule(data_stream, "'" + op + "' in an invalid stream_size operator.");
+    }
+
+    try
+    {
+        // checking that this is a valid unsigned integer.
+        char* end;
+        std::strtoul(size.c_str(), &end, 10);
+    }
+    catch (const std::invalid_argument& e)
+    {
+        rule_api.bad_rule(data_stream, "stream_size <size> '" + size + "' is too large.");
+    }
+    catch (const std::out_of_range& e)
+    {
+        rule_api.bad_rule(data_stream, "stream_size <size> '" + size + "' is too large.");
+    }
+
+
+    rule_api.add_option("stream_size", dir);
+    rule_api.add_suboption(op + size);
+    return set_next_rule_state(data_stream);
+}
+
+/**************************
+ *******  A P I ***********
+ **************************/
+
+static ConversionState* stream_size_ctor(Converter& c)
+{ return new StreamSize(c); }
+
+static const ConvertMap rule_stream_size =
+{
+    "stream_size",
+    stream_size_ctor,
+};
+
+const ConvertMap* stream_size_map = &rule_stream_size;
+
+} // namespace rules
index 05befb870aab86faa7927a0db057683fd4da80b8..8c14e423ec44f2a013799e81d887abb45a0e9891 100644 (file)
@@ -397,19 +397,6 @@ static const ConvertMap rule_sameip =
 
 const ConvertMap* sameip_map = &rule_sameip;
 
-/************************************
- *********  STREAM_SIZE  ************
- ************************************/
-
-static const std::string stream_size = "stream_size";
-static const ConvertMap rule_stream_size =
-{
-    stream_size,
-    unchanged_rule_ctor<&stream_size>,
-};
-
-const ConvertMap* stream_size_map = &rule_stream_size;
-
 /************************************
  ************  LOG TO  **************
  ************************************/
index 23e867c0b06e3d1700b0687852601a7cebd23e45..32f788322658b6c992154ed2a096c2636191a0da 100644 (file)
@@ -1339,6 +1339,18 @@ alert ip any any -> any any (msg:"TTL RULE OPTION"; ttl:7-; sid:11111114;)
 alert tcp $EXTERNAL_NET $HTTP_PORTS -> $HOME_NET any (content:"fe, fe, fe, fe, fe, fe, fe,"; msg:"BROWSER-FIREFOX Mozilla Firefox Javascript engine function arguments memory corruption attempt"; flow:to_client,established; file_data; content:"|3B|i<25|3B|i++|29| fe += fe|3B|"; fast_pattern:only; content:"fu=new Function|28 0A|"; content:"fe, fe, fe, fe, fe, fe, fe,"; within:30; metadata:policy balanced-ips drop, policy security-ips drop, service http; reference:bugtraq,19181; reference:cve,2006-3806; classtype:attempted-user; sid:18262; rev:3;)
 
 
+alert tcp any any -> any 20031 (msg:"SERVER-OTHER BakBone NetVault server heap overflow attempt"; flow:to_server,established; stream_size:client,>,32784; byte_test:4,>,32784,0,little; sid:12081; rev:6;)
+
+alert tcp $EXTERNAL_NET [20,1024:] -> $HOME_NET [20,1024:] (msg:"PROTOCOL-FTP Computer Associates eTrust Secure Content Manager LIST stack overflow attempt"; flow:established; stream_size:either,<,12800; content:"4096"; fast_pattern:only; pcre:"/[D\x2D][RWX\x2D]{9}\s+\w+\s+\w+\s+\w+\s+4096/i"; metadata:service ftp; reference:bugtraq,29528; reference:cve,2008-2541; reference:url,osvdb.org/show/osvdb/46012; reference:url,osvdb.org/show/osvdb/46013;  sid:18575; rev:4;)
+
+alert tcp any any -> any 20031 (msg:"SERVER-OTHER BakBone NetVault server heap overflow attempt"; flow:to_server,established; stream_size:server,=,32784; byte_test:4,>,32784,0,little; sid:12082; rev:7;)
+
+alert tcp any any -> any 20031 (msg:"SERVER-OTHER BakBone NetVault server heap overflow attempt"; flow:to_server,established; stream_size:both,!=,32784; byte_test:4,>,32784,0,little; sid:12083; rev:8;)
+
+alert tcp any any -> any 20031 (msg:"SERVER-OTHER BakBone NetVault server heap overflow attempt"; flow:to_server,established; stream_size:client,<=,32784; byte_test:4,>,32784,0,little; sid:12084; rev:9;)
+
+alert tcp any any -> any 20031 (msg:"SERVER-OTHER BakBone NetVault server heap overflow attempt"; flow:to_server,established; stream_size:client,>=,32784; byte_test:4,>,32784,0,little; sid:12085; rev:10;)
+
 ruletype suspicious
 {
     type log