红蓝对抗之域名搜集方法总结--原理 方法才是我们要学习的重点_域名中增加什么进行域名识别对抗-程序员宅基地

红蓝对抗之域名搜集方法总结
腾讯安全应急响应中心(TSRC)
腾讯安全应急响应中心(TSRC)

已认证的官方帐号
5 人赞同了该文章
作者 | 腾讯蓝军实习生jax、yhy、A1oe

前言
在历次HW、红蓝对抗、渗透测试项目中,外网的信息收集是至关重要的一个环节,外网打点信息收集全面了,可能会有四两拨千斤效果,直接突破外网边界进入内网。

最近我们三人加入腾讯蓝军学习渗透技巧,导师让我们对域名资产收集方式做一次全面梳理研究。子域名是域名信息收集的一个重要部分,在防御措施严密情况下我们无法直接拿下主域名,那么就可以采用迂回战术拿下子域名,然后无限靠近主域名。

一、方法原理介绍
1、利用证书透明度收集子域
原理:

引用谷歌的项目介绍:“要向用户提供加密流量,网站必须先向可信的证书授权中心 (CA) 申请证书。然后,当用户尝试访问相应网站时,此证书即会被提供给浏览器以验证该网站。近年来,由于 HTTPS 证书系统存在结构性缺陷,证书以及签发证书的 CA 很容易遭到入侵和操纵。Google 的证书透明度项目旨在通过提供一个用于监测和审核 HTTPS 证书的开放式框架,来保障证书签发流程安全无虞。”
那么,通过这样的证书透明度项目,我们就可以在其中获取一些有价值的域名。

实现方法:访问以下链接搜索需要查询的域名如:http://tencent.com

(1)crtsh:https://crt.sh/

(2)facebook:https://developers.facebook.com/tools/ct

(3)entrust:https://www.entrust.com/ct-search/

(4)certspotter:https://sslmate.com/certspotter/api/

(5)spyse:https://spyse.com/search/certificate

(6)censys:https://censys.io/certificates

(7)google: https://google.com/transparencyreport/https/ct/

2、常规检查收集子域
2.1 域传送
原理:

域传送操作是指备用服务器向主服务器查询来刷新自己的Zone数据库,保证数据一致性。此操作的目的是为了防止主域名服务器因意外故障变得不可用时影响到全局。正常情况下,只有在网络里存在备用域名 DNS 服务器时,DNS区域传送操作才有必要执行。一旦DNS服务器被错误地配置成任何人发出请求,都向其提供Zone数据库的拷贝,就会被攻击者利用。
实现方法:

(1) dig命令

如dig @http://ns2.xxx.com http://xxx.com axfr

http://ns2.xxx.com为提供数据的服务器,http://xxx.com为要传输的关键字,axfr为区域传输选项。

(2) python中dns库

xfr = dns.query.xfr(where=server, zone=self.domain, timeout=5.0, lifetime=10.0)
zone = dns.zone.from_xfr(xfr)

存在问题:

一般情况下,DNS服务器都配置正确,关闭了dns传输或设置了白名单,漏洞利用成功的概率较低。

2.2 站点配置文件
原理:

信息泄露问题主要就是某域名下的一些文件会存储与其相关的一些域名,如子域名。此类文件包括跨域策略文件crossdomain.xml, sitemap文件。
实现方法:

建立文件列表,拼接域名后直接访问,判断改文件是否存在。若存在则提取数据,若不存在则跳过。

(1) crossdomain.xml文件

直接访问crossdomain.xml路径

(2) sitemap文件

直接访问sitemap.xml、sitemap.txt、sitemap.html、sitemapindex.xml、sitemapindex.xml路径

存在问题:

文件往往不存在,即使存在,域名信息也不够多不够完全。

2.3 检查内容安全策略
原理:

内容安全策略(CSP,Content Security Policy)是一种声明的安全机制,可以让网站运营者能够控制遵循CSP的用户代理(通常是浏览器)的行为。通过控制要启用哪些功能,以及从哪里下载内容,可以减少网站的攻击面。CSP的主要目的是防御跨站点脚本(cross-ste scripting,XSS)攻击。例如,CSP可以完全禁止内联的JavaScript,并且控制外部代码从哪里加载。它也可以禁止动态代码执行。禁用了所有的攻击源,XSS攻击变得更加困难。CSP中的关键字有default-src、img-src、object-src和script-src。其中*-src可能会存在域名信息。
实现方法:

