一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - 編程技術(shù) - 全網(wǎng)連夜修復(fù)的Log4j漏洞,如何做到一行代碼都不改?

全網(wǎng)連夜修復(fù)的Log4j漏洞,如何做到一行代碼都不改?

2021-12-29 23:32Hollis 編程技術(shù)

Apache Log4j2 遠程代碼執(zhí)行漏洞的問題最近鬧得沸沸揚揚的,很多人都被大半夜叫起來緊急修復(fù)這跟問題。

全網(wǎng)連夜修復(fù)的Log4j漏洞,如何做到一行代碼都不改?

這篇文章我周一發(fā)過,但是因為一些"人在江湖、身不由己"的原因,原文刪除了,但是很多人找我還是想看看內(nèi)容,所以我改了一點內(nèi)容,重新發(fā)一下:

Apache Log4j2 遠程代碼執(zhí)行漏洞的問題最近鬧得沸沸揚揚的,很多人都被大半夜叫起來緊急修復(fù)這個問題。

有很多人在微信上問我:這種漏洞還能怎么修?下次有問題還要再升級版本嗎?有沒有啥一勞永逸的辦法?就沒啥辦法避免嗎?

其實,是有的。有一種技術(shù),可以針對這類漏洞做定向攔截。可以讓開發(fā)者不用急急忙忙修這個漏洞,甚至你如果完全不想修都可以。

這就是RASP技術(shù)。

其實這個技術(shù)已經(jīng)誕生很久了,在安全圈也應(yīng)用很廣泛。應(yīng)用范圍也很廣泛了。

RASP

RASP 是 Runtime Application Self-Protection 的縮寫,這是一種應(yīng)用安全保護技術(shù)。他的原理是將保護程序注入到應(yīng)用程序中,與應(yīng)用程序融為一體,能夠起到實時監(jiān)測、阻斷攻擊的作用,使程序自身擁有自保護的能力。

聽起來是不是很高大上?

其實,RASP就是攔截從應(yīng)用程序到系統(tǒng)的所有調(diào)用,確保它們是安全的,并直接在應(yīng)用程序內(nèi)驗證數(shù)據(jù)請求。Web和非Web應(yīng)用程序都可以通過RASP進行保護。該技術(shù)不會影響應(yīng)用程序的設(shè)計,因為RASP的檢測和保護功能是在應(yīng)用程序運行的系統(tǒng)上運行的。

全網(wǎng)連夜修復(fù)的Log4j漏洞,如何做到一行代碼都不改?

RASP 技術(shù)非常是和對于0Day 漏洞的防護,如反序列化漏洞、JNDI 注入漏洞、表達式注入漏洞、SQL 諸如漏洞、遠程代碼執(zhí)行漏洞等。

WAF 和 RASP

在安全防護上,很多人都知道WAF(Web Application Firewall),俗稱防火墻,那么,和防火墻相比,RASP 技術(shù)其實有著很多的優(yōu)點。

傳統(tǒng)的 WAF 主要通過分析流量中的特征過濾攻擊請求,并攔截攜帶有攻擊特征的請求。但是因為 WAF 只能基于流量規(guī)則進行防御,無法根據(jù)應(yīng)用上下文進行檢測,所以存在誤報率高、容易繞過等問題。

但是,RASP 則不同,他就像疫苗會注入到人體一樣,RASP 是運行在應(yīng)用之中的,與應(yīng)用融為一體,可以獲取到應(yīng)用運行時的上下文,根據(jù)請求上下文進行攔截可以對攻擊進行精準的識別和攔截。

全網(wǎng)連夜修復(fù)的Log4j漏洞,如何做到一行代碼都不改?

防火墻就像為簇擁在大人物周圍的保鏢,大人物去哪里都帶著保鏢,看起來防御力爆棚,但是大人物本人肌肉不發(fā)達也沒有武功,一旦保鏢被突破或者保鏢被調(diào)虎離山,那么這個大人物就沒有任何保護了,就非常危險了。而RASP 則是讓沒有武功的人在很短的時間并且付出的代價不高的情況下?lián)碛泻芨叩淖晕冶Wo能力。

