为威胁情报和机器学习研究收集和策划IOC白名单
为威胁情报和机器学习研究收集和策划IOC白名单
在这篇文章中,我分享了我为威胁情报和机器学习研究建立和维护大量良性的IOCs(白名单)的经验。
白名单在威胁情报关联中是一个有用的概念,因为它可以很容易地让良性观察进入威胁情报指示源,特别是来自开源供应商或供应商,他们不应该那么小心。如果这些威胁情报源被用于阻塞(例如,在防火墙或WAF设备中)或警报(例如,在SIEM或IDS中的日志关联),良性条目进入安全控制的成本将非常高(浪费分析时间来筛选假阳性警报,或为被阻塞的合法网站损失业务生产力)。白名单通常用于过滤威胁情报源中的可观察信息,如果它们与事件日志(例如,bluecoat代理日志、防火墙日志等)相交,则几乎肯定会被标记为假阳性,并用于警报。白名单对于构建机器学习模型和丰富上下文信息所需的标记数据集也非常有用。
良性观察的典型例子是8.8.8.8(谷歌发布的开放DNS解析器)。这已经在许多开源和商业威胁情报中错误地找到了它的方式,因为有时恶意软件使用这个IP来进行DNS解析,或者他们ping它来进行连接检查。由于威胁feed的派生/收集方式不同,通常会有许多其他可观察对象进入威胁feed。以下是威胁情报反馈中误报的主要来源的总结,以及识别这些来源以防止其使用的方法。如今,大多数商业威胁情报平台都很擅长识别这些信息,而占主导地位的开源威胁情报平台MISP在其警告列表方面也做得越来越好,但正如你将在下面的文章中发现的那样,还有一些改进的空间。
一、良性入站观测值
从分布式网络传感器(如蜜罐或防火墙日志)获得的威胁情报馈源中,通常会出现良性的入站观测数据。这些ip出现在防火墙日志中,通常是良性的,或者最多被认为是噪音。下面是几种常见的良性入站可观察类型。每一种类型都有推荐的数据源或收集技术,列在子项目中:
(1)已知的网络爬虫:网络爬虫是服务器爬行的万维网和通过这个过程可能进入许多公司的网络或可能意外地击中蜜罐或防火墙。
一旦确定了模式,可以使用RDNS + DNS分析批量枚举这些模式。下面是googlebots的一个示例模式。挖掘大量rdns数据集合可以揭示需要关注的其他模式。下面是一个例子,一个简单的PTR查找已知的googlebot IP。这将开始揭示可以编纂的模式,假设您可以访问像这里提供的(或者可以轻松生成)的大量RDNS数据。
(2)与高可见项目或安全公司(Shodan, Censys, Rapid7项目Sonar, ShadowServer等)相关的已知端口扫描器。
RDNS + DNS分析可以批量枚举这些(假设供应商希望被识别)。例子:
(3)邮件服务器——这些服务器发送电子邮件,有时会错误地被表示为威胁信息。
为了列举这些,你需要一个流行的电子邮件域名列表。然后对该列表执行DNS TXT请求并解析SPF记录。可能需要多次查找,因为SPF允许重定向和包含。下面的示例显示了对gmail.com手动执行此操作所需的命令。返回的CIDR块是发送gmail电子邮件的IP空间。警告或封锁这些会导致糟糕的一天。
(4)云PaaS提供商——大多数云提供商通过api或文档发布他们的IP空间。这些列表对于派生白名单很有用,但是需要进一步过滤。理想情况下,只白名单大量共享的云IP空间(如S3、CLOUDFRONT等),而不是容易被坏人使用的IP空间,如EC2s。这些白名单不应用于排除解析到此IP空间的域名,而应用于警报的丰富或从这些IP范围禁用基于IOC的警报。
亚马逊AWS IP范围:https://ip-ranges.amazonaws.com/ip-ranges.json
谷歌云平台IP范围:https://gist.github.com/n0531m/f3714f6ad6ef738a3b0a
Azure IP范围:https://www.microsoft.com/en-us/download/details.aspx?id=56519
注:Greynoise是“反威胁”情报的商业提供商(也就是说,他们可以识别噪音和其他良性观察对象)。他们非常擅长识别上面列出的良性观测的类型,因为他们维护一个全球分布的传感器阵列,并且专门分析网络事件以识别良性活动。
注意:misp -warning列表现在提供了许多这样的项目,但是它们可能已经过时了(它们的一些列表已经几个月没有更新了)。理想情况下,所有这些列表都是通过从权威来源自动收集而不是存储在github中的硬编码数据来保持最新的(除非这些数据经常自动更新)。更多提示请参见“建立/维护白名单数据”一节。
二、良性的出站可见
良性的出站观察经常出现在来自恶意软件沙箱、URL沙箱、出站web爬虫、电子邮件沙箱和其他类似的威胁信息中。下面是几种常见的良性出站可观察类型。每一种类型都有推荐的数据源或收集技术,列在子项目中:
**1、流行域名-**流行域名可以结束威胁情报来源,特别是那些来自恶意软件沙箱,因为通常情况下,恶意软件使用良性域名作为连接检查和一些恶意软件,如那些执行点击欺诈行为更像网络爬虫,访问许多不同的良性网站。这些流行的域名经常出现在大多数公司网络中,而且本质上几乎都是良性的(注意:它们可以被破坏并用于托管恶意内容,所以在这里需要非常小心)。
下面是一些流行域名的数据源。它们在衡量受欢迎程度的方式上略有不同(通过Web访问者的数量、Web爬行数据出现的频率、基于DNS查询的数量或组合)。这些列表不应该原样用于白名单;它们需要被过滤/精炼。请参阅下面的“构建/维护白名单数据”一节,了解关于优化建议的更多细节。
Domcop Top 10m Domains(data) - The top 10 million websites taken from the Open PageRank Initiative.
Moz’s list of the most popular 500 websites on the internet
Tranco: A Research-Oriented Top Sites Ranking Hardened Against Manipulation
MISP-warninglists’dax30 websites,bank websites,university domains,url shorteners,whats-my-ip sites
2、流行IP地址-流行IP与流行域名非常相似。它们无处不在,当它们放到威胁情报feed时,它们会造成大量的误报。流行IP列表可以通过解析流行域名列表生成。这些列表不应该原样用于白名单;它们需要被过滤/精炼。请参阅下面的“构建/维护白名单数据”一节,了解关于优化建议的更多细节。
3、免费的电子邮件域-免费的电子邮件域偶尔会意外地出现在威胁情报feed,所以它是好的保持一个良好的列表,以防止误报。Hubspot提供了一份不错的清单。https://knowledge.hubspot.com/forms/what-domains-are-blocked-when-using-the-forms-email-domains-to-block-feature
4、广告服务器——广告服务器经常出现在URL沙箱feed中,因为这些feed通常是通过访问许多网站并等待恶意攻击或反病毒警报来获得的。这些相同的服务器总是出现在良好的互联网流量中。Easylist提供了这类数据。https://easylist.to/
**5、CDN IPs -**内容分发网络地理上分布式的缓存代理服务器或网络提供高可用性和高性能web内容分布。它们的服务器被大量共享以分发各种web内容。当来自CDNs的ip转化为威胁情报时,假阳性很快就会出现。下面是几个CDN IP和域源。
WPO-Foundation CDN list (embedded in Python code)
AWS IP Ranges- but filtered for cloudfront and S3 IP space.
与识别已知的web爬虫非常相似,一旦识别出模式,可以使用DNS PTR-Lookup + DNS A-Lookup 分析批量枚举这些爬虫。
6、证书撤销列表(CRL)和在线证书状态协议(OCSP)域/ url——当在恶意软件沙箱中执行二进制文件并且可执行文件已经签名时,将连接到CRL和OCSP服务器。正因为如此,这些经常错误地放入到威胁feed。
抓取证书从Alexa顶级网站,提取OCSP URL。这个老的Alienvault 帖子描述了这个过程(以及另一种使用现已不存在的EFF SSL天文台的方法),而这个github 存储地提供了实现这个过程的代码。在此应注意,因为对手可以影响以这种方式收集的数据。
MISP-warninglists’ crl-ip-hostname
7、NTP服务器——一些恶意软件调用NTP服务器进行连接检查或确定真实的日期/时间。正因为如此,NTP服务器经常会错误地获取来自恶意软件沙箱的威胁情报。
Web抓取NTP服务器列表(如NIST Internet Time服务器和NTP Pool Project服务器),并执行DNS解析来导出每个区域负载均衡器背后的所有服务器。
8、根名称服务器和TLD名称服务器
对公共后缀列表中的每个域执行DNS NS-lookup,然后执行DNS A-lookup每个名称服务器域以获得它们的IP地址。
9、邮件交换服务器
获取流行电子邮件域的列表,然后对流行电子邮件域执行MX查找,以获得它们各自的邮件交换(MX)服务器。对MX服务器列表执行DNS A-lookup以获得它们的IP地址。
**10、NAT会话遍历工具(STUN)是一组标准化的方法,**包括一个网络协议,用于在实时语音、视频、消息传递和其他交互通信应用中遍历网络地址转换器(NAT)网关。“通过https://en.wikipedia.org/wiki/STUN。下面是一些**STUN**服务器的来源(其中一些看起来很旧)。
https://www.voip-info.org/stun//
https://gist.github.com/mondain/b0ec1cf5f60ae726202e
https://gist.github.com/zziuni/3741933
http://enumer.org/public-stun.txt
11、停车IPs - IPs作为 DNS-A的默认IP记录,用于新注册的域名。
12、流行的开放DNS解析器
公共递归名称服务器 (Wikipedia)——列出了最大和最流行的开放递归名称服务器。
公共DNS服务器列表(Public DNS Server List)——维护一个公开的递归名称服务器的大列表,可能对上下文有用,但不应该被白名单。
13、安全公司、安全博客和安全工具网站——这些网站经常出现在威胁邮件列表中,这些邮件列表有时会被当作威胁源而被错误地标记为恶意。
刮掉所有与awesome-*安全相关的著名github存储点。这有点冒险,因为对手可能会将他们的域名添加到这些列表中。例子:
MISP-warninglists提供了一个看起来很不错的安全提供这博客帖子(https://github.com/MISP/misp-warninglists/tree/master/lists/security-provider-blogpost)和自动恶意软件分析列表(https://github.com/MISP/misp-warninglists/tree/master/lists/automated-malware-analysis)。
14、Bit Torrent Trackers-github.com/ngosang/trackerslist
15、跟踪域名-常用的著名的电子邮件营销公司。在威胁情报源经常出现在来自垃圾邮件或钓鱼邮件sinkhole。在实践中导致了高假阳性率。
PDNS和/或域Whois分析是识别这些可观察到的模式的一种方法。下面是一个例子使用Whois数据为Marketo.com和确定所有其他Marketo电子邮件跟踪域使用Marketo的域名服务器。这个例子来自Whoisology,但批量Whois挖掘是首选方法。
注意:mis- warning列表现在提供了其中的一些项目,但是它们可能已经过时了。理想情况下,通过从权威来源自动收集,所有这些列表都是最新的。更多提示请参见“建立/维护白名单数据”一节。
三、良性的基于主机的可见指标
善意的基于主机的可观察性指标在基于恶意软件沙箱的威胁情报源中非常常见。下面是一些可观察类型的示例。到目前为止,我只发现了一些不错的哈希列表(见下面)。
File hashes
Mutexes
Registry Keys
File Paths
Service names
数据来源:
NSRL hashset
Windows-7/32 Diskprint
Neo23x0 / fp-hashes.py
MISP常见的IOC假阳性
曼迪昂特红线白名单(镜像)-注意:这在我写这篇博客的时候已经5岁了。
Hashsets.com(商业)哈希列表
在有关恶意软件检测的领先学术和行业研究中,通常使用Virustotal来构建带标签的训练数据。更多细节请看这篇文章。这些技术似乎非常适合用于训练数据创建,但不推荐用于操作使用的白名单,因为错误否定的可能性很高。
注意:如果你的目标是在二进制文件上建立一个机器学习模型,你应该考虑Endgame的Ember。“数据集包括从1.1M二进制文件中提取的特征:900K训练样本(300K恶意,300K良性,300K未标记)和200K测试样本(100K恶意,100K良性)”。看到Ember:一个开放的数据集训练静态PE恶意软件的机器学习模型更多的细节。
四、白名单排除
有许多可观察到的东西,由于它们的受欢迎程度和重要性,我们永远不会想把它们列入白名单。这些应该在一个白名单排除列表(又称灰名单)中维护。下面是一些例子:
共享主机域名和动态DNS域名-这些基本域名不应该被警告,因为许多在Alexa的前100万名单,将令人难以置信的噪音。_这些子域很容易引起警觉,因为它们很容易被对手控制和滥用。_下面是这些信息的一些来源,但是找出主要的供应商并抓取他们的网站或api将是保持这些信息新鲜的更好方法。
Shared Hosting-Maltrails free web hosting
Dynamic DNS-Maltrails DynDNS
DNS Sinkhole IPs
https://tisiphone.net/2017/05/16/consolidated-malware-sinkhole-list/
五、建立/维护白名单数据
**为了可维护,白名单的生成需要自动化。**对于希望确保总是在白名单中的内容,这条规则可能有例外,但对于其他内容,理想情况下它们是从权威来源收集的,或者是基于可靠的分析技术生成的。您不能总是盲目地信任上面列出的每个数据源。对于某些情况,需要一些自动验证、过滤或分析。下面是一些有效的方法。
1、白名单中的每个实体都应该被分类(这是什么类型的白名单条目?)和来源(这是从哪里来的?)以便我们确切地知道它是如何到达那里的(即什么数据源负责),以及它是什么时候被添加/更新的。如果存在与白名单相关的问题,这将有助于解决问题的特定来源。
2、从原始源站点检索白名单条目,并从那里解析/提取数据。尽可能避免一次转储白名单条目,因为它们很快就会过时。如果包含一次性转储,请确保保持它们的沿袭。
3、一些大容量数据集对于分析扩展或筛选各种白名单非常有用。
(1)批量活动DNS解析(A-lookups, MX-lookups, NS-lookups,和 TXT-lookups)。Adns在这方面可能很有用。
(2)批量RDNS数据(从scans.io获取或自己收集)。
(3)批量Whois数据-这可以从几个供应商购买。这里有一些:whoisxmlapi.com, iqwhois.com, jsonwhois.com, whoisdatabasedownload.com,和research.domaintools.com。
(4)被动DNS (PDNS)数据可以从几个供应商购买,或者你可以使用自己的网络来收集和存储这些数据。以下是一些PDNS的供应商:farsightsecurity.com, deteque.com, circl.lu, riskiq.com, passivednsmnemonic.no和coresecurity.com(原Damballa)。
4、Netblock所有权(Maxmind)查找/分析对于一些审查非常有用。
5、**白名单应该至少每天更新以保持新鲜。**可能会有一些数据源比这更改得更频繁或更少。
在刷新白名单时要小心。添加健全检查,以确保在替换旧白名单之前正确地生成了新白名单。白名单加载失败的代价将是大量的误报(不幸的是,我不得不以痛苦的方式吸取这个教训……)。
6、流行域名列表不能从表面上看是良性的。恶意域名总是会进入这些列表。这里有一些解决方法:
7、使**用n天稳定top- x技术。**例如,稳定6个月Alexa top 500k -创建一个衍生列表从顶级Alexa域名,你过滤的名单,只有域名已经在Alexa top 500k名单,在过去6个月每天。在恶意域检测文献中,常用该技术构建高质量的良性标记数据。它并不完美,可能需要根据白名单的使用情况进行调整。这种技术需要保存历史上流行的域名列表。Wayback机器似乎拥有Alexa top1m数据的巨大历史镜像,可能适合引导自己的收藏。
8、这些列表的批量DNS解析对于生成流行的IP列表也很有用,但只有在使用n天稳定的top-X概念或在如何使用它们时才有用。
9、使用白名单排除设置,以删除类别的域名/ ip,你永远不想白名单。白名单排除集也应通过权威来源的自动收集保持新鲜(例如,在可能的情况下,抓取动态DNS提供商和共享托管网站,PDNS / Whois分析也可以工作)。
10、最后,在生成白名单时要小心,并考虑数据的哪些方面是被对手控制的。我们需要小心,不要盲目相信这些事情。一些例子:
RDNS条目可能具有欺骗性,特别是当对手知道它们用于白名单时。例如,对手可以为他们拥有的IP地址空间创建PTR记录,与谷歌的googlebot RDNS或Shodan的census RDNS相同,但他们不能更改DNS记录,将该域名映射回他们的IP空间。对于这些,通常还需要正向查找或netblock所有权验证。
总之,白名单对于在与事件数据关联之前从威胁情报列表中过滤出可观察的信息,为机器学习模型构建标记数据集,以及用上下文信息丰富威胁情报或警报非常有用。创建和维护这些列表需要大量的工作。要非常小心,不要走得太远,或者白名单域或ip很容易被对手控制。