메모리 안전성이 추상적인 품질 문제가 아니라 실제 사람의 생명과 직결되는 이유, 그리고 Rust의 성공이 왜 도덕적 책무가 되었는지에 대한 글.
2018년, 사우디 언론인 Jamal Khashoggi의 약혼자의 휴대전화가 해킹당했다. 그해 말, Khashoggi는 예정된 결혼과 관련된 서류를 받기 위해 이스탄불의 사우디아라비아 영사관에 들어갔고, 두 시간 뒤 시신 가방에 담겨 나왔다.1
우리가 하는 일이 실제 사람들에게 영향을 미친다는 사실을 잊기 쉽다. 프로그래밍의 목적 이 수학적으로 아름답거나 사용하기 재미있는 것이라고, 비록 무의식적으로라도, 느끼기 쉽다. 버퍼 오버플로가 단지 추상적으로 나쁜 것이 아니라, 때로는 실제 사람을 죽게 만든다는 사실을 잊기 쉽다.
그리고 상황은 이제 훨씬, 훨씬 더 나빠지려 하고 있다.
내 본업에서는 보안 팀에서 일하기 때문에, 보안 업계가 "vulnpocalypse"라고 부르게 된 현상의 배후에 있는 에이전트형 버그 탐지 모델들에 관해, Google 및 다른 곳의 동료들과 나누는 대화와 확실한 데이터에 접근할 수 있다. 지난 몇 주 동안 나는 같은 질문을 반복해서 받아 왔다: "Mythos. 정말로 그 정도로 심각한가?" 한마디로 답하자면: 그렇다.
이 글의 목적은 이 주장을 판정하는 데 있지 않으므로, 본격적인 논증 대신 Firefox 제공 의 이 그래프만 남겨 두겠다:

