企业源码泄露排查思路与处置流程
一、基础信息搜集
当面对突如其来的源代码泄露事件时,很多人摸不着头脑,这也想搜那也想搜,但已知的信息只是朋友说的一嘴或者一个局部截图,又无从下手,这就让人苦恼,心里想着这玩意应该不难,但是又不知道从哪开始,半天不知道干嘛,影响排查效率,我也是这种情况,所以今天总结出这篇文章。
面对这种的未知情况,可以分三步走。第一步是尽可能在和当事人的对话中搜集足够的信息,方便后续排查,也更有方向性,第二步才是平常关注的怎么查,这个时候就根据已知信息进行排查,第三步就是收尾工作做些应急处置,尽可能减少泄露信息,加强防护,人员行为规范管控等。现在站在乙方身份去做源代码泄露事件应急,我们要搜集如下信息:
-
优先了解客户信息
|
|
|
|---|---|
| 公司完整名称 |
|
| 公司日常简称 |
|
| 公司英文缩写 |
|
| 公司iocn图标 |
|
| 公司英文名称 |
|
| 发现时间 |
|
| 品牌或商标名 |
|
| 曾用名或旧名称 |
|
以XX公司举例,我们在和客户对话过程时,要知道公司全称:XX集团有限公司,要问日常对内对外简,公司简称:XX,这个简称有可能就是泄露的代码仓库名称,公司英文缩写:abcd、ad,当前品牌或商标名,iocn图标:公司logo等都是为了之后搜索做铺垫,我们可以去资产汇测平台以不同的语法搜索,在不知道在哪泄露的情况下我们可以扩大搜索范围。
-
优先了解泄露途径
| 泄露途径 | 优先级 |
|---|---|
| 是否知道线索来源,谁发现的?在哪看到的? | 高 |
| 是否有员工使用公共代码仓库存储公司代码 | 高 |
| 是否有外包、第三方开发过该系统 | 高 |
| 是否在暗网、论坛、黑产群等平台看到交易或售卖 | 高 |
泄露路径是一个很重要内容,可以直接奠定排查泄露事件的方向,减少很多不必要的手段和排查事件,能快速定位事件的源头。有时候客户说是朋友看到告知他的,那么再问问这个朋友说是在哪看到的?如果是公共代码仓库,直接搜索公司名可能就能找到代码来源和对应的账号,就能找到人。找到泄漏出处后,务必需要留意账号名称或者联系方式。
-
泄露特征
| 泄露特征 | 优先级 |
|---|---|
| 代码专属命名,如:有无固定项目名,如project-A-v2.0? | 低 |
| 特有注释,如:代码里是否有固定注释、备注、人名? | 低 |
| 了解特有变量或前缀,如:数据库前缀、接口前缀、包名、类名 | 低 |
泄露特征主要是辅助排查泄露源,以及验证泄漏代码本身的真实性。
-
危害等级
| 危害等级 | 优先级 |
|---|---|
| 是否包含数据库账号密码等 | 高 |
| 是否包含第三方密钥、云密钥、内部密钥等 | 高 |
| 是否包含内网地址、VPN、后台地址等 | 高 |
| 是否包含核心业务逻辑、核心算法、流程、配置、秘钥等 | 高 |
判断危害等级主要是自评估下代码泄露造成的影响范围,后续的密码需不需要更改、后台地址需不需要变更、需不需要做代码审计、需不需要通报人员、需不需要更改防护策略、需不需要报警或上报监管。一般在和客户对话时,稍微问一下,调整事件后续的应急处置方式,若是找到泄露代码,更方便了后续的处置。
二、排查方式
(一)关键字搜索
根据前期信息搜集的内容,选取一些关键内容进行单个检索或者组合检索,方式如下:
常用的是搜索公司名称
-
公司全称 -
公司日常简称 -
公司英文缩写
其他关键字
-
代码项目名称 -
代码变量命名 -
开发语言 -
标签 -
来源 -
…
下面推荐一些地址,搜索时优先试常见或常用的平台,以便提高效率
(二)网络安全资产测绘平台
鹰图(Hunter):https://hunter.qianxin.com

360Quare:https://quake.360.net

Fofa:https://fofa.info

零零信安:https://0.zone/

(三)公共或自建代码仓库
Github:https://github.com/

Gitee:https://gitee.com/

Gitcode:https://gitcode.net/

GitLab:https://packages.gitlab.com/gitlab/gitlab-ce

Gitea:https://dl.gitea.com/gitea/

Gogs:https://dl.gogs.io/

(四)文档或协作平台泄露
语雀:https://www.yuque.com/search

