悬镜安全这家公司,业内知道的人不算少,但真正理解他们在做什么的,可能没那么多。我最初接触悬镜,是因为他们在IAST(交互式应用安全测试)领域做得比较早,很多人是因为灰盒扫描器认识他们的。但最近这两年,悬镜对外讲的已经不是单个产品,而是一套完整的供应链安全治理框架,而且给了个很有意思的定位——“情报驱动”。这篇文章我就从这个点切入,聊聊我对这套思路的理解,以及在实战中如何落地。
软件供应链安全这件事,如果还停留在“等漏洞爆出来再打补丁”的阶段,基本上已经跟不上节奏了。这几年从开发环境到运维环境,从开源组件到商业闭源SDK,攻击面被拉得非常开。供应链攻击的典型特征就是“中一次,全盘炸”,因为软件不是孤立交付的,它自带一堆依赖和继承关系。真正的治理,需要从“漏洞公告驱动”升级为“情报驱动”。
1. 情报驱动的供应链安全治理方案设计思路
1.1 先理解为什么“情报”是核心
很多团队做软件供应链安全,用的是标准的“SCA(软件成分分析)+ 漏洞库比对”套路——扫描出依赖清单,跟NVD、CVE库做匹配,命中高危就报出来。这套逻辑不能说错,但它有一个非常致命的问题:漏洞库是滞后的。
NVD里一个CVE从公开到入库,通常有窗口期;漏洞库的更新永远晚于攻击者在暗网或公开渠道的利用动态。更麻烦的是,漏洞信息一旦公开,攻击者掌握的速度往往比防御者快。你还在等官方公告,人家已经用0-day或者在野利用开始打你的供应链了。
悬镜的“情报驱动”恰恰是把这个顺序反过来——先建立情报源和监测机制,让威胁情报、漏洞情报、资产情报形成联动,再指导整个安全治理动作。简单说,不是“等别人告诉你哪里有问题”,而是“主动去感知哪里可能会出问题”。
我在实际工作中体会最深的一点是:**情报不是越多越好,而是越准越好。**很多平台接了十几路情报源,结果告警满天飞,运营团队根本看不过来。悬镜的思路是把情报分层、分场景,聚焦到“与你资产相关的、真实可利用的”威胁上,这个方向是对的。
1.2 供应链安全治理的三个关键维度
完整的供应链安全治理,至少要覆盖三个维度:
| 维度 | 核心关注点 | 传统做法 | 情报驱动做法 |
|---|---|---|---|
| 开源组件 | 第三方依赖中的已知漏洞和恶意行为 | 依赖清单扫描,CVE比对 | 实时漏洞情报联动,恶意包行为监测,组件行为分析 |
| 软件物料清单(SBOM) | 软件成分透明化 | 手动整理,难以维护 | 自动化生成,与漏洞情报实时关联 |
| 生命周期安全 | 从开发、构建、分发到运行的全链路 | 各阶段工具孤立,无法串联 | 情报贯穿全流程,决策闭环 |
这三个维度不是割裂的。SBOM是基础,没有完整的成分清单,情报根本无从关联;情报是驱动,有了漏洞动态和攻击者行为特征,才知道优先级和处置方向;生命周期是载体,情报驱动的价值要在整个软件生命周期里体现,而不是只在某个扫描阶段用一下。
举个例子,一个Web应用引入了某个开源组件,传统方式是扫描出组件版本后去查CVE。情报驱动的方式是:通过SBOM实时监控该组件的漏洞情报,当某一天该组件被发现在野利用,系统立刻把它标记为“高危”,并自动关联开发团队、受影响接口、修复分支,甚至自动生成修复补丁建议。这已经不是“扫描”,而是“感知+决策”。
1.3 情报驱动与“被动式”安全方案的差别
传统安全方案本质上是“被动响应”——等漏洞出来了,规则更新了,才去扫描。哪怕扫描频率很高,也还是被动。而情报驱动是“主动防御”——通过情报提前判断攻击者可能会用哪些漏洞、哪些组件正在被攻击利用,从而把防线前移。
举个例子,某个0-day漏洞在野利用被威胁情报厂商捕获,传统模式下你的SCA要等CVE库更新才能检测;情报驱动模式下,威胁情报已经在监测该组件的异常行为特征,结合你的SBOM清单,优先影响面分析,处置速度可以快几天甚至几周。对于供应链攻击这种“一击致命”的威胁,这种时间差就是生死线。
2. 核心细节解析:情报的获取、研判与联动
2.1 情报源的类型与选择逻辑
情报不是只有漏洞情报一种。真正落地时,要区分多种情报源:
- 漏洞情报:CVE、CNVD、CNNVD以及商业化漏洞库。这是最基础的情报,但需要注意库之间的时间差和覆盖范围差异。
- 威胁情报:攻击者行为、恶意IP、攻击工具特征、在野利用信息。这部分通常需要商业化情报源的支撑。
- 资产情报:企业内部资产指纹、组件版本、API接口、数据流。这一层不是外部购买,而是内部建设。
- 组件行为情报:开源组件是否存在恶意行为(如窃取环境变量、反弹shell、在特定条件下执行异常代码)。这是近几年供应链安全治理特别重视的方向。
选择情报源时,核心逻辑是“覆盖度与准确度的平衡”。一个低质量情报源带进大量误报,运维团队就会形成“狼来了”效应,最后真正的高危告警也没人看了。我见过不少团队被脏情报害惨了,每天处理几百条告警,结果真正有价值的也就三四条。
2.2 情报研判:从“情报”到“决策”的关键跳跃
情报拿到手,不能直接变成告警。这里要经过一个研判过程:
原始情报 → 标准化 → 关联资产 → 评估可利用性 → 评估影响面 → 定级 → 决策
悬镜的做法里比较关键的一点是“可利用性评估”。一个漏洞即使CVSS评分很高,如果它的利用条件是“需要本地物理访问”,那对于互联网应用来说威胁就小得多。反过来,一个评分只有5.4的中危漏洞,如果它正是攻击者在野外积极利用的0-day,那它的优先级反而要提到最高。
我在项目里也做了类似的机制。当一个漏洞情报进来,系统会先判断:这个漏洞影响的组件是否存在于我的业务系统中?如果不存在,这条情报直接进入“忽略”状态;如果存在,再判断这条组件跑在哪个业务场景、是否可公网访问、是否有WAF等缓解措施。这一连串判断做完,告警量能砍掉80%以上,剩下的才是真正的处置对象。
2.3 情报与现有安全工具链的联动
情报驱动不是要替换掉你现有的SAST、DAST、IAST、RASP,而是让它们的数据能够相互校验。举个例子,IAST发现了一个参数污染点,同时情报显示该框架版本存在一个反序列化漏洞,那么这两个数据结合起来,基本可以判断这是一个高危可利用风险。如果只看IAST或者只看情报,都可能低估。
这里需要强调一点:**情报驱动不是“多个工具堆叠”,而是“数据层贯通”。**很多企业上了很多安全产品,但产品之间数据是孤立的——SAST扫漏洞,SCA扫组件,IAST扫运行态,彼此不知道对方发现了什么。悬镜的价值在于治理框架把这些数据统一收口,让不同工具的数据在情报模型下互相印证,这比买几百个工具但互相不通信要强得多。
3. 实操过程:情报驱动供应链安全治理的关键环节
3.1 第一步:先把资产底账摸清楚
做情报驱动,第一件事不是买情报,而是盘点资产。资产生命周期不清晰、成分不明,后面的所有联动都是无源之水。一位做运维的朋友跟我吐槽过:他们被攻击后溯源,发现受影响的是一个三年前上线的内部工具,代码仓库里连README都没有,依赖什么组件没人说得清。
摸底工作包括:
- 建立完整的应用资产清单:业务系统、API服务、后台任务、数据处理任务
- 对每个应用生成SBOM(软件物料清单):开源组件、版本、许可证、依赖关系
- 梳理资产间的调用关系:哪些服务暴露公网、哪些只在内网、哪些会处理敏感数据
- 标记每个资产的责任人和业务重要性
SBOM的自动化生成现在有很多工具可以做,但质量参差不齐。这里有个小经验:生成后要人工抽检。我见过有工具把已经修复的漏洞重复报了几十遍,原因是SBOM里依赖关系解析错误,把传递依赖和直接依赖搞混了。至少抽检20%的条目,推算准确性,再决定能否信任这个SBOM。
3.2 第二步:建立情报接入与标准化层
情报源接入是整个体系中技术含量最高的部分。常见的做法是通过消息队列接收各情报源的更新,然后统一转换为标准化的JSON格式,存入情报数据平台。字段通常包括:
{ "vuln_id": "CVE-2023-12345", "affected_product": "some-library", "affected_version_range": "[1.0.0, 2.3.4]", "cvss_score": 9.8, "in_the_wild": true, "exploit_available": true, "published_at": "2023-08-01T00:00:00Z", "source": "commercial_threat_intel", "tags": ["RCE", "no-auth"] }标准化层最容易被忽视。实际接入时,不同情报源的命名规范、版本号格式、漏洞描述风格差异很大。你要做的是把“某个库的某个版本范围存在某个漏洞”这个事实统一表达,否则后面做关联分析时,光是数据清洗就能让你崩溃。
我踩过一个坑:A情报源的组件名是fastjson,B情报源写的是com.alibaba:fastjson,C情报源写的是Fastjson,如果不做标准化,同一个组件会被当成三个对象处理,最终的资产关联结果就完全错了。所以标准化层的核心工作是实体归一化——把同一个软件实体在不同数据源里的不同写法映射到同一个内部ID。
3.3 第三步:组件与资产关联,形成“关系图谱”
有了标准化的情报数据和清晰的资产清单,接下来就是关联。这一步的目标是回答一个问题——“这条情报跟我有什么关系?”
关键步骤如下:
- 将漏洞情报中的受影响组件与SBOM清单做匹配
- 匹配到的组件反查所在的应用资产
- 根据资产的网络暴露面、业务敏感度、数据分级确定风险级别
- 生成影响面分析报告:哪些生产服务受影响、哪些开发环境受影响、哪些不影响
关联逻辑看起来简单,但涉及版本范围匹配时会有不少细节。affected_version_range在不同情报源里有不同表达方式,有的是区间[1.0.0, 2.0.0),有的是集合{1.0.0, 1.2.3},有的是“小于某版本”。解析这些范围并和SBOM里的实际版本做运算,需要仔细处理边界条件。
我建议在关联层单独做一个版本匹配服务,不要直接在主流程里写死逻辑。这个服务要能处理区间、集合、Stein表达式等不同的版本约束模型,同时留一个人工干预的接口,当自动化判断存疑时,兜底交给安全人员决策。
3.4 第四步:情报驱动的检查和阻断能力
情报关联完还不算结束。情报驱动更重要的是“驱动”两个字——情报要能推动检查和阻断动作。具体到执行层面:
| 阶段 | 触发场景 | 动作 |
|---|---|---|
| 开发阶段 | 开发者引用了存在已知漏洞的组件版本 | CI流水线阻断,并给出可升级的安全版本建议 |
| 测试阶段 | IAST发现高危行为特征 | 自动关联情报,判定是否属于已知攻击模式 |
| 构建阶段 | 构建产物SBOM与情报高危组件匹配 | 镜像推送阻断,并通知对应负责人 |
| 运行阶段 | 运行时检测到异常外联或恶意行为 | 联动RASP或容器平台进行隔离 |
| 应急阶段 | 新情报触发高危影响面告警 | 自动生成应急工单,分派给资产负责人 |
开发阶段的情报驱动非常有效。开发同学在代码里加了一个依赖,如果不做检查,等测试和生产阶段才暴露问题,修正成本会高出很多。这里值得细化一下CI/CD里的阻断逻辑:
stages: - build - dependency-check dependency-check: stage: dependency-check script: - snyk test --json > report.json - check-vuln-threshold --file report.json --critical-blocks true rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event"注意这里有一个实践心得:不要把所有的漏洞都设成阻断条件,否则开发团队会被频繁打断,最终选择绕过你。合理的策略是——只阻断“可利用性高”且“有在野利用”的漏洞,其他漏洞降级为告警。这个阈值需要和开发团队达成共识,否则工具再好也落不了地。
3.5 第五步:情报驱动的度量与运营
最后一个环节是度量。不度量就不知道治理效果好不好。这里分享几个运营指标:
- MTTR(平均修复时间):从情报触发告警到漏洞完成修复。衡量整个链路的响应速度。
- 情报覆盖率:多少比例的已知漏洞在应用上线前就被情报拦截。这个比例越高,说明左移做得越好。
- 误报率:联动后最终确认为误报的比例。这个指标要控制在30%以下,否则团队会失去对情报的信任。
- 暴露窗口期:漏洞情报公开到内部完成影响面评估的时间差。这个时间越短越好,理想情况是控制在小时级。
我见过不少团队重视前三个指标,但忽略暴露窗口期。其实在供应链安全里,暴露窗口期才是真正的核心——漏洞情报公开的那一刻,攻击者也在同步分析,你的响应速度决定了你是“先手补漏”还是“被动挨打”。
4. 常见问题与排查技巧实录
4.1 情报大量误报,运营团队濒临崩溃
现象:接入情报源后,一天收到上千条告警,安全团队疲于奔命,真正重要的事件反而被淹没。
排查思路:先统计告警分布,看是集中在少数几个组件还是全面爆发;再抽查误报的特征,很多情况下是版本匹配逻辑太宽泛,或者漏洞影响范围描述与实际可利用条件不符。
解法:分级处置策略。高危+可利用+有在野利用的,走P0流程立即响应;高危但无在野利用的,进入24小时流程;中低危的,进入7天流程。另外可以设置业务豁免机制——某些组件只跑在隔离内网、不存在真实连接设备,可以在关联时跳过。
4.2 SBOM生成后,开发团队说“不是我们的依赖”
现象:SBOM里出现了一堆开发团队不认识的组件,反复沟通后确认是测试框架或构建工具依赖,并不存在于最终交付物中。
排查思路:观察SBOM的生成时机。很多工具默认分析的是整个项目的完整依赖树,但构建流程会有多阶段、多目标,产生的最终产物依赖集合与完整依赖树差别很大。
解法:SBOM生成要基于构建产物的实际依赖,而不是源代码层面的全量声明。最好在构建环境中接入SBOM生成工具,从最终镜像或交付包中反推依赖清单。另外,给SBOM添加“来源层”标记,区分哪些是直接依赖、哪些是传递依赖、哪些是仅测试用。
4.3 修复了漏洞,但反复收到相同告警
现象:组件已经升级到安全版本,但情报系统还在持续报该组件存在高危漏洞。
排查思路:最普遍的原因是SBOM未更新,系统仍记录旧版本信息。另一个可能是资产调用链里存在隐藏的版本引用,比如配置文件里锁定了旧版本,或者另一个不显眼的子模块还在用旧版本。
解法:构建阶段强制更新SBOM并保留历史版本记录,每次情报关联检查时优先匹配最新SBOM。同时在告警内容里展示“该告警对应的SBOM版本”,方便快速定位是数据更新滞后还是真实存在未修复入口。
4.4 情报源头更新滞后,0-day响应不灵
现象:某个漏洞在技术圈已经讨论得很热,外部公开渠道已经有PoC,但内部情报源还没有收录。
排查思路:单一情报源的覆盖永远存在盲区。悬镜强调“情报驱动”有一个隐含前提——情报源要多元化。头部情报厂商对公开渠道的监控能力较强,但0-day和定向攻击的情报往往出现在小众社区和暗网,单一商业源未必覆盖得到。
解法:建立多渠道情报交叉验证机制。将商业情报与开源情报(OSINT)、自建蜜罐捕获的扫描特征、社区公开信息结合。当某一渠道出现高度相关的攻击行为特征时,即使漏洞库未更新,也可以先发起资产影响面排查。这里强调的是“相关”,而不是“确定”——在情报不完备的阶段,可以让系统先发预警、再验证,提高反应速度。
4.5 组件许可证合规问题被忽略
现象:供应链安全治理偶尔把重心放在漏洞上,结果某个用了GPL协议的组件在商业产品中分发,带来了合规风险。这属于供应链安全领域里“安全”之外的延伸问题,但实际项目中经常出现。
排查思路:SBOM生成本来就应包含许可证信息,但很多团队在生成时关掉了这个功能,觉得用不上。
解法:打开SBOM中的许可证采集开关,在情报关联后增加一条策略:高风险许可证(如GPL、AGPL)的组件默认告警,由法务和架构师确认使用场景。合规风险没有漏洞来得那么耸人听闻,但在商业交付场景里,出现一次GPL污染就够你法务团队忙活半年的。
5. 实战落地:一次完整的供应链攻击应急处置流程
5.1 事件背景与触发
假设你负责的业务系统被情报系统检测到:某个内网服务的流量行为异常,持续向一个陌生的海外IP发起请求,同时该服务依赖的某个日志库组件在最新情报中被标记为“存在后门行为”。
这个场景在真实世界里就是供应链攻击的典型剧本——攻击者入侵了开源项目维护者的账号,在组件中埋入恶意代码(如通过环境变量采集、运行特定命令或DNS外带),然后利用开源生态不断扩大影响面。
5.2 情报系统的联动处置(时间线)
T+0分钟:情报源推送该组件的后门行为标识。情报系统自动关联内部资产,发现受影响服务分布在两个业务域,共12个实例。一部分实例暴露在公网,另一部分只在内网作为数据聚合节点。
T+15分钟:系统生成影响面评估报告,自动提交工单给资产负责人和运维团队。同时在外网WAF层临时添加该服务的流量审计规则,不直接阻断,先观察。
T+30分钟:事件响应小组介入。确认外联IP地址不属于已知合作方,将该IP加入威胁情报库的黑名单,并在网络层对12个实例的服务器做流量镜像和分析。
T+2小时:通过流量抓包确认,异常请求携带了部分环境变量数据,包括数据库连接串的前缀。基本可以定性为:恶意组件在收集运行时环境信息并外传。
T+4小时:完成处置——所有受影响实例下线,替换为去除问题依赖或升级后的安全版本,同时更新SBOM记录。对外联IP进行封禁,向相同组件使用方发出风险预警。
整个过程里,情报驱动的价值体现在两个地方:一是“快速识别”——之前这种后门行为可能跑几个星期才会被人工发现,现在通过情报联动缩短到24小时内;二是“快速定级”——不是所有用了该组件的服务都同等处理,根据资产暴露程度分了优先级,处理者能把精力放在刀刃上。
5.3 复盘与机制改进
处置完不代表结束。事件复盘的核心是看“情报驱动的链路哪里断了、哪里慢了”。
那次事件的复盘结论是:
- 情报源对该组件的标识更新偏晚,团队决定增加一个“社区行为举报”监测渠道作为补充,缩短情报发现的被动窗口期。
- SBOM匹配耗时偏长,因为部分旧服务存在SBOM缺失,只能靠人工判断。后来给全部在营服务补齐了SBOM,并强制新服务上线前必须生成SBOM。
- 应急响应中WAF规则调整花了一段时间,原因是变更需经过审批流程。之后将“安全紧急变更”单独设了一条快速审批通道,压缩响应环节。
这些改进看着琐碎,但累积起来才能真正把“情报驱动的治理”跑顺。工具和平台只是骨架,流程的顺畅度决定了这套体系能不能在关键时刻用得上。
6. 工具选型与方案评估建议
6.1 情报平台选型的四个评估维度
如果你正准备上这类项目,或者已经接到任务要做供应商选型,我给一个评估框架——四个维度:
覆盖度:情报源是否覆盖内外部、中英文、公开与商业渠道。单一渠道肯定不够,重点看它的联盟合作和数据交叉能力。
时效性:可以做一个小实验——抓取近一年内20个热门漏洞,看它在这些漏洞线上公开后的多长时间内收录。平均超过72小时的,基本不用考虑。
联动能力:看它的API和生态对接能力。是否能对接你现有的Jira、飞书、企微、堡垒机、容器平台。谁家生态适配做得越好,后续运营成本越低。
误报率控制:要求供应商提供可验证的误报率数据,并做一小批真实样本测试。如果供应商拿不出来,或者给的都是“预置最佳结果”,要小心了。
6.2 自研还是采购?
这个问题的答案取决于团队现状。如果团队里连安全运营人员都只有两三个,自研情报平台基本不现实,采购成熟方案更合适。如果有平台研发能力,并且已有一定的数据底座,可以走“半自研”路线——采购外部情报数据,自建关联与分析引擎。
我的看法是,供应链安全治理的价值重心不在“情报采集”,而在“情报应用”。情报数据本身是标准品,但怎么和自家资产、业务流程、组织架构结合,这是一个需要不断打磨的过程。即使采购了整套系统,也需要内部投入精力做流程梳理和持续运营,指望“买了就能安全”的团队往往会有落差。
6.3 与云原生环境的集成要点
现在的业务系统很多已经跑在Kubernetes和容器平台上,供应链安全治理需要考虑集成这些环境:
- 镜像构建时自动生成SBOM,并接入镜像仓库的漏洞扫描
- 容器运行时通过eBPF或sidecar方式感知异常进程行为
- 服务网格中的通信数据可以作为情报联动的输入源
- 策略即代码(Policy as Code)将情报驱动的阻断规则版本化,与基础设施即代码保持同步
云原生环境的特点是变化快、实例多、生命周期短,传统的“定期扫描”模式很难跟上节奏。情报驱动的思路在这里尤其适用——不是所有实例都要每天扫描一遍,而是当情报和SBOM关联命中时才触发深入检查,大幅降低资源开销,同时提升响应速度。
7. 基于情报驱动的安全治理长期运营策略
7.1 情报驱动不能只做“单点触发”
一套真正有效的体系,日常运营中需要从几个角度持续投入:
- 每周固定梳理新增情报,看是否关联到内部资产(即使未触发阻断,也许存在影响面被忽略的场景)
- 动态调整漏洞阻断阈值。团队响应能力提升了,可以把阻断阈值从“可利用性高且有在野利用”适度扩大到“可利用性中高”
- 对已处置完成的告警做二次抽查,确认修复确实生效,并防止绕过行为
这些工作不比实施那些技术栈轻松。有些单位上了整套系统,刚开始很兴奋,过几个月就因为运营跟不上而逐渐弃用——告警关闭了,巡检也停了,系统变成了一个摆设。这是非常普遍的现象,要在项目规划期就意识到持续运营的存在。
7.2 治理成熟度评估模型
一个简单的成熟度模型,可以用来判断你所在的团队处于哪个阶段:
| 阶段 | 特征 | 能力状态 |
|---|---|---|
| 阶段一:被动合规 | 只有周期性扫描,漏洞库驱动 | 有工具但反应滞后 |
| 阶段二:主动检测 | SCA/IAST等工具日常运行,人工分析 | 有能力但效率不够 |
| 阶段三:情报联动 | 情报接入,关联分析,半自动处置 | 效率提升,但仍有大量人工决策 |
| 阶段四:闭环运营 | 全流程自动化,KPI度量优化 | 快速响应,持续改进 |
| 阶段五:组织协同 | 安全与研发、运维目标对齐,治理内化到研发流程 | 供应链安全问题前置,业务影响最小化 |
大部分团队目前处在阶段二和阶段三之间。如果正在选型或规划,可以先评估自己在哪个阶段,再看下一步要解决的核心瓶颈是什么。
7.3 面向未来的扩展:AI技术的引入
“AI安全”这个词近年很热,悬镜安全也给出了通用型AI智能体分级安全框架的思路。在供应链安全治理中引入AI,有几个方向是可以期待的:
- 用大模型对漏洞情报进行自动摘要和可利用性降维分析,把一份技术性很强的漏洞描述转化为业务层能理解的影响说明
- 用机器学习对SBOM异常依赖关系建模,识别未知的恶意组件(行为聚类分析)
- 用AI辅助自动化处置决策,给出修复优先级排序,甚至可以自动生成补丁版本建议
- 用LLM将历史处置记录总结提炼为运维知识库,让后续同类问题的处理时间缩短
但也要提醒一句:AI是放大器,不是万灵药。底层的SBOM准确度、情报标准化质量、关联逻辑正确性如果没做好,AI只是在更快地加工错误数据。把基础打牢,再引入AI优化效率,顺序不能反。
在实际落地供应链安全治理的过程中,我个人一个很深的体会是:**工具能解决“看得见”的问题,而思路和机制解决“看不见”的问题。**情报驱动的核心,不在于你接了多少情报源、买了多贵的平台,而在于你有没有把情报和资产、流程、人员真正打通,有没有让情报在关键时刻驱动决策——而不是堆在数据库里没人看。
如果你所在团队正在规划或建设这类能力,建议从小范围试点开始,挑一条核心业务线,把资产底账、SBOM生成、情报接入、关联分析、阻断处置整个闭环跑通,再逐步扩大到全业务。供应链安全没有“一步到位”的尽头,它更像一个持续演进的过程。把一次小范围的闭环做扎实,比摊子铺得很大但处处漏风要好得多。