Cách Reverse Proxy tăng cường bảo mật cho ứng dụng web của bạn

Proxy, Dec-13-20215 phút đọc

Không có gì bí mật khi các doanh nghiệp đang ngày càng sử dụng các ứng dụng web trong thời đại ngày nay. Các ứng dụng web giúp thuận tiện cho việc hợp lý hóa hoạt động của công ty, nâng cao hiệu quả và do đó tiết kiệm chi phí cho các tác vụ mà nếu không sẽ được thực hiện thủ công. Các ứng dụng web dễ gặp rủi ro và tấn công mạng mặc dù chúng ngày càng phổ biến. Bài viết này sẽ cung cấp cái nhìn sâu sắc

Không có gì bí mật khi các doanh nghiệp đang ngày càng sử dụng các ứng dụng web trong thời đại ngày nay. Các ứng dụng web giúp thuận tiện cho việc hợp lý hóa hoạt động của công ty, nâng cao hiệu quả và do đó tiết kiệm chi phí cho các tác vụ mà nếu không sẽ được thực hiện thủ công.

Các ứng dụng web dễ gặp rủi ro và tấn công mạng mặc dù chúng ngày càng phổ biến. Bài viết này sẽ cung cấp cái nhìn sâu sắc về các cuộc tấn công đáng kể mà một ứng dụng web dễ bị tấn công. Sau đó, bạn sẽ khám phá cách bạn có thể kết hợp proxy ngược để giảm thiểu các mối đe dọa.

Nhưng trước khi đi sâu vào các khía cạnh bảo mật, chúng ta hãy xem kiến trúc của một ứng dụng web điển hình.

Tổng quan về kiến trúc ứng dụng web

Ứng dụng web

Trong hầu hết các trường hợp, các ứng dụng web bao gồm các máy chủ web và các trang web. Máy chủ web chấp nhận các yêu cầu từ máy khách (trình duyệt web của bạn), mà máy chủ web xử lý và trả về phản hồi cho máy khách.  

Trong khi phía máy chủ được mã hóa bằng các ngôn ngữ lập trình động như PHP, Python, ASP.NET, v.v., phía máy khách được mã hóa bằng HTML, CSS và JavaScript.Giao tiếp giữa máy khách và máy chủ diễn ra thông qua giao thức HTTP.

Bạn có thể tham khảo bài viết này để biết thêm thông tin về cấu trúc của các ứng dụng web. Hình dưới đây cho thấy một giao tiếp máy khách-máy chủ điển hình.

Tất cả các giao tiếp dường như đơn giản trong sơ đồ trên, với các yêu cầu đi qua lại giữa máy khách và máy chủ. Tuy nhiên, điều này không phải lúc nào cũng đúng.

Thật không may, các ứng dụng web sử dụng thiết kế trên có thể bị tấn công mạng bởi người ngoài giữa máy khách và máy chủ.

Chúng ta hãy xem xét một số thống kê tấn công mạng thú vị nhất trước khi chúng ta đi sâu vào bản chất của các cuộc tấn công này.

Các mối đe dọa đáng kể đối với một ứng dụng Web là gì?

Số liệu thống kê thú vị về các cuộc tấn công mạng

Theo dữ liệu lỗ hổng ứng dụng web của Positive Technologies từ năm 2018, ngành Tài chính và Ngân hàng chiếm 28% tổng số ứng dụng web bị tấn công. Nó cũng chỉ ra rằng 14% các cuộc tấn công mạng nhắm vào các ứng dụng trực tuyến trong ngành Viễn thông và Sản xuất, với 11% nhắm vào các ứng dụng vận tải.

Các ngành công nghiệp khác phải đối mặt với rủi ro bao gồm các tổ chức chính phủ (11%), CNTT, thương mại điện tử và các phương tiện truyền thông đại chúng.

Theo như các loại tấn công có liên quan, một báo cáo khác, F5, nói rằng các cuộc tấn công cross-site scripting (từ 4% đến 54%) và SQL injection (SQLi) (từ 15% đến 76%) đang gia tăng. 

