事件起因
??2021年12月10日一個平凡的日子,朋友圈,各種論壇、公眾號和群,都在討論一個Log4j2的漏洞,多少程式員半夜爬起來改代碼,此bug甚至威脅到了全球網路安全,已證實服務器易受到漏洞攻擊的公司包括但不限于蘋果、亞馬遜、特斯拉、谷歌、百度、騰訊、網易、京東、Twitter、 Steam等,為什么這個漏洞反應這么強烈呢?有以下幾點原因:
?一、涉及范圍廣(任何使用過Log4j2的專案,都有危險
?二、操作簡單(只需要簡單操作就可以嚴重破壞服務器
?三、危害程度高(相當于擁有了應用的權限
?四、時間久(預計未來幾年都會有這個bug,只要服務不更新,漏洞則一直在

??據了解,此次漏洞最早是由阿里員工發現,11月24日,阿里云安全團隊向Apache報告了Apache Log4j2遠程代碼執行漏洞,12月9日,更多利用細節被公開,
Log4j2 介紹
??那引起這么大規模安全問題的Log4j2是什么來頭,又有什么用呢?Log4j2 是Apache 的一個專案,一個基于 Java 的日志記錄工具, Log4j2 可以輕松控制 log 資訊是否顯示、log 資訊的輸出端型別、輸出方式、輸出格式,更加細致地控制日志的生成程序,而其通過組態檔可以靈活地進行配置而不需要大量的更改代碼,因此,很多互聯網企業都選擇使用 Log4j2 ,該專案在2014年重構了,并且引入了大量豐富的特性,也正是這次重寫后的版本,才有了現在的bug,新版日志框架被大量用于業務系統開發,用來記錄日志資訊,所以此次受害的主要是使用了Log4j2 的Java應用(Log4j 1.x 的反而沒受影響),受此影響的常見開源專案有:Spring-Boot-strater-log4j2、Apache Solr、Apache Flink、Apache Druid、Elasticsearch、Flume、Dubbo、Redis、Logstash、Kafka 等,
危害原理
??那Log4j2 bug的破壞方式是什么,其實很簡單,就是類似于SQL注入,這個更厲害,直接是代碼注入,代碼執行權限自然相當于應用權限,這就屬于是一個列印日志的工具人,不好好干活,還把鬼子引進的村,
??那主要原理是什么呢?就是在列印日志時,如果發現日志內容中包含關鍵詞 ${ },那么在{ }包含的內容會被當做變數來進行替換,導致攻擊者可以任意執行命令,詳細漏洞披露可查看:https://issues.apache.org/jira/projects/LOG4J2/issues/LOG4J2-3201?filter=allissues
??其實主要是因為Log4J2里的一個插件:Lookup,出了大問題,這本是個不常用的插件,但代碼觸發到的頻率很高,高到你代碼中每次觸發info,warn,error 等日志寫入的時候,都會去校驗一下是否執行Lookup的邏輯,其中問題比較嚴重的有JndiLookup和RMILookup功能,JNDI可以發現查找資料和資源,RMI則是遠程呼叫,如果用你的主機,遠程呼叫我啟動的破壞代碼(應用服務)呢,這時候你的服務主機就是案板上的肉了,任人宰割,
解釋方案
方式一:直接棄用Log4j2
這里要注意的是,你在專案里沒有依賴,不代表你的子依賴里沒有,需要全域查找
方式二:升到 2.15.0 或更新版本
截至到2021.12.14日,已經更到2.16-rc1版本了,就這幾天瘋狂更了幾個版本,這里建議至少更新到2.15.0版本以上

地址:https://github.com/apache/logging-log4j2/tags
方式三:更改 JVM 運行引數
有的專案,可能依賴較為復雜,且不方便重新編譯,可以直接在運行時,添加以下JVM引數,這樣可以禁止Lookup生效
-Dlog4j2.formatMsgNoLookups=true
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/381928.html
標籤:其他
下一篇:linux系統安全加固
