Bối cảnh và vấn đề nghiên cứu

Ngành công nghệ phần mềm trong nhiều thập kỷ qua liên tục đối mặt với áp lực rút ngắn chu kỳ phát triển và nâng cao chất lượng sản phẩm nhằm đáp ứng biến động của thị trường. Mô hình truyền thống dạng thác nước (Waterfall) dần bộc lộ sự chậm trễ và tỷ lệ dự án thất bại cao do tính chất tiếp cận tuần tự, thiếu linh hoạt. Phương pháp Agile và sau đó là văn hóa DevOps ra đời nhằm thu hẹp khoảng cách giữa đội ngũ phát triển (Development) và đội ngũ vận hành (Operations). DevOps đẩy mạnh tốc độ phân phối thông qua tự động hóa chu trình tích hợp liên tục (CI) và triển khai liên tục (CD). Tuy nhiên, chu trình DevOps thông thường thiếu vắng sự tích hợp của các cơ chế an toàn thông tin tại từng khâu, dẫn đến rủi ro lộ lọt lỗ hổng bảo mật khi ứng dụng bước vào môi trường sản xuất.

Chi phí xử lý sự cố an ninh sau phát hành thường rất tốn kém về nhân lực, tài chính và làm suy giảm niềm tin từ người dùng. Nhằm giải quyết điểm nghẽn này, mô hình DevSecOps xuất hiện với mục tiêu đưa bảo mật thành thành phần cốt lõi trong suốt vòng đời phát triển phần mềm (SDLC), chuyển dịch các hoạt động kiểm tra an toàn thông tin sang giai đoạn sớm hơn (Shift-Left). Đề tài khóa luận được thực hiện nhằm giải quyết các mục tiêu cụ thể sau:

  1. Nghiên cứu mô hình "DevOps – DevSecOps", đồng thời tìm hiểu các công nghệ, công cụ dựa trên nền tảng mã nguồn mở tương ứng với từng thành phần trong mô hình (tích hợp liên tục, triển khai liên tục, kiểm thử bảo mật, giám sát vận hành).
  2. Thiết kế và triển khai hệ thống phát triển phần mềm tự động hóa theo mô hình DevOps.
  3. Phân tích và tích hợp các giải pháp an toàn thông tin để gia tăng độ an toàn cho toàn bộ hệ thống.
  4. Đánh giá hệ thống thực nghiệm dựa trên các tiêu chí ưu điểm, nhược điểm và khả năng áp dụng đối với các doanh nghiệp vừa và nhỏ.

Đối tượng nghiên cứu của khóa luận bao gồm: mô hình DevOps, DevSecOps; các công cụ phục vụ quá trình tích hợp liên tục (CI), triển khai liên tục (CD), giám sát hệ thống (monitoring); cùng các công cụ kiểm thử được sử dụng để kiểm tra tính bảo mật của ứng dụng.

Phạm vi nghiên cứu tập trung vào việc xây dựng và triển khai mô hình dựa trên các nền tảng mã nguồn mở, có khả năng triển khai trên các môi trường ảo hóa (máy ảo - VM, container), đồng thời bảo đảm tính khả thi khi ứng dụng vào quy trình sản xuất phần mềm thực tế của doanh nghiệp. Thời gian thực hiện đề tài kéo dài từ ngày 01/03/2022 đến ngày 12/06/2022 tại Trường Đại học Công nghệ Thông tin – Đại học Quốc gia Thành phố Hồ Chí Minh.

Cơ sở lý thuyết và phương pháp