(1) 手动抓包获取

HTTP header的Content-Security-Policy属性

(2) Python的Requests获取

import requests
res = requests.post(url=url, headers=headers, data=data, allow_redirects=False)
if not res.headers[‘Content-Security-Policy’]:
print(“There is no Content-Security-Policy in the header”)
else:

处理主体代码

2.4 利用DNS查询收集子域
原理:

通过枚举常见的SRV记录并做查询来收集子域srv,以及通过查询域名的DNS记录中的MX,NS,SOA,TXT记录来收集子域。
SRV记录: 添加服务记录服务器服务记录时会添加此项,SRV记录了哪台计算机提供了哪个服务。格式为:服务的名字.协议的类型(例如:example-server.tcp)。

以下命令枚举给定域名的SRV记录:

nmap --script dns-srv-enum.nse --script-args “dns-srv-enum.domain=‘google.com’”

MX记录: 建立电子邮箱服务,将指向邮件服务器地址,需要设置MX记录。建立邮箱时,一般会根据邮箱服务商提供的MX记录填写此记录。

NS记录: 域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录。

SOA记录: SOA叫做起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中那一台是主服务器。

TXT记录: 可任意填写,可为空。一般做一些验证记录时会使用此项,如:做SPF(反垃圾邮件)记录。

3、利用DNS数据集收集子域
利用DNS记录公开数据收集

(注:将需要{domain}换成需要查询的域名,标★的是我们认为效果较好的)
★(1)ip138:https://site.ip138.com/{domain}/domain.htm
★(2)百度云观测:http://ce.baidu.com/index/getRelatedSites?site_address={domain}
★(3)hackertarget:https://hackertarget.com/find-dns-host-records/
(4)riddler:https://riddler.io/search?q=pld:{domain}
(5)bufferover:https://dns.bufferover.run/dns?q={domain}
★(6)dnsdb:https://dnsdb.io/zh-cn/search?q={domain}
(7)ipv4info:http://ipv4info.com/
(8)robtex:https://www.robtex.com/dns-lookup/
(9)chinaz:https://alexa.chinaz.com/
★(10)netcraft:https://searchdns.netcraft.com/
(11)dnsdumpster:https://dnsdumpster.com/
(12)sitedossier:http://www.sitedossier.com/
★(13)findsubdomains:https://findsubdomains.com/

4、利用威胁情报平台数据收集子域
(注:将需要{domain}换成需要查询的域名, 以下平台均需注册,注册后免费试用)

(1) https://otx.alienvault.com/api/v1/indicators/domain/{domain}/{section}

{section}指其他指令动作,可参考Docs关于API的使用说明。

https://otx.alienvault.com/api/v1/indicators/domain/qq.com/url_list

(2) https://community.riskiq.com/search/{domain}/subdomains

(3) https://x.threatbook.cn/nodev4/domain/{domain}

API:https://api.threatbook.cn/v3/domain/sub_domains

(4) https://www.threatminer.org/domain.php?q={domain}

(5) https://www.virustotal.com/ui/domains/{domain}/subdomains

或者https://www.virustotal.com/gui/domain/{domain}/relations

(6) https://pentest-tools.com/information-gathering/find-subdomains-of-domain#

5、利用搜索引擎发现子域
(1) 谷歌搜索语法—site

当使用site提交查询时,Google会将查询限制在某个网站/某个域下面进行,此时配合其他指令效果更佳,如使用减号“-”来排除不想要搜集到的域名。

(2) Site:x.x.x. *(目标IP)

当我们获取到了子域名的真实ip后,可以尝试搜索site:x.x.x.* 进行C段搜索,通过这种方法也能找出很多有价值的其他相关域名。经笔者尝试,这种方法在搜狗、谷歌搜索引擎上使用有效,谷歌搜索引擎效果更好。

如图:

6、域名备案搜集资产
原理:

