做安全这行久了,最头疼的往往不是核心机房的服务器被攻破,而是那些散落在各地的终端。早晨还在公司内网访问OA的笔记本,晚上就出现在咖啡厅的公共Wi-Fi上;研发机、测试机、云主机分布在不同的网络和账号下,Windows、Linux、macOS混在一起;再加上远程办公、外协人员自带设备这些场景,终端天生就是分散的,这一点谁也改变不了。
终端一旦分散,安全问题就会变得非常具体:补丁打不齐、杀毒软件版本落后、账号密码复用、有人私自改了防火墙规则、有人把内网端口暴露到了公网。而几乎所有攻击链的最后一环,都会落到终端上——钓鱼邮件发到你的邮箱,恶意安装包下载到你的硬盘,勒索病毒在你屏幕上弹出警告。终端安全是整个安全体系里最琐碎、最容易被忽视、又最让人头疼的一环。
这篇文章我想把自己这几年做终端安全运维和应急响应积累的东西整理一下,重点聊一件事:当终端散落四方,安全靠什么才能凝聚成墙。内容会覆盖终端安全防护体系怎么搭、EDR产品怎么选、Linux终端怎么加固、终端运维里那些高频故障怎么排。不管你是刚接手终端安全的运维工程师,还是想顺手给开发机做点防护的普通开发者,应该都能在下面找到能直接抄作业的部分。
1. 终端散落四方面临的真实挑战
1.1 三种最容易失控的终端场景
先说场景。我接触过的不少团队,对终端安全的认知还停留在"每台电脑装了杀毒软件就完事",但实际管理的终端早就不只是"装了杀毒软件的电脑"了。
第一种是跨地域的办公终端。公司几十个分支机构加一堆居家办公的员工,电脑分布在完全不同的网络环境里。有的连的是家里的路由器,有的连的是酒店Wi-Fi,有的干脆用手机热点。网络出口不受你控制,DNS解析可能被劫持,连进的Wi-Fi可能是隔壁搭的钓鱼热点。这种环境里,你没法指望靠"内网边界"来保护终端——边界已经不存在了,每一台终端都必须能独立形成防御。
第二种是研发和测试环境遍地开花。开发机、测试服务器、CI构建机,Windows、Linux、macOS、容器全都有。开发机要跑编译器、要装各种依赖,安全软件装重了编译慢得让人抓狂,装轻了又等于裸奔。还有大量临时搭建的测试环境,生命周期只有几天,往往没人管补丁和基线,出了事才想起来原来还有这么一台机器。更麻烦的是,研发终端里存着源码、密钥、服务器地址这些高价值数据,被盯上的概率远高于普通办公终端。
第三种
