Đang tải... (xem toàn văn)
XÂY DỰNGỨNG DỤNG
TRIỂN KHAI NỀN
SECUTIRY
Trang 2Thành viên nhóm 8:
Đề tài: Xây dựng một trang web có các tính năng an toàn bảo mật thông tin
ứng dụng công nghệ Spring Security
Nguyễn Thế Thịnh N21DCAT053 – NHÓM TRƯỞNG
Huỳnh Đức Linh N21DCAT028
Trần Tiến Đức N21DCAT014
Phạm Thị Mai Anh N21DCAT001
Lê Thị Mỹ Tiên N21DCAT056
For more info:
SLIDESGO | BLOG | FAQs
Trang 3Cơ chế hoạt động Sự khác biệt
Khái niệm, tấn công, ngăn chặn, demo thực tiễn
Khái niệm, tấn công, ngăn chặn, demo thực tiễn
Khái niệm, tấn công, ngăn chặn, demo thực tiễn
Khái niệm, tính năng, cơ chế
Spring
Security ?Authentication &authorization
PreAuthorize, Secured và RolesAllowed
SESSION
CROSS-SITE REQUEST FORGERY
3.3
Trang 4GIỚI THIỆU VỀ SRING SECURITY
Khái niệm, tính năng, cơ chế
Trang 5Spring
SecuritySpring Security được xem là một trong
những framework bảo mật phổ biến nhất cho ứng dụng Java.
Spring Security được thiết kế theo kiến
trúc plugin, cho phép tùy biến linh hoạt và dễ dàng theo nhu cầu của ứng dụng và được tích hợp sẵn với các thành
phần khác của Spring Framework, như Spring Boot, Spring MVC, Spring Data, Spring Cloud, và Spring WebFlux
Trang 6Tính Năng Hỗ Trợ:
Tích hợp API Servlet
Tích hợp tùy chọn với Spring Web MVC
Spring Security cung cấp các tính năng xác thực (authentication) và phân
quyền (authorization) cho các ứng dụng, cũng như hỗ trợ các tiêu chuẩn và giao thức bảo mật như HTTPS, OAuth2, JWT, LDAP, SAML, OpenID Connect
Bảo vệ chống lại các cuộc tấn công session fĩation, ckicljacking, cross site request
Hỗ trợ toàn diện và mở rộng cho cả Xác thực và Ủy quyền
Trang 7Tạo một biểu mẫu đăng nhập cho bạn với tên người dùng và mật khẩu, cho phép người dung đăng xuất
Yêu cầu xác thực cho mọi URL trong ứng dụng của bạn
• Tích hợp X-Frame-Options để ngăn chặn Clickjacking
Tích hợp với các phương thức API Servlet sau:
• HttpServletRequest#getRemoteUser()
• HttpServletRequest#getUserPrincipal()
• HttpServletRequest#isUserInRole(java.lang.String)
Trang 8CƠ CHẾ
HOẠT ĐỘNG
Trang 9Cơ chế Spring Security:
Spring Security hoạt động theo mô hình
client-server Khi một client gửi một request đến server, server sẽ xác thực người dùng và phân quyền để đảm bảo rằng người dùng chỉ có thể truy cập vào những tài nguyên mà họ được phép truy cập.
Cơ chế hoạt động của Spring Security dựa
trên cơ chế lọc (filter) và sự kiện (event) để can thiệp vào quá trình xử lý yêu cầu (request) và phản hồi (response) của ứng dụng web, tức là khi một yêu cầu được gửi đến ứng dụng web, nó sẽ được chuyển qua một chuỗi các bộ lọc (filter chain) do
Spring Security quản lý Cơ chế Filter Chain trong Spring Security
Trang 10Spring
Ví Dụ: Cài đặt các phụ thuộc cần thiết cho dự án Spring Boot Dưới đây là một ví dụ về cách thêm các phụ thuộc Spring Security vào tệp
pom.xml
Trang 11Cơ chế hoạt động
1.2
Trang 12Authentication là quá trình xác thực thông tin của người dùng và mật khẩu để xác minh danh tính, đồng thời xác thực người dùng có quyền truy cập các dữ liệu nào đó hay không.
Authentication thường dựa trên các thông tin nhận dạng (identifier) và thông tin bí mật (credential) của người dùng hoặc ứng dụng, ví dụ như tên đăng nhập và mật khẩu, mã token, vân tay, khuôn mặt tùy theo cách tiếp cận của ứng dụng đó.
Trang 13Authentication
Spring Security hỗ trợ xác thực thông qua một số cơ chế, bao gồm:
o Form-based authentication: Xác thực thông qua một form đăng nhập.
o HTTP Basic authentication: Xác thực thông qua các header authorization.
o Authentication via a custom login page: Xác thực thông qua một trang đăng nhập tùy chỉnh.
o Pre-authenticated authentication: Xác thực thông qua các giá trị được cung cấp từ phía máy khách.
Trang 14Authorization
Authorization là quá trình xác định quyền truy cập của người dùng đối với các tài nguyên trong ứng dụng Khi người dùng truy cập vào một tài nguyên, Spring Security sẽ kiểm tra xem người dùng có được phép truy cập vào tài nguyên đó hay không hoặc thực hiện một hành động nào đó trong hệ thống.
Authorization thường dựa trên các thông tin về vai trò (role), nhóm (group), quyền hạn (permission), chính sách (policy) Ngoài ra, còn giúp đảm bảo rằng chỉ những người dùng hoặc ứng dụng có quyền thích hợp mới có thể truy cập vào tài nguyên hoặc thực hiện hành động được bảo vệ.
Trang 15Authorization
Spring Security hỗ trợ phân quyền bằng cách sử dụng các thành phần sau:
- AccessDecisionManager: là một interface định nghĩa phương thức decide() để kiểm tra quyền của người dùng hoặc ứng dụng khi truy cập vào một tài nguyên hoặc thực hiện một hành động nào đó
- AccessDecisionVoter: là một interface định nghĩa phương thức vote() để đưa ra quyết định về quyền hạn của người dùng hoặc ứng dụng.
- SecurityExpressionHandler: cũng là interface định nghĩa phương thức createSecurityExpressionRoot() để tạo ra một đối tượng SecurityExpressionRoot chứa các biểu thức bảo mật cho người dùng hoặc ứng dụng.
Trang 17Tất cả PreAuthorize, RolesAllowed và Secured đều là các annotation cho phép bạn cấu hình bảo mật phương thức Chúng có thể được áp dụng cho từng phương thức riêng lẻ hoặc trên cấp độ lớp, trong trường hợp sau, các ràng buộc bảo mật sẽ được áp dụng cho tất cả các phương thức trong lớp.
Sự khác biệt giữa PreAuthorize, Secured và RolesAllowed:
Ví dụ: @PreAuthorize("hasRole('ADMIN') or hasRole('USER') and #userId ==
principal.userId") cho phép truy cập nếu người dùng có vai trò là ADMIN hoặc là USER và ID người dùng trùng với ID trong phiên làm việc.
Trang 18- Tính linh hoạt: Tương tự như Secured, chỉ cho phép liệt kê các vai trò.
Ví dụ: @RolesAllowed({"ADMIN", "USER"}) tương tự như @Secured nhưng có thể được sử dụng trong các môi trường ngoài Spring, giúp duy trì tính tương thích.
Trang 19Sự khác biệt:
Cung cấp tính năng kiểm soát cao nhất và phức tạp nhất nhờ khả năng sử dụng SpEL, phù hợp cho các điều kiện truy cập động và chi tiết cung cấp khả năng kiểm soát tinh tế hơn đáng kể so với hai annotation kia.
Thích hợp cho các điều kiện truy cập dựa trên vai trò đơn giản
Thích hợp cho các điều kiện truy cập dựa trên vai trò đơn giản, mang lại lợi ích khi cần tính tương thích với các ứng dụng Java EE.
PreAuthorize
Trang 20THIẾT KẾ VÀ XÂY DỰNG HỆ THỐNG
2.0
Trang 21Kích hoạt Spring Security cho ứng dụng web.Cung cấp môi trường phát triển
thuận tiện.
Cài đặt các công cụ hỗ trợ khác
03
Trang 222.1 Cài đặt eclipse
• Tải và cài đặt eclipse từ trang web chính thức để tạo trang web• Cấu hình Eclipse để sử dụng Java Development Kit (JDK) phù hợp• Tạo trang web thực nghiệm bằng Spring MVC
o Tạo dự án web chưa được bảo mật bằng Maven Project.o Tích hợp Tomcat vào Eclipse và hiệu chỉnh port phù hợp.
o Bổ sung thư viện cần thiết của Spring MVC vào file pom.xml của dự án.o Cấu hình DispatcherServlet vào ứng dụng web (web.xml)
o Cấu hình ứng dụng Spring (spring-config-mvc.xml).
o Tạo các Model, View và Controller tương ứng để thực hiện trang web.
Trang 232.2 Cấu hình Servlet Container: Kích hoạt Spring Security
Thêm thư viện Spring Security vào dự án. Cấu hình web.xml:
o Thêm filter SpringSecurityFilterChain.o Cấu hình filter cho các URL mong muốn.
Trang 242.2 Cấu hình Servlet Container: Kích hoạt Spring Security
Cấu hình Spring Security: Tạo lớp khởi tạo và cấu hình Spring Security (ví dụ: SecurityInitializer, WebSecurityConfig).
Annotate lớp với @EnableWebSecurity để kích hoạt bảo mật cho ứng dụng.
Sử dụng Spring Security Lambda DSL (Domain-Specific Language) để cấu hình:
o Quản lý xác thực: Xác định cách thức người dùng đăng nhập.
oQuản lý phân quyền: Quyền truy cập dựa trên vai trò/quyền hạn.
o Quản lý phiên: Cấu hình thời gian hết hạn phiên Xóa phiên khi người dùng đăng xuất.
o CSRF Protection: Bảo vệ khỏi tấn công CSRF.
o HTTP Headers Security: Tăng cường bảo mật bằng cách cấu hình các tiêu đề HTTP
Trang 26KỊCH BẢN 1
SESSION FIXATION
3.1
Trang 27Giới thiệu chung
Khái niệm Session
Ngăn chặn bằng Spring Security
Demo thực tiễn
NỘI DUNG CHÍNH
Trang 28GIỚI THIỆU CHUNG
Trang 29GIỚI THIỆU CHUNG
Mỗi khi đăng nhập vào một trang web bất kỳ, người dùng được cung cập một Session
Một Session thường được gắn với một mã định danh (gọi là session ID) và chứa một số thông tin của người dùng
Trang 30Session ID
■ Giúp duy trì thông tin và trạng thái của người dùng trong suốt phiên làm việc
■ Giúp người dùng không cần phải đăng nhập lại mỗi khi truy cập các tài nguyên trên trang web
■ Giảm tải cho máy chủ
■ Nếu có được Session ID thì có thể truy cập vào tài khoản
■ Đối với các ứng dụng web lớn, việc quản lý và theo dõi các phiên làm việc có thể trở nên phức tạp
■ Dễ bị tấn công bởi các cuộc
tấn công như Session
Hijacking, Session Fixation, XSS,…
Trang 31—SESSION FIXATION
Việc xử lý session ID không an toàn có thể khiến người dùng bị
tấn công.
Trang 32KHÁI NIỆM
SESSION FIXATION
Trang 33SESSION FIXATION
Là một kỹ thuật cho phép hacker có thể chiếm đoạt session của người dùng Kỹ thuật này lợi dùng việc server không thay đổi giá trị session ID mỗi khi người dùng đăng nhập, thay vào đó sử dụng session ID sẵn có trước đó
Trang 34QUÁ TRÌNH
TẤN CÔNG
Trang 35Tạo session ID hợp lệ
Hacker đăng nhập vào trang web và nhận một
session ID
Chờ nạn nhân đăng nhập
Nạn nhân truy cập vào trang web và đăng nhập như
Mạo danh nạn nhân
Khi nạn nhân đăng nhập thành công, hacker chiếm
phiên và mạo danh nạn nhân
Khiến cho nạn nhân đăng nhập với session
ID của hacker
Dùng các kĩ thuật tấn công hoặc gửi URL độc hại chứa session ID của hacker cho nạn
CÔNG
Trang 36ỨNG DỤNG
SPRING SECURITY
ĐỂ NGĂN CHẶN TẤN CÔNG
SESSION FIXATION
Trang 37CÁCH NGĂN CHẶN CUỘC TẤN CÔNG
SESSION FIXATION
Sử dụng session ID ngẫu nhiên và có độ
dài đủ lớn
Làm cho việc đoán được session ID trở nên khó khăn hơn
Không sử dụng session ID có thể
đoán được
Tránh sử dụng session ID dựa trên thông tin dễ đoán như thời gian, địa chỉ IP hoặc thông tin dễ dàng thu được từ nạn nhân
Thiết lập thời gian
cho session Đặt thời gian hết hạn cho các session và yêu cầu người dùng đăng nhập lại sau một thời gian nhất định
Sử dụng HTTPS và mã hóa
Sử dụng HTTPS để mã hóa dữ liệu giữa máy khách và máy chủ, bảo vệ session ID khỏi việc bị đánh cắp trong quá trình truyền
Xác thực lại session ID
Khi người dùng thực hiện các hoạt động quan trọng hoặc nhạy cảm, hãy xác thực lại session ID để đảm bảo rằng không bị làm giả
Cảnh báo và bảo vệ
Cung cấp thông báo cho người dùng khi họ đăng nhập từ một thiết bị hoặc địa chỉ IP mới, kích hoạt các cơ chế bảo vệ như xác minh hai bước
Trang 38CẤU HÌNH SPRING SECURITY NGĂN CHẶN TẤN CÔNG SESSION FIXATION
Trong cấu hình này,
sessionFixation().migrateSession() được sử dụng để đảm
bảo rằng session ID sẽ được thay đổi sau khi người dùng đăng nhập
Trang 39CẤU HÌNH SPRING SECURITY NGĂN CHẶN TẤN CÔNG SESSION FIXATION
sessionFixation().newSession() tạo ra một session mới và
không copy các thuộc tính từ session cũ
Trang 40CẤU HÌNH SPRING SECURITY NGĂN CHẶN TẤN CÔNG SESSION FIXATION
Class SecurityInitializer
Class SecurityInitializer là một lớp được đánh dấu @Configuration kế thừa từ lớp AbstractSecurityWebApplicationInitializer đảm bảo rằng Spring Security được kích hoạt một cách chính xác khi ứng dụng
khởi động
Trang 41THỰC TIỄN
Trang 42KỊCH BẢN 2
Clickjacking
Trang 43KHÁI NIỆM LỖ
KỊCH BẢN TẤN CÔNG
NGĂN CHẶN BẰNG SPRING SECURITY
DEMO THỰC TIỄN
05
Trang 44Khái niệm lỗ hổng:
CLICKJACKING
Trang 45CLICKJACKINGLÀ GÌ Clickjacking là một hình thức tấn
công đánh lừa người dùng nhấp chuột vô ý vào một đối tượng trên website Khi nhấp chuột vào một đối tượng trên màn hình, người dùng nghĩ rằng mình đang click vào đối tượng đó nhưng thực chất họ đang bị lừa click vào một đối tượng khác đã bị làm mờ hay ẩn đi.
Kẻ tấn công có thể sử dụng kỹ thuật tấn công này cho nhiều mục đích khác nhau như đánh cắp tài khoản, lừa click vào quảng cáo để kiếm tiền, phát tán malware bằng cách chuyển hướng người dùng tới link download chương trình độc hại
Trang 46KỸ THUẬT TẤN CÔNG
CLICKJACKING
Trang 47Che giấu đối tượng mục tiêu
Sử dụng thuộc tính CSS opacity (làm cho các iframe trong suốt) để che giấu đối tượng web cần click vào và z-index để hiển thị đối tượng web dùng để lừa.
Lấy đối tượng dùng để đánh lừa phủ lên đối tượng mục tiêu và sử dụng thuộc tính CSS pointer-events: none để vô hiệu hóa thao tác nhấp chuột lên đối tượng dùng để đánh lừa.
Partial Overlays: Chèn trang web mục tiêu vào iframe và phủ lên đối tượng mục tiêu bằng các đối tượng giả mạo: sử dụng thuộc tính CSS z-index Cropping: Chèn trang web
mục tiêu vào iframe và cắt xén nội dung xung quanh.
Trang 48Giả mạo con trỏ chuột
Ẩn con trỏ chuột thật, thay thế bằng con trỏ chuột giả bằng cách sử dụng
thuộc tính CSS cursor: none và sử dụng javascript để mô phỏng sự di
chuyển của con trỏ thật.
Trang 49 Đánh lừa người dùng gõ chuỗi ký tự khi con trỏ chuột đang đặt vào các form nhập dữ liệu Kẻ tấn công có thể lừa người dùng nhập vào một số thông tin không mong muốn vào trang web mục tiêu.
Trang 50Chèn đối tượng mục tiêu khi người dùng đang nhấp
Để tấn công bằng kỹ thuật này, kẻ tấn công có thể lừa người dùng tham gia trò chơi (whack-a-mole) yêu cầu nhấp chuột nhanh nhất.
Trang 51QUY TRÌNH TẤN CÔNG
CLICKJACKING
Trang 52Trang web mục tiêu phải có các yếu tố có thể tương tác chẳng hạn như nút bấm hoặc liên kết
Trang web mục tiêu phải cho phép được nhúng trong một khung (iframe)
ĐIỀU KIỆN TẤN CÔNG
Trang 53Kẻ tấn công đã có được tài khoản của người dùng
Nếu người dùng nhập thông tin đăng nhập của mình vào trang giả mạo này, thông tin sẽ được gửi trực tiếp cho kẻ tấn công
Dụ dỗ người dùng tương tác Tuy nhiên, hành động nhấp chuột này đã bị kẻ tấn công chiếm đoạt.
Trang 54ỨNG DỤNG SPRING SECURITY
ĐỂ NGĂN CHẶN TẤN CÔNG
CLICKJACKING
Trang 55Luôn kiểm tra URL trước khi
mới nhất
ĐỐI VỚI NGƯỜI DÙNG
Trang 56ĐỐI VỚI NHÀ PHÁT TRIỂN
Clickjacking tấn công bằng cách bao bọc trang web mà người dùng tin tưởng bởi iframe, sau đó render ẩn phần tử này lên trên cùng
Để chắc chắn trang web của bạn đang không bị lạm dụng bởi Clickjacking, bạn cần chắc rằng iframe chỉ được sử dụng cho những trang an toàn
X-Frame-OptionsX-Frame-Options HTTP header có thể dùng để biểu thị có hoặc không cho phép trình duyệt render các thẻ như <frame>,
<iframe>, <object> Nó được thiết kế đặc biệt để chống
Content Security Policy
// không cho phép hiển thị trong frame
Content-Security-Policy: frame-ancestors 'none'
// chỉ được hiển thị trên chính website gốc
Content-Security-Policy: frame-ancestors 'self'
// được phép hiển thị trên các website được chỉ định
Content-Security-Policy: frame-ancestors *uri*
Đây là một phần của chuẩn HTML 5 giúp cung cấp phạm bi
bảo vệ rộng hơn
Trang 57ĐỐI VỚI NHÀ PHÁT TRIỂN
Clickjacking tấn công bằng cách bao bọc trang web mà người dùng tin tưởng bởi iframe, sau đó render ẩn phần tử này lên trên cùng
Để chắc chắn trang web của bạn đang không bị lạm dụng bởi Clickjacking, bạn cần chắc rằng iframe chỉ được sử dụng cho những trang an toàn
Frame-KillingTrên các trình duyệt cũ, cách thường được sử dụng để bảo vệ người dùng khỏi
clickjackinglà thêm frame-killing JavaScript snippet vào pages.
Khi trang web load, đoạn code trên sẽ kiểm tra domain của trang gốc có khớp với domain của cửa sổ trình duyệt hay không, nếu pass qua bước check thì được phép hiển thị.