在对一些大型的目标进行信息搜集时,还可以通过查找域名备案信息来发现同备案的其他域名资产。如搜集qq的子域名时,最常见的即为对http://qq.com进行子域名搜集,此时就会遗漏其余顶级域名资产。
查询网址:www.beianbeian.com

如上图通过查询http://qq.com的网站备案/许可证号,再对其进行反查,即可发现http://qq.com同备案的其他顶级域名资产。

通过域名备案查找同备案的其他域名资产,能够更全面的搜集目标资产信息,提升发现漏洞的概率。

7、whois查询和关联查询
工具:站长工具

在此我们以http://facebook.com做演示,如何进行whois查询和反查

(1) 查询whois

http://whois.chinaz.com/facebook.com

(2) 反查whois

http://whois.chinaz.com/reverse?host=**[email protected]&ddlSearchMode=1&domain=facebook.com

获得关联域名信息。

8、域名爆破
爆破的原理其实是通过枚举的方式来实现的,通过不断的拼接字典中的内容去枚举域名的A记录,但是该方法一般需要解决泛解析问题。比如开源工具oneforall会首先访问一个随机的并不存在的域,通过返回结果判断是否存在泛解析,确定存在泛解析以后,程序会开始不断的循环产生随机域名,去向服务器查询,将每次查询到的IP和TTL记录下来,直到大部分的IP地址出现次数都大于两次,则IP黑名单的收集结束,在得到了IP黑名单以后,oneforall接下来会将自己的字典中的每一项和要指定查询的域名进行拼接。在爆破过程中根据IP黑名单进行过滤。但这种宽泛的过滤容易导致漏报,所以oneforall将 TTL 也作为黑名单规则的一部分,评判的依据是:在权威 DNS 中,泛解析记录的 TTL 肯定是相同的,如果子域名记录相同,但 TTL 不同,那这条记录可以说肯定不是泛解析记录。
二、优秀开源工具
我们调研了市面上多款开源的子域名收集工具,列举多款优秀工具的功能和优点。在此以http://tencent.com为例收集其子域名.简单对比各工具的性能和效果。

工具名称:oneforall

项目地址:https://github.com/shmilylty/OneForAll

工具描述:oneforall是近几年出现的比较优秀的子域名收集工具之一,目前还在不断地进行更新优化。这款工具集成了各种域名信息收集的“姿势”,手段可谓是非常全面了。包括利用证书透明度、常规检查、利用网上爬虫(正在实现)、DNS数据集、DNS查询、威胁情报平台、搜索引擎等,但笔者发现它对域名泛解析的处理还不是特别理想,存在较多误收集,同时存在用时较长等缺点。

工具名称:SubdomainBrute

项目地址:https://github.com/lijiejie/subDomainsBrute

工具描述:李劼杰的SubdomainBrute是业内比较出名的子域名收集工具了,工具采用协程加快爆破速度,使用114DNS、百度DNS、阿里DNS这几个快速又可靠的公共DNS进行查询。准确率高,效果比较好。但对泛解析的处理规则是:超过10个域名指向同一IP,则此后发现的其他指向该IP的域名将被丢弃,该方法可能存在误删,但不可否认的是,该规则在一定程度上简便有效。

工具名称:ESD

项目地址:https://github.com/FeeiCN/ESD

工具描述:ESD的爆破速度极快,62万条数据只用了4分30秒左右,这款工具存在的缺点之一就是对性能要求高,1G2核的服务器CPU占用率达100%。除此之外,输出的结果也比较不稳定,同一网络下对同一域名进行收集,几次结果数量都不一样。

工具名称:subfinder

项目地址:https://github.com/projectdiscovery/subfinder

工具描述:使用subfinder来进行子域名信息的收集,它的输出结果多、基数大、速度快,并且输出格式多,便于后续处理(oneforall也有相同的优点)。

美中不足的就是此工具无爆破功能,被动源相比其他工具来说较少。

三、各工具效果对比
各工具优缺点与功能对比如下:

(注:因各工具提供的默认字典是不同的,字典往往需要自行定义才能发挥更大作用,故各工具下载后均不做修改,使用自带默认字典进行爆破。使用单一域名测试不具有普遍性,爆破结果仅供参考。)

