]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
QA: add --afl-der=<file>
authorMats Klepsland <mats.klepsland@gmail.com>
Sun, 10 Apr 2016 11:41:02 +0000 (13:41 +0200)
committerVictor Julien <victor@inliniac.net>
Tue, 12 Apr 2016 13:20:00 +0000 (15:20 +0200)
Expose SSL/TLS certificate decoding (DER) to commandline
using --afl-der=<file>.

configure.ac
src/suricata.c
src/util-decode-der.c
src/util-decode-der.h

index f3741e578b7717932de3fc866e0f48c288bd652e..a6c3f3aa8cda0b1cda44e49739f8f49191dd35e8 100644 (file)
             AC_DEFINE([AFLFUZZ_APPLAYER], [1], [Enable --afl-$proto-request commandline option])
             AC_DEFINE([AFLFUZZ_MIME], [1], [Enable --afl-mime commandline option])
             AC_DEFINE([AFLFUZZ_DECODER], [1], [Enable --afl-decoder-$proto commandline option])
+            AC_DEFINE([AFLFUZZ_DER], [1], [Enable --afl-der commandline option])
     ])
 
   # disable TLS on user request
index a81b816824103e1a18e2265c1f3636a425c75cd1..d2d816028e751127ab8be7592702bc549c53a3be 100644 (file)
 #include "app-layer-smb.h"
 #include "app-layer-modbus.h"
 
+#include "util-decode-der.h"
 #include "util-radix-tree.h"
 #include "util-host-os-info.h"
 #include "util-cidr.h"
@@ -1162,6 +1163,7 @@ static TmEcode ParseCommandLine(int argc, char** argv, SCInstance *suri)
         {"afl-mime", required_argument, 0 , 0},
 
         {"afl-decoder-ppp", required_argument, 0 , 0},
+        {"afl-der", required_argument, 0, 0},
 #ifdef BUILD_UNIX_SOCKET
         {"unix-socket", optional_argument, 0, 0},
 #endif
@@ -1450,6 +1452,11 @@ static TmEcode ParseCommandLine(int argc, char** argv, SCInstance *suri)
                 FlowInitConfig(FLOW_QUIET);
                 //printf("arg: //%s\n", optarg);
                 exit(DecoderParseDataFromFile(optarg, DecodePPP));
+#endif
+#ifdef AFLFUZZ_DER
+            } else if(strcmp((long_opts[option_index]).name, "afl-der") == 0) {
+                //printf("arg: //%s\n", optarg);
+                exit(DerParseDataFromFile(optarg));
 #endif
             } else if(strcmp((long_opts[option_index]).name, "simulate-ips") == 0) {
                 SCLogInfo("Setting IPS mode");
index be56b5e546f7589d3af864963536f2542a27fb47..c080cefd9353b958d2416c43d32889b896e8df6b 100644 (file)
@@ -898,6 +898,34 @@ Asn1Generic * DecodeDer(const unsigned char *buffer, uint32_t size,
     return cert;
 }
 
+#ifdef AFLFUZZ_DER
+int DerParseDataFromFile(char *filename)
+{
+    int result = 1;
+    FILE *fp = fopen(filename, "r");
+    BUG_ON(fp == NULL);
+    uint8_t buffer[65536];
+
+    uint32_t errcode = 0;
+
+    while (1) {
+        int done = 0;
+        size_t result = fread(&buffer, 1, sizeof(buffer), fp);
+        if (result < sizeof(buffer))
+            done = 1;
+
+        DecodeDer(buffer, result, &errcode);
+
+        if (done)
+            break;
+    }
+
+    result = 0;
+    fclose(fp);
+    return result;
+}
+#endif
+
 void DerFree(Asn1Generic *a)
 {
     Asn1Generic *it, *n;
index 4c4b1aaf1c4a4da5f047af79a4495a0561677007..b923c12d40cd9ecca6f6bd00d5894f14dd7539d3 100644 (file)
@@ -93,4 +93,8 @@ typedef struct Asn1Generic_ {
 Asn1Generic * DecodeDer(const unsigned char *buffer, uint32_t size, uint32_t *errcode);
 void DerFree(Asn1Generic *a);
 
+#ifdef AFLFUZZ_DER
+int DerParseDataFromFile(char *filename);
+#endif
+
 #endif /* __UTIL_DECODE_DER_H__ */