[Oisf-devel] Suricata core dumps with luajit rule and large ruleset?
Victor Julien
victor at inliniac.net
Thu Sep 20 13:59:13 UTC 2012
On 09/20/2012 12:21 AM, Chris Wakelin wrote:
> I've been trying out my little Lua(jit) XORed-binary detector and
> discovered that when I include a large ruleset such as
> emerging-trojans.rules (6.5k) or emerging-malware.rules (4k), Suricata
> segfaults:-
>
>> Program terminated with signal 11, Segmentation fault.
>> #0 0x00007f26a3eaf580 in ?? () from /usr/lib/x86_64-linux-gnu/libluajit-5.1.so.2
>> #0 0x00007f26a3eaf580 in ?? () from /usr/lib/x86_64-linux-gnu/libluajit-5.1.so.2
>> No symbol table info available.
>> #1 0x00007f26a3ee2bb0 in lua_tolstring () from /usr/lib/x86_64-linux-gnu/libluajit-5.1.so.2
>> No symbol table info available.
>> #2 0x00000000004ba368 in DetectLuajitThreadInit (data=<optimised out>) at detect-luajit.c:395
>> _sc_log_err_msg = "[799] 19/9/2012 -- 22:58:45 - (detect-luajit.c:387) <Error> (DetectLuajitThreadInit) -- [ERRCODE: SC_ERR_LUAJIT_ERROR(218)] - ", '\000' <repeats 1921 times>
>> _sc_log_err_temp = <optimised out>
>> luajit = <optimised out>
>> __PRETTY_FUNCTION__ = "DetectLuajitThreadInit"
>> t = 0x7f269c503740
>> __FUNCTION__ = "DetectLuajitThreadInit"
>> status = <optimised out>
>> #3 0x0000000000443f1f in DetectEngineThreadCtxInitKeywords (de_ctx=<optimised out>, det_ctx=<optimised out>) at detect-engine.c:711
>> item = 0x40ad750
>> #4 0x00000000004455ce in DetectEngineThreadCtxInitKeywords (de_ctx=<optimised out>, det_ctx=<optimised out>) at detect-engine.c:698
>> No locals.
>> #5 DetectEngineThreadCtxInit (tv=0x5ddb280, initdata=0x3fc69d0, data=0x7f26a0cbd628) at detect-engine.c:803
>> de_ctx = 0x3fc69d0
>> det_ctx = 0x7f269c007730
>> __FUNCTION__ = "DetectEngineThreadCtxInit"
>> #6 0x00000000005131c0 in TmThreadsSlotPktAcqLoop (td=0x5ddb280) at tm-threads.c:633
>> slot_data = 0x0
>> tv = 0x5ddb280
>> s = 0x5dc30e0
>> r = <optimised out>
>> slot = <optimised out>
>> __FUNCTION__ = "TmThreadsSlotPktAcqLoop"
>> #7 0x00007f26a33fae9a in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
>> No symbol table info available.
>> #8 0x00007f26a2cad4bd in clone () from /lib/x86_64-linux-gnu/libc.so.6
>> No symbol table info available.
>> #9 0x0000000000000000 in ?? ()
>> No symbol table info available.
>
> This is using subsets of ET ruleset, plus local my rules. With ~5.5k
> total rules it seems fine; add one of the big ones and it breaks.
Here is works even with emerging-all.rules + the lua rule.
> My luajit rule:
>
> alert http $EXTERNAL_NET any -> $HOME_NET any (msg:"LUAJIT test - match
> XORed binary"; flowbits:isset,ET.http.javaclient.vulnerable;
> flowbits:isnotset,ET.http.binary; luajit:xor-n-plus4-or-6.lua;
> sid:379000001; rev:2;)
>
> Victor, I think I sent you the Lua script already? I'll send it to
> anyone else interested if they ask ;-)
Yes, I have it.
> Suricata is latest git - 1.4dev (rev 9a4b612) - and was started with
> "--runmode=single -r <1GB pcap>". I've not tried other runmodes (such as
> live traffic) yet. I'm running Ubuntu 12.04 64-bit.
I fixed the reason it segv'd. But the it crashed in an error message,
and I've unable to reproduce the error condition. Can you send me the
exact config + rules to reproduce?
> (BTW the rule uses a lot of ticks, but isn't the worst by a long way.
> Surprisingly, making it return 0 instantly doesn't seem to speed it up
> much!)
Cool.
--
---------------------------------------------
Victor Julien
http://www.inliniac.net/
PGP: http://www.inliniac.net/victorjulien.asc
---------------------------------------------
More information about the Oisf-devel
mailing list