Log4j 취약점을 스캔하고 수정하는 방법은 무엇입니까?

Log4j 취약점은 현대 시스템 보안에 있어 가장 심각한 위협 중 하나로 간주됩니다.

로깅은 현대 애플리케이션 운영의 필수적인 부분이며, 로깅 라이브러리인 Log4j는 이 분야에서 중요한 역할을 합니다.

대다수의 애플리케이션, 서비스 및 시스템에서 Log4j가 활용되므로, 작년에 발견된 이 취약점은 Log4j를 사용하는 거의 모든 곳에 영향을 미칩니다.

전 세계적으로 사이버 보안에 대한 우려가 커짐에 따라, 조직과 개인은 그들의 애플리케이션, 시스템 및 데이터를 보호하기 위한 적극적인 조치를 취하고 있습니다.

이러한 취약점이 처음 발견되었을 때, 사이버 보안 전문가와 기업들은 큰 긴장감에 휩싸였습니다.

따라서 데이터, 네트워크, 평판 및 고객 신뢰를 지키기 위해서는 Log4j 취약점을 신속히 식별하고 수정하는 것이 필수적입니다.

이 글에서는 Log4j 취약점이 무엇인지, 그리고 이를 식별하고 해결하는 방법에 대해 자세히 알아보겠습니다.

우선, Log4j가 무엇이며 왜 필요한지부터 살펴보겠습니다.

Log4j란 무엇인가?

Log4j는 자바로 작성된 오픈 소스 로깅 유틸리티로, 애플리케이션과 시스템에서 생성되는 로깅 기록을 저장, 형식화 및 전송하고 오류를 확인하는 데 주로 사용됩니다. 로깅 기록은 웹페이지 및 브라우저 데이터부터 Log4j가 실행되는 시스템의 상세 기술 정보까지 다양한 형태를 가질 수 있습니다.

개발자들은 코드를 처음부터 작성하는 대신 Log4j 라이브러리를 애플리케이션에 통합하여 사용할 수 있습니다.

Log4j를 통해 개발자들은 애플리케이션과 관련된 모든 이벤트를 정확한 로깅 정보로 추적할 수 있습니다. 이는 애플리케이션을 지속적으로 모니터링하고, 문제를 조기에 발견하며, 성능 또는 보안상의 더 큰 문제로 발전하기 전에 해결하는 데 매우 유용합니다.

이 자바 기반 라이브러리는 Ceki Gülcü에 의해 개발되었으며, 2001년에 Apache License 2.0에 따라 공개되었습니다. Log4j는 JNDI(Java Naming and Directory Interface) 서비스를 사용하여 애플리케이션이 LDAP, DNS, CORBA와 같은 다른 애플리케이션과 상호 작용할 수 있도록 하며, 자바 기반 애플리케이션에 디렉토리 및 이름 지정 기능을 제공합니다. Log4j는 작업을 수행하기 위한 세 가지 주요 구성 요소로 이루어져 있습니다.

  • 로깅 기록을 캡처하는 로거
  • 다양한 스타일로 로깅 기록의 형식을 지정하는 레이아웃
  • 로깅 기록을 다양한 대상으로 전송하는 어펜더

실제로 Log4j는 웹에서 가장 많이 사용되는 로깅 라이브러리 중 하나이며, 여러 산업 분야와 다양한 국가의 조직에서 널리 활용되고 있습니다. 구글, 마이크로소프트, 애플, 클라우드플레어, 트위터 등 주요 클라우드 서비스를 포함한 수많은 애플리케이션에 통합되어 있습니다.

개발자인 Apache Software Foundation은 Log4j의 이전 버전에서 발견된 문제점을 해결하기 위해 Log4j 2로 업그레이드했습니다. 하지만 작년에 Log4j에서 심각한 취약점이 발견되었습니다. 이 취약점을 해결하지 않으면 공격자가 애플리케이션과 시스템에 침투하여 데이터를 훔치고, 네트워크를 감염시키며, 다른 악의적인 활동을 수행할 수 있습니다.

이제 Log4j 취약점에 대해 더 자세히 알아보겠습니다.

Log4Shell – Log4j 취약점이란 무엇인가?

