跳转到主要内容
工程的博客”>
             <noscript>
              <img data-gatsby-image-ssr=

狩猎异常连接和基础设施使用TLS证书

TLS散列的源网络安全威胁狩猎计划
分享这篇文章

Sophos表示,46%的恶意软件现在使用传输层安全性(Transport Layer Security, TLS)隐瞒其沟通渠道。这一数字仅在去年翻了一番。恶意软件,比如LockBit ransomware, AgentTesla Bladabini远程访问工具(老鼠),已经观察到使用TLS基于powerShell的滴管,用于访问pastebin最近检索代码和其他许多人。

在这个博客中,我们将介绍如何安全团队可以摄取x509证书(在TLS握手)三角洲湖从AWS S3存储、丰富,执行威胁狩猎技巧。

LS是事实上的标准来保护web应用程序,并形成整体信任层次结构的一部分在公钥基础设施(PKI)的解决方案。”class=

在最初从客户机到服务器的连接,TLS协议执行两阶段握手,web服务器向客户证明其身份的方式举行的x509证书的信息。这之后,双方达成一致的算法,然后生成对称密钥交换,随后被用来传输加密数据。

实际上x509证书是完全独特的,可以确定使用哈希算法(通常SHA1, SHA256和MD5)称为指纹。哈希的性质使得他们巨大威胁指标,通常用于威胁情报源代表对象。由于信息在他们是用于密钥材料(协议、交流、创造等),他们自己编码但不加密的,因此,可以阅读。

采集、存储和分析网络流量是一个具有挑战性的任务。然而,降落到廉价的云对象存储,处理在规模与砖,只有保持有趣的部分可以是一个有价值的工作流安全分析师和猎人的威胁。如果我们能确定可疑的连接,我们有机会创造的妥协(国际石油公司)和指标有SIEM下游安全工具有助于防止进一步的恶意活动。

的数据集

我们使用x509收集的数据从一个网络扫描,同时,我们将使用思科的伞前100万名的列表SSL黑名单所产生的abuse.ch查找。

最好的地方在一个企业网络的证书数据导线使用数据包捕获技术。Zeek, TCPDump和Wireshark都是很好的例子。

如果你不知道网络威胁SSLblacklist狩猎工具,它是由滥用。ch的目标检测恶意的SSL连接。思科伞顶部1 m是地球上最受欢迎的DNS查找所看到的思科。我们将使用这个演示过滤和查询技术。如果你或你的狩猎团队想跟随笔记本和数据可以导入附带的笔记本

SSLblacklist由滥用。ch with the goal of detecting malicious SSL connections.”class=

来源:https://sslbl.abuse.ch

摄入数据集

为简单起见,如果你是在家里后,我们将使用三角洲湖批摄取能力的数据从一个AWS S3 bucket青铜表,完善和丰富成银表(大奖章架构)。然而,你可以升级你的经验在实际应用程序中使用结构化流!

我们将关注黑名单和伞文件第一,紧随其后的是x509证书数据。

# Alexa-Top1m
rawTop1mDF = read_batch(火花,top1m_file格式=“csv”、模式= alexa_schema)

#写青铜表
alexaTop1mBronzeWriter = create_batch_writer(=火花,火花df = rawTop1mDF模式=“覆盖”)
alexaTop1mBronzeWriter。saveAsTable(数据库名+“.alexaTop1m_bronze”)

