다음에 올 것을 만들어가는 기술에 대한 심층 기사.

비트코인 훔쳐보기: PHP 익스플로잇 열풍의 현실

취약한 PHP 서버에 500달러 상당 비트코인을 걸고 해커와 AI 에이전트에게 훔쳐보라고 도전한 실험. 돌아온 건 침묵이었습니다.

서버 랙 선반 위, 케이블과 깜빡이는 불빛 사이에 놓인 유리병 속 금화.
취약하다는 기계 위에, 500달러가 누구 눈에나 보이는 곳에 놓여 있습니다.

얼마 전 보안 관련 SNS를 조금이라도 봤다면 이런 주장을 봤을 겁니다. 새로 나온 PHP 원격 코드 실행 취약점이 너무 쉬워서 AI 에이전트들이 이미 수천 대의 취약한 서버를 자율적으로 공격하고 있다는 주장이요. 떼 지어 몰려다니며 막을 수 없다는 식이죠. 한 개발자가 이런 소음에 지쳐서 아주 단순하지만 통쾌한 방법을 택했습니다. 패치 전 PHP 버전을 돌리는 서버를 세우고, 공격에 성공한 누군가가 닿을 수 있는 곳에 약 500달러 가치의 비트코인 키를 숨긴 뒤, “훔쳐가 보시죠”라는 두 단어짜리 초대장과 함께 링크를 올렸습니다. PHP 익스플로잇쯤은 점심 전에 챗봇이 뚝딱 뱉어낸다고 했으니까요. 사이트의 타이머가 올라가기 시작했습니다. 그리고 흥미로운 일이 벌어졌습니다. 아무 일도 없었죠.

몇 시간이 지나도 코인은 그대로 있었습니다. 댓글창은 아주 특별한 종류의 침묵으로 가득 찼습니다. 며칠 동안 익스플로잇은 식은 죽 먹기라고 우기던 수많은 사람들이 갑자기 시연할 수 없는 급한 사정을 떠올린 것이죠. 이 실험을 어떻게 평가하든, 보안 담론에서 드문 일을 해냈습니다. 바이럴된 주장을 반증 가능한 것으로 만들었거든요.

털리도록 설계된 서버

이 구성은 캡처 더 플래그(CTF) 대회의 방식을 빌려왔습니다. 비트코인 개인 키는 웹 루트의 파일이나 환경 변수에 있지 않고, PHP 사용자 계정이 접근할 수 있는 print-flag 바이너리가 쥐고 있습니다. 즉 공격자는 정보 노출이나 경로 순회 취약점만으로는 부족하고, 서버에서 실제 코드를 실행할 수 있어야 합니다. 셸을 따고, 바이너리를 실행해 키를 읽고, 다른 누군가가 먼저 지갑을 비우기 전에 자금을 빼내야 하죠. PHP 빌드도 최근 CVE 패치 이전 버전으로 일부러 골랐고, 모든 트래픽이 로깅되며 이 기계에 있는 어떤 것도 비공개라고 생각하지 말라는 명랑한 안내문도 붙였습니다.

이 서버 어딘가에 약 502달러 상당의 비트코인 키가 숨겨져 있습니다. PHP 사용자 계정이 print-flag 바이너리를 통해 접근할 수 있습니다. 지갑을 먼저 손에 넣는 사람이 이깁니다.

작성자는 여기에 약간의 품격도 더했습니다. 돈이 필요 없다면 자선단체에 기부해 달라는 문구였죠. 그리고 사이트는 친절하게도 ‘성공한 해킹 없이 지난 시간’을 실시간 카운터로 보여줬고, 덕분에 페이지 전체가 점수판처럼 변했습니다. 한 시간이 지날 때마다 그 자체로 데이터가 쌓였죠. 하루도 안 돼 이 카운터는 인터넷에서 가장 흥미로운 보안 지표가 되었습니다. 사람들이 평판을 걸고 예측했던 주장을 정확히 측정하고 있었기 때문입니다.

