Re: Hyperscan and ERROR: rules/snort.rules:3208 can't compile content ''
"Adrian Mamolea \(admamole\) via Snort-users" <[email protected]> Fri, 23 Jun 2023 16:52:27 +0000
| Newsgroups | gmane.comp.security.ids.snort.general |
|---|---|
| Message-ID | <SN6PR11MB322939EDE4C2DD6D4977C1DFC223A@SN6PR11MB3229.namprd11.prod.outlook.com> |
Hello Amish, Glad it is sorted out. The documentation for hs_compile_lit https://intel.github.io/hyperscan/dev-reference/api_files.html, is indeed clear: the special terminating character \0 should be allowed to appear in expression, and not treated as a terminator for a string.. Adrian -----Original Message----- From: Amish <[email protected]> Sent: Thursday, June 22, 2023 10:29 PM To: Adrian Mamolea (admamole) <[email protected]>; [email protected] Subject: Re: [Snort-users] Hyperscan and ERROR: rules/snort.rules:3208 can't compile content '' Ok this is indeed hyperscan bug. There are other people who complained too. https://github.com/intel/hyperscan/commit/9e17e8520f182ac81fb4f1092281a6969bf93083 https://github.com/intel/hyperscan/issues/386 https://github.com/intel/hyperscan/issues/388 Regards Amish On 23/06/23 07:48, Amish wrote: > Hello Adrian, > > If that's the case then it would be Hyperscan bug, because it should > not use strcmp() but it should check if expLength is 0. > > https://github.com/intel/hyperscan/blob/v5.4.1/src/compiler/compiler.cpp#L420 > > > - if (!strcmp(expression, "")) { > + if (expLength == 0) { > > Because expression may start with NUL (hex 00) byte but still may not > really be empty. > > However I am neither snort expert nor hyperscan expert. I am just > guessing based on few lines of snort and hyperscan code that I read. > > I have no clue how these "content" (expressions) work. > > Please do let me know if this needs filing a bug report (either on > snort github or hyperscan github). I can do that. > > Thanks and regards, > > Amish. > > On 23/06/23 04:59, Adrian Mamolea (admamole) wrote: >> Hello Amish, >> >> Good info, the rule is tripping on the check for null string that was >> added to hyperscan since 5.4.1: >> https://github.com/intel/hyperscan/blob/v5.4.1/src/compiler/compiler.cpp#L420 >> >> Perhaps on the other host you have an older version? In that case you >> can try to downgrade hyperscan. >> I'll check how this is supposed to work and get back to you. >> >> Adrian >> >> -----Original Message----- >> From: Amish <[email protected]> >> Sent: Wednesday, June 21, 2023 10:14 PM >> To: Adrian Mamolea (admamole) <[email protected]>; >> [email protected] >> Subject: Re: [Snort-users] Hyperscan and ERROR: >> rules/snort.rules:3208 can't compile content '' >> >> Further to my previous message, I added a code to print error message >> given by Hyperscan. >> >> So here is the error message: >> >> ERROR: rules/snort.rules:2210 can't compile content '', error message: >> 'Pure literal API doesn't support empty string.' >> >> So it seems that snort is sending empty strings to Hyperscan on certain >> systems. (Or hyperscan is treating it as empty strings) >> >> Can snort developers please look into it? >> >> I can try to provide more information if required. >> >> Thank you, >> >> Regards >> >> Amish. >> >> On 22/06/23 06:52, Amish wrote: >>> Hello Adrian, >>> >>> Thank you for your reply. >>> >>> On 22/06/23 01:56, Adrian Mamolea (admamole) wrote: >>>> Hello Amish, >>>> >>>> For: >>>> ERROR: rules/snort.rules:3208 can't compile content '' >>>> I would expect the pattern between quotes. Did you remove it? >>> No, rules are fetched using pulledpork v3 and same rules work on >>> another machine with Intel Core 2 Duo. >>> >>> And yes till now even I was surprised why the content is empty in >>> ERROR message. >>> >>> But I just checked all the rules where snort gives error, all those >>> rules have content starting with "00", which gets treated as EMPTY >>> string as it begins with NUL byte. >>> >>> For example: (I use snort community rules) >>> >>> alert udp $EXTERNAL_NET any -> $HOME_NET 111 ( msg:"PROTOCOL-RPC >>> portmap SET attempt UDP 111"; flow:to_server; content:"|00 01 86 >>> A0|",depth 4,offset 12; content:"|00 00 00 01|",within 4,distance 4; >>> content:"|00 00 00 00|",depth 4,offset 4; metadata:policy >>> max-detect-ips drop,ruleset community; service:sunrpc; >>> classtype:rpc-portmap-decode; sid:1950; rev:13; ) >>> >>> alert udp $EXTERNAL_NET any -> $HOME_NET 500 ( msg:"SERVER-OTHER >>> ISAKMP second payload initial contact notification without SPI >>> attempt"; flow:to_server; content:"|0B|",depth 1,offset 28; >>> byte_jump:2,30; content:"|00 0C 00 00 00 01 01 00|`|02|",within >>> 10,distance -2; metadata:policy max-detect-ips drop,ruleset community; >>> reference:bugtraq,9416; reference:bugtraq,9417; >>> reference:cve,2004-0164; classtype:misc-attack; sid:2415; rev:16; ) >>> >>> In some rules there are multiple contents, but atleast one content >>> starts with "00" >>> >>> In short, any rule where there is a content starting with "00", snort >>> fails and gives FATAL error. >>> >>> So it looks like (for certain specific systems) either its snort bug >>> somewhere which sends "empty" content to hyperscan OR its hyperscan >>> bug which treats strings starting with "00" as NUL. >>> >>>> Otherwise, since commenting out hyperscan made it work, I would >>>> suspect hyperscan issues on this host, and rules probably OK. >>>> See https://github.com/snort3/snort3/issues/171 for similar issue. >>> Above link and other links given inside that link suggest: >>> >>> 1) Use physical core - but I am already using physical machine and not >>> virtual machine >>> 2) CPU should have ssse3 - I am using i3 9th generation and >>> /proc/cpuinfo indeed lists ssse3 >>> >>> I am not a coder but will try to debug further on whatever I can but >>> just in case you can figure out the problem based on above, then >>> please do check. >>> >>> Thank you >>> >>>> Adrian >>>> >>>> -----Original Message----- >>>> From: Snort-users <[email protected]> On Behalf Of >>>> Amish via Snort-users >>>> Sent: Tuesday, June 20, 2023 12:21 AM >>>> To: [email protected] >>>> Subject: [Snort-users] Hyperscan and ERROR: rules/snort.rules:3208 >>>> can't compile content '' >>>> >>>> Hello, >>>> >>>> I am using Arch Linux with snort version as follows: >>>> >>>> ,,_ -*> Snort++ <*- >>>> o" )~ Version 3.1.63.0 >>>> '''' By Martin Roesch & The Snort Team >>>> http://snort.org/contact#team >>>> Copyright (C) 2014-2023 Cisco and/or its affiliates. All >>>> rights reserved. >>>> Copyright (C) 1998-2013 Sourcefire, Inc., et al. >>>> Using DAQ version 3.0.11 >>>> Using LuaJIT version 2.1.0-beta3 >>>> Using OpenSSL 3.1.1 30 May 2023 >>>> Using libpcap version 1.10.4 (with TPACKET_V3) >>>> Using PCRE version 8.45 2021-06-15 >>>> Using ZLIB version 1.2.13 >>>> Using Hyperscan version 5.4.2 2023-04-22 >>>> Using LZMA version 5.4.3 >>>> >>>> I am running it on Intel i3-9100T CPU (Dell Optiplex 3070) >>>> >>>> But there are hundreds of lines as follows: >>>> >>>> ERROR: rules/snort.rules:3208 can't compile content '' >>>> >>>> Snort crashes with following error: >>>> Jun 20 09:36:34 foo snort[27985]: FATAL ERROR: see prior 721 errors (0 >>>> warnings) >>>> >>>> But this same version (with exact same package file) works fine on an >>>> older machine with Intel Core 2 Duo. Both machines have identical >>>> packages installed. >>>> >>>> I have following line in local.lua file >>>> >>>> -- Enable hyperscan for IPS, AppID, HTTP inspection, pcre/regex >>>> matches >>>> search_engine = { search_method = "hyperscan" } >>>> detection = { hyperscan_literals = true, pcre_to_regex = true } >>>> >>>> With this line it works fine on Intel Core 2 Duo machine but not >>>> work on >>>> Intel i3-9100T. >>>> >>>> If I comment above two config lines, then snort starts fine. >>>> >>>> What could be the issue? And how can I solve this? >>>> >>>> Thank you >>>> >>>> Amish. _______________________________________________ Snort-users mailing list [email protected] Go to this URL to change user options or unsubscribe: https://lists.snort.org/mailman/listinfo/snort-users To unsubscribe, send an email to: [email protected] Please visit http://blog.snort.org to stay current on all the latest Snort news! Please follow these rules: https://snort.org/faq/what-is-the-mailing-list-etiquette