MỤC LỤC
MỤC LỤC............................................................................................................................................1
HÌNH ẢNH..........................................................................................................................................2
Chương 1 – AN TOÀN ỨNG DỤNG WEB.......................................................................................5
Chương 2 – AN TOÀN ỨNG DỤNG WEB XÂY DỰNG TRÊN .NET FRAMEWORK...............9
Chương 3 – XÂY DỰNG ỨNG DỤNG ASP.NET AN TOÀN.......................................................34
Chương 4 – THIẾT KẾ DEMO.......................................................................................................59
1
HÌNH ẢNH
Hình 1: Các bước tấn công.................................................................................................................7
Hình 2: Tiến trình mô hình hiểm hoạ...............................................................................................8
Hình 3: Role-based security..............................................................................................................10
Hình 4: Code access security...........................................................................................................12
Hình 5: Các security namespaces....................................................................................................13
Hình 6: Các mối đe doạ hàng đầu...................................................................................................14
Hình 7: Các thành phần dịch vụ trong một ứng dụng Enterprise Services tầng giữa.................18
Hình 8: Enterprise Services threats................................................................................................19
Hình 9: Các mối hiểm hoạ chính đối với dịch vụ Web...................................................................22
Hình 10: Kiến trúc bảo mật..............................................................................................................35
Hình 11: Khoanh vùng web site.......................................................................................................42
Hình 12: Mô hình hoá chức năng...................................................................................................59
Hình 13: Phân rã chức năng............................................................................................................60
Hình 14: Hệ thống............................................................................................................................60
Hình 15: Cơ sở gây ô nhiễm.............................................................................................................61
Hình 16: Quản lý hồ sơ.....................................................................................................................61
Hình 17: Quản lý người dùng..........................................................................................................62
Hình 18: Quản lý dữ liệu tĩnh cấp cục............................................................................................63
Hinh 19: Thống kê báo cáo..............................................................................................................63
2
LỜI CẢM ƠN
Em xin cảm ơn các thầy cô trong khoa Công nghệ Thông tin trường Đại học Công
nghệ, Đại học Quốc Gia Hà Nội, đặc biệt là các thầy cô ở bộ môn Mạng và truyền thông đã
giúp đỡ chúng em trưởng thành trong những năm học tập tu dưỡng.
Em bày tỏ lòng biết ơn đối với PGS – TS Hồ Sỹ Đàm là người đã nhiệt tình hướng
dẫn giúp đỡ em, chỉ bảo tận tình, cùng với sự động viên và giúp em vượt qua nhiều khó khăn
trong quá trình hoàn thành bản khoá luận này.
Khóa luận tốt nghiệp được thực hiện trong khuôn khổ của đề tài: “Tăng cường an
ninh cho các ứng dụng trên nền .NET”
Cuối cùng em xin gửi lời cảm ơn tới tất cả các bạn bè, gia đình đã động viên em trong
quá trình học tập và làm khoá luận tốt nghiệp.
Hà Nội, tháng 5 năm 2006
Sinh viên
Đặng Hữu Thành
3
LỜI NÓI ĐẦU
Hiện nay công nghệ .NET của Microsoft được sử dụng rất rộng rãi trong việc xây
dựng các ứng dụng sử dụng trong thực tế. Bên cạnh việc xây dựng ứng dụng thì vấn đề
an toàn của một ứng dụng là rất quan trọng, đặc biệt là trong các ứng dụng thương mại
điện tử như bán hàng qua mạng, thực hiện chuyển tiền vào tài khoản qua mạng,… .NET
Framework cung cấp cho ta rất nhiều thư viện dùng để tăng cường an ninh cho ứng
dụng.
Khoá luận này trình bày khả năng tăng cường an ninh cho các ứng dụng xây dựng
trên nền .NET Framework và đặc biệt tập trung vào các ứng dụng Web.
Khoá luận gồm 4 chương:
Chương 1. An toàn ứng dụng Web.
Trình bày tổng quan về an toàn ứng dụng web.
Chương 2. An toàn ứng dụng Web xây dựng trên nền .NET Framework.
Trình bày tổng quan về an toàn ứng dụng Web xây dựng trên nền .NET Framework,
các kỹ thuật chính và các thư viện dùng để tăng cường an ninh.
Chương 3. Xây dựng ứng dụng Web ASP.NET an toàn
Nghiên cứu cụ thể về an toàn ứng dụng Web ASP.NET. Xây dựng các gói assemblies,
các thành phần dịch vụ, các dịch vụ Web, các trang và các điều khiển an toàn. Các kiểu tấn
công phổ biến và biện pháp phòng chống hữu hiệu.
Chương 4. Thiết kế demo.
Tăng cường an ninh cho web site của Cục bảo vệ tài nguyên môi trường
4
Chương 1 – AN TOÀN ỨNG DỤNG WEB
1.1. Các vấn đề cơ bản về an toàn ứng dụng Web.
Khi ta nghe nói về an toàn ứng dụng Web, có một khuynh hướng ngay lập tức nghĩ
về các kẻ tấn công làm hỏng Web site, ăn cắp các số credit card, và ném bom các Web site
với các kiểu tấn công từ chối dịch vụ. Ta cũng có thể nghĩ về virus, Trojan horses, và
worms. Đây là những vấn đề rắc rối được quan tâm nhất vì chúng đại diện cho một số các
hiểm hoạ đáng quan tâm nhất mà các ứng dụng Web ngày nay phải đối mặt.
An toàn về cơ bản là việc bảo vệ các tài nguyên quan trọng. Các tài nguyên này có
thể là những thứ có thể sờ thấy được như trang Web hoặc cơ sở dữ liệu hoặc có thể là
những thữ không sờ thấy được như danh tiếng của một công ty.
An toàn là một con đường không có đích. Mỗi khi phân tích kiến trúc và ứng dụng,
ta xác định các hiểm hoạ tiềm tàng và hiểu rằng mỗi hiểm hoạ đại diện cho một mức độ rắc
rối.Vấn đề an toàn chính là việc quản lý rắc rối và việc thực thi các biện pháp phòng chống
hữu ích.
Các vấn đề cơ bản:
Xác thực
Xác thực trả lời câu hỏi: bạn là ai? Nó là một tiến trình nhận dạng các client của các
ứng dụng và các dịch vụ. Đó có thể là người dùng cuối, các dịch vụ, các tiến trình, hoặc là
các máy tính. Theo cách nói về an toàn thì các client được xác thực được đề cập tới như là
principals
Chứng thực
Chứng thực trả lời câu hỏi: bạn có thể làm gì? Đó là một tiến trình quản lý các tài
nguyên và các hoạt động mà client đã được xác thực được cấp quyền truy cập. Các tài
nguyên bao gồm các tệp, cơ sở dữ liệu, các bảng, hàng, vv…cùng với các tài nguyên mức
hệ thống như dữ liệu cấu hình. Các hoạt động bao gồm việc thực thi các giao tác, bán một
sản phẩm, chuyển tiền từ một tài khoản sang một tài khoản khác, vv…
Kiểm tra
5
Kiểm tra và ghi lại là điểm chính để không từ chối. Không từ chối đảm bảo rằng
một người dùng không thể từ chối việc thực thi một hoạt động hay việc khởi tạo một giao
tác. Ví dụ trong một hệ thống thương mại điện tử, kỹ thuật không từ chối được yêu cầu để
đảm bảo rằng một người dùng không thể từ chối việc đặt 100 quyển sách.
Sự tin cậy
Sự cẩn mật cũng được đề cập tới như là privacy, là một tiến tình đảm bảo rằng dữ
liệu vẫn riêng tư và tin cậy và không thể được xem bởi những người dùng không được
chứng thực hoặc bởi những kẻ nghe lén mạng ( người quản lý giao thông mạng). Mã hoá
thường được dùng để đảm bảo sự tin cậy. ACL đôi cũng là một phương tiện cho mục đích
này
Sự toàn vẹn
Toàn vẹn đảm bảo rằng dữ liệu được bảo vệ khỏi việc chỉnh xửa vô tình hay cố ý.
Sự riêng tư và sự toàn vẹn là vấn đề quan tâm chính, đặc biệt là với dữ liệu truyền qua
mạng. Về cơ bản ta có thể sử dụng kỹ thuật băm và MAC để đảm bảo sự toàn vẹn.
Sự sẵn sàng
Nghĩa là hệ thống vẫn sẵn sàng với những người dùng hợp pháp. Nhiều kẻ tấn công
sử dụng các hành động tấn công từ chối dịch vụ để phá hỏng một ứng dụng để người dùng
khác không thể truy cập ứng dụng.
Ta không thể thiết kế và xây dựng một ứng dụng Web an toàn cho tới khi ta biết các
hiểm hoạ. Một qui tắc quan trọng để xác định mẫu thiết kế ứng dụng đó là việc mô hình
hiểm hoạ. Mục đích của việc mô hình hiểm hiểm hoạ là để phân tích kiến trúc của ứng
dụng, thiết kế và xác định các vùng yếu tiềm tàng có thể cho phép một người dùng hoặc
một kẻ tấn công với ý đồ xấu làm hại tới sự an toàn của hệ thống.
Việc thiết kế và phát triển phần mềm ứng dụng cần được hỗ trợ bởi việc cấu hình an
toàn mạng, máy chủ và ứng dụng trên máy chủ nơi ứng dụng được phát hành.
1.2. Thuật tấn công
Các bước trong phương pháp tấn công thể hiện ở hình dưới đây.
6
Hình 1: Các bước tấn công.
Khảo sát và đánh giá
Khám phá và thâm nhập
Vượt quyền
Duy trì kết nối
Từ chối dịch vụ
1.3. Mô hình hiểm họa
Mô hình hiểm hoạ nên được sử dụng trong suốt quá trình thiết kế ứng dụng cũng
như trong suốt vòng đời của ứng dụng. Có hai lý do để làm như vậy. Thứ nhất, không thể
xác định toàn bộ hiểm hoạ có thể xảy ra. Thứ hai, vì các ứng dụng hiếm khi tĩnh và cần
nâng cấp và sửa lại cho phù hợp với sự thay đổi các yêu cầu nghiệp vụ.
7
Hình 2: Tiến trình mô hình hiểm hoạ
Xác định các tài nguyên có giá trị
Lập một kiến trúc tổng quan bao gồm các hệ thống con, các rào cản tin cậy, và dòng
chảy dữ liệu
Phân tích ứng kiến trúc của ứng dụng, bao gồm hạ tần mạng và máy chủ, tạo một
chiến lược an toàn cho ứng dụng. Mục tiêu của chiến lược này là để nhận ra các
điểm yếu trong thiết kế, thi hành hoặc cấu hình phát hành của ứng dụng.
Xác định các hiểm hoạ có thể ảnh hưởng tới ứng dụng.
Lập tài liệu các hiểm hoạ
Đánh giá các hiểm hoạ để chỉ ra hiểm hoạ nguy hiểm nhất.
8
Chương 2 – AN TOÀN ỨNG DỤNG WEB XÂY DỰNG
TRÊN .NET FRAMEWORK
2.1. Tổng quan về an toàn ứng dụng Web xây dựng trên .NET
Framework.
Microsoft .Net Framework cung cấp nhiều kỹ thuật và nhiều thư viện giúp chúng ta
xây dựng mã và tạo các ứng dụng Web được an toàn.
Các kỹ thuật chính được sử dụng là Role-based security và Code access security.
2.1.1. Role-Based Security
Bảo mật dựa vào vai trong .NET Framework cho phép một ứng dụng Web tạo các
quyết định bảo mật dựa theo đặc tính nhận dạng hoặc các vai thành viên của người dùng
giao tác với ứng dụng. Nếu ứng dụng của chúng ta sử dụng xác thực Windows thì một vai là
một nhóm Windows. Nếu ứng dụng của chúng ta sử dụng các dạng xác thực khác thì một vai
là một ứng dụng được định nghĩa và người dùng và chi tiết vai được giữ trong SQL Server
hay các nơi lưu trữ người dùng trong Active Directory.
Đặc tính nhận dạng của người dùng được xác thực và tư cách vai thành viên được kết
hợp của nó sẵn có cho các ứng dụng Web qua đối tượng Principal, đối tượng này được đính
kèm vào yêu cầu Web hiện tại.
Hình 3 cách sử dụng Role-based security trong ứng dụng Web để hạn chế người dùng
truy cập tới các trang Web, mức nghiệp vụ, các hoạt động và dữ liệu.
9
Hình 3: Role-based security
Role-based security trong .NET Framework là một công nghệ chính được dùng để
chứng thực các hành động của người dùng trong một ứng dụng. Các vai thường được dùng
để ép buộc các qui định về nghiệp vụ. Ví dụ: một chương trình tài chính có thể chỉ cho phép
các nhà quản lý thực hiện chuyển một lượng tiền vượt quá một ngưỡng quy định.
Role-based security bao gồm các yếu tố sau:
Principals và identities
PrincipalPermission object
Role-based security checks
URL authorization
Principals and Identities
Role-based security được thực thi với các đối tượng Principal và Identity. Đặc tính
nhận dạng và vai thành viên của người dùng đã xác thực được phơi bày qua đối tượng
Principal, đối tượng này được gắn kèm với yêu cầu Web hiện tại. Chúng ta có thể sử dụng
thuộc tính HttpContext.Current.User để lấy thông tin về đối tượng. Nếu người dùng
không được yêu cầu xác thực với ứng dụng chẳng hạn người dùng đang duyệt một phần có
10
thể truy cập công cộng của site thì đối tượng Principal đại diện cho người dùng Internet ẩn
danh.
Có nhiều loại đối tượng Principal và dùng loại nào là tùy thuộc vào kỹ thuật xác thực
mà ứng dụng đó sử dụng. Tuy vậy, tất cả các đối tượng Principal đều thực thi interface
System.Security.Principal.IPrincipal và tất cả được lưu dữ trong một danh sách các vai
mà người dùng là thành viên của nó.
Các đối tượng chính cũng chứa các đối tượng Identity. Đối tượng này chứa tên
người dùng và các cờ để xác minh kiểu xác thực và xác minh người dùng đã được xác thực
rồi hay chưa. Có các loại đối tượng Identity khác nhau tuỳ thuộc vào loại xác thực, nhưng tất
cả đều thực thi interface System.Security.Principal.IIdentity.
The following table shows the range of possible authentication types and the
different types of Principal and Identity objects that ASP.NET Web applications use.
Bảng dưới đây là các loại xác thực và các loại đối tượng Principal và Identity mà ứng
dụng web ASP.NET sử dụng.
Kiểu xác thực Loại Principal và Identity Chú thích
Windows
WindowsPrincipal +
WindowsIdentity
Việc xác minh là tự động và sử dụng
SAM hoặc Active Directory.
Windows Groups được dùng cho các
vai.
Forms
GenericPrincipal +
FormsIdentity
Chúng ta phải thêm mã để xác minh
người dùng là đáng tin và lấy về các vai
thành viên từ một user store.
Passport
GenericPrincipal +
PassportIdentity
Dựa vào Microsoft Passport SDK.
PassportIdentity cung cấp truy cập tới vé
xác thực passport.
2.1.2. Code Access Security
Bảo mật truy nhập mã cấp quyền cho đoạn mã khi nó cố gắng truy cập tới các tài
nguyên được bảo mật như: file system, registry, network,… hoặc khi nó cố gắng thực thi các
hoạt động đặc quyền khác như: gọi tới các đoạn mã không được quản lý hoặc sử dụng
reflection
11
Bảo mật truy nhập mã là một kỹ thuật rào cản bổ xung quan trọng, ta có thể sử dụng
để cung cấp các ràng buộc vào một phần nhỏ của đoạn mã. Một người quản trị có thể cấu
hình chính sách bảo mật truy nhập mã để hạn chế các loại tài nguyên mà mã có thể truy cập
và các hoạt động đặc quyền khác có thể thực hiện. Đối với một ứng dụng Web, một kẻ tấn
công có thể chiếm điều khiển của một tiến trình của nó hoặc nhúng mã để thực thi bên trong
tiến trình đó, các ràng buộc thêm vào mà bảo mật mã cung cấp có thể hạn chế sự phá huỷ khi
các hành động này được thực hiện.
Hình 4 minh hoạ hoạt động logic của code access security
Hình 4: Code access security
Việc xác thực mã dựa vào bằng chứng về mã chẳng hạn như: tên, nhà phân phối, thư
mục cài đặt. Còn việc chứng thực dựa vào các quyền truy cập mã.
2.1.3. Các không gian tên để xây dựng an toàn các ứng dụng trong .NET
Framework
Để lập trình bảo mật trong .NET Framework, chúng ta sử dụng các loại không gian
tên bảo mật trong .NET Framework.
Các namespace dùng cho bảo mật:
System.Security
12
System.Web.Security
System.Security.Cryptography
System.Security.Principal
System.Security.Policy
System.Security.Permissions
Hình 5: Các security namespaces
2.2. Xây dựng các gói assembly an toàn
2.2.1. Các mối đe doạ và biện pháp phòng chống:
Hiểu các mối đe doạ và các kiểu tấn công chung giúp chúng ta nhận ra các phương án
phòng chống tương ứng và cho phép chúng ta xây dựng các gói assemblies an hoàn và vững
chắc hơn . Các mối đe doạ chính:
Truy cập không được chứng thực hoặc sự vượt quyền, hoặc cả hai.
Nhúng mã.
Phơi bày thông tin.
13
Làm xáo trộn thông tin
Hình 6: Các mối đe doạ hàng đầu
a. Truy nhập không được chứng thực hoặc vượt quyền, hoặc cả hai
Các rắc rối với truy cập không được chứng thực có thể dẫn tới sự vượt quyền, tức là
một người dùng không được chứng thực hoặc mã không được chứng thực có thể gọi thư
viện của bạn và thực thi các hoạt động đặc quyền và truy cập tới tài nguyên bị hạn chế.
Các điểm yếu:
Bao gồm:
Sự chứng thực dựa vào vai là yếu ớt hoặc thiếu chặt chẽ.
Các kiểu bên trong và các kiểu thành viên bị phơi bày một cách tình cờ.
Sử dụng các khẳng định truy nhập mã và các yêu cầu liên quan không an
toàn.
Không khai báo bịt kín và không hạn chế truy cập các lớp cơ sở, điều này cho
phép mã bất kỳ dẫn xuất từ chúng.
Các hành động tấn công:
14
Bao gồm:
Một tấn công nhử mồi ở nơi mà mã ác ý truy cập vào thư viện của bạn qua
một thư viện trung gian đáng tin bằng cách vượt qua các kỹ thuật chứng thực.
Mộ tấn công ở nơi mà mã ác ý vượt qua các điều khiển truy cập bằng việc gọi
trực tiếp các lớp mà không định dạng phần API công cộng của thư viện.
Các phương án phòng chống:
Bao gồm:
Sử dụng Role-based authorization để tránh truy cập các điều khiển trên các
lớp công cộng và các thành viên lớp.
Hạn chế hiển thị kiểu và thành viên để giới hạn đoạn mã nào là có thể truy cập
công cộng.
Đóng kín đoạn mã đăc quyền và đảm bảo việc gọi mã được chứng thực với
các yêu cầu quyền tương ứng.
Đóng kín các lớp không cơ sở chưa đóng hoặc hạn chế thừa kế với code
access security.
b. Nhúng mã
Kẻ tấn công thực thi mã đặc biệt, mà đoạn mã này sử dụng ngữ cảnh bảo mật mức xử
lý của gói assembly. Rắc rối được sinh ra nếu gói assembly gọi mã không được quản lý và
nếu gói assembly thực thi một tài khoản đặc quyền.
Các điểm yếu:
Bao gồm:
Kiểm tra dữ liệu vào kém, cụ thể là nơi mà gói assembly triệu gọi tới mã
không được quản lý.
Chấp nhận các ứng viên từ mã đáng tin cục bộ.
Các tài khoản sử lý đặc quyền.
Các hành động tấn công:
Bao gồm:
Tràn bộ đệm
15
Đính kèm một ứng viên từ một nguồn không đáng tin.
Các phương án phòng chống:
Bao gồm:
Kiểm tra các tham số đầu vào.
Kiểm tra dữ liệu được truyền qua các API không được quản lý.
Không chấp nhận các ứng viên từ nguồn không đáng tin.
Sử dụng các ứng viên có kiểu mạnh và từ chối các quyền trước khi gọi ứng
viên.
Thực thi các gói assembly bằng việc sử dụng các tài khoản ít đặc quyền nhất.
c. Phơi bày thông tin:
Các gói assembly có thể hứng chịu việc phơi bày thông tin nếu chúng rò rỉ những dữ
liệu nhạy cảm.
Các điểm yếu:
Bao gồm:
Nắm bắt ngoại lệ yếu ớt.
Khó giữ bí mật mã.
Các hành động tấn công:
Bao gồm:
Cố gắng gây lỗi bằng việc truyền đầu vào nguy hiểm cho gói assembly
Sử dụng ILDASM trong một gói assembly để che kín các thông tin bí mật.
Các phương án phòng chống:
Bao gồm:
Kiểm tra chặt chẽ đầu vào.
Nắm bắt ngoại lệ có cấu trúc và trả về các lỗi chung cho máy khách.
Không lưu thông tin bí mật trong mã.
16
d. Xáo trộn thông tin:
Các rắc rối với sự xáo trộn thông tin là gói assembly của ta bị chỉnh sửa bằng việc
lựa chọn các chỉ thị MSIL trong các file DLL hoặc EXE.
Các điểm yếu:
Điểm yếu nói riêng làm cho gói assembly có nguy cơ bị xáo trộn thông tin là sự
thiếu một tên tốt.
Các hành động tấn công:
Bao gồm:
Thực thi trực tiếp các chỉ thị MSIL
Đảo các chỉ thị MSIL
Các phương án phòng chống:
Để chống lại hiểm hoạ xáo trộn thông tin, ta sử dụng một tên tốt cho gói assembly
với một khoá riêng. Khi một gói assembly đã đăng ký được triệu gọi, ngôn ngữ thực thi
chung sẽ dò tìm xem gói assembly có bị chỉnh sửa hay không, nếu bị chỉnh sửa nó sẽ
không được triệu gọi.
2.2.2. Các lưu ý khi thiết kế gói assembly
Một trong những vấn đề quan trọng nhất khi thiết kế một gói assembly là mức độ
tin cậy của môi trưòng mà gói assembly này được sử dụng. Nó ảnh hưởng tới các quyền
bảo mật truy nhập mã được cấp cho mã của chúng ta và với mã gọi mã của chúng ta. Điều
này được xác định bởi chính sách bảo mật truy nhập mã được định nghĩa bởi người quản
trị và nó ảnh hưởng tới các loại tài nguyên mà mã của chúng ta được cho phép để truy cập
và các hoạt động đặc quyền khác có thể thực thi.
Khi thiết kế một gói assembly, ta nên:
Xác định mã đặc quyền
Xác định mức độ tin cậy của môi trường mà gói assembly sẽ thực thi
Đóng gói các mã đặc quyền cấp cao
Thiết kế giao diện công cộng.
17
2.2.3. Các lưu ý khi thiết kế lớp
Hạn chế hiển thị lớp và thành viên
Che kín các lớp cơ sở chưa che đậy
Hạn chế người dùng có thể gọi mã
Phơi bày các trường bằng cách sử dụng các thuộc tinh.
2.3. Xây dựng thành phần dịch vụ an toàn
Các dịch vụ COM+ được biết như Enterprise Services, có thể được truy cập từ mã
được quản lý. Các ứng dụng Enterprise Services bao gồm một hay nhiều các thành phần dịch
vụ, đó là các lớp được quản lý dẫn xuất từ System.EnterpriseServices.Serviced
Component.
Các thành phần dịch vụ cơ bản được dùng để đóng gói mức logic nghiệp vụ và truy
cập dữ liệu của ứng dụng và được dùng khi các dịch vụ hạ tầng như giao dịch phân tán, thu
thập đối tượng, các thành phần hàng đợi, và các dịch vụ khác được yêu cầu ở tầng giữa của
ứng dụng. Các ứng dụng dịch vụ Enterprise Services thường nằm cạnh các server ứng dụng
tầng giữa.
Hình 7: Các thành phần dịch vụ trong một ứng dụng Enterprise Services tầng giữa.
2.3.1. Các mối hiểm hoạ và các biện pháp phòng chống
Các mối hiểm hoạ bao gồm:
18
Nghe lén mạng
Truy cập trái phép
Sự uỷ quyền không được ràng buộc
Phơi bày dữ liệu cấu hình.
Sự từ chối.
Hình 8: Enterprise Services threats
a. Nghe lén mạng
Các ứng dụng Enterprise Service thường chạy trên các server ứng dụng tầng giữa, từ
Web server từ xa. Vì vậy các dữ liệu nhạy cảm phải được bảo vệ tránh những kẻ nghe lén
mạng. Ta có thể sử dụng Internet Protocol Security (IPSec) để mã hoá kênh truyền giữa
server Web và ứng dụng. Giải pháp này thường được sử dụng tại các trung tâm dữ liệu
Internet. Các thành phần dịch vụ cũng hỗ trợ xác thực gói tin triệu gọi từ xa (RPC), nó cung
cấp kỹ thuật mã hoá theo gói.
b. Truy cập không được chứng thực
Cho phép chứng thực dựa vào vai COM+ ta có thể ngăn truy cập ẩn danh và cung cấp
chứng thực dựa vào vai để điều khiển truy cập tới các hoạt động bị hạn chế
19
c. Sự uỷ quyền không được ràng buộc
Nếu ta cho phép uỷ quyền trên Windows 2000 để cho phép một server từ xa truy cập
tài nguyên mạng bằng cách sử dụng thẻ ẩn danh của client thì sự uỷ quyền không bị ràng
buộc. Nghĩa là không hạn chế số bước nhảy mạng có thể được tạo ra.
d. Phơi bày dữ liệu cấu hình
Nhiều ứng dụng lưu dữ liệu nhạy cảm như chuỗi kết nối trong COM+ catalog bằng
cách sử dụng chuỗi khởi tạo dối tượng. Các chuỗi này được lấy về và được truyền tới một
đối tượng bởi COM+ khi đối tượng được tạo. Dữ liệu cấu hình nhạy cảm nên được mã hoá
lưu trong catalog.
d. Sự từ chối
Hiểm họa từ chối xảy ra khi một người dùng từ chối việc thực thi một hoạt động hoặc
một giao tác, và ta không có đủ bằng chứng để chống lại yêu cầu đó. Ta cần theo dõi qua tất
cả các tầng ứng dụng. Các thành phần dịch vụ nên ghi lại hoạt động của người dùng ở tần
giữa. Các thành phần dịch vụ thường có quyền truy cập tới các đặc tính nhận dạng của lần
triệu gọi khởi tạo vì các ứng dụng Web font-end thường cho phép ẩn danh trong các ngữ
cảnh Enterprise Service.
2.3.2. Các lưu ý khi thiết kế
Bao gồm:
Chứng thực dựa vào vai
Bảo vệ các dữ liệu nhạy cảm
Kiểm tra các yêu cầu
Kiểu kích hoạt ứng dụng
Các giao tác
Bảo mật truy nhập mã
a. Chứng thực dựa vào vai
Chứng thực dựa vào vai bằng cách sử dụng các vai COM+ đảm bảo rằng ngữ cảnh
bảo mật của lần triệu gọi đầu tiên được dùng cho việc triệu cuộc gọi thành phần dịch vụ.
Điều này cho phép ta thực thi chứng thực dựa theo vai dựa vào thành viên nhóm của lần triệu
20
gọi. Nếu một ứng dụng Web ASP.NET gọi các thành phần dịch vụ, điều này có nghĩa là ứng
dụng Web cần ẩn cuộc gọi của nó trước khi gọi thành phần dịch vụ
b. Bảo vệ dữ liệu nhạy cảm
Nếu các thành phần dịch vụ giữ dữ liệu nhạy cảm như chi tiết công nhân, giao dịch
tài chính, vv…,thì cần chú ý bảo vệ dữ liệu khi nó truyền qua mạng. Nếu ứng dụng của ta
không chạy trong một môi trường Internet Data Center (IDC) an toàn ( không sử dụng
IPSec) thì cần sử dụng mã hoá RPC. Theo cách này ta có thể sử dụng mức xác thức Packet
Privacy.
c. Các yêu cầu theo dõi
Để chỉ ra các hiểm hoạ từ chối, các giao tác nhạy cảm được thực thi bởi các thành
phần Enterprise Service nên được ghi lại. Khi thiết kế cần chú ý các loại giao tác và các chi
tiết cần được theo dõi. Ít nhất là đặc tính nhận dạng khởi tạo một giao tác và đặc tính nhận
dạng được dùng để thực hiện giao tác.
d. Kiểu kích hoạt ứng dụng
Khi thiết kế phải xác định kiểu kích hoạt thành phần dịch vụ. Ta có thể kích hoạt
chúng bằng cách sử dụng một thể hiện của tiến trình Dllhost.exe hoặc ta có thể chạy chúng
trong một tiến trình client. Các ứng dụng server chạy ngoài tiến trình trong một thể hiện của
Dllhost.exe Các ứng dụng thư viện chạy trong không gian địa chỉ của tiến trình của client.
e. Các giao tác
Nếu ta sử dụng các giao tác phân tán thì chú ý nơi giao tác được khởi tạo và chú ý sự
liên quan của các giao tác đang thực thi giữa các thành phần và trình quản lí tài nguyên bị
ngăn bởi tường lửa. Trong ngữ cảnh này tường lửa phải được cấu hình để hỗ trợ giao thông
Microsoft Distributed Transaction Coordinator (DTC).
f. CAS
Các ứng dụng sử dụng các thành phần dịch vụ hoàn toàn tin cậy và vì vậy CAS hạn
chế sử dụng để chứng thực việc triệu gọi mã. Tuy nhiên Enterprise Service yêu cầu rằng
việc gọi mã có quyền cần thiết để gọi mã không được quản lý. Sự liên quan chính của vấn
đề này là ta không thể gọi trực tiếp một ứng dụng Enterprise Service từ một ứng dụng Web
tin cậy một phần. Các mức tin cậy một phần của ASP.NET (High, Medium, Low, và
Mininal) không cấp quyền cho mã không được quản lý.
21
2.4. Xây dựng các dịch vụ Web an toàn
2.4.1. Các mối hiểm hoạ và các biện pháp phòng chống:
Các mối hiểm hoạ chính bao gồm:
Truy cập không đựơc chứng thực
Thực thi tham số
Nghe lén mạng
Phơi bày dữ liệu cấu hình
Lặp lại thông báo
Hình 9: Các mối hiểm hoạ chính đối với dịch vụ Web
a. Truy cập không được chứng thực:
Các dịch vụ web mà cung cấp thông tin nhạy cảm hoặc hạn chế nên xác thực và
chứng thực các cuộc gọi đến nó. Xác thực và chứng thực yếu ớt có thể bị khám phá để đạt
được truy cập không chứng thực tới các thông tin và các hoạt động nhạy cảm.
Các điểm yếu:
Bao gồm:
Không sử dụng chức năng xác thực
Mật khẩu ở dạng văn bản nguyên mẫu trong phần đầu mẩu tin của SOAP
Chức năng xác thực cơ bản sử dụng trên khênh giao tiếp không đươc mã
hoá.
22
Các biện pháp phòng chống:
Bao gồm:
Sử dụng mật khẩu số hoá trong SOAP header cho kỹ thuật xác thực.
Sử dụng các vé Kerberos trong SOAP header cho kỹ thuật xác thực.
Sử dụng các chứng chỉ X.509 trong SOAP header cho kỹ thuật xác thực
Sử dụng chức năng xác thực của Windows
Sử dụng role-based authorization để hạn chế truy cập tới các dịch vụ Web.
Điều này có thể được thực hiện bằng cách sử dụng kỹ thuật chứng thực URL
để điểu khiển truy cập tới tệp dịch vụ Web (.asmx) hoặc ở mức phương thức
web bằng việc sử dụng các yêu cầu quyền Principal.
b. Thực thi tham số:
Sự thực thi tham số đề cập tới sự chỉnh sửa dữ liệu không được chứng thực được
gửi giữa người sử dụng dịch vụ web và dịch vụ web. Ví dụ, một kẻ tấn công có thể chặn
một thông báo dịch vụ web( khi thông báo truyền qua các nốt trung gian tới đích) và có thể
chỉnh sủa nó trước khi gửi cho đích đang cần nó.
Các điểm yếu:
Bao gồm:
Các thông báo không được ký số
Các thông báo không được mã hoá.
Các biện pháp phòng chống:
Bao gồm:
Ký số thông báo. Chữ ký số được dùng ở điểm nhận cuối để chỉ ra rằng thông
báo không bị xáo trộn trên đường truyền.
Mã hoá thông báo để cung cấp khả năng cá nhân và khả năng xáo trộn thông
tin.
c. Nghe lén mạng:
Một kẻ tấn công có thể xem các thông báo của dịch vụ web khi chúng được truyền
qua mạng. Ví dụ: một kẻ tấn công có thể sử dụng phần mềm quản lý mạng để lấy dữ liệu
23
nhạy cảm chứa trong thông báo SOAP. Thông báo này có thể chứa dữ liệu nhạy cảm mức
ứng dụng hoặc là thông tin quan trọng.
Các điểm yếu:
Bao gồm:
Các thông tin hợp pháp trong SOAP header ở dạng văn bản nguyên mẫu
Không mã hoá ở mức thông báo
Không mã hoá ở mức giao vận
Các biện pháp phòng chống:
Sử dụng các biện pháp phòng chống sau để bảo vệ các thông báo SOAP nhạy cảm
khi chúng truyền qua mạng:
Mã hoá ở tấng giao vận như SSL hay IPSec. Cách này chỉ áp dụng khi bạn
điều khiển cả 2 điểm đầu cuối.
Mã kích cỡ thông báo để cung cấp khả năng cá nhân. Áp dụng khi truyền qua
các nốt trung gian theo đường tới điểm cuối.
d. Phơi bày dữ liệu cấu hình:
Có 2 trường hợp chính mà 1 dịch vụ Web có thể phơi bầy dữ liệu cấu hình. Thứ
nhất, một dịch vụ Web có thể hỗ trợ việc tạo tự động của WSDL hoặc có thể cung cấp
thông tin WSDL trong các tệp có tể tải về sẵn có trên Web server.
Thứ hai, với việc nắm bắt ngoại lệ không tương ứng, dịch vụ web có thể phơi bày
chi tiết thực thi bên trong.
Các điểm yếu:
Bao gồm:
Các tệp WSDL không bị hạn chế có thể tải về từ Web server.
Một dịch vụ Web được hạn chế hỗ trợ việc tạo tự động của WSDL và cho
phép những người dùng không được chứng thực lấy được các đặc điểm của
dịch vụ Web.
Các biện pháp phòng chống:
Bao gồm:
24
Chứng thực truy cập tới các tệp WSDL bặng cách sử dụng các quyền NTFS.
Huỷ bỏ các tệp WSDL từ Web server
Không cho phép giao các giao thức tài liệu hoạt đọng để tránh sự sinh tự động
của WSDL
Nắm bắt và đưa ra các ngoại lệ SoapException hoặc SoapHeaderException
- chỉ trả về máy khách các thông tin tối thiểu và vô hại.
2.4.2. Các lưu ý khi thiết kế
Bao gồm:
Yêu cầu xác thực
Yêu cầu tính riêng tư và toàn vẹn
Các đặc tính truy nhập tài nguyên
An toàn truy nhập mã
a. Yêu cầu xác thực:
Nếu dịch vụ Web cung cấp thông tin nhạy cảm hoặc nên hạn chế, nó cần xác thực
các cuộc gọi để hỗ trợ cho việc chứng thực. Trong môi trường Windows, ta có thể sử dụng
Windows authentication.
b. Yêu cầu tính riêng tư và tính toàn vẹn.
WSE cung cấp việc kiểm tra tính toàn vẹn thông qua chữ ký số và nó cũng hỗ trợ
mã hoá XML để mã hoá các yếu tố nhạy cảm của toàn bộ thông báo. Ưu điểm của hướng
tiếp cận này là dựa vào chuẩn WS-Security và nó cung cấp một giải pháp đối với các thông
báo truyền qua nhiều nốt trung gian.
Để mã hoá tầng giao vận ta sử dụng các kênh SSL hoặc IPSec. Các giải pháp này
chỉ áp dụng khi ta nắm quyền điều khiển cả 2 điểm đầu cuối.
c. Các đặc tính truy cập tài nguyên
Mặc định các dịch vụ Web ASP.NET không giả danh và tài khoản xử lý ASPNET
có đặc quyền thấp nhất được sử dụng cho việc truy cập tài nguyên cục bộ và từ xa. Ta có
thể sử dụng tài khoản này để truy nhập các tài nguyên từ xa như SQL Server (yêu cầu xác
thực Windows) bằng cách tạo một tài khoản cục bộ tham chiếu tới máy chủ CSDL.
25