I see a ton of companies just selling IOC feeds and there are quite a few free ones, but I rarely see anyone talking about how to actually use those feeds. Sure there are some that you can just feed into your firewall and forget about for some of the paid feeds, but what I’m talking about is actually using them to generate detections and prompt investigations by your SOC.
Let’s assume you’ve got a MISP instance and you’re using Splunk as your SIEM. MISP is configured to ingest feeds and you’re tagging those feeds by the feed name (malwarebazaar or whatever) and your goal is to perform two types of searches in Splunk:
-
“live” comparisons where you’re comparing the IOCs to recent data to catch active infections.
-
“retroactive” comparisons where you’re looking for indicators in historical data to see if you’ve missed anything
Both of these scenarios have some pretty interesting technical hurdles to get through, but I’m really only struggling with the live search.
For live search first and foremost, maybe Splunk isn’t the best tool for this since by nature of it being a SIEM the data is stale when it gets there. But for the sake of us not implementing some pre-ingestion time comparison tool, let’s just say you’re ingesting a MISP feed every 24 hours and then running that against 24 hours of Splunk data.
Because the data in Splunk is fresh, you want to compare a large list of IOCs against it. Essentially you want every IOC that isn’t relevant anymore (maybe leveraging MISP’s decay model?). These are expensive searches AND expensive fetches from MISP’s API. If you wanted to compare 90 days of indicators from MISP and you’re using PyMISP w/ something like:
misp.search(tags=[‘malwarebazaar’], timestamp=90d)
this will take forever for MISP to respond and you’ll probably time out. So the alternative is maybe to just keep your own local storage but then you lose the functionality of MISP’s decay. You could just do that misp.search and then parse and drop them into a lookup file that you ship to Splunk… but should you just do it once every 24 hours and append to that list with a the older than 90 day objects falling off as you write it? This feels hacky and I don’t like it. What I’d really want is for MISP to just nicely return those objects and use the exclude_decayed and enforce_warninglist params and let MISP do what it does best. Maybe the timeout problems are on our MISP server side but it just seems to not really be the best way to handle this.
How are other SOCs/Intel teams handling this? We’ve already currated our feeds to only use feeds that we think are high quality but the number of events is still very large and I don’t like being limited by size here because there are other larger feeds out there that I’d like to use.
Once we’ve got the lookup lists or KV stores in Splunk we are then restricted by memory again because there is a maxium number of entries that Splunk will allow to be stored in memory during a search - but this is an easier problem to wrap my head around. I have already planned for having indicator specific and feed specific searches to keep the numbers smaller.