úterý 31. března 2020

SOC without SIEM - idiocy or future? Part 2

Part 2 – Architecture overview

 

Standard SOC


Let’s have a look at standard Security Operations Center on picture 1. This only simplistic representation of technology and organization domain. As you can see on in the Technology domain, there is usually a SIEM which is also often considered as a core component or the heart and soul of a SOC. Then we have Big data platform for multivariable historical searches. In some cases you can consider data lake or log management solution as a big data platform. More and more you can see incident response platform in the SOC for SOAR tasks. Ticketing tool is usually already utilized organization-wide ticketing system to issue tickets for IT and other departments and request changes. Very broad term is Enterprise Security Tools (EST) which includes antivirus, network firewalls, EDR, database protection tools, web application firewalls and many more security protection tools. Those are usually log sources for a SIEM platform. Last example is CTI platform which for our purpose we can simplify to providing threat information to other security tools. There might be many more tools like use case database, automation tools, customer portal, reporting tool etc. but for now we can be ok with this example.

From the Organization domain we can usually see a large number of L1 or Tier 1 staff. They are responsible for monitoring SIEM alerts, close false positives, enrich context, check duplicates, update severity and escalate. I am sorry to tell that, but those tasks are not very exciting and that’s why we see a high turnover rate in this role or bored people which lead to another problems. Then we have L2 role. Those guys should perform technical root cause analysis and decide if the alert was caused by a technical problem, mistake or it was an incident caused deliberately by an attacker. L3 role is responsible for business impact analysis and determine recovery priorities. The role description is very brief because it makes no sense to talk in detail about them, but if you want to know more, you can find some useful information for example in this article. Next we have SOC platform admins. Most of them are designated and responsible for maintaining the SIEM. And of course, Security Intelligence which in our case cover roles like cyber threat intelligence, threat hunting, forensics, use case developers and others.




Picture 1 - Standard SOC setup, technology and organization only

Different representation of a SOC organization could be seen on Picture 2. Statement within the parentheses means number of employees in each department and in SOC itself. This example could be considered as a mid/large sized SOC with 24/7 monitoring by L1 and L2 working on a shifts (3 shifts a day) and L3 covering 2 shifts.
Picture 2 - SOC organization example with employee numbers

Returning to technology layer, we have mentioned that Enterprise security tools are log sources for our SIEM platform. That means they are sending logs and alerts to SIEM which should correlate those events and produce SIEM alerts/offenses/incidents. In SIEM we can also check matches against our threat feeds that came from CTI platform. Then we can directly raise an incident in our IRP or after first level of investigation done by Tier 1 analysts. Both options have their pros and cons. After all the investigation, automation, orchestration tasks in IRP we can create ticket (if needed) outside of SOC to perform specific changes/tasks on the infrastructure that doesn’t fall under SOC responsibility. This straightforward and simplistic view is indicated on Picture 3 below.

Picture 3 - Information flow, standard SOC 

 

 SOC without SIEM

 

What would happen if we remove the SIEM? Nothing! Let’s do it!

It is not that easy. In that case we have to forget about sending logs and alerts to SIEM. Instead we have to send only alerts to IRP directly. That creates higher demand on the Enterprise Security Tools (EST). They must have the capability to create rules and generate alerts. But most of the current enterprise level tools can do this respectively their management module can. One can argue that he will rather manage one SIEM platform rather than 30 other tools to generate alerts. Agree, but you have to manage those tools anyway. It is usually easier to create rules directly on EST than trying to create them from logs in SIEM. Because this task is difficult, companies usually have very generic and simple rules based on logs in SIEM.

Removing SIEM increases demand on high quality rules with low false positive ratio that must be implemented directly on the EST. Also, the integration between EST and IRP is more complicated when no common security alerting format (CSAF) is present. But if you can achieve this you can focus on the automation and orchestration part in the IRP. In ideal scenario you can automate all the tasks done by the L1 staff. So let’s remove them and have only L2 and L3 for the investigation.

I have to admit that this is not directly related to removing SIEM. You can achieve full automation of L1 tasks even with SIEM and properly configured IRP, but the reality is that SIEM creates so much false positives and unpredictable situations for which you usually have L1 like eliminating false positives and filter out log source outages, parsing problems, decommissioning issues etc. In the end, removing SIEM will help you to eliminate L1 role significantly.

