我的蚂蚁网商三年:如何系统性解决复杂问题的思考和实践 - 阿里技术
怎么样系统性解决问题?工作中一直在思考和实践,现在将最新学到的知识和实践,系统性的整理并分享出来。
前言
本篇文章的写作契机来源于公司去年发布的新版Job model以及上次谈绩效时主管给的一个命题:怎么样系统性解决问题。一直在思考和实践,现在将最新学到的知识和实践,系统性的整理并分享出来,其中可能涉及的几个核心观点如下:
- 复杂问题是相对的,不是所有复杂问题都需要系统性思考。
- 系统性思考=全面思考+深度思考+动态思考,系统性的典型体现是:一张大图+关键要素。
- 系统性解决问题是找到和掌握链路中所有的可能性,体现到现象层面是被打脸的次数越来越少,直至在这个领域内没有人能完成对你的打脸。
- 还得从实际案例出发,反复对比看过去、现在的思考和实践的过程与结果。
什么是复杂问题?
首先,问自己,什么是简单问题?什么是不简单问题?什么是复杂问题?如何解决复杂问题?如何系统性解决复杂问题?什么是系统?什么是系统性?做到什么程度算是系统性解决?
简单和复杂问题,没有绝对,是有参照物的相对。对于一个幼儿,1+1等于几是个复杂问题,而对于小学生,1+1是个简单问题,同样,对于小学生来说,开根号是个复杂问题,对中学生来说,是个简单问题。对于哥德巴赫猜想,对于地球人都是复杂问题,可能对于外星人就是个简单问题。
对于同一个参照物,怎样区分是简单问题和复杂问题?看确定性的程度。如果完全确定以及肯定,无疑是个简单问题,如果完全不确定,很可能是个复杂问题。
复杂问题为什么需要系统性思考?
不是所有的复杂问题都需要系统性思考和解决,只有需要被深度解决的复杂问题需要(好像是废话)。前段时间卫天抛了个问题“同样一个问题,P6、P7、P8分别来解决,差异会在哪里”引导我思考。第一反应首先是结果差异,职级高的会解决的更好,而且越是复杂的问题,结果差异感觉会越明显。第二反应是过程差异,解决的更好的原因是职级高的会考虑的更全面、更有深度。现在想来,造成结果和过程差异的原因,归根结底是思维上的差异。因为按照公司job model能力模型标准,职级越高,对思维的要求越系统性和前瞻性,想到是做到的前提,首先得考虑到,才有可能解决的更全面、更彻底。
什么是系统?
百度百科对系统的定义
系统一词来源于英文system的音译,即若干部分相互联系、相互作用,形成的具有某些功能的整体。
中国著名学者钱学森认为:系统是由相互作用相互依赖的若干组成部分结合而成的,具有特定功能的有机整体,而且这个有机整体又是它从属的更大系统的组成部分。
定义已经很清楚了,这里几个关键词是:若干部分、相互作用和依赖、特定功能的整体。
“特定功能”是指系统会拥有其单独部分不具备的特征。比如一张桌子有四条腿,桌子拥有桌腿本身没有的功能。
什么是系统性思考?
我理解系统性思考的涵义是完全搞清楚一个系统,搞清楚系统的每个组成部分、每个组成部分之间的关系、组成的整体及特定功能,看见全貌和演化方向,提升决策力。
我认为系统性思考=全面思考+深度思考+动态思考,如果是从能力模型角度,前两者构成了一个空间的T字型模型,加上第三者的时间维度,就是时空的T字型能力模型。如果是从拼积木角度,全面思考可以看作是找到了所有的积木,以及积木最终要拼成的样子,深度思考是考虑每块积木的形状、相互间的互补关系,怎么样才能拼的又快、又准。
系统性思考的典型体现是:一张大图+关键要素,前者正对应全面思考,后者对应深度思考。
全面思考:首要目标是防止分母有遗漏。要看到问题的全局,不能盲人摸象仅从单点、局部看待问题。在公司,经常会面对来自各方的挑战“到底有多少个威胁场景”、“到底要建设多少安全策略”,这里挑战的本意是全面性,防止遗漏。
深度思考:首要目标是保证解决的问题都是彻底的、高效的解决,保障分子都是持续、稳定、可靠、有效的。要透过现象看本质,不能停留在现象层面思考。现在还记得百阿时候,老师举的一个XY问题例子。X问题是:一个路人问路去火车站的路怎么走。X问题的回答可能是:坐地铁几号线怎么走怎么走blabla。但是如果深度思考一下路人的原始需求,问他为什么要去火车站,路人可能回答:不都是去火车站现场才能买票么。所以Y问题是:怎么买火车票,因此Y问题的回答就是:上支付宝的12306小程序网上买票。XY问题出现的原因可能是路人记忆还停留在只能现场买票的以前,不了解最新的讯息。通过深度思考得到的Y问题的答案相较于X问题的答案更接近问题的本质,更能高效解决问题。
动态思考:首要目标是保证即使外界环境和时间在变化,我们也要能抓住重点,不能停留在某个时刻看待问题。例如随着国家颁布《网络安全法》,随后又颁布《个人信息保护法》、《数据安全保护法》,还有国家发布的《关于构建更加完善的要素市场化配置体制机制的意见》,还有俄乌网络战,诸如此类事件,无一不证明了安全、数据以及数据安全已然成为国家层面顶层设计中的重点事项。外界环境的变化,会强有力的影响到每一个人,不紧跟时代就只能被时代的齿轮碾压过去。
如何达成系统性思考?
解决同样一个问题,从现象来说,一个经验丰富的工程师要比一个新手,做的又快又好。两者最大的差别在于经验,那么经验具体是什么?抽象来说(只能抽象),经验是人脑中的一种神经通路,出现A,立马想到B。经验越丰富的,可能神经网络通路越多,会想到C、D、E可能性。这还只是一跳链路,如果是多跳呢,理论上的可选性更多,当然经验越丰富的人,实际掌握的通路或死路越多。从神经通路的角度来说,系统性解决问题是找到和掌握链路中所有的可能性,体现到现象层面是被打脸的次数越来越少,直至在这个领域内没有人能完成对你的打脸。
如何掌握所有的可能性?如果是完全没有经验的情况下,可用的方法是用时间换空间,自下而上反复进行大量的盲人摸象式的学习、联想和实践,不断交叉扩大知识面,逐步触达到边界。当然有时候触达到的边界是假的,只是因为不知道自己不知道,可能一经过交叉性的检验就可以发现。那什么时候边界是真的呢,似乎是个无法证真的问题,事实上也是这样,无法完全证真。但和高等数学中求极限的思想类似,我们可以通过和多方进行交叉,和同组、同部门、跨部门、同领域、同行业的人做交互,不断反哺我们的认知模型,无限逼近极限或边界,在自己的领域内,知识和能力边界达到最大,和人对线时,自动加领域buff。在此过程中,不断沉淀系统性思考能力和沟通表达能力(所谓的经验),面临新问题时,用空间换空间,通过一波迁移学习复用经验,系统性思考,自顶向下,目标清晰、路径明确。
如何快速掌握所有的可能性?这让我想起来之前和一位高年级同学做1V1请教时,问的一个问题得到的类似答案。还记得当时问的问题是如何用最短时间达到下一个层级,得到的是答案是:你觉得同领域内的下一个层级最牛逼的人是谁?向他学习。现在看来,确实是这样,牛逼代表着一种能力边界,最快逼近边界的前提是首先要看到这个边界。
如何使用系统性思考解决实际问题的案例
问题定义
这里我们定义一个复杂问题:外部攻击者导致的数据泄漏问题。目标是:系统性解决。
思考过程
从全面思考的角度,首先会考虑这么几个问题,外部攻击者都是什么?数据泄漏的数据是什么?存放在哪里?泄漏的渠道都有哪些?每一个子问题又都比较复杂,也都需要系统性思考。
从深度思考角度,重点思考优先级、关联性和技术深度问题。优先级方面,面对众多子问题,如果精力只允许做一件事,做什么?如果允许做三件事,做哪三件事。关联性方面,如何实现互为犄角,1+1》2。技术深度方面,从威胁对抗的角度,如何高效、彻底解决遗漏问题,守住底盘。
从动态思考角度,面对内外部环境的变化,工作的重点也可能随时发生变化。内部环境方面,安全有时候比较被动,业务-》产品-〉架构-》研发-〉测试-》运维-〉技术风险-》安全风险,前段链条煽动下翅膀,安全都可能抖一抖。业务没了,还要安全干嘛,底层架构动了,安全又得从0开始建设了。往小了说,对于事中事后阶段安全工作,在风险敞口存在且事前没有安全解决方案时,需要重点投入挡住风险,可能做着做着,上游有了突破,下游也就没了继续做的必要了。外部环境方面,网络安全及法律法规如网络安全法、数据安全法、个人信息保护法、俄乌网络战,数字生产力方面如《关于构建更加完善的要素市场化配置体制机制的意见》、中共中央、国务院印发的《数字中国建设整体布局规划》、国内外如火如荼的大模型,无一不在发生深刻的变革,深处这样的时代,既幸福也无奈。
思考结果
基于对问题的系统性思考,抽象了一张大图,包含一些关键要素和关键事项。
其中每一个实体、每一条边范围都比较大,实践中都还需要继续拆解到位。比如“数据存储”,可能包括了oss、sftp、odps、ob、sls、mq等等。比如“互联网边界”,不止是开放到公网的Web、app和小程序,还有更广泛的非http类型服务,比如邮箱系统,VPN等等,只要起点是外部,终点是内部的所有渠道。再比如办公应用系统,数以千计,如何拆解,感兴趣的可以了解我们团队紫军的基于威胁路径大图的实战检验系统。
在实践的过程中,我承担解决/在解决/要解决的部分问题如下,其中有一些也是学习兄弟团队经验或是团队合作的结果。
- 入向流量侧透明化打标(学习兄弟安全团队经验)
- 入向邮件侧钓鱼检测
- 入向oss侧异常检测
- 攻击者知识图谱
- 攻击者身份、意图识别和态势监控预警
- 办公终端数据盗取和外发检测
- 出向办公终端失陷外连检测
- 办公后台非预期查询(五类)
- 生产主机数据盗取和外发检测
- 出向生产主机失陷检测
- sftp/oss/odps服务端检测
- 数据库异常检测
- 数据泄漏类漏洞监控
- 数据蜜罐(我们组又帅还单身的小哥哥在做)
- 联动个人信息防火墙
- 风险发现和治理建议
事项跨度包括应用层、流量层、网络层、终端层、主机层、数据层,子事项一一对应到大图中:
哪儿的风险比较多,肯定这方面拆解比较多。今年比较关键和重点投入的事项是:公网侧的攻击者身份、意图识别和态势监控预警,办公网侧的办公后台非预期查询。动态思考的角度,在特殊时期,关键事项可能又是其他,比如钓鱼检测。
至于具体如何做,怎么实现,过程中有哪些坑点,限于篇幅和安全的特殊性,这里不谈,欢迎找我交流。其实整体的指导思想还是可信和纵深的理念。
实践结果
实战检验效果方面,已经大幅提升对已知攻击手法的预期内和实际检测比例,同时提升可以对抗未知攻击手法的白名单策略占比。举个具体的例子,比如在本年度外采演练中,我们在邮件方面做的白名单检测策略,对所有已知钓鱼邮件应检尽检。但还是要客观看这个结果和过程,因为复杂度的问题,网商的员工体量也就几千号人,换到主站几万人,同样的策略是否还能达到同样的效果呢。
技术沉淀和技术影响力方面,经过系统性总结过去三年的实践,我们沉淀了一套白名单策略生成经验和方法,规模应用到了各个安全业务场景,因此也在1个月内申请了10+个专利,但距离预期目标把idea写完为止还有一段距离。
团队合作效果,也因事和团队内外有了更多的连接,结识了一批可靠的全天候战略合作伙伴。
展望和期望
对事,懒人更勤奋。目前我主要是人工做白名单策略,缺点很多,一是整个流程环节较长、成本较高、效率较低,做一条白名单策略可能需要几个工作日,二是经验和方法不易复用,沉淀的经验和方法更多是在个人脑子里。因此,计划探索打造一个基于专家经验和大模型的可信策略智造中心(开始做一些想法的探索:我让大模型替我做可信策略,和前段时间OpenAI新出的网络安全资助计划异曲同工),短平快做策略。大处着眼,黑名单替换为白名单已经成为趋势,因此防御和感知等各安全业务方都会有共同的强需求,所以设计之初也需要考虑到这些因素。小处着手,计划先以我自己这块业务作为试验田先承载起来,验证可行再横向扩展。
对自己,“夹带私货”把个人目标写入绩效目标。互联网行业,工作时间能占到全天的一半,始终认为工作如果只是工作,OKR只被动罗列一些工作事项、机械式地执行,那也太无趣了,太浪费生命了。工作还是一项个人事业,所以“夹带私货”把个人目标融入工作绩效目标中,合二为一,为公司打工的同时,也是在打造自己这个产品,是不是会有趣一些。
以上这些事也算是一个对我过去近三年工作的总结和缩影,但个人的视角再怎么所谓的系统,也可能会陷入信息茧房,所以也期望得到读者的反馈和挑战,帮助我做的更好。