Log4Shell은 Log4j 라이브러리의 핵심 기능에 영향을 미치는 매우 심각한 사이버 보안 취약점입니다. 이 취약점을 통해 공격자는 원격 코드 실행을 수행하여 인터넷에 연결된 장치나 애플리케이션을 제어할 수 있습니다. 공격이 성공하면 다음과 같은 결과를 초래할 수 있습니다.

  • 장치나 시스템에서 임의의 코드 실행
  • 네트워크 및 데이터에 대한 전체 액세스 권한 확보
  • 영향을 받는 애플리케이션이나 장치의 파일 수정 또는 암호화

이 취약점은 2021년 11월 24일, 알리바바(중국의 대형 전자상거래 기업)의 보안 연구원인 Chen Zhaojun에 의해 처음 보고되었습니다. 이 취약점은 12월 9일에 알리바바의 클라우드 보안 팀이 발견한 마인크래프트 서버에 영향을 미쳤습니다.

이후 NIST는 이 취약점을 National Vulnerability Database에 게시하고 CVE-2021-44228이라는 이름을 부여했습니다. Apache Software Foundation은 이 취약점을 CVSS 심각도에서 10점으로 평가했습니다. 이는 매우 드물게 주어지는 점수이며, 취약점이 광범위하게 쉽게 악용될 수 있어 조직과 개인에게 심각한 피해를 초래할 수 있음을 의미합니다.

이에 대응하여 Apache는 이 취약점에 대한 패치를 발표했지만, 일부 문제가 해결되지 않은 채로 남아 있어 다른 취약점이 연이어 발생했습니다.

  • JNDI 조회를 통해 서비스 거부(DoS) 공격을 유발한 CVE-2021-45046
  • CVE-2021-45105 – 해커가 스레드 컨텍스트 맵 정보를 제어하고 조작된 문자열을 해석하여 DoS 공격을 일으킬 수 있음
  • CVE-2021-44832는 RCE(원격 코드 실행)을 통해 모든 Log4j 2 버전에 영향을 미침

Log4Shell은 어떻게 작동하는가?

Log4Shell의 심각성과 잠재적인 피해를 이해하려면, 이 Log4j 취약점이 어떻게 작동하는지 아는 것이 중요합니다.

Log4Shell 취약점을 통해 공격자는 네트워크에 원격으로 임의의 코드를 주입하여 완전히 제어할 수 있습니다.

이 사이버 공격은 Log4j와 같은 로깅 라이브러리에서 시작되어 로그 정보를 수집하고 저장하는 방식으로 진행됩니다. 로깅 라이브러리가 없다면, 서버의 모든 데이터는 수집 즉시 저장됩니다.

하지만 데이터를 분석하거나 특정 로그 정보를 기반으로 특정 작업을 수행해야 하는 경우, 로그 데이터를 저장하기 전에 구문 분석할 로깅 라이브러리가 필요합니다.

Log4j 취약점으로 인해 Log4j를 사용하는 모든 시스템이나 애플리케이션은 사이버 공격에 취약해집니다. 로깅 라이브러리는 입력값을 기반으로 코드를 실행하는데, 해커는 이 취약점을 이용하여 입력값을 조작하여 로그 라이브러리가 악성 코드를 실행하도록 만들 수 있습니다.

이 과정에서 많은 일이 백그라운드에서 일어납니다. Log4j가 특수하게 제작된 문자열을 전달받으면, LDAP 서버를 호출하고, 해당 디렉토리에 호스팅된 코드를 다운로드하여 실행합니다. 이러한 방식으로 공격자는 악성 코드를 저장할 LDAP 서버를 만들어, 코드가 실행되는 서버를 제어할 수 있게 됩니다. 그런 다음 악성 코드를 대상 애플리케이션이나 시스템으로 보내 완전히 제어하게 됩니다.

따라서 Log4j 취약점을 악용하는 방법은 다음과 같습니다.

  • 공격자는 취약한 Log4j 버전을 사용하는 서버를 찾습니다.
  • 악성 LDAP 서버의 링크와 함께 대상 서버에 get 요청을 보냅니다.
  • 대상 서버는 요청을 확인하는 대신 이 LDAP 서버에 직접 연결합니다.
  • 공격자는 이제 악성 코드가 포함된 LDAP 서버 응답을 대상 서버로 보냅니다. Log4j의 취약점으로 인해 코드가 검증 없이 실행될 수 있기 때문에, 해커는 이 취약점을 악용하여 대상 서버에 침입하고 연결된 시스템, 네트워크 및 장치를 악용할 수 있습니다.