Next we can remove SIEM admins and focus on other tools, integrations, automation and orchestration. Sounds good, right? Finally, we can utilize SIEM use case developers to work closely with EST administrators to produce high quality, low false positive rules. In the end we can have half the people or even less in our SOC. This is great because finding good security people to work in our SOC is one of the most challenging tasks. How the structure can look like and what could be the impact on number of employees is illustrated on the Picture 4 below.
Picture 4 - SOC organization without SIEM

We should mention that in this scenario where we have removed SIEM we have new requirements for our Enterprise Security Tools. Not only they should be able to create rules and generate alerts that can be sent to IRP, but also they should be able integrate with CTI platform as you can see on the Picture 5. That means that EST should be able to send their internal threat feeds (indicators of compromise) to CTI platform or ingest central repository of IoCs. For some protection tools this is not a standard. That’s why the arrow on the picture bellow is dashed. To be fair, this feature is more important for tolls like firewalls, web and email gateways rather than identity and access management tool. And we could find more examples.

Picture 5 - Information flow, SOC without SIEM

At the end this setup is more complicated on the EST side, but if you invest slightly more in this area, you will have much better preventative mechanisms with detective capabilities. Also, the savings on SIEM technology and associated work force will be much more. If you move the detection on the Enterprise Security Tools you can directly block/stop the attack when detected. When SIEM is responsible for detection it creates a delay because SIEM is not usually capable to stop the attack. It is only passively processing incoming logs/flows. Typically, SIEM alerts analysts or Incident Response Platform and then the action can take place. But this delay can be fatal.

If you have a feeling that I am telling you to stop collecting logs, you are wrong. Please, don’t confuse log management tools with SIEM. It is very common mistake that SIEM is used primarily as a log management, but this is silly and expensive. I can definitely recommend collecting and keeping your logs. They are priceless. Continue using your log management solution, data lake or big data platform. Just try to forget about SIEM







So what is your experience with SIEM? If you think it is costly, complicated, high performance demand tool with little value added, would you consider trying to live without it? It seems that this setup has only advantages: cost savings, better prevention, simplified SOC organization structure. If you decide to remove SIEM or to design your SOC without it, let me know. I can offer free solution and support for the first one to try. I am kidding. The maximum you can get is minimal discount ;-)



středa 25. března 2020

SOC without SIEM - idiocy or future? Part 1


Part 1 – the idea


Are you using SIEM within your SOC or security department? What is the value added it brings to your organization? What is the effort needed to keep the SIEM up to date, running and creating new monitoring scenarios, searches and dashboards? If your answer is low value added and enormous effort, you may find this article interesting. In other cases, you can consider this article stupid and author pathetic.

Organizations are using SIEM as log management solution very often. This makes no sense, because there are log management solutions that are cheaper and perform log management tasks better/faster than SIEMs. Long story short, if you do not need real time correlation capabilities and you really only need a log storage and searching capabilities, do not buy SIEM.

Now let’s assume that you need SIEM and you have one. Perfect, but organizations often have problems to define monitoring scenarios for SIEM. And if they do, those scenarios are very basic ones. It is no surprise that for situations like audit log cleared or multiple login failures could be also easily monitored by other means than SIEM. You can configure your EDR solution or antivirus to inform/alert you in case such situation happens. Access to prohibited web sites? Phishing email? Your email or web gateway should alert you. Why to transfer all the logs from those devices to SIEM and integrate the threat feeds that are already available in you gateways? One can argue that this could be useful to verify gateways are working as intended. Really? This is similar approach to another funny monitoring scenario which is monitoring firewall denies. Again, you are basically verifying that FW works as intended. And if you argue that you can evaluate trends and number of FW denies in that case, fair enough, but you are not able to monitor this directly on the firewall or FW control center? If not, you should consider replacing your current firewalls. In the end it will be cheaper than the SIEM technology and improve you prevention mechanisms a lot.
You want to monitor organization internal policies? Unauthorized access, sharing of information, downloading of sensitive files? That’s why DLP exists and it can produce very nice alerts by itself. If you are trying to make your own DLP solution within SIEM, good luck.

What I have also seen in many cases that SIEM is used like centralized tool for alerting? What do I mean by that? IPS is producing alerts, NGFW is producing different alerts, DB protection tools with its own rules is producing another type of alerts. All those types of alerts are transferred to a SIEM solution and each of them is just one to one mapped to an SIEM alert? Does this make sense? Do you need powerful SIEM solution with all those correlation capabilities to make such a simple task? Isn’t this one of the reasons why do we have IR (incident response) tools?