500달러 현상금이 반증 가능성 기계가 되는 이유

보안 분야의 주장 대부분은 설계상 반증할 수 없습니다. “공격자들이 이미 야생에서 이를 악용하고 있다”는 주장은 여러분이 볼 수 없는 텔레메트리에 근거합니다. “주니어 분석가라도 오후 한나절이면 무기화할 수 있다”는 주장은 한 번도 증명된 적이 없습니다. “우리 에이전트가 작동하는 익스플로잇을 자율적으로 찾아냈다”는 주장은 데모 영상을 믿으라는 것이죠. 부정을 증명할 방법이 없으니 주장들은 그저 쌓입니다. 패닉이 값싼 이유는 아무도 책임지지 않기 때문입니다.

공개 현상금과 공개 타이머는 이 계산법을 바꿉니다. 수많은 자율 에이전트가 정말로 인터넷을 훑으며 패치되지 않은 PHP 서버를 하나씩 뚫고 있다면, 바로 그 취약점을 내걸고 현금 상금과 명시적 허가까지 준 이 서버는 몇 시간이 아니라 몇 분 만에 뚫려야 합니다. 인센티브는 완벽하게 맞아떨어집니다. 합법적이고, 권장되며, 보상도 있으니까요. 그런데 카운터가 계속 올라갔고, 그 결과 ‘대규모 자율 익스플로잇이 이미 벌어지고 있다’는 구체적인 주장이 직격탄을 맞았습니다. 한 댓글러의 말처럼, 눈에 보이는 모든 것을 장악하는 에이전트 떼의 이야기가 정말 벌어지고 있었다면 코인은 벌써 사라졌어야 했습니다.

이건 여러분의 작업에도 훔쳐 써볼 만한 기술입니다. 다음에 벤더나 인플루언서가 어떤 취약점이 어디서나 악용되고 있다고 말하면, 그들이 틀렸다는 걸 무엇으로 증명할 수 있는지 물어보세요. 그 답이 없다면 여러분이 듣고 있는 건 분석이 아니라 마케팅입니다. 비트코인 현상금이 효과적이었던 이유는 막연한 느낌을 베팅으로 바꿨기 때문이고, 베팅에는 결과를 정산할 수 있다는 멋진 특성이 있으니까요.

익스플로잇 경제학: 진짜 공격자들이 참여하지 않는 이유

반론도 있고, 꽤 설득력 있습니다. 침묵이 보이는 것만큼 많은 걸 증명하지는 않는다는 거죠. 새로 나온 CVE의 작동하는 익스플로잇은 500달러보다 훨씬 가치가 큽니다. 다만 비밀로 유지될 때만요. 익스플로잇을 표적에 한 번 쓸 때마다 로그에 남고, 역분석당하고, 못 쓰게 될 위험이 생깁니다. 게다가 소유자가 모든 트래픽이 기록되고 온 인터넷이 지켜보고 있다고 미리 공지한 서버에 쓴다고요? 그건 현상금이 아니라 모닥불이죠.

어두운 물 위 낚싯바늘에 매달린 금화 주위를 물고기들이 조심스럽게 맴도는 모습.
모든 시도를 기록하는 상금은 상금이 아니라 미끼입니다. 눈치 빠른 물고기는 이걸 압니다.

