본문 바로가기
컴퓨터

Log4j 취약점은 무엇이며 안전을 위해 무엇을 해야하는가?

by 자주두선 2021. 12. 26.

해커는 수백만 대의 서버를 제어하여 널리 사용되는 결함 코드로 인해 서버를 종료하거나 강제로 맬웨어를 퍼뜨릴 수 있다. 어떻게 이런 일이 발생하며 어떻게 이를 보호해야 하는 것일까? 일부에서는 Log4shell 또는 CVE-2021-44228이라고 하는 Log4j 취약점이 난리이다. 

 

Log4j 문제의 핵심은 간단한 데이터와 실행 가능한 명령 간의 혼용이 된다는 것이다. DOS 기반 컴퓨터 바이러스 시대에는 디스크에 있는 프로그램을 단순히 메모리에 복사하여 실행했다. 초기 바이러스는 호스트 프로그램의 끝에 데이터를 블록 형태로 추가하였다. 프로그램 시작 시 한두 바이트를 조정하여 프로그램을 시작하기 전에 DOS가 바이러스 코드를 실행하도록 했다. 그리고 이 바이러스는 짧은 실행 동안 더 많은 프로그램에 추가되도록 했다. 

source from Wikipedia

 

PE(Portable Executable) 프로그램이라고 하는 윈도우 프로그램은 훨씬 복잡하게 되어 있다. 다양한 정보 블록이 적절한 메모리 영역에 로드되고 해당 블록은 코드 또는 데이터로 표시된다. 그럼에도 불구하고 악의적인 요소는 데이터로 간주되는 것을 강제로 실행하고 서버 또는 PC를 공격했다. 최신 윈도우 버전은 DEP(Data Execution Prevention) 및 ASLR(Address Space Layout Randomization)을 사용하여 이러한 공격을 차단하고 있다.

 

자바와 오픈소스

Log4j는 Java로 작성되었다. 즉, 본질적으로 DEP 및 ASLR과 같은 보호 기능이 없다. 반면에 오픈 소스 패키지이다. 즉, 코딩 기술이 있는 사람이라면 누구나 소스 코드를 읽고 버그를 찾아내고 패키지 개선에 기여할 수 있다.

 

이론적으로 오픈 소스 코드가 많은 사람들의 검토를 받았고 코드에 백도어나 기타 원하지 않는 기능이 숨어 있을 가능성이 없기 때문에 더 안전하다는 것이다. 관련된 라이브러리가 암호화에 관련된 매우 민감한 경우 실제로 심각한 조사를 받게 될 것이다. 그러나 분명히 이 간단한 로그 작성 모듈은 충분한 관심을 받지 않았다.

 

왜 모든 곳에 있는 것인가?

운영 체제 또는 널리 사용되는 브라우저에 보안 허점이 있는 경우 일반적으로 해당 운영 체제 또는 해당 브라우저의 사용자에게만 영향을 미친다. 게시자는 잘못된 부분을 패치하고 업데이트를 푸시한 후 모든 것을 새 버전으로 개발한다.

 

Log4j는 다르다. 운영 체제, 브라우저, 프로그램도 아니다. 오히려 코더가 라이브러리, 패키지 또는 코드 모듈 이리고 부르는 것이다. 서버에서 발생하는 일에 대한 로그를 유지하는 데 사용된다.

 

코드를 작성하는 사람들은 프로그램을 고유하게 만드는 요소에 집중하기를 원한다. 개발자들은 Log4j와 같은 기존 코드의 끝없는 라이브러리에 의존하게 되었다. Log4j 모듈은 가장 널리 사용되는 웹 서버 소프트웨어인  Aparche에서 제공된다. 이것은 전 세계적으로 수백만 대의 서버에서 발견되고 있는 이유이다.

 

 

 

피해자는 누구인가?

여기 중요한 점이 있다. Log4j의 취약점을 이용한 공격은 사용자를 겨냥한 것이 아니다. 명령이 되는 한 줄의 텍스트를 기록하도록 하는 해커는 서버에 맬웨어를 설치하는 것을 목표로 한다. Apple, Twitter 등 국/내외 대기업이 영향을 받는다.

 

영향을 받는 서버에서 임의의 코드를 실행할 수 있는 해커는 옵션이 무제한이다. 즉, 비트코인을 위해 마이닝에도 동원될 수 있다는 것이다. 가장 큰 위험은 해커가 서버를 마비시켜 서버에서 호스팅 되는 웹 사이트 방문자에게 맬웨어를 유발할 수 있다는 것이다.

 

우리는 어떻게 해야 하는 것인가?

Log4j 취약점은 악의적인 행위자가 악용하는 많은 보안 허점 중 하나일 뿐이다. CISA의 악용된 취약점 카탈로그에는 12월에만 20개의 취약점이 발견되었다. 자세히 살펴보면 일부는 이미 수정되었지만 나머지는 6개월 이상 만료되지 않는 수정사항이 있었다. 

 

서버 측에서 Log4j로부터 보호하는 것은 간단하다. 로깅 시스템이 데이터를 코드로 해석할 수 있는 여부를 제어하는 설정이 있다. 해당 스위치를 끄면 작업이 수행된다. 당연히 Apache는 코드 모듈에 대한 업데이트를 출시했지만 업데이트의 유일한 중요한 변경 사항은 이 스위치가 기본적으로 꺼져 있다는 것이다.

 

앞서 언급했듯이 Log4j는 서버용으로 설계된 코드이며 취약성 공격은 서버에 영향을 미친다. 그러나 해커가 서버를 사용하여 중한 서버를 마비시키거나 기타 맬웨어 공격에 서버를 사용하려고 하면 간접적으로 영향을 받을 수 있다.

 

안티 바이러스 프로그램을 업데이트하고 피싱이 의심되는 사이트에 대해 주의를 기울이고 암호 관리자를 통해 인터넷 트래픽을 관리할 수 있는 가상 개인 네트워크 또는 VPN을 사용하여 자신의 데이터 및 장치를 관리하는 것이 Log4j 취약점에 대한 공격에 영향권에서 멀어질 수 있을 것이다.

 

 

댓글