
그냥 지나쳤다면
지금이라도 확인해야 하는
최악의 보안취약점 'Log4j'
2021년 12월, 어쩌면 한 해의 마무리를 모두 끝낸 시점에서 최악의 보안 문제가 알려졌어요. 이쪽 분야에 별 관심이 없다면 그냥 지나쳤을지 모르겠습니다만, 이번 건 좀 중요한 사안입니다. 우리가 접속하는 거의 모든 인터넷 서비스에 해당되는 보안 문제거든요. ‘제로데이’라는 수식어가 붙어버린 이번 보안 취약점은 ‘Log4j’에서 발견되었습니다.
Log4j는 자바 기반 프로그램을 개발할 때 로깅 기능을 지원하는 Apache 재단의 무료 오픈소스 프로그램입니다. 쉽게 말해서 웹사이트나 쇼핑몰 등에 접속함과 동시에 그때부터 접속 시간, 경로, 댓글 등 우리의 자취를 기록으로 남기게 되는데요, 시스템 운영 혹은 관리에 기록을 남기는 행위를 ‘로깅’, 남겨진 기록을 ‘로그’라고 해요. Log4j는 기록을 남기는 일을 손쉽게 할 수 있게 돕는 소프트웨어라고 할 수 있죠. 이것을 이용하면 간단한 명령어로 포맷이나 필요한 형태로 저장이 가능하기 때문에 전 세계적으로 매우 폭넓게 사용되고 있어요.
그런데 웹사이트를 구동할 때 그리 중요한 기능이라고 할 수 없는, 그저 기록을 위한 소프트웨어가 위협이 될 거라고는 생각지도 못했습니다. 해커들이 자바에서 지원하는 JNDI의 Lookup기능을 악용할 수 있다는 걸 지난해 11월 24일 알리바바가 발견하기 전까진 말이죠.
자, 지금부터는 어떻게 위협이 되는지 찬찬히 살펴볼게요.
이번 취약점은 JNDI¹와 LDAP²를 이용합니다. 자바 프로그램은 이 두 가지 인터페이스를 통해 디렉토리에서 데이터(자바 객체)를 찾을 수 있어요. 편의를 위해 Log4j에서 특정 문법을 사용하는데, 로그가 기록될 때도 사용이 가능했습니다. 여기서 문제는 로그를 통해 들어온 정보에 사용자ID 등과 같은 정보가 있다면 어떠한 검증과정 없이 지정된 서버에 접속해 정보를 가져오는 데 있어요.
예를 들어, 공격자가 서버에 접속하기 위한 메시지를 JNDI lookup³ 명령어와 함께 남기면, 서버는 이를 분석하지 않고 그대로 읽고 실행합니다. 이 과정에서 공격자가 남긴 메시지를 단순한 문자열이 아니라 url이나 코드로 인식해 공격자의 서버에 접속하게 되고, 공격자가 심어놓은 치명적인 바이러스나 랜섬웨어 등을 통해 서버를 장악하게 될 수 있다는 겁니다.
괜히 제로데이라는 수식어가 붙어 있는 게 아니에요. 이미 해커들이 사용하고 있고, 뒤늦게 구멍이란 걸 알게 되었으니 당장 대책을 만든다고 해도 그 사이에 계속해서 공격받을 수 있거든요. 이번 보안 취약점이 알려지고는 많은 기업과 보안업체, 관련 기관 등에서 보안 패치를 내놓고 있어요. 가장 좋은 대책은 가장 최근의 패치를 설치하거나 최신 버전의 프로그램으로 업데이트 하는 방법뿐입니다.
그런데 이것도 여의치 않은 건 사실이에요. 연이어 내놓고 있는 새 버전들이 완벽한 해결책이 되지 못하고 있거든요. 하나를 막으면 또 새로운 취약점이 생겨나고 있어서, 전문가들은 이번 사태가 해결되는 데까지 꽤 시간이 걸릴 것으로 예상하고 있어요. 그러니 기업의 보안담당자나 사이트 관리자는 개발사에서 사용한 로그 프레임워크에 대한 정보를 요청하고, 항상 새로운 업데이트를 주시해야 하죠.
이런 큰 보안 취약점이 있음에도 불구하고 우리는 어떤 위험이 있는지 모를 곳에 계속해서 접속하고 로그를 남기고 있어요. 어쩔 수 없는 일입니다. 삶이 계속되어야 하는 이유와 같은 것이죠. 최근 연이어 다크 웹에 대한 위험성과 피해사례를 다룬 기사가 이어지고 있는데요, 이번 취약점으로 인해 더 큰 피해가 나기 전에 하루빨리 완벽하게 보완되었으면 하는 바람입니다.
※ 참고자료
[보안뉴스] 해커들은 로그4j 취약점을 어떻게 악용해 공격할까?
[인터넷보호나라&KrCERT] Log4j 위협 대응 보고서
※ 용어사전
1. JNDI(Java Naming and Directory Interface): 자바 응용 프로그램이 필요한 자원(데이터베이스 등) 및 실행에 필요한 다른 프로그램 정보를 찾을 수 있는 디렉토리 서비스
2. LDAP(Lightweight Directory Access Protocol): 네트워크 상에서 조직 및 개인정보 혹은 파일 및 디바이스 정보 등을 쉽게 조회할 수 있도록 만든 소프트웨어 프로토콜이다.
3. Lookup: JNDI를 통해 찾은 자원을 사용하는 기능