Khóa luận thiết lập nền tảng lý luận dựa trên quá trình tiến hóa của các phương pháp phát triển phần mềm và kỹ thuật an toàn thông tin:

  • Các mô hình phát triển phần mềm: Mô hình Thác nước (Waterfall model do Winston W. Royce đề xuất năm 1970) với các giai đoạn tuần tự; phương pháp linh hoạt Agile (theo Tuyên ngôn Agile năm 2001, ưu tiên làm hài lòng khách hàng qua phân phối phần mềm sớm và liên tục); quy trình Scrum với các chu kỳ Sprint cố định.
  • Mô hình DevOps và văn hóa cộng tác: Lịch sử hình thành từ các hội nghị Agile năm 2008 và chuỗi sự kiện DevOpsDays năm 2009; các giai đoạn cấu thành gồm Lập kế hoạch liên tục (Continuous Planning), Tích hợp liên tục (Continuous Integration), Phân phối liên tục (Continuous Delivery), Triển khai liên tục (Continuous Deployment), Kiểm thử liên tục (Continuous Testing), Giám sát liên tục (Continuous Monitoring), cùng Phản hồi và tối ưu hóa liên tục (Continuous Feedback and Optimization).
  • Hệ thống quản lý phiên bản mã nguồn (VCS): So sánh giữa hệ thống tập trung (Centralized Version Control - CVC) và hệ thống phân tán (Distributed Version Control - DVC như Git), nhấn mạnh việc lưu trữ tập trung, lưu vết thay đổi và hỗ trợ làm việc nhóm.
  • Công nghệ ảo hóa và điều phối container: Phân biệt cơ chế ảo hóa truyền thống dùng Hypervisor với công nghệ đóng gói container (chia sẻ kernel hệ điều hành host, tiết kiệm tài nguyên) và nhu cầu điều phối container trên diện rộng.
  • Bảo mật trong chu trình DevSecOps: Các kỹ thuật kiểm tra an toàn gồm phân tích mã nguồn tĩnh (Static Application Security Testing - SAST), kiểm tra bảo mật động (Dynamic Application Security Testing - DAST), quản lý cấu hình hạ tầng dưới dạng mã (Infrastructure as Code - IaC), và quản trị thông tin nhạy cảm (secrets).

Phương pháp nghiên cứu kết hợp giữa nghiên cứu tài liệu học thuật (tham khảo tài liệu của Sarker, Abdel-Nabi, Myrbakken & Colomo-Palacios...) với phương pháp thực nghiệm kỹ thuật. Tác giả tiến hành thiết lập hạ tầng thực tế trên nền tảng đám mây Microsoft Azure, cấu hình tự động hóa toàn bộ đường ống dẫn (pipeline) và tạo lập các kịch bản kiểm thử nhằm đo lường khả năng chặn bắt lỗi bảo mật của từng công cụ tích hợp. Dữ liệu thực nghiệm được thu thập từ log hệ thống, báo cáo phân tích mã nguồn và nhật ký quét gói phần mềm của dự án ứng dụng web thử nghiệm flask-docker.

Thiết kế và triển khai hệ thống

Hệ thống được thiết kế theo cấu trúc module hóa, kết hợp đồng bộ các giải pháp mã nguồn mở và nền tảng điều phối container nhằm tạo ra một chu trình DevSecOps tự động hóa khép kín:

Phân hệ chức năng Công nghệ / Công cụ lựa chọn Vai trò trong chu trình DevSecOps
Hạ tầng dưới dạng mã (IaC) Terraform, Ansible Tự động khởi tạo máy ảo, mạng và cụm Kubernetes trên Azure Cloud; cấu hình dịch vụ trên các máy chủ
Quản lý thông tin nhạy cảm HashiCorp Vault Lưu trữ, bảo vệ và phân phối tập trung mật khẩu, token, private key cho chu trình CI/CD
Quản lý phiên bản mã nguồn GitLab Server Lưu trữ kho mã nguồn tập trung, quản lý phân quyền và kích hoạt Webhook trigger khi có commit mới
Tự động hóa CI/CD Jenkins (Master - Slave) Điều phối thực thi các stage trong pipeline: kiểm tra mã, build image, quét bảo mật, deploy
Kiểm tra bảo mật mã nguồn (SAST) SonarQube Quét mã nguồn tự động, phát hiện bug, lỗ hổng an toàn và điểm yếu chất lượng mã
Quản lý kho gói (Artifact) Nexus Repository Manager Lưu trữ các gói build, thư viện dependencies và Docker Image an toàn
Kiểm tra bảo mật Image CloudGuard ShiftLeft Quét các lỗ hổng bảo mật và quy tắc tuân thủ an toàn có trong Docker Image trước khi phát hành
Điều phối ứng dụng Kubernetes (K8s), Helm Quản lý vòng đời container, triển khai ứng dụng tự động thông qua các Helm Chart
Tường lửa ứng dụng web (WAF) Nginx ModSecurity Đứng trước Web Server, kiểm soát lưu lượng HTTP/HTTPS và ngăn chặn các cuộc tấn công web
Giám sát hệ thống Prometheus, Grafana Thu thập số liệu vận hành của cụm máy chủ và container, trực quan hóa trạng thái trên dashboard

Luồng xử lý của hệ thống bắt đầu khi lập trình viên thực hiện thay đổi và commit/push mã nguồn lên dự án flask-docker tại GitLab. GitLab gửi tín hiệu Webhook kích hoạt đường ống CI/CD trên Jenkins Master. Jenkins Master ủy quyền tác vụ cho Jenkins Slave Node để kéo mã nguồn về và gọi SonarQube phân tích tĩnh. Nếu mã nguồn không vượt qua quy chuẩn an toàn, pipeline sẽ tạm dừng để lập trình viên xử lý. Khi mã nguồn hợp lệ, hệ thống tiến hành đóng gói Docker Image và kích hoạt công cụ CloudGuard ShiftLeft quét toàn bộ image nhằm tìm kiếm các thư viện lỗi thời hoặc lỗ hổng bảo mật đã biết.

