구멍을 메우지 않고 에어백 사용을 피하던 옛 해결법
진행자는 에어백에 구멍이 났다면 구멍을 메우는 것이 가장 중요하다고 말한다. 그러나 정비소에서는 에어백이 터지지 않도록 운전 교육을 하는 식으로 문제를 피해 갔다는 것이다. 진행자는 당시 문제 해결 방식이 이와 비슷했다고 비유한다.
로그인 없이 웹서버를 장악할 수 있는 PHP2Shell 결함의 뿌리와 패치 전 정보 유출이 부른 혼란
진행자는 에어백에 구멍이 났다면 구멍을 메우는 것이 가장 중요하다고 말한다. 그러나 정비소에서는 에어백이 터지지 않도록 운전 교육을 하는 식으로 문제를 피해 갔다는 것이다. 진행자는 당시 문제 해결 방식이 이와 비슷했다고 비유한다.
진행자는 서버 언어가 확인되는 웹사이트의 약 70%가 PHP를 쓰고 있다고 말한다. 이 PHP에서 로그인 없이 서버를 통째로 장악할 수 있는 결함이 공개됐고, 이름은 PHP2다.
진행자는 해킹 기법의 웹쉘을 설명한다. 쉘은 조개껍데기에 해당하는 외곽이고 그 안의 핵심이 커널이므로, 웹쉘은 인터넷으로 서버에 명령을 내릴 수 있는 창구를 뜻한다. 쉘을 땄다는 말은 해당 서버를 장악했다는 뜻이다.
진행자는 이번 사건이 최근에 생긴 문제가 아니며, 문제 코드가 10년 넘게 그대로 있었다고 말한다. 올여름 AI를 활용한 보안 연구자들이 실제로 공격할 수 있는 경로를 찾아냈다. 패치를 적용하기 전에 누군가 정보를 먼저 풀어 버려 서버들이 급히 내려간 상황도 있었다.
진행자는 노말틱에게 PHP가 어떤 언어이며 웹사이트와 어떻게 연결되는지 물었다. 노말틱은 PHP가 C, 자바, 파이썬과 같은 계열의 언어로 주로 웹 서버 위에서 돌아가는 웹 애플리케이션을 만드는 데 쓰인다고 답했다. PHP 코드를 한 줄씩 읽고 실행하는 것은 PHP 엔진이다.
노말틱은 웹사이트 페이지가 사용자마다 조금씩 다르게 보이는 이유를 설명했다. 같은 사이트라도 기기와 보는 환경에 따라 간격이나 모습이 달라지고, 뉴스 같은 콘텐츠도 사람마다 다르게 나온다. 이를 가능하게 하는 것이 웹 서버에서 돌아가는 애플리케이션 프로그램이며, 그 처리 과정에 쓰이는 것이 PHP다.
진행자는 이번 사건이 특히 심각하게 다뤄진 이유를 PHP 엔진 자체의 문제점에 있다고 설명했다. 개별 사이트의 취약점이 아니며, 금융권이나 증권사 홈페이지처럼 PHP 엔진으로 돌아가는 모든 서비스가 영향권에 들어간다. 공격 대상이 쓰는 시스템이나 플랫폼을 노리는 공급망 공격으로도 볼 수 있다는 것이다.
노말틱은 보통 웹 애플리케이션의 문제점을 찾는 것이 해커의 일이지만, 이번 결함은 프로그램을 만든 엔진 자체의 문제이므로 PHP로 개발된 웹사이트 전부가 영향 범위에 들어간다고 말했다.
노말틱은 쉘을 따면 키보드와 마우스로 컴퓨터를 쓰듯 서버에 명령을 넣을 수 있다고 설명했다. 폴더에 들어가 어떤 파일이 있는지 찾아보는 것도 가능하다. 진행자는 웹서버가 특히 중요한 이유로, 웹서버는 거의 대부분 뒤에 데이터베이스를 붙여 운영한다는 점을 들었다.
웹서버 안에는 데이터베이스에 접속할 정보가 들어 있거나, 없더라도 연결 고리가 있는 경우가 많다. 웹서버가 뚫리면 뒤의 데이터베이스까지 함께 털릴 수 있고, 데이터베이스에는 개인정보 같은 중요한 정보가 들어 있어 더 큰 문제가 된다. 한 데이터베이스가 여러 웹사이트를 관리하는 경우도 많아 위험이 더 커진다.
노말틱은 큰 기업들이 중요한 자산을 내부망에 숨겨 두지만, 외부에 둘 수밖에 없는 것이 웹서버라고 말했다. 해커는 웹서버를 장악한 뒤 이를 경유해 내부망으로 들어가는 경우가 있다. 웹서버가 내부망과 연결돼 있으면 내부 침투의 발판으로 작동하므로, 웹쉘 장악은 전체 해킹 과정에서 중요한 단계가 된다.
진행자는 PHP2의 뿌리를 거슬러 올라가면 2004년 PHP의 메모리 한도와 관련된 문제가 나온다고 말했다. 이 결함은 그해 스테판 에어라는 연구자가 처음 제보했다. PHP에는 메모리 리밋 기능이 있는데, 요청을 처리하면서 메모리가 초과되면 작업 공간이 꽉 차 아웃 오브 메모리(OOM) 상태가 된다.
OOM이 발생했을 때 메모리 부족을 알리거나 대응하도록 코딩이 되어 있지 않으면 서버는 그 자리에서 멈춘다고 노말틱은 설명했다.
PHP에는 OOM이 발생했을 때 쓰는 베일아웃이라는 비상 탈출 기능이 있었다. 그러나 이 기능은 하던 작업을 정리하지 않고 빠져나간다. 노말틱은 직원이 인수인계 없이 갑자기 퇴사하는 것에 비유해 설명했다. 회사에서 문제가 생기듯 메모리 상태에서도 문제가 생긴다는 것이다.
이 문제는 2004년에 처음 지적됐고 당시에는 고쳐졌다. 그러나 수정 방식은 OOM 상황을 처리하는 과정을 고친 것이 아니라 OOM이 일어나지 않도록 하는 쪽이었다. 노말틱은 에어백이 터지지 않도록 운전 교육을 한 것과 같은 방식이라고 비유했고, 이 방식은 수정된 부분 이외에서도 문제가 일어날 수 있었다.
이 문제는 2020년과 2024년에도 다시 지적됐다. 2024년에는 공격으로 연결해 위험을 증명하기 어려웠다. 노말틱은 개인적인 추측이라고 전제하며, 이론적으로 쉘을 딸 수 있다고 말할 수는 있었지만 그것을 보여 주는 것이 쉽지 않았다고 설명했다. 증명이 되지 않으니 중요도가 내려가고, 급한 일이 많아 나중에 하자는 식으로 미뤄졌다.
할리프 소속 연구원 라이언 오스틴은 회사의 제안으로 AI를 이용해 취약점을 연구했다. 그는 관심을 두고 있던 스테판의 OOM 문제를 살펴봤고, 2024년에 공격을 증명하지 못했던 이 문제를 AI에 물어보며 도움을 받으려 했다. 노말틱은 AI가 공격 경로를 찾아 마무리를 시켜 줬다고 설명했다. 보완점을 찾아 문제가 될 수 있다고 방점을 찍은 것이 중요한 부분이다.
노말틱은 AI가 없었다면 이런 과정이 계속 되지 않았을 것이며, AI를 이용해 일주일 만에 해냈다는 점이 AI의 무서움으로 느껴졌다고 말했다. 다만 AI에게 PHP 취약점을 찾아 달라고 했다면 결과가 나오지 않았을 수 있고, 연구자가 아는 내용을 바탕으로 공격을 마무리하게 했다는 점이 핵심이라는 것이다. 연구자는 시간만 주어졌다면 AI가 없어도 해냈을 것이라는 해석도 나왔다. 그러나 회사 입장에서 빨리 성과를 내야 하므로 시간이 충분하지 않았을 가능성이 있고, AI가 이런 시간을 단축시킨다는 점이 의미 있다고 노말틱은 말했다.
원래 취약점 공개일은 10월 22일로 예정돼 있었다. 취약점을 찾으면 윤리적 공개 단계를 거쳐 먼저 개발사에 알리고, 개발사가 패치를 만들 시간을 확보한 뒤 공개하는 것이 기본 원칙이다. 이 기간에는 발표를 참아야 하며, 그렇지 않으면 악용될 수 있다. PHP는 영향도가 커서 이 원칙이 특히 중요했다.
그러나 공개 이틀 전인 10월 22일 이틀 전에 커뮤니티에서 루머가 퍼졌고, 이 과정에서 정보가 실제로 유출됐다. 어수선한 상황에서 한 보안 회사가 22일에 공개한다고 밝히면서 일정이 맞지 않았다.
PHP 측은 22일로 예정했던 공개를 감당하기 어렵다고 판단해 21일로 당겼다. 이 과정에서 연구자 측은 데모 영상을 준비하고 있었던 것으로 보인다. 분위기상 먼저 공개해도 되는지 판단하지 못했는지 영상을 한때 올렸다가 내렸다고 한다. 노말틱은 영상이 실수였을 수도 있다고 짚었다.
POC(Proof of Concept)는 해킹이 실제로 가능하다는 것을 증명하는 영상이다. 이 영상은 옆에 PHP 웹서버 사이트를 띄우고 한쪽에서 해킹으로 서버를 장악하는 과정을 보여 준다. 노말틱은 이를 데모 버전이라고 설명했다.
영상이 빠르게 퍼지자 유럽의 여러 나라가 공공기관이나 민감한 정보를 다루는 업체의 웹사이트를 급히 닫았다. 노말틱은 이것이 공개가 먼저 되면서 생긴 일이라고 설명했다. 혼란은 컸지만 다행스러운 부분도 있었다. 메모리 관련 취약점이라 공격 성공률이 높지 않았기 때문이다.
공격을 연결하는 과정이 까다로운 것은 서버마다 PHP 버전, 운영 체제, CPU 상태, 메모리가 달라 변수가 많기 때문이다. 공격을 연결할 수 있는 통일된 해킹 코드가 아직 나오지 않았고, 그래서 미리 공개되어도 큰 피해는 없었다. 그러나 취약점이 이런 성격이 아니었다면 훨씬 큰 일이 있었을 것이라는 아쉬움이 남는다.
공식 공개일은 10월 21일로 앞당겨졌다. 영상에서는 공격 관측용 미끼 서버에서 10월 17일 이미 공격 시도가 발견됐다는 이야기가 나온다. 노말틱은 공개 전 루머가 떠돌기 전에도 누군가 정보를 알고 공격을 준비했다면 유출이 심했던 것으로 보인다고 말했다.
AI 회사가 얽혀 있어 이슈가 커졌고, 이를 본 공격자와 해커들이 정보로 시험해 보려고 무기화해 공격을 시도했을 것이라는 설명이다. 노말틱은 여기에 AI의 역할도 있었을 것이라고 봤다. 취약점이 공개된 뒤 실제 공격까지 걸리는 시간이 짧아진 이유로 AI를 꼽을 수 있다는 것이다.
10월 22일 국내 민간 분야 사이버 위기 경보는 관심 단계로 올랐고 일반적으로 주의 단계로 올라가기도 했다. 유럽 일부 국가에서는 앞서 말한 대로 서버를 아예 내리기도 했다. 진행자는 우리나라에서 이번 취약점의 위험도가 어느 정도인지 노말틱에게 물었다.
노말틱은 우리나라는 자바를 많이 쓰고 PHP는 상대적으로 적어 영향이 크지 않은 것처럼 느껴진다고 답했다. 다른 나라들은 PHP 서버를 막아 내렸지만 국내에서는 내려간 서버를 체감하기 어려웠다는 것이다.
노말틱은 우리나라를 자바공화국이라고 부를 만큼 IT 업계가 자바 중심이며, 전자정부 프레임워크도 자바 기반이라고 설명했다. 자바 기반 프레임워크를 50~70%씩 쓰는 곳도 있다고 한다. 자바 중심 구조는 상대적으로 안전하지만, 반대로 자바 관련 취약점이 나오면 국내는 굉장히 위험할 수 있다.
그렇다고 국내에 PHP가 없는 것은 아니다. 큰 기업과 공공기관처럼 보안에 신경 쓸 여력이 있는 곳은 대부분 자바로 만들었지만, 여력이 부족한 곳은 쉽고 빠르게 만들 수 있는 PHP를 많이 썼다. 워드프레스, 드루팔 등 웹사이트를 만드는 대표적인 CMS가 PHP로 만들어져 있어, 운영자가 자신의 사이트가 PHP인지조차 모르는 사각지대가 생긴다.
노말틱은 이번 사건에서 AI가 오래된 코드의 결함을 찾아내는 능력을 발휘하는 것을 직접 목격했다고 말했다. 앞으로 이런 사건이 더 자주 일어날 것이라는 전망이다. 실제로 PHP2 취약점이 나온 다음 주에 노드JS 엔진에서 돌아가는 웹서버를 대상으로 한 취약점이 또 발견됐다.
진행자는 이 결함이 10년 넘게 문제가 되고 있었지만 근본적인 문제를 어렵게 해결할지, 쉽고 빠르게 당장 문제를 해결할지의 갈림길에서 PHP 재단이 후자를 선택한 것이 문제였다고 짚었다. 노말틱은 이 선택이 결과적으로 맞았을 수도 있다고 덧붙였다. 영상은 AI로 취약점을 찾는 속도가 빨라진 만큼 공개된 취약점이 실제 공격으로 이어지는 시간도 짧아지고 있다고 정리하며, 사이트 운영자는 PHP나 자바 중 어느 것으로 운영되는지, PHP라면 어떤 버전인지 확인해 보라고 권했다.
Answers come from the transcript, with the exact spot cited.
Want the next article from 안될과학 Unrealscience?
When 안될과학 Unrealscience publishes, we'll write it up like the one you just read and email it to you.
Starship Flight 14: How a Team Chose to Reach Orbit Despite an Engine Shutdown안될과학 Unrealscience6 days ago · 21:21 · 63.4K views · Created 5 days ago
Seawater Battery Charged by the Sea: Research Status of a Secondary Battery That Uses Seawater as the Cathode안될과학 Unrealscience2 weeks ago · 15:37 · 110K views · Created 2 weeks ago
White Dwarf WDJ1330+6435: Why It Glows Green and Clues from Asteroid Debris안될과학 Unrealscience2 weeks ago · 13:05 · 85.5K views · Created 2 weeks ago