飞书:https://www.feishu.cn/

石墨文档:https://shimo.im/

(五)网盘或文件分享平台泄露
国内网盘:
百度网盘:https://pan.baidu.com/

阿里云盘:https://www.aliyundrive.com/

凌风云盘:https://www.lingfengyun.com/

超能搜:https://www.chaonengsou.com/

其他资源网盘搜索导航站:https://www.bilibili.com/read/cv18092458/?opus_fallback=1
国外网盘:
GoogleDrive:https://drive.google.com/
Mega.nz:https://mega.nz/
(六)专业源码站点排查
站长之家下载:https://down.chinaz.com/

刀客源码:https://www.dkewl.com/

(七)国外的交易平台或论坛
exploit.in:https://exploit.in/

darkforums.su:https://darkforums.su/

HackForums:https://hackforums.net
Telegram黑产群组:https://telegram.org
(八)谷歌语法
谷歌:https://www.google.com/

site:指定域名,如“apachesite:bbs.xuegod.cn”,可查询网站的收录情况。
inurl:限定在url中搜索,如“inurl:qq.txt”,可搜索url中包含特定内容的页面“inurl:admin_login.asp”,可查找后台登录页面。
intext:搜索网页内容里面的关键字,如“intext:user.sqlintitle:index.of”,可查询包含user.sql用户数据库信息且网站目录开放的页面。
Filetype:指定文件类型,如“Kalifiletype:torrent”,可搜索指定关键字和文件类型的内容。
intitle:搜索网页标题中的关键字,如“intitle:index.of.bash_history”,可查找标题包含“index.of”且能显示网站目录下特定文件(如.bash_history)信息的页面;“intitle:index.ofconfig_global.php”,可查找标题包含“index.of”且与config_global.php文件相关的页面。
link:返回所有指定域名链接(文中未详细举例)。
info:查找指定站点信息(文中未详细举例)。
参考:https://blog.csdn.net/fanjinhong_8521/article/details/147879953
(九)备份文件扫描
dirsearch目录扫描工具:https://github.com/maurosoria/dirsearch
命令:dirsearch-uhttps://example.com-wsource_leak.txt-ocustom_scan.txt

三、应急处理
处理方式一般从按照泄露程度和泄露渠道这两个方面结合处理
泄露程度分三种,轻度、中度、重度,按照如下处理:
-
轻度泄露
轻度泄露情况指的是:仅框架、空项目、无敏感信息等轻微泄露,不影响系统安全与业务运行的情况。
这种情况的处理需要先确认泄露位置,要求删除或下架,同时内部告知开发或运维,禁止再上传,在这个过程中截图留存证据。
-
中度泄露
中度泄露情况指的是:含配置、接口、文档、部分业务代码、少量内网信息等涉及一些内部敏感信息的泄露情况。
这种情况的处理需先确认泄露位置,立即下架或删除泄露文件,审计代码泄露数据,及时更换密钥、数据库密码、Token等,之后扫描公网是否有多处泄露评估泄露范围,在这个过程中截图留存证据。
-
重度泄露
重度泄露情况指的是:核心业务逻辑、业务源码、大部分或者全量代码、数据库密码、API密钥、配置信息、接口等敏感信息泄露可直接导致系统被入侵、数据泄露、业务瘫痪的情况。
这种情况的处理是需要先确认泄露位置,及时下线暴露服务或修改所有密码密钥,对系统进行全面安全加固,泄露的源码进行代码审计,同时加强该业务系统日常安全告警监控,在这个过程中截图留存证据,必要时报警。
不同泄露渠道处理方式,如下处理:
-
公共或自建代码仓库泄露
删除公开仓库或改为私有,搜索是否被镜像、fork、二次上传,投诉下架。
-
文档或协作平台泄露
将文档设为私密或删除,检查历史版本、分享记录,收回所有外部分享链接。
-
网盘或文件分享平台泄露
及时取消分享、删除文件,若是专业源码站点泄露,联系平台投诉侵权下架。
-
网站目录泄露
服务器端删除.git、备份文件,关闭目录浏览,Nginx/Apache禁止访问敏感文件、目录。
-
暗网/HackForums/Telegram黑产售卖
固定证据(截图、链接、发布人),评估是否真实泄露,及时更换密钥、账号密码、配置信息等,必要时报警或上报监管。
注意:所有的过程都需要留存截图记录,保持留痕
事件后续公司层面的处理:
-
进行内部复盘与责任认定,梳理泄露原因、泄露路径、责任人,该通报就通报。 -
完善制度与规范,明确禁止将公司代码、配置、文档上传至公共平台,针对第三方公司开发的代码保存要求也要覆盖到,转入内部搭建的代码仓库。 -
加强安全培训,对开发、运维、测试人员开展安全意识培训。 -
技术加固与常态化巡检,定期对公网资产进行敏感文件扫描,持续关注控GitHub、Gitee、网盘等平台泄露信息,向厂家购买公司情报监控服务。
四、案例分享
某日,有个客户找到我说他公司可能有源代码泄露事件,需要我辅助排查。
客户知道这个事情是因为:有个朋友告诉他,他公司的源代码貌似泄露了,然后在晚上的时候发送了一张标记了他公司的简称局部截图,然后就没说什么了,那朋友晚上就睡觉了,第二天早上可能在忙,没回信息。