按照上图,单从数据层面上看,四款工具中OneForAll的表现比较突出,而李劼杰的subdomainBrute表现也算优异,可访问子域名数的百分比和时间都很优秀,美中不足的就是爆出的子域名相对较少。

四、子域名收集常见问题
1、DNS缓存问题
对于不同的DNS服务器,其缓存策略可能不同,其缓存结果也可能会存在差异,导致在域名查询时获取到未及时更新的解析结果。通常情况下,要解决上述问题需要进行多次DNS查询来迫使DNS服务器刷新缓存,从而获取正确的结果。这无疑增加了泛解析判断和子域名爆破的难度。

其实这个问题在OneForAll中也未能得到较好的解决。在判断是否存在泛解析问题时,OneForAll使用了函数 detect_wildcard(domain, ns_ip_list),在该函数里面,OneForAll是通过使用不存在的子域名进行查询,从而判断是否存在泛解析。但是只进行一次判断就下决定是不够准确的,可能导致误判。

2、“死板”的字典
爆破是子域名收集方法的重要组成部分,对于大部分的这类工具而言,字典的好坏决定了最终的爆破效果。但大部分的字典仅仅只是遍历字符集,使用常用的高频词而不进行及时的更新。当字典文件太大时爆破速度就变得非常慢,并且低效率的字典即使再大也达不到理想的效果。

在实际进行域名爆破的时候,一个能够自动更新的字典无疑会比普通字典效果更好,在此我们提出一种字典自动更新的方案。

五、动态字典
在本节我们对字典自动更新的方案进行较为详细的阐述,具体可分为三个步骤:对词语的权重进行更新删除原字典中权值低的词从数据集中提取高频词语加入字典,以此实现字典的更新。

测试工具:Subdomainbrute

流程图如下:

1、权值更新
首先,利用工具subdomainbrute及其默认字典进行子域名爆破,将得到的结果利用如下脚本进行进一步批量检测,判断该域名是否外网可访问,并将能够外网正常访问的域名保存到success.txt中。

接下来,将mydic中词语的权值全部初始化为0。然后比对success.txt中的三级域名,将mydic中对应词语的权值+1,其他词语权值不变。此外需要记录下本次所查询的域名,以后查询相同域名的时候,不再重复更新mydic中词语的权值。

(注:mydic用于记录字典中词语及对应权值,格式形如www,0)

2、词语删除
在使用该字典对不同域名进行n次爆破(如20次)以后,开始对字典进行更新,即对字典中的词语进行删除操作。具体步骤如下:

首先,使用record_num.txt文件记录字典使用的次数。当record_num.txt文件不存在时则生成,每查询不同的域名使用次数+1,重复查询相同域名只算作一次。

程序每次运行结束后,判断是否需要重置mydic。若需要更新,则先删除record_num.txt文件,然后对mydic中的数据按照权值大小进行排序,排序完成后删去底部的30%数据。

3、字典更新
在删除了原字典30%的值以后,需要补充新的值到字典中。我们解析http://opendata.rapid7.com上的公开DNS记录来更新自己的字典。由于下载的数据集大小一般有几十个G,难以直接处理,所以我们先对数据进行切割以减小处理的难度。首先将数据集分割为每个大概100MB的数据文件,然后从这些数据文件中随机抽取一部分,提取出里面的所有子域名,拼接成为字典的“数据源”。将提取出来的子域名数据进行词频分析,并将其中的内容按照出现的频率从大到小进行排序。选择出现频率最高的值加入字典中,直到新字典的大小与旧字典相同为止。最后,需要将新字典中的所有值的权重清零。

六、总结
1、除了使用爆破工具外,子域名收集的方法还有很多。比如域传送漏洞、DNS查询等常规手段,还有利用证书透明度、DNS数据集、威胁情报平台、搜索引擎、域名备案和whois查询。综合来看,在这些方法中威胁情报平台效果最好,证书透明度和DNS数据集次之。

2、在本篇文章中我们还对业内较为优秀的几款工具作了研究、对比。在对http://tencent.com的子域名收集测试中,subfinder和OneForAll的表现较为突出。