RASP 具有以下優(yōu)點:

1.誤報率低。

2.可以防護0Day級別的漏洞攻擊。

同時也并不是完全沒有缺點,主要的問題就是可能帶來一定的性能損耗。還有就是開發(fā)難度比較高,需要對 JVM 字節(jié)碼、ASM 工具、漏洞觸發(fā)原理以及各類Java 應(yīng)用容器都有所了解。

RASP技術(shù)目前已經(jīng)非常成熟,在PHP、Java、.NET等多種語言中都有實現(xiàn)方案。

實現(xiàn)原理

不同于基于流量特征的檢測,RASP 主要關(guān)注應(yīng)用自身的行為,而非流量本身。

當 RASP 發(fā)現(xiàn)一個應(yīng)用,做了它不應(yīng)該做的事情時,大概率意味著當前應(yīng)用已經(jīng)被攻擊者利用漏洞攻陷并做了一些高危操作。

以這次 Log4j的漏洞來看,RASP 并不關(guān)注請求中的流量是否包含了惡意的 payload,而是去關(guān)注 Log4j2 究竟使用 JNDI 功能去做了什么。如果進行正常的 JNDI 查詢,就沒有問題;但如果企圖使用 JNDI 功能進行命令執(zhí)行,就是一個顯而易見的危險行為。

RASP 要將自己注入到被保護的應(yīng)用中,基本思路類似于 Java 中的 AOP 技術(shù),將 RASP 的Hook代碼注入到需要進行檢測的地方,根據(jù)上下文和關(guān)鍵函數(shù)的參數(shù)等信息判斷請求是否為惡意請求,并終止或繼續(xù)執(zhí)行。

想要實現(xiàn)RASP,在 Java中逃不開 Agent 技術(shù),Agent是一個運行在目標JVM的特定程序,它的職責是負責從目標JVM中獲取數(shù)據(jù),然后將數(shù)據(jù)傳遞給外部進程。

在Java SE 5之前,要實現(xiàn)一個Agent只能通過編寫Native代碼來實現(xiàn)。從Java SE 5開始,可以使用Java的Instrumentation接口(java.lang.instrument)來編寫Agent。

使? Instrumentation,開發(fā)者可以構(gòu)建?個獨?于應(yīng)?程序的代理程序(Agent),用來監(jiān)測和協(xié)助運行在 JVM 上的程序,甚至能夠替換和修改某些類的定義。

全網(wǎng)連夜修復(fù)的Log4j漏洞,如何做到一行代碼都不改?

Java Agent支持目標JVM啟動時加載,也支持在目標JVM運行時加載,這兩種不同的加載模式會使用不同的入口函數(shù),如果需要在目標JVM啟動的同時加載Agent,那么可以選擇實現(xiàn)下面的方法:

  1. public static void premain(String agentArgs, Instrumentation inst);
  2. public static void premain(String agentArgs);

在premain函數(shù)中,我們可以對字節(jié)碼進?操作,織?Rasp的安全探針。

  1. public static void premain(String agentArgs, Instrumentation inst)
  2. throws ClassNotFoundException, UnmodifiableClassException {
  3. inst.addTransformer(new ClassTransformer());
  4. }

借助ClassFileTransformer接口,實現(xiàn)對字節(jié)碼的修改,定義一個類,實現(xiàn)ClassFileTransformer接口,并重寫transform方法,在這個方法中,通過 ASM 技術(shù)修改字節(jié)碼。

  1. public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined,
  2. ProtectionDomain protectionDomain, byte[] classfileBuffer) throws IllegalClassFormatException {
  3. byte[] transformeredByteCode = classfileBuffer;
  4. if (Config.moudleMap.containsKey(className)) {
  5. try {
  6. ClassReader reader = new ClassReader(classfileBuffer);
  7. ClassWriter writer = new ClassWriter(ClassWriter.COMPUTE_MAXS);
  8. ClassVisitor visitor = Reflections.createVisitorIns((String) Config.moudleMap.get(className).get("loadClass"), writer, className);
  9. reader.accept(visitor, ClassReader.EXPAND_FRAMES);
  10. transformeredByteCode = writer.toByteArray();
  11. } catch (Exception e) {
  12. e.printStackTrace();
  13. }
  14. }
  15. return transformeredByteCode;
  16. }

