zoukankan      html  css  js  c++  java
  • framework log4j / logback / slf4j

    s

    Java安全之log4j反序列化漏洞分析

    https://www.cnblogs.com/nice0e3/p/14531327.html

    http://blog.nsfocus.net/apache-log4j-deserialization-vulnerability/

    北京时间18日清晨,Apache Log4j 被曝出存在一个反序列化漏洞(CVE-2017-5645)。攻击者可以通过发送一个特别制作的2进制payload,在组件将字节反序列化为对象时,触发并执行构造的payload代码。

    该漏洞主要是由于在处理ObjectInputStream时,接收器对于不可靠来源的input没有过滤。可以通过给TcpSocketServer和UdpSocketServer添加可配置的过滤功能以及一些相关设置,可以有效的解决该漏洞。目前Log4j官方已经发布新版本修复了该漏洞。

    【漏洞分析】
    Apache Log4j-2是美国阿帕奇(Apache)公司的基于Apache Log4j框架进行重构和升级,引入了大量丰富的特性,可以控制日志信息输送的目的地为控制台、文件、GUI组件等,并通过定义每一条日志信息的级别,使其能更加细致地控制日志的生成过程。Apache Log4j2日志框架被大量用于业务系统开发,用来记录日志信息。当系统日志配置使用带有Context lookups的非默认Pattern Layout时,攻击者可构造包含递归查找的恶意输入数据,成功利用此漏洞将触发无限循环,最终导致系统崩溃。

    相关地址:

    http://cve.mitre.org/cgi-bin/cvename.cgi?name=%09CVE-2017-5645

    https://issues.apache.org/jira/browse/LOG4J2-1863

    http://seclists.org/oss-sec/2017/q2/78

    受影响的版本

    所有Apache Log4j 2.*系列版本:

    • Apache Log4j 2.0-alpha1 – Apache Log4j 2.8.1

    不受影响的版本

    • Apache Log4j 2.8.2

    规避方案

    • 使用Java 7+的用户应立即升级至2.8.2版本或者避免使用socket server的相关类。

    参考链接:

    https://issues.apache.org/jira/browse/LOG4J2/fixforversion/12339750/?selectedTab=com.atlassian.jira.jira-projects-plugin:version-summary-panel

    • 使用Java 6的用户应该避免使用TCP或者UDP 的socket server相关类,用户也可以手动添加2.8.2版本更新的相关代码来解决该漏洞。

    参考链接:

    https://git-wip-us.apache.org/repos/asf?p=logging-log4j2.git;h=5dcc192

    MAVEN 引用方式:
            <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-core</artifactId>
                  <version>2.17.0</version>
            </dependency>
            <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-api</artifactId>
                  <version>2.17.0</version>
            </dependency>
                  <artifactId>log4j-core</artifactId>
                  <version>2.17.0</version>
            </dependency>
            <dependency>
                  <groupId>org.apache.logging.log4j</groupId>
                  <artifactId>log4j-api</artifactId>
                  <version>2.17.0</version>
            </dependency>

    Log4j 1.x版 引发线程blocked死锁问题 / 使用apache log解决高并发下log4j引起大量线程block问题

    http://www.aiprograming.com/b/pengpeng/23

    http://zl378837964.iteye.com/blog/2373591

    http://m.blog.csdn.net/article/details?id=52401328

    Apache Log4j是一个基于Java的日志记录工具,用起来非常方便,但是Log4j 1.x如果使用不慎,会引起死锁问题,进行导致整个网站的宕机

    WebLog Expert V5.6 Beta 3

    http://wt.duote.com/soft/6057.html

    http://70.duote.com.cn/wlexpert.exe

    WebLog Expert 能够分析网站的流量记录,将原始的流量记录分析出Activity statistics、Access statistics、Information about visitors、Referrers、Information about errors等基本而重要的流量信息,帮助你了解网友对于你的网站的使用状况。

     

    webloger digger ?

    http://guoqinhua1986-126-com.iteye.com/blog/231244

    ********************LOG4J配置文件 log4j.properties*********** 
    # Configure logging for testing: optionally with log file 
    log4j.rootLogger=WARN, stdout 
    # log4j.rootLogger=WARN, stdout, logfile 
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n 
    log4j.appender.logfile=org.apache.log4j.FileAppender 
    log4j.appender.logfile.File=target/spring.log 
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
    log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

    package com.idemfactor.crm.dao;
    
    import java.util.List;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.hibernate.LockMode;
    import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
    
    import com.idemfactor.crm.model.Role;
    
    /**
     * Data access object (DAO) for domain model class Role.
     * 
     * @see com.idemfactor.crm.model.Role
     * @author MyEclipse Persistence Tools
     */
    
    public class RoleDAO extends HibernateDaoSupport {
        private static final Log log = LogFactory.getLog(RoleDAO.class);
        // property constants
        public static final String ROLE_NAME = "roleName";
    
        protected void initDao() {
    	// do nothing
        }
    
        public void save(Role transientInstance) {
    	log.debug("saving Role instance");
    	getHibernateTemplate().save(transientInstance);
    	log.debug("save successful");
        }
    
        public void delete(Role persistentInstance) {
    	log.debug("deleting Role instance");
    	getHibernateTemplate().delete(persistentInstance);
    	log.debug("delete successful");
        }
    
        public Role findById(java.lang.Integer id) {
    	log.debug("getting Role instance with id: " + id);
    	Role instance = (Role) getHibernateTemplate().get(
    		"com.idemfactor.crm.model.Role", id);
    	return instance;
        }
    
        public List<Role> findByExample(Role instance) {
    	log.debug("finding Role instance by example");
    	List<Role> results = getHibernateTemplate().findByExample(instance);
    	log.debug("find by example successful, result size: " + results.size());
    	return results;
        }
    
        public List<Role> findByProperty(String propertyName, Object value) {
    	log.debug("finding Role instance with property: " + propertyName
    		+ ", value: " + value);
    	String queryString = "from Role as model where model." + propertyName
    		+ "= ?";
    	return getHibernateTemplate().find(queryString, value);
        }
    
        public List<Role> findAll() {
    	log.debug("finding all Role instances");
    	String queryString = "from Role";
    	return getHibernateTemplate().find(queryString);
        }
    
        public Role merge(Role detachedInstance) {
    	log.debug("merging Role instance");
    	Role result = (Role) getHibernateTemplate().merge(detachedInstance);
    	log.debug("merge successful");
    	return result;
        }
    
        public void attachDirty(Role instance) {
    	log.debug("attaching dirty Role instance");
    	getHibernateTemplate().saveOrUpdate(instance);
    	log.debug("attach successful");
        }
    
        public void attachClean(Role instance) {
    	log.debug("attaching clean Role instance");
    	getHibernateTemplate().lock(instance, LockMode.NONE);
    	log.debug("attach successful");
        }
    }

      log4j.properties

    log4j.rootLogger=info, stdout
    log4j.logger.com.idemfactor=debug
    
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=[%d{ISO8601}] %5p [%t] (%c{1}:%L) - %m%n
    
    #log4j.appender.R=org.apache.log4j.RollingFileAppender
    #log4j.appender.R.layout=org.apache.log4j.PatternLayout
    #log4j.appender.R.layout.ConversionPattern=[%d{ISO8601}] %5p [%t] (%c{1}:%L) - %m%n
    #log4j.appender.R.File=/tmp/fs.log
    #log4j.appender.R.MaxFileSize=1000KB
    #log4j.appender.R.MaxBackupIndex=7
    
    
    # Need this to show all exception details in struts
    log4j.logger.org.apache.struts.action.ExceptionHandler=debug

    end

  • 相关阅读:
    ASP.NET编程的十大技巧
    C#学习心得(转)
    POJ 1177 Picture (线段树)
    POJ 3067 Japan (树状数组)
    POJ 2828 Buy Tickets (线段树)
    POJ 1195 Mobile phones (二维树状数组)
    HDU 4235 Flowers (线段树)
    POJ 2886 Who Gets the Most Candies? (线段树)
    POJ 2418 Cows (树状数组)
    HDU 4339 Query (线段树)
  • 原文地址:https://www.cnblogs.com/lindows/p/14390585.html
Copyright © 2011-2022 走看看