Log4j 취약점이 사용자에게 어떤 피해를 줄 수 있는가?

Log4j 취약점은 광범위한 소프트웨어 애플리케이션 및 시스템에서 사용되기 때문에 심각한 우려를 불러일으킵니다.

로깅은 대부분의 소프트웨어 애플리케이션에서 필수적인 기능이며, Log4j는 업계 최고의 솔루션으로 널리 사용되고 있어, 다양한 소프트웨어 시스템에서 활용됩니다.

Log4j를 사용하는 주요 서비스와 애플리케이션으로는 마인크래프트, AWS, iCloud, 마이크로소프트, 트위터, 인터넷 라우터, 소프트웨어 개발 도구, 보안 도구 등이 있습니다. 따라서 공격자는 가정 사용자, 코드 개발자, 서비스 공급자, 기타 관련 전문가 및 개인의 수많은 애플리케이션, 서비스 및 시스템을 대상으로 공격할 수 있습니다.

또한, Log4j 취약점은 공격자가 악용하기 매우 쉽습니다. 공격을 수행하는 데 전문적인 기술 수준이 필요하지 않아 공격 사례가 증가하고 있습니다.

Log4j 취약점의 영향은 다음과 같습니다.

  • DoS 공격
  • 공급망 공격
  • 코인 채굴
  • 랜섬웨어 및 트로이 목마와 같은 악성 코드 주입
  • 임의 코드 주입
  • 원격 코드 실행

그리고 이 외에도 더 많은 피해가 발생할 수 있습니다.

이러한 공격의 결과로 애플리케이션, 시스템 및 장치에 대한 소유권을 잃을 수 있으며, 데이터는 공격자에게 팔리거나 조작될 수 있으며 외부 세계에 노출될 수 있습니다. 따라서 기업은 고객 데이터 프라이버시, 신뢰, 조직의 기밀, 판매 및 수익 측면에서 막대한 피해를 입을 수 있으며, 규정 준수 문제에도 직면할 수 있습니다.

보고서에 따르면, 글로벌 기업 네트워크의 40% 이상이 이 취약점으로 인한 공격을 경험했습니다.

따라서 애플리케이션에서 취약한 Log4j 버전을 사용하지 않더라도, 타사 통합에서 이를 사용할 수 있으므로 앱이 공격에 취약해질 수 있습니다.

Log4j 2.17.0 이전의 모든 Log4j 버전은 영향을 받습니다. 따라서 사용 중인 경우 로거를 업그레이드해야 합니다. 또한, Log4j 취약점에 영향을 받는 주요 벤더로는 Adobe, AWS, IBM, Cisco, VMware, Okta, Fortinet 등이 있습니다. 이러한 벤더의 서비스를 사용하는 경우 앱을 지속적으로 모니터링하고, 보안 시스템을 사용하여 문제가 발생하면 즉시 해결해야 합니다.

Log4j의 영향을 받는 프로그램을 감지하고 해결하는 방법

Log4Shell 취약점의 CVSS 점수는 10점입니다. Log4j 관련 모든 문제가 아직 해결되지 않았다는 점을 감안할 때, 귀사 또는 귀사의 타사 공급업체가 귀사의 애플리케이션에 사용된 Log4j를 사용할 가능성이 높습니다.

따라서 데이터, 시스템 및 네트워크를 보호하려면 다음 단계를 따라 수정해야 합니다.

#1. Log4j 버전 업데이트

Log4j 버전을 Log4j 2.17.1로 업데이트하는 것이 Log4j 취약점으로 인한 공격으로부터 장치와 앱을 보호하는 가장 효과적인 방법입니다.

Log4Shell은 소프트웨어 생태계에 잠재적으로 큰 영향을 줄 수 있는 제로데이 공격입니다. Apache는 최신 버전에서 일부 취약점을 수정했지만, 업그레이드 전에 시스템이 손상된 경우에는 여전히 위험에 노출되어 있습니다.

따라서 단순히 버전을 업그레이드하는 것뿐만 아니라, 즉시 사고 대응 절차를 시작하여 시스템과 앱에 취약점이 없는지 확인하고 공격을 완화해야 합니다. 또한, 모든 서버 로그를 검토하여 침해 지표(IOC)를 찾고 시스템과 네트워크를 지속적으로 모니터링해야 합니다.

