首页 文章 精选 留言 我的

精选列表

搜索[AI搜索],共10000篇文章
优秀的个人博客,低调大师

AI开发牧安 ·第17期 给每根探针发张离线“身份证”

记录牧安平台从 0 到 1 的开发过程,一个待业在家的网安老兵边做边想。 流量探针一般是塞在客户内网的。客户的机器、客户交换机旁边的镜像口,探针就蹲在那儿嗅流量。而SOC 平台可能在云端(反正MSS肯定在云端)。中间隔着 NAT,隔着防火墙,隔着客户那台谁也不敢乱动的出口路由。 那这台"哑巴"探针,怎么合法地、安全地跟云对上话? 最容易想到的办法是注册码:探针出厂带个码,第一次开机联网、找中央注册服务报到、领一套凭证。这套在 SaaS 里很顺。但落到"小客户内网 + 平台在公网"这种现场,就别扭了——探针能不能出网不一定,中央注册服务能不能被探针访问到也不一定,客户还未必愿意给探针开那么多权限。 ## 我的解法:离线发一张"身份证" 我最后用的是另一套:**离线发身份证**。**请注意,这不是liencese。** 上级平台(客户本地的 SOC,或者云端的 MSS)在后台点一下"导出注册文件",生成一张加密的 `.shepb` 文件。这张文件就是探针的身份证。把它用 U 盘、或者运维通道,拷到探针那台机器上,探针本地"导入"一下,自己解密、自己把对接配置填好,重启,上线。 不依赖探针能出网,不依赖什么中央注册服务。隔离网里也能发。 ## 一张身份证里装了什么 叫它"身份证"不是比喻,是真像一个证件该有的字段: - **•**`agent_id` :身份证号,全局唯一。 - **•**`agent_token / agent_token_secret` - `:上报用的 Bearer 凭证和 HMAC 签名密钥,相当于证件上的防伪章和私章。` - **•**`customer_id` :它归哪个客户。凭证和归属必须同源配对,不能拿 A 家的号填进 B 家的网——这是红线。 - **•**`org_name / department_name / region_name` - `:机构、部门、区域,等于证件上的"籍贯"和"住址",落到探针本地,再传数据给上级平台,就知道这条数据是谁家的、在哪个区了。` - **•**`l2_base_url + l2_ingest_path` - `:它该去敲哪扇门、走哪个入口(比如 http://:8801/v1/ingest)。` 导出端把这些都塞进一个 bundle,加密,吐出一个文件。探针导入端解密,按字段分别写进 `config.json`(对接配置)和 `instance.json`(归属信息),完事。 ![](https://developer.qcloudimg.com/http-save/audit-7337940/175cf0c339b9cab93fd7e9535f29795f.png) ## 三套链路,一张身份证通吃 实际部署就三种形态,我们全用同一套 `.shepb` 打通,差异只有一个 `target` 字段: - **•****探针 → 本地平台(L3→L2)** :客户自己有一台本地运营平台,探针对接它。 - **•****本地平台 → 云端(L2→L1)** :本地平台再把数据往云端 MSS 汇总。 - **•****探针直连云端(L3→L1)** :小客户只有云 + 探针,没本地平台,探针直接报云。 `target` 标的是 `L2` 还是 `L1`,探针导入时就读这个字段决定把 `webhook_url` 拼成本地地址还是云端地址。老 bundle 没这个字段的,默认按 L2 处理,不破坏现有链路。 加密本身用的是 Fernet(AES-128 + HMAC-SHA256),三端硬编码同一个共享密钥串。 ![](https://developer.qcloudimg.com/http-save/audit-7337940/94137daa665936b1fa2af60bf0304775.png) ## 踩过的坑:第一版根本导不进去 这套机制第一版上线时,我在 L3 导入里点"选文件",前端直接弹「导入失败」。 查下来根因不在探针,在上级平台的导出端: - **它导出的居然是明文 JSON** :不是密文。探针解密第一步就 `InvalidToken`——你给人家看的是证件照片,人家要的是塑封原件,对不上。 - **缺了 6 个必需字段** :没有 `schema` 标识,没有拼地址用的 `l2_base_url` / `l2_ingest_path`,没有写归属用的 `org_name` / `department_name` / `region_name`。缺一个就 `KeyError` 报 400。 - **字段名还写错了** :探针要的是 `region_name`(区域名称),导出端给的是 `region_id`。同名不同物,等于证件上籍贯栏填了个编号。 修法是让导出端老老实实按契约来:先加密、再补齐全部字段、把 `region_id` 改成 `region_name`、`customer_id` 传字符串。探针那侧的导入契约是稳定接口,不动。 另一个更隐蔽的坑:导出端原本用环境变量派生密钥、还把密文又包了一层 `{"format":...,"payload":...}` 的外壳;而探针端锁定的是硬编码常量、且直接对裸密文 `Fernet.decrypt`。**密钥不同、包裹不同,两端永远对不上**。最后统一成"三端逐字节一致的共享常量 + 文件即裸密文",这个坑才算填平。 **顺便记一条铁律:探针只有一个 **`webhook_url`**。导入 L1 的身份证会覆盖 L2 的——所以直连云和对接本地平台是互斥的,按部署场景二选一,****别想两头接****。** ## 说句实话:这把锁防的是"丢",不是"偷" 共享密钥是硬编码在代码里的。这意味着 `.shepb` 防的是**明文泄露**——U 盘掉了、文件传错人了,捡到的人打开是一串密文,读不出凭证。但它**防不住拿到代码做逆向的人**:密钥就在二进制里,有心人能扒出来。 当前这个 MSS 形态我判断能接受:身份证是"一次一密"的,每次导出都是新的 `agent_id` / `token`,丢了单张可以单独吊销,不会牵连别的客户。真要更狠,得升级成"操作员口令 + 每次随机盐",那是以后的事,不在这一版范围里。 这点我不藏着。做安全产品的,自己用的加密方案几斤几两,得跟用户交底。 --- **记录牧安平台从 0 到 1 的开发过程,一个待业在家的网安老兵边做边想。**

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册