Chúng ta có thể đi đến kết luận từ những thống kê này rằng một số biện pháp nghiêm ngặt được yêu cầu để bảo vệ các ứng dụng web khỏi các lỗ hổng. Một số lỗi bảo mật xảy ra do các vấn đề trong mã hóa, trong khi các lý do khác có thể là do cơ sở hạ tầng không đầy đủ được sử dụng bởi ứng dụng web. Đây là nơi Tường lửa ứng dụng web (WAF) xuất hiện có thể giảm thiểu các lỗ hổng bằng cách lọc các gói, chặn lưu lượng HTTP và ghi nhật ký trái phép. 

Chúng tôi sẽ khám phá nó thêm bên dưới. Trước đó, một cái nhìn tổng quan ngắn gọn về các mối đe dọa bảo mật đáng kể.

SQL injection (SQLi)

SQLi -SQL injection là một lỗ hổng bảo mật web cho phép kẻ tấn công thao tác các truy vấn SQL mà một ứng dụng thực hiện cho cơ sở dữ liệu. Bằng cách đó, họ có quyền truy cập vào thông tin có giá trị tiềm năng mà bất kỳ ai cũng không thể tiếp cận dễ dàng. 

Một ví dụ đơn giản, quen thuộc nhất sẽ là tận dụng đầu vào của người dùng không được vệ sinh để có lợi cho tin tặc. Giả sử rằng có một hộp văn bản yêu cầu ID người dùng. Sau đó, dựa trên ID người dùng, truy vấn truy xuất tất cả thông tin thuộc về người dùng đó.

Vì vậy, giả sử trong hộp văn bản nếu người dùng đã nhập bên dưới:


ID người dùng: 228 hoặc 1 = 1

Sau đó, truy vấn kết quả sẽ như sau:

CHỌN * TỪ NGƯỜI DÙNG TRONG ĐÓ UserId = 228 HOẶC 1 = 1;

Sau đó, nó sẽ truy xuất tất cả dữ liệu trong bảng của người dùng, bao gồm cả mật khẩu nếu bảng chứa dữ liệu mật khẩu.

Để biết thêm thông tin về SQLi, bạn có thể tham khảo tại đây.

Cross-Site Scripting (XSS)

XSS xảy ra khi người dùng tiêm một tập lệnh độc hại chủ yếu bằng javascript thông qua các trường đầu vào không được vệ sinh. Thông thường, kẻ tấn công sẽ gửi tập lệnh độc hại này cho người dùng sẽ không bị nghi ngờ. Trình duyệt của người dùng cuối không biết rằng tập lệnh này có hại và sẽ thực thi tập lệnh. 

Do đó, tập lệnh độc hại này có thể truy cập tất cả dữ liệu được liên kết với cookie, mã thông báo phiên hoặc bất kỳ thông tin nhạy cảm nào khác. Hơn nữa, các tập lệnh này có thể viết lại HTML của một trang web.

Xác thực bị hỏng và quản lý phiên

Giả sử người dùng sẽ phải đăng nhập vào một ứng dụng web bằng thông tin đăng nhập. Trong trường hợp đó, thuật toán độc quyền của trang web tạo ra một ID phiên duy nhất cho toàn bộ giao tiếp giữa người dùng và máy chủ web cho phiên đó.

Nếu các nhà phát triển web không mã hóa dữ liệu an toàn truyền qua lại giữa người dùng và máy chủ web, có nhiều khả năng kẻ xâm nhập đánh cắp nó và hành động như người dùng. Kịch bản này chủ yếu xảy ra khi bạn đăng nhập vào internet bằng WiFi công cộng trong quán cà phê.

Bạn có thể tham khảo bài viết này để biết thêm chi tiết.

Các phương pháp để ngăn chặn các cuộc tấn công web là gì?

Tường lửa ứng dụng web

WAF là một lớp bảo vệ 7 trong mô hình OSI có thể được đặt tại điểm vào máy chủ đích, như thể hiện trong sơ đồ dưới đây. Nó bảo vệ mạng nội bộ của máy chủ khỏi các cuộc tấn công và ẩn cấu trúc liên kết mạng của máy chủ.

Để WAF hoạt động, bạn nên thực hiện các cấu hình bổ sung trong máy chủ. Giống như tường lửa, WAF lọc lưu lượng HTTP đến và đi có vẻ nguy hiểm đối với mạng nội bộ của máy chủ nếu chúng không đáp ứng các quy tắc mà bạn đặt trên WAF.

