Professional Documents
Culture Documents
Đồ án cuối kì Bảo mật thông tin trong TMDT
Đồ án cuối kì Bảo mật thông tin trong TMDT
0
DANH MỤC HÌNH ẢNH
DANH MỤC BẢNG BIỂU
DANH SÁCH THÀNH VIÊN
LỜI CẢM ƠN
LỜI MỞ ĐẦU
1
Theo báo cáo từ Gartner, triển khai SSO có thể giảm đến 40% chi phí liên quan đến quản
lý danh sách người dùng và quản lý mật khẩu. Điều này là kết quả của việc giảm bớt khả
năng phải duy trì và quản lý nhiều tài khoản và mật khẩu khác nhau cho từng ứng dụng
hay dịch vụ. Thay vào đó, người dùng chỉ cần một lần đăng nhập và sau đó sẽ được xác
thực truy cập tự động vào các hệ thống khác mà họ được phép truy cập. Điều này giúp
giảm bớt gánh nặng về quản lý tài khoản và mật khẩu, đồng thời tăng cường an ninh
thông tin bằng cách giảm nguy cơ do việc sử dụng mật khẩu yếu hoặc bị đánh cắp.
Nghiên cứu của Ponemon Institute cũng chỉ ra rằng 72% tổ chức đánh giá SSO là quan
trọng hoặc rất quan trọng đối với việc cải thiện an ninh thông tin và quản lý người dùng.
Bằng cách tạo ra một cơ sở hạ tầng xác thực chung, SSO giúp giảm thiểu rủi ro từ các
cuộc tấn công mạng như tấn công Brute Force hay tấn công đánh cắp thông tin xác thực.
Ngoài ra, SSO cũng cung cấp một cơ chế kiểm soát truy cập mạnh mẽ, cho phép các tổ
chức quản lý và giám sát quyền truy cập của từng người dùng đối với từng ứng dụng hay
dịch vụ một cách hiệu quả.
Sử dụng JWTs (JSON Web Tokens) cho SSO không chỉ giúp tiết kiệm thời gian mà còn
nâng cao hiệu suất hoạt động của hệ thống.
Trong môi trường SSO, JWT thường được sử dụng để xác thực người dùng sau khi họ đã
đăng nhập thành công vào hệ thống. Quy trình diễn ra như sau khi người dùng cố gắng
truy cập vào một trang của Engage Digital (Engage Digital là một ứng dụng hoặc dịch vụ
đã tích hợp SSO để cung cấp trải nghiệm đăng nhập một lần cho người dùng):
1. Người dùng truy cập vào trang của Engage Digital: Người dùng đã đăng nhập vào
hệ thống SSO và sau đó truy cập vào trang của ứng dụng Engage Digital.
2. Phát hiện SSO và chuyển hướng: Hệ thống phát hiện SSO đã được kích hoạt cho
miền này và tự động chuyển hướng người dùng đến URL đăng nhập từ xa của
JWT.
3. Xác thực người dùng: Tại URL đăng nhập từ xa của JWT, người dùng được xác
thực thông qua hệ thống SSO.
4. Tạo token JWT: Sau khi xác thực thành công, hệ thống tạo ra một token JWT bằng
cách sử dụng mã bí mật chia sẻ và dữ liệu của người dùng đã xác thực.
5. Chuyển hướng trở lại và kiểm tra token: Người dùng được chuyển hướng trở lại
đến URL Điểm cuối JWT của Engage Digital, cùng với token JWT. Hệ thống
kiểm tra tính hợp lệ của token JWT, đảm bảo dữ liệu không bị sửa đổi và xác thực
người dùng dựa trên external_id trong token.
2
b. Xác thực Stateless
Xác thực Stateless, đặc biệt là thông qua việc sử dụng JSON Web Tokens (JWT), đã trở
thành một phương pháp phổ biến trong việc xác thực người dùng trong ứng dụng web và
di động. Tính stateless của JWT mang lại nhiều lợi ích quan trọng, giúp tối ưu hóa hiệu
suất hệ thống và tăng cường bảo mật thông tin.
Trước hết, tính stateless của JWT làm cho việc mở rộng hệ thống trở nên dễ dàng hơn.
Trong các phương pháp truyền thống như xác thực dựa trên phiên (session-based
authentication), máy chủ phải lưu trữ trạng thái phiên cho mỗi người dùng đã đăng nhập.
Điều này có thể tạo ra áp lực lớn đối với hệ thống, đặc biệt là khi số lượng người dùng và
quy mô của ứng dụng tăng lên. Tuy nhiên, với JWT, mọi thông tin cần thiết để xác thực
người dùng được chứa trong token chính, không cần phải lưu trữ trạng thái phiên trên
máy chủ. Điều này giúp giảm bớt gánh nặng cho máy chủ và tăng khả năng mở rộng của
hệ thống.
Một nghiên cứu của TechRepublic còn chỉ ra rằng việc sử dụng JWT authentication có
thể giảm tải cho máy chủ lên đến 50% so với các phương pháp stateful khác. Khi sử dụng
JWT, máy chủ không cần phải duy trì trạng thái phiên cho mỗi người dùng và không cần
phải thực hiện các thao tác lưu trữ và truy vấn dữ liệu liên quan. Thay vào đó, máy chủ
có thể đơn giản chỉ cần giải mã và xác thực token, rồi trả về kết quả mà không cần phải
lưu trữ bất kỳ dữ liệu phiên nào. Điều này giúp giảm bớt tải cho máy chủ, cải thiện hiệu
suất hoạt động và giảm thiểu nguy cơ mất mát dữ liệu.
c. Phân quyền
3
Phân quyền đóng một vai trò quan trọng trong việc bảo vệ thông tin và đảm bảo an toàn
cho hệ thống thông tin của một tổ chức. Nghiên cứu của Verizon cũng đã chỉ ra tầm quan
trọng của việc triển khai các biện pháp phân quyền hiệu quả trong việc ngăn chặn các vi
phạm dữ liệu. Theo nghiên cứu này, 68% các vi phạm dữ liệu được báo cáo có thể được
ngăn chặn bằng cách triển khai các biện pháp phân quyền hiệu quả.
.JWTs (JSON Web Tokens) đã giúp cải thiện quá trình phân quyền bằng cách chứa thông
tin về vai trò và quyền hạn của người dùng trong token, từ đó giúp máy chủ đưa ra quyết
định phân quyền mà không cần phải thực hiện truy vấn cơ sở dữ liệu.
Một trong những ưu điểm lớn nhất của việc sử dụng JWTs cho phân quyền là khả năng
chứa thông tin chi tiết về vai trò và quyền hạn của người dùng trong token. Thông tin này
bao gồm các thông tin như vai trò của người dùng (ví dụ: quản trị viên, người dùng
thường), quyền hạn cụ thể (ví dụ: quyền xem, chỉnh sửa, xóa), và phạm vi của các quyền
hạn đó (ví dụ: quyền hạn đối với một phần tử cụ thể trong hệ thống). Khi máy chủ nhận
được token JWT từ người dùng, nó có thể dễ dàng giải mã và trích xuất các thông tin này
để xác định vai trò và quyền hạn của người dùng mà không cần phải thực hiện truy vấn
cơ sở dữ liệu phức tạp.
Đây là một phác thảo về quy trình ủy quyền JWT điển hình, từ khi người dùng xác thực
đến khi máy chủ xác minh và cung cấp quyền truy cập vào tài nguyên. Dưới đây là các
bước cụ thể:
1. Xác thực: Máy khách gửi thông tin xác thực của người dùng đến máy chủ. Máy
chủ sau đó xác thực người dùng và tạo JWT chứa thông tin về người dùng.
2. Phát hành mã thông báo: Máy chủ gửi JWT trở lại máy khách, nơi nó được lưu trữ
để sử dụng trong tương lai.
3. Gửi mã thông báo: Khi máy khách muốn truy cập vào tài nguyên được bảo vệ trên
máy chủ, nó sẽ gửi JWT trong tiêu đề Ủy quyền của yêu cầu HTTP.
4. Xác minh mã thông báo: Máy chủ nhận được yêu cầu và xác minh JWT bằng cách
kiểm tra chữ ký của nó bằng khóa bí mật đã được sử dụng để ký nó. Nếu JWT hợp
lệ, máy chủ sẽ trích xuất thông tin có trong đó và sử dụng nó để xác định những
hành động mà người dùng được phép thực hiện.
5. Cho phép yêu cầu: Nếu người dùng được phép truy cập vào tài nguyên, máy chủ
sẽ trả về dữ liệu được yêu cầu. Nếu không, máy chủ sẽ trả về một thông báo lỗi.
4
d. Cross-Origin Resource Sharing (CORS)
Chia sẻ nguồn tài nguyên gốc qua các miền (CORS) là một khía cạnh quan trọng của việc
phát triển ứng dụng web hiện đại, nhưng cũng mang lại nhiều thách thức về bảo mật.
Trong bối cảnh này, việc sử dụng JSON Web Tokens (JWTs) đã trở thành một giải pháp
phổ biến để tăng cường an ninh và bảo vệ thông tin người dùng khi giao tiếp an toàn giữa
các miền.
JWTs có thể được sử dụng để giao tiếp an toàn giữa các miền trong ứng dụng web bằng
cách bao gồm chúng trong các tiêu đề HTTP. Khi một yêu cầu được gửi từ một miền này
đến một miền khác, JWT có thể được gửi kèm theo để xác thực và ủy quyền người dùng.
Điều này giúp đảm bảo rằng chỉ những người dùng được ủy quyền mới có thể truy cập
vào các tài nguyên được chia sẻ giữa các miền, đồng thời bảo vệ thông tin cá nhân và dữ
liệu quan trọng.
Một báo cáo từ Open Web Application Security Project (OWASP) đã chỉ ra rằng việc sử
dụng JWTs trong CORS có thể giúp giảm đến đáng kể nguy cơ tấn công liên quan đến
việc chia sẻ nguồn tài nguyên gốc. JWTs cung cấp một cơ chế an toàn và linh hoạt để xác
thực người dùng và quản lý quyền truy cập trên các miền khác nhau, từ đó giảm thiểu rủi
ro từ các cuộc tấn công như tấn công giả mạo và tấn công giữa các trang web (Cross-Site
Scripting - XSS).
1.2. Giới hạn, rủi ro
a. Kích thước của Token
Kích thước của token JWT (JSON Web Token) là một yếu tố quan trọng cần xem xét
trong quá trình thiết kế và triển khai các hệ thống xác thực và ủy quyền. Dữ liệu từ một
nghiên cứu của Google đã chỉ ra rằng kích thước của một JWT có thể dao động từ 1 KB
đến 4 KB, phụ thuộc vào số lượng thông tin người dùng được chứa trong token.
Đối với một ứng dụng web có hàng nghìn người dùng đăng nhập mỗi ngày, việc xử lý
hàng triệu yêu cầu trong đó mỗi yêu cầu gửi và nhận một token có kích thước lớn có thể
gây ra một lượng lưu lượng mạng đáng kể. Kích thước lớn của token có thể ảnh hưởng
đến hiệu suất và tốc độ của ứng dụng, đặc biệt khi có số lượng lớn yêu cầu được gửi đi và
xử lý hàng ngày.
b. Kiếm soát thời gian sống của Token
Quản lý thời gian sống của token là một phần quan trọng và đôi khi là một thách thức đối
với các hệ thống phân tán, đặc biệt là trong bối cảnh các ứng dụng web hiện đại ngày nay
đòi hỏi sự linh hoạt và độ chính xác trong việc xác định thời gian hiệu lực của token.
Một trong những thách thức lớn khi quản lý thời gian sống của token là đảm bảo rằng
chúng không tồn tại quá lâu, dẫn đến nguy cơ cho việc truy cập trái phép vào hệ thống.
5
Tuy nhiên, đồng thời cũng cần phải tránh việc token bị hủy quá sớm, dẫn đến sự phiền
toái cho người dùng và làm giảm trải nghiệm của họ.
Nghiên cứu từ OWASP cũng đã chỉ ra rằng việc quản lý thời gian sống của token đóng
vai trò quan trọng trong việc ngăn chặn các cuộc tấn công mạng. Thực tế, 85% các cuộc
tấn công mạng liên quan đến việc sử dụng token đều liên quan đến việc quản lý thời gian
sống của chúng. Điều này chỉ ra rằng việc thiết lập và duy trì một cơ chế quản lý thời
gian sống của token hiệu quả là cực kỳ quan trọng để bảo vệ hệ thống khỏi các cuộc tấn
công và đảm bảo tính an toàn của dữ liệu và người dùng.
c. Rủi ro về bảo mật
Rủi ro về bảo mật liên quan đến việc sử dụng JWTs (JSON Web Tokens) là một trong
những vấn đề quan trọng cần được xem xét và giải quyết một cách cẩn thận. Trong khi
JWTs cung cấp một cơ chế hiệu quả để xác thực và ủy quyền trong các ứng dụng web,
nhưng nếu không được bảo vệ đúng cách, chúng có thể trở thành điểm yếu trong hệ
thống, mở ra cánh cửa cho các cuộc tấn công giả mạo.
Một trong những rủi ro chính liên quan đến bảo mật JWTs là nếu khóa bí mật được sử
dụng để ký các token bị đánh cắp, kẻ tấn công có thể sử dụng khóa này để tạo ra các
token giả mạo. Khi token giả mạo được tạo ra, kẻ tấn công có thể giả mạo danh tính của
người dùng và truy cập vào các tài nguyên hoặc dữ liệu mà họ không được phép.
Bảo vệ khóa bí mật là một yếu tố vô cùng quan trọng để ngăn chặn các cuộc tấn công giả
mạo này. Điều này bao gồm việc sử dụng các phương pháp bảo mật như mã hóa mạnh
mẽ, quản lý khóa an toàn và việc giảm thiểu việc tiết lộ khóa bí mật.
Thêm vào đó, một nghiên cứu từ Ponemon Institute chỉ ra rằng việc xử lý các cuộc tấn
công giả mạo có thể tạo ra một chi phí trung bình lên đến 3 triệu đô la cho mỗi tổ chức.
Điều này làm nổi bật tầm quan trọng của việc đầu tư và triển khai các biện pháp bảo mật
mạnh mẽ để bảo vệ khóa bí mật và ngăn chặn các cuộc tấn công giả mạo.
d. Không thể hủy Token
Một trong những thách thức lớn khi sử dụng JWTs (JSON Web Tokens) trong hệ thống
xác thực và ủy quyền là việc không có khả năng hủy token trước khi nó hết hạn. Điều này
có nghĩa là JWT vẫn còn hiệu lực cho đến khi nó hết thời gian hiệu lực được xác định
trước, và không thể bị hủy trước khi đó. Tính không thể hủy của token có thể gây ra một
loạt vấn đề về bảo mật và quản lý quyền truy cập trong một số tình huống cụ thể.
Một trong những tình huống mà việc không có khả năng hủy token trở nên đặc biệt nguy
hiểm là khi quyền truy cập của người dùng cần phải bị thu hồi ngay lập tức, chẳng hạn do
phát hiện một vụ vi phạm bảo mật. Trong trường hợp này, việc không thể hủy token có
6
thể cho phép kẻ tấn công tiếp tục truy cập vào hệ thống và các tài nguyên được bảo vệ
cho đến khi token hết hạn, gây ra nguy cơ lớn cho tính bảo mật của hệ thống.
Nghiên cứu từ Forrester cũng đã chỉ ra rằng tổn thất do việc không có khả năng hủy
token có thể lên đến hàng trăm nghìn đô la cho mỗi vụ vi phạm. Điều này làm nổi bật sự
cần thiết của việc triển khai cơ chế hủy token hiệu quả và linh hoạt, để có thể ngăn chặn
và giảm thiểu các rủi ro bảo mật một cách hiệu quả.
e. Giới hạn cập nhật Token
Một trong những đặc điểm của JWTs (JSON Web Tokens) là tính không thể cập nhật sau
khi được phát hành. Điều này có nghĩa là thông tin trong token, như vai trò hoặc quyền
hạn của người dùng, không thể được thay đổi sau khi token đã được tạo ra. Trong một số
trường hợp, điều này có thể tạo ra những thách thức liên quan đến quản lý quyền truy cập
và an ninh hệ thống.
Với việc không có khả năng cập nhật token, khi vai trò hoặc quyền hạn của người dùng
thay đổi, họ có thể phải đăng nhập lại để nhận được một token mới với thông tin được
cập nhật. Điều này không chỉ gây ra sự phiền toái cho người dùng mà còn làm tăng tính
phức tạp và chi phí trong quản lý quyền truy cập của hệ thống.
2. So sánh với các phương pháp xác thực khác
JWTs đã trở nên rất phổ biến trong các ứng
dụng web và di động, đặc biệt là trong việc
xác thực và ủy quyền. Cộng đồng phát triển
JWTs
mạnh mẽ và rộng lớn của JWTs cung cấp sự
hỗ trợ và phản hồi tích cực từ các nhà phát
triển trên toàn thế giới.
7
nhưng SAML vẫn được sử dụng rộng rãi
trong các môi trường doanh nghiệp và hệ
thống phân tán.
8
dụng HTTPS là rất quan trọng để đảm bảo
an toàn khi truyền token qua mạng.
9
Java, Node.js, Python, .NET, PHP và nhiều
ngôn ngữ lập trình khác.
10
- Lớp Bảo Mật Tầng 1 - Transport Layer Security (TLS/SSL): Hệ thống sử dụng
HTTPS để bảo vệ thông tin khi truyền qua mạng. Tất cả các kết nối giữa máy
khách và máy chủ đều được mã hóa để ngăn chặn việc đánh cắp hoặc sửa đổi dữ
liệu trong quá trình truyền tải.
- Lớp Bảo Mật Tầng 2 - Xác Thực và Ủy Quyền (Authentication & Authorization):
Khi người dùng yêu cầu truy cập vào hệ thống, họ cung cấp thông tin xác thực, ví
dụ như tên người dùng và mật khẩu. Máy chủ sẽ xác thực thông tin này và tạo
JWT chứa các thông tin về người dùng và quyền hạn của họ. JWT sẽ được gửi lại
cho người dùng, và từ đó được sử dụng để xác thực và ủy quyền trong các yêu cầu
sau này.
- Lớp Bảo Mật Tầng 3 - Kiểm Tra Chữ Ký Số (Signature Verification): Trước khi
tin tưởng vào nội dung của JWT, máy chủ sẽ kiểm tra chữ ký số của nó để đảm
bảo tính toàn vẹn và xác thực của token. Chữ ký số được tạo bằng cách sử dụng
khóa bí mật duy nhất mà chỉ máy chủ biết, do đó chỉ có máy chủ mới có thể xác
minh tính hợp lệ của JWT.
- Lớp Bảo Mật Tầng 4 - Quản Lý Thời Gian Sống của Token (Token Expiry
Management): Mỗi JWT được cấu hình với một thời gian sống hợp lý. Khi JWT
hết hạn, người dùng sẽ cần phải tái xác thực để nhận được một token mới. Việc
này giúp đảm bảo rằng các token không tồn tại quá lâu và gây ra nguy cơ bảo mật,
đồng thời cũng cần bổ sung bảo mật bằng cách yêu cầu xác thực lại định kỳ.
Một phương pháp hiệu quả để ngăn chặn CSRF là sử dụng CSRF token. CSRF token là
một token duy nhất được tạo ra cho mỗi phiên làm việc của người dùng và được đính
kèm vào các yêu cầu từ phía máy khách. Khi máy chủ nhận được yêu cầu, nó sẽ kiểm tra
CSRF token để xác nhận rằng yêu cầu đến từ một nguồn tin cậy và không phải là một yêu
cầu giả mạo.
Kết hợp JWT với CSRF token là một cách mạnh mẽ để bảo vệ ứng dụng web khỏi CSRF.
JWT được sử dụng để xác thực và ủy quyền người dùng, trong khi CSRF token được sử
11
dụng để xác thực tính hợp lệ của yêu cầu từ phía máy khách. Khi người dùng đăng nhập
và nhận được JWT, CSRF token cũng được tạo ra và gửi kèm theo JWT. Mỗi khi người
dùng thực hiện một yêu cầu, CSRF token sẽ được đính kèm vào yêu cầu đó. Khi máy chủ
nhận được yêu cầu, nó sẽ kiểm tra cả JWT và CSRF token để đảm bảo tính toàn vẹn và
xác thực của yêu cầu.
Việc kết hợp JWT với CSRF token cung cấp một cơ chế bảo mật toàn diện và hiệu quả để
ngăn chặn các cuộc tấn công CSRF trong ứng dụng web. Điều này giúp bảo vệ thông tin
cá nhân của người dùng và đảm bảo tính toàn vẹn của hệ thống trước các mối đe dọa từ
các cuộc tấn công mạng.
12