Task 19 [Day 14] Networking Dev(Insecure)Ops
Câu chuyện
McDev - người đứng đầu nhóm phát triển, gửi một email đáng báo động cho biết rằng họ không thể cập nhật ứng dụng web bên ngoài của công ty tổ chức lễ hội tốt nhất. Nếu không có bản cập nhật này, không ai có thể xem kế hoạch của Best Festival Company. Nhóm phát triển đã sử dụng máy chủ CI / CD để tự động đẩy các bản cập nhật lên máy chủ nhưng máy chủ CI / CD đã bị xâm phạm. Bạn có thể giúp họ lấy lại máy chủ của họ không?
Mục tiêu học tập
- Hiểu khái niệm CI / CD
- Tổng quan về rủi ro liên quan đến CI / CD
- Có hiểu biết cơ bản về vectơ khai thác CI / CD
CI / CD là gì?
CI / CD là hai thuật ngữ thường xuất hiện khi nói về phát triển phần mềm và DevOps. Định nghĩa của họ khá đơn giản.
CI: Tích hợp liên tục là quá trình trong đó mã nguồn phần mềm được lưu giữ trong kho lưu trữ trung tâm (chẳng hạn như GitHub). Tất cả các thay đổi được lưu trữ trong kho lưu trữ trung tâm này để tránh kết thúc với các phiên bản khác nhau của cùng một mã.
CD: Phân phối liên tục là bước sau (đôi khi không thể tách rời) của mô hình tích hợp liên tục trong đó mã được triển khai tự động cho môi trường thử nghiệm, tiền sản xuất hoặc sản xuất. CD đôi khi được sử dụng như một từ viết tắt của "Triển khai liên tục". Nếu bạn cảm thấy các điều khoản trên dường như không có giới hạn rõ ràng thì bạn đã đúng. CI, CD và CD khác đều là một phần của các phương pháp hay nhất của DevOps nhằm mục đích làm cho việc phân phối mã nhanh hơn và đáng tin cậy hơn.
CI / CD nên được coi là một tập hợp các thực hành được áp dụng để cho phép các nhóm phát triển thực hiện các thay đổi, kiểm tra mã của họ và triển khai ứng dụng một cách đáng tin cậy hơn.
Chúng ta nên coi CI / CD là một quy trình hoặc vòng lặp liên tục bao gồm các bước của quy trình phát triển phần mềm.
Rủi ro liên quan đến CI / CD
Phương pháp tích hợp CI / CD dường như là một cách hiệu quả để giảm thiểu rủi ro có thể xảy ra từ việc tổng hợp các thay đổi được thực hiện đối với mã theo cách thủ công, kiểm tra chúng theo cách thủ công và triển khai phiên bản cập nhật của ứng dụng theo cách thủ công. Tuy nhiên, một số rủi ro liên quan đến quy trình CI / CD cần được xem xét khi xử lý tích hợp như vậy. Là một người kiểm tra khả năng thâm nhập, một trong những mục tiêu của chúng tôi là phát hiện ra những điểm yếu trong quá trình tự động hóa. Những điều này có thể thay đổi từ quyền đối với tệp đến lỗi cấu hình được thực hiện khi cài đặt bất kỳ phần mềm tự động hóa CI / CD nào. Nhóm DevOps thường sử dụng phần mềm như Jenkins, GitLab, Bamboo, AWS CodePipeline, v.v., để tự động hóa các bước CI / CD được tóm tắt ở trên.
Những rủi ro chính liên quan đến tích hợp CI / CD được đề cập dưới đây:
- Bảo mật truy cập: Số lượng điểm tích hợp ngày càng tăng có thể gây khó khăn cho việc quản lý truy cập. Bất kỳ thành phần nào được tích hợp với quy trình có thể cần quyền truy cập một phần hoặc toàn bộ vào một thành phần khác. Trong trường hợp này, việc cho phép truy cập quá nhiều cũng có thể mở ra một con đường cho hoạt động độc hại.
- Quyền: Các thành phần được kết nối với nhau và thực hiện nhiệm vụ của chúng bằng tài khoản người dùng. Tương tự như bảo mật truy cập, quyền của người dùng cần được kiểm tra.
- Khóa và bí mật: Nhiều tích hợp được thực hiện bằng cách sử dụng khóa (khóa API, khóa ID, v.v.) hoặc bí mật. Những điều này cần được bảo mật. Nếu không, bất kỳ ai cũng có thể truy cập tài nguyên bằng phương pháp xác thực này.
- Bảo mật người dùng: Tài khoản người dùng là một vectơ tấn công thành công khác thường được tội phạm mạng sử dụng. Bất kỳ người dùng nào có quyền truy cập vào kho mã nguồn đều có thể bao gồm một thành phần độc hại trong cơ sở mã và có thể được đưa vào ứng dụng đã triển khai.
- Cấu hình mặc định: Một số nền tảng được biết là có thông tin xác thực và lỗ hổng bảo mật mặc định. Nếu thông tin đăng nhập mặc định không được thay đổi và được sử dụng trong quy trình CI / CD, điều này có thể dẫn đến sự xâm phạm hoàn toàn của cơ sở hạ tầng.
Grinch đã đưa phiên bản đường ống CI / CD của riêng mình vào vị trí. Anh ấy đã sử dụng các tập lệnh BASH và các công việc đã lên lịch để tự động hóa quy trình. Hãy đi sâu vào.
Truy cập MACHINE_IP từ trình duyệt của bạn sẽ cho thấy Grinch đang đợi chiến lợi phẩm, nhưng không phải ở đây.
Ở giai đoạn này, chúng tôi có thể chạy quét dirb để khám phá trang MACHINE_IP / admin, trang này có vẻ hứa hẹn hơn.
Nhìn vào mã nguồn, chúng ta thấy một điều thú vị. Có một iFrame đề cập đến trang ls.html. Trang này có vẻ gần đáng ngờ với đầu ra khi chạy lệnh lscom.
Kết nối với máy mục tiêu bằng quyền truy cập trong trình duyệt hoặc qua SSH bằng thông tin đăng nhập bên dưới:
tên người dùng: mcskidy
mật khẩu: Password1
Điều hướng đến thư mục / home / thegrinch / scripts và chạy lệnh ls sẽ cho thấy rằng hầu hết các tập lệnh trong thư mục này không thể truy cập được bởi người dùng McSkidy.
Nội dung của tập lệnh loot.sh cho chúng ta hiểu rõ hơn về tệp ls.html mà chúng ta đã đặt trước đó.
Mã rất đơn giản; nó chạy lệnh ls và in kết quả ra tệp ls.html. Grinch có thể duyệt trang từ bất kỳ đâu trong mạng để xem chiến lợi phẩm mà hắn tích lũy được.
Thông minh, Grinch này. Tuy nhiên, dường như có một vấn đề liên quan đến quyền của nỗ lực tích hợp liên tục của anh ấy. McSkidy có thể thay đổi nội dung của tệp loot.sh.
Thay đổi mã trong tệp để in nội dung của tệp / etc / shadow. Đây sẽ là bằng chứng thuyết phục rằng việc định cấu hình sai quyền này không chỉ tạo ra mối đe dọa cho quy trình CI mà còn có thể được sử dụng để nâng cao đặc quyền của chúng tôi. Nếu bạn muốn tìm hiểu thêm về các kỹ thuật nâng cấp đặc quyền, vui lòng truy cập phòng Nâng cấp Đặc quyền Linux của chúng tôi.
Cấu hình sai này có thể được sử dụng để đọc nội dung của các tập lệnh khác của Grinch.
Hãy xem tập lệnh check.sh bằng cách sử dụng lỗ hổng mà chúng tôi đã sử dụng để đọc tệp / etc / shadow.
Trong vòng vài phút, trang MACHINE_IP / admin sẽ được cập nhật để tiết lộ mã của tập lệnh check.sh.
Tập lệnh này kiểm tra sự tồn tại của tệp có tên nhắcme.txt trong thư mục loot. Nếu nó tìm thấy tệp, nó sẽ in mật khẩu của Grinch vào một tệp HTML sẽ xuất hiện trong MACHINE_IP / pass.html
Trí nhớ của Grinch không còn như xưa.
Ngoài ra, McSkidy có thể tạo một tệp có tên nhắcme.txt trong thư mục / home / thegrinch / loot và đợi quá trình tự động hóa hoạt động kỳ diệu của nó.
Bạn có thể trả lời câu hỏi 4 bằng cách sử dụng véc tơ này không?
Bài học kinh nghiệm
Mô phỏng CI / CD này nhằm giúp giới thiệu các loại lỗ hổng chính thường thấy trong tự động hóa CI / CD. Một ứng dụng Jenkins được cài đặt cục bộ có thể có một thành phần chưa được vá được triển khai vì nhiều lý do hoạt động khác nhau. Tuy nhiên, hiếm khi lỗ hổng nghiêm trọng vẫn chưa được vá trong một thời gian dài trên cơ sở hạ tầng do nhà cung cấp dịch vụ đám mây như Amazon, Azure hoặc Google quản lý. Đây là lý do chính mà bạn sẽ thường xuyên thấy các lỗ hổng là kết quả của việc quản lý truy cập không đúng cách, đặc quyền tài khoản lỏng lẻo hoặc lỗi logic.
Trong ví dụ trên, chúng ta đã thấy:
- Quyền đối với thư mục quá lỏng lẻo: Người dùng McSkidy có đặc quyền thấp có thể ghi vào thư mục "loot" của Grinch.
- Quyền tệp bị định cấu hình sai: Người dùng McSkidy có đặc quyền thấp có thể thay đổi nội dung của tập lệnh loot.sh.
- Bảo vệ khóa không đúng cách: Trong ví dụ này, mật khẩu của Grinch có thể được coi là khóa bí mật được sử dụng để kết nối các thành phần CI / CD. Nếu khóa có thể được đọc từ một tệp cấu hình, kẻ tấn công có thể sử dụng lại khóa này để có lợi cho chúng.
- Cài đặt không an toàn: cronjobs thường xuyên chạy các tác vụ mà không có bất kỳ kiểm soát nào đối với các thay đổi trái phép. Như bạn có thể đã đọc trong tin tức ngành, sự thiếu kiểm soát tương tự đã dẫn đến việc phát hành phần mềm được kiểm duyệt lại.
How many scripts do you see in the /home/thegrinch/scripts folder?
Hiện có lỗi này là lấy được thông tin thư mục hệ thống (RFI)
Theo hướng dẫn ở trên chúng ta cần SSH với thông tin sau:
tên người dùng: mcskidy
mật khẩu: Password1
Sau đó mình vào đường dẫn /home/thegrinch/scripts thực hiện lệnh ls để xem tệp và thư mục
Mình sẽ có đáp án cho câu hỏi số 2.
What are the five characters following $6$G in pepper's password hash?
Với câu hỏi này và dự vào gợi ý từ website nó bảo đợi trả về từ LOOT vậy có nghĩ là tệp loot.sh sẽ thực thi nhiệm vụ lấy thông tin từ hệ thống
Mình mở tệp đó đọc nội dung
Ở đây thấy lệnh bash shell thực hiện gọi đến tệp loot bằng lệnh ls và xuất kết quả cho tệp ls.html hiển thị cho website.
Mình thưc hiện sửa đổi một chút nội dung tệp loot.sh để gọi đến tệp shadow để lấy đáp án cho câu hỏi số 3
Sau đó lưu lại và tải lại website chúng ta thu được kết quả cho câu số 3
0 Comments