Wazuh采用多层架构,包括这些主要组件:代理、索引器、仪表板和中央服务器。 代理被安装在每个要监测的系统上,它们收集事件数据、日志和其他系统信息。代理可以安装在虚拟(包括云)和物理机上。 wazuh中央服务器负责管理代理,远程配置和更新它们。代理商收集的数据被发送到服务器,服务器负责处理和分析信息,根据预先配置的规则和它的威胁情报引擎寻找入侵点。 然后,数据从服务器被发送到索引器,索引器负责存储和索引日志和警报。索引器也是一个可扩展的文本搜索和分析引擎。 wazuh系统中的每个数据都可以从仪表盘上查看,这也是管理wazuh组件、创建规则和分析数据的好方法。 WazuhSIEM还包括一个API,可以与其他安全工具和服务集成,从而实现更全面的安全解决方案。它可以作为一个单节点集群实施,也可以作为一个分布式解决方案。但在本实验过程中,我将把Wazuh作为一个单节点集群使用。 开源解决方案的优势。它们为定制提供了更大的灵活性,因为用户可以访问源代码,可以为开发做出贡献,并修改软件以适应他们的具体使用情况。它们大多是免费使用和分发的;这就使它们成为用户的成本效益选择。它们通常有一个用户(开发者)社区的支持,他们为软件做出贡献,提供支持,并分享知识。 开源供应商是如何赚钱的。高级功能。大多数开放源码供应商提供免费版软件所不具备的高级特性和功能;因此他们对这些特性的使用收费。付费支持和服务。许多开源供应商提供付费支持和服务,如咨询、培训和定制,以帮助公司实施和维护软件。双重许可。一些开放源码供应商提供双重或多重许可模式,允许软件在开放源码许可和商业许可下可用。这使他们能够向需要商业许可的企业出售该软件。任务1:建立基础设施我使用安装助手安装了Wazuh服务器。关于如何做的详细步骤见这里。运行以下命令。curlsOhttps:packages。wazuh。com4。3wazuhinstall。shsudobash。wazuhinstall。sha 现在服务器已经安装成功,我使用https:服务器的ip访问它,并使用安装后提供的初始admnin凭证登录。 设备1(Windows端点)。 我按照以下步骤在我的windows端点上安装了wazuh代理。 我刷新了页面,我的windows代理被注册,并在仪表板上被检测到是一个代理,如下图所示。 设备2(Linux端点)。 我按照这些步骤为我的ubuntu机器重复了上述步骤。 我刷新了页面,我的linux代理被注册了,并在仪表板上被检测到是一个代理,如下图所示。 设备3(Linux端点)。 我按照设备2的相同步骤登上了设备3,这是一台ubuntu机器。 我现在可以查看所有3个被监控的终端的日志,如下图所示。 为什么我可以查看日志?我可以查看这些日志,因为安装在端点上的wazuh代理从机器上收集日志,并将其发送到wazuh中央服务器(管理器),后者分析日志并根据配置的规则集运行,包括威胁情报。然后,日志被发送到索引器,存储在索引中以便于查询。然后我可以从索引器中查询日志,并使用wazuh仪表板进行分析,如上文图1。8所示。 可见日志的解释 日志1:这是一个从windows服务器端点记录的windows登录成功事件。如果前面的事件是暴力攻击的指标,如多次失败的登录尝试,这个事件可以作为防御规避、特权升级和成功的暴力攻击的指标。 在windows机器上,登录成功被登记为安全事件日志。如前所述,Wazuh代理会将这些日志发送到Wazuh核心结构之上。如图2。8所示,你可以确定机器的IP地址和其他相关细节,以帮助分析日志数据。 由分析员在查看了前面的日志后确定这是否是成功入侵的指标。 日志2:这是我的一个Linux端点的登录失败。如果在很短的时间内反复出现失败,这也可以作为企图入侵的一个指标。linux机器将该事件注册为日志,并将其保存在varlogauth。log中,由wazuh代理收集并运送到wazuh中央结构进行分析和展示。 它也可能是一个假阳性(一个合法的用户可能忘记了登录细节)。 任务2:阻止恶意的IP地址 设置Wazuh代理。为了开始阻止恶意的IP地址,我在设备3上使用以下命令安装了Nginx。sudoaptinstallnginx 我测试了一下,我可以从我的IP地址为10。1。1。42的恶意机器用curl到达服务器。 为了让wazuh代理监控Nginx日志,我在varossecetcossec。conf文件中添加了以下配置,并使用sudosystemctl重启wazuhagent,重新启动了wazuh代理。localfilelogformatsysloglogformatlocationvarlognginxaccess。loglocationlocalfile 设置Wazuh服务器。我下载了Alienvault的IP信誉数据库,并使用以下命令将其输出到文件varossecetclistsalienvaultreputation。ipset中。sudowgethttps:raw。githubusercontent。comfireholblocklistipsetsmasteralienvaultreputation。ipsetOvarossecetclistsalienvaultreputation。ipset然后我用下面的命令将攻击机器的IP输入到Alienvault的IP信誉数据库中。sudoecho10。1。1。42varossecetclistsalienvaultreputation。ipset 图3。2:在信誉数据库中添加恶意IP。我从wazuh下载了一个脚本,用以下命令将。ipset格式转换为。cdb。sudowgethttps:wazuh。comresourcesiplisttocdblist。pyOtmpiplisttocdblist。py然后我用之前下载的脚本将之前创建的alienvaultreputation。ipset文件转换为。cdb格式。下面的命令完成了转换。sudovarossecframeworkpythonbinpython3tmpiplisttocdblist。pyvarossecetclistsalienvaultreputation。ipsetvarossecetclistsblacklistalienvault由于我不再需要alienvaultreputation。ipset文件和iplisttocdblist。py脚本,我用以下命令丢弃了它们。sudormrfvarossecetclistsalienvaultreputation。ipsetsudormrftmpiplisttocdblist。py我用下面的命令给了wazuh足够的权限给新的和转换的varossecetclistsblacklistalienvault文件。sudochownwazuh:wazuhvarossecetclistsblacklistalienvault成功完成上述程序后,我继续配置Wazuh的主动响应模块,阻止恶意IP我在varossecetcruleslocalrules。xml文件中创建了一个自定义规则,以触发主动响应脚本,规则严重程度为12级。自定义规则集如下。groupnameattack,ruleid100100level12ifgroupwebattackattacksifgrouplistfieldsrciplookupaddressmatchkeyetclistsblacklistalienvaultlistdescriptionIPaddressfoundinAlienVaultreputationdatabase。descriptionrulegroup 我编辑了wazuh服务器上的varossecetcossec。conf文件,并在规则集部分创建了一个etclistsblacklistalienvault列表。 我编辑了varossecetcossec。conf文件的主动响应部分,确保来自攻击者机器的流量被丢弃300秒,如下图3。5所示。 在攻击者的机器上进行的快速测试表明,第一次curl测试是成功的,但随后5分钟内的curl操作是不成功的。 我也能在我的wazuh仪表板上检测到该事件,如以下图片所示。 任务3:模拟蛮力攻击检测 我通过在短时间内通过ssh和rdp会话输入错误的凭证,模拟了对所有3个端点的暴力攻击。在这次模拟中,我使用了一个带有用户名的无效凭证攻击者。 下面的图片显示了在我的SIEM仪表板上对攻击的检测。我在安全事件仪表板上发现认证失败的数量增加了。 作为一个分析员,这应该引起注意,不仅是因为其严重程度,而且是因为其在短时间内的频率。这可能是来自Hydra等自动化工具的暴力攻击的一个指标。我钻研了一下,通过探索安全警报来确定认证失败激增的根本原因。我发现在很短的时间内,我的基础设施内的主机出现了多次一致的登录失败。 我进一步分析了其中一个显示攻击的日志,我可以检测到登录会话来自一个远程IP10。1。1。100,有一个不存在的用户攻击者。这些尝试的一致性是一个明显的暴力尝试指标,可以通过使用网络保护设备或该节点上的wazuh代理阻止攻击者的IP来暂时补救,这可以通过遵循本指南实现。 一个更持久的修复方法是审查IAM政策,以进一步加强基础设施。 配置电子邮件或Slack通道警报也可以用来检测此类警报,方法是为规则的严重程度设置警报,或调整规则的严重程度,使其与预设电子邮件警报的最低阈值相匹配。任务4:SOC整合(将theHive与Wazuh整合)。为了开始实施,我决定使用容器版的theHive。我运行了以下docker命令来运行最新版本的theHive。sudodockerrundrmp9000:9000strangebeethehive:latest我登录到蜂巢,创建了一个组织,如下图5。0所示。 我在组织中添加了一个新的管理用户,具有完全的管理权限,如下图所示。 我还创建了更多的用户,如老板和分析师,并将他们加入到组织中,以便有一个更好的模拟。我为先前创建的用户账户生成了一个API密钥,并复制了它。 我继续配置Wazuh管理器,首先用下面的命令安装Hivepython模块。sudovarossecframeworkpythonbinpip3installthehive4py1。8。1我在varossecintegrationscustomw2thive。py文件中粘贴了以下python脚本,以便创建一个自定义的集成脚本。!varossecframeworkpythonbinpython3importjsonimportsysimportosimportreimportloggingimportuuidfromthehive4py。apiimportTheHiveApifromthehive4py。modelsimportAlert,AlertArtifactstartuserconfigGlobalvarsthresholdforwazuhruleslevellvlthreshold0thresholdforsuricataruleslevelsuricatalvlthreshold3debugenabledFalseinfoaboutcreatedalertinfoenabledTrueenduserconfigSetpathspwdos。path。dirname(os。path。dirname(os。path。realpath(file)))logfile{0}logsintegrations。log。format(pwd)loggerlogging。getLogger(name)setlogginglevellogger。setLevel(logging。WARNING)ifinfoenabled:logger。setLevel(logging。INFO)ifdebugenabled:logger。setLevel(logging。DEBUG)createtheloggingfilehandlerfhlogging。FileHandler(logfile)formatterlogging。Formatter((asctime)s(name)s(levelname)s(message)s)fh。setFormatter(formatter)logger。addHandler(fh)defmain(args):logger。debug(startmain)logger。debug(getalertfilelocation)alertfilelocationargs〔1〕logger。debug(getTheHiveurl)thiveargs〔3〕logger。debug(getTheHiveapikey)thiveapikeyargs〔2〕thiveapiTheHiveApi(thive,thiveapikey)logger。debug(openalertfile)walertjson。load(open(alertfilelocation))logger。debug(alertdata)logger。debug(str(walert))logger。debug(genjsontodotkeytext)altpr(walert,,〔〕)logger。debug(formattingdescription)formataltmdformat(alt)logger。debug(searchartifacts)artifactsdictartifactdetect(formatalt)alertgeneratealert(formatalt,artifactsdict,walert)logger。debug(thresholdfiltering)ifwalert〔rule〕〔groups〕〔ids,suricata〕:checkingtheexistenceofthedata。alert。severityfieldifdatainwalert。keys():ifalertinwalert〔data〕:checkingthelevelofthesourceeventifint(walert〔data〕〔alert〕〔severity〕)suricatalvlthreshold:sendalert(alert,thiveapi)elifint(walert〔rule〕〔level〕)lvlthreshold:iftheeventisdifferentfromsuricataANDsuricataeventtype:alertchecklvlthresholdsendalert(alert,thiveapi)defpr(data,prefix,alt):forkey,valueindata。items():ifhasattr(value,keys):pr(value,prefix。str(key),altalt)else:alt。append((prefix。str(key)str(value)))returnaltdefmdformat(alt,formatalt):mdtitledict{}sortedwithfirstkeyfornowinalt:nownow〔1:〕fixfirstkeylastsymboldotnow。split()〔0〕。find(。)ifdot1:mdtitledict〔now。split()〔0〕〕〔now〕else:ifnow〔0:dot〕inmdtitledict。keys():(mdtitledict〔now〔0:dot〕〕)。append(now)else:mdtitledict〔now〔0:dot〕〕〔now〕fornowinmdtitledict。keys():formataltnow。capitalize()keyvalforletinmdtitledict〔now〕:key,vallet。split()〔0〕,let。split()〔1〕formataltkeyvalreturnformataltdefartifactdetect(formatalt):artifactsdict{}artifactsdict〔ip〕re。findall(rd。d。d。d,formatalt)artifactsdict〔url〕re。findall(rhttp〔s〕?:(?:〔azAZ〕〔09〕〔。〕〔!(),〕(?:〔09afAF〕〔09afAF〕)),formatalt)artifactsdict〔domain〕〔〕fornowinartifactsdict〔url〕:artifactsdict〔domain〕。append(now。split()〔1〕。split()〔0〕)returnartifactsdictdefgeneratealert(formatalt,artifactsdict,walert):generatealertsourceRefsourceRefstr(uuid。uuid4())〔0:6〕artifacts〔〕ifagentinwalert。keys():ifipnotinwalert〔agent〕。keys():walert〔agent〕〔ip〕noagentipelse:walert〔agent〕{id:noagentid,name:noagentname}forkey,valueinartifactsdict。items():forvalinvalue:artifacts。append(AlertArtifact(dataTypekey,dataval))alertAlert(titlewalert〔rule〕〔description〕,tlp2,tags〔wazuh,rulewalert〔rule〕〔id〕,agentnamewalert〔agent〕〔name〕,agentidwalert〔agent〕〔id〕,agentipwalert〔agent〕〔ip〕,〕,descriptionformatalt,typewazuhalert,sourcewazuh,sourceRefsourceRef,artifactsartifacts,)returnalertdefsendalert(alert,thiveapi):responsethiveapi。createalert(alert)ifresponse。statuscode201:logger。info(CreateTheHivealert:str(response。json()〔id〕))else:logger。error(ErrorcreateTheHivealert:{}{}。format(response。statuscode,response。text))ifnamemain:try:logger。debug(debugmode)ifdebugenabledMainfunctionmain(sys。argv)exceptException:logger。exception(EGOR)ssecintegrationscustomw2thive我创建了一个bash脚本来执行先前在这个文件varossecintegrationscustomw2thive中创建的python脚本。!binshCopyright(C)20152020,WazuhInc。CreatedbyWazuh,Inc。infowazuh。com。Thisprogramisfreesoftware;youcanredistributeitandormodifyitunderthetermsofGPWPYTHONBINframeworkpythonbinpython3SCRIPTPATHNAME0DIRNAME(cd(dirname{SCRIPTPATHNAME});pwdP)SCRIPTNAME(basename{SCRIPTPATHNAME})case{DIRNAME}inactiveresponsebinwodles)if〔z{WAZUHPATH}〕;thenWAZUHPATH(cd{DIRNAME}。。。。;pwd)fiPYTHONSCRIPT{DIRNAME}{SCRIPTNAME}。py;;bin)if〔z{WAZUHPATH}〕;thenWAZUHPATH(cd{DIRNAME}。。;pwd)fiPYTHONSCRIPT{WAZUHPATH}frameworkscripts{SCRIPTNAME}。py;;integrations)if〔z{WAZUHPATH}〕;thenWAZUHPATH(cd{DIRNAME}。。;pwd)fiPYTHONSCRIPT{DIRNAME}{SCRIPTNAME}。py;;esac{WAZUHPATH}{WPYTHONBIN}{PYTHONSCRIPT}为了使wazuh成功运行集成脚本,我在wazuh管理器的confi文件varossecetcossec。conf中加入了以下几行。我还输入了IP地址、端口和之前生成的API密钥。ossecconfigintegrationnamecustomw2thivenamehookurlhttp:10。1。1。34:9000hookurlbsUW9HBLkDbw4tHeiAwQw413El3qO4Wapikeyjsonalertformatintegrationossecconfig我用sudosystemctl重新启动了wazuhmanager服务。为了测试theHive是否在接收日志,我以其中一个用户的身份登录,我可以看到所有创建的案例,并对它们进行深入研究,以及分配给组织内的用户。