]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
logging: display base64 decoded string for packet
authorJeff Lucovsky <jeff@lucovsky.org>
Sat, 20 Apr 2019 12:05:30 +0000 (05:05 -0700)
committerVictor Julien <victor@inliniac.net>
Mon, 29 Apr 2019 07:50:46 +0000 (09:50 +0200)
This changeset changes the packet display to be base64, rather than hex.

src/output-json-alert.c
src/output-json-anomaly.c
src/output-json.c
src/output-json.h

index 0014a1b6537d3183998493eb7490296103befeeb..aad27822724f6cffeddd732116815ce6bcb50e78 100644 (file)
@@ -368,23 +368,6 @@ static void AlertJsonTunnel(const Packet *p, json_t *js)
     json_object_set_new(js, "tunnel", tunnel);
 }
 
-static void AlertJsonPacket(const Packet *p, json_t *js)
-{
-    unsigned long len = GET_PKT_LEN(p) * 2;
-    uint8_t encoded_packet[len];
-    Base64Encode((unsigned char*) GET_PKT_DATA(p), GET_PKT_LEN(p),
-        encoded_packet, &len);
-    json_object_set_new(js, "packet", json_string((char *)encoded_packet));
-
-    /* Create packet info. */
-    json_t *packetinfo_js = json_object();
-    if (unlikely(packetinfo_js == NULL)) {
-        return;
-    }
-    json_object_set_new(packetinfo_js, "linktype", json_integer(p->datalink));
-    json_object_set_new(js, "packet_info", packetinfo_js);
-}
-
 static void AlertAddPayload(AlertJsonOutputCtx *json_output_ctx, json_t *js, const Packet *p)
 {
     if (json_output_ctx->flags & LOG_JSON_PAYLOAD_BASE64) {
@@ -573,7 +556,7 @@ static int AlertJson(ThreadVars *tv, JsonAlertLogThread *aft, const Packet *p)
 
         /* base64-encoded full packet */
         if (json_output_ctx->flags & LOG_JSON_PACKET) {
-            AlertJsonPacket(p, js);
+            JsonPacket(p, js, 0);
         }
 
         /* signature text */
@@ -624,7 +607,7 @@ static int AlertJson(ThreadVars *tv, JsonAlertLogThread *aft, const Packet *p)
         MemBufferReset(aft->json_buffer);
         json_t *packetjs = CreateJSONHeader(p, LOG_DIR_PACKET, "packet");
         if (unlikely(packetjs != NULL)) {
-            AlertJsonPacket(p, packetjs);
+            JsonPacket(p, packetjs, 0);
             OutputJSONBuffer(packetjs, aft->file_ctx, &aft->json_buffer);
             json_decref(packetjs);
         }
index 9648c2381437e9db4f176ec7007e89d2af4ad1d1..743d465b00ece128d53bcf2f31503ef0aa057b33 100644 (file)
 #include "util-proto-name.h"
 #include "util-optimize.h"
 #include "util-buffer.h"
+#include "util-crypt.h"
 #include "util-validate.h"
 
 #define MODULE_NAME "JsonAnomalyLog"
 
 #ifdef HAVE_LIBJANSSON
 
-#define LOG_JSON_PACKET            BIT_U16(0)
-#define JSON_STREAM_BUFFER_SIZE 4096
+#define LOG_JSON_PACKETHDR      BIT_U16(0)
 
 typedef struct AnomalyJsonOutputCtx_ {
     LogFileCtx* file_ctx;
@@ -76,7 +76,7 @@ typedef struct JsonAnomalyLogThread_ {
 
 static int AnomalyJson(ThreadVars *tv, JsonAnomalyLogThread *aft, const Packet *p)
 {
-    bool is_IP_pkt = PKT_IS_IPV4(p) || PKT_IS_IPV6(p);
+    bool is_ip_pkt = PKT_IS_IPV4(p) || PKT_IS_IPV6(p);
 
     char timebuf[64];
     CreateIsoTimeString(&p->ts, timebuf, sizeof(timebuf));
@@ -96,20 +96,15 @@ static int AnomalyJson(ThreadVars *tv, JsonAnomalyLogThread *aft, const Packet *
             return TM_ECODE_OK;
         }
 
-        if (!is_IP_pkt) {
+        if (!is_ip_pkt) {
             json_object_set_new(js, "timestamp", json_string(timebuf));
         } else {
             JsonFiveTuple((const Packet *)p, LOG_DIR_PACKET, js);
             JsonAddCommonOptions(&aft->json_output_ctx->cfg, p, p->flow, js);
         }
 
-        if (aft->json_output_ctx->flags & LOG_JSON_PACKET) {
-            char buf[(32 * 3) + 1];
-            PrintRawLineHexBuf(buf, sizeof(buf), GET_PKT_DATA(p),
-                               GET_PKT_LEN(p) < 32 ? GET_PKT_LEN(p) : 32);
-            json_object_set_new(js, "packethdr", json_string((char *)buf));
-
-            json_object_set_new(js, "linktype", json_integer(p->datalink));
+        if (aft->json_output_ctx->flags & LOG_JSON_PACKETHDR) {
+            JsonPacket(p, js, GET_PKT_LEN(p) < 32 ? GET_PKT_LEN(p) : 32);
         }
 
         uint8_t event_code = p->events.events[i];
@@ -122,9 +117,9 @@ static int AnomalyJson(ThreadVars *tv, JsonAnomalyLogThread *aft, const Packet *
         } else {
             /* include event code with unrecognized events */
             uint32_t offset = 0;
-            char unknown_event_buf[16];
+            char unknown_event_buf[8];
             json_object_set_new(ajs, "type", json_string("unknown"));
-            PrintBufferData(unknown_event_buf, &offset, 16, "%d", event_code);
+            PrintBufferData(unknown_event_buf, &offset, 8, "%d", event_code);
             json_object_set_new(ajs, "code", json_string(unknown_event_buf));
         }
 
@@ -237,7 +232,7 @@ static void JsonAnomalyLogConf(AnomalyJsonOutputCtx *json_output_ctx,
 {
     uint16_t flags = 0;
     if (conf != NULL) {
-        SetFlag(conf, "packethdr", LOG_JSON_PACKET, &flags);
+        SetFlag(conf, "packethdr", LOG_JSON_PACKETHDR, &flags);
     }
     json_output_ctx->flags |= flags;
 }
@@ -318,10 +313,6 @@ static OutputInitResult JsonAnomalyLogInitCtxSub(ConfNode *conf, OutputCtx *pare
     return result;
 
 error:
-    if (json_output_ctx != NULL) {
-        SCFree(json_output_ctx);
-    }
-
     SCFree(output_ctx);
 
     return result;
@@ -332,6 +323,7 @@ void JsonAnomalyLogRegister (void)
     OutputRegisterPacketModule(LOGGER_JSON_ANOMALY, MODULE_NAME, "anomaly-json-log",
         JsonAnomalyLogInitCtx, JsonAnomalyLogger, JsonAnomalyLogCondition,
         JsonAnomalyLogThreadInit, JsonAnomalyLogThreadDeinit, NULL);
+
     OutputRegisterPacketSubModule(LOGGER_JSON_ANOMALY, "eve-log", MODULE_NAME,
         "eve-log.anomaly", JsonAnomalyLogInitCtxSub, JsonAnomalyLogger,
         JsonAnomalyLogCondition, JsonAnomalyLogThreadInit, JsonAnomalyLogThreadDeinit,
index 9892b0d197d82192969f8dc57a525703e68b0404..b44ee79c727d7c37f399e0a10257dc6ff7b4da9b 100644 (file)
@@ -398,6 +398,29 @@ void JsonAddCommonOptions(const OutputJsonCommonSettings *cfg,
     }
 }
 
+/**
+ * \brief Jsonify a packet
+ *
+ * \param p Packet
+ * \param js JSON object
+ * \param max_length If non-zero, restricts the number of packet data bytes handled.
+ */
+void JsonPacket(const Packet *p, json_t *js, unsigned long max_length)
+{
+    unsigned long max_len = max_length == 0 ? GET_PKT_LEN(p) : max_length;
+    unsigned long len = 2 * max_len;
+    uint8_t encoded_packet[len];
+    Base64Encode((unsigned char*) GET_PKT_DATA(p), max_len, encoded_packet, &len);
+    json_object_set_new(js, "packet", json_string((char *)encoded_packet));
+
+    /* Create packet info. */
+    json_t *packetinfo_js = json_object();
+    if (unlikely(packetinfo_js == NULL)) {
+        return;
+    }
+    json_object_set_new(packetinfo_js, "linktype", json_integer(p->datalink));
+    json_object_set_new(js, "packet_info", packetinfo_js);
+}
 /** \brief jsonify tcp flags field
  *  Only add 'true' fields in an attempt to keep things reasonably compact.
  */
index 5a4ed908bb1aae2652917d4159fb4f922a1bfaf9..73eddf88ae0a46ab178979053ebb4e43374b8b63 100644 (file)
@@ -52,6 +52,7 @@ int OutputJSONMemBufferCallback(const char *str, size_t size, void *data);
 
 void CreateJSONFlowId(json_t *js, const Flow *f);
 void JsonTcpFlags(uint8_t flags, json_t *js);
+void JsonPacket(const Packet *p, json_t *js, unsigned long max_length);
 void JsonFiveTuple(const Packet *, enum OutputJsonLogDirection, json_t *);
 json_t *CreateJSONHeader(const Packet *p,
         enum OutputJsonLogDirection dir, const char *event_type);