#2. 최신 방화벽 및 보안 시스템 사용

WAF(웹 애플리케이션 방화벽) 및 차세대 방화벽과 같은 방화벽은 들어오고 나가는 데이터 패킷을 검사하고 의심스러운 패킷을 차단하여 공격자로부터 네트워크 경계를 보호하는 데 도움이 됩니다. 따라서 네트워크에 최신 방화벽을 사용하고, 서버에 엄격한 발신 규칙을 설정하여 Log4j 취약점과 관련된 공격을 예방하십시오.

공격자가 방화벽을 우회할 수 있지만, 공격자의 요청을 차단할 수 있는 방화벽을 통해 어느 정도 보안을 유지할 수 있습니다.

또한 IDS(침입 탐지 시스템), IPS(침입 방지 시스템) 등과 같은 모든 보안 시스템을 최신 서명 및 규칙으로 업데이트하십시오. 이러한 시스템은 RMI 및 LDAP 트래픽이 악성 LDAP 서버에 연결되는 것을 차단하거나 필터링하는 데 도움이 됩니다.

#3. MFA 구현

애플리케이션과 시스템에 MFA(다중 요소 인증)를 설정하면 공격자로부터 더 강력한 보안을 제공할 수 있습니다. 공격자가 첫 번째 보안 계층을 뚫더라도 두 번째 보안 계층이 추가로 보호해줍니다. 지문이나 홍채 스캔과 같은 생체 인식을 사용하거나 보안 질문을 설정하거나 보안 PIN을 활성화하는 등의 방법을 사용할 수 있습니다.

MFA를 사용하면 공격자의 난이도와 공격 수행 시간이 증가합니다. 또한, 필요한 수정 조치를 취할 수 있도록 사고 발생 시 즉시 알림을 받을 수 있습니다.

데이터 침해를 줄이기 위해 엄격한 VPN 정책도 적용해야 합니다. 이를 통해 사용자는 공격자에 대한 걱정 없이 어디서든 안전하게 시스템에 액세스할 수 있습니다.

#4. 시스템 속성 변경

최신 버전의 Log4j 라이브러리로 업그레이드할 수 없는 경우, Log4j 2.10 ~ Log4j 2.14.1 버전을 사용하고 있다면 즉시 Java 시스템 속성을 변경해야 합니다.

공격자가 취약점을 탐지하고 악용하는 데 사용하는 조회를 방지하는 방식으로 설정해야 합니다.

#5. JNDI 제거

이 심각한 보안 취약점의 근본적인 원인은 설계에 있습니다. JNDI 조회 플러그인에는 공격자가 공격을 수행할 수 있게 하는 설계 결함이 존재합니다.

JNDI는 로그의 입력 데이터를 기반으로 코드 실행에 사용되며, 로거는 검증 없이 모든 요청을 수락하므로 누구나 쉽게 조작할 수 있습니다.

보안 연구원들은 이 플러그인이 2013년에 출시된 이후로 항상 구문 분석되지 않은 데이터를 허용하고 이를 Log4j 라이브러리로 보내고 있다는 사실을 발견했습니다.

따라서 Log4j 취약점은 간단한 문자열 삽입만으로 쉽게 악용될 수 있습니다. 공격자가 이를 주입하면 로거는 문자열에서 요청한 작업을 수락하고 검증 없이 즉시 실행합니다.

따라서 시스템과 애플리케이션을 보호하려면 JndiLookup 클래스를 비활성화해야 합니다. 이렇게 하면 로거가 로그 데이터를 기반으로 작업을 수행하는 것을 방지할 수 있습니다.

사실, JNDI 조회는 애플리케이션과 시스템을 보호하기 위해 Log4j 2.16.0부터 기본적으로 비활성화되어 있습니다.

따라서 2.16.0 미만의 Log4j 버전을 사용하고 있다면, JNDI 조회가 비활성화되었는지 반드시 확인해야 합니다.

#6. 공급업체에 문의

모든 것이 잘 되었더라도, 방화벽과 보안 시스템이 업데이트되고, Log4j 버전이 업그레이드되었으며, JNDI 조회가 비활성화되었더라도 안심해서는 안 됩니다.