#让Top1m转换
bronzeTop1mDF =火花。表(数据库名+“.alexaTop1m_bronze”)
bronzeTop1mDF = bronzeTop1mDF.filter (~ bronzeTop1mDF.alexa_top_host.rlike (“localhost”).drop (“记数字”)
显示器(bronzeTop1mDF)

#写银表
alexaTop1mSilverWriter = create_batch_writer(=火花,火花df = bronzeTop1mDF模式=“覆盖”)
alexaTop1mSilverWriter。saveAsTable(数据库名+“.alexaTop1m_silver”)

上面的代码片段阅读从s3 bucket csv文件,将它直接写入表不变的青铜,然后读取青铜三角洲表,使得银表转换和写。前100万名的数据可以使用了!

样本dataframe显示结果砖网络威胁的狩猎ETL过程。”class=
结果Dataframe

接下来,我们遵循相同的SSL黑名单数据格式

# SSLBlacklist
rawBlackListDF = read_batch(火花,blacklist_file格式=“csv”)
rawBlackListDF = rawBlackListDF.withColumnRenamed (,#写青铜表
sslBlBronzeWriter = create_batch_writer(=火花,火花df = rawBlackListDF模式=“覆盖”)
sslBlBronzeWriter。saveAsTable(数据库名+“.sslBlacklist_bronze”)

#对SSLBlacklist进行转换
bronzeBlackListDF =火花。表(数据库名+“.sslBlackList_bronze”)
bronzeBlackListDF = bronzeBlackListDF.select(*(坳(x) .alias (“sslbl_”+ x)xbronzeBlackListDF.columns)

#写银表
BlackListSilverWriter = create_batch_writer(=火花,火花df = bronzeBlackListDF模式=“覆盖”)
BlackListSilverWriter。saveAsTable(数据库名+“.sslBlackList_silver”)

上述过程是一样的,至于下面的前100万文件。变换只是前缀所有列' sslbl_ '所以很容易识别。

生成的样本sslblacklist dataframe砖狩猎工作流网络威胁。”class=

结果sslblacklist dataframe
接下来我们摄取的x509证书数据使用相同的方法。这是如何dataframe照看摄入和转换到银表中。

与x509证书生成的数据样本dataframe砖网络威胁的狩猎工作流的一部分。”class=

X509证书是复杂的,有许多可用的字段。一些最有趣的我们最初的目的;

  • 主题、发行人、common_name有效与字段,dest_ip, dest_port的rdn

分析数据

寻找感兴趣的证书可以在许多方面完成。我们将开始通过寻找不同值的发行人。

的例子砖网络威胁的狩猎的解决方案可以用来识别潜在的威胁和漏洞在TSL证书。”class=

如果你是新的pyspark,它是一个python API为Apache火花。利用上面的搜索collect_set,countDistinct,gg,groupBy。你可以阅读更多关于这些链接。

一个假设是,当证书都是暂时的,签名或者不用于真正的目的,发行人领域往往是有限的细节。让我们创建一个搜索查看该字段的长度。

示例搜索看着发行人字段的长度,这是网络威胁的一部分砖使用的狩猎技术的解决方案。”class=

withColumn添加一个新列,后评估给定的表达式。

顶部入口长度最短,具有独特的主题和发行领域。这是一个很好的候选人一些OSINT !

样本谷歌搜索显示TLS证书的数量被认为是用于恶意网站。”class=

谷歌搜索显示大量的点击率,相信这个证书或已经使用恶意网站。这个哈希是一个伟大的候选人主在我们的网络和进一步探索。

让我们现在使用ssl黑名单表与已知的恶意的散列。

# SSLBlacklist
isSSLBlackListedDF = silverX509DF.select (
“sslbl_Listingreason”,“common_name”,“国家”,“dest_ip”,“rdn”,“发行人”,
“sha1_fingerprint”,“not_valid_before”,“not_valid_after”

).filter (silverX509DF。sslbl_SHA1 ! =“零”)
显示器(isSSLBlackListedDF)

示例搜索结果显示对手的运动基础设施随着时间的推移,用作砖网络威胁的狩猎方法的一部分。”class=

这个搜索提出了一些有趣的发现。四大条目显示点击不同的恶意软件家庭的指挥和控制的基础设施。我们也看到同样的sha1指纹用于ransomware指挥和控制,使用不同的IP地址和DNS名称。可能有很多原因,但对手的观察将基础设施随着时间移动。首先看到的,最后一次看到工作必须使用威胁数据清单的完成日期和其他技术,如被动DNS查找进一步理解和获得更多的态势感知能力。新发现的信息也应该用于主回一个组织的其他迹象与这些通信主机或IP地址。

最后,一个巨大的狩猎技术指挥控制通信是使用香农熵计算随机字符串。

def(字符串):
“计算一个字符串的夏侬熵”
试一试:
#字符在字符串的概率
概率=[浮动(string.count (c)) / len(字符串)cdict.fromkeys(列表(string)))

#计算熵
熵= - sum ([p * math.log (p) / math.log (2.0)p概率)
除了异常作为艾凡:
打印(e)
熵=1


返回

entropy_udf = udf(熵,StringType ())

entropyDF = silverX509DF.where(长度(坳(“主题”15).select ())
“common_name”,“主题”,“发行人”,“subject_alternative_names”,“sha1_fingerprint”
).withColumn (“entropy_score”,
entropy_udf(坳(“common_name”))).orderBy(坳(“entropy_score”).desc())其中(坳(“entropy_score”)>1.5)


显示器(entropyDF)

生成样本搜索结果确定潜在的恶意指纹,砖的网络威胁的狩猎的解决方案的一部分。”class=

俗话说,“互联网是一个糟糕的地方”和“数学是一个糟糕的情人”!初始搜索包括所有证书,产生很多噪音由于字段内容的性质。进一步试验,我们从搜索和早些时候只关注那些主题少于15个字符的长度,和浮出水面只有最高熵的数据集。所得的9个条目可以手动搜索,或进一步自动化可以应用。顶部输入在这个场景中感兴趣的是,这似乎是用作CobaltStrike开发工具包的一部分。

样本的谷歌搜索可疑的指纹,演示砖的网络威胁的狩猎技术可以应用于实际情况中。”class=

进一步的工作

这走过了一些技术我们可以用它来识别可疑或恶意流量使用简单的x509证书的独特属性。进一步探索使用机器学习技术还可以提供好处。

结论

分析证书不同寻常的特性,或者针对已知威胁数据基础设施可识别已知的恶意软件。它可以作为初始轴心点收集更多的信息,可以用来寻找妥协的迹象。然而,由于证书标识主机而不是它的内容,它不能提供高信心警报。

之前申请操作化在一个安全操作中心(soc),初始指标需要进一步筛选。其他内部和外部来源的数据,比如防火墙、被动DNS,VirusTotal,是谁也应该使用从端点进程创建事件。

让我们知道在(电子邮件保护)你认为如何处理TLS / x509数据在企业或更多的被动地在互联网上可以用来追踪敌人和基础设施。如果你没有一个砖的客户,随时旋转了community edition。

下载的笔记本。

免费试着砖

相关的帖子

看到所有工程的博客的帖子