Việc chèn các biến môi trường vào quá trình xây dựng là một standard thực hành trong thời hiện đại CI/CD pipelineCác nhóm thường chèn các biến môi trường vào quy trình xây dựng để truyền các thông tin bí mật, mã thông báo và cấu hình thời gian chạy vào bản dựng mà không cần mã hóa cứng các giá trị. Thoạt nhìn, đây có vẻ là một mô hình đơn giản và an toàn.
Tuy nhiên, trên thực tế, đây thường trở thành một trong những rủi ro bị đánh giá thấp nhất trong chuỗi cung ứng phần mềm.
Bởi vì một khi các nhóm đưa các biến môi trường vào quy trình xây dựng, các giá trị đó sẽ không còn được cô lập nữa. Chúng trở nên có thể truy cập được bởi mọi thứ chạy bên trong đó. pipelineCác tập lệnh xây dựng, công cụ dòng lệnh, các hành động của bên thứ ba và thậm chí cả các phần phụ thuộc đều có thể đọc chúng.
Đây là lúc mọi thứ bắt đầu trở nên tồi tệ.
Trong hướng dẫn này, chúng ta sẽ cùng tìm hiểu cách các nhóm tích hợp biến môi trường vào quy trình xây dựng trong thực tế. pipelinecác lỗi rò rỉ thực sự xảy ra ở đâu và làm thế nào để bảo mật quy trình xây dựng mà không làm chậm quá trình phát triển.
Việc chèn các biến môi trường vào quy trình xây dựng có nghĩa là gì?
Về bản chất, việc chèn biến môi trường có nghĩa là truyền các giá trị vào một... pipeline trong quá trình chạy để các tác vụ có thể truy cập chúng trong khi thực thi.
Các giá trị này thường bao gồm khóa API, thông tin đăng nhập cơ sở dữ liệu, mã thông báo hoặc cấu hình dành riêng cho môi trường. Thay vì lưu trữ chúng trực tiếp trong mã, CI/CD Hệ thống sẽ tải chúng một cách động khi quá trình biên dịch bắt đầu.
Điều này giải quyết một vấn đề thực sự. Nó giúp mã nguồn sạch sẽ, tránh trùng lặp và cho phép thực hiện điều tương tự. pipeline Có thể chạy trên các môi trường dàn dựng, thử nghiệm và sản xuất.
Tuy nhiên, mô hình này dựa trên một giả định không còn đúng nữa: rằng môi trường xây dựng được kiểm soát và có thể dự đoán được.
hiện đại pipelineCác phương pháp này không phải là đơn giản. Chúng bao gồm nhiều bước, tích hợp bên ngoài và các phụ thuộc thực thi mã một cách động. Do đó, một khi biến được tiêm vào, nó không còn chỉ là cấu hình nữa. Nó trở thành một phần của ngữ cảnh thực thi.
Các biến môi trường bị rò rỉ ở đâu trong quá trình biên dịch?
Hầu hết các vụ rò rỉ thông tin không xảy ra vì ai đó cố tình tiết lộ bí mật. Chúng xảy ra vì... pipelineCác hệ thống hoạt động theo những cách mà các nhà phát triển không thể lường trước hết.
Ví dụ, một nhà phát triển có thể bật chế độ ghi nhật ký chi tiết để gỡ lỗi quá trình biên dịch không thành công. Một công cụ dòng lệnh có thể in các biến môi trường như một phần của đầu ra. Một thành phần phụ thuộc có thể truy cập các biến tiến trình một cách âm thầm như một phần của quá trình thực thi.
Không hành động nào trong số này trông đáng ngờ khi đứng riêng lẻ. Tuy nhiên, khi kết hợp lại, chúng tạo ra nhiều con đường rò rỉ thông tin.
Những bí mật có thể bị lộ ra ở:
- nhật ký xây dựng được lưu trữ và lập chỉ mục
- Thông tin gỡ lỗi được chia sẻ giữa các nhóm.
- các hành động CI của bên thứ ba chạy mã bên ngoài
- Các phần phụ thuộc được thực thi trong quá trình cài đặt hoặc thời gian chạy
- các hiện vật tạm thời được tạo ra trong quá trình xây dựng
Một khi thông tin bí mật xuất hiện trong nhật ký hệ thống, nó hiếm khi được giữ kín. Nhật ký được sao chép, lưu trữ và bảo quản trên nhiều hệ thống khác nhau. Tại thời điểm đó, mức độ rò rỉ đã vượt xa phạm vi ban đầu. pipeline.
Đây là lý do tại sao việc rò rỉ biến môi trường thường được phát hiện muộn, và sau khi thiệt hại đã xảy ra.
Vì sao các nhóm lại chèn biến môi trường vào quy trình xây dựng?
Bất chấp những rủi ro này, các nhóm vẫn phụ thuộc rất nhiều vào việc đưa các biến môi trường vào. Và điều đó hoàn toàn có lý.
Nó cho phép pipelineĐể duy trì tính linh hoạt. Một quy trình làm việc duy nhất có thể thích ứng với các môi trường khác nhau, xác thực với nhiều dịch vụ và thay đổi hành vi một cách linh hoạt mà không cần sửa đổi mã.
Trong môi trường DevOps thay đổi nhanh chóng, tính linh hoạt này là rất cần thiết. Tuy nhiên, tính linh hoạt luôn đi kèm với sự đánh đổi. Môi trường càng năng động thì càng khó đạt được sự linh hoạt. pipeline Càng nhiều yếu tố tích hợp, việc kiểm soát những gì xảy ra bên trong càng trở nên khó khăn hơn. Mỗi bước bổ sung, mỗi sự tích hợp hay mỗi sự phụ thuộc đều làm tăng số lượng nơi có thể truy cập dữ liệu nhạy cảm.
Do đó, việc chèn biến môi trường chuyển từ một chi tiết cấu hình đơn thuần thành một vấn đề an ninh.
Những rủi ro thường gặp khi chèn biến môi trường vào quy trình xây dựng
Những rủi ro này không chỉ là lý thuyết. Chúng hiện hữu trong thực tế. pipelines mỗi ngày.
Bí mật bị rò rỉ vào nhật ký hệ thống.
Nhật ký là một trong số đó. các nguồn tiếp xúc phổ biến nhấtCác cờ gỡ lỗi, công cụ dòng lệnh và dấu vết ngăn xếp thường tiết lộ các giá trị nhạy cảm mà các nhà phát triển không hề hay biết.
Một khi bị lộ ra, những giá trị đó sẽ lan truyền nhanh chóng khắp các hệ thống.
Quyền truy cập quá dễ dãi
nhiều pipelineViệc này khiến tất cả các biến số đều bị phơi bày cho tất cả các công việc. Điều này tạo ra rủi ro không cần thiết.
Nếu một bước nào đó bị xâm phạm, hệ thống có thể truy cập vào các thông tin đăng nhập mà nó thực sự không cần.
Lạm dụng sự phụ thuộc và hành vi
hiện đại pipelineNó phụ thuộc rất nhiều vào các công cụ và tích hợp của bên thứ ba. Các thành phần này hoạt động trong cùng một môi trường với các thông tin bí mật của bạn.
Nếu một trong số chúng hoạt động với mục đích xấu, nó có thể truy cập vào các biến được chèn vào một cách âm thầm.
Theo OWASPCác cuộc tấn công chuỗi cung ứng thường khai thác các thành phần đáng tin cậy trong quy trình xây dựng. Các biến môi trường thường trở thành mục tiêu dễ bị tấn công nhất.
Các bí mật dự phòng trong mã
Khi quá trình biên dịch thất bại do thiếu biến, các nhóm đôi khi thêm các giá trị dự phòng để đảm bảo quá trình vẫn thành công. pipelineđang chạy.
Theo thời gian, những giá trị này trở nên commitđược cài đặt hoặc triển khai, tạo ra rủi ro lâu dài.
Các phương pháp tốt nhất để chèn biến môi trường vào quy trình xây dựng một cách an toàn
| Phân loại | Thực hành tốt nhất | Tại sao nó quan trọng |
|---|---|---|
| Lưu trữ bí mật | Sử dụng kho lưu trữ hoặc trình quản lý bí mật CI. | Ngăn chặn việc lộ thông tin trong mã nguồn. |
| Kiểm soát truy cập | Giới hạn quyền truy cập cho mỗi công việc | Giảm bề mặt tấn công |
| Logging | Che giấu các giá trị nhạy cảm | Ngăn chặn rò rỉ |
| Phạm vi & thời gian sử dụng | Sử dụng thông tin xác thực có thời hạn ngắn | Giới hạn bán kính vụ nổ |
| THẨM ĐỊNH | Quá trình biên dịch sẽ thất bại nếu thiếu các biến. | Tránh các phương án dự phòng không an toàn |
Tại sao nhiều CI/CD Công cụ bảo mật Miss Env Var Leaks
Hầu hết các công cụ bảo mật tập trung vào việc quét mã hoặc các thư viện phụ thuộc sau khi quá trình biên dịch hoàn tất.
Tuy nhiên, hiện tượng rò rỉ biến môi trường xảy ra trong quá trình thực thi.
A pipeline Hệ thống có thể chèn thông tin bí mật một cách chính xác nhưng vẫn để lộ chúng thông qua nhật ký hoặc hành vi trong quá trình thực thi. Đến khi trình quét phát hiện ra vấn đề, thông tin bí mật có thể đã bị xâm phạm.
Điều này tạo ra khoảng cách giữa việc phát hiện và phòng ngừa.
Các nhóm cần có các cơ chế điều khiển hoạt động đồng thời. pipeline vẫn đang chạy, chứ không phải sau khi nó kết thúc.
Cách chúng tôi đề xuất bảo mật việc tiêm biến môi trường
Trên thực tế, việc bảo vệ hiệu quả phụ thuộc vào một vài nguyên tắc nhất quán.
Lưu trữ bí mật bên ngoài pipelineChỉ tiêm chúng vào lúc chạy chương trình. Giới hạn quyền truy cập ở phạm vi tối thiểu cần thiết. Sử dụng thông tin xác thực có thời hạn ngắn bất cứ khi nào có thể.
Đồng thời, hãy theo dõi cách thức... pipelineViệc truy cập các giá trị nhạy cảm thường gây ra rủi ro. Các kiểu truy cập bất thường thường cho thấy nguy cơ trước khi rò rỉ trở nên rõ ràng.
Cách tiếp cận này chuyển đổi an ninh từ việc phát hiện phản ứng sang kiểm soát chủ động.
Xygeni giúp bảo vệ như thế nào? CI/CD Tiêm bí mật
Thay vì chỉ dựa vào việc quét sau khi biên dịch, Xygeni phân tích cách thức... pipelineCác tiến trình sử dụng biến môi trường trong quá trình chạy. Điều này bao gồm cách các bí mật được truyền giữa các tác vụ, cách các bước xây dựng truy cập chúng và cách các phần phụ thuộc tương tác với môi trường thực thi.
Ví dụ, Xygeni có thể phát hiện khi nào một pipeline Việc để lộ các biến quá rộng rãi, khi một bước nào đó có nguy cơ in các giá trị nhạy cảm vào nhật ký, hoặc khi một thành phần phụ thuộc cố gắng truy cập thông tin xác thực một cách bất ngờ.
Cùng một lúc, guardrails thực thi chính sách trực tiếp trong pipelineCác nhóm có thể chặn các bản dựng không an toàn, hạn chế quyền truy cập bí mật vào các tác vụ cụ thể và ngăn chặn các cấu hình rủi ro trước khi chúng được đưa vào sản xuất.
Bởi vì điều này xảy ra bên trong CI/CD Với quy trình làm việc này, các nhà phát triển không cần phải thay đổi cách làm việc của họ. Bảo mật trở thành một phần của quy trình. pipelineKhông phải là một bước riêng biệt.
Kết quả là, các nhóm có thể nắm rõ cách thức các bí mật được sử dụng, kiểm soát cách chúng bị lộ và giảm nguy cơ rò rỉ mà không làm chậm quá trình triển khai.
.
Tuy nhiên, điều này cũng tiềm ẩn một lớp rủi ro thường không được chú ý đến.
Thách thức không phải là có nên sử dụng biến môi trường hay không, mà là làm thế nào để kiểm soát việc chúng được sử dụng trong quá trình thực thi.
Trong môi trường DevOps hiện đại, việc ngăn chặn rò rỉ trong quá trình xây dựng quan trọng hơn nhiều so với việc phát hiện chúng sau đó.




