일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Spock Mock
- Javascript
- enum
- Spock Stub
- frontend
- 자바스크립트
- docker desktop 대체
- Rancher Desktop설치
- 의존성주입
- Vue+Typescript
- mock stub
- ECMAScript
- docker desktop 유료화 정책
- vue store
- Docker Desktop 쓰고싶다
- Mock vs Stub
- HTTP란
- 공짜로 Docker Desktop같은거 쓰기
- @Transaction isolation
- 타입스크립트
- 트랜잭션 격리
- TypeScript
- TCP/IP
- mock stub spy
- Spock Spy
- Spock Mock Stub Spy
- @Transaction propagation
- webpack
- DI
- nuxtjs/composition-api buildModules
- Today
- Total
끄적끄적
gradle 환경에서 apache log4j 2.15.0 버전 업데이트하기 본문
최근에 보안 취약점으로 문제가 있었던 log4j에 대해 어디를 업데이트해야되는지 기록해두려한다.
취약 버전은 2.0 beta9 <= Log4j2 <= 2.14.1 (1.x 버전은 해당사항 없음) 이라고 한다.
문제사항은 Log4j의 ldap JNDI 파서를 통한 원격 코드 실행(RCE - Remote Code Execution) 취약점이 있다는 것이고, 정확히 어떻게
코드를 실행시키는지는 잘모르겠다. log4가 로그를 출력할 때 로그에 사용자ID 등이 있을때 자동으로 내부에서 운영중인 LDAP 서버 등에 접속을 해서 변환하는 기능을 제공하는데 이 기능을 이용하면 해커의 서버로 접속해서 해커가 만든 악성 코드를 서버로 다운로드 받게 하고 이 코드를 이용해서 서버를 탈취할 수 있다고 한다..
대충 알겠고, 그럼 얼른 업데이트를 해보자.
먼저 내가 어떤 버전을 쓰는지 확인하는 방법은 몇가지 있다.
1.External Libraries에 세팅되어있는 패키지를 보는 방법
나의 경우엔 log4j-core에 대한 사항은 없지만 저기 부분에 log4j-core가 디펜던시 걸려있다면 해당대상이 된다고 한다.
2.터미널을 통해 확인하는 방법
./gradlew dependencies | grep log4j
or
gradle dependencies | grep log4j
or
springboot maven plugin > pom.xml
log4j-core 가 2.15.0 미만이라면 문제가 있으니. 그럼 이 버전을 변경해 보자.
방법은 간단하다.
implementation ('org.apache.logging.log4j:log4j-api:2.15.0')
implementation ('org.apache.logging.log4j:log4j-to-slf4j:2.15.0')
implementation ('org.apache.logging.log4j:log4j-core:2.15.0')
또는 강제 디펜던시가 걸려있는경우
implementation ('org.apache.logging.log4j:log4j-api:2.15.0'){force = true}
implementation ('org.apache.logging.log4j:log4j-to-slf4j:2.15.0'){force = true}
implementation ('org.apache.logging.log4j:log4j-core:2.15.0'){force = true}
force로 강제 업데이트 시켜주면된다.
변경되었는지 확인해보자.
변경하면 위와 같은 형태로 변경된다.
정상적으로 변경된 것으로 보인다.
위와 같이 버전을 업데이트를 하는건 java8이상이 필요하다. 내 환경은 java11의 환경이였고, 그렇기 때문에 그냥 업데이트를 시켜주면 간단했지만, 버전이 낮거나 업데이트를 하기 힘든 상황이라면 아래와 같은 방법으로 해결할 수 있다고 한다. 하지만 아무래도 가장 안전한 방법은 2.15.0으로 올리는 것을 추천한다.
log4j 2.10.0 이상 사용 시 다음의 방법 중 한 가지 이상의 방법을 사용한다.
1.Java 실행 인자(Arguments) 에 시스템 속성을 추가한다. -Dlog4j2.formatMsgNoLookups=true
2.Java 실행 계정의 환경 변수 혹은 시스템 변수로 LOG4J_FORMAT_MSG_NO_LOOKUPS=true를 설정한다.
log4j 2.7.0 이상 사용 시 log4j 설정(log4j.xml 등)에 PatternLayout 속성에 있는 %m 부분을 %m{nolookups} 으로 교체한다.
log4j 상기버전 미만일 경우 가장 어려운 상황으로, JndiLookup 클래스와 JndiManager 클래스를 읽지 못하도록 조치해야 한다. log4j-core.jar 를 직접 빌드하거나, 자바 프로젝트에 패키지명까지 맞춰가면서 dummy화 시켜야 한다.
log4j 외에 다른 로깅 모듈로의 교체를 검토한다.
'Back-end > Java' 카테고리의 다른 글
[SPOCK] Spock의 Mock, Stub, Spy에 대해서 알아보자 (0) | 2022.09.13 |
---|---|
[JAVA] @Transaction 전파 및 격리에 대한 정리 (0) | 2022.04.28 |
[GC]Garbage Collector에 대한 정리 (0) | 2021.12.08 |
[JUNIT] Mock Test 작성요령 (0) | 2021.12.07 |
[JUNIT] Intellij Junit Test 실패 No tests found for given includes 에러 해결방법 (0) | 2021.11.29 |