건빵즙
188
2021-12-11 13:02:55 작성 2021-12-11 14:49:25 수정됨
13
7988

Spring Boot Log4j 제로데이 취약점이 있다고 합니다.


뉴스 링크

원격 코드 실행이 가능한 매우 심각한 취약점이라고 하니 Log4j 라이브러리 쓰시는 분들은 모두 버전 확인하시고 업그레이드 하세요!

2
  • 댓글 13

  • zepinos
    21k
    2021-12-11 14:27:34

    locgback 이 spring boot 기본일텐데요...

  • 건빵즙
    188
    2021-12-11 14:49:15

    zepinos 

    좋은 지적 감사합니다! 정정했습니다!

  • 제타건담
    8k
    2021-12-11 17:56:24

    알려주셔서 고맙습니다..저 같은 경우는 Spring Boot 프로젝트 만들때 일부러 기본적으로 제공되는 logback을 제거하고 log4j2 로 하다보니..

  • Mambo
    7k
    2021-12-11 22:06:58
  • 백백백
    2
    2021-12-11 23:54:33

    프로젝트에 log4j 사용중인데

    log4j.properties 파일 안에 log4j2.formatMsgNoLookups=true 

    추가 후 배포하면 될까요?? ㅠㅠ

  • 제타건담
    8k
    2021-12-12 00:07:43 작성 2021-12-12 00:08:17 수정됨

    백백백

    그렇게 하셔도 됩니다..그러나 가장 바람직한건 log4j 버전을 올리는게 가장 좋죠..
    영향을 받는 버전은 2,14,1 버전 까지입니다..현재 최신버전은 2.15.0 이니 이걸로 업데이트 하세요..


    제 댓글은 여기서 참조했습니다

  • 돈까스
    6k
    2021-12-12 14:31:13

    회사에서 사용중인 것들을 보니 대부분 log4j 1.x 이거나 logback 이네요.

    분야가 달라서 그런가... 주류에서 벗어난건가... 하는 생각이 들었습니다.


    -1
  • 제타건담
    8k
    2021-12-12 18:12:30

    돈까스

    주류에서 벗어났다..라고 하기엔 뭣하지만 log4j 1.X 버전에 대해서는 업그레이드 필요성은 있긴 합니다..

    logback의 경우는 Spring Boot 에서 사용하는 기본 라이브러리가 logback 이기 때문에 어느 정도 검증도 되어 있는거긴 하지만..로그 라이브러리에 대한 퍼포먼스 비교글을 보면 log4j -> logback -> log4j2 순서로 log4j2 가 더 좋다는 글을 본 적이 있습니다..

    다만 이번 이슈때문에 log4j2 2.15 를 사용해야 하는 점은 있죠..

  • fender
    25k
    2021-12-15 05:08:03 작성 2021-12-15 07:25:36 수정됨
  • 제타건담
    8k
    2021-12-15 12:27:28 작성 2021-12-15 13:18:24 수정됨

    fender 

    아놔..이것땜에 일껏 샘플 프로젝트도 만들어서 블로그 글로 정리해서 올렸드만..ㅠㅠ..

    fender 님의 글 올리신 내용에 대해 제가 이해한 바를 적어드리자면..

    속성값을 바꾸거나 환경변수를 바꾼다해도..

    해당 조회 패턴으로의 조회 시도는 한다는 뜻입니다..

    이 설명이 잘 이해가 안가시면 예를 하나 들어드릴께요..


    제가 자주 가는 시장의 부대찌개 집이 있는데 거기는 평소에는 가게 주인이 앞에 나와 있지 않습니다..근데 가게 앞에 있는 차임벨을 누르면 가게 주인이 나와서 주문을 받아요..그래서 부대찌개 주문을 받아 제공해줍니다..

    근데 영업시간이 끝나서 주인은 집에 갔지만 가게 앞에 차임벨은 있습니다..그것을 지나가던 술취한 손님이 계속 누르는 상황이 벌어지는 것과 같은거에요..

    이 상황을 해결할려면 가게 주인이 영업 끝나면 차임벨도 수거해서 집으로 가져가야 합니다..

    그렇지 않으면 차임벨은 고장날꺼에요..


    우리가 프로퍼티나 환경변수로 하는 것은 JNDI 의 lookup 기능 자체를 막은건 아닙니다..다만 그것을 활용하지 못하도록 처리한거에요..

    근데 문제는 여기서 발생합니다..lookup 기능 자체를 막은게 아니기 때문에 잘못된 주소로 계속 던지면 그것이 DDOS 공격과 같은 형태로의 공격이 이루어진다는 뜻이죠..

    위의 예를 빗대어 드리면 차임벨이 그 JNDI Lookup 기능이라 보시면 됩니다..


    이번에 업그레이드 한 2.15의 경우는 이 lookup 기능을 기본값을 disable을 한것이지 그 기능 자체를 없앤건 아닙니다..그렇기 때문에 2.15라 해도 lookup 기능을 enable로 바꾸면 언제든 이번과 같은 상황이 벌어지죠..

    그래서 아예 JNDI lookup 기능을 옵션으로도 조절이 안되게끔 하기 위해 아예 해당 기능 자체를 빼버린겁니다..

    그래서 현재로서는 가장 확실한 것은 현재 사용중인 jdk가 7일 경우엔 log4j를 2.12.2(현재 제작중이고 곧 나올것이라고 하네요..) 로 업데이트 하고 jdk 가 8일 경우엔 log4j를 2.16으로 업데이트 하고 이 두 방법을 모두 사용할 수 없는 상황이면 zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class 명령으로 JndiLookup.class 를 아예 jar 파일에서 제거하라고 안내(링크 참조) 하고 있습니다.


    저도 어제 저녁 무렵엔가 mvnrepository 를 통해 보니까 2.16 이 업데이트가 또 올라왔길래..아니..2.15가 업데이트 된지 얼마 안됐는데 왜 또 올라왔나 싶었는데..이런 이유가 있었네요..


    알려주셔서 고맙습니다 fender 님

  • fender
    25k
    2021-12-15 12:32:15

    제타건담 // 고생 많으십니다 ㅎㅎ; 저도 간접적으로 이 문제 때문에 삽질 중인데 더 크리티컬한 시스템 다루는 분들은 요새 스트레스가 심하시겠네요.

  • Mambo
    7k
    2021-12-15 19:27:15

    Log4j 전문가가 되가고 있으신거 같아요 ㅎㅎ


  • fender
    25k
    2021-12-16 10:20:44

    몇 일 전 릴리즈 된 그레이들 7.3.2에는 문제가 되는 버전의 log4j가 의존성에 포함되어 있는지 확인하는 기능이 포함되어 있다고 합니다.

    직접 테스트해본 것이 아니라서 경고만 띄우는지 빌드를 막는지는 모르겠지만 log4j 관련 보안 문제 대응에 도움이 될만한 내용인 것 같습니다.

  • 로그인을 하시면 댓글을 등록할 수 있습니다.