không có dịch vụ chính
thức từ Apache
Nginx cũng tương tự Apache về các phương thức hỗ trợ. Công ty đằng sau Nginx cung cấp một sản phẩm thương mại được gọi là Nginx Plus.Với một loạt các tính năng bổ sung:
load-balancing, media streaming, và monitoring.
Đồng Thị Linh - K19HTTTB 43
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS
Bảng 3.1. So sánh Apche và Nginx
Cả NGINX và Apache đều là hai máy chủ ủy quyền có thể phục vụ các máy chủ
web trong nhiều lĩnh vực khác nhau và đều có những thế mạnh riêng biệt. Với tốc độ xử lý nhanh của NGINX có thể xử lý tất cả các yêu cầu từ người dùng để đảm bảo rằng máy chủ không bị quá tải, gây tê liệt hệ thống.
3.1.2. Giới thiệu về OpenSSL
OpenSSL là một thư viện mã nguồn mở được sử dụng để mã hóa dữ liệu và triển khai các giao thức mạng. Được phát hành lần đầu tiên vào năm 1998, nó có sẵn trong các hệ thống Linux, Windows, macOS và BSD. OpenSSL cho phép người dùng
thực hiện các tác vụ liên quan đến SSL khác nhau, bao gồm CSR (Yêu cầu ký chứng chỉ), tạo khóa riêng và cài đặt chứng chỉ SSL.
OpenSSL hỗ trợ:
- Nhiều thuật toán mã hóa: AES, DES, 3DES, Blowfish, CAST, Idea, RC2, RC5.
Hình 3.6. Kiến trúc mới của hệ thống NCTS
Máy chủ ủy quyền được xây dựng đặt trước vùng Server đảm bảo rằng tất cả các kết nối từ Client lên Server đều phải đi qua máy chủ ủy quyền. Máy chủ ủy quyền sẽ thay thế Web Server giao tiếp với Client bằng sử dụng bộ giao thức SSL/TLS dựa trên OpenSSL.
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS
- Mã hóa dòng: RC4.
- Các giải thuật băm: MD2, MD4, MD5, SHA-1, SHA-224, SHA-256 ... - MAC: HMAC, MDC2
- Các giải thuật mã hóa công khai: DH, DSA, RSA, ECC, Diffie-Hellman. OpenSSL được xây dựng bởi thành bốn thành phần chính:
- Libcrypto: Đây là thư viện cốt lõi để cung cấp việc triển khai nhiều nguyên
thủy mã hóa. Ngoài ra, nó cung cấp một tập hợp các dịch vụ hỗ trợ được
libssl và
libcrypto sử dụng, cũng như triển khai các giao thức như CMS và OCSP. - Công cụ: Chức năng của libcrypto có thể được mở rộng thông qua công cụ
API.
Thông thường các công cụ là các module có thể tải động được đăng ký với libcrypto và sử dụng các móc có sẵn để cung cấp các triển khai thuật toán mã hóa. Thông thường đây là các triển khai thay thế của các thuật toán đã được libcrypto cung
cấp (ví dụ: để cho phép tăng tốc phần cứng của thuật toán), nhưng chúng cũng có thể bao gồm các thuật toán không được triển khai trong OpenSSL mặc định (ví dụ: công cụ GOST thực hiện họ thuật toán GOST). Một số công cụ được cung cấp như một phần của bản phân phối OpenSSL và một số được cung cấp bởi các bên thứ ba bên ngoài (again, GOST).
- Libssl: Thư viện này phụ thuộc vào libcrypto và thực hiện các giao thức TLS
và DTLS.
- Các ứng dụng : Các ứng dụng này là một tập hợp các công cụ dòng lệnh sử
dụng các thành phần libssl và Iibcrypto cơ bản để cung cấp một bộ mã hóa và
các tính
năng khác như:
Tạo và kiểm tra khóa và tham số
Đồng Thị Linh - K19HTTTB 45
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS Kiểm tra ASN.1.
3.1.3. Mô tả kiến trúc mới của hệ thống
3.1.1. Cài đặt và thiết lập
3.1.4.1. Cấu hình cơ bản của máy chủ ủy quyền
- Bộ vi xử lý dành riêng cho máy chủ
- Bộ nhớ trong RAM tối thiểu 64GB, bộ nhớ ngoài tối thiểu 1TB - Hệ điều hành mã nguồn mở Ubuntu 18.04 LTS
- Cài đặt và cấu hình sẵn hai card mạng, trong đó ở card mạng thứ nhất có địa chỉ IP công khai và cổng đón yêu cầu từ bên ngoài Internet là 10.14.136.3:1234;
ở card mạng thứ hai có địa chỉ IP nội bộ là 192.168.1.2 để kết nối với một hoặc một số máy chủ dữ liệu thực.
3.1.4.2. Cài đặt và thiết lập
a. Cập nhật hệ thống
sudo apt update && sudo apt upgrade -y__________________________
sudo apt install build-essential -y_________________________________
c. Tải và giải nén NGINX và các công cụ cần thiết
Wget https://nginx.Org/download/nginx-1.16.1.tar.gz && tar
zxvf nginx-1.16.1.tar.gz
# PCRE version 4.4 - 8.40
Wget https://ftp.pcre.org/pub/pcre/pcre-8.40.tar.gz && tar xzvf pcre-8.40.tar.gz
# zlib version 1.1.3 - 1.2.11
Wget http://www.zlib.net/zlib-1.2.11.tar.gz && tar xzvf zlib- 1.2.11.tar.gz
# OpenSSL version 1.0.2 - 1.1.0
Wget https://www.openssl.org/source/openssl-1.K1g.tar.gz && tar xzvf openssl-1.1.1g.tar.gz_____________________________________ d. Cấu hình và cài đặt ./configure --prefix=/usr/share/nginx \ --sbin-path=/usr/sbin/nginx \ --modules-path=/usr/lib/nginx/modules \ --conf-path=/etc/nginx/nginx.conf \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --pid-path=/run/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --user=www-data \ --group=www-data \ --build=Ubuntu \ --http-client-body-temp- path=/var/lib/nginx/body \ --http-fastcgi-temp- path=/var/lib/nginx/fastcgi \ --http-proxy-temp- path=/var/lib/nginx/proxy \ --http-scgi-temp-path=/var/lib/nginx/scgi \ --http-uwsgi-temp- path=/var/lib/nginx/uwsgi \ ___________________--with-openssl=../openssl-1.1.1g \______________ Đồng Thị Linh - K19HTTTB 46
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS
--with-openssl-opt=enable- ec_nistp_64_gcc_128 \ --with-openssl-opt=no-nextprotoneg \ --with-openssl-opt=no-weak-ssl-ciphers \ --with-openssl-opt=no-ssl3 \ --with-pcre=../pcre-8.40 \ --with-pcre-jit \ --with-zlib=../zlib-1.2.11 \ --with-compat \ --with-file-aio \ --with-threads \ --with-http_addition_module \ --with-http_auth_request_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_mp4_module \ --with-http_random_index_module \ --with-http_realip_module \ --with-http_slice_module \ --with-http_ssl_module \ --with-http_sub_module \ --with-http_stub_status_module \ --with-http_v2_module \ --with-http_secure_link_module \ --with-mail \ --with-mail_ssl_module \ --with-stream \ --with-stream_realip_module \ --with-stream_ssl_module \ --with-stream_ssl_preread_module \ --with-debug \
--with-cc-opt='-g -O2 -fPIE -fstack- protector-strong -Wformat -Werror=format-security -Wdate- time -D_FORTIFY_SOURCE=2' \
--with-ld-opt='-Wl,-Bsymbolic-functions - fPIE -pie -Wl,-z,relro -Wl,-z,now'
make
______sudo make install___________________________________________
e. Kiểm tra phiên bản NGINX
Đồng Thị Linh - K19HTTTB 47
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS
sudo nginx -v && sudo nginx -V
# nginx version: nginx/1.16.1 (Ubuntu)
# built by gcc 5.4.0 20160609 (Ubuntu 18.04 LTS)
# built with OpenSSL 1.1.1g
# TLS SNI support enabled
# configure arguments: --prefix=/etc/nginx . . .
# . . .
# . . . sudo nginx -t
# Will throw this error nginx: [emerg] mkdir() "/var/lib/nginx/body" failed (2: No such file or directory)
# Just create directory
______mkdir -p /var/lib/nginx && sudo nginx -t_____________________
f. Tạo tệp đơn vị systemd cho NGINX
sudo nano /etc/systemd/system/nginx.service [Unit]
Description=A high performance web server and a reverse proxy server
After=network.target [Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;' ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
T imeoutStopSec=5 KillMode=mixed [Install]
WantedBy=multi-user.target_____________________________________
g. Bắt đầu và kích hoạt dịch vụ NGINX
Đồng Thị Linh - K19HTTTB 48
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS
sudo systemctl start nginx.service && sudo systemctl enable
nginx.service_____________________________________________________
h. Kiểm tra xem NGINX có tự động khởi động không
sudo systemctl is-enabled nginx.service
#
enabled_____________________________________________________
i. Kiểm tra xem NGINX có đang hoạt động không
sudo systemctl status nginx.service ps aux | grep nginx
curl -I I27.0.0.1
____________________________________________________
j. Khởi động lại VPS Ubuntu để xác minh rằng NGINX tự động khởi động:
sudo shutdown -r now____________________________________________
k. Tạo hồ sơ ứng dụng UFW NGINX
sudo nano /etc/ufw/applications.d/nginx [Nginx HTTP]
title=Web Server (Nginx, HTTP)
description=Small, but very powerful and efficient web server ports=80/tcp
[Nginx HTTPS]
title=Web Server (Nginx, HTTPS)
description=Small, but very powerful and efficient web server ports=443/tcp
[Nginx Full]
title=Web Server (Nginx, HTTP + HTTPS)
description=Small, but very powerful and efficient web server ports=80,443/tcp_____________'____________________________________
l. Liệt kê danh sách ứng dụng của máy chủ ủy quyền
sudo ufw app list
# Available applications: # Nginx Full # Nginx HTTP # Nginx HTTPS________________________________________________ Đồng Thị Linh - K19HTTTB 49
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS
#HTTPS server # server { listen 1234 ssl; location ~ \.php$ { proxy_pass 192.168.1.100; } } '"________________________________________________________
Trong đó, địa chỉ IP của máy chủ ủy quyền trong mạng nội bộ là 192.168.1.2, còn địa chỉ IP của máy chủ thực là 192.168.1.100.
m. Thiết lập kết nối an toàn SSL/TLS cho máy chủ ủy quyền
#HTTPS server # server { listen 1234 ssl; #ssl configuration ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_certificate /etc/ssl/certs/server.crt; ssl_certificate_key /etc/ssl/private/server.key; ssl_protocols TLSv1.2; ssl_prefer_server_ciphers on; }____________________________________________________________
Trong đó, chứng thư số server.crt và khóa mật server.key tự tạo hoặc được cấp bởi một tổ chức chứng thực tin cậy CA.
Đồng Thị Linh - K19HTTTB 50
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS
3.1. Xây dựng bộ giao thức đảm bảo an toàn kết nối SSL/TLS trên
máy trạm
dựa trên công nghệ mạng riêng ảo và OpenSSL 3.2.1. Công nghệ mạng riêng ảo Stunnel
Stunnel là phần mềm VPN mã nguồn mở có vai trò thiết lập kênh truyền dữ liệu
an toàn giữa máy chủ và máy khách. Stunnel sử dụng các công cụ mật mã trong bộ OpenSSL để đóng gói và mã hóa các thông điệp truyền thông trong mô hình TCP/IP.
3.2.1.1. Tính năng của Stunnel
- Tối ưu hóa bảo mật, tính di động và khả năng mở rộng
- Hỗ trợ các tính năng bảo mật OpenSSL: Kiểm soát các truy cập với TLS - PSK và chứng chỉ, thu hồi chứng chỉ CRL và OCSP,...
- Chuyển hướng kết nối máy khách TLS về lỗi xác thực - Hỗ trợ IPv6
3.2.1.2. Cách thức hoạt động của Stunnel
Stunnel có thể cài đặt được ở cả phía máy chủ và máy khách. Tuy nhiên, hầu hết các web server đều hỗ trợ tích hợp bộ giao thức đảm bảo an toàn kết nối SSL/TLS
nên Stunnel chủ yếu được cài đặt phía máy khách phục vụ cho những ứng dụng không
thể tích hợp SSL/TLS. Ở phía máy khách, Stunnel lắng nghe các kết nối không được mã hóa từ ứng dụng và chuyển tiếp chúng qua kết nối SSL/TLS được mã hóa gửi đến
máy chủ ở xa.
3.2.2. Cài đặt Stunnel
3.2.1. Cấu hình hệ thống
Sau khi tiến hành cài đặt xong, chúng ta cần thiết lập các tham số cho ứng dụng
NCTS và công cụ stunnel trên máy khách.
3.2.3.1. Thiết lập trên ứng dụng NCTS
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS
Hình 3.7. Cài đặt Stunnel
Trong quá trình cài đặt, chương trình sẽ sinh các khóa bí mật và công khai kèm với chứng thư số cần thiết phục vụ cho bộ giao thức SSL/TLS cho phía máy khách.
Hình 3.8. Stunnel sinh khóa bí mật và khóa công khai kèm chứng thư số
Đồng Thị Linh - K19HTTTB 53
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS
chủ ủy quyền, còn giữa máy chủ thực và máy chủ ủy quyền sẽ kết nối thông qua một mạng nội bộ riêng tư độc lập.
; TLS front-end to a web server [https]
accept = 127.0.0.1:8080 connect = 10.14.136.3:1234
cert = stunnel.pem_______________________________________________
Hình 3.10. Cấu hình Stunnel trên máy khách
Nhắc lại rằng, nguyên lý làm việc của Stunnel là lắng nghe các kết nối không được mã hóa từ ứng dụng và chuyển tiếp chúng qua kết nối SSL/TLS được mã hóa gửi đến máy chủ ở xa. Do đó, ứng dụng NCTS cần phải trỏ tới địa chỉ IP và cổng port
của máy localhost (127.0.0.1:8080) trên chính máy khách chứa Stunnel.
Hình 3.9. Ứng dụng NCTS trỏ tới địa chỉ IP của máy khách chứa Stunnel
3.2.3.1. Thiết lập trên phần mềm Stunnel
Đối với phần mềm Stunnel, chúng ta cần thiết lập cổng lắng nghe “accept=127.0.0.1:8080” nơi mà ứng dụng NCTS gửi dữ liệu tới. Tiếp theo, những dữ liệu này sau khi được Stunnel mã hóa sẽ được chuyển tiếp cho máy chủ ủy quyền của NCTS nên địa chỉ đích của máy chủ này cần được thiết lập bởi câu lệnh “connect=10.14.136.3: 1234”. Chú ý rằng đây là địa chỉ IP công khai của máy
Đồng Thị Linh - K19HTTTB 54
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS
3.2. Thiết lập module phát hiện tấn công dựa trên phần mềm tường lửa
ModSecurity
3.3.1. Giới thiệu ModSecurity
Hình 3.11. Mô hình sử dụng Mod security
ModSecurity là phần mềm tường lửa ứng dụng web mã nguồn mở được Ivan Ristic phát triển nhằm lọc các lưu lượng HTTP dựa trên một tập quy tắc. ModSecurity
là một module mở rộng cho các chương trình Web server như Apache, Nginx, IIS có khả năng chống lại hàng loạt các cuộc tấn công đã biết và chưa biết trước khi chúng tác động vào ứng dụng web như XSS, SQL Injiection, XXs Session hacking, ...
Máy chủ web giúp ModSecurity thực hiện các tác vụ liên quan đến cơ sở hạ tầng như:
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS
-Tách các luồng kết nối vào (inbound connection stream) thành các HTTP request.
- Giải mã SSL.
- Bóc tách gói tin HTTP request ra thành từng phần
- Gọi đến ModSecurity, chọn các ngữ cảnh cấu hình chính xác
- Tách phần body của HTTP request nếu cần thiết.
ModSecurity sử dụng cách tiếp cận hỗn hợp (hybrid approach) nhờ vào cơ chế bóc tách gói tin HTTP (HTTP parsing), đây là một cách tiếp cận rất hiệu quả vì nó làm giảm khối lượng công việc trùng lặp khi xử lý gói tin HTTP. Một vài điểm bất lợi trong cách tiếp cận này đó là không phải lúc nào ModSecurity cũng có thể truy cập đến luồng dữ liệu thô (raw data) vì web server có thể không xử lý các dữ liệu trong một vài cơ chế an toàn. Trong trường hợp web server sử dụng Apache, cách tiếp cận hỗn hợp có một vài điểm cần lưu ý đó là:
- Các dòng request và header thường trả về NUL-byte. Đây thường không ảnh hưởng đến hoạt động của ModSecurity vì những gì Apache không thể nhìn thấy
không gây ảnh hưởng đến module hoặc ứng dụng nào. Đây chỉ là một hành vi của
Apache giúp che đậy thông tin.
- Apache thưởng chuẩn hóa các request header, kết hợp nhiều header sử dụng cùng một tên và thu gọn các header thường kéo dài nhiều hơn hai dòng. Bước chuẩn
hóa này có thể gây khó khăn trong việc phát hiện các dấu hiệu lẩn tránh tinh vi.
- Cơ chế xử lý nhanh các request của Apache làm cho ModSecurity không thể xử lý các request này ngoài việc nhận diện chúng trong bước ghi nhật ký. Các request
Khóa luận tốt nghiệp Nghiên cứu và đề xuất giải pháp đảm bảo an toàn thông tin cho phần mềm phục vụ quản lí hàng hóa của NCTS
3.3.2. Chức năng chính
ModSecurity cung cấp bốn chức năng chính như sau:
- Parsing - phân tích: ModSecurity sẽ cố gắng thu thập nhiều dữ liệu nhất có
thể. Các định dạng dữ liệu được hỗ trợ bởi các trình phân tích cú pháp an toàn (security-conscientious parser) sẽ bóc tách từng bit dữ liệu và lưu trữ chúng