Let’s remove SIEM and have everything in incident response platform! I wish it is so easy. One can argue that in SIEM you can eliminate false positives. Agree, but you should be trying to eliminate the generation of false positives as close to the source as possible. Actually, what you can see in many of the implemented SIEMs they are producing mostly false positives which leads to “alert fatigue”. Analysts are then bored with investigating the same alerts again and again. In the end true incident is often missed because of the flood of false positives so in that case SIEM is not our silver bullet either.
I can only recommend eliminating the false positives on the source itself either by the configuration change on the source directly or on the first security platform that protects the source. If you transfer the false positive to SIEM then you are paying for the license (EPS, storage) and for the time to analyze and close the case.
Often you will also find easier to implement monitoring scenario in EDR or NGFW because you usually have experienced administrators familiar with the technology and within few clicks you can have well defined, fine-tuned rule that will alert you in case conditions are met. When trying to implement the same in SIEM, you need to have specific logs from source. You need to understand those logs and know where the information is present. Then you should know how to implement the rule in SIEM and then you are praying logs are still flowing to your SIEM and format hasn’t changed after update/patch. This requires much more cooperation and knowledge, but the output is the same.

In previous paragraph we have touched the problematics of integrations. With SIEM it starts with log source integration. Format, transfer method, parsing, normalization. All of those needs to be monitored, updated, evaluated after updates/patches both on SIEM and log source side. Enormous effort with little value added and unavoidable problems/outages.
But the same will happen if we skip SIEM and send only alerts to incident response platform. Agree, that’s why I consider this setup as a future. Something like common security alerting format (CSAF) should be defined to ease up the implementation and more focus and investments need to be devoted to other prevention and detection technology.

How would SOC without a SIEM look like? How it will influence the SOC organization structure? Let’s try to imagine this in the next part of our article.

At the end I should give 2 valid arguments why organizations need SIEM solution.
One is that you need SIEM to correlate events from endpoints with firewall events, traffic flows and compare it against information from CTI platform. Yes, agree, but honestly, I have never seen an organization with such advanced monitoring scenarios. Usually, you define suspicious activity based on logs or flows itself. It is not a good practice to create complex scenarios where you chain activities to produce an alert. You may miss an alert in case of small deviation from the defined chain of actions. Also, you can check CTI information from IRP if integrated. But yes, in general, that is one valid argument.
Second is. WTF, we have 20+ people in our SOC. Majority of them put their blood, sweat and tears to make SIEM work. We are investing enormous money and effort to operate SIEM. We can’t simply get rid of it. We and CISO would look like idiots in front of the executives. And that I believe is the correct argument why you should keep the SIEM and consider SOC without a SIEM as a pure idiocy.

CSAF examples

This site contains list of CSAF examples. More samples will be present over the time. Currently, the focus is given on CSAF in JSON, but almost any method of transfer is possible (syslog, REST API ...). Please focus on the content, any delimiter can be chosen and object can be enclosed in other ways than in {}.

The first example tries to follow the same coloring scheme and distinction as in the schema definition

 

Example 1 with color distinction