3、子域名收集存在的一些主要问题是域名泛解析、不同线路解析出不同IP、子域名爆破时字典的效率不高等。

4、针对字典的问题,我们提出了一种字典自动更新的方案。

网上关于子域名收集的方法、工具都很多,但实际运用时结果都不够理想、全面。要想获得一份高效、有价值的子域名列表,需要我们结合不同的方法,合理地运用工具进行收集。

为了方便在实战环境中使用,我们将大部分常用的方法都梳理整合到了这篇文章中。作为学习的记录,本文可能存在些许纰漏,如有错误,欢迎指正。希望大家与我们一起,探索更多更高效子域名收集方法,共同学习共同进步。

最后,也非常感谢导师leon老师和小五老师的帮助和指导。

附录:

Google证书透明度项目 https://www.certificate-transparency.org/

枚举子域名 https://feei.cn/esd/

DNS域传送漏洞 http://www.lijiejie.com/dns-zone-transfer-1/

史上最全的子域名搜集方法:https://www.cnblogs.com/bighammerdata/p/13268624.html

我们是TSRC

互联网安全的守护者

用户数据安全的保卫者

我们找漏洞、查入侵、防攻击

与安全行业精英携手共建互联网生态安全

期待正能量的你与我们结盟!

发布于 2020-08-07
域名
漏洞

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Insist_on_secure/article/details/119064821

智能推荐

什么是内部类?成员内部类、静态内部类、局部内部类和匿名内部类的区别及作用?_成员内部类和局部内部类的区别-程序员宅基地

文章浏览阅读3.4k次,点赞8次,收藏42次。一、什么是内部类?or 内部类的概念内部类是定义在另一个类中的类;下面类TestB是类TestA的内部类。即内部类对象引用了实例化该内部对象的外围类对象。public class TestA{ class TestB {}}二、 为什么需要内部类?or 内部类有什么作用?1、 内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据。2、内部类可以对同一个包中的其他类隐藏起来。3、 当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。三、 内部类的分类成员内部_成员内部类和局部内部类的区别

分布式系统_分布式系统运维工具-程序员宅基地

文章浏览阅读118次。分布式系统要求拆分分布式思想的实质搭配要求分布式系统要求按照某些特定的规则将项目进行拆分。如果将一个项目的所有模板功能都写到一起,当某个模块出现问题时将直接导致整个服务器出现问题。拆分按照业务拆分为不同的服务器,有效的降低系统架构的耦合性在业务拆分的基础上可按照代码层级进行拆分(view、controller、service、pojo)分布式思想的实质分布式思想的实质是为了系统的..._分布式系统运维工具

用Exce分析l数据极简入门_exce l趋势分析数据量-程序员宅基地

文章浏览阅读174次。1.数据源准备2.数据处理step1:数据表处理应用函数:①VLOOKUP函数; ② CONCATENATE函数终表:step2:数据透视表统计分析(1) 透视表汇总不同渠道用户数, 金额(2)透视表汇总不同日期购买用户数,金额(3)透视表汇总不同用户购买订单数,金额step3:讲第二步结果可视化, 比如, 柱形图(1)不同渠道用户数, 金额(2)不同日期..._exce l趋势分析数据量

宁盾堡垒机双因素认证方案_horizon宁盾双因素配置-程序员宅基地

文章浏览阅读3.3k次。堡垒机可以为企业实现服务器、网络设备、数据库、安全设备等的集中管控和安全可靠运行,帮助IT运维人员提高工作效率。通俗来说,就是用来控制哪些人可以登录哪些资产(事先防范和事中控制),以及录像记录登录资产后做了什么事情(事后溯源)。由于堡垒机内部保存着企业所有的设备资产和权限关系,是企业内部信息安全的重要一环。但目前出现的以下问题产生了很大安全隐患:密码设置过于简单,容易被暴力破解;为方便记忆,设置统一的密码,一旦单点被破,极易引发全面危机。在单一的静态密码验证机制下,登录密码是堡垒机安全的唯一_horizon宁盾双因素配置

