@Override public Map<String, Object> getFieldMap(String sourceType) { SensorEnrichmentConfig config = getConfigurations().getSensorEnrichmentConfig(sourceType); if (config != null) { return config.getThreatIntel().getFieldMap(); } else { LOG.info("Unable to retrieve sensor config: " + sourceType); return null; } }
@Override protected Map<String, ConfigHandler> getFieldToHandlerMap(String sensorType) { if (sensorType != null) { SensorEnrichmentConfig config = getConfigurations().getSensorEnrichmentConfig(sensorType); if (config != null) { return config.getThreatIntel().getEnrichmentConfigs(); } else { LOG.info("Unable to retrieve a sensor enrichment config of " + sensorType); } } else { LOG.error("Trying to retrieve a field map with sensor type of null"); } return new HashMap<>(); }
@Override public JSONObject joinMessages(Map<String, JSONObject> streamMessageMap) { JSONObject ret = super.joinMessages(streamMessageMap); LOG.trace("Received joined messages: {}", ret); boolean isAlert = ret.containsKey("is_alert"); if (!isAlert) { for (Object key : ret.keySet()) { if (key.toString().startsWith("threatintels") && !key.toString().endsWith(".ts")) { isAlert = true; break; } } } else { Object isAlertObj = ret.get("is_alert"); isAlert = ConversionUtils.convert(isAlertObj, Boolean.class); if (!isAlert) { ret.remove("is_alert"); } } if (isAlert) { ret.put("is_alert", "true"); String sourceType = MessageUtils.getSensorType(ret); SensorEnrichmentConfig config = getConfigurations().getSensorEnrichmentConfig(sourceType); ThreatTriageConfig triageConfig = null; if (config != null) { triageConfig = config.getThreatIntel().getTriageConfig(); if (LOG.isDebugEnabled()) { LOG.debug(sourceType + ": Found sensor enrichment config."); } } else { LOG.debug(sourceType + ": Unable to find threat config."); } if (triageConfig != null) { if (LOG.isDebugEnabled()) { LOG.debug(sourceType + ": Found threat triage config: " + triageConfig); } if (LOG.isDebugEnabled() && (triageConfig.getRiskLevelRules() == null || triageConfig.getRiskLevelRules().isEmpty())) { LOG.debug(sourceType + ": Empty rules!"); } ThreatTriageProcessor threatTriageProcessor = new ThreatTriageProcessor(config, functionResolver, stellarContext); Double triageLevel = threatTriageProcessor.apply(ret); if (LOG.isDebugEnabled()) { String rules = Joiner.on('\n').join(triageConfig.getRiskLevelRules().entrySet()); LOG.debug( "Marked " + sourceType + " as triage level " + triageLevel + " with rules " + rules); } if (triageLevel != null && triageLevel > 0) { ret.put("threat.triage.level", triageLevel); } } else { LOG.debug(sourceType + ": Unable to find threat triage config!"); } } return ret; }