当前位置: 首页 > 科技观察

了解有关Sigma规则的更多信息以及如何编写自己的威胁检测规则

时间:2023-03-17 15:49:48 科技观察

Sigma是一种检测语言本文将介绍如何使用Sigma来利用社区的力量快速响应关键威胁和新的攻击技术。与YARA和Snort规则一样,Sigma是一种通用且开放的签名格式,以直接的方式描述相关日志事件。规则格式非常灵活,易于编写,适用于任何类型的日志文件。Sigma提供了一种结构化的形式,研究人员或分析人员可以在其中描述他们设计和开发的检测方法,并与其他安全人员共享。随着SIEM的普及,大部分企业都会选择购买或搭建适合自身企业环境的SIEM系统。对IT系统和网络的攻击会被记录并存储在SIEM系统或其他日志存储和分析平台中,这使得SIEM成为检测入侵者的重要工具。SIEM检测规则集早期存在于供应商或平台特定的数据库中。如今,对最新安全事件的检测和分析需求不断增长,这要求不同的供应商能够共享检测情报。Sigma通过使查询规则集独立于供应商平台解决了这个问题。Sigma允许防御者使用通用语言共享检测结果Sigma满足各种用例:Sigma已成为研究人员和情报人员之间共享研究成果的通用语言,例如发现和识别新的攻击行为。安全团队可以避免被锁定在单一平台中,即通过在Sigma中定义规则,可以更轻松地在不同平台之间切换。Sigma拥有多种开箱即用的检测方法。利用Sigma与其他威胁情报机构共享签名。Sigma规则可以转换为不同SIEM平台支持的搜索查询语句格式。支持以下SIEM平台:SplunkElasticSearch查询字符串和DSLKibanaMicrosoftDefender高级威胁防护(MDATP)AzureSentinelQRadarLogPointQualysRSANetWitnessLimaCharlieArcSightPowerShell和Grep...使用SigmaSigma是一个开源项目,具有三个主要组件:通用Sigma规则格式的语言规范。一个开放的Sigma签名存储库,其中包含针对多种攻击者行为和技术的1,000多条规则。Sigmac是一个转换实用程序,用于将Sigma规则转换为各种SIEM工具支持的搜索查询。获取存储库首先,从GitHub下载Sigma存储库。gitclonehttps://github.com/SigmaHQ/sigma.git了解Sigma规则Sigma规则是用YAML编写的,并定义了在系统日志中查看的内容和位置。每个Sigma规则还可以指定元数据,例如:规则的作者、唯一的规则标识符(UUID)、MITREATT&CK技术和引用。Sigma支持以下日志类型:防火墙日志Web应用程序日志Proxy/VPN网络日志操作系统日志事件日志进程创建和审计日志系统事件以存储库中的Sigma规则/sigma/rules/windows/process_creationproc_creation_win_cmd_delete.yml为例,这该规则使用WindowsCmd命令检测文件删除。title:WindowsCmdDeleteFileid:379fa130-190e-4c3f-b7bc-6c8e834485f3status:experimentaldescription:`对手可能会删除其入侵活动留下的文件。对手在系统上放置或创建的恶意软件、工具或其他非本机文件可能会留下痕迹,以指示在网络中做了什么以及如何做。删除这些文件可能发生在入侵期间,或者作为入侵后过程的一部分,以最大限度地减少对手的足迹。`作者:frack113date:2022/01/15references:-https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1070.004/T1070.004.mdlogsource:category:process_creationproduct:windowsdetection:selection:-CommandLine|contains|all:-'del'-/f-命令行|contains|all:-rmdir-/s-/q条件:selectionfalsepositives:-合法脚本级别:lowtags:-attack.defense_evasion-attack.t1070.004每条规则(yml)包含以下部分:标题:WindowsCmd删除文件规则的名称。id:唯一标识规则的UUID。379fa130-190e-4c3f-b7bc-6c8e834485f3。状态:实验性或正常,在这种情况下它是一个实验性规则。experimentaldescription(描述):解释规则的上下文。攻击者可能会删除其入侵活动留下的文件。攻击者在系统上投放或创建的恶意软件、工具或其他非本地文件可能会留下痕迹,以表明在网络中做了什么以及如何做。删除这些文件可以在入侵期间出现,也可以作为入侵后过程的一部分,以最大限度地减少对手的足迹作者(作者):关于规则创建者的元数据。frack113date(时间):创建规则的日期。2022/01/15参考资料(references):参考资料链接到解释该问题的博客文章或推文。https://github.com/redcanaryco/atomic-red-team/blob/master/atomics/T1070.004/T1070.004.mdlogsource(日志源):用于范围搜索,支持多种组合。windowscategory(类别):描述规则类别。process_creationdetection(检测):在日志数据的特定字段、关键字、时间范围和条件、类型中搜索值。在这里,在命令行中查找del、/f,或者在命令行中查找rmdir、/s、/q。selection:要在条件中链接的选择。条件(condition):判断满足哪些选项。selectionfalsepositives(误报):一个描述字段,解释哪些事件或条件可能触发导致误报的规则。Legitimatescriptlevel(级别):严重程度有low、medium、high、critical。lowtags(标签):ATT&CK标签。attack.defense_evasion,attack.t1070.004。深入了解SigmaLogsource字段:SigmaYAML中的logsource字段描述了应用检测的日志数据。Logsourceschema如下,它可以使用以下三个属性中的一个或多个:logsource:category[optional]product[optional]service[optional]definition[optional]category(类别):用于选择生成的一系列产品所有日志,例如:防火墙和Web服务器日志。类别示例包括:防火墙、防病毒、EDR、Web。product(产品):用于选择特定产品产生的所有日志,例如:Windows、Apache。产品类型可以进一步划分。例如,Windows日志类型可以分为安全日志、系统日志、应用程序日志和WindowsDefender日志。service(服务):仅用于选择产品日志的一个子集,例如:Windows系统上的安全事件日志。常见日志源格式的示例。logsource:product:linuxservice:audit...logsource:product:securityservice:windows...logsource:product:zeekservice:kerberosdetection字段:该部分包含一组搜索标识符,表示对日志数据的搜索及其各自的评估机制,由两个属性控制:选择和条件。selection:用于搜索日志数据的标识符。条件(condition):定义如何评估选择或过滤器。检测可以由两种不同的数据结构组成:列表和映射。列表YAML类型包含多个基于字符串的搜索参数,这些参数应用于日志数据并与逻辑“或”链接。例如,如果日志包含以下列表中的任何值,则此检测将匹配。detection:keywords:-'nmap'-'sqlmap'-'nessus'-'awvs'-'python2.7'条件:keywordsMapsYAML类型由键/值对组成,如:字典,其中键为日志数据中的字段,该值为字符串或整数值。映射列表用逻辑“或”连接。地图的所有元素都用逻辑“与”连接。例如,在下面的示例中,如果ImageLoaded键包含以下任何值列表,则匹配成功。logsource:product:windowscategory:driver_loaddetection:selection:ImageLoaded|contains:-'fgexec'-'dumpsvc'-'cachedump'-'mimidrv'-'gsecdump'-'servpw'-'pwdump'条件:选择这里,选择(搜索标识符)匹配日志数据中的ImageLoaded字段,并使用转换修饰符(|contains)检查列出的关键字是否存在。下面列出了一些修饰符:containsallbase64endswithstartswith通配符也可以用于匹配日志数据中的大量关键字。例如,要查找rundll32.exe的执行日志,请使用\*rundll32.exe而不是通过指定路径或命令行参数进行搜索。对于条件(condition),可以使用以下语句来搜索标识符:逻辑和/或操作选择一个或所有选择,eg:1ofselectionorallofselectionusenot,eg:notselectionuseparenthesestopair要分组的表达式。eg:(selection1andselection2andselection3)orselection4下面的例子中,如果条件中的s??election1、selection2、selection3被触发,没有匹配到filter中的item,则输出匹配结果。检测:selection1:ParentImage|endswith:-'\winlogon.exe'-'\services.exe'-'\lsass.exe'-'\csrss.exe'-'\smss.exe'-'\wininit.exe'-'\spoolsv.exe'-'\searchindexer.exe'selection2:Image|endswith:-'\powershell.exe'-'\cmd.exe'selection3:User|contains:#coversmanylanguagesettings-'AUTHORI'-'AUTORI'过滤器:CommandLine|contains|all:-'route'-'ADD'condition:selection1andselection2andselection3andnotfilterfields:-ParentImage-Image-User-CommandLineCompileSigmarules为了将Sigma规则转换为任何SIEM平台对于支持的搜索查询,您必须使用Sigma编译器sigmac,这是Sigma本身附带的基于python的工具。yyds@12306Br0:~/sigma/tools$python3sigmacNothingtodo!usage:sigmac[-h][--recurse][--filterFILTER][--target{humio,elastalert,ala-rule,kibana,sentinel-规则,xpack-watcher,ee-outliers,graylog,crowdstrike,sql,logiq,carbonblack,mdatp,netwitness-epl,netwitness,datadog-logs,streamalert,es-rule-eql,es-rule,splunkdm,uberagent,opensearch-监视器,fireeye-helix,devo,powershell,es-qs-lr,elastalert-dsl,es-eql,qradar,es-dsl,csharp,ala,hawk,grep,qualys,limacharlie,splunk,logpoint,splunkxml,sumologic,fortisiem,sqlite,fieldlist,stix,chronicle,sumologic-cse,sumologic-cse-rule,kibana-ndjson,hedera,sysmon,lacework,arcsight,arcsight-esm,es-qs,athena}][--列表][--lists-files-after-dateLISTS_FILES_AFTER_DATE][--configCONFIG][--outputOUTPUT][--output-fieldsOUTPUT_FIELDS][--output-format{json,yaml}][--output-extentionOUTPUT_EXTENTION][--print0][--后端选项BACKEND_OPTION][--backend-configBACKEND_CONFIG][--backend-helpBACKEND_HELP][--defer-abort][--ignore-backend-errors][--verbose][--debug][inputs...]Sigmacs可以将规则翻译成要执行查询的SIEM平台支持的搜索查询语句。Splunk、Qualys和Qradar等Sigmacs也使用字段映射将规则中使用的字段转换为将执行查询的平台内的实际字段。要查看所有可用的目标和配置,只需运行以下命令:python3sigmac--lists编译规则为了转换为可以支持的任何SIEM平台的搜索查询格式,它可以配置为任何可以支持的SIEM平台由-t支持,-c设置正确的字段映射:$python3sigmac-tsplunk-csplunk-windows~/sigma/rules/windows/process_creation/proc_creation_win_cmdkey_recon.yml((Image="*\\cmdkey.exe"OROriginalFileName="cmdkey.exe")(CommandLine="*/l*"ORCommandLine="*-l*"))|tableCommandLine,ParentCommandLine,User这样你就可以得到一个编译规则,在Splunk上查找cmdkey以查看缓存的凭据实现。您可以选择监控这些类型的日志并使用它们来检测攻击者:操作系统日志帐户身份验证大量登录失败特殊帐户的更改和使用以及SID历史记录进程创建和执行在异常位置执行可疑进程关系已知的可执行文件与未知的哈希已知的恶意哈希资源访问Windows事件不常见的服务设施新域信任关系网络:端口扫描、主机发现代理日志Web服务器访问日志4xx错误:可能扫描探针行为5xx错误:可能正在利用行为应用程序错误日志异常或其他特定消息。例如:可疑的SQL错误消息挑战:编写自己的Sigma规则接下来,您将学习如何编写Sigma规则并将其应用到实际的SIEM平台上。推荐在本地搭建一个小型的模拟威胁狩猎平台。在此基础上,可以尝试模拟一些攻击行为,建立自己的检测规则。用于检测本地用户帐户创建的MITREATT&CKSigma规则中提到的用户创建,攻击者可能会创建一个本地帐户来维护对被攻击系统的访问。本地帐户是组织配置的帐户,供用户、远程支持、服务使用,或用于管理单个系统或服务。有了足够的权限,可以使用netuser/add命令创建一个本地用户帐户。MicrosoftWindows[版本6.1.7601]版权所有(c)2009MicrosoftCorporation。版权所有。C:\Windows\system32>netuseradmin.123admin1/add命令成功完成。此时我们可以为我们的Sigma规则构建一个基本框架。title:Createlocaluseraccountbehaviorstatus:testdescription:Createlocaluseraccountusingnetuser/addcommandreferences:-https://attack.mitre.org/techniques/T1136/001/date:2022/06/27作者:OutlawZhangSan级别:低分析windows安全日志,看是否记录了用户账户的创建。windows安全日志4720记录用户账号admin.123已经创建。Windows安全事件ID4720可以作为条件检测是否存在创建本地用户账户的行为。完整规则如下:标题:创建本地用户账户行为状态:测试描述:使用netuser/add命令创建本地用户账户参考:-https://attack.mitre.org/techniques/T1136/001/date:2022/06/27author:MadmanZhangSanlogsource:product:windowsservice:securitydetection:selection:EventID:4720#用户账号已创建。condition:selectionfields:-EventCode-AccountName-AccountDomainfalsepositives:-域控制器日志-由特权帐户管理工具管理的本地用户帐户4688在进程名称和命令行参数中进行检测。最后,写好sigma规则后,使用sigmac将sigma规则转换成其他SIEM平台支持的格式。(来源=“WinEventLog:安全”事件代码=“4720”)|表EventCode、AccountName、AccountDomain((Image="*\\net.exe"ORImage="*\\net1.exe")CommandLine="*user*"CommandLine="*add*")|表计算机名、用户、命令行