谷歌浏览器安装(Win、Linux、离线安装)_chrome linux debian离线安装依赖-程序员宅基地

文章浏览阅读7.7k次,点赞4次,收藏16次。Chrome作为一款挺不错的浏览器,其有着诸多的优良特性,并且支持跨平台。其支持(Windows、Linux、Mac OS X、BSD、Android),在绝大多数情况下,其的安装都很简单,但有时会由于网络原因,无法安装,所以在这里总结下Chrome的安装。Windows下的安装:在线安装:离线安装:Linux下的安装:在线安装:离线安装:..._chrome linux debian离线安装依赖

烤仔TVの尚书房 | 逃离北上广?不如押宝越南“北上广”-程序员宅基地

文章浏览阅读153次。中国发达城市榜单每天都在刷新,但无非是北上广轮流坐庄。北京拥有最顶尖的文化资源,上海是“摩登”的国际化大都市,广州是活力四射的千年商都。GDP和发展潜力是衡量城市的数字指...

随便推点

java spark的使用和配置_使用java调用spark注册进去的程序-程序员宅基地

文章浏览阅读3.3k次。前言spark在java使用比较少,多是scala的用法,我这里介绍一下我在项目中使用的代码配置详细算法的使用请点击我主页列表查看版本jar版本说明spark3.0.1scala2.12这个版本注意和spark版本对应,只是为了引jar包springboot版本2.3.2.RELEASEmaven<!-- spark --> <dependency> <gro_使用java调用spark注册进去的程序

汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用_uds协议栈 源代码-程序员宅基地

文章浏览阅读4.8k次。汽车零部件开发工具巨头V公司全套bootloader中UDS协议栈源代码,自己完成底层外设驱动开发后,集成即可使用,代码精简高效,大厂出品有量产保证。:139800617636213023darcy169_uds协议栈 源代码

AUTOSAR基础篇之OS(下)_autosar 定义了 5 种多核支持类型-程序员宅基地

文章浏览阅读4.6k次,点赞20次,收藏148次。AUTOSAR基础篇之OS(下)前言首先,请问大家几个小小的问题,你清楚:你知道多核OS在什么场景下使用吗?多核系统OS又是如何协同启动或者关闭的呢?AUTOSAR OS存在哪些功能安全等方面的要求呢?多核OS之间的启动关闭与单核相比又存在哪些异同呢?。。。。。。今天,我们来一起探索并回答这些问题。为了便于大家理解,以下是本文的主题大纲:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JCXrdI0k-1636287756923)(https://gite_autosar 定义了 5 种多核支持类型

VS报错无法打开自己写的头文件_vs2013打不开自己定义的头文件-程序员宅基地

文章浏览阅读2.2k次,点赞6次,收藏14次。原因:自己写的头文件没有被加入到方案的包含目录中去,无法被检索到,也就无法打开。将自己写的头文件都放入header files。然后在VS界面上,右键方案名,点击属性。将自己头文件夹的目录添加进去。_vs2013打不开自己定义的头文件

【Redis】Redis基础命令集详解_redis命令-程序员宅基地

文章浏览阅读3.3w次,点赞80次,收藏342次。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。此时,可以将系统中所有用户的 Session 数据全部保存到 Redis 中,用户在提交新的请求后,系统先从Redis 中查找相应的Session 数据,如果存在,则再进行相关操作,否则跳转到登录页面。当数据量很大时,count 的数量的指定可能会不起作用,Redis 会自动调整每次的遍历数目。_redis命令

URP渲染管线简介-程序员宅基地

文章浏览阅读449次,点赞3次,收藏3次。URP的设计目标是在保持高性能的同时,提供更多的渲染功能和自定义选项。与普通项目相比,会多出Presets文件夹,里面包含着一些设置,包括本色,声音,法线,贴图等设置。全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,主光源和附加光源在一次Pass中可以一起着色。URP:全局只有主光源和附加光源,主光源只支持平行光,附加光源数量有限制,一次Pass可以计算多个光源。可编程渲染管线:渲染策略是可以供程序员定制的,可以定制的有:光照计算和光源,深度测试,摄像机光照烘焙,后期处理策略等等。_urp渲染管线