최대의 보안사고 중 하나가 터지는 것 같군요. CVE-2021-44228 혹은 Log4Shell 이라는 취약점으로, log4j 라는 모듈 때문인데, Apache 서버를 사용하는 분들은 우선 조심하셔야겠습니다.
apache-log4j1.2 혹은 apache-log4j2 라는 것이 설치되어 있으면 영향을 받는 것 같습니다.
예를들면, Ubuntu/Debian 서버라면
% apt list --installed | grep "log4j"
% dpkg -l | grep log4j (또는)
해서 목록이 뜨는지 체크해보세요. 만약 해당사항이 있다면 추가 조치가 필요합니다.
1. log4j를 2.15.0 2.17.0 버전 이상으로 올리면 되는데, 정식 릴리즈 된 것이 아니라 설치하는데 손이 좀 가야겠지요.
2. log4j2.formatMsgNoLookups 속성을 true로 바꿔줘도 된다고 하네요 (log4j가 2.10.0이상인 경우). 터미널에서
% java -Dlog4j2.formatMsgNoLookups=true -jar myapp.jar
이렇게 한다는군요.
3. 그 밑에 버전들도 꼼수가 있기는 하네요.
초보자도 따라할수 있을만큼 쉽고도 막강한 기능(?)이라서 이를 활용한 랜섬웨어가 곧 등장할 것 같다는 것이 관련자들의 견해 같습니다 ㅠㅠ.
PS: 혹시 본인 시스템에 취약점이 있는지 누가 스캔하고 갔는지 찾아보려면 다음과 같이 터미널에서 입력하면 됩니다. (nginx 사용하고 로그파일이 /var/log/nginx/*.log에 있을 경우의 예)
% egrep -i -r '\$\{jndi:(ldap[s]?|rmi|dns):/[^\n]+' /var/log/nginx/*.log
% egrep -i -r '\$\{jndi:' /var/log/nginx/*.log
Update) 나중에 찾아보시는 분들의 정보 차원에서 업데이트 합니다. CVE-2021-44228 취약점이 패치된 버전은 최종적으로,
- Java 7을 써야하는 사람 : Log4j 2.12- ==> Log4j
2.12.2+2.12.3+ 버전으로 업데이트 - Java 8을 쓰는 사람 : Log4j 2.13+ ==> Log4j
2.15.0+2.17.0+ 버전으로 업데이트
2.12에 머물러야 하는 사람들이 많아서, 지원중단된 버전임에도 패치 2.12.2+ 를 내놨네요. (패치 버전에 혼선이 있는 것은, 중간 위험도의 DoS 취약점 2개를 패치하느라 2.15 -> 2.17로 되어서지만, 이런 유형은 수도없이 나오는 것이라서 계속 언급할 필요는 없어 보입니다~ㅎ)
흔히 사용하는 아파치 웹서버(httpd)와는 무관합니다.
아파치 재단에서 굉장히 다양한 오픈소스 프로젝트들을 관리해 주고 있는데, log4j는 그 중 하나일 뿐이며 아파치라는 이름이 붙은 대부분의 다른 프로그램들과는 관련이 없습니다. 아, 물론 자바에서는 나름 유명한 라이브러리이기 때문에 자바로 만든 프로그램을 서버에서 돌리고 있다면 주의해야 합니다. RXE 커뮤니티에서 흔한 상황은 아니겠지만, 저는 아까부터 엘라스틱서치 사용하시는 분들 서버를 패치해 드리고 있네요.. ㅠㅠ
우분투 등 일반적인 리눅스 배포판에서 기본 제공하는 버전을 사용하신다면 조만간 apt-get이나 yum 등으로 업데이트할 수 있을 테니 임의로 덮어씌우기보다는 설정만 땜빵해놓고 조금 기다리는 것을 추천합니다.
단, 엘라스틱서치처럼 설정만 변경해서는 문제가 해결되지 않는 경우도 있습니다. 이 경우 log4j-core.버전.jar 파일을 일반적인 압축 프로그램으로 열어서 org/apache/logging/log4j/core/lookup/JndiLookup.class 파일만 삭제하고 다시 올리는 방법도 정식 업데이트를 기다리는 동안 임시땜방 방편으로는 꽤 괜찮습니다. (jar 파일은 사실상 zip 파일이므로 반디집 등으로 열어서 쉽게 조작할 수 있습니다.) 그런데 기왕 jar 파일을 직접 건드릴 거라면 취약점이 해결된 2.15.0 버전의 core 및 api 파일을 구해서 덮어씌우더라도 문제없을 가능성이 높습니다. 워낙 보수적으로 패치되는 프로그램이라...