DevSecOps – Tương lai của an ninh bảo mật phần mềm
Trong thời đại bùng nổ thông tin hiện nay, vấn đề bảo mật tiếp tục là ưu tiên hàng đầu khi các tổ chức phải đối mặt với các mối đe dọa ngày càng tăng và chi phí cao cho các vi phạm dữ liệu. Điều này tạo ra áp lực để đảm bảo rằng phần mềm được thiết kế và sử dụng một cách an toàn. Để giải quyết vấn đề trên, nhiều tổ chức đã bắt đầu áp dụng DevSecOps trong các nhóm của họ để tăng cường bảo mật và tính linh hoạt; đây là một cách tiếp cận để phát triển phần mềm nhúng bảo mật trong mọi giai đoạn của quy trình DevOps. Bài viết hôm nay chúng ta cùng tìm hiểu về DevSecOps – xu hướng được xem là tương lai của an ninh bảo mật phần mềm này nhé.
DevOps là gì?
Trước khi đi vào tìm hiểu về DevSecOps, chúng ta cùng nhớ lại khái niệm DevOps.
DevOps là sự kết hợp của Dev-Development (phát triển) và Ops-Operations (vận hành). Đây là mô hình kết hợp giữa team Dev và team vận hành (System) để triển khai code lên các môi trường (Dev, Test, Production,…) một cách nhanh chóng theo quy trình lặp lại và tự động.
Ưu điểm của DevOps là khả năng tự động hóa tất cả các quy trình, từ xây dựng, triển khai và áp dụng cho một ứng dụng hoặc sản phẩm. Mặc dù vậy, trong quá trình hoạt động DevOps đối diện với thách thức về mối lo bảo mật khi mà việc tấn công có thể xảy ra ở bất cứ giai đoạn nào trong xuyên suốt vòng đời phát triển của phần mềm. Và cũng vì lý do trên mà DevSecOps ra đời.
DevSecOps là gì?
“Sec” trong DevSecOps là viết tắt của Security – bảo mật có thể được xem là một tiến hóa từ DevOps với sự tiếp cận bảo mật trong mọi giai đoạn của vòng đời phát triển phần mềm.
Trong vòng đời phát triển của phần mềm, đánh giá bảo mật thường là bước cuối cùng trước khi phần mềm được phát hành và được thực hiện do một nhóm an ninh bảo mật riêng biệt thực hiện. Tuy nhiên điều này chỉ phù hợp với mô hình phát triển phần mềm cũ (ví dụ như WaterFall) với việc thời gian phát triển dài, số lượng bản phát hành ít và không liên tục. Với việc các công ty, tổ chức hiện nay áp dụng mô hình mới như Agile và DevOps, chu kỳ phát triển phần mềm giảm xuống chỉ tính bằng tháng, hay theo tuần hoặc thậm chí là theo ngày thì việc đánh giá bảo mật như cũ là bất hợp lý, dễ trở thành nút thắt cổ chai trong mô hình.
Để giải quyết vấn đề này, DevSecOps tích hợp bảo mật ứng dụng và bảo mật cơ sở hạ tầng một cách liền mạch vào các quy trình và công cụ của Agile, DevOps. Nó giải quyết vấn đề bảo mật khi vừa mới xuất hiện; đồng thời việc bảo mật ứng dụng và bảo mật cơ sở hạ tầng trở thành trách nhiệm chung của các nhóm phát triển, bảo mật và vận hành thay vì chỉ một bộ phận chịu trách nhiệm như trước. DevSecOps cho phép phát triển phần mềm an toàn hơn, sớm hơn bằng cách tự động hóa việc cung cấp bảo mật mà không làm chậm chu kỳ phát triển phần mềm.
Các thành phần cơ bản của mô hình DevSecOps
Một mô hình DevSecOps cơ bản bao gồm các thành phần:
- CI/CD Pipeline: thành phần phân phối các sản phẩm, dịch vụ một cách nhanh chóng và an toàn
- Infrastructure as code: thành phần giúp tài nguyên hệ thống có khả năng thay đổi đáp ứng co giãn khi cần thiết
- Monitoring: thành phần giám sát chặt chẽ khía cạnh an ninh trong từng giai đoạn
- Logging: ghi lại nhật ký các sự kiện bảo mật
- Microservice: chia nhỏ hệ thống lớn thành các thành phần nhỏ hơn để dễ quản lý
- Communication: thành phần giao tiếp, liên lạc các nhóm kết hợp
Quy trình hoạt động của DevSecOps bắt đầu khi team phát triển tạo ra source code; các team phát triển khác lấy code mới về và thực hiện phân tích để xác định lỗi hoặc lỗ hổng bảo mật bất kỳ nào. Tiếp theo đó, một môi trường được tạo ra để triển khai ứng dụng và các cấu hình bảo mật cho hệ thống; sau đó bộ tự động kiểm thử được thực thi dựa trên ứng dụng mới được triển khai gồm Backend, Frontend, tích hợp, kiểm tra bảo mật và API. Sau khi vượt qua hết được các bài kiểm tra này thì ứng dụng sẽ được triển khai tới môi trường thật (production).
Tham khảo việc làm Web Developer hấp dẫn trên TopDev
Ưu điểm vượt trội của DevSecOps
Tăng tần suất triển khai ứng dụng an toàn
Khi security bao trùm lên toàn bộ CI/CD pipeline, chất tốc độ sẽ sản phẩm được cải thiện. Ta phải thực tế và chấp nhận rằng giai đoạn đầu của việc tích hợp có thể sẽ rất khó khăn. Khi việc phối hợp giữa các nhóm phát triển và security trở nên mượt mà hơn, những vấn đề này sẽ dần biến mất và chỉ còn lại kết quả tích cực.
Giảm thời gian khắc phục các lỗ hổng nguy hiểm
DevSecOps sẽ cải thiện đáng kể thời gian khắc phục trung bình nhờ việc rà quét sớm và tự động, có luồng feedback tốt hơn và mô hình chia sẻ trách nhiệm. Khi trách nhiệm về security được chia sẻ trên toàn bộ CI/CD pipeline cũng như trong quy trình phát triển phần mềm, thay vì tách biệt hoàn toàn về một nhóm security, các vấn đề an ninh được phát hiện sớm và nhanh hơn. Điều này cũng trực tiếp liên quan đến hiệu quả chi phí, vì nó sẽ tốn nhiều tiền hơn để khắc phục lỗi được tìm thấy trong quá trình vận hành hơn là sửa lỗi được xác định trong giai đoạn thiết kế phát triển.
Cải thiện tư duy về an ninh thông tin
Nói chung, việc phát triển phần mềm hiện nay tương đối là phức tạp. Đưa security vào như một “tính năng” từ đầu sẽ giúp tiết kiệm rất nhiều thời gian cho các nhóm security bằng cách loại bỏ các vấn đề vô hại hoặc false positive nhờ vào các quy trình tự động kiểm soát ở mỗi bước. Nó sẽ tạo ra một nền văn hóa mới, tư duy mới, nơi các phương pháp an ninh tốt nhất được chia sẻ và đem đến lợi ích cho tất cả – bắt đầu ngay từ bước thiết kế, phát triển cho tới quá trình triển khai, vận hành phần mềm ứng dụng.
Giá trị cốt lõi của DevSecOps
DevSecOps nhấn mạnh rằng security là trách nhiệm của tất cả thành viên trong một tổ chức, và mọi người đều phải tuân thủ và thực hiện đảm bảo an toàn bảo mật thông tin.
Chìa khoá để áp dụng thành công mô hình DevSecOps nằm ở ba yếu tố: Con người, quy trình và công nghệ.
Yếu tố con người
Không quan trọng bao nhiêu công nghệ được áp dụng, yếu điểm lớn nhất về mặt an ninh thông tin luôn là con người. Đây cũng là điểm khởi đầu cho bất cứ quá trình áp dụng DevSecOps nào.
Một trong những điều quan trọng nhất nhưng cũng là khía cạnh khó nhất của DevSecOps là thay đổi cách làm việc truyền thống của security team. Đa số cách tiếp cận rủi ro là loại bỏ khi nó đã xảy ra, thay vì chủ động phòng bị trước.
Security team cần chuyển từ việc hoạt động độc lập sang việc tham gia cùng trong luồng phát triển phần mềm. Điều này vừa giúp tăng nhận thức về an ninh thông tin tới tất cả thành viên trong đội dự án, vừa giúp nhận biết sớm các rủi ro tiềm tàng trong phần mềm, trong hệ thống.
Yếu tố quy trình
Các quy trình thông thường được quy phạm tới từng team và thường ít khi có sự chia sẻ giữa các team với nhau. Điều này có thể gây ra ảnh hưởng tới năng suất trong cả một tổ chức. DevSecOps hướng tới việc thiết lập các quy trình tiêu chuẩn chung, các tài liệu đảm bảo security cho tổ chức để tạo sự phối hợp giữa các team như là một khối thống nhất. Việc xây dựng ra một quy trình, tiêu chuẩn tự động hoá đảm bảo an toàn thông tin là trách nhiệm của team DevSecOps.
Version control
Khi mọi thứ được tự động hoá, thứ quan trọng nhất cần được track đó là các thay đổi (changes). Mỗi hành động tạo ra changes phải được quản lý bởi version, cũng giống như version control khi code vậy. Việc versioning này sẽ giúp ta ghi lại được lịch sử thực hiện cũng như dễ dàng khi khôi phục lại. Để đáp ứng yếu tố này, DevSecOps team sẽ xây dựng một hệ thống Gitlab private nhằm lưu trữ tất cả các mã nguồn được viết ra bởi developer.
Tích hợp
Security cần phải được đưa vào quá trình phát triển sản phẩm sớm nhất có thể, ngay từ bước thiết kế. Phương pháp này được gọi là “shift left” hay “shift security to the left”.
Áp dụng những công cụ rà soát an ninh thông tin tự động ngay từ giai đoạn đầu của việc phát triển ứng dụng. Điều này vừa giúp những vấn đề về an ninh được phát hiện và ngăn chặn sớm, đồng thời cũng giúp các developer có nhận thức tốt hơn về việc viết code an toàn.
Compliance
Tuân thủ compliance là điều bắt buộc. Nếu nền móng về yếu tố con người đã được thực hiện tốt trước đó, thì việc tuyên truyền về việc tuân thủ compliance sẽ trở nên rất đơn giản và hiệu quả. Bên cạnh đó, compliance có thể không chỉ là các văn bản quy phạm. Ta hoàn toàn có thể xây dựng các metadata biểu diễn cho các compliance requirement và đưa vào các security policy để thực hiện tự động hoá.
Xử lý sự cố
Phản ứng với các sự cố liên quan tới an ninh thông tin không nên là tạm bợ nhất thời. Thay vào đó, việc xây dựng workflow, action plan, runbook, playbook luôn cần được chuẩn bị sẵn sàng từ trước. Điều này sẽ đảm bảo việc phản ứng với các sự cố trở nên có tính chắc chắn, có khả năng đo đếm và nhanh chóng hơn. Theo quy trình và tiêu chuẩn DevSecOps tại Techcombank, các kịch bản khôi phục sự cố cần được thực hiện dưới dạng code và tự động thông qua CI/CD pipeline. Điều này sẽ giúp việc ứng phó sự cố hệ thống trên môi trường live được thực hiện nhanh chóng hơn và số lượng sự cố trong quá trình triển khai cũng sẽ giảm đi.
Yếu tố công nghệ
Công nghệ là thứ cho phép mọi người thực hiện được các quy trình DevSecOps. Đây cũng là yếu tố cuối cùng quyết định việc áp dụng DevSecOps của một tổ chức có đủ trưởng thành, có thành công hay không.
Tự động hóa việc quản lý cấu hình
Tổ chức quản lý và tự động hóa việc quản lý cấu hình dưới dạng code sẽ giúp việc audit, việc đảm bảo baseline, compliance trở nên dễ dàng hơn rất nhiều. Các template dưới dạng code được đưa ra giúp việc rà soát các thay đổi được kiểm soát qua version control, rollback, phục hồi cũng trở nên rất nhanh chóng.
Tại Techcombank, Puppet được sử dụng như là một công cụ kiểm soát cấu hình. Các cấu hình đạt tiêu chuẩn baseline sẽ được định nghĩa trước và quản trị thông qua Puppet. Mọi hành vi cố ý thay đổi ngoài baseline sẽ luôn được phục hồi lại nhanh chóng.
Host hardening
Trước khi bảo mật đến tầng ứng dụng, tầng OS cần phải được an toàn trước. Có vô số những sự cố an ninh bắt nguồn từ việc host, đặc biệt là các host bị expose ra internet, bị khai thác. Do đó, một hardening checklist là rất cần thiết trong việc xây dựng template cũng như trust model cho việc cấu hình host. Kết hợp với tự động hóa việc quản lý cấu hình, host sẽ luôn được đảm bảo ở trạng thái an toàn cao nhất.
Audit và scan tại tầng ứng dụng
Việc thực hiện audit và scan liên tục là một phương diện thiết yếu của DevSecOps, giúp cho tổ chức hiểu được rõ ràng về các mối nguy. Các giải pháp hiện tại gồm có:
- Quét mã nguồn: Việc quét mã nguồn có thể được thực hiện bằng cách áp dụng các SAST tool (Static Application Security Testing). SAST tool phân tích mã nguồn của dự án để xác định ra các lỗi liên quan đến bảo mật trong code cũng như vấn đề của các dependency và library mà ứng dụng sử dụng. Các công cụ được DevSecOps team đưa vào tiêu chuẩn gồm có SonarQube và Synopsys Coverity.
- Tích hợp vào IDE: Mọi developer đều cần sử dụng IDE trong việc code. Sử dụng một số plugin trong IDE sẽ giúp ngăn chặn một phần lỗi trong code ngay từ máy cá nhân của developer trước khi cả commit code lên repository. Hiện tại, việc ngăn chặn này đang được thực hiện bằng pre-commit và sắp tới là SonarLint
- Binary scanning: Các package của ứng dụng sau khi được build ra cần phải được rà quét lại dưới dạng binary bằng Synopsys BlackDuck. Việc một lần nữa rà quét lại bản build này giúp đảm bảo chắc chắn rằng phần mềm kể cả đã đóng gói cũng đảm bảo an toàn thông tin.
- Audit trước và sau triển khai: Thêm một bước audit trước và sau triển khai sẽ đảm bảo ứng dụng an toàn tại day-0 và cả day-1 khi triển khai.
Quản lý secret
Secret và credential là các dữ liệu nhạy cảm hoặc thậm chí là tối mật được sử dụng cho ứng dụng. Trong quá trình thực hiện CI/CD, việc sử dụng đến các secret hay credential là một việc thường xuyên xảy ra. Do vậy, sử dụng các công cụ mã hoá và lưu trữ các dạng dữ liệu này là tối quan trọng, đặc biệt trong CI/CD pipeline. Các công cụ, nền tảng hỗ trợ cho việc này đang được áp dụng tại các công ty quy mô lớn có thể kể đến như HashiCorp Vault, AWS Secrets Manager, GPG, Ansible Vault…
DevSecOps chuyển dịch security từ phản ứng sang chủ động tham gia vào quy trình phát triển phần mềm. Những ưu điểm mà DevSecOps mang lại cho tổ chức là rất nhiều, bao gồm giảm thiểu chi phí, tăng tốc độ triển khai, tăng tốc độ phục hồi, kiểm soát và truy tìm các mối nguy. DevSecOps cũng phá bỏ đi rào cản giữa DevOps và Security, giúp tất cả cùng hoạt động hướng tới những mục tiêu chung của tổ chức.
Tác giả: Phạm Minh Khoa
Bài viết liên quan
Bảo mật ứng dụng Java web bởi Spring Security
Hãy lưu ý 5 điều sau để giảm nguy cơ bị tấn công mạng
Top 7 câu hỏi phỏng vấn Security Engineer thường gặp
Xem thêm Việc làm Developer hấp dẫn trên TopDev
- N Ngôn ngữ lập trình SAP ABAP thu nhập khủng ít ai biết!
- N Nâng tầm kỹ năng JavaScript: 6 khái niệm không thể bỏ qua
- C Cơ sở dữ liệu vector (Vector Database) – Cách sử dụng chi tiết
- B Bỏ túi cheatsheet PostgreSQL hữu ích cho mọi developer
- C Claude AI là gì? Tìm hiểu đối thủ đáng gờm của ChatGPT
- 8 8 tips hữu ích giúp BA khai thác thông tin từ stakeholder
- 7 7 vị trí CNTT không cần code giỏi mà vẫn thành công
- B BA làm gì trong một dự án phần mềm? (P1)
- B BA làm gì trong một dự án phần mềm? (P2)
- G Giải thuật Shell Sort và cách triển khai bằng ngôn ngữ lập trình Python