1. Trang chủ
  2. » Giáo Dục - Đào Tạo

XÂY DỰNG HỆ THỐNG TÍCH HỢP LIÊN TỤC NỘI BỘ SỬ DỤNG CÔNG CỤ NGUỒN MỞ JENKINS VÀ GITLAB - Full 10 điểm

11 0 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

N K Tuấn, N T Tâm, T H M Đăng, H P Cường / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 12 Xây dựng hệ th ố ng tích h ợp liên tục nội bộ sử dụng công cụ nguồn mở Jenkins v à Gitlab Building an internal continuous i ntegration s ystem using two open source t ools JENKINS and GITLAB Nguyễn Kim Tuấn, Nguyễn Trí Tâm * , Trần Hữu Minh Đăng , Hoàng Phi Cườ ng Nguyen Kim Tuan, Nguyen Tri Tam * , Tran Huu Minh Dang, Hoang Phi Cuong Trường Khoa học máy tính, Đại học Duy Tân, Đà Nẵng, Việt Nam School of Computer Science, Duy Tan University, 550000, Da Nang, Viet Nam (Ngày nhận bài: 05/4/2023, ngày p hản biện xo ng: 22/4/2023, ng ày chấp nhận đăng: 13/5/2023) Tóm tắt Trong bài báo này, chúng tôi đề xuất và triển khai một hệ thống “tích hợp liên tục” nội bộ, dựa trên hai công cụ mã nguồn mở Jenkins và Gitlab, có tính đến yếu tố đảm bảo an toàn cho các máy chủ trong hệ thống Trong hệ thống đề xuất, chúng tôi sử dụng kết hợp chức năng của firewall và chức năng của reverse proxy để bảo vệ chính Jenkins server và giảm thiểu rủi ro cho server này trước các cuộc tấn công vào lỗ hổng CVE-2021- 44228, có thể tồn tại trong c ác plugin của Jenkins Hệ thống này có tính thực tế cao, và nó có thể được áp dụng để “ngay lập tức” bảo vệ các server dịch vụ khi mà lỗ hổng trong nó đã được phát hiện nhưng bản vá lỗi tương ứng chưa được tìm thấy hoặc điều kiện cập nhật bản vá chưa cho p hép Từ khóa: Tích hợp liên tục; chuyển giao liên tục; tường lửa bảo mật; phần mềm nguồn mở; CVE - 2021 - 44228 Abstract In this paper, we propose and implement an internal "continuous integration" system, based on two open-source tools Jenkins and Gitlab, taking into account the safety factor for servers in the system In the proposed system, we use a combination of firewall function and reverse proxy function to protect Jenkins server itself and reduce the risk of this server against attacks on vulnerabili ty CVE - 2021 - 44228, may exist in plugins of Jenkins This system is highly practical, and it can be applied to "immediately" protect service servers when a vulnerability in it has been discovered but the corresponding patch has not been found or the conditi on to update the patch is not allowed yet Keywords: Continuous Integration; Continuous Delivery; CVE-2021-44228; Firewalls; Jenkin; Gitlab; 1 Giới thiệu Tích hợp liên tục (CI: Continuous Integration ) và Phân phối liên tục (CD: Continuous Delivery) là hai quy trình cốt lõi trong phương pháp phát triển phần mềm DevOps, một phương pháp phát triển phần mềm hiện đại, có nhiều ưu việt so với phương pháp phát triển phần mềm truyền thống và được triển khai ở hầu hết các doanh nghiệp, các nhóm phát triển phần mềm hiện nay Quy trình 3 ( 5 8 ) (202 3 ) 12 - 22  Tác giả liên hệ : Nguyễn Trí Tâm, Khoa Kỹ thuật Mạng máy tính & Truyền thông, Trường Khoa học Máy tính, Đại học Duy Tân, Đà Nẵng, Việt Nam Email: nguyentritam@dtu edu vn N K Tuấn, N T Tâm, T H M Đăng, H P Cường / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 13 CI và quy trình CD được xem là hai mặt của một vấn đề, nhưng chúng được sử dụng kết hợp với nhau để làm cho quá trình phát triển một sản phẩm phần mềm, từ lúc một phiên bản mới của mã nguồn được đưa ra (commit) đến khi sản phẩm mới nhất được triển khai (deploy), trở nên đơn giản, nhanh chóng và hiệu quả hơn Thông tin chi tiết, đầy đủ, liên quan đến DevOps, CI và CD, không thuộc phạm vi của nghiên cứu này, nên chúng tôi không trình bày chi tiết ở đây, nó có thể được tìm thấy ở [1 -3] Hạ tầng mạng máy tính, để triển khai các dịch vụ liên quan, là cần thiết để một doanh nghiệp, hoặc một nhóm, phát triển phần mềm có thể triển khai các quy trình CI, CD một cách tự động vào chu kỳ phát triển phần mềm theo hướng tiếp cận DevOps của họ Các máy chủ thực hiện chức năng CI server và CD server đóng vai trò quan trọng trong hạ tầng mạng này, vì thế, chúng cần được bảo vệ để có khả năng chống lại các cuộc tấn công vào chính nó, hoặc vào dịch vụ đang được triển khai trên nó Hạ tầng mạng này có th ể triển khai trên không gian Internet (dựa trên các dịch vụ Cloud) hoặc trong mạng nội bộ (Intranet/Extranet), tùy thuộc vào yêu cầu, điều kiện và quy mô của mỗi doanh nghiệp phát triển phần mềm Hạ tầng mạng CI/CD trong mạng Internet hay trong mạng nội bộ đều có những ưu điểm, nhược điểm riêng Trong bài báo này, chúng tôi đề xuất một hạ tầng mạng chỉ đảm bảo cho sự tự động của quy trình CI trong mạng nội bộ, nó được gọi là “Hệ thống Tích hợp liên tục nội bộ”, vì chúng tôi quan tâm đến tốc độ, tính sẵn sàng và sự chủ động trong công tác triển khai bảo mật của nó Hai thành phần chính của mọi hệ thống tích hợp liên tục là server thực hiện chức năng tích hợp liên tục (CI server) và server đóng vai trò lưu trữ và quản lý mã nguồn (Repository server) Nếu các s e rver này bị “đánh sập” bởi kẻ tấn công thì hệ thống này không những phải dừng hoạt động mà dữ liệu lưu trữ trong nó có thể bị khai thác, bị đánh cắp một cách có chủ đích Mối nguy này là tiềm ẩn, vì các server này cho dù được đặt trên không gian Internet hoặc bên trong mạng nội bộ đều phải có tính chia sẻ, tính sẵn sàng và tính đa kết nối đồng thời Ngoài ra, kẻ tấn công không chỉ tấn công vào chính các CI server hay Repository server mà còn tìm cách khai thác các lỗ hổng bảo mật có thể tồn tại trong các phần mề m được sử dụng để xây dựng các server này Như vậy, đảm bảo an toàn cho CI server và Repository server là cần thiết, có nhiều kỹ thuật và công cụ khác nhau có thể được sử dụng cho nhiệm vụ này, chúng tôi chọn cách sử dụng firewall cho hệ thống được đề xuất trong bài báo này Trong hệ thống của chúng tôi, firewall không những thực hiện nhiệm vụ bảo vệ chính CI server (sử dụng Jenkins) và Repository server (sử dụng Gitlab) mà còn có thể ngăn chặn các cuộc tấn công khai thác lỗ hổng bảo mật CVE -2021-442 28 tồn tại trong một số plugin của công cụ mã nguồn mở Jenkins Trong trường hợp này, chúng tôi muốn giới thiệu một cách khác để “bịt” một lỗ hổng tồn tại trong một server dịch vụ, ở đây là Jenkins, mà chưa cần, hoặc không cần , sử dụng bản vá tương ứng Tất nhiên, sử dụng bản vá để “bịt” lỗ hổng là giải pháp thường được lựa chọn nhất, nhưng trong điều kiện bản vá chưa sẵn sàng hoặc thời điểm thực hiện việc “vá” lỗ hổng chưa cho phép thì việc sử dụng firewall để “bịt” tạm thời lỗ hổng được phát hiện là một đề xuất nên được xem xét để triển khai 2 Một số kiến thức liên quan 2 1 Hệ thống tích hợp liên tục dựa trên Jenkins và Gitlab Trong phần này, chúng tôi chỉ trình bày những thông tin cơ bản nhất liên quan đến một hệ thống tích hợp liên tục và những chức năng chính của hai công cụ mã nguồn mở Jenkins và Gitlab Lý do chọn sử dụng Jenkins và Gitlab để xây dựng hệ thống đề xuất cũng được đề cập ở đây Thông tin chi tiết về những chủ đề này đã được đề cập ở [4 -7] N K Tuấn, N T Tâm, T H M Đăng, H P Cường / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 14 2 1 1 Về hệ thống tích hợp liên tục Hình 2 1 dưới đây cho thấy các thành phần chính, và nguyên lý hoạt động, của một một hệ thống CI nội bộ Trong đó, Continous Integration Server (CI server) đóng vai trò điều khiển quy trình tích hợp liên tục và làm cho quy trình này hoạt động một cách tự động i) Source Control Server (Repository server) chịu trách nhiệm lưu trữ và quản lý các tập tin mã nguồn, mà nó nhận được từ Manager và/hoặc từ các Developer Server này thực hiện một giải pháp tin cậy để tập trung và duy trì những sự thay đổi mã nguồn được tạo ra bởi các Developer (1: Check- in Changes) ii) CI server liên tục, hoặc theo định kỳ, phát hiện có sự thay đổi code trên Repository server, thực hiện việc nhận phiên bản code mới nhất từ Repository server (2: Fetch changes) để thực hiện những công việc được giao của nó (3: Build; 4: Test; 5: Fail or Succeed), và rồi gửi kết quả (6: Notify success or failure) về lại cho các thành viên của dự án, Manager và Developer Như vậy, duy trì sự kết nối ở mức cao, cả về tốc độ và sự sẵn sàng, giữa CI server, Repository server, Manager computers, Developer computers là yêu cầu cần đặt ra với hệ thống này Hệ thống đề xuất của chúng tôi đặc biệt quan tâm đến tí n h sẵn sàng của C I server và Repository server Hình 2 1: Các thành phần và nguyên lý hoạt động của một hệ thống CI nội bộ 2 1 2 Về lý do chọn Jenkin để xây dựng CI server Hiện trên thị trường đã có sẵn nhiều công cụ hỗ trợ xây dựng CI server cho hệ thống CI/CD, như Buddy, TeamCity, Jenkins, GoCD, CodeShip, v v Theo tìm hiểu của chúng tôi, công cụ mã nguồn mở Jenkins có nhiều ưu điểm hơn và được sử dụng rộng rãi hơn, so với các sản phẩm cùng loại, bởi: Jenkins được phát triển từ Java nên tính tương thích đa nền tảng của nó là rất cao; số lượng plugin của Jenkins lớn và đa dạng về chức năng; người dùng Jenkin s nhận được sự hỗ trợ rất lớn từ cộng đồng những nhà phát triển; người quản trị Jenkins có thể thực hiện các thao tác cấu hình tr ên nó thông qua cả giao diện giả GUI và câu lệnh điều khiển; v v Đây là lý do mà chúng tôi sử dụng Jenkins để xây dựng CI se rver cho hệ thống đề xuất Vấn đề đảm bảo an toàn cho sự hoạt động của Jenkins server cũng được Jenkins chú trọng, nó cho phép người quản trị thực hiện các tùy chọn về bảo mật sẵn có, như Access Control; CSRF Protection; Controller Isolation; Content Security Policy; v v một cách dễ N K Tuấn, N T Tâm, T H M Đăng, H P Cường / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 15 dàng Tuy nhiên, trong nghiên cứu này, chúng tôi chỉ đề cập đến phương án bảo vệ server Jenkins, và biện pháp đối phó với lỗ hổng CVE-2021- 44228 của Jenkins, theo hướng tiếp cận sử dụng Firewall 2 1 3 Về lý do chọn Gitlab để xây dựng Repository server Gitlab cũng là công cụ mã nguồn mở, nó thường được sử dụng để xây dựng các server lưu trữ, quản lý mã nguồn (Source code repository server) cho hệ thống CI/CD Chúng ta có thể sử dụng một trong các sản phẩm sẵn có sau đây để thay thế cho Gitlab, như Git, Github, Apache Subversion, Bitbucket Server , Team Foundation Server , v v , vì tất cả chúng đều cung cấp các sự hỗ trợ cơ bản mà một repository server cần có, như hỗ trợ cơ chế theo dõi sự thay đổi của một tập tin (source code files) được lưu trữ; hỗ trợ cơ chế cho phép nhiều thành viên (developers) truy xuất source code file một cách đồng thời; hỗ trợ cơ chế giải quyết xung đột khi đồng thời có nhiều developer cùng muốn thay đổi nội dung của một source code file; hỗ trợ một giao diện web để developer thấy được sự thay đổi giữa hai phiên bản source code, phiên bản trước đó và phiên bản vừa được commit, một cách trực quan; v v Trong hệ thống đề xuất, chúng tôi sử dụng Gitlab để xây dụng Repository server vì những ưu điểm nổi trội của nó, như tính miễn phí không giới hạn, khả năng tích hợp với Git, cho phép kiểm tra bảo mật động, cho phép dự án được thực hiện theo kế hoạch lập sẵn, v v Đặc biệt, GitLab cho phép hạn chế quyền truy cập vào các dự án và xem trạng thái tuân thủ của từng người tham gia; Trong phạm vi của nghiên cứu này, chúng tôi không đề cập đến những vấn đề bảo mật liên quan đến Gitlab, điều này sẽ được làm rõ trong một công bố của chúng tôi trong tương lai 2 2 Lỗ hổng bảo mật CVE -2021-44228 Lỗ hổng Log4Shell [8] , được Chen Zhaojun của Alibaba phát hiện vào năm 2021 và được định danh là CVE -2021- 44228, thuộc nhóm lỗ hổng bảo mật phần mềm, tồn tại trong Log4j2 Log4j2 là một thư viện mã nguồn mở dựa trên ngôn ngữ Java, nó hỗ trợ việc ghi lại (log) các massage lỗi, và những thông tin liên quan, phát sinh từ các chương trình ứng dụng Java Log4j2 được dùng khá phổ biến, đặc biệt, được tích hợp trong máy chủ web Apache Lỗ hổng CVE -2021- 44228 được xem là một trong những lỗ hổng nghiêm trọng nhất được phát hiện, tính đến thời điểm hiện tại, n ó cho phép kẻ tấn công thực hiện một cuộc tấn công từ xa để chiếm quyền điều khiển mục tiêu dễ bị tấn công, thường là một thiết bị trên Internet, nếu thiết bị đó đang chạy một phiên bản của Log4j2, mà không cần xác thực Để thực hiện tấn công này, kẻ tấn công chỉ cần gửi một yêu cầu mà trong đó có chứa mã khai thác (payload), thông qua một trong các giao thức LDAP, RMI, DNS, CORBA, v v , đến máy chủ sử dụng Log4j2, để kích hoạt lỗ hổng trong Log4j2 Khi đó, thông qua một trong các dịch vụ do kẻ tấn công kiểm soát, máy chủ sẽ tạo một yêu cầu (request) trên JNDI (Java Naming and Directory Interface) để gửi lại cho kẻ tấn công Nhận được yêu cầu này, kẻ tấn công sẽ trả về một đường dẫn đến tệp Java class được lưu trữ từ xa, tệp này sau đó sẽ được phía máy bị tấn công chèn vào luồng xử lý và cho phép kẻ tấn công có thể thực thi mã từ xa (RCE: Remove Code Execute) tùy ý Hình 2 2 cho thấy hoạt động của tấn công vào lỗ hổng bảo mật CVE -2021- 44228 N K Tuấn, N T Tâm, T H M Đăng, H P Cường / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 16 Hình 2 2 Hoạt động của tấn công vào lỗ hổng bao mật CVE -2021-44228 Như vậy, tác hại to lớn tiềm ẩn trong lỗ hổng bảo mật Log4Shell là đã rõ, nhưng rất không may là thư viện Log4j được sử dụng trong khá nhiều plugin của Jenkins ( Log4j không tồn tại trong core của Jenkins), như Audit -log; bootstraped-multi-test-results-report; cmakebuilder; cucumber-reports; v v Chính vì điều này mà công tác đảm bảo an toàn cho các CI server sử dụng Jenkins trong các hệ thống CI/CD luôn được người quản trị hệ thống đặc biệt quan tâm Hiện có nhiều giải pháp được đưa ra để đối phó v ới lỗ hổng bảo mật CVE -2021-44228 như: Cập nhật phiên bản mới nhất của thư viện Log4j (v2 17 0); vô hiệu hóa chức năng tìm kiếm trong me ss age; xóa lớp JndiLookup khỏi classpath; sử dụng bảng rules trong firewall lọc gói để giới hạn sự kết nối đến các serve r, các d ịch vụ có sử dụng thư viện Log4j; v v Vì kẻ tấn công có thể chèn mã khai thác lỗ hổng Log4j vào bất kỳ thành phần nào HTTP headers và HTTP body nên trong nghiên cứu này chúng tôi sử dụng firewall lọc gói vừa để bảo vệ chính CI server vừa giảm thiểu rủi ro do lỗ hổng Log4Shell tồn tại trong server này gây ra 2 3 Vai trò của Firewall lọc gói trong bảo mật mạng Thông tin chi tiết về hoạt động của f irewall và firewall lọc gói được chúng tôi trình bày ở [9- 10], do đó, trong phần này, chúng tôi chỉ t rình bày lại những đặc trưng của loại firewall này Firewall lọc gói dựa vào chính sách truy cập mạng, được thiết kế dưới dạng Bảng luật lọc gói, và các thông tin li ên quan chứa trong dòng traffic, thường là IP Address, Protocols và Port number, để quyết định cho phép một dòng traffic, hay một gói tin (packet), nào đó có được phép đi qua nó hay không Bảng luật lọc gói được người quản trị an ninh mạng thiết lập và cài đặt vào firewall, nó là cơ sở để Bộ lọc gói ra quyết định cho phép gói tin đến firewall có được đi qua nó , để hướng đến đích của gói tin , hay không Hình 2 3 là sơ đồ minh họa mạng doanh nghiệp, trong đó có sử dụng firewall lọc gói như là một cổng kết nối mạng, mọi gói tin từ mạng Internet vào mạng bên trong và từ mạng bên trong ra Internet đều phải đi qua firewall N K Tuấn, N T Tâm, T H M Đăng, H P Cường / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 17 Hình 2 3 Sơ đồ mạng với sự có mặt của firewall lọc gói C hính sách truy cập mạng của mạng doanh nghiệp này là như sau: Chỉ có các gói tin từ Internet chỉ được đi vào vùng mạng 192 168 2 0/24 - vùng DMZ của mạng doanh nghiệp - khôn g được phép đi vào vùng mạng 10 10 10 0/24, vùng mạng người dùng bên trong Tuy nhiên, mọi dòng traffic từ vùng mạng người dùng và vùng mạng DMZ đều có thể đi ra mạng Internet Trong nghiên cứu này, chúng tôi sử dụng công cụ Iptables kết hợp với công cụ Nginx (Reverse proxy) để xây dựng các firewall cho hệ thống đề xuất [11], nó vừa bảo vệ các server bên trong mạng, vừa có thể ngăn chặn tấn công vào lỗ hổng Log4j Xin nhắc lại rằng, Reverse p roxy server là một server đóng vai trò cầu nối giữa các máy client và các máy server Server này kiểm soát các request được gửi từ các clien t, và điều phối những request này tới một server phù hợp, để các request đó được xử lý Khi server xử lý xong, sẽ trả về response cho Reverse proxy, và Reverse proxy có trả về response đó cho c lient gửi request 3 Hệ thống tích hợp liên tục nội bộ đề xuất 3 1 Sơ đồ hệ thống Trong phần này, chúng tôi đề xuất một hệ thống tích hợp liên tục nội bộ, có tính đến yếu tố đảm bảo an toàn cho CI server và Repository server Hình 3 1 là sơ đồ mạng của hệ thống này N K Tuấn, N T Tâm, T H M Đăng, H P Cường / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 18 Hình 3 1: Sơ đồ hệ thống tích hợp liên tục nội bộ đề xuất Trong sơ đồ này: Máy Jenkins server đóng vai trò CI Server; Máy Gitlab server đóng vai trò Server Repository; Web server và Mail server là hai thành phần cơ bản của một mạng Intranet; Router được sử dụng cho việc kết nối mạng nội bộ vào Internet; Firewall được sử dụng cho việc bảo vệ các server, bảo vệ vùng mạng bên trong và thực hiện chức năng của một Reverse proxy server cho http, https và một số giao thức khác (phục vụ cho việc ngăn chăn tấn công vào lỗ hổng CVE -2021-44228) Vùng mạng chứa Web server và Mail server thường được gọi là vùng DMZ Thông thường, mọi kết nối từ Internet vào các server trong DMZ là được phép, do đó, Gitlab server được đặt ở DMZ là với mục đích cho phép developer kết nối và commit mã nguồn lên Server Repository ngay cả khi họ ở bên ngoài mạng nội bộ Người dùng trên Internet, kể cả Manager và Developer, đều không được phép truy cập trực tiếp đến Jenkins server, đây là lý do mà Jenkins server được đặt ở một vùng mạng riêng, để nó được bảo vệ bởi cả Router và Firewall 3 2 Cấu hình hệ thống Yêu cầu cấu hình đối với hệ thống đề xuất bao gồm: - Thiết lập địa chỉ IP cho từng máy tính và thiết bị trong mạng theo đúng lược đồ địa chỉ IP đã định (Hình 3 1) Máy tính của các Developer được chỉ định nhận địa chỉ IP động (một DHCP server bên trong mạng nội bộ sẽ đảm nhận việc phân phối địa chỉ IP động này) - Cài đặt Jenkins, và các plugin cần thiết, lên máy tính được chọn làm Jenkins server, máy này phải được cài đặt Java trước đó, và rồi thiết lập các thông số cấu hình cho server này Chú ý chọn port dịch vụ (service port number) phù hợp cho Jenkins (Port number mặc định của Jenkins là 8080, tuy nhiên chúng ta có thể thay đổi port này sau khi đã xong cài đặt Jenkins) - Cài đặt Gitlab, và các plugin liên quan, lên máy tính được chọn làm Repository server, và rồi thiết lập các thông số cấu hình cho server này Nhớ lưu lại thông tin liên quan đến tài khoản quản trị Gitlab được tạo ra trong quá trình cài đặt để đổi mật khẩu hoặc đăng nhập N K Tuấn, N T Tâm, T H M Đăng, H P Cường / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 19 Gitlab để thực hiện chức năng của người quản trị hệ thống sau này Port number mặc định của Gitlab là 80, tuy nhiên chúng ta có thể thay đổi port này sau khi đã xong cài đặt Gitlab Dịch vụ FirewallD trên Gitlab sẽ được tắt, vì chúng tôi sử dụng một firewall riêng, firewall IpTables kết hợp Nginx - Kết nối Jenkins server với Gitlab server: Trước hết phải tạo một cặp khóa xác thực, để từ Jenkin server có thể kết nối được đến Gitlab server - K ết nối Jenkins server vớ i Web server: Trước hết phải tạo một cặp khóa xác thực, để có thể tạo sự kết nối từ Jenkin server đến Web server Với sơ đồ mạng của hệ thống đề xuất, việc cấu hình cho firewall Iptables, và thiết lập bảng luật lọc gói cho nó, là rất quan trọng Phải thực hiện đúng bước cấu hình này thì “Chính sách truy cập mạng”, hay còn gọi là “Chính sách an ninh mạng”, của hệ thống mới có hiệu lực Khi đó, Firewall sẽ dựa vào các bảng luật lọc gói để thực hiện được chức năng bảo vệ mạng, bảo vệ các server và đặc biệt là ngăn chặn các cuộc tấn công vào lỗ hổng bảo mật CVE -2021-44228 trên Jenkins server Bảng 3 1: Bảng luật lọc gói trên firewall Iptables Order IP Source Port Source IP Destination Port Destination Allow/Deny 1 Internet-dev Any 192 168 2 2 80, 443 Allow 2 Any Any 192 168 2 3 80, 443 Allow 3 Any Any 192 168 2 4 587 Allow 4 Manager’s IP Any 192 168 3 1 8080 Allow 5 192 168 3 2 Any 192 168 2 2 22 Allow 6 192 168 1 0/24 Any 192 168 2 2 80, 443 Allow 7 192 168 1 0/24 Any Internet Any Allow 8 192 168 2 4/24 Any 192 168 1 0/24 Any Allow 9 192 168 2 0/29 Any Internet Any Allow 10 Any Any Any Any Deny - Chính sách truy cập mạng được thiết kế dưới dạng bảng luật (Bảng 3 1), và sẽ được cấu hình thành bộ lọc trên firewall Iptable Firewall sẽ dựa vào bảng luật này để chỉ cho phép các kết nối từ Internet hướng đến các server trong vùng DMZ là được đi vào mạng Đặc biệt, để kết nối đến Gitlab server thì dòng traffic mang bởi giao thức HTTPS và port đích là 443 thì mới được Firewall cho qua Điều này cũng với các kết nối xuất phát từ bên trong mạng nội bộ Cuối cùng, cài đặt Nginx lên máy chạy firewall Iptables, vô hiệu chức năng Default virtual host của Nginx và rồi triển khai chức năng Reverse proxy trên nó (bằng cách sửa file cấu hình nginx conf) Các luật sau đây cần được thiết lập trên Nginx để yêu cầu nó theo dõi và chặn các dòng traffic mà payload của nó chứa nội dung khai thác lỗ hổng Log4j trên Jenkins server Sau đây là một số lệnh lọc của bộ luật : server { [ ] ## Block Log4j set $block_log4j 0 ; if ($query_string ~ " \ $ \ {jndi \ :") { set $block_sql_injections 1; N K Tuấn, N T Tâm, T H M Đăng, H P Cường / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 20 } if ($query_string ~ "${jndi :ldap:") { set $block_sql_injections 1; } if ($query_str ing ~ " \ $ \ {jndi \ :(ldap[s]?|rmi |dns|nis|iiop|corba|nds|http):/[ \ /]?[^ \ n]+ ") { set $block_sql_injections 1; } [ ] if ($block_sql_injections = 1) { return 403; } Trên đây chỉ là một số lệnh lọc cơ bản, cho mục tiêu chặn tấn công vào lỗ hổng Log4j, của bộ luật cần thiết lập trên Ngnix Dễ thấy, nếu trong payload của traffic định hướng đến Jenkins server, được mạng bỏi giao thức http hoặc https, có chứa một trong các chuỗi ký tự “jndi \ :”, “jndi:ldap:”, “jndi \ :(ldap[s]?|rmi|)”,… thì N gnix sẽ trả về mã lỗi 403: Trang web bị chặn truy cập 3 3 Hoạt động của hệ thống Trong phần này, chúng tôi không bàn về hoạt động của hệ thống tích hợp liên tục đề xuất, mà chỉ bàn về hoạt động của firewall lọc gói, kết hợp reverse proxy, trong hệ thống Cách mà firewall lọc gói được sử dụng để bảo vệ hệ thống mạng nội bộ bên trong và các server trong hệ thống đề xuất; và cách mà reverse proxy server ngăn chặn những cuộc tấn công vào lỗ hổng Log4j được trình bày ở đây Cụ thể như sau: Với bảng luật lọc gói đã được thiết lập, xét một cách tổng quát, firewall chỉ cho phép những dòng kết nối định hướng đến vùng DMZ đi qua nó Tuy nhiên, để đến được Gitlab server thì dòng traffic phải được mang bởi giao thức https và cổng đến là 443 Nhờ điều này mà các developer cả bên trong mạng nội bộ, lẫn bên ngoài Internet đều có thể kết nối và commit mã nguồn đến Gitlab server Firewall cũng chỉ cho phép sự kết nối và trao đổi dữ liệu trực tiếp giữa Jenkins server và Gitlab server Dòng traffic mang message, giao thức https và port 8080, từ Jenkins server đến các máy tính của manager và developer cũng được firewall cho phép đi qua Mọi dòng traffic, chính xác là các request, định hướng đến Jenkins server, được mang bởi giao thức http hoặc https đều bị kiểm soát bởi Nginx server Server này chặn lại các dòng traffic mà payload của nó chứa nội dung phục vụ cho mục đích khai thác lỗ hổng Log4j có thể tồn tại trong các plugin mà Jenkins đang sử dụng Nginx proxy dựa vào tập luật đã được thiết lập để thực hiện điều này Như vậy, Jenkins server không chỉ được bảo vệ để chống lại những cuộ c t ấn công có thể vào chính server này, mà được bảo vệ để chống lại những cuộc tấn công vào lỗ hổng Log4j có thể tồn tại trong các plugin của nó 4 Thảo luận về hệ thống đề xuất Hệ thống tích hợp liên tục nội bộ được đề xuất và triển khai trong nghiên cứu này đã đảm bảo những yêu cầu cơ bản của mạng Intranet của các doanh nghiệp làm phần mề m, định hướng phát triển sản phẩm phần mềm theo phương pháp DevOps, áp dụng quy trình CI/CD Vì Gitlab server đặt trong mạng nội bộ nên tốc độ và tính sẵn sàng của hệ thố ng là khá cao Điều này cũng góp phần giảm chi phí cần cho hoạt động của hệ thống và tiết kiệm được không gian làm việc của doanh nghiệp (vì Manager và Developer có thể làm việc tại nhà, kết nối với Gitlab server và/hoặc Jenkins server N K Tuấn, N T Tâm, T H M Đăng, H P Cường / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 21 thông qua Internet); Toàn bộ hệ thống bên trong, đặc biệt là Jenkins server và Gitlab server, được bảo vệ bởi Firewall và Reverse proxy Mọi sự truy cập từ Internet vào mạng nội bộ đều được kiểm soát, chỉ có những dòng traffic định hướng vào vùng DMZ thì mới được đi qua Firewall Người dùng trên Internet, mà không phải là manager hoặc developer của một dự án phần mềm nào đó của doanh nghiệp thì khó có thể kết nối được đến Gitlab server; Chỉ có kết nối hai chiều giữa Jenkins server và Gitlab server là được phép Tức là, mọi tấn công nhằm vào Jenkins server, thành phần trọng yếu của hệ thống CI, đều khó có thể vượt qua được sự kiểm soát và ngăn chặn của Firewall, Reverse proxy Máy tính của Manager và Developer chỉ có thể nhận message từ Jenkins server, nó không được tạo kết nối trực tiếp đến server này Đặc biệt, những dòng traffic có chủ đích khai thác lỗ hổng Log4Shell thì không thể đi qua firewall, nó bị reverse proxy chặn lại theo các lệnh lọc đã được thiết lập trong bộ Đây là nhiệm vụ quan trọng của firewall, nó cũng là đóng góp chính của chúng tôi trong nghiên cứu này Tuy nhiên, để cài đặt, cấu hình và vận hành hệ thống này thì đòi hỏi doanh nghiệp phải có nhân sự có chuyên môn trong lĩnh vực quản trị mạng, an ninh mạng và kiện toàn hệ thống mạng 5 Kết luận Trong nghiên cứu này, chúng tôi đã đề xuất và cài đặt thành công một hệ thống mạng tích hợp liên tục nội bộ với ba yếu tố đặc trưng: i) Cả CI server và Repository server đều đặt trong mạng nội bộ nên tốc độ và tính sẵn sàng của hệ th ống luôn được đảm bảo ở mức cao; ii ) Đảm bảo an toàn cho CI server và Repository server theo hướng tiếp cận sử dụng firewall lọc gói kết hợp với reverse proxy server và iii) Firewall không chỉ thực hiện chức năng bảo vệ mạng nội bộ, bảo vệ CI server, bảo vệ Repository server chống tại tấn công từ bên ngoài mà còn bảo vệ Jenkins server khi lỗ hổng CVE-2021-44228 tồn tại trong nó chưa được vá kịp thời Chúng tôi sử dụng các công cụ nguồn mở Jenkins, Gitlab, IpTables và Nginx cho mô hình đề xuất, nhưng những đặc trưng của mô hình này có tính t ổng quát cao nên khi chúng ta sử dụng các công cụ nguồn mở tương tự để triển khai mô hình thì tính thực tế và tính khả thi của mô hình vẫn được đảm bảo Tài liệu tham khảo [1] Mojtaba S , Muhammad A B and Liming Z , “Continuous Integration, Delivery and Dep loyment: A Systematic Review on Approaches, Tools, Challenges and Practices” , IEEE Access, vol 5, 2017, DOI: 10 1109/ACCESS 2017 2685629 [2] Donca C , Stan O P , Misaros M , Gota D And Miclea L , “ Method for Continuous Integration and Deployment Using a Pipeline Generator for Agile Software Projects”, Sensors (Basel), vol 22, no 12, 2022, DOI: 10 3390/s22124637 [3] Sree P K , Rajkumar P , “Survey on Continuous Integration, Deployment and Delivery in Agile and DevOps Practices” , International Journal of Computer Sciences and Engineering, vol 4, iss 4, pp 213-216, 2016 [4] Ioannis K M , Imtiaz H , Claudia A , Fred H , Yann A , Luc D , Xian Z , Christopher J W , Jeremy L J , Nicholas H , John T , and Christian N P , ”Jenkins - CI, an Open-Source Continuous Integration System, as a Scientific Data and Image-Processing Platform”, Society for Laboratory Automation and Screening, SLAS Discovery, vol 12, pp 1-12, 2016, DOI: 10 1177/1087057116679993 [5] Pranoday P D , “CI/CD Pipeline Using Jenkins Unleashed - Solutions While Setting Up CI/CD Processes” ( Book) , Apress Berkeley, CA, Edition number 1, 2022, DOI: 10 1007/978-1-4842-7508-5 [6] Sriniketan M , Vaibhav B , “Continuous Integration and Continuous Deployment Pipeline Automation Using Jenkins Ansible” , IEEE Explore, International Conference on Emerging Trends in Information Technology and Engineering , 2020, DOI: 10 1109/ic-ETITE47903 2020 239 [7] Rayanagoudar S F , Hampannavar P S , Pujari J D , Parvati V K , “Enhancement of CICD Pipelines with Jenkins BlueOcean”, International Journal Of Computer Sciences And Engineering , vol 6, iss 6, pp 1048-1052, 2018, DOI: 10 26438/ijcse/v6i6 10481053 N K Tuấn, N T Tâm, T H M Đăng, H P Cường / Tạp chí Khoa học và Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 22 [8] Behind Java, “Log4J Vulnerability (Log4Shell) Explained - for Java developers ”, Available at: https://www incibe-cert es/en/blog/log4shell- analysis-vulnerabilities-log4j, 2021 [Accessed 27 Feb 2023] [9] Mohammad I , Abdulrahman A A , Bilal A , “Role of firewall Technology in Network Security”, International Journal of Innovations & Advancement in Computer Science, vol 4, iss 12, pp 3-6, 2015 [10] Sahithi D , Tarik E , “Firewalls Implementation in Computer Networks and Their Role in Network Security” , Journal of Multidisciplinary Engineering Science and Technology, vol 2, iss 3, pp 408-411, 2015 [11] Alex Tatistcheff , “Protecting against Log4j with Secure Firewall & Secure IPS”, Available at: https://blogs cisco com/security/protecting-against- log4j-with-secure-firewall-secure- ips?scid=6WCg7b7JiR3&id=1RqLEkeW8BL , 2021 [Accessed 27 Feb 2023]

12 N.K.Tuấn, N.T.Tâm, T.H.M.Đăng, H.P.Cường / Tạp chí Khoa học Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 3(58) (2023) 12-22 Xây dựng hệ thống tích hợp liên tục nội sử dụng công cụ nguồn mở Jenkins Gitlab Building an internal continuous integration system using two open source tools JENKINS and GITLAB Nguyễn Kim Tuấn, Nguyễn Trí Tâm*, Trần Hữu Minh Đăng, Hồng Phi Cường Nguyen Kim Tuan, Nguyen Tri Tam*, Tran Huu Minh Dang, Hoang Phi Cuong Trường Khoa học máy tính, Đại học Duy Tân, Đà Nẵng, Việt Nam School of Computer Science, Duy Tan University, 550000, Da Nang, Viet Nam (Ngày nhận bài: 05/4/2023, ngày phản biện xong: 22/4/2023, ngày chấp nhận đăng: 13/5/2023) Tóm tắt Trong báo này, đề xuất triển khai hệ thống “tích hợp liên tục” nội bộ, dựa hai cơng cụ mã nguồn mở Jenkins Gitlab, có tính đến yếu tố đảm bảo an toàn cho máy chủ hệ thống Trong hệ thống đề xuất, sử dụng kết hợp chức firewall chức reverse proxy để bảo vệ Jenkins server giảm thiểu rủi ro cho server trước cơng vào lỗ hổng CVE-2021-44228, tồn plugin Jenkins Hệ thống có tính thực tế cao, áp dụng để “ngay lập tức” bảo vệ server dịch vụ mà lỗ hổng phát vá lỗi tương ứng chưa tìm thấy điều kiện cập nhật vá chưa cho phép Từ khóa: Tích hợp liên tục; chuyển giao liên tục; tường lửa bảo mật; phần mềm nguồn mở; CVE-2021-44228 Abstract In this paper, we propose and implement an internal "continuous integration" system, based on two open-source tools Jenkins and Gitlab, taking into account the safety factor for servers in the system In the proposed system, we use a combination of firewall function and reverse proxy function to protect Jenkins server itself and reduce the risk of this server against attacks on vulnerability CVE-2021-44228, may exist in plugins of Jenkins This system is highly practical, and it can be applied to "immediately" protect service servers when a vulnerability in it has been discovered but the corresponding patch has not been found or the condition to update the patch is not allowed yet Keywords: Continuous Integration; Continuous Delivery; CVE-2021-44228; Firewalls; Jenkin; Gitlab; Giới thiệu DevOps, phương pháp phát triển phần mềm đại, có nhiều ưu việt so với phương Tích hợp liên tục (CI: Continuous pháp phát triển phần mềm truyền thống Integration) Phân phối liên tục (CD: triển khai hầu hết doanh nghiệp, Continuous Delivery) hai quy trình cốt lõi nhóm phát triển phần mềm Quy trình phương pháp phát triển phần mềm Tác giả liên hệ: Nguyễn Trí Tâm, Khoa Kỹ thuật Mạng máy tính & Truyền thơng, Trường Khoa học Máy tính, Đại học Duy Tân, Đà Nẵng, Việt Nam Email: nguyentritam@dtu.edu.vn N.K.Tuấn, N.T.Tâm, T.H.M.Đăng, H.P.Cường / Tạp chí Khoa học Cơng nghệ Đại học Duy Tân 3(58) (2023) 12-22 13 CI quy trình CD xem hai mặt đích Mối nguy tiềm ẩn, server vấn đề, chúng sử dụng kết hợp cho dù đặt không gian Internet với để làm cho trình phát triển bên mạng nội phải có tính chia sẻ, sản phẩm phần mềm, từ lúc phiên tính sẵn sàng tính đa kết nối đồng thời mã nguồn đưa (commit) đến sản phẩm triển khai (deploy), trở Ngồi ra, kẻ cơng khơng cơng nên đơn giản, nhanh chóng hiệu vào CI server hay Repository server Thông tin chi tiết, đầy đủ, liên quan đến mà cịn tìm cách khai thác lỗ hổng bảo mật DevOps, CI CD, không thuộc phạm vi tồn phần mềm sử nghiên cứu này, nên chúng tơi khơng trình bày dụng để xây dựng server Như vậy, chi tiết đây, tìm thấy [1-3] đảm bảo an tồn cho CI server Repository server cần thiết, có nhiều kỹ thuật cơng cụ Hạ tầng mạng máy tính, để triển khai dịch khác sử dụng cho nhiệm vụ vụ liên quan, cần thiết để doanh nghiệp, này, chúng tơi chọn cách sử dụng firewall cho nhóm, phát triển phần mềm hệ thống đề xuất báo triển khai quy trình CI, CD cách tự động vào chu kỳ phát triển phần mềm theo hướng Trong hệ thống chúng tôi, firewall tiếp cận DevOps họ Các máy chủ thực thực nhiệm vụ bảo vệ chức CI server CD server đóng vai trị CI server (sử dụng Jenkins) Repository quan trọng hạ tầng mạng này, thế, server (sử dụng Gitlab) mà cịn ngăn chúng cần bảo vệ để có khả chống lại chặn công khai thác lỗ hổng bảo cơng vào nó, vào dịch mật CVE-2021-44228 tồn số vụ triển khai Hạ tầng mạng plugin công cụ mã nguồn mở Jenkins triển khai khơng gian Internet Trong trường hợp này, muốn giới (dựa dịch vụ Cloud) mạng thiệu cách khác để “bịt” lỗ hổng tồn nội (Intranet/Extranet), tùy thuộc vào yêu server dịch vụ, Jenkins, cầu, điều kiện quy mô doanh nghiệp mà chưa cần, không cần, sử dụng vá phát triển phần mềm Hạ tầng mạng CI/CD tương ứng Tất nhiên, sử dụng vá để “bịt” mạng Internet hay mạng nội lỗ hổng giải pháp thường lựa chọn nhất, có ưu điểm, nhược điểm riêng Trong điều kiện vá chưa sẵn sàng báo này, đề xuất hạ tầng mạng thời điểm thực việc “vá” lỗ hổng đảm bảo cho tự động quy trình CI chưa cho phép việc sử dụng firewall để “bịt” mạng nội bộ, gọi “Hệ thống Tích hợp tạm thời lỗ hổng phát đề xuất liên tục nội bộ”, chúng tơi quan tâm đến tốc nên xem xét để triển khai độ, tính sẵn sàng chủ động công tác triển khai bảo mật Một số kiến thức liên quan Hai thành phần hệ thống tích 2.1 Hệ thống tích hợp liên tục dựa hợp liên tục server thực chức tích Jenkins Gitlab hợp liên tục (CI server) server đóng vai trò lưu trữ quản lý mã nguồn (Repository Trong phần này, chúng tơi trình bày server) Nếu server bị “đánh sập” thông tin liên quan đến kẻ cơng hệ thống khơng phải hệ thống tích hợp liên tục chức dừng hoạt động mà liệu lưu trữ có hai cơng cụ mã nguồn mở Jenkins thể bị khai thác, bị đánh cắp cách có chủ Gitlab Lý chọn sử dụng Jenkins Gitlab để xây dựng hệ thống đề xuất đề cập Thông tin chi tiết chủ đề đề cập [4-7] 14 N.K.Tuấn, N.T.Tâm, T.H.M.Đăng, H.P.Cường / Tạp chí Khoa học Cơng nghệ Đại học Duy Tân 3(58) (2023) 12-22 2.1.1 Về hệ thống tích hợp liên tục code Repository server, thực việc nhận phiên code từ Repository Hình 2.1 cho thấy thành phần server (2: Fetch changes) để thực chính, nguyên lý hoạt động, một hệ công việc giao (3: Build; 4: Test; thống CI nội Trong đó, Continous 5: Fail or Succeed), gửi kết (6: Integration Server (CI server) đóng vai trò điều Notify success or failure) lại cho thành khiển quy trình tích hợp liên tục làm cho quy viên dự án, Manager Developer trình hoạt động cách tự động i) Source Control Server (Repository server) chịu trách Như vậy, trì kết nối mức cao, nhiệm lưu trữ quản lý tập tin mã nguồn, tốc độ sẵn sàng, CI server, mà nhận từ Manager và/hoặc từ Repository server, Manager computers, Developer Server thực giải pháp Developer computers yêu cầu cần đặt với tin cậy để tập trung trì thay hệ thống Hệ thống đề xuất đổi mã nguồn tạo Developer đặc biệt quan tâm đến tính sẵn sàng CI (1: Check-in Changes) ii) CI server liên tục, server Repository server theo định kỳ, phát có thay đổi Hình 2.1: Các thành phần nguyên lý hoạt động hệ thống CI nội 2.1.2 Về lý chọn Jenkin để xây dựng CI server đồng nhà phát triển; người quản trị Jenkins thực thao tác cấu hình Hiện thị trường có sẵn nhiều cơng cụ thông qua giao diện giả GUI câu hỗ trợ xây dựng CI server cho hệ thống CI/CD, lệnh điều khiển; v.v Đây lý mà chúng Buddy, TeamCity, Jenkins, GoCD, sử dụng Jenkins để xây dựng CI server cho CodeShip, v.v Theo tìm hiểu chúng tơi, hệ thống đề xuất cơng cụ mã nguồn mở Jenkins có nhiều ưu điểm sử dụng rộng rãi hơn, so với Vấn đề đảm bảo an toàn cho hoạt động sản phẩm loại, bởi: Jenkins phát Jenkins server Jenkins triển từ Java nên tính tương thích đa tảng trọng, cho phép người quản trị thực cao; số lượng plugin Jenkins tùy chọn bảo mật sẵn có, Access lớn đa dạng chức năng; người dùng Control; CSRF Protection; Controller Isolation; Jenkins nhận hỗ trợ lớn từ cộng Content Security Policy; v.v cách dễ N.K.Tuấn, N.T.Tâm, T.H.M.Đăng, H.P.Cường / Tạp chí Khoa học Cơng nghệ Đại học Duy Tân 3(58) (2023) 12-22 15 dàng Tuy nhiên, nghiên cứu này, chúng làm rõ công bố đề cập đến phương án bảo vệ server tương lai Jenkins, biện pháp đối phó với lỗ hổng CVE-2021-44228 Jenkins, theo hướng tiếp 2.2 Lỗ hổng bảo mật CVE-2021-44228 cận sử dụng Firewall Lỗ hổng Log4Shell [8], Chen Zhaojun 2.1.3 Về lý chọn Gitlab để xây dựng Alibaba phát vào năm 2021 Repository server định danh CVE-2021-44228, thuộc nhóm lỗ hổng bảo mật phần mềm, tồn Log4j2 Gitlab công cụ mã nguồn mở, Log4j2 thư viện mã nguồn mở dựa thường sử dụng để xây dựng server ngôn ngữ Java, hỗ trợ việc ghi lại (log) lưu trữ, quản lý mã nguồn (Source code massage lỗi, thông tin liên quan, phát repository server) cho hệ thống CI/CD Chúng sinh từ chương trình ứng dụng Java Log4j2 ta sử dụng sản phẩm sẵn dùng phổ biến, đặc biệt, tích có sau để thay cho Gitlab, Git, hợp máy chủ web Apache Github, Apache Subversion, Bitbucket Server, Team Foundation Server, v.v , tất chúng Lỗ hổng CVE-2021-44228 xem cung cấp hỗ trợ mà lỗ hổng nghiêm trọng repository server cần có, hỗ trợ chế theo phát hiện, tính đến thời điểm tại, cho dõi thay đổi tập tin (source code phép kẻ công thực công files) lưu trữ; hỗ trợ chế cho phép từ xa để chiếm quyền điều khiển mục tiêu dễ bị nhiều thành viên (developers) truy xuất source công, thường thiết bị Internet, code file cách đồng thời; hỗ trợ chế giải thiết bị chạy phiên xung đột đồng thời có nhiều Log4j2, mà khơng cần xác thực Để thực developer muốn thay đổi nội dung công này, kẻ công cần gửi yêu source code file; hỗ trợ giao diện web cầu mà có chứa mã khai thác để developer thấy thay đổi hai (payload), thông qua giao thức phiên source code, phiên trước LDAP, RMI, DNS, CORBA, v.v , đến máy phiên vừa commit, cách trực chủ sử dụng Log4j2, để kích hoạt lỗ hổng quan; v.v Log4j2 Khi đó, thơng qua dịch vụ kẻ công kiểm soát, máy chủ tạo Trong hệ thống đề xuất, sử dụng yêu cầu (request) JNDI (Java Naming Gitlab để xây dụng Repository server and Directory Interface) để gửi lại cho kẻ ưu điểm trội nó, tính miễn phí cơng Nhận u cầu này, kẻ cơng khơng giới hạn, khả tích hợp với Git, cho trả đường dẫn đến tệp Java class phép kiểm tra bảo mật động, cho phép dự án lưu trữ từ xa, tệp sau phía máy thực theo kế hoạch lập sẵn, v.v Đặc bị công chèn vào luồng xử lý cho phép biệt, GitLab cho phép hạn chế quyền truy cập kẻ công thực thi mã từ xa (RCE: vào dự án xem trạng thái tuân thủ Remove Code Execute) tùy ý Hình 2.2 cho người tham gia; Trong phạm vi nghiên thấy hoạt động công vào lỗ hổng bảo cứu này, không đề cập đến vấn mật CVE-2021- 44228 đề bảo mật liên quan đến Gitlab, điều 16 N.K.Tuấn, N.T.Tâm, T.H.M.Đăng, H.P.Cường / Tạp chí Khoa học Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 Hình 2.2 Hoạt động cơng vào lỗ hổng bao mật CVE-2021-44228 Như vậy, tác hại to lớn tiềm ẩn lỗ hổng 2.3 Vai trò Firewall lọc gói bảo mật bảo mật Log4Shell rõ, không mạng may thư viện Log4j sử dụng nhiều plugin Jenkins (Log4j không tồn Thông tin chi tiết hoạt động firewall core Jenkins), Audit-log; firewall lọc gói chúng tơi trình bày bootstraped-multi-test-results-report; [9-10], đó, phần này, cmakebuilder; cucumber-reports; v.v Chính trình bày lại đặc trưng loại điều mà cơng tác đảm bảo an tồn cho firewall CI server sử dụng Jenkins hệ thống CI/CD người quản trị hệ thống Firewall lọc gói dựa vào sách truy cập đặc biệt quan tâm mạng, thiết kế dạng Bảng luật lọc gói, thơng tin liên quan chứa dịng Hiện có nhiều giải pháp đưa để đối traffic, thường IP Address, Protocols Port phó với lỗ hổng bảo mật CVE-2021-44228 number, để định cho phép dòng như: Cập nhật phiên thư viện traffic, hay gói tin (packet), có Log4j (v2.17.0); vơ hiệu hóa chức tìm phép qua hay khơng Bảng luật lọc gói kiếm message; xóa lớp JndiLookup khỏi người quản trị an ninh mạng thiết lập classpath; sử dụng bảng rules firewall lọc cài đặt vào firewall, sở để Bộ lọc gói gói để giới hạn kết nối đến server, định cho phép gói tin đến firewall có dịch vụ có sử dụng thư viện Log4j; v.v Vì qua nó, để hướng đến đích gói tin, kẻ cơng chèn mã khai thác lỗ hổng hay không Log4j vào thành phần HTTP headers HTTP body nên nghiên cứu Hình 2.3 sơ đồ minh họa mạng doanh sử dụng firewall lọc gói vừa để nghiệp, có sử dụng firewall lọc gói bảo vệ CI server vừa giảm thiểu rủi ro cổng kết nối mạng, gói tin từ lỗ hổng Log4Shell tồn server mạng Internet vào mạng bên từ mạng gây bên Internet phải qua firewall N.K.Tuấn, N.T.Tâm, T.H.M.Đăng, H.P.Cường / Tạp chí Khoa học Cơng nghệ Đại học Duy Tân 3(58) (2023) 12-22 17 Hình 2.3 Sơ đồ mạng với có mặt firewall lọc gói Chính sách truy cập mạng mạng doanh Xin nhắc lại rằng, Reverse proxy server nghiệp sau: Chỉ có gói tin từ server đóng vai trị cầu nối máy Internet vào vùng mạng client máy server Server kiểm soát 192.168.2.0/24 - vùng DMZ mạng doanh request gửi từ client, điều phối nghiệp - không phép vào vùng mạng request tới server phù hợp, để 10.10.10.0/24, vùng mạng người dùng bên request xử lý Khi server xử lý Tuy nhiên, dòng traffic từ vùng xong, trả response cho Reverse proxy, mạng người dùng vùng mạng DMZ có Reverse proxy có trả response cho client thể mạng Internet gửi request Hệ thống tích hợp liên tục nội đề xuất Trong nghiên cứu này, sử dụng công cụ Iptables kết hợp với công cụ Nginx 3.1 Sơ đồ hệ thống (Reverse proxy) để xây dựng firewall cho hệ thống đề xuất [11], vừa bảo vệ server Trong phần này, đề xuất hệ bên mạng, vừa ngăn chặn cơng thống tích hợp liên tục nội bộ, có tính đến yếu tố vào lỗ hổng Log4j đảm bảo an toàn cho CI server Repository server Hình 3.1 sơ đồ mạng hệ thống 18 N.K.Tuấn, N.T.Tâm, T.H.M.Đăng, H.P.Cường / Tạp chí Khoa học Cơng nghệ Đại học Duy Tân 3(58) (2023) 12-22 Hình 3.1: Sơ đồ hệ thống tích hợp liên tục nội đề xuất Trong sơ đồ này: Máy Jenkins server đóng 3.2 Cấu hình hệ thống vai trị CI Server; Máy Gitlab server đóng vai trị Server Repository; Web server Mail Yêu cầu cấu hình hệ thống đề xuất server hai thành phần mạng bao gồm: Intranet; Router sử dụng cho việc kết nối mạng nội vào Internet; Firewall sử - Thiết lập địa IP cho máy tính dụng cho việc bảo vệ server, bảo vệ vùng thiết bị mạng theo lược đồ địa IP mạng bên thực chức định (Hình 3.1) Máy tính Developer Reverse proxy server cho http, https định nhận địa IP động (một DHCP số giao thức khác (phục vụ cho việc ngăn chăn server bên mạng nội đảm nhận việc công vào lỗ hổng CVE-2021-44228) phân phối địa IP động này) Vùng mạng chứa Web server Mail server - Cài đặt Jenkins, plugin cần thiết, lên thường gọi vùng DMZ Thơng thường, máy tính chọn làm Jenkins server, máy kết nối từ Internet vào server phải cài đặt Java trước đó, thiết DMZ phép, đó, Gitlab server lập thơng số cấu hình cho server Chú đặt DMZ với mục đích cho phép developer ý chọn port dịch vụ (service port number) phù kết nối commit mã nguồn lên Server hợp cho Jenkins (Port number mặc định Repository họ bên mạng Jenkins 8080, nhiên thay nội Người dùng Internet, kể đổi port sau xong cài đặt Jenkins) Manager Developer, không phép truy cập trực tiếp đến Jenkins server, lý - Cài đặt Gitlab, plugin liên quan, lên mà Jenkins server đặt vùng máy tính chọn làm Repository server, mạng riêng, để bảo vệ Router thiết lập thơng số cấu hình cho server Firewall Nhớ lưu lại thông tin liên quan đến tài khoản quản trị Gitlab tạo trình cài đặt để đổi mật đăng nhập N.K.Tuấn, N.T.Tâm, T.H.M.Đăng, H.P.Cường / Tạp chí Khoa học Cơng nghệ Đại học Duy Tân 3(58) (2023) 12-22 19 Gitlab để thực chức người quản tạo kết nối từ Jenkin server đến Web trị hệ thống sau Port number mặc định server Gitlab 80, nhiên thay đổi port sau xong cài đặt Gitlab Dịch vụ Với sơ đồ mạng hệ thống đề xuất, việc FirewallD Gitlab tắt, chúng tơi cấu hình cho firewall Iptables, thiết lập bảng sử dụng firewall riêng, firewall IpTables luật lọc gói cho nó, quan trọng Phải thực kết hợp Nginx bước cấu hình “Chính sách truy cập mạng”, hay gọi “Chính sách an - Kết nối Jenkins server với Gitlab server: ninh mạng”, hệ thống có hiệu lực Khi Trước hết phải tạo cặp khóa xác thực, để từ đó, Firewall dựa vào bảng luật lọc gói để Jenkin server kết nối đến Gitlab thực chức bảo vệ mạng, bảo vệ server server đặc biệt ngăn chặn công vào lỗ hổng bảo mật CVE-2021-44228 - Kết nối Jenkins server với Web server: Jenkins server Trước hết phải tạo cặp khóa xác thực, để Bảng 3.1: Bảng luật lọc gói firewall Iptables Order IP Source Port Source IP Destination Port Destination Allow/Deny Internet-dev Any 192.168.2.2 80, 443 Allow Any 192.168.2.3 80, 443 Allow Any Any 192.168.2.4 587 Allow Any Any 192.168.3.1 8080 Allow Manager’s IP Any 192.168.2.2 22 Allow 192.168.3.2 Any 192.168.2.2 80, 443 Allow 192.168.1.0/24 Any Any Allow 192.168.1.0/24 Any Internet Any Allow 192.168.2.4/24 Any 192.168.1.0/24 Any Allow 10 192.168.2.0/29 Any Any Deny Any Internet Any - Chính sách truy cập mạng thiết kế Cuối cùng, cài đặt Nginx lên máy chạy dạng bảng luật (Bảng 3.1), cấu firewall Iptables, vơ hiệu chức Default hình thành lọc firewall Iptable Firewall virtual host Nginx triển khai chức dựa vào bảng luật phép Reverse proxy (bằng cách sửa file kết nối từ Internet hướng đến server cấu hình nginx.conf) Các luật sau cần vùng DMZ vào mạng Đặc biệt, để thiết lập Nginx để yêu cầu theo kết nối đến Gitlab server dịng traffic mang dõi chặn dịng traffic mà payload giao thức HTTPS port đích 443 chứa nội dung khai thác lỗ hổng Log4j Firewall cho qua Điều với Jenkins server kết nối xuất phát từ bên mạng nội Sau số lệnh lọc luật: server { [ ] ## Block Log4j set $block_log4j 0; if ($query_string ~ "\$\{jndi\:") { set $block_sql_injections 1; 20 N.K.Tuấn, N.T.Tâm, T.H.M.Đăng, H.P.Cường / Tạp chí Khoa học Công nghệ Đại học Duy Tân 3(58) (2023) 12-22 } if ($query_string ~ "${jndi:ldap:") { set $block_sql_injections 1; } if ($query_string ~ "\$\{jndi\:(ldap[s]?|rmi|dns|nis|iiop|corba|nds|http):/[\/]?[^\n]+") { set $block_sql_injections 1; } [ ] if ($block_sql_injections = 1) { return 403; } Trên số lệnh lọc bản, cho 8080, từ Jenkins server đến máy tính mục tiêu chặn cơng vào lỗ hổng Log4j, manager developer firewall cho luật cần thiết lập Ngnix Dễ thấy, phép qua payload traffic định hướng đến Mọi dịng traffic, xác request, Jenkins server, mạng bỏi giao thức http định hướng đến Jenkins server, mang https, có chứa chuỗi ký tự giao thức http https bị kiểm soát “jndi\:”, “jndi:ldap:”, “jndi\:(ldap[s]?|rmi|)”,… Nginx server Server chặn lại dịng Ngnix trả mã lỗi 403: Trang web bị traffic mà payload chứa nội dung phục chặn truy cập vụ cho mục đích khai thác lỗ hổng Log4j 3.3 Hoạt động hệ thống tồn plugin mà Jenkins sử dụng Nginx proxy dựa vào tập luật Trong phần này, không bàn thiết lập để thực điều Như vậy, hoạt động hệ thống tích hợp liên tục đề Jenkins server không bảo vệ để chống xuất, mà bàn hoạt động firewall lọc lại cơng vào server gói, kết hợp reverse proxy, hệ thống này, mà bảo vệ để chống lại Cách mà firewall lọc gói sử dụng để bảo cơng vào lỗ hổng Log4j tồn vệ hệ thống mạng nội bên plugin server hệ thống đề xuất; cách mà reverse proxy server ngăn chặn Thảo luận hệ thống đề xuất cơng vào lỗ hổng Log4j trình bày Hệ thống tích hợp liên tục nội đề Cụ thể sau: xuất triển khai nghiên cứu đảm Với bảng luật lọc gói thiết lập, xét bảo yêu cầu mạng Intranet cách tổng quát, firewall cho phép doanh nghiệp làm phần mềm, định dòng kết nối định hướng đến vùng DMZ hướng phát triển sản phẩm phần mềm theo qua Tuy nhiên, để đến Gitlab server phương pháp DevOps, áp dụng quy trình dịng traffic phải mang giao thức CI/CD https cổng đến 443 Nhờ điều mà Vì Gitlab server đặt mạng nội nên developer bên mạng nội bộ, lẫn bên tốc độ tính sẵn sàng hệ thống cao ngồi Internet kết nối commit mã Điều góp phần giảm chi phí cần cho nguồn đến Gitlab server Firewall cho hoạt động hệ thống tiết kiệm phép kết nối trao đổi liệu trực tiếp không gian làm việc doanh nghiệp (vì Jenkins server Gitlab server Dịng Manager Developer làm việc nhà, traffic mang message, giao thức https port kết nối với Gitlab server và/hoặc Jenkins server N.K.Tuấn, N.T.Tâm, T.H.M.Đăng, H.P.Cường / Tạp chí Khoa học Cơng nghệ Đại học Duy Tân 3(58) (2023) 12-22 21 thông qua Internet); Toàn hệ thống bên bộ, bảo vệ CI server, bảo vệ Repository server trong, đặc biệt Jenkins server Gitlab chống công từ bên ngồi mà cịn bảo vệ server, bảo vệ Firewall Reverse Jenkins server lỗ hổng CVE-2021-44228 proxy Mọi truy cập từ Internet vào mạng tồn chưa vá kịp thời nội kiểm sốt, có dịng traffic định hướng vào vùng DMZ Chúng sử dụng công cụ nguồn mở qua Firewall Người dùng Internet, mà Jenkins, Gitlab, IpTables Nginx cho mơ hình khơng phải manager developer đề xuất, đặc trưng mơ hình dự án phần mềm doanh nghiệp có tính tổng quát cao nên sử khó kết nối đến Gitlab server; Chỉ dụng công cụ nguồn mở tương tự để triển có kết nối hai chiều Jenkins server khai mơ hình tính thực tế tính khả thi Gitlab server phép Tức là, mô hình đảm bảo cơng nhằm vào Jenkins server, thành phần trọng yếu hệ thống CI, khó vượt Tài liệu tham khảo qua kiểm soát ngăn chặn Firewall, Reverse proxy Máy tính Manager [1] Mojtaba S., Muhammad A B and Liming Z., Developer nhận message từ “Continuous Integration, Delivery and Deployment: Jenkins server, khơng tạo kết nối trực A Systematic Review on Approaches, Tools, tiếp đến server Challenges and Practices”, IEEE Access, vol 5, 2017, DOI: 10.1109/ACCESS.2017.2685629 Đặc biệt, dịng traffic có chủ đích khai thác lỗ hổng Log4Shell khơng thể [2] Donca C., Stan O P., Misaros M., Gota D And qua firewall, bị reverse proxy chặn lại theo Miclea L., “Method for Continuous Integration and lệnh lọc thiết lập Đây Deployment Using a Pipeline Generator for Agile nhiệm vụ quan trọng firewall, Software Projects”, Sensors (Basel), vol 22, no 12, đóng góp nghiên 2022, DOI: 10.3390/s22124637 cứu [3] Sree P K., Rajkumar P., “Survey on Continuous Tuy nhiên, để cài đặt, cấu hình vận hành Integration, Deployment and Delivery in Agile hệ thống địi hỏi doanh nghiệp phải có and DevOps Practices”, International Journal of nhân có chun mơn lĩnh vực quản trị Computer Sciences and Engineering, vol 4, iss 4, mạng, an ninh mạng kiện toàn hệ thống pp 213-216, 2016 mạng [4] Ioannis K M., Imtiaz H., Claudia A., Fred H., Yann Kết luận A., Luc D., Xian Z., Christopher J W., Jeremy L J., Nicholas H., John T., and Christian N P., ”Jenkins- Trong nghiên cứu này, đề xuất CI, an Open-Source Continuous Integration System, cài đặt thành công hệ thống mạng tích as a Scientific Data and Image-Processing hợp liên tục nội với ba yếu tố đặc trưng: i) Platform”, Society for Laboratory Automation and Cả CI server Repository server đặt Screening, SLAS Discovery, vol 12, pp 1-12, 2016, mạng nội nên tốc độ tính sẵn sàng hệ DOI: 10.1177/1087057116679993 thống đảm bảo mức cao; ii) Đảm bảo an toàn cho CI server Repository server [5] Pranoday P D.,“CI/CD Pipeline Using Jenkins theo hướng tiếp cận sử dụng firewall lọc gói kết Unleashed - Solutions While Setting Up CI/CD hợp với reverse proxy server iii) Firewall Processes” (Book), Apress Berkeley, CA, Edition không thực chức bảo vệ mạng nội number 1, 2022, DOI: 10.1007/978-1-4842-7508-5 [6] Sriniketan M., Vaibhav B., “Continuous Integration and Continuous Deployment Pipeline Automation Using Jenkins Ansible”, IEEE Explore, International Conference on Emerging Trends in Information Technology and Engineering, 2020, DOI: 10.1109/ic-ETITE47903.2020.239 [7] Rayanagoudar S.F., Hampannavar P S., Pujari J.D., Parvati V K.,“Enhancement of CICD Pipelines with Jenkins BlueOcean”, International Journal Of Computer Sciences And Engineering, vol 6, iss 6, pp.1048-1052, 2018, DOI: 10.26438/ijcse/v6i6.10481053 22 N.K.Tuấn, N.T.Tâm, T.H.M.Đăng, H.P.Cường / Tạp chí Khoa học Cơng nghệ Đại học Duy Tân 3(58) (2023) 12-22 [8] Behind Java, “Log4J Vulnerability (Log4Shell) Security”, Journal of Multidisciplinary Engineering Explained - for Java developers”, Available at: Science and Technology, vol 2, iss 3, pp 408-411, https://www.incibe-cert.es/en/blog/log4shell- 2015 analysis-vulnerabilities-log4j, 2021 [Accessed 27 Feb 2023] [11] Alex Tatistcheff, “Protecting against Log4j with Secure Firewall & Secure IPS”, Available at: [9] Mohammad I., Abdulrahman A A., Bilal A., “Role https://blogs.cisco.com/security/protecting-against- of firewall Technology in Network Security”, log4j-with-secure-firewall-secure- International Journal of Innovations & Advancement ips?scid=6WCg7b7JiR3&id=1RqLEkeW8BL, 2021 in Computer Science, vol 4, iss 12, pp 3-6, 2015 [Accessed 27 Feb 2023] [10] Sahithi D., Tarik E., “Firewalls Implementation in Computer Networks and Their Role in Network

Ngày đăng: 27/02/2024, 15:11

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w