某工业软件企业的安全团队复盘过一次代码外流。
源码仓库有权限控制,外设拷出有告警,外发要过审批,三道都齐。
可那位离职工程师带走的,不是仓库里的代码。
是他本机上编译出来的调试版本,里面带着完整的符号表和函数名。
还有几份编译中间产物,散在临时目录里,从头到尾不归任何一道管控。
记录翻到最后,结论是:防住的都在仓库里,散掉的都在仓库外。
一、编译这一步,为什么容易漏
防泄密的注意力大多落在源码上,而源码恰恰是管控最严的一环。
真正散出去的,常常是源码之外的那些东西。
1. 源码有版本控制,编译产物没有
仓库里的代码有权限、有提交记录、有审计。
编译器在本地生成的东西没有:目标文件、中间产物、依赖缓存、打包目录,落地即散。
它们的存放位置由工具链决定,不固定,也很难被"按目录保护"这类策略整段覆盖。
2. 编译要在本机铺开一整套工具链
一次完整构建,本机上要跑起编译器、构建脚本、包管理器、代码检查、单元测试。
这些进程都要读写源码目录和缓存目录,拿到的权限不小。
而它们本身又是正常的开发工具,在黑白名单里天然属于该放行的那一类。
要防的不是这些工具,而是有人借它们的手,把不该带走的东西带走。
3. 调试版本比源码更容易读懂
发布版本会剥掉符号表、去掉调试信息。
调试版本保留函数名、变量名、行号,反编译之后基本就是一份可读的源码结构。
也就是说,守住了仓库,未必守住了代码。
二、思路:把编译这件事整体圈进隔离区
既然要防的是散落,做法就不是给每个文件单独加锁。
而是把编译涉及的文件全收进一处,让它出不去。
业内把这块地方叫保密沙箱,落地形态是一块独立的隔离空间。
它管的就一件事:让核心文件在一台机器上只进不出。
1. 独立的空间,单独划分、开机自动挂载
这个功能解决的是"文件放哪"的问题:让编译产物有一个固定的家,不再散落在各处临时目录。
这块区域不和普通磁盘目录混放,单独划出来。
开机自动挂载,开发者不用记路径,工具链配一次就一直有效。
容量由管理员统一设定,也可以按部门分配,避免一个人把空间占满。
2. 只有名单内的程序能碰里面的文件
这个功能解决的是"谁能动这批文件"这一环。
(1)在这块空间里创建、编辑、打开文档,只有事先列入名单的程序可以做。
(2)名单外的程序连打开都不行,谈不到另存和复制。
(3)同一台机器上能碰到这批文件的,就只剩那几个编译器和开发工具。
(4)子进程算不算在隔离范围内可以单独配置,避免有人借一个被授权的工具,去调起另一个程序处理这些文件。
3. 沙箱内不加密,离开沙箱自动加密
这个功能解决的是效率和管控的矛盾:编译要快,文件又要带不走。
它也是保密沙箱和透明加密配合的地方。
编译要反复读写,加解密开销堆在构建上,构建时间会被拖长。
所以在这块区域内文件保持明文,编译快,工具链兼容性也好。
一旦文件被移出这块区域,自动加密,离开受控终端就打不开。
4. 外发同样收口
禁止程序外发管的就一件事:把聊天工具、邮件、网盘这些常用出口,从沙箱里摘出去。
(1)只有授权沙箱的程序可以外发文件。
(2)其他程序,包括聊天工具、邮件客户端、网盘客户端,发不出沙箱里的文件。
对编译场景来说,这一条挡的正是最常见的路径:把产物拖进聊天窗口发走。
三、它管得住什么,管不住什么
1. 管得住的是落点与流转
文件在哪里创建、被谁打开、能不能发出去,这三件事在隔离区里是明确的。
对"编译产物随手拷走"这类动作,它是对症的。
2. 管不住的是纳入范围之外的一切
(1)没被纳入隔离区的目录和程序,不在它的管辖内。
(2)屏幕拍照、手抄、口头带走,隔离区一样拦不住。
(3)构建配置如果指向了区外目录,产物仍然会落在外面,所以上线前要把构建脚本过一遍。
3. 代价落在使用方式上
隔离改变的是开发习惯:构建、调试、取产物都要在指定环境里完成。
对习惯了自己配环境、自己定目录的开发者来说,这个改变比技术本身更难接受。
四、落地先做四件事
1. 第一步:把要护住的东西列出来
哪些是核心算法,哪些是通用模块,值不值得为它划隔离区,由技术负责人定。
范围划得太大,日常构建都会被拖住。
2. 第二步:清点工具链
一次完整构建会拉起哪些进程、谁在写目录、谁在调外部程序,先跑一遍看清楚。
名单按实际进程来列,不凭印象。
3. 第三步:定外发路径
产物最终要怎么出去,走哪条通道、过不过审批,事先定好。
没定,开发者会自己找一条出路。
4. 第四步:小范围先试
挑一个构建流程标准化、新人多的项目组先上。
跑通构建、调试、发版三件事,再往其他组推。
五、小结
编译这一步容易漏,是因为注意力都在源码上,而散掉的是源码之外的东西。
保密沙箱管的就一件事:把编译涉及的文件整体收进一块隔离空间,用程序名单控制谁能碰,用加密控制谁能带走,用外发收口管住最后一条路。
它管的是落点和流转,管不了拍照和抄写,也会改变开发者的使用习惯。
所以在它之前,先要做的是划范围和清点工具链这两件事。
责编:安企神-小赵