Chào các bạn,
Trong bài viết này mình sẽ hướng dẫn các bạn các bảo mật ứng dụng Java Web thông qua Apache HTTP Server, cụ thể là sẽ thực hành trên phần mềm XAMPP.
Trong lập trình Java Web, chúng ta khá là vất vả trong việc xử lý dữ liệu ở tầng Business Logic. Việc thiết lập thêm cho việc kiểm tra request và lọc dữ liệu từ request khá là khó khăn trong việc mở rộng một dự án hoặc thậm chí có thể làm chậm máy chủ và có nguy cơ làm tăng rủi ro an ninh an toàn thông tin.
Hình 1 - Mô hình 3 lớp |
Hình 2 - Mô phỏng Reverse-Proxy |
Nó có thể giúp bạn che giấu được địa chỉ IP của máy chủ chạy ứng dụng Java Web. Reserve-Proxy Server có thể được tích hợp nhiều hơn một tính năng để nâng cao tính bảo mật và phòng thủ trước những mối nguy hại trong môi trường Internet như là tấn công DDoS, tránh những công cụ dò lỗ hỏng bảo mật tự động, ...
Ngoài ra Reserve-Proxy còn có thể đảm nhiệm thêm nhiệm vụ Caching giúp cho việc người dùng yêu cầu dữ liệu bên phía máy chủ Web Application nhưng không nhất thiết phải yêu cầu lần 2 tới máy chủ khi dữ liệu ở máy chủ chạy Web Application không thay đổi và việc trả dữ liệu được diễn ra ở Reserve-Proxy nên việc yêu cầu dữ liệu nhanh hơn khá nhiều.
Hình 3 - Caching |
Tăng cường tính sẵn sàng (Availability) là điều tất yếu đối với những máy chủ chạy 24/7. Bạn sẽ cảm thấy không hài lòng với dịch vụ khi mà một máy chủ chính chạy ứng dụng Web bị sập, việc có những máy chủ cạnh bên hỗ trợ cung cấp các dịch vụ web là cần thiết kết hợp với Reverse-Proxy và bạn sẽ có thể có thêm được tính năng Cân bằng tải (Load Balancing) cho máy chủ của mình.
Khi gặp một lượng lướng request từ người dùng, Reserve-Proxy có thể chuyển giao một phần request cho các máy chủ khác giúp tăng tính sẵn sàng của nó.
Hiệu năng của máy chủ chạy Web Application càng tăng vì bây giờ máy chủ chạy Java Web Application sẽ không cần phải làm thêm nhiệm vụ mã hoá và giải mã SSL.
Hình 4 - Tính sẵn sàng |
Từ bây giờ, mình sẽ minh hoạ máy chủ chạy Java Web Application là Apache Tomcat.
Trong XAMPP có sẵn Apache HTTP Server, bạn có thể host ứng dụng Web PHP lên trên đây, trong bài viết này chúng ta sẽ bỏ qua cơ chế host ứng dụng Web của PHP mà làm thành Reverse-Proxy.
Hình 5 - ModSecurity |
Mình sẽ giới thiệu một module của Apache HTTP Server đó là ModSecurity. Theo cơ chế hoạt động của Apache HTTP Server là khi request được gửi lên thì các module có quyền thao tác trên các request đó.
Còn ModSecurity là một Apache HTTP Server module dạng tường lửa cho ứng dụng web có dạng mã nguồn mở. Chủ yếu để tăng cường bảo mật đối với các dạng lỗ hỏng bảo mật chung sử dụng bộ rules của OWASP ModSecurity.
Để có thể nhận diện được mối nguy hại, ModSecurity được nhúng vào trong Apache HTTP Server cho phép nó có thể rà soát những giao tiếp HTTP thông qua các luồng yêu cầu và gửi trả dữ liệu đến điểm cuối. Được dựa trên việc cấu hình các rule mà công cụ sẽ quyết định nên xử lý các trường hợp đó như thế nào như là cho phép, loại bỏ, chuyển đi, trả về status code, ...
Hình 6 - Minh hoạ các hoạt động của ModSecurity |
Bây giờ hãy thiết lập nó lên thôi nào!
Đầu tiên bạn cần tải xuống XAMPP thông qua đường dẫn: https://www.apachefriends.org/. Bạn không nên bỏ cài đặt Apache Web Server và Apache Tomcat vì là cần thiết.
Hình 7 - Giao diện sau khi cài đặt XAMPP. |
Thông qua đường dẫn C:\xampp\apache\modules là nơi chứa các module của Apache HTTP Server, nơi chúng ta sẽ cài đặt ModSecurity lên đó.
Hình 8 - Nơi chứa Apache HTTP Server modules |
Chúng ta sẽ tải xuống module ModSecurity thông qua đường dẫn: https://www.apachelounge.com/download/
Hình 9 - Những tập tin cần chú ý |
Sau khi import module thì chúng ta sẽ phải sử dụng module bằng cách LoadModule, chúng ta vào đường dẫn Nơi_cài_đặt_XAMPP\apache\conf\ và mở tệp tin httpd.conf và tìm để xác nhận module sẽ được load.
Hình 10 - Xác nhận các module trong hình sẽ được load |
Chúng ta sẽ phải có những tệp tin như hình dưới và tệp httpd.conf đã được chỉnh sửa như trên. Và đỡ mất công đôi bên cấu hình những thứ mất thời gian gỡ lỗi thì mình sẽ cung cấp cho bạn các tệp tin cần thiết ấy tại đây: https://drive.google.com/file/d/1fDd-O8G4FeCDrTmAjbIFlIatO42e4_wM/
Để có thể kết nối qua Java Web Application của Apache Tomcat, chúng ta kết nối gián tiếp qua Apache HTTP Server thông qua giao thức AJP, mở tệp tin ajp.conf để xem chi tiết như sau để xác nhận và chỉnh sửa sau này.
Chúng ta cần tệp ajp.conf để có thể chạy chung khi tệp httpd.conf được load. Giao thức AJP có port mặc định là 8009 nên chúng ta cần phải bật giao thức AJP bên Apache Tomcat với tệp tin server.xml bên đó.
Hình 12 - Cấu hình chi tiết tệp tin ajp.conf |
Vào Nơi_cài_đặt_XAMPP\tomcat\conf\server.xml để bật port 8009 của giao thức AJP.
Hình 13 - Xác nhận giao thức AJP đã được bật |
Sau đó bạn đổi tên gói .war đã tải về thành ROOT.war rồi sau đó đặt vào đường dẫn Nơi_cài_đặt_XAMPP\tomcat\webapps\ và cuối cùng là xoá thư mục ROOT đi. Kết quả sẽ được như hình dưới.
Hình 14 - Xác nhận thư mục webapps của Apache Tomcat |
Hình 15 - XAMPP sau khi cấu hình AJP |
Bạn truy cập Web Application thông qua địa chỉ http://localhost:80 thay vì phải vào :8080 để thông qua Proxy.
Chúng ta sẽ thử tấn công dạng XSS (Reflected) như sau để lấy cookie: <script>alert(document.cookie)</script>
Hình 16 - Sau khi vào localhost |
Ngay lập tức chúng ta sẽ "ăn" HTTP Status Code 403 là không có quyền truy cập vì ModSecurity đã filter đi và không thể đến Apache Tomcat Server được.
Chúng ta mở tệp modsec_audit.log trong đường dẫn Nơi_cài_đặt_XAMPP\apache\logs và thấy ModSecurity đã nhận ra được đây là tấn công dạng XSS và từ chối.
Tệp nén mình cung cấp có bao gồm thêm kho rules OWASP dành cho ModSecurity: https://github.com/coreruleset/coreruleset
Hình 17 - Lỗi 403 |
Hình 18 - Log của ModSecurity |
Ngoài ra, bạn cũng có thể chỉnh sửa cấu hình của ModSecurity trong tệp modsecurity.conf. Cụ thể là nếu bạn muốn vô hiệu hoá các chức năng của ModSecurity thì chỉ cần set dòng số 7 giống hình dưới thành SecRuleEngine Off hoặc SecRuleEngine DetectionOnly là xong.
Hình 19 - Configuration của ModSecurity |
Việc áp dụng các rules tự tạo khả thi nên bạn hoàn toàn có thể phát triển thêm cho ModSecurity rules.
Nhưng bạn sẽ không thể sử dụng module ModSecurity nếu bạn không thông qua port 80 mà qua port 8080 vì nó vẫn còn hiệu lực hoá nên kết quả sẽ như sau nếu bạn thử tấn công XSS.
Hình 20 - Tấn công XSS thành công |
Hình 21 - Vô hiệu hoá port 8080 |
Hình 22 - Console của Apache Tomcat |
Hình 23 - Port 8080 đã bị shutdown |
Hi vọng bạn sẽ học được cách để tăng tính bảo mật cho ứng dụng Java Web của mình mà không phải làm giảm hiệu năng của Apache Tomcat.
Cảm ơn bạn đã theo dõi bài này.
-------------------
Tài liệu tham khảo thêm:
Không có nhận xét nào :
Đăng nhận xét