亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于YARA的Java內(nèi)存馬檢測方案設(shè)計

        2023-05-23 06:35:48劉向偉張曉嬌宋金金
        無線互聯(lián)科技 2023年6期
        關(guān)鍵詞:檢測方法

        劉向偉 張曉嬌 宋金金

        作者簡介:劉向偉(1993— ),男,浙江嘉興人,工程師,學(xué)士;研究方向:網(wǎng)絡(luò)安全。

        摘要:隨著互聯(lián)網(wǎng)的發(fā)展,惡意軟件逐漸成為威脅網(wǎng)絡(luò)安全的重要因素。而 Java 內(nèi)存馬作為一種內(nèi)存駐留的惡意軟件,不僅具有隱蔽性高、易于傳播等特點(diǎn),還能夠利用一些 Java 的高級特性實現(xiàn)更復(fù)雜的攻擊行為,給網(wǎng)絡(luò)安全帶來更大的威脅。文章提出了一種基于 YARA的Java內(nèi)存馬檢測方案,通過向JVM中注入Agent將高風(fēng)險類導(dǎo)出并通過YARA實現(xiàn)對Java內(nèi)存中的惡意代碼的檢測和定位,再對該方法進(jìn)行了實驗驗證。實驗結(jié)果表明,該方案能夠有效地檢測Java內(nèi)存馬,具有較高的檢測準(zhǔn)確率和較低的誤報率。

        關(guān)鍵詞:Java 內(nèi)存馬;YARA;惡意軟件;檢測方法

        中圖分類號:TP399 文獻(xiàn)標(biāo)志碼:A

        0 引言

        Java是一種跨平臺的編程語言,因其安全性、易用性和可移植性而廣泛應(yīng)用于網(wǎng)絡(luò)應(yīng)用程序的開發(fā)[1]。然而,隨著Java應(yīng)用程序的不斷發(fā)展,內(nèi)存馬成為網(wǎng)絡(luò)攻擊的一種常見手段。內(nèi)存馬可以通過修改Java虛擬機(jī)(JVM)內(nèi)存中的字節(jié)碼來實現(xiàn)程序的惡意行為,例如,竊取敏感信息、掃描網(wǎng)絡(luò)端口、占有服務(wù)器資源挖礦等。傳統(tǒng)的基于落地文件的檢測已經(jīng)難以應(yīng)對,因此針對注入內(nèi)存中的惡意代碼可行性檢測方案的研究變得越來越重要。

        1 Java內(nèi)存馬方案設(shè)計

        1.1 Java 內(nèi)存馬檢測需求分析

        本方案設(shè)計之初筆者查詢了大量的現(xiàn)有方案,希望該方案可落地、可實現(xiàn)。同時,在查殺種類上能盡可能覆蓋所有Java內(nèi)存馬種類與攻擊路徑;在誤報率上可以做到較少誤報,甚至是零誤報;在性能上,作為一個安全類的檢測方案,不會占用太多的服務(wù)器資源,將對系統(tǒng)性能造成的影響降到最低;同時,在內(nèi)存馬攻擊側(cè)熱度不減的當(dāng)下,不斷有新攻擊手段與利用類的更新,希望該方案是可擴(kuò)展的。

        為了達(dá)到全面性、低誤報、低占用、可擴(kuò)展的目標(biāo),筆者分別對Java內(nèi)存馬的種類及攻擊路徑做出分析,對內(nèi)存的提取思路做出優(yōu)化,對內(nèi)存馬檢出的判斷體系做出選取,最終形成了一套明晰的檢測流程與方案。

        1.2 Java內(nèi)存馬的種類及攻擊路徑分析

        常見的Java內(nèi)存馬在實現(xiàn)方式技術(shù)上可以劃分為以下3種類型,每種類型的實現(xiàn)原理:(1)基于Java Servlet規(guī)范利用的內(nèi)存馬實現(xiàn)技術(shù)。該類型主要是利用了Java Servlet 3.0+規(guī)范,通過對Servlet,F(xiàn)ilter,Listener組件的注冊來實現(xiàn)[2]。(2)基于特定Java 框架利用的內(nèi)存馬實現(xiàn)技術(shù)。利用Java 框架的技術(shù)規(guī)范(如,Spring MVC框架),動態(tài)注冊框架的組件來實現(xiàn)。(3)基于Java api接口類型的內(nèi)存馬實現(xiàn)技術(shù)。利用Java Agent技術(shù)或是JavaSsist技術(shù)通過修改JVM中加載類的字節(jié)碼的特性來實現(xiàn)。

        上述的Java內(nèi)存馬實現(xiàn)的攻擊路徑主要體現(xiàn)在兩種形式:(1)通過落地文件將木馬注入內(nèi)存。這種形式下黑客往往通過常見漏洞上傳或?qū)懭霅阂馕募亩@取系統(tǒng)權(quán)限,為了更好地隱藏自己不被安全檢測工具發(fā)現(xiàn)以及穩(wěn)定地維持訪問,將木馬代碼注入內(nèi)存中[3]。(2)通過漏洞攻擊直接將木馬注入內(nèi)存。攻擊者通過反序列化等相關(guān)漏洞直接利用寫入的木馬注入內(nèi)存當(dāng)中,這種形式下往往無落地文件產(chǎn)生。

        通過對常見的Java內(nèi)存馬的種類分析可以明確查殺種類,做到檢測與查殺的全面性。同時,對內(nèi)存馬的攻擊路徑進(jìn)行分析可以發(fā)現(xiàn),常見的木馬檢測針對的落地文件,在內(nèi)存馬查殺方面效果不大,需要將查殺的重點(diǎn)放在程序運(yùn)行時內(nèi)存上。

        1.3 可疑內(nèi)存提取思路

        本次方案對內(nèi)存提取采用了Java Agent技術(shù)來實現(xiàn),Java Agent技術(shù)不單單可以作為內(nèi)存馬的實現(xiàn),還可以被用來檢測內(nèi)存馬。通過跟蹤Java進(jìn)程PID,遍歷JVM中所有加載的類并導(dǎo)出為內(nèi)存中的字節(jié)碼來實現(xiàn)內(nèi)存的提取。出于性能方面的考慮,通過對現(xiàn)有內(nèi)存馬技術(shù)利用類和方法進(jìn)行分類總結(jié),在此只對可疑類進(jìn)行導(dǎo)出。

        具體實現(xiàn)步驟如下:(1)遍歷系統(tǒng)中運(yùn)行的JVM進(jìn)程,將Agent注入對應(yīng)的進(jìn)程中;(2)遍歷 JVM中所有加載的類,將所有的高風(fēng)險類在內(nèi)存中的字節(jié)碼DUMP出來。

        1.4 YARA判別

        為了滿足對惡意代碼鑒別方案的可擴(kuò)展性,本文選取了YARA引擎進(jìn)行惡意代碼的判別。YARA 是一個旨在(但不限于)幫助惡意軟件研究人員識別和分類惡意軟件樣本的工具。目前,使用 YARA 的知名軟件有賽門鐵克、火眼、卡巴斯基、McAfee、VirusTotal 等。本文采用Java動態(tài)加載YARA方式實現(xiàn)規(guī)則判斷,可以輕松地集成開源規(guī)則庫。此外,YARA的規(guī)則編寫非常簡單,可以輕松地編寫出一條想要的規(guī)則,如根據(jù)上面提到的Java內(nèi)存馬的特征分析和提取方法,可以編寫相應(yīng)的YARA規(guī)則來檢測Java內(nèi)存馬。以下是一個簡單的YARA內(nèi)存馬檢測規(guī)則示例:

        rule Java_Memory_Malware

        {

        meta:

        author = "XXX"

        description = "Detect Java memory malware"

        strings:

        $class_name = "Java/lang/reflect/Method"

        $method_name = "invoke"

        $parameter_types = "Java/lang/Object;[LJava/lang/Object;"

        condition:

        all of them

        }

        上述YARA規(guī)則是一個非常典型的檢測Java內(nèi)存馬的示例規(guī)則,它檢測使用反射調(diào)用Method.invoke()方法的惡意代碼。具體解釋為,(1)rule Java_Memory_Malware:規(guī)則名稱用于識別匹配的規(guī)則。(2)meta:author = “XXX”,description = “Detect Java memory malware”:規(guī)則的元數(shù)據(jù),包括作者和描述信息等。(3)strings:字符串匹配部分,定義需要匹配的字符串,包括class_name,method_name和parameter_types。(4)condition: all of them:規(guī)則的匹配條件,所有的字符串都必須匹配才能觸發(fā)規(guī)則。

        此外,YARA還支持自定義函數(shù)、變量和操作符,可以將多個特征組合成一個復(fù)雜的匹配規(guī)則。YARA還提供了多種修飾符,可以調(diào)整匹配的方式和結(jié)果。

        1.5 整體方案

        本文確立一條明晰的檢出流程,如圖1所示。首先,通過檢索主機(jī)JVM進(jìn)程并對指定進(jìn)程進(jìn)行選擇;其次,將Agent注入指定JVM進(jìn)程中對Class進(jìn)行遍歷,查找到高風(fēng)險類將內(nèi)存中的字節(jié)碼Dump到本地;最后,引入YARA引擎對保存在本地的字節(jié)碼匹配和判定并進(jìn)行結(jié)果匯總。檢出全流程可分解為開發(fā)中的重要模塊:(1)Java進(jìn)程掃描模塊。用于掃描當(dāng)前系統(tǒng)中運(yùn)行的Java進(jìn)程,獲取Java進(jìn)程的PID和內(nèi)存信息。(2)Java進(jìn)程注入模塊。用于將Agent注入指定Java中。(3)Agent提取模塊。用于遍歷Class并進(jìn)行高風(fēng)險類的Dump。(4)YARA規(guī)則加載模塊。用于加載YARA規(guī)則文件,將規(guī)則文件中的規(guī)則編譯為可用的規(guī)則對象。(5)規(guī)則匹配模塊。用于將內(nèi)存信息和YARA規(guī)則進(jìn)行匹配,識別是否存在Java內(nèi)存馬。(6)報告生成模塊。用于生成檢測報告,包括檢測結(jié)果、惡意代碼位置等信息。

        2 程序重點(diǎn)模塊的實現(xiàn)

        2.1 Java進(jìn)程掃描模塊與注入模塊

        可跟蹤獲取Java進(jìn)程的PID,如存在多項,通過大小,命名的方式做簡單區(qū)分后將指定JVM的PID賦值給jvm_pid參數(shù),然后將Agent.jar注入進(jìn)程中去。具體實現(xiàn)代碼如下:

        public static void attach(String jvm_pid, String agent_jar_path) throws Exception {

        VirtualMachine virtualMachine = null;

        VirtualMachineDescriptor virtualMachineDescriptor = null;

        for (VirtualMachineDescriptor descriptor : VirtualMachine.list()) {

        String pid = descriptor.id();

        if (pid.equals(jvm_pid)) {

        virtualMachineDescriptor = descriptor;

        break;

        }}

        try {

        if (null == virtualMachineDescriptor) {

        virtualMachine = VirtualMachine.attach(jvm_pid);

        } else {

        virtualMachine = VirtualMachine.attach(virtualMachineDescriptor);

        }

        Properties targetSystemProperties = virtualMachine.getSystemProperties();

        virtualMachine.loadAgent(agent_jar_path);

        通過VirtualMachine類的attach(pid)方法,便可以attach到一個運(yùn)行中的Java進(jìn)程上,之后便可以通過loadAgent(agentJarPath)來將agent的jar包注入對應(yīng)的進(jìn)程,然后對應(yīng)的進(jìn)程會調(diào)用agentmain方法。

        2.2 Agent模塊

        Agent模塊的主要作用遍歷Class類并找到定義的危險類和接口??梢远x出一套黑客常調(diào)用的數(shù)據(jù)類型。如riskInterface.add(“Javax.servlet.Servlet”),遍歷相關(guān)類找到上述可疑名單并將其保存,實現(xiàn)代碼如下:

        for (String inter : riskInterface) {

        if (interfaces.contains(inter)) {

        resultClasses.add(clazz);

        break;}}

        最后,通過ClassUtils.dumpClass(ins,resultClasses)將字節(jié)碼檢出。

        2.3 YARA規(guī)則加載模塊

        YARA規(guī)則加載模塊的主要作用是將YARA規(guī)則文件加載到程序中,將規(guī)則編譯為可用的規(guī)則對象。在Java中可以使用YARA-Java庫來實現(xiàn)YARA規(guī)則的加載和編譯。具體實現(xiàn)代碼如下:

        import com.github.plusvic.yara.*;

        public class RuleLoader {

        private YaraCompiler compiler;

        private YaraRules rules;

        public RuleLoader(String rulePath) {

        compiler = new YaraCompiler();

        compiler.addRulesFile(rulePath);

        rules = compiler.createRules();}

        public YaraRules getRules() {

        return rules;}}

        上述代碼中,RuleLoader類用于加載YARA規(guī)則文件,并將規(guī)則編譯為可用的規(guī)則對象。構(gòu)造函數(shù)中,通過傳入規(guī)則文件路徑來加載規(guī)則文件,使用YaraCompiler對象將規(guī)則文件編譯為可用的規(guī)則對象,然后通過getRules()方法獲取規(guī)則對象。

        2.4 規(guī)則匹配模塊

        在Java中可以使用YARA庫來實現(xiàn)YARA規(guī)則的匹配,具體實現(xiàn)代碼如下:

        import com.github.plusvic.yara.YaraCompiler;

        import com.github.plusvic.yara.YaraMatch;

        public class RuleMatcher {

        public static void match(resultClasses, String ruleFilePath) throws Exception {

        YaraCompiler compiler = new YaraCompiler();

        compiler.addFile(ruleFilePath);

        compiler.load();

        YaraScanner scanner = compiler.createScanner();

        for (CodeInfo codeInfo : resultClasses.getCodeInfoList()) {

        List matches = scanner.match(fileData);

        for (YaraMatch match : matches) {

        process.addMatchInfo(match.getRule().getIdentifier(), codeInfo.getClassName(), codeInfo.getMethodName(),

        codeInfo.getSignature(), codeInfo.getMd5(), match.getOffset(), match.getLength());}}}}

        上述代碼中,RuleMatcher類用于將內(nèi)存信息和YARA規(guī)則進(jìn)行匹配,識別是否存在Java內(nèi)存馬。首先,使用YaraCompiler對象編譯YARA規(guī)則文件;其次,創(chuàng)建YaraScanner對象;最后,遍歷resultClasses對象中的CodeInfo列表,使用YaraScanner對象進(jìn)行匹配,獲取匹配信息。

        3 測試與結(jié)果

        為了驗證所提出的基于YARA的Java內(nèi)存馬檢測方案的有效性和準(zhǔn)確性,本文設(shè)計了一組實驗,使用一組包含Java內(nèi)存馬的樣本集進(jìn)行測試。實驗包括以下步驟:

        3.1 獲取Java內(nèi)存馬樣本集

        本方案從公開的樣本庫中獲取了一組Java內(nèi)存馬樣本集,包括20個不同的樣本,這些樣本使用不同的混淆技術(shù)、攻擊路徑以及加載方式以此來判斷該方案的全面性。分別部署在不同的3組Java容器中,且分別部署了開源的Web系統(tǒng),以模擬真實世界中的Java內(nèi)存馬,以此來判定其誤報率。

        3.2 設(shè)計YARA規(guī)則

        本文設(shè)計了一組YARA規(guī)則,用于檢測Java內(nèi)存馬中常見的特征。這些規(guī)則包括檢測Java類名、方法名、字節(jié)碼序列、代碼簽名等特征。筆者使用YARA語言編寫這些規(guī)則,并將其保存在規(guī)則文件中。

        3.3 進(jìn)行實驗測試

        本方案使用收集的Java內(nèi)存馬樣本集對檢測工具進(jìn)行測試,以評估其準(zhǔn)確性和性能。筆者記錄了檢測工具的檢測結(jié)果,包括每個樣本的匹配結(jié)果、匹配時間等信息;比較了該檢測工具與現(xiàn)有的Java內(nèi)存馬檢測工具的性能和準(zhǔn)確性。

        3.4 實驗結(jié)果

        本文提出的基于YARA的Java內(nèi)存馬檢測方法具有較高的準(zhǔn)確性和良好的性能,如表1所示。在測試集中,該檢測工具成功檢測出了所有的Java內(nèi)存馬樣本,同時沒有發(fā)生誤報。相對現(xiàn)有的Java內(nèi)存馬檢測工具來說,具有更高的實用性和應(yīng)用價值。

        4 結(jié)語

        本文提出了一種基于YARA的Java內(nèi)存馬檢測方法,該方法可以在運(yùn)行時對Java進(jìn)程中的內(nèi)存信息進(jìn)行掃描,并使用預(yù)定義的YARA規(guī)則進(jìn)行匹配,以檢測是否存在Java內(nèi)存馬。實驗結(jié)果顯示,該方法具有較高的準(zhǔn)確性、良好的性能和可擴(kuò)展性。未來筆者將進(jìn)一步改進(jìn)方法提高準(zhǔn)確性和性能,并將其應(yīng)用于實際的惡意代碼檢測和安全防御中。未來工作的方向包括但不限于以下幾個方面。(1)優(yōu)化算法性能:盡管采用多種技術(shù)手段優(yōu)化算法性能,但仍有可能出現(xiàn)性能瓶頸。因此,筆者將繼續(xù)研究如何進(jìn)一步提高算法性能,以確保檢測系統(tǒng)的高效穩(wěn)定運(yùn)行。(2)支持更多的內(nèi)存馬類型:目前,該檢測系統(tǒng)只能檢測到Java內(nèi)存馬攻擊。但隨著網(wǎng)絡(luò)攻擊技術(shù)的不斷發(fā)展和演進(jìn),還有許多其他類型的內(nèi)存馬攻擊。因此,筆者將研究如何支持更多類型的內(nèi)存馬攻擊,并不斷更新和完善檢測系統(tǒng)。(3)實現(xiàn)自動化檢測:筆者希望能夠在不影響程序性能的同時實現(xiàn)一套自動化檢測系統(tǒng),能夠自動檢測Java應(yīng)用程序中的內(nèi)存馬攻擊,并實現(xiàn)實時監(jiān)測和告警。這將使得Java應(yīng)用程序的安全檢測更加便捷和高效。

        總之,Java內(nèi)存馬檢測是一個充滿挑戰(zhàn)的領(lǐng)域,需要不斷地研究和探索,以實現(xiàn)更加高效、準(zhǔn)確、穩(wěn)定的檢測方案。相信在不久的將來,Java內(nèi)存馬檢測技術(shù)將得到進(jìn)一步的發(fā)展和完善,為Java應(yīng)用程序的安全提供更加全面的保障。

        參考文獻(xiàn)

        [1]陳強(qiáng).精通Java開發(fā)技術(shù)[M].北京:清華大學(xué)出版社,2014.

        [2]孟正,梅瑞,張濤,等.Linux下基于SVM分類器的WebShell檢測方法研究[J].信息網(wǎng)絡(luò)安全,2014(5):5-9.

        [3]朱魏魏,胡勇.基于NN-SVM的Webshell檢測方法[J].通信與信息技術(shù),2015(2):55-58.

        (編輯 姚 鑫)

        Abstract: With the development of the Internet, malware has gradually become an important factor threatening network security. As a type of memory-resident malware, Java memory-resident malware not only has high concealment and ease of propagation, but also can use some advanced features of Java to implement more complex attack behaviors, posing greater threats to network security. This paper proposes a YARA-based method for detecting Java memory-resident malware, which defines some feature strings and regular expression rules to detect and locate malicious code in Java memory, and verifies the method through experiments. The experimental results show that the method can effectively detect Java memory-resident malware with high detection accuracy and low false positive rate.

        Key words: Java memory-resident malware; YARA; malware; detection method

        猜你喜歡
        檢測方法
        關(guān)于食品中氟烯草酸的檢測方法的研究
        淺談瀝青路面施工的非均勻性及檢測方法
        宮頸內(nèi)人乳頭瘤病毒的研究進(jìn)展
        電力計量裝置異常原因及監(jiān)測方法分析
        小兒氨酚黃那敏顆粒有關(guān)物質(zhì)對氯苯乙酰胺檢測方法的建立
        中國市場(2016年36期)2016-10-19 05:28:41
        粉狀速凝劑氯離子含量檢測方法
        日本乱偷人妻中文字幕在线| 久久亚洲精品中文字幕蜜潮| 亚洲乱码av一区二区蜜桃av| 免费av一区二区三区| 九一九色国产| 中文字幕不卡在线播放| 亚洲天堂av社区久久| 中文字幕精品亚洲字幕| 四虎影视成人永久免费观看视频| 久久久久亚洲精品无码网址| 香港三级欧美国产精品| 国产一区二区三区探花| 欧美午夜理伦三级在线观看| 蜜臀av 国内精品久久久| AV永久天堂网| 91久久精品一二三区色| 日韩午夜理论免费tv影院 | 日本三级欧美三级人妇视频| 亚洲高清国产品国语在线观看 | 丰满精品人妻一区二区| 日本中文字幕一区二区高清在线| 久久精品亚洲牛牛影视 | 国产中文制服丝袜另类| 久久天堂av综合合色| av网站免费线看精品| 成人白浆超碰人人人人| 久久精品国产热久久精品国产亚洲| 日本一区二区视频免费在线观看| 久久婷婷五月综合97色直播| 人人爽人人爽人人爽| 亚洲精品国产二区三区在线| av在线免费观看男人天堂| 插我一区二区在线观看| 亚洲香蕉视频| 亚洲视一区二区三区四区| 亚洲精品无码不卡| 性一乱一搞一交一伦一性| 亚洲成AV人片无码不卡| 中文字幕一区久久精品| 国产无遮挡又黄又爽免费网站| 国产成人精品免费久久久久|