簡單的原理就是這樣的,因為篇幅優(yōu)先就不在這里展開太多了,大家如果感興趣的話,可以看一下 (https://github.com/xbeark/javaopenrasp )這個開源項目,這是我的一個阿里同事搞的一個簡單的 RASP Demo,里面包含了一些REC、SQL 注入等的防護:

全網(wǎng)連夜修復(fù)的Log4j漏洞,如何做到一行代碼都不改?

使用 Java實現(xiàn)的,代碼不多,很容易理解。

開源工具

RASP作為一個相對成熟的技術(shù),現(xiàn)在已經(jīng)有很多開源的產(chǎn)品了,國內(nèi)外都有很多。如國外的Micro Focus、Prevoty、OWASP AppSensor、Shadowd等等。

國內(nèi)也有很多廠商也有類似的工具。如:

  • 安百科技——靈蜥

http://www.anbai.com/lxPlatform/

  • 百度——OpenRasp

https://rasp.baidu.com/

  • 椒圖科技——云鎖

https://www.yunsuo.com.cn

以上,我們給大家介紹了 RASP 技術(shù),以及他的簡單原理,并給大家提供了一個簡單的 Demo 應(yīng)用,可以方便大家深入學(xué)習(xí),如果想要使用一些開原產(chǎn)品的話,也給大家推薦了幾個,可以選擇性的了解一下。

但是,話又說回來,安全攻防沒有絕對,這個領(lǐng)域永遠都是攻擊者和防守者之間的博弈過程。沒有絕對的安全,所有安全手段只是讓攻擊的成本更高而已。

所以,RASP 技術(shù)也并不是完完全全100%的可以做到萬無一失,但是,從目前業(yè)內(nèi)的很多應(yīng)用來看,這個技術(shù)目前還是比較成熟的,對于一些常見漏洞的預(yù)防還是行之有效的。

參考資料:

https://segmentfault.com/a/1190000041132495

https://www.freebuf.com/articles/web/197823.html

https://github.com/xbeark/javaopenrasp

原文鏈接:https://zhuanlan.51cto.com/art/202112/697113.htm

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲网站在线播放 | 白丝爆动漫羞羞动漫网站 | 成人在线观看视频免费 | 久久AV国产麻豆HD真实乱 | 欧美帅老头oldmangay | 公交车强校花系列小说 | 99久久精品免费看国产高清 | 久久综合亚洲色hezyo | 鬼畜重口高h合集长短篇 | 精品图区 | 亚洲 欧美 中文 日韩欧美 | 日本xxxx69hd| 狠狠色综合久久久久尤物 | 亚洲欧洲日产v特级毛片 | 日本中文字幕一区二区高清在线 | 国产欧美一区二区精品性色 | 亚洲AV 无码AV 中文字幕 | 国内精品伊人久久大香线焦 | 秋霞理论在一l级毛片 | 亚洲羞羞裸色私人影院 | 亚洲精品第二页 | 国产码一区二区三区 | 国产成人精品本亚洲 | 国产第7页 | 高跟丝袜人妖sissy露出调教 | 猫咪社区免费资源在线观看 | 好大好硬抽搐好爽想要 | 五月色婷婷在线影院 | 亚洲欧美日韩精品高清 | 国产精品久久久久久福利 | 好奇害死猫在线观看 | 国产欧美va欧美va香蕉在线观 | 亚洲社区在线 | 亚洲va欧美va国产综合久久 | 国产品精人成福利视频 | 大伊人青草狠狠久久 | 国产第9页 | 久久免费看少妇高潮A片JA | 国产高清精品自在久久 | 国产欧美日韩不卡一区二区三区 | 无人区尖叫之夜美女姐姐视频 |