
ZDNET을 팔로우하세요: 우리를 선호 소스로 추가하세요 Google에서.
ZDNET의 주요 시사점
- Rust는 C의 고유한 보안 약점으로부터 Linux를 보호할 것입니다.
- AI가 발견한 보안 문제의 홍수에 직면한 Linux는 도움을 사용할 수 있습니다.
- 앞으로 점점 더 많은 Linux 코드가 Rust로 작성될 것입니다.
네덜란드 위트레흐트에서 열린 세계 최대 규모의 Rust 언어 컨퍼런스인 Rust Week 컨퍼런스에서 Linux 안정 커널 관리자인 Greg Kroah-Hartman은 다음과 같이 말하면서 시작했습니다. “저는 신뢰할 수 없는 데이터와 Linux, 그리고 Rust가 우리를 어떻게 구할 것인지에 대해 이야기하려고 왔습니다.” “커널 보안 목록에 포함된 지 한 두 달”이 지난 후 그는 그 점을 더욱 강조했습니다. “저는 더욱 대담하게 ‘당신은 Linux를 구할 것입니다.’라고 말할 것입니다. 미안해요, 모든 건 당신 몫이에요.”
절약? Linux에 저장이 필요합니까?
그가 말한 것은 최신 AI 버그 탐지 프로그램 덕분에 밝혀진 Dirty Frag, Copy Fail, Fragnesia와 같은 심각한 Linux 보안 허점이 갑자기 홍수처럼 발견되고 있다는 것이었습니다.
결과적으로 2005년부터 “모든 커널 보안 버그를 본” Kroah-Hartman은 커널 팀이 이제 “하루에 13개의 CVE(Common Vulnerability and Exposures) 또는 뭔가 이상한 것”을 발행하고 있다고 말했습니다. 그는 Rust가 C의 전통적인 오류 처리 및 리소스 관리 함정에서 발생하는 버그 종류를 줄이는 몇 안 되는 현실적인 방법 중 하나라고 생각합니다.
또한: 제가 사용해 본 Linux 배포판 중 가장 사용자 친화적인 배포판 중 하나이자 가장 안전한 배포판 중 하나이기도 합니다.
Kroah-Hartman은 포인터를 확인하지 않고 역참조하는 15년 된 Bluetooth 버그와 오류 경로에서 “잠금 해제하는 것을 잊어버린” Xen 버그를 포함하여 커널의 실제 C 버그에 대한 함정을 설명했습니다. “커널에 있는 대부분의 버그는 이렇게 작고 사소한 것들입니다.”라고 그는 설명했습니다. “오류 조건이 확인되지 않고, 잠금이 잊혀지지 않고, 해제되지 않은 메모리가 누출되고, 취약점이 시간이 지남에 따라 추가됩니다. 커널이 충돌합니다. 이것이 우리가 C에서 살아가는 이유입니다. 이것이 우리가 좋아하지 않는 이유입니다.”
Kroah-Hartman은 “Rust의 가장 아름다운 점”은 리뷰가 아닌 빌드 타임에 이러한 실수를 포착하는 것이라고 주장했습니다. 예를 들어, 잠금과 관련하여 그는 커널에서 Rust의 잠금 추상화를 강조했습니다. “구조체의 내부 포인터에 액세스할 수 있는 유일한 방법은 해당 잠금을 잡고 잠금을 자동으로 해제하는 것입니다. 컴파일러는 이를 수행하고 보호되며 잠금이 발생하면 모든 것이 만족됩니다. 잠금을 잡지 않고는 이러한 값에 액세스하는 코드를 작성할 수 없습니다. 컴파일러는 허용하지 않습니다.”
그는 이러한 속성이 자신이 보는 버그의 상당 부분을 직접적으로 제거한다고 주장했습니다. “이렇게 하면 이 두 가지를 구할 수 있습니다. 첫째, 커널에 있는 버그 중 60%가 사라졌습니다. 감사합니다.” 보상은 더 빠르고 자동화된 적용입니다. “검토 시간이 아닌 빌드 시간에 이런 일이 발생한다면 나를 관리자로 만들어 코드를 읽고 ‘아, 그럼 오류 값을 제대로 확인하셨네요. 아, 올바른 위치에서 잠금을 제대로 잡았나요?’라고 말하게 만들지 마세요. Rust는 우리에게 그것을 무료로 제공합니다. 이건 역대 최고의 일이야.”
Kroah-Hartman은 Rust가 내일 사라진다고 해도 이미 커널이 C 코드와 인터페이스를 정리하도록 강요했다고 주장했습니다. 그는 Rust의 영향력을 노골적으로 이렇게 평가했습니다. “우리는 이것을 Rust에서 훔쳤습니다. 감사합니다. 좋은 생각입니다. 만약 내일 Rust가 사라지면 우리는 커널에서 C 코드를 너무 많이 정리하고 아이디어를 받아들였습니다. 감사합니다. 존재하는 것만으로도 Linux를 더 좋게 만들었습니다.”
또한: Linux는 보안에 대한 경각심을 불러일으키고 있습니다. 이것이 불가피한 이유는 무엇이며 걱정하지 않습니다.
그는 Rust에서 영감을 받은 새로운 C “가드”와 범위 잠금에 대해 다음과 같이 설명했습니다. “이제 우리는 C 범위 잠금과 할당자를 갖게 되었으며, 이 새로운 코드를 추가했습니다. 이는 우리가 틀리기 어렵게 만들었지만, 가장 중요한 것은 코딩이 더 단순해진다는 것입니다.” 그는 5,000명이 넘는 개발자와 700명 정도의 유지관리자가 있기 때문에 검토 시간이 가장 부족한 리소스이므로 정확성을 명백하게 만드는 패턴이 중요하다고 말했습니다. “우리는 코드를 쉽게 검토할 수 있도록 최적화합니다… 코드를 더 쉽게 검토할 수 있다면 코드를 보고 ‘이봐, 그 패턴을 사용했기 때문에 확실히 제대로 하신 것 같아. 모든 것이 좋고 버그도 적습니다.’라고 말할 수 있습니다.”
Rust 바인딩은 C 측면에서도 더 깊은 변화를 강요하고 있습니다. 초기 Rust-for-Linux 컨퍼런스를 회상하면서 그는 “C 코드 두 줄을 처리하기 위해 수백 줄의 Rust 코드”를 보고 “C 코드를 변경할 수 있습니다. C 코드를 변경하여 Rust 코드를 더 간단하게 만들 수 있습니다. 이 장벽의 양쪽을 변경하는 데 문제가 없습니다. 그렇게 합시다.”라고 말했습니다. 이제 그는 드라이버 인터페이스를 재구성한 Rust-for-Linux 팀의 공로를 인정합니다. “관련된 규칙, 특성과 인터페이스가 드라이버 코어에서 작동하는 방식, 커널의 C 코드와의 상호 작용으로 인해 드라이버를 작성하기는 더 간단해지고 작성하기는 더 어려워질 것입니다(잘못). 그들은 훌륭한 일을 해냈습니다.”
언어 기능 외에도 Kroah-Hartman은 Rust를 신뢰할 수 없는 데이터와 “모든 입력은 악하다”는 생각에 대한 더 광범위한 추진과 직접 연결했습니다. 그는 Microsoft 보안의 대사를 빌려 참석자들에게 이렇게 말했습니다. “내 연설에서 다른 내용이 기억나지 않는다면 이 네 단어만 기억하십시오. 이 말은 수년 전에 Microsoft 보안에서 나온 것입니다. 그들은 모든 입력이 악하다는 것을 깨달았습니다. 모든 입력을 검증해야 합니다.”
그는 “신뢰할 수 없는” 유형 래퍼에 대한 지속적인 작업과 데이터가 신뢰할 수 없는 상태에서 신뢰할 수 있는 상태로 교차하는 지점에서 명시적인 유효성 검사를 강제하는 Rust의 유효성 검사 방법에 대해 설명했습니다. “우리는 데이터에 유형을 추가하기 위해 신뢰할 수 없음이라는 것을 가지고 있으며 실제로 이 데이터에 액세스하려고 할 때마다 이는 단지 유형일 뿐이며 실제로 코드가 아니며 컴파일러에 힌트를 제공할 것입니다. 실제로 액세스하기 전에 유효성 검사를 거쳐야 합니다.” 리뷰어의 주요 이점은 “모든 것이 전환 지점에 집중되어 있다”는 것입니다. “코드의 한 섹션에서는 사용자 공간, 신뢰할 수 없는 데이터에서 신뢰할 수 있는 데이터로의 변환을 검증하는 모든 코드를 한 곳에서 볼 수 있습니다.”
또한: Microsoft는 최초의 서버 Linux 배포판인 Azure Linux 4.0으로 놀라움을 선사합니다.
이 모델은 점점 더 적대적인 하드웨어로 확장됩니다. “모델과 커널, 우리는 하드웨어조차 신뢰하지 않습니다. 하드웨어는 버그로 가득 차 있지만 이제는 악성 하드웨어를 가질 수 있으며 점점 더 많은 악성 하드웨어를 보고 있습니다.” 그의 목표는 이러한 데이터를 신뢰할 수 없음으로 표시하고 유형 시스템을 통해 추적한 다음 검토 에너지에 집중하는 것입니다. “우리는 데이터를 신뢰하지 않기 때문에 이것이 우리를 정말로 구할 것입니다. 비과학적인 인용을 할 것 같습니다. 이것이 다른 모든 것들과 신뢰할 수 없는 데이터의 조합인 Linux를 구할 것입니다. 제 생각에는 이것이 우리가 가지고 있는 모든 CVE의 80%를 제거할 것이라고 생각합니다. 번호.”
러스트는 마법이 아니다
그렇다고 그가 Rust가 마법이라고 생각한다는 뜻은 아닙니다. 그렇지 않습니다. 그는 커널에 병합된 최초의 Rust 구성 요소 중 하나인 커널이 충돌할 때 사용되는 QR 코드 표시 논리를 인용했습니다. “그 로직은 Rust로 작성되었습니다. 유명하게도 메모리 버그가 있었습니다. 버퍼와 크기가 주어졌는데 나머지 st 코드에서는 버퍼 크기를 확인하지 않았습니다. Rust도 C만큼 충돌할 수 있기 때문에 메모리 전체에 낙서를 할 수 있었습니다.” 따라서 Rust는 “만능 해결방안”이 아닙니다.
그는 또한 누군가에게 Rust로 Linux 커널을 다시 작성하도록 권장하지 않습니다. 한 참석자는 “(Rust)를 사용하여 커널에 이미 있는 항목을 실제로 다시 작성하도록 권장합니까?”라고 물었습니다. Greg는 다음과 같이 대답했습니다. “아니요, 우리는 재작성을 원하지 않습니다. 따라서 해당 파일의 관리자나 소유자가 아닌 이상 새로운 작업을 위해 재작성을 하십시오. 기존 C 코드는 그대로 두고 그 이후에는 계속 발전해 나가겠습니다.” 그는 C와 Rust 구현이 일시적으로 공존하여 패리티에 도달한 후 Android의 핵심 IPC(프로세스 간 통신)인 Binder를 예로 들었습니다. “그들은 C 코드를 삭제할 것입니다. 왜냐하면 나는 그들을 신뢰하고 그들이 두 코드의 소유자이자 유지관리자이기 때문입니다.”
또한: 현재 이 7개 배포판에서 Linux 7.0을 사용할 수 있습니다. 예상되는 내용은 다음과 같습니다.
시간이 지남에 따라 그는 새로운 하드웨어 지원이 Rust에 크게 편향될 것으로 예상합니다. “Rust는 시간이 지남에 따라 커널에서 발전할 것입니다. 일부 하위 시스템에서는 ‘그래픽용 새 드라이버만 Rust로 작성해야 합니다’라고 말했습니다…. 시간이 지남에 따라 우리는 이제 Rust와 Linux의 모든 다양한 유형의 하위 시스템에 대해 정말 좋은 드라이버를 작성할 수 있는 중요한 지점에 도달했습니다. 내 생각에는 내년 또는 2년에 걸쳐 이를 보게 될 것입니다.” 전형적인 Kroah-Hartman 방식으로 그는 모델을 진화론적이라고 요약했습니다. “Linux는 진화입니다. 그것은 지능형 설계가 아닙니다. 우리는 시간이 지남에 따라 진화하고 시간이 지남에 따라 새 하드웨어에 대한 새 드라이버가 등장합니다. 새 하드웨어를 사용하기 시작하게 됩니다. 이전 드라이버는 더 이상 사용되지 않을 것입니다. 결국 약 20년 후에 삭제되는 것처럼 우리는 이를 삭제할 것입니다.”
그 동안 Kroah-Hartman은 청중에게 다음과 같이 말했습니다. “현재 Linux의 3,600만 라인이 C로 되어 있고 Rust의 라인은 113,000개입니다. 무엇보다도 이것은 구속력이 있습니다.” 드라이버는 커널의 대부분을 구성하기 때문에 “최고의 Rust Android 프로그래머이자 Linux용 Rust 개발자인 Alice Ryhl은 Rust에서 작은 드라이버를 작성하기 위해 모든 것에 대한 바인딩을 작성해야 했습니다.” 이로 인해 커뮤니티에서는 사용되지 않는 코드에 대한 일반적인 규칙을 완화해야 했습니다. “우리는 사용되지 않는 커널에 코드를 추가하는 것을 좋아하지 않기 때문에 바인딩을 추가하기가 어렵습니다…사용자가 없으면 바인딩을 추가하기가 어렵습니다. 따라서 이것은 약간의 닭과 달걀의 문제입니다. 우리는 그 규칙을 약간 구부려야 했습니다.”
그는 또한 곧 실제 배포가 예정되어 있음을 알렸습니다. “Binder에서 모든 (Rust) 코드를 실행하는 Android 휴대폰이 곧 출시될 것입니다. 따라서 다시 말하지만, 곧 수십억 개의 장치가 Linux에서 Rust를 실행할 수 있습니다.”
궁극적으로 그를 포함한 다수의 핵심 유지보수 담당자가 Rust를 사용하게 된 이유는 이것이 “코드 검토를 더 쉽게 만들어준다”는 점이었습니다. 빌드를 적용하는 CI(지속적 통합) 봇과 키 불변성을 적용하는 Rust의 유형 시스템을 사용하면 관리자는 리소스 기록보다는 “로직에 집중”할 수 있습니다. “저는 그 하나의 기능에 신경 쓸 수 있습니다. 나머지 부분에 대해서는 걱정할 필요가 없습니다. 제대로 작동한다고 가정하기 때문입니다. 제대로 빌드되었기 때문입니다.”
또한: 그를 화나게 만드는 AI 주장과 보안 연구원들이 절대 해서는 안 되는 일에 대한 Linus Torvalds
그는 내부적으로 최고 유지관리자들이 이미 Rust의 상태에 대해 요청했다고 말했습니다. “리눅스 커널 유지관리자들은 매년 모여서 프로세스가 무엇을 하고 있는지에 대해 이야기합니다. 작년에 우리는 Rust 실험이 끝났다고 말했습니다. 이것은 실험이 아닙니다. 이것은 실제입니다.” 근거: “그 배후에 있는 사람들은 진짜입니다. 우리는 그들을 믿습니다. 우리는 그들이 무엇을 하고 있는지 알고 있습니다. 그들은 Rust를 커널에서 실행 가능한 언어로 만들기 위한 작업을 보여주고 투입했으며 우리는 이 스틱을 만들 것입니다. 전속력으로 전진합시다. 그리고 언제나 그렇듯이 세계 지배가 진행되고 있습니다.”라고 그는 쓴웃음을 지었습니다.
자세한 정보 확인