1 điểm bởi GN⁺ 2023-11-07 | 1 bình luận | Chia sẻ qua WhatsApp
  • sudo-rs, bản triển khai lại sudo bằng Rust dùng để chuyển đổi ranh giới đặc quyền, đã được công bố ở phiên bản ổn định đầu tiên
  • Ước tính khoảng một phần ba lỗi bảo mật của sudo gốc xuất phát từ vấn đề quản lý bộ nhớ là bối cảnh cốt lõi cho việc viết lại bằng Rust
  • sudo-rs giảm bề mặt tấn công bằng cách loại bỏ các tính năng ít được dùng hơn, và bộ kiểm thử của dự án cũng được dùng để phát hiện lỗi trong sudo gốc
  • Wolfi Linux OS đã tích hợp sudo-rs, và Chainguard cho rằng việc cải thiện các công cụ cốt lõi về bảo mật có thể tạo ảnh hưởng trên toàn ngành
  • Đợt kiểm toán bảo mật bên ngoài dự kiến bắt đầu vào tháng 9 năm 2023, sau đó công việc sẽ chuyển sang Milestone 4 tập trung vào các tính năng doanh nghiệp

sudo-rs được triển khai lại bằng Rust

  • Prossimo đã công bố bản phát hành ổn định đầu tiên của sudo-rs
  • sudo-rs là dự án triển khai lại bằng Rust tiện ích sudo vốn thường được dùng trên Linux để vượt qua ranh giới đặc quyền giữa tài khoản người dùng và tài khoản quản trị
  • Dự án sudo-rs tập trung vào việc nâng cao độ an toàn so với sudo gốc
    • Sử dụng Rust để đảm bảo an toàn bộ nhớ
    • Ước tính khoảng một phần ba lỗi bảo mật trong sudo gốc là do vấn đề quản lý bộ nhớ là điểm khởi đầu
    • Giảm bề mặt tấn công bằng cách loại bỏ các tính năng ít phổ biến hơn
    • Đã phát triển bộ kiểm thử quy mô lớn, và bộ kiểm thử này cũng phát hiện lỗi trong sudo gốc

Tình hình áp dụng và các bước tiếp theo

  • Wolfi Linux OS đã tích hợp sudo-rs
  • Dan Lorenc, CEO kiêm đồng sáng lập của Chainguard, cho biết khi xây dựng Wolfi thì an toàn bộ nhớ là ưu tiên hàng đầu, và việc cải thiện các công cụ cốt lõi về bảo mật như sudo có thể tạo tác động lớn đến toàn bộ ngành
  • sudo-rs được xây dựng bởi đội ngũ chung của Tweede GolfFerrous Systems theo hợp đồng với Prossimo
  • Dự án được khởi động vào tháng 12 năm 2022, và đợt kiểm toán bảo mật bên ngoài đối với mã sudo-rs dự kiến bắt đầu vào tháng 9 năm 2023
  • Sau kiểm toán, nhóm sẽ chuyển sang Milestone 4 trong kế hoạch công việc, giai đoạn này tập trung vào các tính năng doanh nghiệp
  • Tiện ích sudo nền tảng C gốc đã được Todd C. Miller duy trì trong thời gian dài, và ông cũng đưa ra tư vấn cho việc triển khai sudo-rs
  • NLnet Foundation đã tài trợ cho đợt kiểm toán sudo-rs, còn Amazon Web Services hỗ trợ công việc này và quá trình chuyển đổi sang phần mềm an toàn bộ nhớ

