鬼故事 这边有一批设备,有需要打这个电话

[鬼故事] 这边有一批设备,有需要打这个电话

https://ithelp.ithome.com.tw/upload/images/20210901/20141165JUlFrOLGHn.png
Credit: 食神

故事开始

以下故事纯属虚构,如有雷同那就雷同

Image titled Open a Door with a Credit Card Step 4

Credit: wikihow

如果你在生活中看到你家大门可以用这种方式开门,一定会觉得很蠢很不安全吧,
在现实生活,要偷你东西还必需人到大门前。
而你有想过你买的摄影机或是其他网路设备,搞不好也有类似的问题?

故事主角:小弯

小弯是大学刚毕业的菜鸟 RD,公司主要就是开发网路设备,
进去公司的第一周前辈要他熟悉程序码,但当他打开程序码以为他看错了,
一个网页里面 php 包 js ,js 里面又包 php,让他想起来一段影片 鸡包纸 纸包鸡
如此精美的程序码,小弯当然是不敢动,前辈也叫他先看就好。

就这样过了第一个月,小弯逐渐了解程序码,某天上班主管要求紧急开会。
原来是客户 SOC 厂商间接通报公司产品有远端执行程序码的问题,
小弯这时候想:「这麽重大的漏洞,骇客肯定很厉害吧!」,立马说想要帮忙修这个漏洞来展现工作能力。

现实往往没有电影来的那麽好看,原来骇客是透过网页上面有测试网页的功能,
而前端没有做任何验证,後端 100% 相信前端的资料,後端收到网址会直接把指令做执行,也就是所谓的 Command Injection

小弯想说这不是非常基本的事情吗,怎麽会有这种低级的错误在程序码里面?

小弯随後就开始认真的去研究产品的程序码安全性,发现有类似的问题至少有 10 多个。
随後很高兴的跟主管回报这些问题,但就单单这一个漏洞修复到发布是在三个月之後了,而公司的计划就是默默出更新包供客户自行更新,所以这些有漏洞的版本依旧存在於野外。

可怕的是类似小弯所在的公司在世界各地非常多,许多都是小公司并且最常提供合作的方式就是提供 OEM 版卖给其他厂商换成他们的名字,如此一来就变成国产、日产的设备了,并且搜寻不到 CVE 编号(根本没有想过主动回报),就算有编号也因为品牌名称完全不同难以搜寻,所以在表面上这些产品没有漏洞。

这类型设备/软件便宜又可以包装成国产,或许你正用着这些东西也说不定。

资安探讨

小型资讯公司该怎麽办

原本要写小弯所在公司的如何解决这件事,但重写整份程序码所投资的人力、时间很有可能超出产品实际获利。这类型的公司业务形式,相同版本的程序码可能有 2,30 个分支,每个客户都有一些功能上修改,导致维护与後续更新困难。

除了打掉重建这种建议,笔者认为还能从一些方向慢慢地去改进,有进步总比没进步好:

  • 积极面对漏洞,可思考为甚麽软件大厂基本上都愿意加入 MITRE CVE 的 CNA,认真面对漏洞有甚麽好处。
  • 建立良好的开发文化,并将漏洞逐步排入更新计画中,e.g. code review、避免纸包鸡的程序码、纪录所用的套件版本并追踪漏洞
  • 出货时程序做混淆,以增加攻击者外带程序回家研究的难度,防止更多安全性漏洞在短时间发生。
  • 主动学习常见的开发错误,在开发时注意安全 (e.g. 例如大部分网页开发人员都知道的 OWASP Top10 )

国产还是国惨?

这篇鬼故事并没有要表示便宜就是不安全,就连国际大厂都经常出现漏洞,
架构造成的资安问题其实也存在於大厂中,但人家修比较快,资安人员也比较喜欢挖他们漏洞。

台湾人不晓得为甚麽的,喜欢采用买断的方式而不是订阅制,
通常买了一两年之後就不续约,毕竟设备/软件能动,
没有续约没有维护漏洞自然就摆在那边。

但养最多熊猫的国家网军,最喜欢锁定挖掘这类型的设备,
但他们不会回报 CVE 只喜欢默默地挖掘,
网路边界第一线的设备又有一堆资安问题,取你我的资料如探囊取物。

企业采购设备应该要考虑资安的部分,笔者最讨厌价格最低标这件事,
常常将资安这件事排除在外或是用很简单的规格涵盖。
小弯的公司也应该负起部份社会责任,持续改善产品的资讯安全,
不然政府推动用国产软硬体的同时漏洞也共享在你我的网路环境。


<<:  Day 1:过时的 Android 口罩地图 APP 应用程序 ?!

>>:  [DAY1] 新的一天,新的开始

MySQL 数字类型资料之基本操作

所谓数字类型大致分为以下几种: 每种类型都有不同的范围及其最大最小值。 可以针对不同整数类型插入值,...

Day 1.开赛前的小心得

前言 从去年就看到学长们在做铁人赛崩溃的样子,没想到这麽快,今年换我们了(;´༎ຶД༎ຶ`) 对於刚...

【C language part 4】阵列与字串&函式

阵列 阵列是一群具有相同名称或资料型态的变数集合。 由於整个阵列中的变数均具有相同的名称,因此若要存...

RISC-V on Rust 从零开始(6) - 使用Spike模拟器

其实RISC-V官方也有开发了一个instruction accurate等级的模拟器Spike,只...

Day17 - 铁人付外挂前置作业(二)- 开发环境

在自己的电脑中建立一个 WordPress 需要的材料有 PHP、Apache or Nginx 以...