이 스레드에서는 양쪽 진영 모두 정확히 이런 논리를 내놓았습니다. 공격 측 행위자들에게는 500달러짜리 지갑보다 훨씬 가치 있는 표적이 있고, 로그를 읽고 있는 누군가에게 도구를 넘겨줄 이유가 없습니다. 취약점에 대한 특권 정보를 가진 방어 측 연구자들은 보호해야 할 패치 기간이 있습니다. 한 보안 기업 CEO는 자기 팀이 작동하는 RCE를 가지고 있지만, 사람들이 아직 패치하는 중에 세부 정보가 퍼지면 실제 피해가 생기기 때문에 시연하지 않겠다고 공개적으로 말했습니다. 양쪽 모두 같은 계산을 했습니다. 코인을 가져갈 때의 기댓값은 500달러이고, 비용은 그보다 훨씬 가치 있는 것을 태워버리는 것이라는 계산이죠. 형편없는 거래입니다. 그러니 상금이 미청구된 것에 대한 정직한 해석은 “익스플로잇이 존재하지 않는다”가 아닙니다. “익스플로잇을 가진 사람 중 누구도 비밀 유지보다 500달러를 더 가치 있게 여기지 않는다”가 맞습니다. 두 결론은 아주 다르고, 이 실험이 검증한 것은 그중 하나뿐이었습니다.

AI 에이전트 현실 점검

이 스레드에서 가장 재미있었던 부분은 AI 주장들이 실제 표적과 부딪히는 장면이었습니다. 한 댓글러가 다섯 개의 최신 프런티어 모델에 이 도전을 던져보고 결과를 올렸습니다. 두 모델은 이를 정당한 공개 도전으로 해석하고 바로 작업에 들어갔습니다. 한 모델은 사이버보안 요청으로 분류하고 사용자를 검증 프로그램으로 안내했습니다. 한 모델은 아예 거절했습니다. 한 모델은 답변을 하기도 전에 제공자 측 콘텐츠 필터에 막혔습니다. 즉 최신 시스템 다섯 개 중 두 개만 시도에 동의했고, 초반에는 어느 쪽도 플래그를 얻지 못했습니다.

이 섞인 결과는 양극단의 극단적인 주장보다 훨씬 중요합니다. “AI는 아무것도 해킹하지 못한다”는 반사적인 주장은 틀렸습니다. 모델들은 실제로 참여했고, 알려진 취약점을 가진 CTF 스타일 표적에 대한 에이전트 기반 익스플로잇은 분명히 좋아지고 있습니다. 하지만 “자율 에이전트 떼가 패치되지 않은 서버를 모조리 비우고 있다”는 주장은 훨씬 강한 주장이었고, 바로 그 강한 주장을 공개적이고 허가받았으며 현금 보상이 걸린 허니팟이 시험대에 올린 것입니다. 한편 유명한 펜테스터 한 명은 챗봇으로 두 시간 만에 범용 작동 PoC를 만들었다고 주장한 뒤, 참으로 우연스럽게도 자신의 AI 펜테스팅 플랫폼 홍보로 방향을 틀었습니다. 그 주장이 사실이었다면 타이머가 한 시간을 넘기기 전에 상금은 이미 사라졌어야 합니다. 하지만 그러지 않았죠. 데모와 리더보드가 실제 작업 앞에서 무너지는 능력을 과장하는 패턴은 전에도 본 적이 있습니다. 바로 AI 벤치마크가 실제 업무의 대부분을 놓치는 이유에서 다뤘던 간극입니다.

실험이 조작되었다는 주장

타이머를 과학이라고 칭송하기 전에, 제대로 검토할 가치가 있는 기술적 반론이 있습니다. 해당 서버 설정이 문제의 CVE로는 실제로 악용될 수 없을 수도 있다는 것이죠. 한 날카로운 댓글러가 이를 짚었습니다. 이 서버는 전통적인 CGI 구성이 아니라 PHP의 CLI 서버를 쓰고, 요청을 1 MiB로 제한하며, 사실상 아무 기능이 없는 페이지를 서빙하고, 높은 메모리 제한을 허용한다는 것입니다. 취약점이 어떤 코드 경로에 있느냐에 따라 이 조합이 익스플로잇에 필요한 원시 기능을 차단할 수 있습니다. 다시 말해, 이 허니팟이 뚫리지 않은 이유는 버그가 어려워서가 아니라 이 특정 기계가 취약한 표면을 노출하지 않기 때문일 수 있습니다.

