Tạ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ấtYêu cầu xác thực cho mọi URL trong ứng dụng của... Sử dụng Spring Security Lambda DSL Do
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 | FAQ s
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
Trang 4GIỚI THIỆU VỀ SRING
SECURITY
1.1
Khái niệm, tính năng, cơ chế
Trang 5Spring
Security Spring 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
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
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
Seccurity
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 12Authenticati on
Authentication 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 13thô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 14n
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 15- 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ả
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ương tự như Secured, nhưng là một phần của tiêu chuẩn Java EE và không
bị giới hạn chỉ trong Spring
- 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 19SpEL, 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
0 3
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.
o Quả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
0 6
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 35Nạn nhân truy cập vào trang web và đăng nhập như
nhâ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
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
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().newSes
sion()
sessionFixation().newSessio
n() 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 41DEMO THỰC TIỄN
Trang 423.2 KỊCH BẢN
2
Clickjackin
g
Trang 43KHÁI NIỆM LỖ
KỊCH BẢN TẤN CÔNG
0 5
Trang 45LÀ 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 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
chuột
Để 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 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 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-Options X-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
clickjacking
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
Nó được thiết kế như là cách để liệt
kê các tên miền có thể sử dụng tài
nguyên như là stylesheets, fonts,
script được phép nhúng.
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-Killing Trê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
clickjacking là 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ị
Trang 58CẤU HÌNH SPRING SECURITY NGĂN CHẶN TẤN
CÔNG CLICKJACKING
Khai báo cấu hình khởi tạo Spring
Security
“SecurityInitializer” không cần phải định nghĩa bất kỳ phương thức nào;
việc kế thừa AbstractSecurityWebApplicationInitializer và đánh dấu
nó với @Configuration là đủ để kích hoạt cấu hình mặc định.
Trang 59CẤU HÌNH SPRING SECURITY NGĂN CHẶN TẤN
CÔNG CLICKJACKING Cấu hình Spring Security với X-Frame-Options header
Spring Security cung cấp HTTP Header
X-Frame-Options để ngăn chặn clickjacking, có 3
giá trị có thể dùng để ngăn chặn:
● SAMEORIGIN: Chỉ cho phép trang web nhúng
frame nếu nó được tải từ cùng một nguồn (origin)
như trang web gốc
● ALLOW-FROM URI: Cho phép nhúng trang web
trong iframe từ một nguồn cụ thể
● DENY: Ngăn chặn hoàn toàn việc nhúng trang web
trong iframe
Trang 60DEMO THỰC TIỄN
3.2.
5
CLICKJACKING
Trang 62KHÁI NIỆM LỖ
HỔNG
CÁCH THỨC HOẠT ĐỘNG CỦA CSRF
ỨNG DỤNG CÔNG NGHỆ SPRING
SECURITY ĐỂ NGĂN CHẶN TẤN
CÔNG CSRF
DEMO THỰC TIỄN
0
1
0 2
0
Trang 64CSRF LÀ GÌ ?
● Tấn công kiểu CSRF
(Cross Site Request Forgery),
còn được gọi là XSRF, Sea
Surf hay Session Riding, là
một kỹ thuật tấn công mà qua
đó kẻ tấn công lừa trình duyệt
web thực hiện các hành động
không mong muốn trên một
ứng dụng mà người dùng đã
đăng nhập vào.
Trang 65CSRF LÀ GÌ ?
● Một cuộc tấn công CSRF thành công có thể gây ra hậu quả nghiêm
trọng cho cả doanh nghiệp và người dùng Nó có thể dẫn đến việc làm hỏng mối quan hệ với khách hàng, chuyển tiền không được ủy quyền, thay đổi mật khẩu và trộm cắp dữ liệu — bao gồm cả cookie phiên làm việc.
● Các cuộc tấn công CSRF thường được thực hiện thông qua các thủ thuật xã hội độc hại, chẳng hạn như email hoặc liên kết mà lừa nạn nhân gửi yêu cầu giả mạo đến máy chủ Vì người dùng không hề biết mình đang được xác thực bởi ứng dụng tại thời điểm bị tấn công, nên không thể phân biệt được đâu là yêu cầu hợp pháp và đâu là yêu cầu giả mạo.