1 bình luận

 
GN⁺ 2023-11-07
Ý kiến trên Hacker News
  • Với tư cách là một trong những nhà phát triển ban đầu của sudo (https://en.wikipedia.org/wiki/Sudo), tôi đã chứng kiến nó gần như được viết lại hoàn toàn và liên tục được sửa lỗi trong suốt 43 năm qua
    Có thể nói đây là lệnh UNIX đã được rà soát nhiều nhất về các khiếm khuyết bảo mật, và những khiếm khuyết được phát hiện đều đã được sửa
    Tôi tự hỏi liệu một nhóm phát triển duy nhất có thể tái triển khai hoàn toàn một công cụ đã được hàng nghìn lập trình viên và chuyên gia bảo mật xem xét mà không tạo ra dù chỉ một hai lỗi mới hay không
    Không biết ngôn ngữ Rust có thứ gì đó loại bỏ một cách thần kỳ toàn bộ khả năng đưa lỗi vào hay không

    • Chỉ có thể cảm ơn công sức tạo ra sudo, và tôi nghĩ đây là một công cụ thật sự quý giá trong việc sử dụng hằng ngày của rất nhiều người
      Từ góc nhìn của người làm sudo-rs, chúng tôi chưa từng có ý định phủ nhận công sức trước đó, và đặc biệt trong giai đoạn đầu, chúng tôi hiểu rõ rằng bản triển khai của mình sẽ không phải là không có lỗi
      Cá nhân tôi, khi xây dựng phiên bản Rust, đã có thể xử lý những lĩnh vực mà bình thường tôi khó dám chạm tới, vì tôi không mấy tự tin vào việc viết mã C tương đối an toàn
      Ít nhất nhờ công việc này, chúng tôi đã tìm thấy một số lỗi trong sudo hiện có; và dù đã được sửa suốt 43 năm, chừng nào môi trường xung quanh còn thay đổi thì loại phần mềm này khó có thể hoàn toàn không có lỗi
      Miễn là chúng ta hợp tác với nhau và học hỏi từ công việc cũng như sai lầm của nhau, việc có thêm một vài phương án thay thế không phải là điều xấu
    • Bất kể chuyện gì đã xảy ra trong 43 năm qua, vào năm 2021 đã có một lỗ hổng hỏng bộ nhớ có thể bị khai thác rộng rãi mang tên Baron Samedit
    • Hệ thống kiểu nâng cao, bộ kiểm tra mượn và các ngôn ngữ an toàn bộ nhớ chắc chắn giúp ích rất nhiều, nhưng dĩ nhiên không loại bỏ được mọi lỗi
      Khi làm RiiR, điều tốt nhất nhà phát triển có thể làm là tuân theo các thực hành tốt nhất và học từ những sai lầm trong quá khứ
      Trong 43 năm, mọi thứ đã tiến bộ rất nhiều; chỉ riêng việc bỏ xử lý chuỗi kiểu C cũng đã loại bỏ vô số lỗi trước cả khi bàn đến an toàn bộ nhớ
      Ngày nay, ai muốn tạo một sản phẩm thay thế sudo an toàn về bảo mật thì dù chỉ dùng C cũng có thể làm tốt hơn ngày trước rất nhiều, và dự án OpenBSD cho thấy điều này khá rõ
      Nếu loại bỏ ở cấp ngôn ngữ nhiều “góc sắc” mà mã OpenBSD tránh được thì điểm xuất phát sẽ thuận lợi hơn, nhưng vẫn cần rất nhiều sự cẩn trọng và kinh nghiệm, và ngôn ngữ lập trình không thể thay thế điều đó
      Ít nhất thì nó đáng được xem xét nghiêm túc, nhưng tôi nghĩ trong thời gian tới chưa nên được phân phối làm mặc định
    • Tôi không có ý phủ nhận kinh nghiệm, và tôi dự đoán dự án này chắc chắn sẽ phải tự mình phát hiện lại những nỗi đau đó; nhưng cũng quan trọng không kém là chúng ta không cần lặp lại nguyên xi công trình cả đời của Newton, Leibniz, Maxwell để hiểu đúng vật lý cổ điển
      Giờ đây nó đã nằm trong chương trình trung học, và nếu vượt qua được thì có thể làm khá tốt; thêm chút nỗ lực nữa là có thể xử lý rất tốt những gì họ đã mất cả đời để đạt được
      Đó là vì ta có thể đứng trên vai những người khổng lồ, có hindsight cùng các công nghệ và phương pháp học tập tốt hơn, và không cần lặp lại mọi sai lầm của họ
      Nếu nhà phát triển ban đầu, với kinh nghiệm và kiến thức hiện nay, viết lại sudo từ con số không, rất có khả năng họ sẽ làm ra thứ sạch sẽ và đơn giản hơn trong thời gian ngắn hơn nhiều
      Điều đó không phải là hạ thấp nỗ lực và kinh nghiệm sẵn có, mà là nói rằng không phải không thể biến kinh nghiệm ấy thành thứ tốt hơn trong thời gian ngắn hơn
    • Với an toàn bộ nhớ thì đúng là vậy; ngôn ngữ giúp việc mặc định an toàn trở nên tốt hơn nhiều, nhưng nó không làm gì với lỗi logic
      Tuy nhiên, khi thay thế sudo viết bằng C hoặc các công cụ khác, các lỗ hổng như con trỏ null hay lạm dụng bộ đệm dễ dàng chiếm tới 50% tổng số
  • Tôi cho rằng hai điểm mà dự án này nêu ra là những phần thường bị bỏ qua, còn hơn cả việc dùng Rust
    Đó là giảm bề mặt tấn công bằng cách loại bỏ các tính năng ít được dùng, và phát triển một bộ kiểm thử rộng đã tìm ra cả lỗi trong sudo hiện có
    Khi viết mã quan trọng về an toàn, những điều như vậy còn quan trọng hơn cả việc viết lại bằng Rust

    • Ý bạn là còn quan trọng hơn những thứ như thế này chẳng hạn?
      Chứng minh bằng hệ thống quản lý chứng minh hình thức Coq: https://coq.inria.fr/
      Có thể xem ví dụ thực tế tại https://aws.amazon.com/security/provable-security/, và kiểm chứng có sự hỗ trợ của máy tính (CAV) cũng đáng xem xét
  • Nếu giả định mục tiêu của dự án này là thay thế sudo, thì việc lướt qua chuyện “loại bỏ các tính năng ít dùng hơn” khiến tôi hơi lo
    Điều quan trọng là các tính năng đó là gì, ít dùng đến mức nào, và với các cấu hình dùng những tính năng đó thì sẽ thất bại theo cách nào
    Sửa: Có vẻ một số hạn chế đã được tóm tắt trong README trên GitHub, https://github.com/memorysafety/sudo-rs#differences-from-ori...

    • Một trong các tính năng bị thiếu là sudoedit hoặc sudo -e
      Tôi thường dùng nó khi chỉnh sửa tệp trong /etc hoặc các tệp mà người dùng của tôi không có quyền; cờ này trước tiên sao chép tệp sang một vị trí tạm thời mà người dùng của tôi có quyền chỉnh sửa, rồi chạy trình soạn thảo văn bản bằng quyền người dùng của tôi, không có quyền sudo
      Trình soạn thảo được xác định bằng biến môi trường $SUDO_EDITOR, và sau khi đóng, chỉ khi có thay đổi thì tệp mới được sao chép lại với quyền ban đầu
      Điểm hay là trình soạn thảo chạy dưới người dùng của tôi chứ không phải root, nên nó nạp cấu hình và plugin của người dùng của tôi
    • Một tính năng không được ghi là thiếu là chức năng chạy make me a sandwich (https://github.com/sudo-project/sudo/blob/main/Makefile.in#L...)
    • Một tính năng được dùng trong các môi trường lớn hơn nhưng không có trong lộ trình của sudo-rs và cũng chưa được triển khai là hỗ trợ LDAP
      Với sudo thông thường, có thể quản lý quyền sudo của toàn bộ mạng từ cấu hình LDAP tập trung, và cũng có thể tạo tập trung các quy tắc bị giới hạn theo thời gian, host, người dùng và lệnh
      Không có khả năng một lỗi cú pháp đơn giản làm hỏng toàn bộ cấu hình; trong trường hợp này chỉ quy tắc đó bị bỏ qua
    • Vì các quản trị viên hệ thống cũng đã trải qua quá trình chuyển sang systemd, chắc họ quản lý được mức này
      Chắc chắn sẽ có tài liệu kỹ thuật tốt, và vì đây là một bản phát hành mang tính quảng bá nên tôi không nghĩ đây là nơi để tìm danh sách các tính năng bị thiếu
    • Bản thân việc một trong những công cụ UNIX cơ bản nhất lại nhồi nhét quá nhiều tính năng mới là dấu hiệu cảnh báo lớn hơn nhiều
  • Nhìn vào khác biệt giữa Apache-2.0+MITGPL-2.0, dù có thể có được su/sudo-rs an toàn bộ nhớ, bên phân phối nó dưới dạng nhị phân không có nghĩa vụ công khai mã nguồn dùng để build, kể cả các chỉnh sửa tiềm ẩn

    • Tôi cũng đã muốn viết bình luận này
      Tôi rất lo rằng xu hướng đẩy các công cụ GPL ra bằng các bản viết lại Rust theo giấy phép MIT/Apache một ngày nào đó sẽ dẫn tới Linux độc quyền, nhưng sudo gốc không phải GPL
      Nó dùng giấy phép kiểu ISC/MIT [1]
      1. https://www.sudo.ws/about/license/
    • Rời khỏi GPL ở những thành phần cốt lõi như thế này là một ý tưởng rất tệ
      Chính vì lý do vừa nói ở trên, và tôi để lại bình luận để nhấn mạnh vấn đề này
    • Sudo không phải GPL mà là một giấy phép rất dễ dãi thuộc họ ISC[0]
      su thì có vẻ thực sự là GPL
      [0]: https://www.sudo.ws/about/license/
    • Điều đó có thật sự tệ không?
      Bạn có quyền tự do không dùng bản phân phối đó
      Về mặt bảo mật, tác nhân độc hại cũng có thể phân phối một bản nhị phân và cho bạn xem mã nguồn khác
      Dù có GPL hay không cũng vậy
    • Dù tốt hay xấu thì việc dùng GPL đang giảm, và tương lai của nhân Linux cũng không được đảm bảo
      Trong mảng các hệ điều hành họ UNIX tự do và mã nguồn mở cho IoT, mọi ứng viên, bao gồm cả ZephyrOS do Linux Foundation tài trợ, đều dùng pha trộn các giấy phép Apache, MIT, BSD
      Sau khi thế hệ GPL biến mất, không lâu nữa một hệ điều hành họ UNIX với giấy phép hấp dẫn hơn với các tập đoàn lớn sẽ xuất hiện như một lựa chọn thay thế cho một bên quản lý khác của nhân Linux
  • Sẽ thú vị nếu thấy một bản phái sinh Debian kết hợp thứ này với GNU Coreutils triển khai bằng Rust
    Có thể đem lại lợi ích lớn về an toàn bộ nhớ và hiệu năng
    [1] https://github.com/uutils/coreutils

    • Tôi tò mò còn bao lâu nữa thì có không gian người dùng UNIX dựa trên Rust
      Ít nhất thì chắc sẽ không cần triển khai trình biên dịch C
  • Có phải đang đánh bóng một đống phân không?
    Tất nhiên một bản triển khai lại tốt hơn thì hay, nhưng bạn không ngạc nhiên khi đọc về những tính năng kỳ quặc của sudo sao?
    Ngay cả những phần trông bình thường cũng rất kỳ lạ và tinh vi, nên cũng dễ tổn thương tương ứng
    Những ai dùng sudo “sâu” nên nghĩ xem có cách khác không

  • Sẽ tốt nếu có một cờ hoặc công cụ xác thực/kiểm tra chạy thử cấu hình sudo hiện tại và in ra các phần mà sudo-rs không hỗ trợ
    Các dự án như thế này nên có trợ lý chuyển đổi để việc chuyển đổi được trơn tru

  • Nếu tôi nhớ đúng thì các lỗ hổng sudo gần đây đều là lỗi logic, không phải vấn đề an toàn bộ nhớ
    Viết lại là tốt, nhưng không nên giả vờ rằng sẽ không thể đưa bug mới vào vì hiểu sai cách một thứ hoạt động hoặc chỉ mắc lỗi bình thường

    • 2021: https://nvd.nist.gov/vuln/detail/CVE-2021-3156
      2019: https://nvd.nist.gov/vuln/detail/CVE-2019-18634
    • Ai đang giả vờ như vậy?
      Tôi thấy nhiều tuyên bố về an toàn bộ nhớ, nhưng không thấy dự án này nói như thể các loại bug khác chắc chắn bị loại bỏ
    • Theo cùng cách đó, sudo hiện tại cũng có thể có bug bộ nhớ mới được đưa vào
      Về lâu dài, giảm bề mặt tấn công bằng kiểm tra tĩnh có vẻ là một lựa chọn tốt hơn
  • doas là một công cụ đơn giản hơn nhiều để làm cùng việc
    Tôi không rõ vì sao nó không được dùng nhiều hơn

  • doas chỉ 43184 byte, và làm được mọi thứ tôi cần
    Vụ khai thác sudo đó là một hồi chuông cảnh tỉnh
    Nếu bạn vẫn chưa chuyển sang, opendoas (gói Debian) cũng đáng để thử

    • Bạn đang dùng doas trên Linux à?
      Nó không được bảo vệ trước tấn công tty pushback: https://github.com/Duncaen/OpenDoas/issues/106
      Đây là một vấn đề bảo mật chưa được giải quyết khá nghiêm trọng