V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
areless
V2EX  ›  程序员

开源框架的安全性问题,大家是如何妥善处理的

  •  
  •   areless · 2019-08-20 21:49:05 +08:00 · 6310 次点击
    这是一个创建于 1927 天前的主题,其中的信息可能已经有所发展或是发生改变。
    经常一个高危漏洞爆出来便是死一大片。旧项目一般都不会去升级框架吧?比起语言版本升级,开源框架版本升级更频繁且代码兼容性更差。。。这种解决 uri route、orm 基础问题的才是一两年经验该造的私有轮子,但是现在会自己造轮子的人越来越少,熟练使用轮子的越来越多,轮子坏了真的是有共产主义社会来修理?我想未必吧?从 thinkphp 旧版大漏洞殃及 PHP 圈就可以略见一番,很多语言在走 PHP 的老路。那么不开源写原生是唯一的解决办法了?
    54 条回复    2019-08-23 09:52:31 +08:00
    Takamine
        1
    Takamine  
       2019-08-20 22:14:07 +08:00 via Android
    如果造轮子的收益远大于突然死一片的几率和从死掉到修复正常之间的损失,那才会选择自己从头造轮子吧,最多重构部分。
    而且注重安全性的话肯定会从多方面做防护体系,不依赖单一框架做保证。
    另外也肯定是会选一些社区活跃,经过一定时间生产验证的框架。
    SuperMild
        2
    SuperMild  
       2019-08-20 22:19:23 +08:00 via iPhone   ❤️ 13
    自己做的轮子漏洞更多,如果自己做的轮子更高质量,有这能力完全可以直接审查和改进开源代码,反哺社区,也比自己做轮子省力。
    icy37785
        3
    icy37785  
       2019-08-20 22:42:21 +08:00   ❤️ 1
    为什么会觉得自己造轮子比开源框架漏洞少。
    tomczhen
        4
    tomczhen  
       2019-08-20 23:38:00 +08:00   ❤️ 2
    是否开源并非是否安全的充要条件,工程代码的可靠性是需要各种“成本”覆盖来保障的,其中有一条就是快速响应修复。

    当然,有些人觉得只要没暴露出来安全问题就没有安全问题,我只能说,看看牙膏厂这两年的 CPU 安全漏洞,是不是要打算从 CPU 开始造轮子?
    whoami9894
        5
    whoami9894  
       2019-08-20 23:38:21 +08:00 via Android
    临时造轮子漏洞更多+1,比如某些 PHP CMS 自己做 SQL 安全过滤,不去用现成的 ORM 或参数化查询
    chinvo
        6
    chinvo  
       2019-08-20 23:41:32 +08:00 via iPhone   ❤️ 1
    安全领域切忌闭门造车
    agdhole
        7
    agdhole  
       2019-08-20 23:49:46 +08:00 via Android
    用 lts 版本
    lshero
        8
    lshero  
       2019-08-20 23:59:33 +08:00 via Android   ❤️ 1
    先把安全部署做好,框架暴露的特征消除再说
    免得被人一扫描就知道你用的是有漏洞的框架
    coloz
        9
    coloz  
       2019-08-21 01:09:40 +08:00
    和开源有毛关系,闭源的就不会有 bug ?
    通常不是觉得开源的 bug 修复更快么?
    areless
        10
    areless  
    OP
       2019-08-21 05:37:50 +08:00
    @icy37785 @coloz @chinvo 因为我发现,现在的快速入侵一般从开源的已知的漏洞,通过摸热门开源框架的版本号下手。几乎没人能快速对闭源自造轮子下手,哪怕你写的再糟糕,人家也没那个耐心去渗透了。

    @whoami9894 实际情况恰恰相反吧……看不懂规则的简单 SQL 安全过滤远远比开源的 ORM 更安全。虽然漏洞更多,却不容易被入侵。
    zjsxwc
        11
    zjsxwc  
       2019-08-21 06:33:50 +08:00 via Android
    闭源比开源更安全?

    Windows 比 Linux 病毒更少?

    作为用户更信任闭源软件会比开源软件不作恶?

    闭源软件会更小几率比开源软件携带官方编写的恶意代码?
    zjsxwc
        12
    zjsxwc  
       2019-08-21 06:37:27 +08:00 via Android
    @zjsxwc #11 原文:“闭源比开源更安全? Windows 比 Linux 病毒更少?作为用户更信任闭源软件会比开源软件不作恶?闭源软件会更小几率比开源软件携带官方编写的恶意代码?”
    回复:


    试问如果一个闭源软件员工,他在入职后就获得了该闭源软件源码,并发现了漏洞(甚至就是故意恶意写了一个无法发现的漏洞),然后通过漏洞不断获利,你还会觉得闭源比开源更加安全?
    zeroDev
        13
    zeroDev  
       2019-08-21 07:10:07 +08:00 via Android
    感觉楼主可能需要多了解一下开源社区的运行模式
    msg7086
        14
    msg7086  
       2019-08-21 07:20:05 +08:00 via Android
    就拿 rails 框架来说。这框架本来就是某个互联网公司的系统里分离出来的。每一个漏洞都是他自己公司产品的漏洞,每个自己产品中的问题被修复,也会同样应用到开源框架中。

    现代的有名的轮子都有很多大公司在用,发现的漏洞都会很快修复。至于你用了别人的轮子又不升级,这怪谁。

    而且现在像是 GitHub 都支持扫描开源组件列表并自动提示你新发现的漏洞,这还能成为不用轮子的借口吗。
    martinsu
        15
    martinsu  
       2019-08-21 07:26:39 +08:00 via iPhone   ❤️ 4
    大家好像没明白楼主的意思。

    拿网站开源框架来说。因为使用的开发多,而源代码全部暴露,黑客更容易找漏洞,找到一个漏洞后还可以攻限一片网站。
    个人独立开发虽然也有漏洞,但黑客看不到源代码,相对提高了破解的难度。而黑客破解后也只有收获一个网站,相当于降低了奖励。

    虽然开源过程中,社区会纠正错误,但这个纠正是滞后的。好比是黑客还是社区先发现漏洞。

    现实情况也正是如此,针对 wordpress 的类似情况的攻击发生不少。
    whoami9894
        16
    whoami9894  
       2019-08-21 07:35:26 +08:00 via Android
    @areless
    自己的过滤很大可能有遗漏的过滤,并不能因为觉得攻击者不熟悉就认为更安全,CTF 里多的是黑盒注入的极限绕过。
    就比如密码学中的常识,不要用算法的保密性来保证密码系统的安全,而应该用那些公开算法并经过检验的密码算法
    而且你说的这个"漏洞更多却不容易被入侵"我是没太理解

    ORM 一般没爆 CVE 基本就是安全的,毕竟是庞大基数开发者使用的,假如爆出 0day 就只能关注着及时更新了
    wweir
        17
    wweir  
       2019-08-21 07:46:23 +08:00 via Android
    @martinsu 这个成立的一大前提就是:网站太小,没有竞争力,攻击者无利可图。
    这样的话,针对开源框架稍作定制,远比从头撸靠谱
    TangMonk
        18
    TangMonk  
       2019-08-21 07:48:55 +08:00
    PHP 只认准 Symfony
    murmur
        19
    murmur  
       2019-08-21 08:09:01 +08:00
    做好备份,别无他法,如果按照规定一行一行审计代码公司都凉了
    areless
        20
    areless  
    OP
       2019-08-21 08:24:45 +08:00 via Android
    @whoami9894 但是大部分都是工具使用者,不是专业黑客。打个比方就是使用了枪这种武器的很多,爆破专家不会很多。
    @wweir 能对框架进行订制~~~基本都能自己写框架了,那是将现有框架私有分叉的行为了。
    likaka
        21
    likaka  
       2019-08-21 08:55:32 +08:00
    java 是世界上最好的语言
    way2create
        22
    way2create  
       2019-08-21 08:59:38 +08:00
    与其考虑这些,不如做好相应安全措施,选择更适合的框架,当然你要造轮子也随意,反正不是我造,我除非有必要,不然不会盲目造轮子
    passerbytiny
        23
    passerbytiny  
       2019-08-21 09:05:52 +08:00
    买锁容易串钥匙,于是摸索自制了一把锁,殊不知小偷真正的开锁手段是板砖砸。鉴于楼主开启了“装睡”模式,此贴忽略了。
    default7
        24
    default7  
       2019-08-21 09:07:31 +08:00
    不用 tp !!!
    default7
        25
    default7  
       2019-08-21 09:08:32 +08:00
    @icy37785 开源软件更甚,dedecms 帝国 cms,模板漏洞分分钟攻破整个网站。
    no1xsyzy
        26
    no1xsyzy  
       2019-08-21 09:31:20 +08:00
    @areless 你分叉出来之后不给其他任何人用也是自由软件哦
    另外,你以为开源里有的漏洞你不会写出类似的来吗?
    你只能防个自动扫描器。
    qsbaq
        27
    qsbaq  
       2019-08-21 09:55:30 +08:00
    我现在在的公司就是自己造轮子。我一来就发现了注入漏洞。。。
    个人感觉还是用开源靠谱,及时更新轮子靠谱。比较是集大成的东西。
    liprais
        28
    liprais  
       2019-08-21 10:04:40 +08:00 via iPhone
    一两年经验写 orm?
    你知道 orm 是啥么.....
    alphatoad
        29
    alphatoad  
       2019-08-21 10:22:31 +08:00 via iPhone
    计算机安全问题绝大部分都是糟糕的配置和没有安全意识造成的
    自己造轮子也是复刻已有的协议和算法,还更不安全
    qq565999484
        30
    qq565999484  
       2019-08-21 10:33:47 +08:00
    为什么。。很多人都认为自己的半吊子水平写的东西 比人家好几万 star 的开源代码要牛逼?
    ben1024
        31
    ben1024  
       2019-08-21 10:47:32 +08:00
    开源更安全,假装自己的项目没有 BUG,跟闭关锁国没什么区别。
    我大清乃泱泱大国
    cmonkey
        32
    cmonkey  
       2019-08-21 10:52:23 +08:00
    全部自研,怕是需要先拿出几个亿再说
    Raymon111111
        33
    Raymon111111  
       2019-08-21 11:01:46 +08:00
    这么讲的

    你说的"用自己的东西就算差也没人有耐心去找漏洞"这个肯定是站不住脚的

    比如 SQL 注入这种可是框架无关的
    gaigechunfeng
        34
    gaigechunfeng  
       2019-08-21 11:32:49 +08:00
    有轮子用还挑安全问题。信不信自己写的脸基本功能都会有问题。
    哈哈哈,反正我是不会自己造轮子的。当然主要是水平不够
    2kCS5c0b0ITXE5k2
        35
    2kCS5c0b0ITXE5k2  
       2019-08-21 11:38:49 +08:00
    掩耳盗铃 zzz
    tabris17
        36
    tabris17  
       2019-08-21 11:39:36 +08:00
    人家微软都自己造轮子
    ipwx
        37
    ipwx  
       2019-08-21 11:40:54 +08:00
    无利可图的网站,用开源框架即使有漏洞也没人关心。

    有利可图的网站,即使没代码,也会分分钟被人挖出漏洞(甚至是内部人员作案)。

    楼主你别乱想了,认清现实吧。
    wukongkong
        38
    wukongkong  
       2019-08-21 11:45:38 +08:00 via iPhone
    密码学的发展其实和这个类似,一开始都是私有协议,算法加密,后面无一例外都被攻破了
    现在的主流方式都是算法公开,依靠严密的数学运算保证
    james122333
        39
    james122333  
       2019-08-21 12:37:21 +08:00
    因为框架要考量很多东西 自己写没这个包袱 再加上自己如果有点简洁癖
    比较容易可以写出较优雅的代码 其实很多东西都是属于鸡肋类型的
    除非讨厌公司 否则写出来多半没问题的
    shuimugan
        40
    shuimugan  
       2019-08-21 13:52:36 +08:00 via Android
    如果你懂安全,自己用框架的时候顺便审计下就行了。
    如果你不懂安全,自己造一个轮子,挖你的漏洞是很简单的事情
    leafre
        41
    leafre  
       2019-08-21 14:14:40 +08:00
    你自己造轮子难道 bug 少?
    MrUser
        42
    MrUser  
       2019-08-21 14:29:39 +08:00
    公式:用框架带来的收益 - 用框架带来的损失(风险) > 0 ? 用 : 不用
    公司发展:小公司大多不重视安全,怎么赚钱快怎么来,等公司大了就自己开发个框架重构原来的项目。
    可以用备份来转移风险。
    charlie21
        43
    charlie21  
       2019-08-21 17:33:37 +08:00
    诶,一开始就不用开源软件不就没有这个问题了?
    qwerthhusn
        44
    qwerthhusn  
       2019-08-21 17:48:28 +08:00
    自己造的轮子可黑客懒得去黑,除非这个系统里面有价值的东西

    公共的轮子,黑客黑完之后,骇客开始用肉鸡去撒网捕捞,逮到一个是一个
    cuzfinal
        45
    cuzfinal  
       2019-08-21 18:03:28 +08:00
    看大厂怎么处理
    areless
        46
    areless  
    OP
       2019-08-21 21:43:06 +08:00
    @cuzfinal 哪个大厂没有被脱裤过?何况脱裤了,大厂给的起钱,法务、黑涩会一起干,顶级黑客也顶不住啊。所以大厂的处理方案根本没有参考性。
    @wukongkong salt 的原理就是服务端存 KEY 去混淆,然后用 KEY 去解。成本低,安全性高,就跟闭源是一个思路。而真正解决拜占庭将军问题的,成本高的一塌糊涂,就是区块链……
    @likaka java 漏洞更多,只是背后有公司在摆平
    @liprais 一两年还写不了 orm,都是项目做傻了。where id=3,update 哔哔哔,CRUD boy ……
    @Raymon111111 SQL 注入是框架有关的,功能强大恰恰并不是框架的精髓,约定成俗才是,就是设计模式及理念。
    @qq565999484 @shuimugan 因为熟悉,你知道哪里怎么运行的。几百几千甚至几万 star 的框架,使用者知道每个部分怎么运行的吗?
    @msg7086 rails 的理念是好的,内部约定成俗。

    @passerbytiny 板砖砸也怕联防报警器,早在 02 年就可以对互联网入侵进行报警举证了。
    cabing
        47
    cabing  
       2019-08-21 22:02:13 +08:00
    开源漏洞少,开源有漏洞也你也可以修复,回报给社区啊~~
    ready
        48
    ready  
       2019-08-21 22:08:31 +08:00
    楼上都带歪了;
    楼主是问如何妥善处理;
    结果回答的都是该自己造还是用开源。
    expy
        49
    expy  
       2019-08-21 22:13:36 +08:00
    楼主意思是自己造可以避免脚本小子批量自动扫描攻击?
    大点的开源软件一般有功能性更新的大版本和安全性更新的小版本,选择长期支持版本够撑几年了,安全性更新一般不会打破兼容性。
    旧项目如果要多年完全不动,用什么也没办法保证安全吧。
    w9ay
        50
    w9ay  
       2019-08-21 22:20:56 +08:00
    首先一条定理,没有安全的系统。然后就看黑客攻击的成本以及是否值得攻击了。对于小网站来说,自己写未尝不是选择,间接提高了黑客攻击的成本而已。当然解决方案可以是试试各大安全公司的防护产品,哈哈
    shuimugan
        51
    shuimugan  
       2019-08-21 22:45:24 +08:00
    你提到的"因为熟悉,你知道那里怎么运行的"和安全问题其实没有很大的关联,安全问题主要是和人员的安全能力以及安全意识有很大的关系.

    我就用回 PHP 举例,"根据用户输入的 url 发起请求"这个需求,不用轮子,只用内置 curl 函数,你可能觉得几行代码写出来的,然后呢?

    对于这个 url 的检测,问题可多了.

    先从协议开始,如果没校验协议,dict 协议可以用来探测内网无密码 redis,而 gopher 则可以构造出 FastCGI 协议,攻击 PHP-FPM,使其执行任意代码.

    当 url 的域名指向内网的时候,则可以探测内网无保护的 http 服务,比如探测 Elasticsearch.
    当你尝试先校验一下域名是否指向内网的时候,DNS-rebinding 了解一下?

    在你没有安全技能和安全意识的情况下,就算你对自己的代码很熟悉,你也完全不知道漏洞在哪里.而当你有安全技能和安全意识的时候,你在开发对应功能的代码时,你就会自然而然地做很多防御手法,以及 review 你依赖的轮子它的内部实现.

    最后,OpenRASP 的实现方式可以了解一下,通过和 runtime 结合的形式,对于函数的入参做检测,可以在 runtime 层做防御
    no1xsyzy
        52
    no1xsyzy  
       2019-08-22 09:20:36 +08:00
    @areless SQL 注入是框架有关还行?请先自己写一个 PHP 拼接 SQL 字符串的页面,然后直接把地址给进 sqlmap,看看没框架注入存在不? SQL 语法有改变不?
    /*!union*/ 绕过 WAF 试试?如果你不进行 AST 等级操作靠字符串拼接不可能存在没有漏洞的情况。

    salt 和 闭源 和 拜占庭将军问题 三个完全根本没有关系的东西也能扯一起说?
    你闭源的信息量能超过 salt 这个密码学安全随机数的?
    你闭源但对所有人用同一个程序…… 你知道 salt 必须对每个账户重新生成吗?不重新生成知道了 salt 值又可以做彩虹表了。
    拜占庭将军 这种容错性问题(信息一致性问题)还能和渗透安全性混为一谈?
    areless
        53
    areless  
    OP
       2019-08-22 20:41:39 +08:00 via Android
    @no1xsyzy 有关系的呀,salt 是现在 api token 的基础。无状态全靠 salt。怎么不能混为一谈了?不用什么高深的技术。约定使用 int 来歪脖传参,根本就不需要去搞什么防注入预执行,类型绑定搞其他类型一点意义都没有~~~用算法全部取整,约定成俗~~~=_= 约定成俗的力量才是最好的,这是 rails 框架让我学习到的知识。
    @shuimugan OpenRASP 是不错的东西。学习到了
    @expy 你怕不怕过去交付的项目,一访问彩旗飘飘被挂着马。未来会有大量这样项目。随着版本号升级,旧的逐个要么彩旗飘飘,要么爆着一长串路径~~~正所谓程序员不堪入目的过往吗
    no1xsyzy
        54
    no1xsyzy  
       2019-08-23 09:52:31 +08:00
    @areless https://jwt.io/ 这里哪里有 salt ?
    你以为用 int 传参就没事了? string->int 都存在过任意代码执行漏洞。
    DNS 约定用 UDP 请求 TCP 同步,现在不还是随意污染? HTTP 约定 cache-control 不还是一大堆瞎缓存的 ISP ?约定 DNT:1 结果不还是一堆无视 DNT 头进行跟踪的?
    不要和任何无法保证永远的利益一致者进行约定。你要约定不如直接约定:黑客不要来黑我的网站。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1213 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:34 · PVG 02:34 · LAX 10:34 · JFK 13:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.