Image đạt yêu cầu được đẩy lên lưu trữ tại Nexus Repository. Tiếp đó, Jenkins sử dụng Helm để triển khai container lên cụm Kubernetes Cluster đã được dựng sẵn bằng Terraform trên Azure. Ứng dụng web được công khai ra ngoài thông qua Nginx Server có tích hợp module tường lửa ModSecurity để lọc các gói tin độc hại. Toàn bộ thông tin xác thực, token truy cập giữa Jenkins, GitLab, SonarQube và Kubernetes đều được trích xuất an toàn từ HashiCorp Vault, đồng thời hệ thống được theo dõi liên tục bởi Prometheus và Grafana.

Nội dung chính theo từng chương

Chương 1: Mở đầu

Chương này phác thảo tổng quan bối cảnh phát triển phần mềm, nêu bật sự chuyển dịch từ Waterfall sang Agile và DevOps, từ đó chỉ ra lỗ hổng bảo mật cố hữu khi thiếu vắng kiểm soát an toàn thông tin. Tác giả xác định 4 mục tiêu nghiên cứu cụ thể, xác lập đối tượng nghiên cứu xoay quanh mô hình DevSecOps và hệ sinh thái công cụ hỗ trợ, đồng thời định rõ phạm vi ứng dụng mã nguồn mở trên nền tảng ảo hóa cho doanh nghiệp vừa và nhỏ.

Chương 2: Cơ sở lý thuyết

Nội dung chương 2 hệ thống hóa kiến thức nền tảng:

  • So sánh các mô hình quy trình phần mềm (Waterfall, Agile, Scrum).
  • Định nghĩa DevOps, phân tích lịch sử ra đời và các giai đoạn triển khai từ Continuous Planning, CI, CD, Continuous Testing đến Continuous Monitoring.
  • Trình bày hệ thống quản lý mã nguồn (CVC và DVC), nêu bật ưu thế của Git trong làm việc nhóm và theo dõi lịch sử chỉnh sửa.
  • Khái niệm ảo hóa và containerization, phân tích ưu điểm tiết kiệm tài nguyên của container so với máy ảo thông qua việc dùng chung kernel hệ điều hành.
  • Khái niệm DevSecOps, các nguyên tắc thực hành cốt lõi, vai trò của SAST, DAST, IaC và cơ chế bảo vệ secrets trong suốt vòng đời phần mềm.

Chương 3: Phân tích và thiết kế hệ thống

Chương 3 tập trung mô tả chi tiết kiến trúc tổng thể và luồng xử lý của chu trình CI/CD. Tác giả phân rã hệ thống thành từng phân hệ chuyên trách:

  • Triển khai hạ tầng dưới dạng mã với Terraform và Ansible.
  • Quản trị bảo mật thông tin nhạy cảm bằng HashiCorp Vault.
  • Quản lý kho mã nguồn trên GitLab, kết nối Webhook tự động với máy chủ Jenkins.
  • Thiết lập kho lưu trữ Nexus Repository Manager.
  • Cấu hình môi trường triển khai Kubernetes kết hợp công cụ đóng gói Helm.
  • Tích hợp các giải pháp bảo mật nhiều lớp gồm SonarQube, CloudGuard ShiftLeft và tường lửa Nginx ModSecurity.
  • Thiết lập kiến trúc giám sát trạng thái với sự phối hợp giữa Prometheus và Grafana.

Chương 4: Triển khai hệ thống và đánh giá kết quả

Chương này ghi lại toàn bộ tiến trình hiện thực hóa mô hình trên môi trường Azure Cloud:

  • Thông tin phần cứng máy chủ và cấu hình các máy ảo phục vụ Vault Server, Nginx Server, Jenkins Server, GitLab Server, SonarQube Server và Nexus Server.
  • Cấu hình DNS, gắn địa chỉ IP của các máy chủ và ứng dụng web vào tên miền tương ứng.
  • Viết kịch bản Terraform (terraform init, terraform plan, terraform apply) và Ansible để tự động khởi tạo hạ tầng và cụm Kubernetes.
  • Tạo kho mã nguồn cho dự án thử nghiệm flask-docker trên GitLab, cấu hình Blob Store và Repository trên Nexus, cài đặt plugin và phân quyền credentials trên Jenkins.
  • Thiết lập Jenkins Pipeline với nhiều stage kế tiếp nhau.
  • Triển khai 3 kịch bản thử nghiệm thực tế: Kịch bản 1 thử nghiệm vai trò của SonarQube trong phát hiện lỗi mã nguồn; Kịch bản 2 đánh giá khả năng rà quét bảo mật Docker Image của CloudGuard ShiftLeft; Kịch bản 3 kiểm tra năng lực phòng thủ của Nginx ModSecurity trước các cuộc tấn công web.

