能引發技術圈大地震,Apache Log4j不簡單,它是一款開源的Java日志框架,被廣泛地應用在中間件、開發框架、Web應用中,用來記錄日志信息。而這些中間件和開發框架作為軟件基礎又被其他軟件系統使用,所以Log4j被極其廣泛的應用在各大軟件系統里面。比如大家耳熟能詳的游戲 Minecraft(我的世界),甚至NASA 在火星上的直升機都使用了Log4j!

Java是業界使用最廣泛的編程語言,也是騫云的主流開發語言之一(我們還用了大量的Python、Angular、Javascript、Go等,喜歡多語言開發的攻城獅們趕緊看過來)。我們平臺不但直接使用Log4j2,采用的很多Java類庫也用了Log4j2,這里面包括Tomcat、ElasticSearch、Skywalking,甚至還有古老的VMware vSphere Java SDK也依賴這個日志框架。所以從漏洞爆出的第一天,騫云的技術團隊就開始投入到這個緊急事件的處理中。
經分析發現,我們還是比較幸運的,這次的安全漏洞對騫云平臺基本沒有影響。這得益于騫云的產品平臺每年都有3-4次版本迭代更新,每次更新都會將各種運行環境升級到最新的版本,且絕大部分客戶也會采購升級服務,所以大部分用戶都在用騫云平臺的6.1.x以上版本。從去年中發布的6.1版本開始,平臺就升級到了最新JDK 8u261。幸運的是,Oracle JDK 8u191或者更高版本的JDK,缺省不允許執行遠程代碼。所以使用騫云6.1及以上版本的客戶,就不存在遠程代碼執行的問題。當然,如果本地操作系統已經被攻破,預先被植入惡意本地代碼,那惡意代碼就可以本地漏洞調用。邏輯上,所在操作系統環境已經被攻破了,就沒必要利用這漏洞來控制肉雞機器了。
即使此次的安全漏洞對騫云絕大部分客戶沒有什么安全影響,我們的研發團隊還是第一時間發布了安全補丁包,將我們平臺直接依賴的Log4j2升級到了當天最新的2.15最新版本,并關閉JNDI Lookup。12月10日晚,我們已經完成需要線上對外服務的所有部署系統的補丁升級。周一13號開始,經過驗證的補丁包就開始給到我們的交付同事,幫助客戶環境進行升級,到今天16號為止,我們的絕大部分客戶版本,均已完成漏洞修補。
昨天12月15日,Apache Log4j2 官方又發布了2.16版本,主要修復了以下兩個潛在問題:
1. 利用 JMSAppender 造成遠程代碼執行;
2. 用戶配置log4j,使用非默認模式布局和上下文查找(例如$${ctx:loginId})或線程上下文映射模式(%X、%mdc或%MDC),這種情況下可能被攻擊導致拒絕服務(DoS)。
這兩種情況在騫云的產品里都不存在。我們沒有使用JMSAppender; 使用的是默認模式布局(PatternLayout), 沒有使用上下文查找,也沒有使用線程上下文映射模式。因此對于騫云平臺,Log4j 2.16 補丁不是必須的。
軟件的漏洞有時不可避免,這次的Apache Log4j安全漏洞,前一段時間的OpenSSL Heartbleed漏洞、 Fastjson高危漏洞、Struts2遠程代碼執行漏洞等等。根據Gartner的相關統計,到 2025 年,30% 的關鍵信息基礎設施組織將遇到安全漏洞。基礎設施組織中,一個組件遭遇安全問題就會引發整個架構的“地震”,以Log4j為例,一張圖看懂它在現代軟件基礎設施中的地位↓

(*作為基礎設施架構的一個“支點”,Log4j舉足輕重,牽一發而動全身)
軟件的安全問題牽一發而動全身,如果被利用,產生的損失很多時候是難以估量的。由這次安全事件的分析評估可見,一個軟件系統,持續的更新迭代、專業及時的維保服務都十分關鍵,能夠最大程度保障軟件平臺的穩定、安全,為企業的業務發展保駕護航。
騫云科技也會繼續努力,保障我們客戶的系統安全和穩定。