지금 우리가 수행할 작업은 1.x 버전에서 2.x 버전으로 변경하는 작업이므로 해당 작업을 중점으로 설명하겠다.
( log4j2-2.x.x 버전 업그레이드는 라이브러리만 교체하면 되는것으로 알고 있음)
<라이브러리 교체>
프로젝트의 상황에 따라 일부 라이브러리는 차이가 있을 수 있다.
(예를 들면 remix / jdbc가 붙은 log4j 관련 라이브러리)
그러나 버전 업그레이드에 반드시 필요한 파일은 3개가 있으며 slf4j를 사용하는 경우 1개의 교체해야하는 파일이 있다.
log4j-core-2.x.x.jar
log4j-api-2.x.x.jar
log4j-web-2.x.x.jar
log4j-slf4j-impl-2.x.x.jar
추가
Slf4j 사용시 추가 ( 교체 : slf4j-log4j12-1.x.x.jar)
기존 프로젝트에 삭제되어야하는 라이브러리는 다음과 같다.
log4j-1.x.x.jar
slf4j-log4j12-1.x.x.jar (slf4j를 사용하지 않는 경우에는 해당 파일이 없을 수 있으나 대부분의 프로젝트에는 있다.)
추가되어야 하는 라이브러리
log4j-core-2.x.x.jar
log4j-api-2.x.x.jar
log4j-web-2.x.x.jar
log4j-slf4j-impl-2.x.x.jar / log4j2-2.x.x용 바인딩 파일 (slf4j를 사용하지 않는 경우 제외)
slf4j를 사용하며 기존에 존재하는 라이브러리 중 유지해야하는 라이브러리
slf4j-api-1.x.x.jar / 기존 소스에서 API를 사용하고 있으므로 삭제하지 않음
<설정 변경 : WEB.XML>
log4j2.xml 경로설정 - log4j-2.x 버전에서는 web.xml에서 경로나 파일명을 명시하지 않으면 기본값으로 classpath: 경로에서 log4j2-test.xml 또는 log4j2.xml 파일을 찾는다고 한다. (log4j 에서도 동일했던 것 같은데..)
Logback에서 발생하는 원격코드 실행 취약점 (CVE-2021-42550)[2] - 공격자가 Logback구성파일인 logback.xml을 조작할 경우, 해당파일을 참조하는 과정에서 삽입된 JNDI*쿼리문을 실행 해 임의의 원격코드를 실행할 수 있는 취약점 ※ 공격 전제조건 - Logback구성파일 logback.xml에 대한 쓰기 권한이나 해당파일을 수정/덮어쓰기 가능할 경우 - 수정된 구성파일 logback.xml을 환경에 적용(reload)할 수 있는 권한
* JNDI : 디렉토리 서비스에서 제공하는 데이터 및 객체를 발견하고 참고하기 위한 Java API (Java Naming and Directory Interface의 약어)
영향받는버전
- 1.2.8 이하 모든버전 - 1.3.0-alpha10 이하 모든버전
해결방안
취약점 업데이트 (패치 적용 前 업무시스템의 서비스 영향 검토 후 적용할 것) - 1.2.8이하 버전의 경우, 최신 버전(1.2.9) 업그레이드 적용 [3] - 1.3.0-alpha10이하 버전의 경우, 1.3.0-alpha11로 업그레이드 적용[3] ※ 1.3.x시리즈의 경우, 기본적으로 JAVA9 모듈화 되어 있으며 slf4j-api 버전 2.0.x 필요 (runtime에는 Java8이상이면 되지만, 소스에서 Logback을 빌드하려면 Java9 필요)
임시 조치방안 (패치 즉시적용 불가할 경우)
1) 구성파일 logback.xml파일의 권한을 read-only로 변경 ※ logback.xml 파일 위치 : /src/main/resources/
iReport는 JasperReports라이브러리를 통해 모든 종류의 Java 응용에 사용할 수 있고, 복잡한 보고서를 생성하는 오픈 소스 프로그램이다. 이 iReport는 100% Java로 구현됐으며, GNU (General Public License)에서 소스 코드를 배포한다.
iReport는 그래픽 인터페이스를 통해 어떤 종류의 복잡한 보고서도 간단하고 빠르게 생성할 수 있고, JasperReports의 XML 문법을 공들여 배우지 않아도 개발 시간을 단축해 개발자에게 큰 도움을 준다.
즉, iReport는 JasperReports를 위한 Reports Design Tool이라고 할 수 있다.