log4j 2

logging - java에서 System.out.println()을 왜 사용하면 안될까??

logging - java에서 System.out.println()을 왜 사용하면 안될까?? 보통 현업에서 일할때에 절대 System.out.println()을 쓰지 말라는 말을 듣는다. -> 가급적 쓰지말자~ 가 아니라 절대다!! 대신 로깅을 진행할 때에는 주로 얼마전에 문제가 있었던 Log4j를 사용하고는 한다. 왜일까?? Sync문제 발생 한번 System.out.println()의 구현 코드를 살펴보도록 하자. 다양한 내부 코드들이 있는데, 이거는 보면 동작 과정에서 synchronized를 사용해서 동기화를 걸어준다.(writedln도 물론 synchronized가 걸려있는것을 확인 가능하다.) 즉, 해당 코드가 작동할 때에 다른 쓰레드는 작동이 불가능하다는 것이다!! 따라서 이 System.o..

이론 정리/java 2023.01.06

Log4j 보안 취약점에 관하여

Log4j 보안 취약점 Log4j란? Log4j란 java/kotlin등의 코딩 도중 해당 프로그램의 로그를 기록해주는 라이브러리이다. 해당 보안 취약점이 일어난 배경 Log4j는 위에서 설명했듯, 코딩 도중에 프로그램의 로그를 기록해 준다. 그런데 이 방법은 JNDI(java naming and directory interface)를 사용하여 자바가 디렉토리를 통해 데이터를 찾을 수 있도록 하는 방식을 사용한다. 이 JNDI에서 LDAP가 문제가 되었는데, Log4j 에서 ${jndi:}를 사용하면 hello 객체를 실행하게 한다. 그리고 이를 사용하면 log4j로그가 남겨질 수 있는 모든 곳에 해당 방식을 사용하여 공격이 가능해지게 된다. 그래서 어떤 문제가 생기는가? 먼저 Log4j는 굉장히 많은 ..