面对这个信息不全的情况,我按照自己的源代码排查流程走:
第一步:尽可能在和当事人的对话中搜集足够的信息
第二步:根据已知信息进行排查
第三步:应急处置
-
信息搜集
我对客户问了些其他问题,公司简称、公司英文简称、有没有旧的公司名称、公司一些iocn图标,然后我这边先根据这些线索找找看,同时他那边再继续联系他朋友,问问源头在哪,泄露代码的内容有多少。随后我梳理了下已知信息有:
-
公司全称 -
公司简称 -
公司英文简称 -
iocn图标 -
某个代码仓库泄露(原因:页面关键字、页面布局风格综合分析) -
发现时间:X月X日 -
当前省份
-
根据已知信息进行排查
之后我的寻找方向就是指向公共代码仓库或私有代码仓库,需要排查的手段也就是选择了资产汇测平台、公共代码仓库、谷歌语法。
我就拿着公司全称、简称、英文简称去 github/gitee/gitcode 等平台搜索,未发现泄露的代码仓库,简单分析后判断可能不在公共代码仓库中。
github 语句:"XX" in:name,description,readme is:public

随后怀疑可能是自建代码仓库,将尝试在资产汇测平台和使用谷歌语法,带着公司全称、简称、英文简称、代码仓库、当前省份等信息去搜索。
一般自建私人代码仓库有:GitLab、Gitea、Gogs
通过搜索多个资产汇测平台,搜索关键字为:私人代码仓库和页面关键字,没发现仓库信息,随后跟客户再沟通了下,他说明了公司内部有代码仓库,不对外,并且内部服务开放到外网需要提交流程审批,实施时通过负载均衡做端口映射才可开放外网,所以基本判断不是公司代码仓库开放外网导致的泄露,有可能外包公司自建搭建的代码仓库,上传了代码,之后我就得到了另一个信息:外包公司名称”XX 科技公司”,通过 hunter 语法筛选到该公司的代码仓库
hunter 语法:(web.title:”GitLab” OR web.title:”Gogs” OR web.title:”Gitea”) AND ip.province:”XX省” AND icp.name=”XX科技”

最终访问外包公司的仓库,也确实发现了问题。这个仓库无需登录,直接可搜索客户公司简称,就有了对应的代码仓库,也可直接下载

-
应急处置
找到源头就好办了,客户联系外包公司下架该代码仓库,由于泄露了一定的代码量和数据,算是中度泄露情况,需要审计代码泄露数据,客户那边及时更换了密钥、数据库密码、Token,之后客户对外包公司进行交涉,而后在制度中新增第三方公司开发的代码保存要求,对公司开发、运维、测试人员开展安全意识培训。
五、参考文章
【源代码外泄防范对策(上)】
https://mp.weixin.qq.com/s/i6L_8sFyL13R0dbrgiIpLg
【源代码外泄防范对策(下)】
https://mp.weixin.qq.com/s/WTgR_mACa4EPQrGidaIdxg
六、结语
-
一般来说,就是在自己公司不知情的情况下泄露的,然后朋友突然告知或者哪里通报的,所以只能有些初步信息去搜集,比如就是拿着公司名称盲着去找,只能挨个方法试一遍了 -
就提供一些资源和方向吧,这些方式使用也不复杂,搜就行,就不出具体教程了,主要是分享一些处理方式和完整的处理流程 -
实际上代码泄露排查的准确性,会受个人所处环境、账号权限、数据开放度等多个因素的影响,排查结果存在不确定性。注意:安全厂商具备更全面的内部数据、持续监测能力与商业情报资源,个人是比不了的。
-
最后写个免责声明:本文所分享的源代码泄露排查思路与方法,仅为个人日常实战经验总结,仅供大家学习参考、梳理排查方向,不代表 100% 能定位到所有泄露点。
夜雨聆风
