end
end
-daq =
+snort =
{
- modules =
- {
- {
- name = 'pcap',
- mode = 'read-file'
- },
- {
- name = 'dump',
- variables = { 'output=none' }
- },
- },
- snaplen = 65535
+ ['-Q'] = true,
+ ['-s'] = 65535,
+ ['--daq'] = 'dump',
+ ['--daq-var'] = 'output=none'
}
-snort = { }
-snort['-Q'] = true
-
if file_exists('local.rules') then
snort['-R'] = 'local.rules'
end
"Non-Encoded MIME attachment extraction depth (-1 no limit)" },
{ "decompress_pdf", Parameter::PT_BOOL, nullptr, "false",
- "decompress pdf files in MIME attachments" },
+ "decompress pdf files" },
{ "decompress_swf", Parameter::PT_BOOL, nullptr, "false",
- "decompress swf files in MIME attachments" },
+ "decompress swf files" },
{ "decompress_zip", Parameter::PT_BOOL, nullptr, "false",
- "decompress zip files in MIME attachments" },
+ "decompress zip files" },
+
+ { "decompress_buffer_size", Parameter::PT_INT, "1024:max31", "100000",
+ "file decompression buffer size" },
{ "qp_decode_depth", Parameter::PT_INT, "-1:65535", "-1",
"Quoted Printable decoding depth (-1 no limit)" },
else if ( v.is("decompress_zip") )
FileService::decode_conf.set_decompress_zip(v.get_bool());
+ else if ( v.is("decompress_buffer_size") )
+ FileService::decode_conf.set_decompress_buffer_size(v.get_uint32());
+
else if (v.is("b64_decode_depth"))
{
int32_t value = v.get_int32();
#include "decode_buffer.h"
+#include "file_mime_config.h"
#include "utils/util.h"
void DecodeBuffer::reset_saved()
}
}
-#define MAX_DEPTH 65536
-
DecodeBuffer::DecodeBuffer(int max_depth)
{
if (!max_depth)
return decompress_zip;
}
+void DecodeConfig::set_decompress_buffer_size(uint32_t size)
+{
+ decompress_buffer_size = size;
+}
+
+uint32_t DecodeConfig::get_decompress_buffer_size() const
+{
+ return decompress_buffer_size;
+}
+
int64_t DecodeConfig::get_file_depth() const
{
return file_depth;
ConfigLogger::log_flag("decompress_pdf", decompress_pdf);
ConfigLogger::log_flag("decompress_swf", decompress_swf);
ConfigLogger::log_flag("decompress_zip", decompress_zip);
+ ConfigLogger::log_value("decompress_buffer_size", decompress_buffer_size);
}
/*These are temporary values*/
#define DEFAULT_MIME_MEMCAP 838860
#define DEFAULT_DEPTH 1464
+#define DEFAULT_DECOMP 100000
#define MAX_LOG_MEMCAP 104857600
#define MIN_LOG_MEMCAP 3276
#define MIN_MIME_MEM 3276
-#define MAX_DEPTH 65535
+#define MAX_DEPTH 65536
#define MIN_DEPTH (-1)
namespace snort
void set_decompress_zip(bool);
bool is_decompress_zip() const;
+ void set_decompress_buffer_size(uint32_t);
+ uint32_t get_decompress_buffer_size() const;
+
int64_t get_file_depth() const;
bool is_decoding_enabled() const;
void sync_all_depths();
bool decompress_pdf = false;
bool decompress_swf = false;
bool decompress_zip = false;
+ uint32_t decompress_buffer_size = DEFAULT_DECOMP;
int64_t file_depth = MIN_DEPTH;
bool decode_enabled = true;
};
#include "file_mime_context_data.h"
#include "detection/detection_engine.h"
+#include "file_api/file_service.h"
#include "utils/util.h"
using namespace snort;
-#define MAX_DEPTH 65536
unsigned MimeDecodeContextData::mime_ips_id = 0;
MimeDecodeContextData::MimeDecodeContextData()
{
decode_buf = (uint8_t*)snort_alloc(MAX_DEPTH);
- decompress_buf = (uint8_t*)snort_alloc(MAX_DEPTH);
+
+ decompress_buf_size = FileService::decode_conf.get_decompress_buffer_size();
+ decompress_buf = (uint8_t*)snort_alloc(decompress_buf_size);
}
MimeDecodeContextData::~MimeDecodeContextData()
return data->decompress_buf;
}
+uint32_t MimeDecodeContextData::get_decompress_buf_size()
+{
+ MimeDecodeContextData* data = IpsContextData::get<MimeDecodeContextData>(mime_ips_id);
+
+ return data->decompress_buf_size;
+}
+
uint8_t* decode_buf = nullptr;
uint8_t* decompress_buf = nullptr;
+ uint32_t decompress_buf_size = 0;
static void init();
+
static uint8_t* get_decode_buf();
static uint8_t* get_decompress_buf();
+ static uint32_t get_decompress_buf_size();
};
#endif
return result;
uint8_t* decompress_buf = MimeDecodeContextData::get_decompress_buf();
+ uint32_t decompress_buf_size = MimeDecodeContextData::get_decompress_buf_size();
fd_state->Next_In = buf_in;
fd_state->Avail_In = size_in;
fd_state->Next_Out = decompress_buf;
- fd_state->Avail_Out = MAX_DEPTH;
+ fd_state->Avail_Out = decompress_buf_size;
const fd_status_t status = File_Decomp(fd_state);
assert(strt == nullptr);
assert(start != nullptr);
assert(length >= 0);
- assert(length <= MAX_OCTETS);
strt = start;
len = length;
own_the_buffer = own_the_buffer_;
#include "http_msg_body.h"
#include "file_api/file_flows.h"
+#include "file_api/file_service.h"
#include "pub_sub/http_request_body_event.h"
#include "http_api.h"
output.set(input);
return;
}
- uint8_t* buffer = new uint8_t[MAX_OCTETS];
+ const uint32_t buffer_size = FileService::decode_conf.get_decompress_buffer_size();
+ uint8_t* buffer = new uint8_t[buffer_size];
session_data->fd_alert_context.infractions = transaction->get_infractions(source_id);
session_data->fd_alert_context.events = session_data->events[source_id];
session_data->fd_state->Next_In = input.start();
session_data->fd_state->Avail_In = (uint32_t)input.length();
session_data->fd_state->Next_Out = buffer;
- session_data->fd_state->Avail_Out = MAX_OCTETS;
+ session_data->fd_state->Avail_Out = buffer_size;
const fd_status_t status = File_Decomp(session_data->fd_state);