Project

General

Profile

Bug #1174

Updated by Victor Julien over 10 years ago

I'm having a segfault occur about once a week with suricata 2.0 . I 
 think the issue is may not be specific to just 2.0, we ran 1.4.7 for a 
 little while and it segfaulted once or twice too. All the core dumps 
 I've captured seem to point at a buffer overflow in the memcpy function 
 called at stream-tcp-reassemble.c line 3139. 

 <pre> 
 Stack trace: 
 (gdb) bt 
 #0    0x0000003968432925 in raise (sig=6) 
     at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 
 #1    0x0000003968434105 in abort () at abort.c:92 
 #2    0x0000003968470837 in __libc_message (do_abort=2, 
     fmt=0x3968557930 "*** %s ***: %s terminated\n") 
     at ../sysdeps/unix/sysv/linux/libc_fatal.c:198 
 #3    0x0000003968502827 in __fortify_fail ( 
     msg=0x39685578d6 "buffer overflow detected") at fortify_fail.c:32 
 #4    0x0000003968500710 in __chk_fail () at chk_fail.c:29 
 #5    0x0000000000511230 in memcpy (tv=0xad3dd80, ra_ctx=0x7f75c0000fb0, 
     ssn=0x7f75c3ae0050, stream=0x7f75c3ae0058, p=0x33e4230) 
     at /usr/include/bits/string3.h:52 
 #6    StreamTcpReassembleAppLayer (tv=0xad3dd80, ra_ctx=0x7f75c0000fb0, 
     ssn=0x7f75c3ae0050, stream=0x7f75c3ae0058, p=0x33e4230) 
     at stream-tcp-reassemble.c:3139 
 #7    0x00000000005115c0 in StreamTcpReassembleHandleSegmentUpdateACK ( 
     tv=0xad3dd80, ra_ctx=0x7f75c0000fb0, ssn=0x7f75c3ae0050, 
     stream=0x7f75c3ae0058, p=0x33e4230) at stream-tcp-reassemble.c:3545 
 #8    0x0000000000513773 in StreamTcpReassembleHandleSegment (tv=0xad3dd80, 
     ra_ctx=0x7f75c0000fb0, ssn=0x7f75c3ae0050, stream=0x7f75c3ae00a0, 
     p=0x33e4230, pq=<value optimized out>) at stream-tcp-reassemble.c:3573 
 #9    0x000000000050b09b in HandleEstablishedPacketToClient (tv=0xad3dd80, 
     p=0x33e4230, stt=0x7f75c00008c0, ssn=0x7f75c3ae0050, 
     pq=<value optimized out>) at stream-tcp.c:2091 
 #10 StreamTcpPacketStateEstablished (tv=0xad3dd80, p=0x33e4230, 
     stt=0x7f75c00008c0, ssn=0x7f75c3ae0050, pq=<value optimized out>) 
     at stream-tcp.c:2337 
 #11 0x000000000050e670 in StreamTcpPacket (tv=0xad3dd80, p=0x33e4230, 
     stt=0x7f75c00008c0, pq=0xad3deb0) at stream-tcp.c:4243 
 #12 0x000000000050f4d3 in StreamTcp (tv=0xad3dd80, p=0x33e4230, 
     data=0x7f75c00008c0, pq=<value optimized out>, 
     postpq=<value optimized out>) at stream-tcp.c:4485 
 #13 0x0000000000524109 in TmThreadsSlotVarRun (tv=0xad3dd80, p=0x33e4230, 
     slot=<value optimized out>) at tm-threads.c:557 
 #14 0x00000000005242e9 in TmThreadsSlotVar (td=0xad3dd80) at 
 tm-threads.c:814 
 #15 0x0000003aede079d1 in start_thread (arg=0x7f75cbfff700) 
     at pthread_create.c:301 
 #16 0x00000039684e8b6d in clone () 
     at ../sysdeps/unix/sysv/linux/x86_64/clone.S:115 

 </pre> 
 compiled with command: 
 <pre> 
 CFLAGS="-O2 -g" CCFLAGS="-O2 -g" ./configure --prefix=/usr 
 --sysconfdir=/etc --localstatedir=/var --libdir=/usr/lib64 
 --enable-gccprotect --with-nss-includes=/usr/include/nss3 
 --with-libnspr-includes=/usr/include/nspr 
 </pre> 

 <pre> 
 Suricata Configuration: 
   AF_PACKET support:                         yes 
   PF_RING support:                           no 
   NFQueue support:                           no 
   IPFW support:                              no 
   DAG enabled:                               no 
   Napatech enabled:                          no 
   Unix socket enabled:                       yes 
   Detection enabled:                         yes 

   libnss support:                            yes 
   libnspr support:                           yes 
   libjansson support:                        yes 
   Prelude support:                           no 
   PCRE jit:                                  no 
   libluajit:                                 no 
   libgeoip:                                  no 
   Non-bundled htp:                           no 
   Old barnyard2 support:                     no 
   CUDA enabled:                              no 

   Suricatasc install:                        yes 

   Unit tests enabled:                        no 
   Debug output enabled:                      no 
   Debug validation enabled:                  no 
   Profiling enabled:                         no 
   Profiling locks enabled:                   no 
   Coccinelle / spatch:                       no 

 Generic build parameters: 
   Installation prefix (--prefix):            /usr 
   Configuration directory (--sysconfdir):    /etc/suricata/ 
   Log directory (--localstatedir) :          /var/log/suricata/ 

   Host:                                      x86_64-unknown-linux-gnu 
   GCC binary:                                gcc 
   GCC Protect enabled:                       yes 
   GCC march native enabled:                  yes 
   GCC Profile enabled:                       no 
 </pre> 

 Suricata run with command: 
 suricata -c /etc/suricata/suricata.yaml --af-packet=eth2 -D 

 suricata.yaml minified: 
 <pre> 
 %YAML 1.1 
 --- 
 host-mode: sniffer-only 
 default-log-dir: /var/log/suricata/ 
 unix-command: 
   enabled: no 
 outputs: 
   - fast: 
       enabled: no 
       filename: fast.log 
       append: yes 
   - eve-log: 
       enabled: no 
       type: file #file|syslog|unix_dgram|unix_stream 
       filename: eve.json 
       types: 
         - alert 
         - http: 
             extended: yes       # enable this for extended logging information 
         - dns 
         - tls: 
             extended: yes       # enable this for extended logging information 
         - files: 
             force-magic: no     # force logging magic on all logged files 
             force-md5: no       # force logging of md5 checksums 
         - ssh 
   - unified2-alert: 
       enabled: yes 
       filename: unified2.alert 
       limit: 32mb 
       sensor-id: 0 
       xff: 
         enabled: yes 
         mode: extra-data 
         header: X-Forwarded-For 
   - http-log: 
       enabled: no 
       filename: http.log 
       append: yes 
   - tls-log: 
       enabled: no    # Log TLS connections. 
       filename: tls.log # File to store TLS logs. 
       append: yes 
       certs-log-dir: certs # directory to store the certificates files 
   - dns-log: 
       enabled: no 
       filename: dns.log 
       append: yes 
   - pcap-info: 
       enabled: no 
   - pcap-log: 
       enabled:    no 
       filename: log.pcap 
       limit: 1000mb 
       max-files: 2000 
       mode: normal # normal or sguil. 
       use-stream-depth: no #If set to "yes" packets seen after reaching 
 stream inspection depth are ignored. "no" logs all packets 
   - alert-debug: 
       enabled: no 
       filename: alert-debug.log 
       append: yes 
   - alert-prelude: 
       enabled: no 
       profile: suricata 
       log-packet-content: no 
       log-packet-header: yes 
   - stats: 
       enabled: no 
       filename: stats.log 
       interval: 8 
   - syslog: 
       enabled: no 
       facility: local5 
   - drop: 
       enabled: no 
       filename: drop.log 
       append: yes 
   - file-store: 
       enabled: no         # set to yes to enable 
       log-dir: files      # directory to store the files 
       force-magic: no     # force logging magic on all stored files 
       force-md5: no       # force logging of md5 checksums 
   - file-log: 
       enabled: no 
       filename: files-json.log 
       append: yes 
       force-magic: no     # force logging magic on all logged files 
       force-md5: no       # force logging of md5 checksums 
 magic-file: /usr/share/file/magic 
 nfq: 
 af-packet: 
   - interface: eth2 
     threads: 8 
     cluster-id: 99 
     cluster-type: cluster_flow 
     defrag: yes 
     use-mmap: no 
     checksum-checks: no 
   - interface: eth1 
     threads: 1 
     cluster-id: 98 
     cluster-type: cluster_flow 
     defrag: yes 
   - interface: default 
 legacy: 
   uricontent: enabled 
 detect-engine: 
   - profile: high 
   - custom-values: 
       toclient-src-groups: 15 
       toclient-dst-groups: 15 
       toclient-sp-groups: 15 
       toclient-dp-groups: 20 
       toserver-src-groups: 15 
       toserver-dst-groups: 15 
       toserver-sp-groups: 15 
       toserver-dp-groups: 40 
   - sgh-mpm-context: auto 
   - inspection-recursion-limit: 3000 
 threading: 
   set-cpu-affinity: no 
   cpu-affinity: 
     - management-cpu-set: 
         cpu: [ 0 ]    # include only these cpus in affinity settings 
     - receive-cpu-set: 
         cpu: [ 0 ]    # include only these cpus in affinity settings 
     - decode-cpu-set: 
         cpu: [ 0, 1 ] 
         mode: "balanced" 
     - stream-cpu-set: 
         cpu: [ "0-1" ] 
     - detect-cpu-set: 
         cpu: [ "all" ] 
         mode: "exclusive" # run detect threads in these cpus 
         prio: 
           low: [ 0 ] 
           medium: [ "1-2" ] 
           high: [ 3 ] 
           default: "medium" 
     - verdict-cpu-set: 
         cpu: [ 0 ] 
         prio: 
           default: "high" 
     - reject-cpu-set: 
         cpu: [ 0 ] 
         prio: 
           default: "low" 
     - output-cpu-set: 
         cpu: [ "all" ] 
         prio: 
            default: "medium" 
   detect-thread-ratio: 1.5 
 cuda: 
   mpm: 
     data-buffer-size-min-limit: 0 
     data-buffer-size-max-limit: 1500 
     cudabuffer-buffer-size: 500mb 
     gpu-transfer-size: 50mb 
     batching-timeout: 2000 
     device-id: 0 
     cuda-streams: 2 
 mpm-algo: ac 
 pattern-matcher: 
   - b2gc: 
       search-algo: B2gSearchBNDMq 
       hash-size: low 
       bf-size: medium 
   - b2gm: 
       search-algo: B2gSearchBNDMq 
       hash-size: low 
       bf-size: medium 
   - b2g: 
       search-algo: B2gSearchBNDMq 
       hash-size: low 
       bf-size: medium 
   - b3g: 
       search-algo: B3gSearchBNDMq 
       hash-size: low 
       bf-size: medium 
   - wumanber: 
       hash-size: low 
       bf-size: medium 
 defrag: 
   memcap: 32mb 
   hash-size: 65536 
   trackers: 65535 # number of defragmented flows to follow 
   max-frags: 65535 # number of fragments to keep (higher than trackers) 
   prealloc: yes 
   timeout: 60 
 flow: 
   memcap: 64mb 
   hash-size: 65536 
   prealloc: 10000 
   emergency-recovery: 30 
 vlan: 
   use-for-tracking: true 
 flow-timeouts: 
   default: 
     new: 30 
     established: 300 
     closed: 0 
     emergency-new: 10 
     emergency-established: 100 
     emergency-closed: 0 
   tcp: 
     new: 60 
     established: 3600 
     closed: 120 
     emergency-new: 10 
     emergency-established: 300 
     emergency-closed: 20 
   udp: 
     new: 30 
     established: 300 
     emergency-new: 10 
     emergency-established: 100 
   icmp: 
     new: 30 
     established: 300 
     emergency-new: 10 
     emergency-established: 100 
 stream: 
   memcap: 32mb 
   checksum-validation: no         # reject wrong csums 
   inline: auto                    # auto will use inline mode in IPS mode, 
 yes or no set it statically 
   reassembly: 
     memcap: 128mb 
     depth: 1mb                    # reassemble 1mb into a stream 
     toserver-chunk-size: 2560 
     toclient-chunk-size: 2560 
     randomize-chunk-size: yes 
 host: 
   hash-size: 4096 
   prealloc: 1000 
   memcap: 16777216 
 logging: 
   default-log-level: notice 
   default-output-filter: 
   outputs: 
   - console: 
       enabled: yes 
   - file: 
       enabled: yes 
       filename: /var/log/suricata/suricata.log 
   - syslog: 
       enabled: no 
       facility: local5 
       format: "[%i] <%d> -- " 
 mpipe: 
   load-balance: dynamic 
   iqueue-packets: 2048 
   inputs: 
   - interface: xgbe2 
   - interface: xgbe3 
   - interface: xgbe4 
   stack: 
     size128: 0 
     size256: 9 
     size512: 0 
     size1024: 0 
     size1664: 7 
     size4096: 0 
     size10386: 0 
     size16384: 0 
 pfring: 
   - interface: eth0 
     threads: 1 
     cluster-id: 99 
     cluster-type: cluster_flow 
   - interface: default 
 pcap: 
   - interface: eth0 
   - interface: default 
 pcap-file: 
   checksum-checks: auto 
 ipfw: 
 default-rule-path: /etc/suricata/rules 
 rule-files: 
  - botcc.portgrouped.rules 
  - ciarmy.rules 
  - compromised.rules 
  - drop.rules 
  - dshield.rules 
  - emerging-activex.rules 
  - emerging-attack_response.rules 
  - emerging-chat.rules 
  - emerging-current_events.rules 
  - emerging-dns.rules 
  - emerging-dos.rules 
  - emerging-exploit.rules 
  - emerging-ftp.rules 
  - emerging-games.rules 
  - emerging-imap.rules 
  - emerging-inappropriate.rules 
  - emerging-malware.rules 
  - emerging-misc.rules 
  - emerging-mobile_malware.rules 
  - emerging-netbios.rules 
  - emerging-p2p.rules 
  - emerging-policy.rules 
  - emerging-pop3.rules 
  - emerging-rpc.rules 
  - emerging-scada.rules 
  - emerging-scan.rules 
  - emerging-shellcode.rules 
  - emerging-smtp.rules 
  - emerging-snmp.rules 
  - emerging-sql.rules 
  - emerging-telnet.rules 
  - emerging-tftp.rules 
  - emerging-trojan.rules 
  - emerging-user_agents.rules 
  - emerging-voip.rules 
  - emerging-web_client.rules 
  - emerging-web_server.rules 
  - emerging-web_specific_apps.rules 
  - emerging-worm.rules 
  - tor.rules 
  - http-events.rules      # available in suricata sources under rules dir 
  - smtp-events.rules      # available in suricata sources under rules dir 
 classification-file: /etc/suricata/rules/classification.config 
 reference-config-file: /etc/suricata/rules/reference.config 
 vars: 
   address-groups: 
     HOME_NET: 
 "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,50.114.0.0/16,199.58.198.224/27,199.58.199.0/24,69.27.166.0/26]" 
     EXTERNAL_NET: "!$HOME_NET" 
     HTTP_SERVERS: "$HOME_NET" 
     SMTP_SERVERS: "$HOME_NET" 
     SQL_SERVERS: "$HOME_NET" 
     DNS_SERVERS: "$HOME_NET" 
     TELNET_SERVERS: "$HOME_NET" 
     AIM_SERVERS: "$EXTERNAL_NET" 
     DNP3_SERVER: "$HOME_NET" 
     DNP3_CLIENT: "$HOME_NET" 
     MODBUS_CLIENT: "$HOME_NET" 
     MODBUS_SERVER: "$HOME_NET" 
     ENIP_CLIENT: "$HOME_NET" 
     ENIP_SERVER: "$HOME_NET" 
   port-groups: 
     HTTP_PORTS: "80" 
     SHELLCODE_PORTS: "!80" 
     ORACLE_PORTS: 1521 
     SSH_PORTS: 22 
     DNP3_PORTS: 20000 
 action-order: 
   - pass 
   - drop 
   - reject 
   - alert 
 host-os-policy: 
   windows: [] 
   bsd: [] 
   bsd-right: [] 
   old-linux: [] 
   linux: [0.0.0.0/0] 
   old-solaris: [] 
   solaris: [] 
   hpux10: [] 
   hpux11: [] 
   irix: [] 
   macos: [] 
   vista: [] 
   windows2k3: [] 
 asn1-max-frames: 256 
 engine-analysis: 
   rules-fast-pattern: yes 
   rules: yes 
 pcre: 
   match-limit: 3500 
   match-limit-recursion: 1500 
 app-layer: 
   protocols: 
     tls: 
       enabled: yes 
       detection-ports: 
         toserver: 443 
     dcerpc: 
       enabled: yes 
     ftp: 
       enabled: yes 
     ssh: 
       enabled: yes 
     smtp: 
       enabled: yes 
     imap: 
       enabled: detection-only 
     msn: 
       enabled: detection-only 
     smb: 
       enabled: yes 
       detection-ports: 
         toserver: 139 
     dns: 
       tcp: 
         enabled: yes 
         detection-ports: 
           toserver: 53 
       udp: 
         enabled: yes 
         detection-ports: 
           toserver: 53 
     http: 
       enabled: yes 
       libhtp: 
          default-config: 
            personality: IDS 
            request-body-limit: 3072 
            response-body-limit: 3072 
            request-body-minimal-inspect-size: 32kb 
            request-body-inspect-window: 4kb 
            response-body-minimal-inspect-size: 32kb 
            response-body-inspect-window: 4kb 
            double-decode-path: no 
            double-decode-query: no 
          server-config: 
 profiling: 
   rules: 
     enabled: yes 
     filename: rule_perf.log 
     append: yes 
     sort: avgticks 
     limit: 100 
   keywords: 
     enabled: yes 
     filename: keyword_perf.log 
     append: yes 
   packets: 
     enabled: yes 
     filename: packet_stats.log 
     append: yes 
     csv: 
       enabled: no 
       filename: packet_stats.csv 
   locks: 
     enabled: no 
     filename: lock_stats.log 
     append: yes 
 coredump: 
   max-dump: unlimited 
 napatech: 
     hba: -1 
     use-all-streams: yes 
     streams: [1, 2, 3] 
 </pre> 

 Let me know if I need to provide any more information or enable features. 

 Thanks, 
 Jason 

Back