만약 그렇다면 이 실험은 여전히 쓸모가 있습니다. 취약한 구성을 대상으로 한 PoC 시도들은 수집되고, 익스플로잇이 간단하고 어디서나 통한다는 주장은 반증되니까요. 하지만 하드닝된 CTF 박스와 전혀 다르게 생긴 실제 배포 환경에서 작동하는 익스플로잇이 존재한다는 사실까지 반증하지는 못합니다. 이것이 보안에서 부정적 결과에 대한 일반적인 교훈입니다. 그 결과는 테스트 환경의 충실도만큼만 강합니다. 올바른 장소에서 올바른 도구로 실제로 찾아보았을 때에만 증거가 없다는 것이 없다는 증거가 됩니다. 이 타이머가 측정하는 것은 인터넷이 이 서버를 해킹할 수 있는 능력이고, 이는 모두가 논쟁하던 질문보다 더 좁지만 더 흥미로운 질문입니다.

방어자가 실제로 가져가야 할 교훈

이 모든 것이 안이함을 정당화하는 주장은 아닙니다. PHP 원격 코드 실행 취약점이 공개된 직후의 패치 기간은 실제로 위험합니다. 우리는 지난 PHP CVE 기간에 똑똑한 임시방편보다 서비스 차단이 나았던 이유를 다룬 적이 있고, 그 조언은 여전히 유효합니다. 이 현상금이 바꾸는 것은 여러분이 느끼는 공포의 눈금입니다. 인터넷에 노출된 RCE는 존재적 위협이기 때문에 패치해야 하는 것이지, 어떤 스레드가 하늘이 이미 무너지고 있다고 말해서가 아닙니다.

  • 반증 가능성을 요구하세요. 누군가 대규모 익스플로잇이 진행 중이라고 주장하면, 그것을 가릴 증거가 무엇인지 물어보세요. 타이머가 달린 공개 허니팟은 투박하지만, 리트윗 수천 개보다 훨씬 엄격합니다.
  • 자체 카나리아를 운영하세요. 한 댓글러는 몇 년 동안 개인 컴퓨터에 암호화되지 않은 비트코인 지갑을 두어 트립와이어로 썼다고 언급했습니다. 카나리 토큰, 허니 자격 증명, 미끼 파일은 저렴한 조기 경보 시스템이어서 “내가 침해당했나?”라는 막연한 질문을 텔레메트리 질문으로 바꿔줍니다.
  • 경제적 동기를 존중하세요. 숙련된 공격자는 익스플로잇을 비축하고, 시끄러운 해설자는 공포를 수익화합니다. 어느 쪽의 인센티브도 정확한 위협 평가에 대한 여러분의 필요와 맞지 않으므로, 해설보다 1차 텔레메트리에 무게를 두세요.
  • 주장을 분리하세요. “익스플로잇이 존재한다”, “악용이 실제로 일어나고 있다”, “자율 에이전트가 모든 것을 익스플로잇하고 있다”는 서로 다른 증거 기준을 가진 세 가지 진술입니다. 패닉은 이들을 하나로 뭉뚱그립니다. 그러지 마세요.
  • 그래도 빠르게 패치하세요. 조용한 허니팟이 노출이 조용하다는 뜻은 아닙니다. 여러분의 운영 서버는 500달러 상금을 걸고 있지 않지만, 역설적으로 작동하는 익스플로잇을 쥐고 있는 누군가에게는 더 매력적인 표적입니다.

이 소동에서 가장 좋은 점은 작성자에게 거의 비용이 들지 않으면서도 실질적인 신호를 만들어냈다는 것입니다. VPS 한 대, 취약한 PHP 빌드, 플래그 바이너리, 그리고 500달러로 논의 전체가 필요로 했던 측정값을 얻었습니다. “익스플로잇이 존재한다”와 “익스플로잇이 어디에나 있다” 사이의 간극에서 패닉이 자라납니다. 이제 그 간극 한가운데에서 타이머가 조용히 올라가고 있고, 누구든 그 간극을 메워 보라고 도발하고 있습니다.