Bảo mật nguồn mở tại Astral
Security·Hacker News·0 lượt xem

Bảo mật nguồn mở tại Astral

Open Source Security at Astral

AI Summary

SKIP

Astral xây dựng các công cụ mà hàng triệu nhà phát triển trên khắp thế giới tin tưởng và tin cậy. Sự tin cậy đó bao gồm sự tự tin về tình hình bảo mật của chúng tôi: các nhà phát triển có lý do hợp lý mong đợi rằng các công cụ của chúng tôi (và các quy trình...

Astral xây dựng các công cụ được hàng triệu nhà phát triển trên khắp thế giới tin tưởng và tin cậy.

Sự tin tưởng đó bao gồm sự tin tưởng vào tình hình bảo mật của chúng tôi: các nhà phát triển có lý do hợp lý mong đợi rằng các công cụ của chúng tôi (và các quy trình xây dựng, kiểm tra và phát hành chúng) đều được bảo mật. Sự gia tăng của các cuộc tấn công chuỗi cung ứng điển hình là các vụ hack TrivyLiteLLM gần đây, khiến các nhà phát triển đặt câu hỏi liệu họ có thể làm được không hãy tin tưởng vào công cụ của họ.

Vì mục đích đó, chúng tôi muốn chia sẻ một số kỹ thuật mà chúng tôi sử dụng để bảo mật các công cụ của mình với hy vọng rằng chúng hữu ích cho:

  1. Người dùng của chúng tôi, những người muốn hiểu những gì chúng tôi làm để giữ an toàn cho hệ thống của họ;
  2. Khác người bảo trì, dự án và công ty, những người có thể hưởng lợi từ một số kỹ thuật chúng tôi sử dụng;
  3. Nhà phát triển hệ thống CI/CD, để các dự án không cần phải đi theo những con đường không rõ ràng hoặc tránh các tính năng hữu ích để duy trì các quy trình an toàn và mạnh mẽ.

Bảo mật CI/CD #

Chúng tôi duy trì tốc độ phát triển của mình trên Ruff, uvty thông qua quy trình công việc CI/CD mở rộng giúp chạy trên Tác vụ GitHub. Nếu không có những quy trình công việc này, chúng tôi sẽ gặp khó khăn trong việc xem xét, kiểm tra và phát hành công cụ theo tốc độ và mức độ tin cậy mà chúng tôi yêu cầu. Quy trình làm việc CI/CD của chúng tôi cũng là một một phần quan trọng trong tình hình an ninh của chúng tôi, trong đó chúng cho phép chúng tôi duy trì sự phát triển quan trọng và phát hành các quy trình khỏi các máy phát triển cục bộ và bên trong các quy trình được kiểm soát, có thể quan sát được môi trường.

Tác vụ GitHub là một lựa chọn hợp lý đối với chúng tôi vì tính năng tích hợp chặt chẽ của bên thứ nhất với GitHub, cùng với sự hỗ trợ hoàn thiện dành cho quy trình làm việc của cộng tác viên: bất kỳ ai muốn đóng góp có thể xác thực rằng yêu cầu kéo của họ là chính xác bằng các quy trình tương tự mà chúng tôi sử dụng.

Thật không may, có một mặt trái của vấn đề này: GitHub Actions có mặc định bảo mật kém và bảo mật những thỏa hiệp như của Ultralytics, tj-actionsNx đều bắt đầu bằng những hành động đúng đắn điểm yếu như pwn yêu cầu.

Dưới đây là một số việc chúng tôi thực hiện để bảo mật quy trình CI/CD của mình:

  • Chúng tôi cấm nhiều trình kích hoạt nguy hiểm và không an toàn nhất của GitHub, chẳng hạn như pull_request_targetworkflow_run, trên toàn bộ tổ chức GitHub của chúng tôi. Những kích hoạt này gần như không thể sử dụng một cách an toàn và những kẻ tấn công liên tục tìm cách lạm dụng chúng, vì vậy chúng tôi không cho phép chúng.

    Kinh nghiệm của chúng tôi với những trình kích hoạt này là nhiều dự án nghĩ rằng họ cần chúng, nhưng phần lớn cách sử dụng của họ tốt hơn nên được thay thế bằng một trình kích hoạt ít đặc quyền hơn (chẳng hạn như pull_request) hoặc bị xóa hoàn toàn. Ví dụ: nhiều dự án sử dụng pull_request_target để quy trình làm việc do cộng tác viên bên thứ ba kích hoạt có thể để lại nhận xét về PR, nhưng những trường hợp sử dụng này thường được phục vụ tốt bởi bản tóm tắt công việc hoặc thậm chí chỉ để lại thông tin liên quan trong phần nhật ký của quy trình làm việc.

    Tất nhiên, có một số trường hợp sử dụng yêu cầu những trình kích hoạt này, chẳng hạn như bất cứ điều gì thực hiện thực sự cần phải để lại nhận xét về các vấn đề của bên thứ ba hoặc yêu cầu kéo. Trong những trường hợp này chúng tôi khuyên bạn nên rời khỏi hoàn toàn Tác vụ GitHub và sử dụng Ứng dụng GitHub (hoặc webhook) để lắng nghe các sự kiện và hành động liên quan trong một bối cảnh độc lập. Chúng tôi đề cập đến mẫu này chi tiết hơn trong Tự động hóa bên dưới.

  • Chúng tôi yêu cầu tất cả hành động phải được ghim vào các cam kết cụ thể (chứ không phải các thẻ hoặc nhánh, vốn là có thể thay đổi). Ngoài ra, chúng tôi kiểm tra chéo các cam kết này để đảm bảo chúng khớp với cam kết được phát hành thực tế trạng thái kho lưu trữ và không phải là cam kết của kẻ mạo danh.

    Chúng tôi thực hiện việc này theo hai cách: đầu tiên là kiểm tra unpinned-usesimpostor-commit của zizmor, và một lần nữa với chính sách "yêu cầu các hành động được ghim vào SHA cam kết đầy đủ" của GitHub. các trước đây cho chúng tôi kiểm tra nhanh xem chúng tôi có thể chạy cục bộ hay không (và ngăn chặn các cam kết của kẻ mạo danh), trong khi cái sau là một cổng cứng trong việc thực thi quy trình công việc thực sự đảm bảo rằng tất cả hành động, bao gồm các hành động lồng nhau, được ghim băm hoàn toàn.

    Việc kích hoạt tính năng sau là một nỗ lực không hề nhỏ vì nó yêu cầu sử dụng hành động gián tiếp ( hành động được gọi bởi hành động mà chúng ta gọi) sẽ được ghim băm dưới dạng Tốt. Để đạt được điều này, chúng tôi đã phối hợp cùng với các phần tiếp theo của chúng tôi (example) để ghim băm trên toàn bộ biểu đồ phụ thuộc của chúng tôi.

    Cùng với nhau, những lần kiểm tra này làm tăng độ tin cậy của chúng tôi về khả năng tái tạotính kín của chúng tôi quy trình công việc, từ đó làm tăng sự tin cậy của chúng tôi về tính bảo mật của chúng (khi có sự hiện diện của khả năng của kẻ tấn công để thỏa hiệp một người phụ thuộc hành động).

    Tuy nhiên, mặc dù cần thiết nhưng điều này vẫn chưa đủ: việc ghim băm đảm bảo rằng hành động nội dung là bất biến, nhưng không ngăn cản những nội dung bất biến đó đưa ra quyết định có thể thay đổi (chẳng hạn như cài đặt phiên bản nhị phân mới nhất từ ​​bản phát hành của kho lưu trữ GitHub). cũng không GitHub cũng như các công cụ của bên thứ ba hoạt động tốt trong việc phát hiện các loại lỗ hổng bất biến này, vì vậy chúng tôi hiện dựa vào việc xem xét thủ công các phần phụ thuộc hành động của chúng tôi để phát hiện loại rủi ro này.

    Khi xem xét thủ công xác định được các khoảng trống, chúng tôi sẽ làm việc với cấp trên của mình để khắc phục chúng. Ví dụ, đối với các hành động sử dụng các tệp nhị phân gốc trong nội bộ, điều này đạt được bằng cách nhúng ánh xạ giữa URL tải xuống cho hàm băm nhị phân và mật mã. Hàm băm này lần lượt trở thành một phần của trạng thái bất biến của hành động. Mặc dù điều này không đảm bảo rằng bản thân nhị phân là xác thực nhưng nó đảm bảo đảm bảo rằng kẻ tấn công không thể giả mạo một cách hiệu quả một con trỏ có thể thay đổi thành nhị phân (chẳng hạn như thẻ hoặc bản phát hành không thể thay đổi).

  • Chúng tôi giới hạn quy trình làm việc và quyền công việc của mình ở nhiều nơi: chúng tôi mặc định có quyền chỉ đọc ở cấp độ tổ chức và chúng tôi cũng bắt đầu mọi quy trình làm việc với quyền: { và chỉ mở rộng ra ngoài phạm vi đó trên cơ sở từng công việc.

  • Chúng tôi cô lập các bí mật Hành động GitHub của mình bất cứ khi nào có thể: thay vì sử dụng tổ chức- hoặc bí mật cấp kho lưu trữ, chúng tôi sử dụng môi trường triển khai và bí mật dành riêng cho môi trường. Cái này cho phép chúng tôi hạn chế hơn nữa bán kính vụ nổ của một thỏa hiệp tiềm ẩn, như một thử nghiệm bị xâm phạm hoặc Công việc tìm lỗi mã nguồn sẽ không có quyền truy cập, chẳng hạn như các bí mật cần thiết để xuất bản các cấu phần phần mềm phát hành.

Để thực hiện những việc này, chúng tôi tận dụng cài đặt riêng của GitHub cũng như các công cụ như zizmor (đối với tĩnh phân tích) và pinact (đối với tự động đang ghim).

Bảo mật kho lưu trữ và tổ chức #

Ngoài quy trình CI/CD, chúng tôi cũng thực hiện một số bước để hạn chế cả khả năng xảy ra và tác động của việc xâm phạm tài khoản và kho lưu trữ trong tổ chức Astral:

  • Chúng tôi giới hạn số lượng tài khoản có vai trò quản trị viên và các vai trò có đặc quyền cao khác, với nhất các thành viên tổ chức chỉ có quyền truy cập đọc và ghi vào kho lưu trữ mà họ cần làm việc. Điều này làm giảm số lượng tài khoản mà kẻ tấn công có thể xâm phạm để có quyền truy cập vào hệ thống của chúng tôi. kiểm soát cấp tổ chức.

  • Chúng tôi thực thi các phương pháp mạnh 2FA cho tất cả thành viên của tổ chức Astral, ngoài GitHub mặc định yêu cầu bất kỳ phương pháp 2FA nào. Trên thực tế, điều này đòi hỏi tất cả các thành viên của tổ chức Astral phải có phương pháp 2FA không yếu hơn TOTP. Nếu và khi GitHub cho phép chúng tôi chỉ thực thi 2FA có khả năng chống lừa đảo (chẳng hạn như chỉ WebAuthn và Passkeys), chúng tôi sẽ làm như vậy.

  • Chúng tôi áp đặt các quy tắc bảo vệ chi nhánh trên cơ sở toàn tổ chức: không thể thực hiện các thay đổi đối với main bị ép buộc và phải luôn trải qua một yêu cầu kéo. Chúng tôi cũng cấm việc tạo chi nhánh cụ thể các mẫu (như Advisory-*internal-*) để ngăn chặn việc tiết lộ sớm công việc bảo mật.

  • Chúng tôi áp đặt các quy tắc bảo vệ thẻ nhằm ngăn chặn việc tạo thẻ phát hành cho đến khi triển khai bản phát hành thành công với việc triển khai bản phát hành chính nó đang bị kiểm soát với sự chấp thuận thủ công của ít nhất một thành viên khác trong nhóm. Chúng tôi cũng ngăn chặn việc cập nhật hoặc xóa của các thẻ, làm cho chúng trở nên bất biến một cách hiệu quả sau khi được tạo. Trên hết chúng ta xếp một nhánh hạn chế: việc triển khai bản phát hành chỉ có thể được tạo dựa trên main, ngăn chặn kẻ tấn công sử dụng chi nhánh bên thứ nhất không liên quan để cố gắng vượt qua sự kiểm soát của chúng tôi.

  • Cuối cùng, chúng tôi cấm quản trị viên kho lưu trữ bỏ qua tất cả các biện pháp bảo vệ trên. Tất cả của chúng tôi các biện pháp bảo vệ được thực thi ở cấp tổ chức, nghĩa là kẻ tấn công quản lý xâm phạm tài khoản có quyền truy cập quản trị viên vào một kho lưu trữ cụ thể vẫn không thể vô hiệu hóa các điều khiển của chúng tôi.

Để giúp những người khác triển khai các loại kiểm soát nhánh và thẻ này, chúng tôi chia sẻ ý chính cho thấy một số bộ quy tắc chúng tôi sử dụng. Các bộ quy tắc này dành riêng cho tổ chức GitHub của chúng tôi và kho lưu trữ, nhưng bạn có thể sử dụng chúng làm điểm bắt đầu cho các chính sách của riêng mình!

Tự động hóa #

Có một số việc nhất định mà Tác vụ GitHub có thể thực hiện nhưng không thể thực hiện một cách an toàn, chẳng hạn như rời khỏi nhận xét về các vấn đề của bên thứ ba và yêu cầu kéo. Trong hầu hết mọi trường hợp, tốt hơn hết là bạn nên bỏ qua những điều này nhưng trong một số trường hợp, chúng là một phần có giá trị trong quy trình làm việc của chúng tôi.

Trong những trường hợp sau này, chúng tôi sử dụng astral-sh-bot để cách ly các tác vụ này bên ngoài GitHub một cách an toàn Hành động: GitHub gửi cho chúng tôi cùng một dữ liệu sự kiện mà GitHub Actions lẽ ra đã nhận được (vì GitHub Các hành động sử dụng cùng tải trọng webhook như Ứng dụng GitHub), nhưng có nhiều quyền kiểm soát hơn và nhiều trạng thái ẩn ít hơn.

Tuy nhiên, vẫn có một nhược điểm với Ứng dụng GitHub: một ứng dụng không loại bỏ bất kỳ thông tin nhạy cảm nào thông tin xác thực cần thiết cho một hoạt động, nó chỉ chuyển chúng vào một môi trường không trộn lẫn mã và dữ liệu có sức lan tỏa rộng rãi như GitHub Actions. Ví dụ: một ứng dụng sẽ không dễ bị ảnh hưởng bởi tiêm mẫu tấn công giống như một quy trình làm việc, nhưng vẫn có thể chứa SQLi, nhắc nhở tiêm hoặc các điểm yếu khác cho phép kẻ tấn công lạm dụng thông tin xác thực của ứng dụng. Do đó, điều cần thiết là phải coi việc phát triển Ứng dụng GitHub với tư duy bảo mật giống như bất kỳ ứng dụng nào khác phát triển phần mềm. Điều này cũng mở rộng sang mã không đáng tin cậy: việc sử dụng Ứng dụng GitHub không không làm được điều đó an toàn khi chạy mã không đáng tin cậy, điều đó chỉ khiến việc thực hiện điều đó trở nên khó khăn hơn một cách bất ngờ. Nếu quy trình của bạn cần để chạy mã không đáng tin cậy, họ phải sử dụng pull_request hoặc một trình kích hoạt "an toàn" khác không cung cấp mọi thông tin xác thực đặc quyền cho yêu cầu kéo của bên thứ ba.

Với tất cả những gì đã nói, chúng tôi nhận thấy rằng mẫu Ứng dụng GitHub hoạt động tốt với chúng tôi và chúng tôi khuyên bạn nên sử dụng mẫu đó cho những người bảo trì và dự án khác có nhu cầu tương tự. Nhược điểm chính của nó là ở dạng phức tạp: nó yêu cầu phát triển và lưu trữ Ứng dụng GitHub, thay vì viết một quy trình công việc GitHub sắp xếp cho bạn. Chúng tôi nhận thấy rằng các khung như Gidgethub tạo nên sự phát triển Quá trình xử lý Ứng dụng GitHub tương đối đơn giản, nhưng việc lưu trữ đó vẫn là một gánh nặng về mặt thời gian và chi phí.

Có một thực tế đáng tiếc là vẫn chưa có các tùy chọn Ứng dụng GitHub tuyệt vời dành cho một người và các dự án nguồn mở theo sở thích; chúng tôi hy vọng rằng những cải tiến về khả năng sử dụng trong không gian này có thể được dẫn dắt bởi công ty và dự án lớn hơn có các tài nguyên cần thiết để xử lý GitHub Actions' những thiếu sót của nền tảng.

Chúng tôi đề xuất hướng dẫn này của Mariatta như một phần giới thiệu hay về cách xây dựng Ứng dụng GitHub bằng Python. Chúng tôi cũng dự định mở nguồn astral-sh-bot trong tương lai.

Bảo mật bản phát hành #

Cho đến nay, chúng tôi đã đề cập đến các khía cạnh liên kết chặt chẽ với GitHub, với tư cách là máy chủ nguồn cho các công cụ của Astral. Nhưng nhiều người dùng cài đặt công cụ của chúng tôi thông qua các cơ chế khác, chẳng hạn như PyPI, HomebrewHình ảnh Docker. Các kênh phân phối này bổ sung thêm một “mắt xích” khác vào chuỗi cung ứng ẩn dụ, và yêu cầu xem xét riêng biệt:

  • Nếu có thể, chúng tôi sử dụng Xuất bản đáng tin cậy để xuất bản lên các cơ quan đăng ký (như PyPI, crates.ioNPM). Kỹ thuật này giúp loại bỏ sự cần thiết của thông tin đăng ký tồn tại lâu dài. cải thiện một trong những nguồn tiếp quản gói phổ biến nhất (thỏa hiệp thông tin xác thực trong CI/CD nền tảng).

  • Khi có thể (hiện tại chúng tôi đã phát hành hình ảnh nhị phân và hình ảnh Docker), chúng tôi tạo ra các dữ liệu dựa trên Sigstore chứng thực. Những chứng thực này thiết lập một liên kết có thể xác minh được bằng mật mã giữa tạo phẩm đã phát hành và quy trình làm việc tạo ra nó, từ đó cho phép người dùng xác minh rằng bản dựng uv, Ruff hoặc ty đến từ quá trình phát hành thực tế của chúng tôi. Bạn có thể xem gần đây của chúng tôi chứng thực cho uv làm ví dụ về điều này.1

  • Chúng tôi sử dụng tính năng bản phát hành bất biến của GitHub để ngăn việc sửa đổi hậu kỳ các bản dựng mà chúng tôi xuất bản trên GitHub. Điều này giải quyết một kỹ thuật xoay vòng của kẻ tấn công phổ biến đã được xuất bản trước đó các bản dựng được thay thế bằng các bản dựng độc hại. Một biến thể của kỹ thuật này đã được sử dụng trong thời gian gần đây Tấn công tầm thường, trong đó kẻ tấn công đẩy mạnh các thẻ trước đó để tạo ra các phiên bản bị xâm phạm trong số các hành động trivy-actionsetup-trivy.

  • Chúng tôi không sử dụng bộ nhớ đệm để cải thiện thời gian xây dựng trong quá trình phát hành, để ngăn chặn kẻ tấn công xâm phạm các bản dựng của chúng tôi thông qua cuộc tấn công đầu độc bộ nhớ đệm GitHub Actions.

  • Để giảm nguy cơ kẻ tấn công xuất bản phiên bản độc hại mới của các công cụ của chúng tôi, chúng tôi sử dụng nhiều biện pháp bảo vệ trong quy trình phát hành của chúng tôi:
    • Quy trình phát hành của chúng tôi bị cô lập trong môi trường triển khai GitHub chuyên dụng. Điều này có nghĩa các công việc không chạy trong môi trường phát hành (chẳng hạn như các bài kiểm tra và linters) không có truy cập vào bí mật phát hành của chúng tôi.

    • Để kích hoạt môi trường phát hành, công việc kích hoạt phải được ít nhất phê duyệt bởi một thành viên đặc quyền khác của tổ chức Astral. Điều này giảm thiểu rủi ro của một tài khoản lừa đảo hoặc bị xâm phạm có thể xuất bản một bản phát hành độc hại (hoặc lọc bản phát hành bí mật); kẻ tấn công cần phải xâm phạm ít nhất hai tài khoản riêng biệt, cả hai đều có 2FA mạnh.

      Trong các kho lưu trữ (như uv), nơi chúng tôi có số lượng lớn công việc phát hành, chúng tôi sử dụng một mã riêng biệt Môi trường release-gate để giải quyết vấn đề GitHub kích hoạt phê duyệt cho mọi công việc đó sử dụng môi trường phát hành. Điều này vẫn giữ nguyên yêu cầu phê duyệt của hai người, với một bước nhảy bổ sung: Ứng dụng GitHub nhỏ, có đặc quyền tối thiểu làm trung gian cho việc phê duyệt từ release-gate đến release thông qua quy tắc bảo vệ triển khai.

    • Cuối cùng, chúng tôi sử dụng tính năng bảo vệ thẻ ruleset để ngăn việc tạo thẻ của bản phát hành cho đến khi triển khai phát hành thành công. Điều này ngăn kẻ tấn công bỏ qua quá trình phát hành thông thường để tạo thẻ và phát hành trực tiếp.

  • Đối với người dùng cài đặt uv thông qua trình cài đặt độc lập của chúng tôi, chúng tôi thực thi tính toàn vẹn của trình cài đặt đã cài đặt nhị phân thông qua tổng kiểm tra được nhúng trực tiếp vào mã nguồn của trình cài đặt2.

Quy trình phát hành của chúng tôi cũng liên quan đến những thay đổi "bắt đầu", như cập nhật tài liệu công khai của chúng tôi, các tệp kê khai phiên bản và chính thức các móc nối trước cam kết. Đây là những hoạt động đặc quyền mà chúng tôi bảo vệ thông qua các tài khoản bot chuyên dụng và PAT chi tiết được cấp thông qua các tài khoản đó.

Trong tương lai, chúng tôi cũng đang xem xét thêm chức năng mã hóa bằng chứng chỉ nhà phát triển chính thức trên macOS và Windows.

Bảo mật phụ thuộc #

Cuối cùng nhưng không kém phần quan trọng là câu hỏi về sự phụ thuộc. Giống như hầu hết các phần mềm hiện đại, các công cụ của chúng tôi phụ thuộc vào hệ sinh thái gồm các phụ thuộc của bên thứ ba (cả trực tiếp và bắc cầu), mỗi phụ thuộc đều nằm trong một vị trí ngầm của sự tin cậy. Dưới đây là một số điều chúng tôi làm để đo lường và giảm thiểu ở thượng nguồn rủi ro:

  • Chúng tôi sử dụng các công cụ quản lý phần phụ thuộc như DependabotRenovate để duy trì các phần phụ thuộc của chúng tôi đã cập nhật, để thông báo cho chúng tôi khi các phần phụ thuộc của chúng tôi chứa các lỗ hổng đã biết.

  • Nói chung, chúng tôi tuyển dụng thời gian hồi chiêu kết hợp với những điều trên để tránh cập nhật các phần phụ thuộc ngay sau khi có bản phát hành mới, vì đây là lúc các phần phụ thuộc bị xâm phạm tạm thời bị ảnh hưởng nhiều nhất có khả năng ảnh hưởng đến chúng tôi.

    Cả Dependabot và Renovate đều hỗ trợ thời gian hồi chiêu và uv cũng có hỗ trợ tích hợp. Chúng tôi đã tìm thấy Cải tiến khả năng định cấu hình thời gian hồi chiêu trên cơ sở từng nhóm để trở nên đặc biệt hữu ích, vì nó cho phép chúng tôi giảm bớt yêu cầu thời gian hồi chiêu cho các phần phụ thuộc của chính chúng tôi (bên thứ nhất) trong khi vẫn giữ nó được áp dụng cho hầu hết các phần phụ thuộc của bên thứ ba.

  • Chúng tôi duy trì kết nối xã hội với nhiều cơ quan phụ thuộc thượng nguồn của mình và chúng tôi thực hiện cả hai hoạt động này thường xuyên và đóng góp an ninh với họ (bao gồm các bản sửa lỗi đối với CI/CD và quy trình phát hành của chính họ). Ví dụ: đây là đóng góp gần đây mà chúng tôi đã thực hiện cho apache/opendal-reqsign để giúp họ thiết lập lại giảm bảo mật CI/CD của họ.

  • Riêng biệt, chúng tôi duy trì kết nối xã hội với các dự án lân cận và các nhóm làm việc trong hệ sinh thái, bao gồm Cơ quan quản lý đóng gói PythonNhóm phản hồi bảo mật Python. Những kết nối này đã được chứng minh là vô giá trong việc chia sẻ thông tin, chẳng hạn như khi một báo cáo chống lại pip cũng ảnh hưởng đến uv (hoặc ngược lại) hoặc khi bản phát hành bảo mật cho CPython sẽ yêu cầu bản phát hành trong số python-build-standalone.

  • Chúng tôi thận trọng trong việc thêm các phần phụ thuộc mới và chúng tôi mong muốn loại bỏ phần phụ thuộc trong đó thiết thực và ít gây gián đoạn cho người dùng của chúng tôi. Trong các chu kỳ phát hành sắp tới, chúng tôi hy vọng sẽ loại bỏ một số phụ thuộc liên quan đến hỗ trợ cho các sơ đồ nén hiếm khi được sử dụng, như một phần của gói lớn hơn nỗ lực để phù hợp với các tiêu chuẩn đóng gói của Python.

  • Tổng quát hơn, chúng tôi cũng thận trọng về những gì phần phụ thuộc của chúng tôi mang lại: chúng tôi cố gắng tránh các phần phụ thuộc giới thiệu các đốm màu nhị phân và chúng tôi xem xét cẩn thận các tính năng của các phần phụ thuộc của mình để vô hiệu hóa chức năng mà chúng tôi không cần hoặc không mong muốn.

  • Cuối cùng, chúng tôi đóng góp tài chính (dưới hình thức Quỹ OSS) cho sự bền vững của các dự án mà chúng tôi phụ thuộc vào hoặc thúc đẩy toàn bộ hệ sinh thái OSS chuyển tiếp.

Suy nghĩ kết luận #

Bảo mật nguồn mở là một vấn đề khó khăn, một phần vì nó thực sự có nhiều vấn đề (một số vấn đề kỹ thuật, xã hội nào đó) giả dạng như một. Chúng tôi đã đề cập đến nhiều kỹ thuật chúng tôi sử dụng để giải quyết vấn đề này vấn đề, nhưng bài đăng này không có nghĩa là một danh sách đầy đủ. Đây cũng không phải là danh sách tĩnh: những kẻ tấn công là những người tham gia tích cực vào quá trình bảo mật và các biện pháp phòng vệ nhất thiết phải phát triển để đáp ứng kỹ thuật đang thay đổi của họ.

Với suy nghĩ đó, chúng tôi muốn nhắc lại một số điểm xứng đáng được đề cập ở trên chú ý:

  • Tôn trọng các giới hạn của CI/CD: việc làm này cực kỳ hấp dẫn mọi thứ đều có trong CI/CD, nhưng có một số điều mà CI/CD (và đặc biệt là Tác vụ GitHub) không thể thực hiện một cách an toàn. Đối với những điều này, tốt hơn hết là bạn nên loại bỏ chúng hoàn toàn hoặc cách ly chúng bên ngoài CI/CD bằng Ứng dụng GitHub hoặc tương tự.

    Như đã nói, điều quan trọng là không sửa quá mức và vứt bỏ hoàn toàn CI/CD: như đã đề cập ở trên, CI/CD là một phần quan trọng trong tình hình bảo mật của chúng tôi và có lẽ của bạn nữa! Thật không may rằng việc bảo mật các Hành động GitHub là rất khó khăn, nhưng chúng tôi cho rằng nỗ lực đó xứng đáng so với rủi ro về tốc độ và bảo mật sẽ xảy ra khi không sử dụng CI/CD được lưu trữ.

    Đặc biệt, chúng tôi thực sự khuyên bạn nên sử dụng CI/CD cho quy trình phát hành thay vì dựa vào máy của nhà phát triển cục bộ, đặc biệt khi các quy trình phát hành đó có thể được bảo mật với việc sử dụng sai- và các chương trình chứng thực chống tiết lộ như Nhà xuất bản đáng tin cậy.

  • Cô lập và loại bỏ thông tin xác thực tồn tại lâu dài: hình thức hậu thỏa hiệp phổ biến nhất lây lan là lạm dụng thông tin xác thực lâu dài. Bất cứ khi nào có thể, hãy loại bỏ những thông tin xác thực này hoàn toàn (ví dụ: với Trusted Publishing hoặc các cơ chế xác thực dựa trên OIDC khác).

    Trong trường hợp không thể loại bỏ, cách ly những thông tin xác thực này ở phạm vi nhỏ nhất có thể: đặt chúng trong các môi trường triển khai cụ thể với các yêu cầu kích hoạt bổ sung và chỉ có vấn đề thông tin xác thực với các quyền cần thiết tối thiểu để thực hiện nhiệm vụ được giao.

  • Tăng cường quy trình phát hành: nếu bạn đang sử dụng GitHub, hãy sử dụng môi trường triển khai, phê duyệt, gắn thẻ và các bộ quy tắc nhánh cũng như các bản phát hành bất biến để giảm mức độ tự do mà kẻ tấn công có được trong trường hợp chiếm đoạt tài khoản hoặc xâm phạm kho lưu trữ.

  • Duy trì nhận thức về sự phụ thuộc của bạn: duy trì nhận thức về sức khỏe tổng thể của bạn cây phụ thuộc là rất quan trọng để hiểu được hồ sơ rủi ro của chính bạn. Sử dụng cả dụng cụ và khuỷu tay bôi trơn để giữ an toàn cho các phần phụ thuộc của bạn, để giúp chúng duy trì quy trình của riêng mình và phần phụ thuộc cũng an toàn.

Cuối cùng, chúng tôi vẫn đang đánh giá nhiều kỹ thuật được đề cập ở trên và gần như chắc chắn sẽ điều chỉnh (và tăng cường) chúng trong những tuần và tháng tới khi chúng tôi tìm hiểu thêm về chúng những hạn chế và cách chúng tương tác với quá trình phát triển của chúng tôi. Tức là bài viết này đại diện cho một thời điểm, không phải là lời cuối cùng về cách chúng tôi nghĩ về bảo mật cho nguồn mở của mình công cụ.

Chú thích cuối trang #

  1. PyPI cho phép tải tệp lên kèm theo chứng thực, mỗi PEP 740. Tuy nhiên, chúng tôi hiện không tải lên chứng thực cho PyPI vì một số điểm không tương thích giữa việc triển khai Trusted của PyPI Xuất bản và danh tính chúng tôi sử dụng để chứng thực. Chúng tôi hy vọng giải quyết được những điều này sự không tương thích trong thời gian tới.

  2. Cần lưu ý rằng trình cài đặt được cung cấp từ cùng một máy chủ với chính các bản phát hành, vì vậy một người dùng thực hiện curl ... | bash trực tiếp không được hưởng lợi đáng kể từ tổng kiểm tra bên trong chính trình cài đặt. Tuy nhiên, tổng kiểm tra trong tập lệnh cài đặt có ích mang lại lợi ích cho những người dùng muốn nhà cung cấp tập lệnh cài đặt của chúng tôi ở nơi khác, ví dụ: vào quá trình xây dựng hoặc CI/CD của riêng họ.

Tác giả: vinhnx

#discussion