애플리케이션에서 취약한 Log4j 버전을 사용하지 않더라도, 타사 공급업체가 이를 사용할 수 있습니다. 따라서 실제 문제는 타사 통합에 있을 수 있으며, 애플리케이션이나 시스템이 어떻게 해킹되었는지 파악하기 어려울 수 있습니다.

따라서 공급업체와 협력하여 그들도 Log4j를 최신 버전으로 업그레이드하고, 위에서 설명한 다른 보안 조치를 구현했는지 확인해야 합니다.

#7. Log4j 취약점 스캐너 사용

시스템 및 애플리케이션에서 Log4j 취약점을 쉽게 감지할 수 있도록 하는 다양한 Log4j 취약점 스캐닝 도구가 시장에 출시되어 있습니다.

이러한 도구를 선택할 때, 가양성(false positive)을 생성하는 도구가 많으므로 정확성을 확인해야 합니다. 또한 Log4j 취약점 식별, 노출 보고 및 취약성 수정에 중점을 둘 수 있도록 요구 사항에 부합하는 도구를 찾아야 합니다.

따라서, 감지에 중점을 둔다면 문제점을 탐지할 수 있는 Log4j 취약점 스캐너를 찾거나, 문제점을 탐지하고 해결할 수 있는 스캐너를 사용하는 것이 좋습니다.

주요 Log4j 스캐닝 도구는 다음과 같습니다.

  • Microsoft 365 Defender: Microsoft는 네트워크에서 Log4j 악용을 감지하고 방지하는 데 도움이 되는 다양한 보안 솔루션과 도구를 제공합니다. 원격 코드 실행 및 악용 시도를 탐지하여 Windows 및 Linux 장치의 Log4j 취약성으로부터 보호할 수 있습니다.
  • Amazon Inspector 및 AWS: Amazon은 Amazon EC2 인스턴스 및 Amazon ECR에서 Log4j 취약점을 찾기 위한 스캔 도구를 개발했습니다.
  • CloudStrike 아카이브 스캔 도구(CAST): CloudStrike는 Log4j 취약점을 탐지하는 뛰어난 스캔 도구를 제공합니다. 이를 통해 공격자가 악용하기 전에 문제를 조기에 해결할 수 있습니다.
  • Google Cloud Logging 감지: Google의 클라우드 로깅 감지 솔루션을 사용하면 Logs Explorer를 사용하여 Log4j 익스플로잇을 감지할 수 있습니다. 이 도구에서 로그 쿼리를 생성하고 잠재적인 악용 문자열을 검색할 수 있습니다.
  • Google은 또한 Log4j 취약점을 감지하기 위한 오픈 소스 파일 시스템 스캐너인 log4jscanner를 개발했습니다.
  • BurpSuite Log4j 스캐너: 전문가와 기업이 Log4j 취약점을 감지하는 데 도움이 되는 보안 플러그인입니다.
  • Huntress Log4Shell Vulnerability Tester: 이 도구는 입력 필드를 테스트하는 동안 사용할 수 있는 고유 식별자를 무작위로 생성합니다. 애플리케이션이나 입력 필드에서 취약점이 발견되면 보안 LDAP 서버가 악성 연결을 즉시 종료하고 사용자를 안전하게 보호합니다.
  • WhiteSource Log4j Detect: WhiteSource는 Log4j 취약점(CVE-2021-445046 및 CVE-2021-44228)을 감지하고 수정하는 데 도움이 되는 GitHub에서 호스팅되는 무료 CLI 도구인 WhiteSource Log4j Detect를 개발했습니다.
  • Log4j용 JFrog 오픈 소스 스캐닝 도구: JFrog는 바이너리 및 소스 코드에서 Log4j 취약점을 찾기 위한 다양한 오픈 소스 솔루션과 도구를 제공합니다.

결론

Log4j 취약점은 매우 중요한 보안 문제입니다. 이 로깅 라이브러리가 다양한 애플리케이션과 시스템에서 널리 사용되기 때문에, Log4j 취약점은 매우 광범위하게 영향을 미치고 있으며, 공격자가 다양한 시스템과 애플리케이션을 쉽게 악용할 수 있게 합니다.

따라서 이러한 취약점으로부터 시스템과 애플리케이션을 보호하려면 Log4j 라이브러리를 최신 버전으로 업그레이드하고, 위에서 설명한 최상의 보안 조치를 구현해야 합니다.