Xây dựng ứng dụng web ASP.NET an toàn
Trang 1MỤC LỤC
MỤC LỤC 1
HÌNH ẢNH 4
Chương 1 – AN TOÀN ỨNG DỤNG WEB 7
1 Các vấn đề cơ bản về an toàn ứng dụng Web 7
2 Thuật tấn công 8
3 Mô hình hiểm họa 9
Chương 2 – AN TOÀN ỨNG DỤNG WEB XÂY DỰNG TRÊN NET FRAMEWORK 11 1 Tổng quan về an toàn ứng dụng Web xây dựng trên NET Framework 11
1.1 Role-Based Security 11
1.2 Code Access Security 13
1.3 Các không gian tên để xây dựng an toàn các ứng dụng trong NET Framework 14
2 Xây dựng các gói assembly an toàn 15
2.1 Các mối đe doạ và biện pháp phòng chống: 15
2.1.1 Truy nhập không được chứng thực hoặc vượt quyền, hoặc cả hai 16
2.1.2 Nhúng mã 17
2.1.3 Phơi bày thông tin: 18
2.1.4 Xáo trộn thông tin: 19
2.2 Các lưu ý khi thiết kế gói assembly 19
2.3 Các lưu ý khi thiết kế lớp 20
3 Xây dựng thành phần dịch vụ an toàn 20
3.1 Các mối hiểm hoạ và các biện pháp phòng chống 20
3.1.1 Nghe lén mạng 21
3.1.2 Truy cập không được chứng thực 21
3.1.3 Sự uỷ quyền không được ràng buộc 22
3.1.4 Phơi bày dữ liệu cấu hình 22
3.1.5 Sự từ chối 22
3.2 Các lưu ý khi thiết kế 22
3.2.1 Chứng thực dựa vào vai 22
3.2.2 Bảo vệ dữ liệu nhạy cảm 23
3.2.3 Các yêu cầu theo dõi 23
3.2.4 Kiểu kích hoạt ứng dụng 23
Trang 23.2.5 Các giao tác 23
3.2.6 CAS 23
4 Xây dựng các dịch vụ Web an toàn 24
4.1 Các mối hiểm hoạ và các biện pháp phòng chống: 24
4.1.1 Truy cập không được chứng thực: 24
4.1.2 Thực thi tham số: 25
4.1.3 Nghe lén mạng: 26
4.1.4 Phơi bày dữ liệu cấu hình: 26
4.2 Các lưu ý khi thiết kế 27
4.2.1 Yêu cầu xác thực: 27
4.2.2 Yêu cầu tính riêng tư và tính toàn vẹn 27
4.2.3 Các đặc tính truy cập tài nguyên 28
4.2.4 CAS 28
4.3 Các kỹ thuật với các vấn đề quan trọng nhất 28
4.3.1 Kiểm tra giá trị đầu vào 28
4.3.2 Xác thực 33
4.3.3 Chứng thực 34
Chương 3 – XÂY DỰNG ỨNG DỤNG ASP.NET AN TOÀN 36
1 Mô hình bảo mật trong ASP.NET 36
1.1 Các công nghệ thực thi trong ASP.NET 36
2.2 Kiến trúc bảo mật 36
2 Xây dựng các trang và các điều khiển ASP.NET an toàn 37
2.1 Hiểm hoạ và biện pháp phòng chống 37
2.1.1 Nhúng mã 38
2.1.2 Tấn công session 39
2.1.3 Giả dạng đặc tính nhận dạng 40
2.1.4 Thực thi tham số 41
2.1.5 Nghe lén mạng 42
2.2 Các lưu ý khi thiết kế 43
2.2.1 Kiểm tra đầu vào phía server 43
2.2.2 Khoanh vùng web site 43
2.2.3 Xem xet đặc tính nhận dạng được dùng để truy nhập tài nguyên 44
2.2.4 Bảo vệ thông tin đăng nhập và các thẻ xác thực 44
2.2.5 Lỗi về bảo mật 45
2.2.6 Xem xét về chứng thực tập trung 45
2.2.7 Đặt các điều khiển web và các điều khiển người dùng trong các gói assemblies riêng biệt 45
2.2.8 Đặt mã truy nhập tài nguyên trong một gói assembly riêng 45
2.3 Các kỹ thuật với các hiểm hoạ điển hình 46
2.3.1 Kiểm tra giá trị đầu vào 46
2.3.2 Cross-Site Scripting 51
Trang 32.3.3 Xác thực 55
2.3.4 Chứng thực 58
Chương 4 – THIẾT KẾ DEMO 61
1 Dự án Cục tài nguyên môi trường 61
1.1 Mô hình hoá chức năng 61
1.2 Phân rã chức năng ngoại tuyến cấp Cục 61
1.3.1 Hệ thống 62
1.3.2 Các cơ sở gây ô nhiễm 63
1.3.3 Quản lý hồ sơ 63
1.3.4 Quản lý người dùng 64
1.3.5 Quản lý dữ liệu tĩnh cấp cục 64
1.3.6 Thống kê báo cáo 65
2 Thiết kế Web site an toàn 65
2.1 Vấn đề an toàn mà Web site đã làm được 65
2.2 Tăng cường an ninh 65
2.2.1 Đặt mã truy nhập tài nguyên trong một gói assembly riêng 65
2.2.2 Mã hoá xâu kết nối cơ sở dữ liệu 66
Trang 4HÌNH ẢNH
Hình 1: Các bước tấn công 9
Hình 2: Tiến trình mô hình hiểm hoạ 10
Hình 3: Role-based security 12
Hình 4: Code access security 14
Hình 5: Các security namespaces 15
Hình 6: Các mối đe doạ hàng đầu 16
Hình 7: Các thành phần dịch vụ trong một ứng dụng Enterprise Services tầng giữa.20 Hình 8: Enterprise Services threats 21
Hình 9: Các mối hiểm hoạ chính đối với dịch vụ Web 24
Hình 10: Kiến trúc bảo mật 37
Hình 11: Khoanh vùng web site 44
Hình 12: Mô hình hoá chức năng 61
Hình 13: Phân rã chức năng 62
Hình 14: Hệ thống 62
Hình 15: Cơ sở gây ô nhiễm 63
Hình 16: Quản lý hồ sơ 63
Hình 17: Quản lý người dùng 64
Hình 18: Quản lý dữ liệu tĩnh cấp cục 65
Hinh 19: Thống kê báo cáo 65
Trang 5LỜ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ôngnghệ, Đạ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ướngdẫ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 anninh 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 emtrong 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 2006Sinh viên
Đặng Hữu Thành
Trang 6LỜ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
Trang 7Chươ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ứcnghĩ 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ácWeb 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, Trojanhorses, và worms Đây là những vấn đề rắc rối được quan tâm nhất vì chúng đại diện chomộ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à ứngdụ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ộtmứ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ápphò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ủacá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àinguyê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àinguyê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ánmộ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
Trang 8Kiể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ằngmộ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 giaotá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 đượcchứ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 quamạ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ấncô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ếtcá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ùnghoặ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
Trang 91.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ũngnhư 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ầnnâ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ụ
Trang 10Hì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ộtchiế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
Trang 11Chươ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
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 SQLServer 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 đượckế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ườidùng truy cập tới các trang Web, mức nghiệp vụ, các hoạt động và dữ liệu
Trang 12Principals 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ó
Trang 13thể 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ácthự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ựcrồ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ưngtấ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
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
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àinguyên được bảo mật như: file system, registry, network,… hoặc khi nó cố gắng thực thicá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ụngreflection
Trang 14Bả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ấuhì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ấncô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êntrong 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
Trang 152.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ã
Trang 16 Phơi bày thông tin.
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
Trang 17 Các hành động tấn công:
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 quamột thư viện trung gian đáng tin bằng cách vượt qua các kỹ thuật chứngthự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ệcgọ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
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
Trang 18 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
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
Trang 19 Không lưu thông tin bí mật trong mã.
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ệclựa chọn các chỉ thị MSIL trong các file DLL hoặc EXE
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ềnbả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ườiquả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
Trang 202.2.3 Các lưu ý khi thiết kế lớp
Hình 7: Các thành phần dịch vụ trong một ứng dụng Enterprise Services tầng giữa
Trang 212.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:
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ẻ nghelén mạng Ta có thể sử dụng Internet Protocol Security (IPSec) để mã hoá kênh truyền giữaserver 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ệuInternet 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à cungcấ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ế
Trang 22c 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 truycậ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ằngcá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 độnghoặ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õiqua 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ạngcủ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 trongcá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ảnhbả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
Trang 23triệu 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ịchtà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 takhông chạy trong một môi trường Internet Data Center (IDC) an toàn ( không sử dụngIPSec) 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 PacketPrivacy
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ànhphầ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 chitiế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ậndạ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ạtchú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úngtrong 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ệncủ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ủaclient
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ợ giaothô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
Trang 24dụ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ý
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
Trang 25 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á
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 đượcgử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ặnmộ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á
Trang 26c 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ềnqua 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ệunhạ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
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ấpthô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àychi 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
Trang 27 Một dịch vụ Web được hạn chế hỗ trợ việc tạo tự động của WSDL và chophép những người dùng không được chứng thực lấy được các đặc điểm củadịch vụ Web.
Các biện pháp phòng chống:
Bao gồm:
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ựccá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ướngtiế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ácthông báo truyền qua nhiều nốt trung gian
Trang 28Để 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àychỉ á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ácthự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
d CAS
Mức độ tin cậy của dịch vụ Web được xác định bằng việc cấu hình yếu tố <trust>,
nó ảnh hưởng đến các loại tài nguyên mà nó có thể truy cập và tới các hoạt động đặcquyền mà nó có thể thực thi
Nếu triệu gọi một dịch vụ Web từ một ứng dụng Web ASP.NET thì mức độ tincậy của ứng dụng Web xác định phạm vi của các dịch vụ Web mà nó có thể triệu gọi Ví
dụ, một ứng dụng Web được cấu hình mặc định với độ tin cậy là Medium chỉ có thể triệu
gọi các dịch vụ Web trên máy cục bộ
2.4.3 Các kỹ thuật với các vấn đề quan trọng nhất.
a Kiểm tra giá trị đầu vào
Cũng như bất kỳ ứng dụng nào mà chấp nhận dữ liệu đầu vào, các dịch vụ Webphải kiểm tra dữ liệu được truyền tới chúng để ép buộc các nguyên tắc nghiệp vụ và đểtránh các vấn đề an toàn tiềm tàng Các phương thức Web được đánh dấu với thuộc tính
WebMethod là các điểm vào của dịch vụ web Các phương thức Web có thể chấp nhận
các tham số đầu vào định kiểu rõ ràng hoặc các tham só định kiểu lỏng lẻo, chúng thườngđược truyền như dữ liệu kiểu xâu
Các tham số định kiểu rõ ràng:
Nếu ta sử dụng các tham số định kiểu rõ ràng được mô tả bởi hệ thống kiểu
trong NET Framework, ví dụ kiểu integer, double, date hoặc các loại đối tượng khác như Address hoặc Employee, lược đồ XSD tự động được tạo chứa một mô tả kiểu của dữ
liệu Các thành phần tiêu dùng có thể sử dụng mô tả định kiểu này để khởi tạo một XMLđược định dạng tương ứng với các yêu cầu SOAP được gửi tới các phương thức Web
Sau đó ASP.NET sử dụng lớp System.Xml.Serialization.XmlSerializer không xuất
Trang 29thông báo SOAP vào các đối tượng CLR Ví dụ sau cho thấy một phương thức Web chấpnhận một đầu vào được định kiểu rõ ràng:
[WebMethod]
public void CreateEmployee(string name, int age, decimal salary) { }
Trong ví dụ trên, hệ thống kiểu NET Framework thực hiện các kiểm tra kiểu một
cách tự động Để kiểm tra pham vi của các ký tự được cung cấp thông qua trường name,
ta có thể sử dụng một biểu thức phổ biến Ví dụ, đoạn mã sau đây cho thấy cách sử dụng
lớp System.Text.RegularExpressions.Regex để ràng buộc phạm vi có thể của các ký tự
đầu vào và cũng để kiểm tra độ dài tham số
public void CreateEmployee(Employee emp) { }
Các thành phần sử dụng cần biết lược đồ XSD để có thể triệu gọi dịch vụ Web.Nếu thành phần sử dụng là một ứng dụng NET Framework client, nó có thể truyền mộtđối tượng Employee một cách đơn giản như sau:
using Employees;
Employee emp = new Employee();
// Populate Employee fields
// Send Employee to the Web service
wsProxy.CreateEmployee(emp);
Các tham số định kiểu lỏng lẻo:
Nếu ta sử dụng tham số kiểu string hoặc các mảng kiểu byte để truyền dữ liệu hợp
lệ, ta sẽ đánh mất nhiều lợi ích của hệ thống kiểu NET Framework Ta phải chuyển kiểu
dữ liệu đầu vào để kiểm tra nó bởi vì WSDL được tạo tự động một cách đơn giản mô tả các
Trang 30tham số như là đầu vào kiểu string của kiểu xsd:string Ta cần lập chương trình kiểm trakiểu, độ dài, định dạng và phạm vi như dưới đây:
Việc kiểm tra dữ liệu đầu vào phải được kiểm tra bởi phương thức Web trước khi
nó được xử lý hoặc được truyền tới các thành phần
Client và server phải đánh giá và chấp nhận cho một lược đồ XML Đoạn mã dướiđây cho thấy cách một phương thức Web có thể sử dụng lớp
System.XmlValidatingReader để kiểm tra dữ liệu đầu vào Ví dụ này mô tả một hành
động đặt sách đơn giản Chú ý rằng dữ liệu XML được truyền qua một tham số kiểu
string đơn giản.
using System.Xml;
Trang 31// Create and load a validating reader
XmlValidatingReader reader = new XmlValidatingReader(xmlBookData,
// Set the validation type for XSD schema.
// XDR schemas and DTDs are also supported
reader.ValidationType = ValidationType.Schema;
// Create and register an event handler to handle validation errors
reader.ValidationEventHandler += new ValidationEventHandler(
Trang 32// Validation error event handler
private static void ValidationErrors(object sender, ValidationEventArgs args)
<xsd:element name="title" type="xsd:string" />
<xsd:element name="isbn" type="xsd:integer" />
<xsd:element name="orderQuantity" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
Trang 33Nhúng SQL
Nhúng SQL cho phép một kẻ tấn công để thực thi các lệnh hợp pháp trong cơ sở
dữ liệu bằng cách sử dụng đăng nhập cơ sở dữ liệu của dịch vụ Web Nhúng SQL là mộtvấn đề tiềm tàng đối với dịch vụ Web nếu các dịch vụ sử dụng dữ liệu đầu vào để khởitạo các truy vấn SQL
b Xác thực
Nếu dịch vụ Web xuất ra dữ liệu nhạy cảm, bị hạn chế hoặc nếu nó cung cấp cácdịch vụ bị hạn chế thì nó cần xác thực cuộc triệu gọi Nhiều lược đồ xác thực sẵn có và cóthể chia chúng làm 3 nhóm:
Xác thực mức nền tảng
Xác thực mức thông báo
Xác thực mức ứng dụng
Xác thực mức nền tảng:
Nếu ta nắm quyền điều khiển cả hai điểm đầu cuối và cả hai điểm này cùng một
miền, ta có thể sử dụng Windows authentication để xác thực cuộc gọi.
Basic Authentication:
You can use IIS to configure your Web service's virtual directory for Basicauthentication With this approach, the consumer must configure the proxy and providecredentials in the form of a
Có thể sử dụng IIS để cấu hình thư mục ảo của dịch vụ Web được xác thực với
Basic authentication Với hướng tiếp cận này, người tiêu dùng phải cấu hình proxy và
cung cấp các thông tin đăng nhập trong dạng của một tên và mật khẩu Sau đó Proxytruyền chúng với mỗi yêu cầu dịch vụ Web qua proxy Các thông tin đăng nhập đượctruyền ở dạng văn bản nguyên mẫu và vì vậy ta nên sử dụng Basic authentication vớiSSL
Integrated Windows Authentication:
Có thể sử dụng IIS để cấu hình thư mục ảo của dịch vụ Web được xác thực ở trạngthái Integrated Windows authentication, sử dụng xác thực kiểu Kerberos hoặc NTLM tuỳthuộc vào môi trường phía client hoặc server Ưu điểm của hướng tiếp cận này so sánh
Trang 34với Basic authentication là các thông tin đăng nhập không được truyền qua mạng, điềunày hạn chế hiểm hoạ nghe lén mạng
Để gọi một dịch vụ Web được cấu hình ở trạng thái Integrated Windows authentication, người dùng phải cấu hình chính xác thuộc tính Credential trong proxy.
Để dẫn một ngữ cảnh an toàn Window của client tới một dịch vụ Web ta có thể đặt thuộc
tính Credential của proxy của dịch vụ Web thành CredentialCache.DefaultCredential
như sau:
proxy.Credentials = System.Net.CredentialCache.DefaultCredentials;
Ta có thể sử dụng một bộ thông tin đăng nhập chính xác:
CredentialCache cache = new CredentialCache();
cache.Add( new Uri(proxy.Url), // Web service URL
Chứng thực phương thức Web
Ta có thể sử dụng các yêu cầu quyền principal bằng cách khai báo để điều khiểntruy cập tới các phương thức Web dựa vào đặc tính nhận dạng hoặc vai thành viên củacuộc gọi Đặc tính nhận dạng và vai thành viên của cuộc gọi được duy trì bởi đối tượngprincipal kết hợp với yêu cầu Web hiện tại ( HttpContext.User)
[PrincipalPermission(SecurityAction.Demand, Role=@"Manager")]
[WebMethod]
public string QueryEmployeeDetails(string empID)
{