Trafficking Free Tomorrow의 개발자 Brooke Deuson이 RustConf 2025에서 경찰의 디지털 증거 관리 도구 FolSum을 Rust로 만든 이유, 배포 현실과 사용자 요구를 충족하기 위한 독립 실행형 설계, 그리고 작고 신뢰할 수 있는 도구 전략에 대해 이야기했다.
알고 계셨나요...? LWN.net은 구독자 후원으로 운영됩니다. 전체 운영을 지속하려면 구독자들의 도움이 필요합니다. 구독을 구매해 주시고 LWN이 계속 온라인에 남을 수 있도록 도와주세요.
Brooke Deuson은 Trafficking Free Tomorrow의 개발자로, 수사기관이 인신매매와 싸우는 데 도움을 주는 무료 소프트웨어를 만드는 비영리 단체를 이끌고 있다. 그녀는 인신매매 생존자이기도 하다. RustConf 2025에서 그녀는 자신의 미션과 왜 인신매매 방지 소프트웨어를 Rust로 작성했는지에 대해 발표했다. 흥미롭게도 그 이유는 Rust의 수명 분석 기반 메모리 안전성과는 관련이 없다. 오히려 경찰 조직이 실제로 그녀의 소프트웨어를 사용하도록 만드는 데 따르는 어려움이 선택을 좌우했다. Rust가 기본적으로 정적 링크를 사용하고 교차 컴파일이 가능하다는 사실은 그러한 환경에서 Rust 소프트웨어를 배포하기를 더 쉽게 만들어 준다.
그녀는 어떤 소프트웨어도 혼자서 인신매매를 끝낼 수는 없다는 점을 먼저 짚었다. Trafficking Free Tomorrow가 만드는 프로그램의 목표는 “사람을 파는 비용을 올려” 인신매매가 경제적으로 성립되지 않게 만드는 것이다. 이를 위해 이미 인신매매를 막으려 애쓰는 수사기관을 위한 도구를 만든다.
문제는 인신매매가 수익성이 있다는 점이다. 그 때문에 여기에 가담한 범죄자들은 보통 자금이 충분하고 비싼 변호사를 고용한다. 증거를 법정에서 기각시킬 빈틈이 조금이라도 있다면, 그들은 반드시 찾아내 이용한다. 어떤 것이 법정의 증거가 되기 전, 그것은 먼저 “범죄 현장에서 나온 물건”일 뿐이다. 증거로 사용되려면, 그 과정의 모든 단계에서 추적되고 승인(사인)이 이루어져야 하며, 이는 조작될 수 없었다는 사실을 입증하기 위함이다.
Deuson은 (글을 쓰는 시점에 웹사이트는 오프라인이지만 작업 중인) FolSum을 소개했다. 이는 디지털 증거의 이러한 연쇄적 보관(chain of custody)을 유지하도록 돕는 MIT 라이선스 애플리케이션이다. 이 도구는 디지털 증거 폴더의 해시를 기록하고, 마지막으로 도구를 실행한 이후 무엇이 바뀌었고 무엇이 바뀌지 않았는지에 대한 보고서를 생성한다. 이는 법정에서 체인 오브 커스터디가 유지되었음을 입증하는 데 도움을 줄 수 있다.
이 아이디어는 최근의 것이 아니다. Deuson은 “대학 시절 안 좋은 일을 겪은” 이후 수년 동안 이 작업을 해 왔다. 그 경험을 극복한 뒤 그녀는 “정말 화가 났고”, 같은 일이 다시는 일어나지 않도록 하기 위해 수사기관과 함께 일하기 시작했다. 처음에는 체인 오브 커스터디 문제를 돕기 위한 간단한 파이썬 스크립트를 작성했다. 그 스크립트는 그녀의 컴퓨터에서는 잘 작동했지만, 실제로 필요한 사람들에게 소프트웨어를 전달하는 데 어려움을 겪었다.
Deuson이 겨냥하는 사용자는 값비싼 상용 포렌식 솔루션을 감당할 수 없는, 대체로 예산이 부족한 경찰서들이다. 그곳의 사람들은 대개 비전문가이고, 증거 추적을 종이 양식으로 처리하는 데 더 익숙하다. 그들은 단순하고, 스스로 설명적이며, 매우 잠긴 엔터프라이즈 환경에서도 실행할 수 있는 소프트웨어가 필요하다. Deuson의 첫 배포 시도는 쿠버네티스로 소프트웨어를 번들링하는 것이었다. 그런대로 동작했지만, 경찰서에 설치하게 만드는 일은 어렵다는 사실이 드러났다. 방화벽에서 포트를 여는 일도 대개 지나치게 어렵다. “이런 환경에 소프트웨어를 들여보내는 일은 정말 어렵다.”
결국 그녀는 이 일을 가능하게 하는 유일한 방법은 모든 것을 로컬에서 수행하는 단일 독립 실행형 바이너리를 작성하는 것이라고 결론 내렸다. 그것은 오래된 데스크톱 컴퓨터에서도, 다양한 환경에서도, 외부 의존성 없이 실행될 수 있어야 했다. 그래서 최종적으로 FolSum을 Rust로 작성하기로 선택했다.
Rust는 아마 메모리 안전성으로 가장 유명하지만, 그녀에 따르면 그것이 실제 결정적 요인은 아니었다. 물론 Rust가 메모리 안전한 언어라는 점은 중요하다. 소프트웨어의 신뢰성 때문이라기보다는, 비전문가인 변호사들에게 자신의 선택을 정당화하기 위해 바이든 행정부의 현대 컴퓨터 보안 보고서나 CISA의 보안 소프트웨어 권고 같은 것을 근거로 제시할 수 있기 때문이다. 어떤 언어가 안전한 소프트웨어를 만드는 승인된 방식이라는 공식 보고서를 가리킬 수 있다는 사실은 FolSum 도입을 이끌어내는 데 실제로 큰 도움이 된다.
그녀가 Rust를 선택한 주된 이유는 개발자 경험(ergonomics)이었다. “저는 혼자예요.” 그녀는 설명했다. 현재 Trafficking Free Tomorrow에서 일하는 다른 사람은 없다. 그러니 이 소프트웨어를 만들어 내려면, 독립 실행형 애플리케이션을 만드는 요구사항을 쉽게 충족시켜 주는 언어여야 했다.
결국 그녀는 Rust로 실험한 선택에 만족하고 있다. 서버 기반이 아닌 로컬 애플리케이션을 작성하면서 단순함을 지킬 수 있었다. 사용자가 Rust 버전을 정말 좋아했던 점 중 하나는 시작이 빠르다는 것이었다고 한다. 많은 상용 소프트웨어는 크고 둔하며 시작하는 데 시간이 걸려, 사용자를 스플래시 화면 앞에 오래 세워둔다. FolSum은 사용자가 마우스 버튼에서 손을 떼기가 무섭게 거의 즉시 시작된다. 이는 처음부터 애플리케이션의 신뢰성에 대한 사용자 신뢰를 쌓는 데 중요하다고 그녀는 말했다.
Rust의 특징 중 하나는 “두려움 없는 동시성(fearless concurrency)”이다. 안전한 Rust 코드에서는 데이터 레이스를 구성하는 것이 표준 라이브러리 API 차원에서 불가능하다. Deuson이 FolSum을 쓰기 시작했을 때 그녀는 그것에 대해 아무것도 몰랐다. “처음에는 동시성에 대해 아무것도 몰랐어요. 정식으로 배운 적도 없었고요.” 그래서 프로그램의 첫 번째 버전은 공유 해시 맵을 하나의 큰 뮤텍스로 감싸 Rust의 동시성 모델을 어떻게든 만족시켰다.
그 방식은 작동하긴 했지만, 디버그하기 어려운 교착상태가 많이 발생했다. “정말 최악이었죠.” 결국 그녀는 구현을 채널을 사용하는 방식으로 다시 작성했고, 그 결과 교착상태가 줄었다. 주목할 점은, FolSum은 아직 비동기 코드를 전혀 쓰지 않는다는 것이다. 모든 작업은 동기 I/O로 처리되며, GUI는 실제로 체크섬 계산 작업과 같은 스레드에서 실행된다.
GUI는 egui로 작성되었는데, 이는 즉시 모드 GUI 프레임워크이므로 매 프레임마다 인터페이스를 완전히 다시 그린다. Deuson은 이 접근을 “살짝 저주받은 방식 같지만, 사고하기 쉽다”고 표현했다. 인터페이스는 군더더기나 애니메이션 없이 기본적이며 — 텍스트와 네 개의 버튼이 있는 단일 창일 뿐이다.
Deuson은 단순한 프로토타입으로, 일단 동작하는 것을 만들기 위해 그렇게 작성했다. “그 UI가 좋을 거라고는 생각하지 않았어요. 그런데 사용자들이 정말 좋아하더라고요.” 이제 그녀는 인터페이스를 바꿀 계획이 없다. 비전문가인 사용자들은 그녀가 “문서로서의 GUI(GUI as docs)”라고 부르는 접근을 좋아한다는 사실이 드러났는데, 애플리케이션이 각 버튼 옆에 그 버튼이 하는 일을 곧바로 설명하기 때문이다. 몇몇 사용자는 다른 소프트웨어도 이렇게 만들어졌으면 좋겠다고 말했는데, 그녀로서는 의아했지만 말이다. 영리 소프트웨어는 종종 기능의 숲이 되어, 특히 그 도구를 드물게 사용할수록 자신이 필요한 특정 기능을 찾기 어렵게 만든다고 그녀는 말했다.
그녀가 정말 높이 평가한 Rust 기능으로는 통합된 단위 테스트와 벤치마킹 라이브러리가 있다. 이들 덕분에 그녀는 상용구 코드에 시간을 쓰는 대신 자신이 중요하다고 느낀 것에 집중할 수 있었다. 반면, 사람들은 아마도 고급 언어 기능과 불필요한 의존성은 피하는 편이 좋다고 그녀는 느꼈다. 그녀는 FolSum을 기본적인 for 루프와 평범한 명령형 코드로 작성했고, 그 방식이 자신에게 잘 맞는다.
앞으로 그녀는 FolSum에 몇 가지 신중히 고른 새로운 기능을 추가하고 싶어 한다. 예를 들어 진행 막대나, 저가형 NAS(네트워크 연결 스토리지)를 과도하게 몰아붙이지 않도록 하는 코드 같은 것이다. 또한 문제가 생겼을 때 사용자가 그녀에게 보낼 수 있는 보고서를 제공하는 크래시 리포터도 추가하고 싶어 한다. 궁극적으로 FolSum은 꽤 작은 소프트웨어다. 이를 만드는 과정에서 그녀는 웹사이트, 지속적 통합(CI), 소프트웨어 패키징과 배포 문제를 다듬을 수 있었고, 이제 무엇이 통하는지 알게 된 덕분에 Trafficking Free Tomorrow의 향후 소프트웨어는 훨씬 더 단단한 토대 위에 놓이게 되었다.
세션 말미에 질문은 몇 가지만 받을 수 있었는데, 누군가 그녀가 경찰 조직이 소프트웨어를 받아들이게 하는 사회적 문제를 어떻게 다뤘는지 물었다. Deuson은 이해관계자와 이야기할 때 대체로 기술적인 것을 설득하려 하지 않았다고 설명했다. 대신, 그들의 상사가 누구인지, FolSum 사용을 선택함으로써 누가 리스크를 부담하는지를 생각한다. 바로 그 지점에서 백악관 권고 같은 자료가 실제로 유용해, 그것이 합리적인 방식임을 사용자에게 설득할 수 있다.
필자는 그녀가 앞으로 어떤 인신매매 방지 소프트웨어를 더 만들고 싶은지 물었다. Deuson은 이미지용 전용 지각 해시, 재귀적으로 압축된 파일을 다루는 도구, 대화 타임라인을 정리하는 방법, 오픈소스 인텔리전스 도구 등 “엄청나게 많은 것들”을 계획하고 있다고 답했다. 인신매매를 경제적으로 성립 불가능하게 만들겠다는 그녀의 목표는 중요하지만 벅차다. 그럼에도 가장 자원이 부족한 수사기관을 위한 작고 신뢰할 수 있는 도구를 만들어 내는 그녀의 전략이 그 목표를 이루는 데 보탬이 되기를 바란다.
| 이 글의 색인 항목 |
|---|
| Conference |