WAF cũng là một loại proxy ngược mà chúng ta sẽ thảo luận trong phần tiếp theo.

Proxy ngược

Công việc của máy chủ proxy là ẩn địa chỉ IP của bạn và thay thế nó bằng địa chỉ của máy chủ proxy. Chà, proxy ngược cũng làm tương tự và tăng cường bảo mật của máy chủ web bằng cách ẩn nó cũng như cấu trúc liên kết mạng nội bộ của máy chủ.

Máy khách chỉ biết địa chỉ của máy chủ proxy và do đó máy chủ thực tế bị ẩn khỏi máy khách.

Lý tưởng nhất, bạn có thể sử dụng proxy ngược làm Tường lửa ứng dụng web (WAF) mà chúng ta đã thảo luận ở trên. Bạn có thể triển khai WAF trên các ứng dụng web trên các thiết bị có cấu hình proxy ngược. Do đó, phạm vi của WAF trong việc tăng cường an ninh trở nên rộng hơn. Kẻ tấn công cũng không thể nhìn thấy vị trí thực tế của máy chủ web.

Bạn có thể tham khảo bài viết này để biết thêm thông tin cơ bản về proxy ngược. Trong phần tiếp theo, chúng ta sẽ xem xét việc sử dụng proxy ngược để giảm thiểu rủi ro ứng dụng. Tuy nhiên, trước đó, hãy cung cấp cho bạn cái nhìn tổng quan về chức năng của proxy ngược.

Proxy ngược hoạt động như thế nào?

Tất cả các proxy ngược thực hiện tất cả các hoạt động cơ bản sau:

  1. Trình duyệt máy khách gửi yêu cầu HTTP đến URL công khai. Giả sử URL được www.host.com trên cổng 80.
  2. Sau đó, như thường lệ, tên máy chủ giải quyết xung quanh máy chủ proxy ngược. Máy chủ proxy ngược này lắng nghe địa chỉ này và nhận được yêu cầu.
  3. Sau đó, proxy ngược điều tra URL để xác định nơi nó cần ủy quyền yêu cầu. Thông thường, proxy ngược có thể sử dụng bất kỳ thành phần URL nào để quyết định nơi định tuyến yêu cầu. Ví dụ: nó có thể sử dụng máy chủ, giao thức, đường dẫn, cổng hoặc chuỗi truy vấn. Thông thường, đường dẫn là thành phần chính quyết định định tuyến.
    1. Cài đặt cấu hình proxy ngược xác định URL gửi đi để gửi yêu cầu đến. URL gửi đi này thường là máy chủ back-end chịu trách nhiệm cung cấp nội dung. Máy chủ proxy ngược có thể viết lại các phần của yêu cầu. Ví dụ, nó có thể thay đổi hoặc thêm vào các phân đoạn tuyến đường.
    2. Sau đó, bước tiếp theo là cải tiến tiêu đề yêu cầu; Proxy ngược cũng phải cập nhật một số thông tin tiêu đề HTTP để chỉ ra máy chủ web nội bộ ngoài việc ánh xạ lại URL. Ví dụ: tiêu đề "Máy chủ:" chứa tên máy chủ mà URL được yêu cầu.
    3. Vì vậy, để kết thúc ánh xạ URL, http://www.host.com có thể được ánh xạ tới http://realhost.com: 8080.As, bạn có thể thấy trong trường hợp này tên máy chủ được thay đổi thành realhost. Sau đó, số cổng cũng thay đổi thành 8080.

  1. Cuối cùng, proxy ngược gửi yêu cầu đến máy chủ thực tế, nơi xử lý yêu cầu.
  2. Sau khi máy chủ xử lý yêu cầu, nó sẽ gửi phản hồi đến proxy ngược.
  3. Sau đó, proxy ngược lại thực hiện như sau:
    1. Nó sửa đổi phản hồi để nó gửi cho khách hàng một cách chính xác. Điều này bao gồm trường "Vị trí:", chứa vị trí máy chủ của tệp.
    2. Reverse proxy ánh xạ lại các tiêu đề và cuối cùng gửi phản hồi cho khách hàng.

Cách bảo mật ứng dụng web của bạn bằng proxy ngược