Chương 5: Kết luận và hướng phát triển

Chương cuối cùng tổng kết các kết quả kỹ thuật đã đạt được trong quá trình nghiên cứu, chỉ rõ những đóng góp về mặt giải pháp công nghệ mở cho quy trình DevSecOps, đồng thời đề ra các định hướng hoàn thiện hệ thống trong giai đoạn tiếp theo.

Kết quả và đóng góp

Khóa luận đã triển khai thành công một hệ sinh thái DevSecOps tự động hóa dựa hoàn toàn trên các nền tảng công nghệ mã nguồn mở và dịch vụ đám mây Azure, được kiểm chứng qua 3 kịch bản thực nghiệm:

  • Kịch bản 1 (Kiểm soát mã nguồn bằng SonarQube): Khi lập trình viên commit mã nguồn dự án flask-docker, pipeline tự động kích hoạt stage quét SAST. SonarQube phân tích toàn bộ source code, chỉ ra chi tiết từng bug, điểm yếu bảo mật trên dashboard và cung cấp hướng dẫn khắc phục. Sau khi lập trình viên chỉnh sửa mã nguồn theo khuyến nghị và commit lại, pipeline tự động chạy lại và vượt qua khâu kiểm tra.
  • Kịch bản 2 (Quét bảo mật container image với CloudGuard ShiftLeft): Tại stage "ShiftLeft Image Scan", công cụ đã kiểm tra toàn diện image được đóng gói từ mã nguồn. Hệ thống phát hiện chi tiết các lỗ hổng (vulnerabilities), đánh giá mức độ vi phạm theo từng rule bảo mật và xuất bảng báo cáo (report) trực quan trên dashboard, ngăn chặn kịp thời việc đưa các image tiềm ẩn rủi ro lên môi trường chạy.
  • Kịch bản 3 (Phòng thủ máy chủ web với Nginx ModSecurity): Hệ thống tiến hành gửi các yêu cầu HTTP thông thường và các yêu cầu chứa mã độc tấn công Web Server. Kết quả thực nghiệm cho thấy, khi kích hoạt chế độ ModSecurity, máy chủ Nginx hoạt động chính xác như một Web Application Firewall (WAF), nhận diện và ngăn chặn thành công các payload độc hại, bảo vệ an toàn cho ứng dụng web chạy trên cụm Kubernetes.

Đóng góp chính của đề tài là việc tích hợp thành công các công cụ an toàn thông tin chuyên dụng vào từng khâu của quy trình CI/CD truyền thống, chứng minh tính khả thi của giải pháp DevSecOps không phụ thuộc vào các phần mềm thương mại đắt đỏ. Khóa luận cung cấp một mô hình tham chiếu có tính ứng dụng thực tế cao cho các doanh nghiệp vừa và nhỏ có nhu cầu tối ưu hóa năng suất phát triển mà vẫn đảm bảo tính an toàn cho hệ thống.

Hạn chế và hướng nghiên cứu tiếp

Khóa luận vẫn còn một số hạn chế nhất định xuất phát từ phạm vi và điều kiện thực nghiệm:

  • Ứng dụng thử nghiệm trong khóa luận mới dừng lại ở dự án mẫu flask-docker, chưa trải nghiệm trên các hệ thống microservices đa ngôn ngữ phức tạp.
  • Việc chèn thêm nhiều công đoạn quét bảo mật chuyên sâu (SAST, Image Scan) làm gia tăng thời gian thực thi của đường ống CI/CD, đòi hỏi phải cân đối giữa tốc độ release và độ phủ kiểm tra.
  • Tài nguyên hạ tầng phục vụ thử nghiệm trên nền tảng đám mây Azure còn chịu giới hạn về dung lượng và quy mô phần cứng.

Hướng phát triển tiếp theo được tác giả đề xuất bao gồm: tiếp tục nghiên cứu và tích hợp thêm các công cụ kiểm thử bảo mật động (DAST) chuyên sâu; mở rộng khả năng kiểm thử thâm nhập tự động trong pipeline; tối ưu hóa thời gian thực thi của các stage quét lỗ hổng; và thử nghiệm triển khai mô hình cho các dự án phần mềm có quy mô lớn hơn trong môi trường doanh nghiệp thực tế.

