# 서론
전세계적으로 역대급 보안이슈가 터졌다. 한번쯤은 들어봤을법한 마인크래프트 라는 게임에서 서비스를 하는 한 회사가 보안취약점을 이용한 해킹 시도를 찾아 내면서 해당 보안이슈가 밝혀졌다.
Apache에서 제공하는 오픈소스 라이브러리인 Log4j의 취약점을 통해 상대방 컴퓨터에 원격접속해 온갖짓을 다할 수 있다는 것이다.
해당 취약점이 발생하는 log4j버전은 2.0-beta9 ~ 2.14.1 모든 버전이다 내가 받은 프로그램에 Log4j의 해당 버전이
포함된다면 중요파일 삭제, 컴퓨터 끄기, 웹캠 켜기같은 나쁜짓들을 나쁜 마음 먹은 사람들이 얼마든지 할 수 있게 한다.
그럼 이 문제를 어떻게 해결할 수 있을지에 대해 몇가지 찾아보았고 글로 남겨두려 한다.
#본론
해결 방법은
- log4j 를 버전업을 해 2.15버전 이상으로 설치한다.
- 웹서버 에서 많이 쓰는 빌드 프로그램 기준으로 한다면 Maven 프로젝트 에서는 다음과 같은 버전명시
구문 추가
<properties>
<log4j2.version>2.15.0</log4j2.version>
</properties> - gradle 에서는 gradle.build파일에
ext['log4j2.version'] = '2.15.0'
구문을 추가해 버전을 명시함으로써 해결된다. - 개인적인 의견으로는 밑에 서술할 몇가지 문제 해결법보다 라이브러리 교체라는 훨씬 근본적인 문제 해결이라고 판단하기 때문에 가장 좋은 해결법이라고 본다.
- 웹서버 에서 많이 쓰는 빌드 프로그램 기준으로 한다면 Maven 프로젝트 에서는 다음과 같은 버전명시
- 2.0-beta9 버전 부터 2.10 버전에서는 Log4j 라이브러리 내부의 /apache/logging/log4j/core/lookup/jndi.lookup.class
jndi.lookup클래스를 삭제해 해당 보안이슈가 나는 클래스를 삭제하면 된다.
개인적인 생각인데 대부분이 jdbc를 사용하기 때문에 이부분을 없애면 문제가 해결될거라고 판단하지만
결국은 이번 기회에 log4j를 버전업 해 해결하는게 더 근본적인 해결책이라고 생각 한다. - 2.10 ~ 2.14버전 까지는 프로그램이 실행될때 JVM에 환경변수를 넣어주면서 해결할 수 있게된다
java -Dlog4j2.formatMsgNoLookups=true -jar [프로젝트명].jar
하지만 이 방법도 실행될때 실행변수로 매번 해주어야 한다는 불편함 때문에 근본적인 해결책이라곤 생각하지 않는다.
- 웹서버의 경우 톰캣이나 아파치 그리고 제우스 같은 서블릿 컨테이너기반의 프로그램은 해당 서버가 실행될때 JVM옵션으로 넣어주는 설정을 만져 저 커맨드라인 부분을 넣어준다면 해결될 것 이다.
이와 관련된 Documentation 은 다음과 같다.
https://tomcat.apache.org/tomcat-9.0-doc/config/index.html
ps.톰캣의 경우 내부에 존재하는 catalina.properties 파일에서 변수를 추가해주면 된다.
- 웹서버의 경우 톰캣이나 아파치 그리고 제우스 같은 서블릿 컨테이너기반의 프로그램은 해당 서버가 실행될때 JVM옵션으로 넣어주는 설정을 만져 저 커맨드라인 부분을 넣어준다면 해결될 것 이다.
# 여담
진짜 원격접속으로 무엇이든지 할 수 있게 하는 치명적인 보안이슈라니...
영화에서 엄청 핸섬하거나 멋있는 해커들이 타자를 미친듯이 쳐가면서 해킹하는 그런 모습이 떠오르는 그런 정말 말도안되는 큰 이슈가 아닐까 생각한다.
심지어 log4j는 자바기반의 서버일 경우 안쓰는 웹어플리케이션이 없을정도인데 이번기회에라도 발견되서 사람들이 너도나도 발빠르게 문제해결을 위한 커뮤니티 형성이 되는것을 보고 세계가 정말 하나가 되었구나 그리고 문제가 발생해도 긴급하게 문제를 해결 할 수 있구나 라는것을 느꼈다.
또한 컴퓨터 보안이나 해킹에 관해 많은 관심이 생겼고 내 분야는 아니지만 조금씩 취미 레벨에서 공부를 해보면 좋겠다는 생각을 하게 되었다.
#출처
https://spring.io/blog/2021/12/10/log4j2-vulnerability-and-spring-boot
'프로그래밍 회고록 > Java & Spring' 카테고리의 다른 글
Spring Mvc프로젝트의 이해 (0) | 2022.08.23 |
---|---|
SpringBoot 2.4.1 이후 문법 변화에 따른 환경분리를 위한 설정파일 작성법 (0) | 2022.06.03 |
Java(Spring)와 JavaScript(vue.js)로 서버단 Mp3파일 클라이언트로 보내 재생하기 - 1.Java (2) | 2021.11.03 |
Java와 java_websocket library를 이용한 WebSocket Clinet쪽 통신방법 (0) | 2021.10.17 |
DB JNDI환경설정을 Spring에서 Annotation로 Dbconfig설정하기 (0) | 2021.08.23 |