{
  "Device": {
    "vendor": "Cisco",
    "product": "ASA",
    "version": "5525-X",
    "OS": "IOS 14",
    "module": "Firepower",
    "feature": "WEB protection",
    "device_name": "badassfw",
    "device_IP": "10.20.255.1",
    "policy": "block_porn",
    "rule": "24",
    "action": "blocked",
  },
  "Priority": {
    "severity": "High",
    "credibility": "Med",
    "relevance": "10",
  },
  "Alert": {
    "time": "2019/06/05 13:02:14.171",
    "category": ["WEB","Traffic blocked","web access blocked"],
    "name": "Porn site access",
    "id": "100237"
    "link": "http://10.20.255.1/alerts?id=100237"  
    "domain": "Tenant1",
    "region": "CZ",
    "target": ["freevideo.cz","adm_user","10.101.24.23"],
    "artifacts": {
      "username": "adm_user",
      "src_IP": "10.101.24.23",
      "src_port": "50435",
      "dst_IP": "80.188.244.72",
      "dst_port": "443",
      "domain": "freevideo.cz",
      "url": "https://freevideo.cz/big_gang_bang_theory",
    },
    "status": "active",
    "tactics": ["defense evasion","execution"],
    "techniques": "Web service"
    "rawData": "null",
    "associated_events": [
            {
            "time":"2019/06/05 13:02:11.171",
            "name":"blocked web traffic",
            "target":["freevideo.cz"],
            "artifacts": {
                  "username": "adm_user",
                  "src_IP": "10.101.24.23",
                  "src_port": "50435",
                  "dst_IP": "80.188.244.72",
                  "dst_port": "80",
                  "domain": "freevideo.cz",
                  "url": "freevideo.cz",
            },
            "count": 1,
            "rawData": "empty"
            },
            {
            "time":"2019/06/05 13:02:12.171",
            "name":"blocked web traffic",
            "target":["https://freevideo.cz"],
            "artifacts": {
                        "username": "adm_user",
                        "src_IP": "10.101.24.23",
                        "src_port": "50435",
                        "dst_IP": "80.188.244.72",
                        "dst_port": "443",
                        "domain": "freevideo.cz",
                        "url": "https://freevideo.cz/",
            },
            "count": 1,
            "rawData": "empty"},
            {
            "time":"2019/06/05 13:02:13.171",
            "name":"blocked web traffic",
            "target":["https://freevideo.cz/big_gang_bankg_theory"],
            "artifacts": {
                  "username": "adm_user",
                  "src_IP": "10.101.24.23",
                  "src_port": "50435",
                  "dst_IP": "80.188.244.72",
                  "dst_port": "443",
                  "domain": "freevideo.cz",
                  "url": "https://freevideo.cz/big_gang_bang_theory",
            },
            "count": 1,
            "rawData": "empty"},
    ]
  }
}



Example 2


{
  "Device": {
    "product": "AuditVault",
    "device_name": "oracleauditvault",
    "device_IP": "10.20.25.101",
    "policy": "select star",
    "action": "alert",
  },
  "Priority": {
    "severity": "Medium",
  },
  "Alert": {
    "time": "2020/02/02 10:22:14.153",
    "category": ["DB","access","select"],
    "name": "select star",
    "target": ["etl_live","sysdba","10.10.24.23"],
    "artifacts": {
      "username": "sysdba",
      "src_IP": "10.10.24.23",
      "src_port": "56449",
      "dst_IP": "10.18.24.72",
      "dst_port": "1514",
      "database": "etl_live",
      "table": "users",
    },
    "rawData": "select * from users;",
  }
}



CSAF schema

The CSAF schema definition is introducing the content with properties and its type. All the properties are described in detail on CSAF format description page. Examples can be seen here.
There are no mandatory fields, but it is highly recommended to follow the naming convention and fill in all the properties that can help to identify the alert and ease its investigation. Focus is given on simplifying integration between alert generating device and incident response tool/platform. 


Schema with color distinction



{
  "title": "CSAF",
  "type": "object",
  "properties": {
    "Device": {
      "type": "object",
      "properties": {
        "vendor": {
          "type": "string"
        },
        "product": {
          "type": "string"
        },
        "version": {
          "type": "string"
        },
        "OS": {
          "type": "string"
        },
        "module": {
          "type": "string"
        },
        "feature": {
          "type": "string"
        },
        "device_name": {
          "type": "string"
        },
        "device_IP": {
          "type": "string"
        },
        "policy": {
          "type": "string"
        },
        "rule": {
          "type": "string"
        },
        "action": {
          "type": "string"
        },
      },
    },
    "Priority": {
      "type": "object",
      "properties": {
        "severity": {
           "type": "string"
        },
        "credibility": {
           "type": "string"
        },
        "relevance": {
           "type": "string"
        },
      },
    },
    "Alert": {
      "type": "object",
      "properties": {
        "time": {
          "type": "string"
        },
        "category": {
          "type": "array",
          "items": {
            "type": "string"
          },
        },
        "name": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "link": {
          "type": "string"
        },
        "domain": {
          "type": "string"
        },
        "region": {
          "type": "string"
        },
        "target": {
          "type": "array",
          "items": {
            "type": "string"
          },
        },
        "artifacts": {
          "type": "object",
          "properties": {
            "username": {
              "type": "string"
            },
            "src_IP": {
              "type": "string"
            },
            "src_port": {
              "type": "string"
            },
            "dst_IP": {
              "type": "string"
            },
            "dst_port": {
              "type": "string"
            },
            "domain": {
              "type": "string"
            },
            "url": {
              "type": "string"
            },
            "hash": {
              "type": "string"
            },
            "process": {
              "type": "string"
            },
            "filename": {
              "type": "string"
            },
            "registry_key": {
              "type": "string"
            },
            "sender": {
              "type": "string"
            },
          },
        },
        "status": {
          "type": "string"
        },
        "tactics": {
          "type": "array",
          "items": {
            "type": "string"
          },
        },
        "technique": {
          "type": "string"
        },
        "rawData": {
          "type": "string"
        },
        "associated_events": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "time": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "target": {
                "type": "array",
                "items": {
                  "type": "string"
                },
              },
              "artifacts": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string"
                  },
                  "src_IP": {
                    "type": "string"
                 },
                  "src_port": {
                    "type": "string"
                  },
                  "dst_IP": {
                    "type": "string"
                  },
                  "dst_port": {
                    "type": "string"
                  },
                  "domain": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string"
                  },
                  "hash": {
                    "type": "string"
                  },
                  "process": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "registry_key": {
                    "type": "string"
                  },
                  "sender": {
                    "type": "string"
                  },
                },
              },
              "count": {
                "type": "number"
              },
              "rawData": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}

 