Giá trị tham khảo

Tài liệu khóa luận là nguồn tài liệu hữu ích cho:

  • Sinh viên các ngành An toàn thông tin, Kỹ thuật phần mềm, Mạng máy tính và Truyền thông đang làm đồ án tốt nghiệp hoặc nghiên cứu về hạ tầng tự động hóa.
  • Kỹ sư DevOps/DevSecOps tại các doanh nghiệp vừa và nhỏ muốn xây dựng giải pháp CI/CD bảo mật với chi phí tối ưu nhờ phần mềm mã nguồn mở.

Các nội dung đáng tham khảo nhất trong văn bản gồm:

  • Thiết kế luồng phối hợp giữa Jenkins, GitLab và các công cụ bảo mật tại Chương 3.
  • Hướng dẫn cấu hình hạ tầng tự động bằng Terraform, Ansible và HashiCorp Vault tại Chương 4.
  • Phương pháp xây dựng kịch bản kiểm thử bảo mật 3 lớp (Code, Image, Web Server) phản ánh sát thực tế vận hành.

Câu hỏi thường gặp

1. Khóa luận sử dụng giải pháp nào để quản lý các thông tin nhạy cảm (secrets) và token xác thực trong toàn bộ chu trình DevSecOps?
Khóa luận sử dụng HashiCorp Vault Server để lưu trữ, quản lý và cấp phát tập trung toàn bộ dữ liệu nhạy cảm, thông tin đăng nhập, token của Jenkins, GitLab và cụm Kubernetes, ngăn ngừa tình trạng để lộ bí mật trong mã nguồn hoặc tệp cấu hình.

2. Công cụ nào chịu trách nhiệm quét kiểm tra lỗ hổng bảo mật của Docker Image trong đường ống CI/CD?
Công cụ được nhóm tác giả tích hợp tại bước "ShiftLeft Image Scan" là CloudGuard ShiftLeft. Công cụ này quét toàn bộ image sau khi build để đối chiếu với các quy tắc tuân thủ an toàn, phát hiện lỗ hổng và xuất báo cáo chi tiết lên dashboard trước khi image được đẩy lên kho lưu trữ.

3. Tường lửa bảo vệ ứng dụng web sau khi triển khai được cấu hình bằng công nghệ gì?
Nhóm tác giả thiết lập máy chủ Nginx tích hợp module ModSecurity đóng vai trò như một Tường lửa ứng dụng web (WAF). ModSecurity chịu trách nhiệm phân tích các yêu cầu gửi đến và chặn đứng các truy vấn chứa mã độc nhắm vào Web Server.

4. Ứng dụng mẫu được nhóm tác giả đưa vào thử nghiệm trong hệ thống là gì?
Hệ thống sử dụng một ứng dụng web viết bằng Python mang tên dự án flask-docker để kiểm chứng luồng hoạt động tự động của pipeline từ khâu lập trình, commit, quét lỗi cho đến khi triển khai lên cụm máy chủ.

5. Hạ tầng máy chủ và cụm Kubernetes trên Azure được khởi tạo bằng phương pháp nào?
Hạ tầng được khởi tạo tự động theo phương pháp Cơ sở hạ tầng dưới dạng mã (Infrastructure as Code - IaC) thông qua việc sử dụng Terraform để cấp phát máy ảo và cụm Kubernetes trên Azure Cloud, kết hợp cùng Ansible để tự động cài đặt và cấu hình các dịch vụ cần thiết.

Kết luận

Khóa luận tốt nghiệp của sinh viên Nguyễn Huỳnh Trọng Nghĩa và Nguyễn Hữu Thắng đã nghiên cứu toàn diện mô hình DevSecOps và hiện thực hóa thành công một hệ thống tự động hóa khép kín trên nền tảng mã nguồn mở kết hợp đám mây Azure. Đề tài tích hợp chặt chẽ các giải pháp bảo vệ đa tầng gồm SonarQube, CloudGuard ShiftLeft, Nginx ModSecurity và HashiCorp Vault vào chu trình CI/CD. Kết quả kiểm nghiệm qua 3 kịch bản thực tế đã chứng minh khả năng phát hiện lỗi mã nguồn, loại bỏ lỗ hổng trong container image và phòng thủ trước các cuộc tấn công web, mở ra hướng ứng dụng an toàn và tiết kiệm chi phí cho các doanh nghiệp phần mềm vừa và nhỏ.