Vì mục tiêu của chúng tôi là vượt qua các cuộc tấn công mạng đã đề cập trước đó, proxy ngược cần thực hiện các chức năng bổ sung bên cạnh các bước được đề cập ở trên.

Xác thực nội dung yêu cầu

Khi khách hàng gửi yêu cầu đến máy chủ, proxy ngược sẽ vệ sinh đầu vào bằng cách so sánh nó với cơ sở dữ liệu chữ ký của nó. Các lập trình viên phát triển các chữ ký này với các biểu thức chính quy rất tiên tiến. Quyết định của proxy đảo ngược cho phép yêu cầu với đầu vào của người dùng sẽ chỉ dựa trên phương pháp bộ lọc danh sách chặn và bộ lọc danh sách trắng.

Phương pháp tiếp cận bộ lọc danh sách đen

Bộ lọc danh sách đen lưu trữ các yêu cầu có hại đã biết. Sau đó, nó so sánh từng yêu cầu với các mục trong danh sách. Nếu phát hiện ra kết quả trùng khớp, nó sẽ từ chối yêu cầu. Các biến thể khác nhau của cùng một cuộc tấn công phải được ghi lại riêng trong danh sách. Bạn sẽ chỉ có thể ngăn chặn các cuộc tấn công đã biết bằng cách sử dụng danh sách đen. Tính toàn diện của danh sách đen giúp phát huy hiệu quả của nó. 

Phương pháp tiếp cận bộ lọc danh sách trắng

Bộ lọc danh sách trắng ghi lại toàn bộ tập hợp các yêu cầu hợp lệ cho một trang web cụ thể. Do đó, danh sách trắng ngăn chặn các cuộc tấn công bằng cách chỉ cho phép các yêu cầu đã biết đến máy chủ. Mặt khác, quá trình xây dựng danh sách trắng rất tốn thời gian và đòi hỏi kiến thức về toàn bộ các yêu cầu hợp pháp mà người dùng có thể gửi đến máy chủ. 

Hơn nữa, có thể quá sức để tạo tất cả các yêu cầu hợp lệ cho hàng trăm ngàn nhà cung cấp cơ sở dữ liệu ngoài kia trong trường hợp SQL injection

Bất kỳ sửa đổi nào đối với ứng dụng web được bảo mật sẽ yêu cầu cập nhật danh sách trắng. Do đó, việc giữ một danh sách trắng làm tăng thêm gánh nặng hành chính. 

Xác thực nội dung phản hồi

Trước khi gửi phản hồi từ máy chủ trở lại máy khách, proxy ngược sẽ xác thực nó. Một danh sách đen được sử dụng để thực hiện điều này thường xuyên. Bộ lọc danh sách đen có thể ẩn các phản hồi đã biết khỏi những khách hàng không cần xem chúng. Thông báo lỗi là một ví dụ về loại dữ liệu này; Proxy ngược có thể thay thế lỗi bằng thông báo lỗi chung không chứa dữ liệu nhạy cảm.

Ghi nhật ký yêu cầu và phản hồi

Proxy ngược cũng có thể ghi lại yêu cầu kiểm tra tiếp theo. Cách tiếp cận tốt nhất là chỉ định cấu hình ghi nhật ký cho các yêu cầu đảo ngược proxy bị chặn ban đầu. Bạn nên kiểm tra cẩn thận các bản ghi trong suốt giai đoạn đầu tiên cài đặt. Điều này là cần thiết để xác minh rằng proxy ngược không chặn bất kỳ yêu cầu chính hãng nào.

Kết thúc

Trong bài viết này, chúng tôi hy vọng bạn hiểu các lỗ hổng trong ứng dụng web và cách bạn có thể sử dụng proxy ngược để giải quyết các mối đe dọa này. Thật vậy, proxy ngược sẽ không loại bỏ tất cả các lỗ hổng có thể liên quan đến các ứng dụng web.

Tuy nhiên, nó sẽ là một chiến lược tuyệt vời để giảm thiểu hầu hết các mối đe dọa bạn gặp phải trong một ứng dụng web. Vì vậy, cuối cùng, chúng tôi hy vọng bạn sẽ áp dụng các khái niệm đã học trong bài viết này nếu bạn gặp phải những lo ngại về bảo mật trong ứng dụng web của mình.