Clean schema

 
{
  "title": "CSAF",
  "type": "object",
  "properties": {
    "Device": {
      "type": "object",
      "properties": {
        "vendor": {
          "type": "string"
        },
        "product": {
          "type": "string"
        },
        "version": {
          "type": "string"
        },
        "OS": {
          "type": "string"
        },
        "module": {
          "type": "string"
        },
        "feature": {
          "type": "string"
        },
        "device_name": {
          "type": "string"
        },
        "device_IP": {
          "type": "string"
        },
        "policy": {
          "type": "string"
        },
        "rule": {
          "type": "string"
        },
        "action": {
          "type": "string"
        },
      },
    },
    "Priority": {
      "type": "object",
      "properties": {
        "severity": {
           "type": "string"
        },
        "credibility": {
           "type": "string"
        },
        "relevance": {
           "type": "string"
        },
      },
    },
    "Alert": {
      "type": "object",
      "properties": {
        "time": {
          "type": "string"
        },
        "category": {
          "type": "array",
          "items": {
            "type": "string"
          },
        },
        "name": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "link": {
          "type": "string"
        },
        "domain": {
          "type": "string"
        },
        "region": {
          "type": "string"
        },
        "target": {
          "type": "array",
          "items": {
            "type": "string"
          },
        },
        "artifacts": {
          "type": "object",
          "properties": {
            "username": {
              "type": "string"
            },
            "src_IP": {
              "type": "string"
            },
            "src_port": {
              "type": "string"
            },
            "dst_IP": {
              "type": "string"
            },
            "dst_port": {
              "type": "string"
            },
            "domain": {
              "type": "string"
            },
            "url": {
              "type": "string"
            },
            "hash": {
              "type": "string"
            },
            "process": {
              "type": "string"
            },
            "filename": {
              "type": "string"
            },
            "registry_key": {
              "type": "string"
            },
            "sender": {
              "type": "string"
            },
          },
        },
        "status": {
          "type": "string"
        },
        "tactics": {
          "type": "array",
          "items": {
            "type": "string"
          },
        },
        "technique": {
          "type": "string"
        },
        "rawData": {
          "type": "string"
        },
        "associated_events": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "time": {
                "type": "string"
              },
              "name": {
                "type": "string"
              },
              "target": {
                "type": "array",
                "items": {
                  "type": "string"
                },
              },
              "artifacts": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string"
                  },
                  "src_IP": {
                    "type": "string"
                 },
                  "src_port": {
                    "type": "string"
                  },
                  "dst_IP": {
                    "type": "string"
                  },
                  "dst_port": {
                    "type": "string"
                  },
                  "domain": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string"
                  },
                  "hash": {
                    "type": "string"
                  },
                  "process": {
                    "type": "string"
                  },
                  "filename": {
                    "type": "string"
                  },
                  "registry_key": {
                    "type": "string"
                  },
                  "sender": {
                    "type": "string"
                  },
                },
              },
              "count": {
                "type": "number"
              },
              "rawData": {
                "type": "string"
              }
            }
          }
        }
      }
    }
  }
}