Backend/JAVA

🙀 log4j 보안 취약점 발견 기념(?)으로 짧게 공부하기

ಠಿ_ಠ 💻 2022. 1. 4. 21:32

log4j 보안 취약점이 나타난지 벌써 1달 정도가 넘었다. 엄청나게 큰 보안 이슈이다 보니까 빠르게 패치를 끝낸 상황일텐데,

그 상황을 지켜보면서, 내가 모르는게 너무 많아서 아주 짧게나마 공부해보고자 한다.

 

로그를 찍는다..! 근데 왜 라이브러리로?

로그를 찍을 때, 나는 System.out.println("######## 여기여기 ##########"); 이렇게.. 막 찍었다. 일단 로그를 찍는 라이브러리가 있는지 몰랐다! 그래서 System.out 을 이용하여 나의 로그를 여기저기에 남기고 다녔다.

그러다가 교육을 받으면서 다양한 라이브러리들이 존재함을 알게 되었다.

System.out 으로 쓰는 대신에 사용하라고 했다. 근데 '왜?' 인지는 몰랐던 것 같다. '왜'일까?

~와 같은 다양한 이유들이 있지만, 그 중에서도 성능적인 면에 대해서만 살짝 알고 가려고 한다.

 

Synchronzied?

println 은 synchronized 하다. 멀티스레드한 환경에서 thread-safe 하도록 만들기 위해 synchronized 를 메소드에 붙이곤 한다. 운영체제에서 중요한 개념인 멀티스레드 2021.06.12 - [CS/OS] - 📌프로세스와 스레드

개념을 공부하다 보면, 스레드가 스택을 제외한 나머지 부분을 공유하다보니 나와야하는 값이 나오지 않는 등과 같은 문제가 나타나는 걸 배웠을 것이다.

 

이러한 문제를 해결하기 위해, synchronized 를 사용하곤 한다. (난 안해봤지만..) 이를 통해 block - non block을 반복하며 동시 접근을 막는다. 하지만 block과 non block 의 과정이 반복되면, 이는 성능 저하를 불러 일으킬 수 있다! lock을 걸어 block 시키면 다른 스레드가 접근할 수 없기 때문에 lock을 반환할 때까지 기다려야하는 상황이 나타난다.

만약 사용자가 많은 대고객 서비스라고 생각해보자. 잘 돌아가는지 보고 싶어서 바보 개발자인 내가 운영 환경에서 필요한 모든 곳에 System.out.println 을 찍어 확인하려고 한다. 어떻게 될까?! 아마도 엄청 느린 서비스를 제공해서 아무도 우리 서비스를 안 쓰게 될 것이다.

log4j, log4j2, logback, slf4j 등 비교해보는 공부도 같이 하려고 했는데..

너무길어지니까 오래걸리고 하기싫어져서 다음 언젠가로 넘긴다!

급하게 마무리한다.. 안녕!

 

출처

https://tecoble.techcourse.co.kr/post/2020-07-30-use-logger/

 

로그 전략을 통해 메시지를 남기자

tecoble.techcourse.co.kr

https://m.lawtimes.co.kr/Content/LawFirm-NewsLetter?serial=175171 

 

Log4j 보안취약점 해킹대응방안 및 시사점

[ 2021.12.16 ] 12월 10일 美 Foxnews에서는 위험척도 최고등급으로 해커가 정보시스템의 모든 정보에 접근할 수 있는 권한을 획득 할 수 있는, 전세계적으로 역사상 가장 위험한 Log4j 보안취약점 보도

m.lawtimes.co.kr