[보안뉴스 = 로버트 레모스 IT 칼럼니스트] 러스트 프로젝트(Rust Project)의 표준 라이브러리가 업데이트 됐다. 윈도 시스템에서 패치 파일을 실행시키는 데 사용되는 기능 하나에서 취약점을 발견했기 때문이다. 이 취약점을 익스플로잇 하는 데 성공하면 임의의 코드를 주입할 수 있게 된다고 한다.
[이미지 = gettyimagesbank]
러스트는 최근 각광 받고 있는 프로그래밍 언어다. 프로그래밍에 사용되는 명령과 기능들을 목적에 맞게 묶어두고 있는데, 이를 표준 라이브러리라고 부른다. 이 표준 라이브러리를 사용하면 여러 가지 기능들을 실행할 수 있게 되며, 그 중에는 커맨드API(Command API)를 통해 배치 파일들을 실행시키는 것도 포함되어 있다. 하지만 API에 입력되는 값을 꼼꼼하게 점검하지 않고, 그렇기 때문에 코드 주입 공격이 성립된다.
보안 업체 제이프로그(JForg)의 수석 취약점 분석가인 야이르 미즈라히(Yair Mizrahi)는 “러스트는 메모리를 보호하는 특성으로 유명한 프로그래밍 언어이지만 모든 논리적 오류에서부터 자유로운 건 아니”라고 강조한다. “심지어 러스트의 메모리 안전 기능이 압도적으로 단단한 것도 아닙니다. 하지만 메모리가 안전한 프로그래밍 언어라고 널리 알려져 있죠. 그래서 개발자들이 메모리 안전 부분을 덜 신경 쓰기도 합니다. 러스트로 만들었든 다른 언어로 만들었든 개발된 코드는 모든 면에서 꼼꼼하게 점검하는 게 맞습니다. 그 어떤 언어도 개발자가 점검하지 않아도 될 정도로 완벽하지 않습니다.”
러스트 외에 코틀린(Kotlin)이라는 언어도 메모리 보호 기능으로 잘 알려져 있다. 구글과 MS 등은 이처럼 메모리 보호 기능이 기본적으로 탑재되어 있는 언어들로 수년 전부터 전환한 바 있다. 그런 후에는 모든 보안 문제들이 70%로 감소되었다고 구글 측은 주장한다. 즉 메모리 보호 기능이 효과가 있는 건 맞지만, 그것이 모든 문제를 해결할 정도는 아니라는 것이다.
메모리 문제 아니고 논리 문제
최근 러스트의 표준 라이브러리에서 발견된 취약점은 메모리와 관련된 문제가 아니다. 입력값을 처리하는 과정에서 나타나는 논리의 오류다. 러스트재단(Rust Foundation)의 기술 국장인 조엘 마시(Joel Marcey)는 “러스트의 표준 라이브러리 중 일부는 배치 파일을 윈도 장비에 전송하는 기능을 호출하도록 한다”며 “이처럼 코드를 배치 파일 형태로 전송하는 데에는 이유가 있다”고 설명한다.
“배치 파일들은 윈도 시스템에서 여러 가지 용도를 가지고 있습니다. 러스트는 이런 배치 파일의 활용을 보다 쉽게 해주기 위해 API를 제공합니다. 물론 API로 배치 파일을 쉽게 불러오도록 하는 것이 러스트의 핵심 기능이라고 하기는 어렵고, 따라서 개발자들도 이 기능을 전부 다 이용한다고 하기 어렵습니다만, 그럼에도 이론적으로는 공격자들이 피해자의 시스템을 완전히 장악할 수 있도록 해주는 것이므로 대단히 위험한 문제라고 해도 무방합니다.”
러스트재단의 보안 팀은 “일부 파일을 호출하고 입력 값을 점검하는 논리가 허술했음을 발견했다”며 “이를 악용해 악성 명령들을 통과시키는 게 가능하다는 것 또한 알아낼 수 있었다”고 발표했다. “공격자는 임의의 셸을 실행시킬 수 있었습니다.”
대응 빠른 러스트 프로젝트
보안 전문가들은 이번 러스트 측의 대응이 무척이나 빨랐다는 점을 칭찬하고 있다. “이번에 러스트 표준 라이브러리에서 발견된 취약점인 CVE-2024-24576은 러스트의 문제라기보다 윈도 배치 파일 처리 문제라고 볼 수 있습니다. 엄연히 말하자면 러스트만의 문제가 아니었고, 다른 프로그래밍 언어에서도 충분히 나타날 수 있는 문제였다는 것입니다. 그런 가운데 러스트가 제일 먼저 픽스를 내며 대응했습니다.” 미즈라히의 설명이다.
물론 이번 러스트의 대응으로 문제가 근원까지 다 해결됐다고 하기는 힘들다. 하지만 이제 커맨드API는 불안전한 값을 입력 받았을 때 오류를 일으키지 않으며, 따라서 익스플로잇의 가능성이 상당히 낮아졌다는 게 러스트 측의 설명이다. 미즈라히는 “러스트 측에서 정적 애플리케이션 보안 점검을 보다 광범위하게 진행하고, 퍼징 테스트도 활성화시킬 필요가 있어 보인다”고 말한다.
“러스트는 올바른 방향으로 나아가고 있다고 봅니다. 특히 메모리 안전을 기하는 프로그래밍 언어로서 자리를 잡아가는 건 바람직한 일입니다. 실제 많은 기업들이 메모리 안전 언어를 선호하기 시작했고, 그로 인해 적잖은 혜택을 보기도 했고요. 다만 좀 더 꼼꼼한 점검과 실험을 통해 메모리를 안전하게 하는 언어로서의 평판을 그대로 유지했으면 좋겠습니다. 특히 입력 값을 제대로 점검하는 건 기본 중 기본인데 그걸 놓쳤으니 러스트에 대한 신뢰도에 손상이 갈 수도 있습니다. 하지만 메모리 안전 언어로서 자리를 굳히고 있기 때문에 대단히 큰 타격을 입을 것 같지는 않습니다.”
상세한 내용은 러스트 프로젝트 홈페이지(https://blog.rust-lang.org/2024/04/09/cve-2024-24576.html)에서 확인이 가능하다(영문).
글 : 로버트 레모스(Robert Lemos), IT 칼럼니스트
[국제부 문정후 기자(globoan@boannews.com)]
<저작권자: 보안뉴스(www.boannews.com) 무단전재-재배포금지>