취약점 발견의 장기적 균형을 결정할 요인은 많겠지만,2 그 균형에 도달하기까지는 여러 해가 걸릴 것이다. 장기적으로 어떻게 전개되든, 중기적 영향은 분명하다: 메모리 비안전3 오픈소스4 소프트웨어는 고품질 버그 탐지 에이전트가 널리 제공되는 상황에 대비되어 있지 않다. 이러한 광범위한 제공은 올여름 어느 시점에 일어날 것으로 예상되며,5 그렇게 되면 메모리 비안전 언어로 작성된 오픈소스 프로그램 가운데 파국적인 익스플로잇으로부터 안전한 것은 거의 없을 것이다. 많은 행위자들이 이런 익스플로잇을 사용해 신원을 훔치고, 돈을 훔치고, 그 밖의 흔한 사이버 범죄를 저지를 것이다. 그러나 일부는 이런 익스플로잇을 이용해 사람을 죽일 것이다.6 나는 이 에이전트들이 공개되면 더 많은 사람이 죽게 될 것이라고 말할 때 과장하고 있는 것이 아니다.
메모리 안전 언어가 만병통치약은 아니지만, 이런 취약점의 대다수( 전형적인 추정치 는 70%다)를 막아 주며, 또한 이런 취약점들 가운데 가장 영향이 큰 것들을 막아 준다.7이것은 메모리 안전 언어로 전환하는 일을 도덕적 책무로 만든다. Carbon 같은 대안도 개발되고 있고, Go나 Java처럼 성능 특성이 다른 언어들도 존재한다. 그러나 이미 실제 서비스 환경에서 사용 중이며 C나 C++에 비해 오버헤드를 전혀 부과하지 않는8 메모리 안전 언어라는 점에서, Rust만이 유일한 선택지다. 따라서 이것은 도덕적 책무다: Rust는 반드시 성공해야 한다.
나는 Rust 커뮤니티의 많은 사람들을 가장 가까운 친구들 가운데 일부라고 부를 수 있어 영광이다. 나는 컨퍼런스에서, 술자리에서, Zulip 스레드와 Jitsi 회의에서 그들의 이야기를 들어 왔다. 우리는 매우 다양한 이유로 Rust에 오게 되었지만(대개는 어떤 형태로든 괴짜적 호기심 유발이 개입한다), 오픈소스 커뮤니티라면 어디나 그렇듯 우리 공동체에도 어려움은 있었지만, 그럼에도 늘 엄청나게 즐거웠다. 더 나은 순간들의 우리는 서로에게 친절했고 놀라운 소프트웨어를 써 왔다. Scott McNealy의 말을 바꾸어 말하자면, 우리는 "제대로 해냈고, 즐거움을 누렸고, 컴퓨팅을 영원히 바꾸었다."
나는 우리가 평생 Rust와 함께 계속 즐거움을 누리지 못할 이유가 없다고 본다. 하지만 동시에, 우리는 냉혹한 진실을 인정해야 한다. 우리 소프트웨어가 닿는 수십억 명의 사람들 가운데 포인터가 무엇인지 아는 사람은 극히 일부에 불과하다. 그런 사람들에게 Rust가 아름다운지, 재미있는지는 중요하지 않다. 그러나 그들 가운데 일부에게는, Rust가 성공하지 못하면 그들이 죽게 된다.
우리 아버지와 여동생은 모두 의사이고, 나는 그들이 매일 출근해 실제의, 생사를 가르는 결과의 무게를 마주하는 모습을 늘 존경해 왔다. 그들의 일과 실제 사람들의 삶 사이의 연결은 즉각적이다. 그들의 업계와 우리 업계 사이에서 내가 보아 온 한 가지 차이는 무엇이 중요한지를 측정하는 방식이다.
당신의 부모가 정기 검진에서 걱정스러운 혹이 발견되어 영상의학과 전문의를 찾아 검사를 받으러 갔다고 상상해 보자. 그 영상의학과 전문의가 매우 정확한 영상 기술을 선택할 수 있었는데도, 대신 위음성률이 높은 기술을 선택했다고 상상해 보자. 당신은 그 전문의가 당신 부모의 생명을 위태롭게 하고 있다는 사실에 분노할 것이며, 그 전문의가 자신이 고른 기술은 설계가 더 영리하다거나, 사용자 인터페이스가 더 낫다거나, 의대 시절의 향수를 불러일으킨다고 당신을 안심시키려 해도 전혀 나아지지 않을 것이다. 그 전문의의 일은 당신의 부모를 치료하는 것이고, 나머지는 모두 부차적이다.
우리 각자가 어떤 이유로 Rust에 들어왔든, 무엇이 우리를 계속 나아가게 하든, 이제 우리에게는 대부분이 한 번도 원한 적 없던 새로운 책임이 생겼다: 이제 사람들은 자신의 생존을 우리에게 의지하고 있다. 그들은 Rust가 안전하기를 바란다. 그러나 더 중요한 것은, Rust가 이미 존재하는 가장 안전한 시스템 언어이기 때문에, 그들은 Rust가 성공하기를 바란다는 점이다.
나는 이 글을, 프로젝트들이 그것을 선택하느냐에 사람들의 생명이 달릴 정도로 안전한 언어를 우리가 만들어 냈다는 사실을 기념하기 위해 썼다. 우리는 우리가 이룬 성취를 엄청나게 자랑스러워해야 한다.
하지만 나는 이 글을 전투를 촉구하는 글로도 썼다. 지금이야말로 Rust가 성공하는 일이 그 어느 때보다 중요하다. 앞으로 몇 달, 몇 년 동안 우리는 어려운 선택을 해야 할 것이다. 우리는 모든 사람에게 모든 것이 될 수는 없다. 우리는 어떤 사용 사례는 다른 것보다 우선시해야 할 것이다. 우리는 진보와 합의를 그 자체로 미덕으로 생각해야 한다. 우리는 어떤 합의를 갖는 일이 올바른 합의를 갖는 일보다 더 중요할 때를 알아보는 법을 배워야 하며, 그런 경우에는 정체보다 진보를 선택해야 한다. 그것이 C++ 상호운용성이든, 감사 가능성이든, 혹은 Rust 채택을 늘릴 다른 어떤 화려하지 않은 기능이든, 우리는 코를 막고 진창으로 들어가 그 일을 해내야 할 것이다.
나는 계속 즐거움을 누리고 싶고, 깊이 생각하고 싶고, 훌륭한 코드를 쓰고 싶다. 나는 Rust에 참여하는 일을 기쁨으로 만들어 준 요소들을 포기하고 싶지 않다.
하지만 나는 또한 사람들이 죽는 것도 원하지 않는다. 그것이 약간 덜 즐겁고 조금 더 진지해지는 것을 의미한다면, 나는 우리 공동체가 그 요구에 부응할 수 있는 능력을 믿는다.
1
정확한 사건의 연쇄는 복잡하다. 여러 나라의 정보기관이 Khashoggi와 가까운 여러 사람을 그의 살해 전후로 감시 대상으로 삼았기 때문이다. 공개적으로 उपलब्ध한 정보만으로는 특정 해킹 시도가 실패했더라면 Khashoggi가 살해되지 않았을 것이라고 입증하기에 충분하지 않다. 그러나 2024년 Synnovis를 상대로 한 랜섬웨어 공격과 2017년 WannaCry 악성코드 같은 다른 많은 사례들은, 해킹이 종종 직접적으로 또는 간접적으로 무고한 사람들의 죽음으로 이어진다는 점을 보여 준다.
나는 이 글의 나머지에서 말하려는 도덕적 의무를 매우 분명하게 드러내기 때문에 Khashoggi 사례로 글을 시작했다. 그러나 이 글을 덜 감정적이고 더 분석적인 관점에서 읽고 싶다면, "이 한 사람이 메모리 안전성 버그 때문에 잔혹하게 살해되었다"를 "기대값의 관점에서 볼 때, 메모리 안전성 버그 때문에 많은 사람이 다치고, 죽고, 또는 다른 방식으로 피해를 입지만, 보통은 단일 사건을 특정 버그에 귀속시키기 어렵다"로 바꾸어 읽어도 된다. 국가 행위자에 의한 물리적 피해를 넘어, 사이버 범죄의 경제적 피해 규모에 대한 추정치는 연간 $100B에서 $1T에 이른다.↩
2
만약 1995년에 누군가에게 "휴대전화의 확산이 장기적으로 어떤 사회적 결과를 낳을까"라고 물었다면, 누구도 "십대 소녀들 사이에서 자살률이 급격히 상승하는 현상을 보게 될 것이다"라고 답하지 않았을 것이다. 이런 일이 어떻게 전개될지 안다고 말하는 사람은 틀렸거나(혹은 거짓말하고 있거나) 둘 중 하나다.
조금 덜 경박하게 말하자면, 일부 사람들은 고품질 버그 탐지 에이전트의 장기적 효과가 소프트웨어를 더 안전하게 만드는 것이 될 수 있다고 주장해 왔다. 팀들이 병합 전에 잠재적 취약점을 잡는 데 그것들을 사용할 것이기 때문이다. 이것은 현실적인 가능성이지만, 그 반대도 마찬가지로 가능하며, 어떤 균형에 도달하기까지는 어쨌든 오랜 시간이 걸릴 수 있다. 이 글의 요점은 우리가 특정한 결과를 예측할 수 있다고 주장하는 데 있는 것이 아니라, 오히려 파국적 결과가 충분히 일어날 법하므로 그것을 걱정하고 대비할 가치가 있다는 점을 고려해야 한다는 데 있다.↩
3
메모리 안전 언어에도 취약점이 전혀 없는 것은 아니지만, 일반적으로 메모리 안전성 취약점에서는 자유롭다. 메모리 안전성이 아닌 취약점은 대체로, 메모리 안전성과 관련된 대응 취약점이 허용하는 익스플로잇보다 영향력이 현저히 낮은 익스플로잇만 허용하는 경향이 있다.↩
4
일부는 제안했다. 에이전트들이 바이너리 분석을 충분히 잘하기 때문에, 비공개 소스 소프트웨어조차 안전하지 않을 것이라고 말이다. 에이전트가 바이너리를 검사할 수만 있다면 취약점을 찾아낼 수 있다는 것이다.↩
5
구체적으로 말하면, Mythos 자체 또는 그와 동등하게 강력한 모델이 일반 대중이 사용할 수 있게 될 것으로 예상된다. 실제로 일반 대중이 사용할 수 있는 ChatGPT 5.5는 이미 능력 면에서 Mythos와 맞먹을 수도 있다. 이런 모델들에는 가드레일이 있을 수 있지만, 대개 그것들은 일반 사용자에게만 진지한 장벽이 될 뿐이고, 본격적인 행위자들은 보통 그것을 우회할 방법을 찾아낸다.↩
6
더 정확히 말하면, 그들은 이런 익스플로잇을 이용해 사람을 죽일 수 있게 해 주는 정보를 훔칠 것이다.↩
7
메모리 안전성 취약점은 우리에게서 가장 심각한 취약점들을 불균형적으로 많이 차지한다. 2022년에는 보안 공지에 포함된 취약점의 36%만을 차지했음에도, 메모리 안전성 취약점은 최고 등급인 치명적 심각도의 보안 취약점의 86%, 그리고 원격으로 악용 가능한 취약점의 89%를 차지했다. 지난 몇 년 동안 메모리 안전성 취약점은 Android 기기에서 실제 환경에서 악용된 것으로 확인된 취약점의 78%를 차지해 왔다.↩
8
...그리고 이것은 많은 팀이 언어를 전환할 때 협상의 여지가 없는 조건이다.↩