Các ứng dụng nghiệp vụ web cho phép người phát triển ứng dụng và cài đặt các giải pháp bảo mật tập trung đảm bảo tuân thủ theo quy định của Ngân hàng Nhà nước và GPBank, đồng thời đối vớ
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
TRẦN MẠNH
ỨNG DỤNG KỸ THUẬT BẢO MẬT TRONG MICROSOFT NET VÀO HỆ THỐNG QUẢN LÝ VÀ LUÂN CHUYỂN VĂN
BẢN NỘI BỘ TẠI GPBANK
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
Hà Nội – 2019
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
TRẦN MẠNH
ỨNG DỤNG KỸ THUẬT BẢO MẬT TRONG MICROSOFT NET VÀO HỆ THỐNG QUẢN LÝ VÀ LUÂN CHUYỂN VĂN
BẢN NỘI BỘ TẠI GPBANK
Ngành: Công nghệ thông tin
Chuyên ngành: Kỹ Thuật Phần Mềm
Mã số: 8480103.01
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
NGƯỜI HƯỚNG DẪN KHOA HỌC: PGS.TS TRƯƠNG NINH THUẬN
Hà Nội – 2019
Trang 3LỜI CẢM ƠN
Đầu tiên, tôi xin bày tỏ lòng cảm ơn chân thành và sâu sắc nhất đến PGS.TS Trương Ninh Thuận vì sự hướng dẫn và chỉ bảo tận tình cùng với những định hướng, những lời khuyên, những kiến thức vô cùng quý giá của Thầy trong quá trình em theo học cũng như làm luận văn tốt nghiệp
Tôi xin được gửi lời cảm ơn tới 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 nói chung cũng như các thầy cô trong bộ môn Công nghệ Phần mềm nói riêng đã tận tình giảng dạy, trang bị cho tôi những kiến thức quý báu trong suốt quá trình tôi học tập tại khoa Đây cũng chính là tiền đề để tôi có được những kiến thức cần thiết để hoàn thiện luận văn này
Cuối cùng, tôi cũng xin được gửi lời cảm ơn chân thành đến các anh chị em đồng nghiệp cũng như gia đình, bạn bè, người thân đã giúp đỡ tôi cả về vật chất lẫn tinh thần để tôi hoàn thành được luận văn này
Mặc dù đã rất cố gắng nhưng luận văn chắc chắn không tránh khỏi những thiếu sót, tôi rất mong nhận được những ý kiến đánh giá và phê bình từ phía các Thầy Cô để luận văn được hoàn thiện hơn
Tôi xin chân thành cảm ơn!
Hà nội, tháng 05 năm 2019
Học viên
Trần Mạnh
Trang 4LỜI CAM ĐOAN Tôi xin cam đoan luận văn tốt nghiệp với đề tài “Ứng dụng kỹ thuật bảo mật trong Microsoft NET vào Hệ thống quản lý và luân chuyển văn bản nội bộ tại GPBank” này là công trình nghiên cứu của riêng tôi dưới sự hướng dẫn của PGS.TS
Trương Ninh Thuận Các kết quả tôi trình bày trong luận văn là hoàn toàn trung thực
và chưa từng được được nộp như một khóa luận, luận văn hay luận án tại trường Đại học Công Nghệ - Đại học Quốc Gia Hà Nội hoặc bất kỳ trường đại học nào khác Tôi đã trích dẫn đầy đủ các tài liệu tham khảo, các công trình nghiên cứu liên quan ở trong nước và quốc tế trong phần tài liệu tham khảo Ngoại trừ các tài liệu tham khảo này, luận văn này hoàn toàn là công việc của riêng tôi
Nếu có bất cứ phát hiện nào về sự gian lận sao chép tài liệu, công trình nghiên cứu của tác giả khác mà không ghi rõ trong phần tài liệu tham khảo, tôi xin chịu hoàn toàn trách nhiệm về kết quả luận văn của mình
Hà nội, tháng 05 năm 2019
Học viên
Trần Mạnh
Trang 5MỤC LỤC
LỜI CẢM ƠN 1
LỜI CAM ĐOAN 2
MỤC LỤC 3
DANH SÁCH KÝ HIỆU, CHỮ VIẾT TẮT 6
DANH SÁCH HÌNH VẼ 7
DANH SÁCH BẢNG 9
Chương 1: Giới thiệu 10
1.1 Tính cấp thiết của đề tài 10
1.2 Mục tiêu và phạm vi nghiên cứu 11
1.3 Hướng nghiên cứu và cách giải quyết 11
1.4 Cấu trúc của luận văn 12
Chương 2: TỔNG QUAN VỀ BẢO MẬT HỆ THỐNG PHẦN MỀM 13
2.1 Sự cần thiết đối với bảo mật máy tính 13
2.2 Các khái niệm cơ bản 13
2.2.1 Lỗ hổng bảo mật 13
2.2.2 Khai thác lỗ hổng 14
2.2.3 Nguy cơ và rủi ro 14
2.2.4 Tấn công 15
2.2.5 Hacker 16
2.3 Các lỗ hổng phần mềm quan trọng 16
2.3.1 SQL Injection 16
2.3.2 OS Command Injection 17
2.3.3 Buffer overflow 17
2.4 Các kiểu tấn công 17
2.4.1 Tấn công Brute-Force 17
2.4.2 Tấn công xác thực 18
2.4.3 Tấn công giả mạo 19
2.4.4 Tấn công từ chối dịch vụ 20
2.4.5 Tấn công cuộc gọi thủ tục từ xa (Remote Procedure Call attack) 20
2.4.6 Tấn công tiêm mã (Code injection) 20
2.5 Lập trình bảo mật 20
2.5.1 Các thuộc tính bảo mật 20
2.5.2 Lập trình an toàn 22
Trang 62.6 Kết luận 22
Chương 3: BẢO MẬT HỆ THỐNG PHẦN MỀM TRONG NET 23
3.1 Tổng quan kiến trúc bảo mật hệ thống phần mềm 23
3.1.1 Vòng đời phát triển 23
3.1.2 Phân tích yêu cầu bảo mật 24
3.1.3 Thiết kế bảo mật 25
3.1.4 Đánh giá bảo mật 29
3.1.5 Kiểm thử bảo mật 30
3.2 Bảo mật trong NET 32
3.2.1 .NET Framework 32
3.2.2 .NET Runtime security 34
3.2.3 Kiến trúc bảo mật NET 34
3.2.4 Thư viện bảo mật trong NET 45
3.3 Một số kiểu tấn công ứng dụng Web 47
3.3.1 SQL Injection 48
3.3.2 Cross-site scripting (XSS) 48
3.3.3 HTTP Harvesting 49
3.4 Kết luận 49
Chương 4: MỘT MÔ HÌNH ỨNG DỤNG KỸ THUẬT BẢO MẬT TRONG MICROSOFT NET TẠI GPBANK 50
4.1 Mô tả bài toán 50
4.1.1 Mục đích 50
4.1.2 Phạm vi 50
4.1.3 Yêu cầu cụ thể 51
4.1.4 Giải pháp 52
4.2 Phân tích nghiệp vụ 52
4.2.1 Mô tả chức năng 52
4.2.2 Quy trình luân chuyển yêu cầu chuyển tiền 53
4.2.3 Biểu đồ ca sử dụng 56
4.2.4 Biểu đồ lỗ hổng ca sử dụng 60
4.2.5 Các Module chức năng hệ thống 60
4.3 Thiết kế hệ thống 61
4.3.1 Mô hình tổng thể hệ thống 61
4.3.2 Mô hình chức năng 61
4.3.3 Kiến trúc hệ thống 62
Trang 74.4 Xây dựng hệ thống thử nghiệm 62
4.4.1 Môi trường cài đặt, triển khai 62
4.4.2 Màn hình giao diện 62
4.4.3 Đánh giá khả năng an toàn và bảo mật của hệ thống 64
4.4.4 Một số Test case về an toàn và bảo mật của hệ thống 72
4.5 Kết luận 74
Chương 5: KẾT LUẬN 75
TÀI LIỆU THAM KHẢO 76
Trang 8DANH SÁCH KÝ HIỆU, CHỮ VIẾT TẮT
DDoS Distributed Denial of Service Tấn công từ chối dịch vụ
Trang 9DANH SÁCH HÌNH VẼ
Hình 2.1: Tấn công chủ động 15
Hình 2.2: Tấn công thụ động 16
Hình 3.1: Các bước xây dựng một hệ thống bảo mật 23
Hình 3.2: Xác định quyền dựa trên vai trò của người dùng 28
Hình 3.3: Bảo mật ứng dụng web NET 35
Hình 3.4: Cơ chế degest gửi password 36
Hình 3.5: Ví dụ cài đặt file web.config 38
Hình 3.6: Ví dụ về cài đặt xác thực Forms 39
Hình 3.7: Ví dụ về cài đặt chứng thực 40
Hình 3.8: Các dịch vụ bảo mật ASP.NET 41
Hình 3.9: Cấu hình xác thực Token 43
Hình 3.10: Cấu hình xác thực PKI X.509 Certificate 43
Hình 3.11: Kiến trúc bảo mật SQL Server 44
Hình 3.12: Mã hóa và giải mã với 1 khóa 45
Hình 3.13a: Mã hóa với Public key và giải mã với Private key 46
Hình 3.13b: Mã hóa với Private key và giải mã với Public key 47
Hình 4.1: Quy trình tạo yêu cầu chuyển tiền 54
Hình 4.2: Quy trình kiểm tra, xác nhận yêu cầu 55
Hình 4.3: Ca sử dụng các module trong hệ thống 57
Hình 4.4: Ca sử dụng Quản lý phòng ban 57
Hình 4.5: Ca sử dụng Quản lý khóa ký 58
Hình 4.6: Ca sử dụng Quản lý luân chuyển yêu cầu chuyển tiền 58
Hình 4.7: Ca sử dụng Thống kê – báo cáo 59
Hình 4.8: Ca sử dụng Quản lý người dùng 59
Hình 4.9: Ca sử dụng Cấu hình hệ thống 60
Hình 4.10: Lỗ hổng ca sử dụng 60
Hình 4.11: Mô hình tổng thể hệ thống 61
Hình 4.12: Mô hình chức năng 61
Hình 4.13: Kiến trúc hệ thống 62
Hình 4.14: Giao diện đăng nhập hệ thống 63
Hình 4.15: Giao diện nhập yêu cầu chuyển tiền 63
Hình 4.16: Giao diện xác nhận yêu cầu chuyển tiền 64
Hình 4.17: Thiết kế bảng các tham số hệ thống cấu hình mật khẩu người sử dụng 65
Hình 4.18: Thiết kế cấu hình thông tin User 65
Trang 10Hình 4.19: Mã hóa mật khẩu lưu vào Cơ sở dữ liệu 66
Hình 4.20: Sử dụng Store procedure xác thực người dùng 66
Hình 4.21: Sử dụng Validation control, giới hạn độ dài và hủy bỏ Autocomplete 67
Hình 4.22: Thiết lập phòng chống tấn công Cross-Site Scripting 67
Hình 4.23: Mã hóa xâu kết nối Cơ sở dữ liệu trong file web.config 68
Hình 4.24: Mã xâu kết nối Cơ sở dữ liệu lưu vào Registry 69
Hình 4.25: Cấu hình bảo mật trong file web.config 69
Hình 4.26: Cấu hình ghi nhật ký 70
Hình 4.27: Tạo mã TestKey với độ dài 8 ký tự 70
Hình 4.28a: Mã hóa file sử dụng thư viện Rfc2898DeriveBytes 71
Hình 4.28b: Giải mã file sử dụng thư viện Rfc2898DeriveBytes 71
Trang 11DANH SÁCH BẢNG
Bảng 4.1: Mô tả bảng tham số cấu hình mật khẩu cho User 64
Bảng 4.2: Mô tả bảng tham số cấu hình cho User 65
Bảng 4.3: Kết quả thực hiện Test lỗ hổng SQL Injection 72
Bảng 4.4: Kết quả thực hiện Test lỗ hổng Cross-Site Scripting 73
Trang 12Chương 1: Giới thiệu
1.1 Tính cấp thiết của đề tài
Ngày nay, công nghệ thông tin đang được ứng dụng ngày càng nhiều và ảnh hưởng sâu sắc đến mọi mặt của đời sống Chúng ta có thể thấy công nghệ thông tin được áp dụng trong hầu hết các lĩnh vực của cuộc sống, từ trò chơi điện tử được thiết
kế để đáp ứng nhu cầu giải trí, các ứng dụng soạn thảo văn bản hỗ trợ việc xử lý các công việc văn phòng, đến các ứng dụng áp dụng trong quá trình quản trị, điều hành các hoạt động sản xuất kinh doanh của mỗi doanh nghiệp Với mục đích nâng cao tính hiệu quả trong hoạt động sản xuất kinh doanh, ứng dụng công nghệ thông tin vào quá trình quản trị, điều hành các hoạt động sản xuất kinh doanh đòi hỏi tính liên tục cao, hạn chế tối đa những gián đoạn có thể xảy ra, vì chỉ cần một lỗi nhỏ cũng có thể làm gián đoạn hoạt động sản xuất kinh doanh gây ra thiệt hại về kinh tế cho doanh nghiệp Trong thời gian vừa qua, vấn đề an toàn, an ninh thông tin và chủ quyền quốc gia
là vấn đề thời sự cấp bách với Việt Nam khi chúng ta phải đối mặt với hàng loạt các cuộc tấn công từ quốc tế Đặc biệt với những hệ thống nhạy cảm như an ninh quốc phòng, sân bay hay ngân hàng là những hệ thống cần phải được tăng cường bảo đảm
an toàn nếu không muốn gây ra những thiệt hại lớn về kinh tế hay an ninh quốc phòng Ngày 21/08/2018, Thống đốc Ngân hàng Nhà nước đã ký ban hành Thông tư 18/2018/TT-NHNN quy định về an toàn hệ thống thông tin trong hoạt động ngân hàng, thay thế thông tư số 31/2015/TT-NHNN ngày 28/12/2015 quy định về đảm bảo
an toàn, bảo mật hệ thống công nghệ thông tin trong hoạt động ngân hàng Thông tư 18/2018/TT-NHNN được ban hành nhằm cập nhật các quy định mới của Luật An toàn thông tin mạng và các văn bản hướng dẫn đồng thời phản ánh đầy đủ, sát thực hơn các yêu cầu về an ninh bảo mật trong tình hình mới, phù hợp với thực tế phát triển nhanh chóng, đa dạng về công nghệ thông tin [1] Nội dung của TT 18/2018 quy định về an toàn và bảo mật đối với hệ thống ứng dụng như:
Ghi nhật ký hoạt động của hệ thống thông tin và người sử dụng
Quản lý truy cập hệ thống thông tin và ứng dụng
Quy định về quản lý mã khóa bí mật
Tháng 11/2018, GPBank cũng đã xây dựng và triển khai Quy định an toàn và bảo mật thông tin nhằm đáp ứng và tuân thủ các quy định của thông tư 18/2018/TT-NHNN của Ngân hàng Nhà nước Nội dung của Quy định cũng quy định liên quan đến an toàn
Trang 13 Quy định về sử dụng các giải thuật trong mã hóa
Một số hệ thống ứng dụng nghiệp vụ tại GPBank được xây dựng và phát triển từ cách đây khoảng 12 năm, hiện tại hệ thống không đáp ứng được các yêu cầu quản lý mới về nghiệp vụ và không tuân thủ đầy đủ các quy định mới nhất về an toàn bảo mật
hệ thống ứng dụng Do đó, xây dựng và phát triển mới hệ thống ứng dụng nghiệp vụ đáp ứng được yêu cầu nghiệp vụ mới và tuân thủ các quy định về an toàn bảo mật càng trở lên cấp thiết
1.2 Mục tiêu và phạm vi nghiên cứu
Hệ thống TestKey Management System (TMS) là hệ thống thực hiện quản lý các yêu cầu chuyển tiền thanh toán quốc tế của khách hàng Hệ thống này được xây dựng
và phát triển từ năm 2006, hiện tại hệ thống không đáp ứng được các yêu cầu quản lý mới về nghiệp vụ và không tuân thủ các quy định mới nhất về an toàn bảo mật hệ thống ứng dụng Thêm vào đó, phòng Thanh toán quốc tế tại TSC cần xây dựng mới
hệ thống TMS quản lý tâp đáp ứng được yêu cầu mới về nghiệp vụ và tuân thủ các quy định về an toàn bảo mật của hệ thống ứng dụng theo TT 18/2018 và Quy định an toàn bảo mật hệ thống thông tin của GPBank
Mục tiêu của luận văn là nghiên cứu xây dựng và phát triển mới hệ thống TestKey Management System đáp ứng được yêu cầu mới về nghiệp vụ và tuân thủ các quy định về an toàn bảo mật Trong phạm vi luận văn này sẽ tập trung nghiên cứu xây dựng và phát triển hệ thống TMS dạng ứng dụng web để đảm bảo việc hỗ trợ, vận hành và quản trị hệ thống tập trung Luận văn cũng nghiên cứu các kỹ thuật bảo mật theo yêu cầu của TT 18/2018 và Quy định an toàn bảo mật thông tin của GPBank để ứng dụng vào hệ thống TMS
1.3 Hướng nghiên cứu và cách giải quyết
Việc lựa chọn công nghệ để xây dựng hệ thống ứng dụng cũng được đặt ra để làm sao đáp ứng được yêu cầu Xây dựng và phát triển các ứng dụng web là giải pháp
để giải quyết các bài toán yêu cầu xây dựng hệ thống quản lý nghiệp vụ tập trung từ các phòng ban nghiệp vụ tại TSC của GPBank Các ứng dụng nghiệp vụ web cho phép người phát triển ứng dụng và cài đặt các giải pháp bảo mật tập trung đảm bảo tuân thủ theo quy định của Ngân hàng Nhà nước và GPBank, đồng thời đối với ứng dụng web thì người dùng không cần cài đặt mà chỉ cần sử dụng trình duyệt để đăng nhập và sử dụng hệ thống
Hiện nay, có một số ngôn ngữ cho phép các nhà phát triển xây dựng các ứng dụng web như PHP, NodeJS, Java, Net,… Tuy nhiên các ứng dụng nghiệp vụ tại GPBank đa phần được xây dựng và phát triển trên nền tảng Microsoft NET trong đó chủ yếu là ASP.NET Vì vậy, việc lựa chọn công nghệ ASP.NET của Microsoft để xây dựng hệ thống quản lý và luân chuyển văn bản nội bộ tại GPBank, cụ thể ở đây là xây
Trang 14dựng hệ thống TestKey Management System (TMS) Việc lựa chọn xây dựng ứng dụng TMS trên nền tảng ASP.NET cũng là để phù hợp với hệ thống hạ tầng hiện tại và tránh phát sinh thêm chi phí Ngoài ra, NET cũng cung cấp đầy đủ công cụ và các thư viện cho phép xây dựng và ứng dụng nhằm đáp ứng các yêu cầu về an toàn và bảo mật cho hệ thống ứng dụng
1.4 Cấu trúc của luận văn
Trong khuôn khổ luận văn này tôi tập trung trình bày những khái niệm tổng quan
về bảo mật phần mềm, kiến trúc bảo mật hệ thống phần mềm, một số lỗ hổng phần mềm quan trọng và một số kiểu tấn công Trình bày về bảo mật trong Microsoft NET, bảo mật ASP.NET, đồng thời ứng dụng các kỹ thuật bảo mật của ASP.NET vào “Hệ thống Quản lý và luân chuyển văn bản nội bộ tại GPBank” Luận văn được trình bày trong 6 chương:
Chương 1: Giới thiệu tổng quan luận văn, lý do chọn đề tài, mục tiêu, phạm vi và hướng giải quyết của luận văn
Chương 2: Giới thiệu những khái niệm tổng quan về bảo mật trong hệ thống phần mềm, các lỗ hổng bảo mật cũng như các kiểu tấn công
Chương 3: Giới thiệu tổng quan về kiến trúc bảo mật hệ thống phần mềm, tổng quan về bảo mật trong Microsoft Net, bảo mật trong ASP.NET
Chương 4: Một mô hình ứng dụng kỹ thuật bảo mật trong ASP.NET của Microsoft tại GPBank
Chương 5: Tóm tắt kết quả thu được qua luận văn
Trang 15Chương 2: TỔNG QUAN VỀ BẢO MẬT HỆ THỐNG PHẦN MỀM
2.1 Sự cần thiết đối với bảo mật máy tính
Các máy tính ngày nay được sử dụng để quản lý nhiều chức năng từ các tài khoản ngân hàng đến các hồ sơ sức khỏe Chúng ta giữ thẻ tín dụng của chúng ta an toàn để không ai có thể đánh cắp được chúng Tuy nhiên, với sự ra đời của Thương mại điện tử, người ta có thể mua hàng hóa mà không cần thẻ tín dụng vật lý Ngày nay, một tên tội phạm không cần đánh cắp thẻ tín dụng vật lý, chúng chỉ cần biết chi tiết thông tin thẻ tín dụng đó Do đó, chúng cần đảm bảo rằng máy tính lưu trữ thông tin thẻ tín dụng cần được bảo mật
Các máy tính được sử dụng để quản lý và lưu trữ nhiều thông tin, từ giải trí đến thông tin công ty, từ thông tin cá nhân đến giấy phép lái xe, tất cả đều được duy trì bởi máy tính Nếu chúng ta không bảo mật và bảo vệ máy tính, chúng ta có nguy cơ bị tấn công và mất mát dữ liệu
2.2 Các khái niệm cơ bản
Bảo mật (Security) là các biện pháp được thiết lập để bảo vệ một ứng dụng/hệ thống ứng dụng chống lại các hành động không lường trước được cho rằng các hành động đó sẽ ảnh hưởng hoặc phá hủy ứng dụng/hệ thống ứng dụng Hành động không lường trước có thể là cố ý hoặc vô ý
Trong phần này luận văn trình bày một số khái niệm liên quan đến bảo mật trong
hệ thống phần mềm [2]
2.2.1 Lỗ hổng bảo mật
Các lỗ hổng bảo mật là những điểm yếu trong hệ thống hoặc ẩn chứa trong một dịch vụ hệ thống đó cung cấp, dựa vào đó tin tặc có thể khai thác xâm nhập trái phép
để thực hiện các hành động phá hoại hoặc chiếm đoạt tài nguyên bất hợp pháp
Đối với một hệ thống máy tính, lỗ hổng có thể ở bất cứ đâu Nó có thể trong một chương trình người dùng, trong một Hệ điều hành (Windows XP, Windows NT, UNIX), trong cơ sở dữ liệu, hoặc do người quản trị yếu kém không hiểu sâu sắc các dịch vụ cung cấp và/hoặc do người sử dụng có ý thức bảo mật kém
Đối với lỗ hổng phần mềm, đây là lỗ hổng liên quan đến lỗi (bug) trong phần mềm Bug là lỗi code khiến hệ thống thực hiện một hành động không mong muốn Các bug này có thể khiến hệ thống gặp sự cố, kết nối bị lỗi, không đăng nhập được, nâng cao đặc quyền người dùng hoặc cấp quyền truy cập trái phép vào hệ thống
Mức độ ảnh hưởng của các lỗ hổng là khác nhau Có những lỗ hổng chỉ ảnh hưởng đến chất lượng dịch vụ cung cấp, có những lỗ hổng ảnh hưởng nghiêm trọng đến toàn bộ hệ thống… các lỗ hổng bảo mật sẽ là các điểm yếu có thể tạo ra sự ngưng trệ của dịch vụ
Trang 162.2.2 Khai thác lỗ hổng
Một khi xác định được lỗ hổng, tin tặc có thể viết ra một chương trình lợi dụng lỗi để xâm nhập và chiếm quyền kiểm soát thiết bị Tội phạm mạng tìm điểm yếu trong các phần mềm bảo vệ hệ thống, có thể là một kết nối mạng không được bảo vệ đúng cách Nếu tin tặc có thể tiếp cận máy tính mục tiêu, chúng có thể tìm hiểu về hệ thống
đó Làm thế giúp chúng xác định các phương pháp tiếp cận riêng - truy cập các tệp tin
cụ thể hay chạy các chương trình nhất định - từ đó chúng có thể kiểm soát máy tính và
dữ liệu
Trong những năm gần đây, tin tặc bắt đầu nhắm mục tiêu vào các trình duyệt web bởi những phần mềm này được phép kết nối Internet và thường được cho phép để chạy các chương trình nhỏ; do đó tồn tại rất nhiều lỗ hổng có thể bị khai thác Những
lỗ hổng ban đầu có thể cho phép tin tặc kiểm soát máy tính mục tiêu, trước khi lấy đó làm bàn đạp để xâm nhập vào mạng lưới lớn hơn
Đôi khi các lỗ hổng được chính các nhà phát triển phần mềm phát hiện hoặc do người dùng hay các nhà nghiên cứu cảnh báo Có những trường hợp, tin tặc hoặc cơ quan gián điệp của chính phủ phát hiện cách thức xâm nhập vào hệ thống nhưng không thông báo với bên phát triển Do đó, phần mềm hoặc phần cứng sẽ dễ bị xâm nhập cho đến khi có bản vá hoặc bản sửa lỗi được tạo và phân phối tới người dùng
2.2.3 Nguy cơ và rủi ro
Nguy cơ
Nguy cơ (threat) là những sự kiện có khả năng ảnh hưởng đến an toàn của hệ
thống [2, 3] Ví dụ: tấn công từ chối dịch vụ (DoS và DDoS) là một nguy cơ đối với hệ thống các máy chủ cung cấp dịch vụ trên mạng Khi nói đến nguy cơ, nghĩa là sự kiện
đó chưa xảy ra, nhưng có khả năng xảy ra và có khả năng gây hại cho hệ thống Có những sự kiện có khả năng gây hại, nhưng không có khả năng xảy ra đối với hệ thống thì không được xem là nguy cơ
Rủi ro
Rủi ro (risk) là xác suất xảy ra thiệt hại đối với hệ thống [2, 3] Rủi ro bao gồm 2 yếu tố: Khả năng xảy ra rủi ro và thiệt hại do rủi ro gây ra Có những rủi ro có khả năng xảy ra rất cao nhưng mức độ thiệt hại thì thấp và ngược lại
Ví dụ: rủi ro mất thông tin trên hệ thống không có cơ chế bảo vệ tập tin, chẳng hạn như Windows 98 Windows 98 không có cơ chế xác thực người sử dụng nên bất
cứ ai cũng có thể sử dụng máy với quyền cao nhất Nếu trên đó chỉ có chứa các tập tin văn bản không có tính bí mật thì việc mất một tập tin thì thiệt hại gây ra chỉ là mất công sức đánh máy văn bản đó Đây là dạng rủi ro có xác suất xảy ra cao nhưng thiệt hại thấp
Trang 17Cần chú ý phân biệt giữa nguy cơ và rủi ro Nguy cơ là những hành vi, những sự kiện hoặc đối tượng có khả năng gây hại cho hệ thống Rủi ro là những thiệt hại có khả năng xảy ra đối với hệ thống
Ví dụ: Tấn công từ chối dịch vụ là một nguy cơ (threat) Đây là một sự kiện có khả năng xảy ra đối với bất kỳ hệ thống cung cấp dịch vụ nào Thiệt hại do tấn công này gây ra là hệ thống bị gián đoạn hoạt động, đây mới là rủi ro (risk) Tuy nhiên, không phải bất kỳ tấn công từ chối dịch vụ nào xảy ra cũng đều làm cho hệ thống ngưng hoạt động, và hơn nữa, tấn công từ chối dịch vụ không phải là nguồn gốc duy nhất gây ra gián đoạn hệ thống; những nguy cơ khác như lỗi hệ thống (do vận hành sai), lỗi phần mềm (do lập trình), lỗi phần cứng (hư hỏng thiết bị, mất điện, …) cũng đều có khả năng dẫn đến gián đoạn hệ thống
2.2.4 Tấn công
Tấn công bảo mật là các cuộc tấn công máy tính làm tổn hại đến bảo mật của hệ thống Về mặt khái niệm, các cuộc tấn công bảo mật có thể được phân thành 2 loại là các cuộc tấn công chủ động và tấn công thụ động [8] trong đó kẻ tấn công có quyền truy cập bất hợp pháp vào tài nguyên hệ thống
2.2.4.1 Tấn công chủ động
Tấn công chủ động là các cuộc tấn công trong đó kẻ tấn công cố gắng sửa đổi thông tin hoặc tạo một thông báo sai Việc ngăn chặn các cuộc tấn công này là khá khó khăn vì có một loạt các lỗ hổng vật lý, mạng và phần mềm Chính vì vậy phải có cơ chế phục hồi khi phát hiện ra hệ thống bị gián đoạn hoặc chậm chễ
Hình 2.1: Tấn công chủ động
2.2.4.2 Tấn công thụ động
Tấn công thụ động là các cuộc tấn công mà kẻ tấn công thực hiện nghe lén trái phép, chỉ cần theo dõi việc truyền hoặc thu thập thông tin Kẻ trộm không thực hiện bất kỳ thay đổi nào đối với dữ liệu hoặc hệ thống
Trang 18
Hình 2.2: Tấn công thụ động
Tấn công thụ động rất khó phát hiện vì nó không liên quan đến bất kỳ sự thay đổi nào trong dữ liệu hoặc tài nguyên hệ thống Có thể ngăn chặn tấn công thụ động bằng cách sử dụng các phương thức mã hóa trong đó dữ liệu trước tiên được mã hóa đầu người gửi, sau đó tại đầu người nhận dữ liệu sẽ được giải mã về dữ liệu ban đầu
2.2.5 Hacker
Tin tặc (Hacker)
Một hacker máy tính là bất kỳ một chuyên gia máy tính nào sử dụng kiến thức kỹ thuật của họ để khắc phục một vấn đề [10] Hacker sử dụng các các kiến thức kỹ thuật của họ khai thác các lỗ hổng bảo mật, các bug để xâm nhập vào hệ thống máy tính
Mũ đen (Blackhat)
Thuật ngữ blackhat dùng để chỉ một hacker máy tính không có đạo đức, chuyên đột nhập vào các mạng an toàn để phá hủy, sửa đổi, đánh cắp dữ liệu hoặc làm cho các mạng không thể sử dụng được đối với người sử dụng có quyền [10]
Mũ trắng (Whitehat)
Thuật ngữ whitehat dùng để chỉ một hacker máy tính có đạo đức hoặc một chuyên gia bảo mật máy tính, chuyên kiểm tra việc thâm nhập và các phương pháp kiểm tra khác đảm bảo cho hệ thống thông tin của tổ chức an toàn
2.3 Các lỗ hổng phần mềm quan trọng
Để xây dựng phần mềm bảo mật, không thể thiếu sự hiểu biết về các lỗ hổng phần mềm Trong phần này, luận văn sẽ trình bày tổng quan ngắn gọn về các lỗ hổng quan trọng và nguy hiểm [4]
2.3.1 SQL Injection
SQL Injection là một kỹ thuật cho phép những kẻ tấn công lợi dụng lỗ hổng của việc kiểm tra dữ liệu đầu vào trong các ứng dụng Web và các thông báo lỗi trả về của
Trang 19hệ quản trị CSDL để tiêm vào (inject) và thi hành các câu lệnh SQL bất hợp pháp bằng cách sử dụng nối chuỗi SQL Injection có thể cho phép những kẻ tấn công thực hiện các thao tác thêm mới, cập nhật, xóa trên CSDL của ứng dụng SQL Injection là một công cụ trung gian để tấn công các ứng dụng web có dữ liệu được quản lý bởi các hệ quản trị CSDL như: MS SQL Server, Oracle, MySQL, DB2
2.3.2 OS Command Injection
Tiêm dòng lệnh vào hệ điều hành (OS Command Injection) hay còn gọi là tiêm shell (shell injection) là một lỗ hổng bảo mật web cho phép kẻ tấn công thực thi các lệnh hệ điều hành tùy ý trên máy chủ đang chạy một ứng dụng
Các lỗ hổng tiêm dòng lệnh vào hệ điều hành (OS Command Injection) xảy ra khi phần mềm tích hợp dữ liệu do người dùng quản lý trong một lệnh, được xử lý theo trình thông dịch lệnh shell Nếu dữ liệu không được kiểm tra, tin tặc có thể sử dụng các siêu ký tự sell để thay đổi lệnh đang được thực thi Điểm yếu này là ngôn ngữ độc lập
2.3.3 Buffer overflow
Trong bảo mật máy tính và lập trình, một lỗi tràn bộ nhớ đệm (buffer overflow) hay còn gọi tắt là lỗi tràn bộ đệm là một lỗi lập trình có thể gây ra một ngoại lệ truy cập bộ nhớ máy tính và chương trình bị kết thúc Nó xảy ra khi một chương trình cố gắng thêm dữ liệu vào bộ nhớ đệm hơn dung lượng lưu trữ mà nó cho phép
Việc ghi dữ liệu ra bên ngoài bộ nhớ có thể làm hỏng chương trình, hỏng dữ liệu
và thậm chí có thể gây ra việc thực thi mã độc Các ngôn ngữ lập trình như Java, Python, Visual Basic, C# đều có các giới hạn các kiểu dữ liệu gốc để kiểm tra các ràng buộc của các kiểu dữ liệu này
Trang 20Hậu quả của tấn công Brute-Force
Hậu quả của tấn công Brute-Force là chúng ta bị lộ thông tin đăng nhập vào hệ thống (username và password) Mức độ nghiêm trọng tùy thuộc vào thông tin bị rò rỉ
Cách phòng chống tấn công Brute-Force
Để phòng chống tấn công Brute-Force chúng ta lên thực hiện như sau:
Đặt tên đăng nhập (username) khó đoán, nên tránh các tên đăng nhập như admin, administrator
Mật khẩu dài, mạnh, có ký tự đặc biệt và không liên quan đến các thông tin
Nguy cơ tấn công
Người dùng đặt mật khẩu ngắn, 7 ký tự hoặc ít hơn
Đặt mật khẩu bằng những từ đơn giản, những từ đơn dễ tìm thấy trong từ điển, dễ đoán các biến thể trên từ (Viết hoa một chữ, thêm 1 số vào chữ)
Trang 21mạng lưới Nhờ có tính hợp lệ của dữ liệu ban đầu, các giao thức bảo mật của mạng lưới sẽ xử lý việc tấn công này giống như một hình thức truyền tải dữ liệu thông thường
Nguy cơ tấn công
Tấn công phát lại có thể được sử dụng nhằm chiếm quyền truy cập thông tin lưu trữ trên một mạng lưới được bảo vệ bằng cách chuyển tiếp các thông tin có vẻ như là hợp lệ
2.4.2.4 Đánh hơi mật khẩu
Tấn công đánh hơi mật khẩu (Password sniffing attack) là một cuộc tấn công trên Internet được sử dụng để đánh cắp tên người dùng và mật khẩu (username và password) bằng cách sử dụng các công cụ phân tích gói dữ liệu Tin tặc có thể sử dụng công cụ tcpdump hoặc Ethereal để giám sát lưu lượng mạng Ví dụ, bây giờ nếu ai đó trong mạng con của bạn đang sử dụng phần mềm Telnet để truy cập vào máy tính, bạn
có thể thấy tất cả các gói dữ liệu đi qua mạng có tên đăng nhập và mật khẩu Nếu bạn biết giao thức Telnet, bạn có thể phân tích tất cả các gói này và tìm ra các gói đăng nhập
2.4.3 Tấn công giả mạo
Tấn công giả mạo (Spoofing attack) là cuộc tấn công mà một người hoặc chương trình giả mạo thành công người khác bằng cách làm sai lệch dữ liệu Ví dụ, rất dễ che dấu địa chỉ IP nguồn bằng cách giả mạo IP Kỹ thuật này được sử dụng trong cuộc tấn công giả mạo IP Trong một cuộc tấn công giả mạo IP, số thứ tự và số xác nhận có thể được đánh hơi để tính toán một cách chính xác Nguy cơ giả mạo trong trường hợp này
sẽ là chiếm quyền điều khiển phiên, làm hỏng dữ liệu của một kết nối đã được thiết
Trang 22lập, sau đó thiết lập lại dựa trên số thứ tự và số xác nhận chính xác với với máy tấn công Với việc sử dụng kỹ thuật này, kẻ tấn công có thể bỏ qua một cách hiệu quả mọi biện pháp xác thực đang diễn ra để xây dựng kết nối
2.4.4 Tấn công từ chối dịch vụ
Tấn công từ chối dịch vụ (Denial-of-service attack hoặc viết tắt là DoS) là một dạng tấn công nhằm gây cạn kiệt tài nguyên hệ thống máy chủ và làm ngập lưu lượng băng thông Internet, khiến truy cập từ người dùng tới máy chủ bị ngắt quãng, truy cập chập chờn, thậm chí không thể truy cập được, làm tê liệt hệ thống, hoặc có thể là hệ thống mạng nội bộ
Nếu một phần mềm ứng dụng hoặc hệ thống bị hỏng do một số cuộc tấn công bảo mật dẫn đến ứng dụng hoặc hệ thống không khả dụng, thì đó cũng là một cuộc tấn công Dos Bởi đối thủ chỉ quan tâm tới việc gây nhiễu bằng cách làm tăng băng thông
và tài nguyên để người dùng hợp pháp không thể truy cập hệ thống
2.4.5 Tấn công cuộc gọi thủ tục từ xa (Remote Procedure Call attack)
Tấn công cuộc gọi thủ tục từ xa (Remote Procedure Call - RPC) là một cuộc tấn công tràn bộ đệm RPC là một công nghệ cho phép một chương trình trong một máy tính gọi một thủ tục trong một máy tính khác RPC cho phép một thủ tục hoặc chức năng gọi hoặc thực hiện một thủ tục hoặc hàm trong cùng một không gian địa chỉ Trong tấn công RPC, lỗ hổng tràn bộ đệm được khai thác để kiểm soát RPC và thông qua RPC kẻ tấn công thực hiện bất cứ điều gì trên máy tính nạn nhân
2.4.6 Tấn công tiêm mã (Code injection)
Tiêm mã (Code injection) là một kỹ thuật khai thác lỗi máy tính gây ra bởi việc
xử lý dữ liệu không hợp lệ Tiêm được sử dụng bởi kẻ tấn công để đưa mã vào một chương trình máy tính dễ bị tổn thương và thay đổi quá trình thực hiện
Lỗ hổng tiêm mã xảy ra khi một ứng dụng gửi dữ liệu không đáng tin cậy đến một trình thông dịch Lỗi tiêm thường được tìm thấy trong các truy vấn SQL, LDAP, XPath hoặc NoSQL; các lệnh của HĐH; XML parser, SMTP header, các tham số chương trình,…
Trang 232.5.1.1 Tin cậy
Tin cậy là một cơ chế thông qua đó chúng ta giữ bí mật về thông tin hoặc dữ liệu Trong lập trình bảo mật, cần đảm bảo rằng chương trình viết sẽ giữ bí mật dữ liệu để không ai có thể dễ dàng dịch ngược chương trình và truy cập dữ liệu Nói một cách khác, không ai có thể dễ dàng đảo ngược quá trình xử lý logic của chương trình và truy cập dữ liệu Ngoài ra, cần đảm bảo rằng chương trình không gặp sự cố, gây ra từ chối dịch vụ
2.5.1.2 Toàn vẹn
Đây là một thuộc tính đảm bảo rằng thông điệp hoặc dữ liệu được bảo vệ khỏi việc chỉnh sửa vô tình hay cố ý Điều này rất hữu ích để phát hiện một cuộc tấn công trên dữ liệu của bạn Để đảm bảo tính toàn vẹn, cần bổ sung một số thông tin để xác minh tính toàn vẹn của dữ liệu Ví dụ, khi bạn nhận được dữ liệu từ một chương trình khác, bạn kiểm tra giá trị checksum của dữ liệu hoặc chữ ký số để đảm bảo tính toàn vẹn của dữ liệu được duy trì
2.5.1.3 Sẵn sàng
Sẵn sàng là một thuộc tính của bảo mật trong đó dịch vụ có sẵn 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 ứng dụng làm cho người dùng hợp pháp không sử dụng được dịch vụ Ví dụ, nếu chương trình bạn viết không thể chạy khi được yêu cầu nhiều nhất, hoặc do một số lỗi, một trong các chức năng trong ứng dụng này đi vào vòng lặp không xác định Tin tặc biết lỗi này có thể khai thác lỗi này khiến chương trình đi vào vòng lặp và ứng dụng không khả dụng trong một khoảng thời gian
2.5.1.4 Xác thực
Xác thực trả lời câu hỏi: Bạn là ai? Xác thực 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 Chữ ký số cũng có thể coi là một cơ chế xác thực
2.5.1.5 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 Client chỉ có thể truy cập được vào tài nguyên nhất định được phân quyền trên hệ thống Thuộc tính này cũng được gọi là tăng cường kiểm soát truy cập hoặc bảo mật dựa trên vai trò
Trang 242.5.1.6 Ẩn danh
Ẩn danh là một thuộc tính khác của bảo mật Ẩn danh là một thuộc tính mà thông qua đó người dùng ẩn danh với thế giới bên ngoài Ví dụ, trong một hệ thống bỏ phiếu điện tử, cử tri cần được ẩn danh để không ai có thể tìm ra người bỏ phiếu là ai
2.5.2 Lập trình an toàn
Lập trình an toàn là làm cho chương trình an toàn Một chương trình nên chạy an toàn trên mọi máy tính được thiết kế để chạy chương trình trên đó Trong khi một chương trình an toàn đang chạy, nó không gây ra bất kỳ thiệt hại nào đến môi trường
nó đang chạy Chương trình an toàn là chương trình không thể khai thác một số nhiệm
vụ trái phép Chương trình an toàn là chương trình không thể được sử dụng như một lộ trình tấn công một cái gì đó khác Một chương trình an toàn là chương trình không bao giờ có thể được sử dụng như một đặc quyền cho kẻ tấn công Một chương trình an toàn
sẽ không hoạt động như một tác nhân kép hoặc trojan Một chương trình an toàn sẽ không bao giờ làm bất kỳ các hành động đặc biệt
Bạn là một lập trình viên thì cần đảm bảo rằng bất kỳ chương trình nào bạn viết không có bất kỳ lỗ hổng bảo mật nào Lỗ hổng có thể là do một số lỗi trong code của bạn, nó có thể là do một số lỗ hổng trong các chức năng hệ thống bạn đã sử dụng trong chương trình của mình hoặc có thể là do các lỗ hổng trong giao giao diện lập trình ứng dụng (Application Programming Interface - API) mà bạn sử dụng trong code của mình
2.6 Kết luận
Như vậy ở chương đầu tiên, luận văn đã mô tả những khái niệm cơ bản về bảo mật trong hệ thống phần mềm, một số lỗ hổng phần mềm quan trọng cũng như các kiểu tấn công bảo mật Ngoài ra lập trình bảo mật cũng là những yếu tố quan trọng trong bảo mật hệ thống phần mềm
Ở chương tiếp theo luận văn sẽ đi vào tìm hiểu tổng quan kiến trúc bảo mật hệ thống phần mềm, tổng quan bảo mật trong NET và ASP.NET
Trang 25Chương 3: BẢO MẬT HỆ THỐNG PHẦN MỀM TRONG NET
Ở chương này luận văn sẽ trình bày tổng quan về kiến trúc bảo mật trong hệ thống phần mềm, bảo mật trong NET và ASP.NET
3.1 Tổng quan kiến trúc bảo mật hệ thống phần mềm
3.1.1 Vòng đời phát triển
Các lỗ hổng chủ yếu là do một số lỗi bảo mật trong phần mềm, có thể là trong ứng dụng, trong hệ điều hành hoặc CSDL Do đó, tất cả các chương trình phần mềm phải được phát triển với việc tích hợp bảo mật Vòng đời phát triển bảo mật của hệ thống phần mềm được mô tả ở hình 3.1 [2]
Identify system objects
Apply functional requirement
System testing and
ethical hacking
Contruct the system
with secure coding
Identify security requirements
Identify threats
Design system with security
Hình 3.1: Các bước xây dựng một hệ thống bảo mật
Các bước xây dựng trong vòng đời phát triển bảo mật của hệ thống phần mềm bao gồm:
Identify system objectives: định nghĩa đối tượng của hệ thống
Apply functional requirements: áp dụng các yêu cầu chức năng
Identify security requirements: định nghĩa các yêu cầu bảo mật của hệ
thống
Identify threats: định nghĩa các mối nguy hại
Design system with security: thiết kế hệ thống với yêu cầu bảo mật cao
Construct the system with secuced coding: khởi tạo hệ thống với các mã bảo
mật
System testing and ethical hacking: kiểm thử hệ thống và kiểm thử hack
Trang 26Để xây dựng bảo mật từ đầu, việc xem xét bảo mật phải bắt đầu ngay tại thời điểm xác định mục tiêu của hệ thống Giống như vòng đời phát triển phần mềm tiêu chuẩn, vòng đời phát triển bảo mật cũng bắt đầu bằng việc xác định mục tiêu của hệ thống hoặc mục tiêu nghiệp vụ
3.1.2 Phân tích yêu cầu bảo mật
Một hệ thống bảo mật là một hệ thống mà thông tin được xử lý trên nó phải đảm bảo được 3 yêu cầu sau đây [3]:
Để đảm bảo tính bí mật của thông tin, ngoài các cơ chế và phương tiện vật lý như thiết bị lưu trữ, nơi đặt thiết bị, dịch vụ bảo vệ,… thì kỹ thuật mật mã hóa (Cryptography) được xem là công cụ bảo mật thông tin hữu hiệu nhất trong môi trường máy tính Ngoài ra, kỹ thuật quản lý truy xuất (Access Control) cũng được thiết lập để bảo đảm chỉ có những đối tượng được cho phép mới có thể truy xuất thông tin
3.1.2.2 Tính toàn vẹn (Integrity)
Tính toàn vẹn là đảm bảo sự tồn tại nguyên vẹn của thông tin, dữ liệu, chỉ những người dùng được ủy quyền mới được phép chỉnh sửa dữ liệu Tính toàn vẹn được xét trên hai khía cạnh là tính nguyên vẹn của dữ liệu và tính xác thực của nguồn gốc dữ liệu Nói một cách khác, tính toàn vẹn của dữ liệu phải được đánh giá trên hai mặt: toàn vẹn về nội dung và toàn vẹn về nguồn gốc Ví dụ, trong hệ thống ngân hàng, không cho phép khách hàng tự thay đổi thông tin số dư tài khoản của mình
3.1.2.3 Tính khả dụng (Availability)
Tính khả dụng là tính sẵn sàng của thông tin, dữ liệu đảm bảo dữ liệu luôn sẵn sàng khi những người dùng hoặc ứng dụng được ủy quyền yêu cầu truy xuất Ví dụ, trong hệ thống ngân hàng cần đảm bảo rằng khách hàng có thể truy vấn thông tin số dư tài khoản bất kỳ lúc nào theo như quy định
Tính khả dụng là một yêu cầu rất quan trọng của hệ thống, bởi vì một hệ thống tồn tại nhưng không sẵn sàng cho sử dụng thì cũng giống như không tồn tại một hệ thống thông tin nào Một hệ thống khả dụng là một hệ thống làm việc trôi chảy và hiệu quả, có khả năng phục hồi nhanh chóng nếu có sự cố xảy ra
Trang 273.1.3 Thiết kế bảo mật
Sau khi các yêu cầu được xác định và các nguy cơ bảo mật có thể đã được xác định, hệ thống cần phải được thiết kế đưa vào các nguy cơ bảo mật Nội dung của thiết
kế bảo mật bao gồm: các mẫu thiết kế bảo mật, xác thực và chứng thực hệ thống [2]
3.1.3.1 Các mẫu thiết kế bảo mật
Joseph Yoder và Jeffrey Barcalow là những người đầu tiên đưa ra các mẫu thiết
kế bảo mật thông tin Tuy nhiên, khá khó khăn và đôi khi không thể xác định những gì một hệ thống không phải làm Thiết kế bảo mật cho hệ thống cần thực hiện theo các mẫu thiết kế sau:
a) Điểm truy cập đơn (Single Access Point)
Bất kỳ một hệ thống bảo mật nào cũng khó quản lý khi nó có cửa trước, cửa sau
và cửa phụ Mẫu thiết kế này khuyến nghị rằng hệ thống chỉ nên có một điểm truy cập vào hệ thống Điều này hữu ích khi ta thực hiện quản lý chỉ một điểm truy cập trên hệ thống
b) Điểm kiểm tra (Checkpoint)
Đối với một hệ thống máy tính, cần có một điểm kiểm tra là tốt Mẫu thiết kế này cho thấy rằng người dùng của một hệ thống nên được xác nhận đăng nhập vào hệ thống Kiểm tra này được điều chỉnh bởi chính sách bảo mật của tổ chức Chính sách bảo mật có thể là một sự kết hợp của xác thực và có ủy quyền Để đăng nhập vào hệ thống thì cần phải có một màn hình đăng nhập để thông qua đó thu thập thông tin về người dùng như: tên đăng nhập, mật khẩu và có thể một số cài đặt cấu hình Điểm kiểm tra này sẽ xác thực thông tin của người dùng (tên đăng nhập, mật khẩu), hệ thống chỉ ủy quyền cho người dùng sử dụng những tài nguyên được phép sử dụng
c) Vai trò (Roles)
Trong mẫu thiết kế này, hệ thống cần xác minh người dùng là ai, người dùng đó
có phải là thật hay không Thông qua xác thực, hệ thống cần xác định người dùng có đặc quyền gì và quyền truy cập nào mà người dùng có trong hệ thống Quyền truy cập được xác định bởi đặc quyền của người dùng theo vai trò của người dùng trong tổ chức Trong một tổ chức, mỗi người dùng thường có một số loại vai trò, thông thường vai trò được xác định theo trách nhiệm và chức danh công việc Khi trách nhiệm và chức danh thay đổi thì các vai trò của người dùng trong hệ thống nên được cập nhật trực tiếp
d) Phiên (Session)
Một phiên ghi nhớ ngữ cảnh của một giao dịch, nó ghi nhớ người dùng tại bất kỳ thời điểm nào của giao dịch Đối với hệ thống ứng dụng, sau khi đăng nhập hệ thống
Trang 28thành công thì hệ thống cần tạo ra phiên làm việc cho từng người dùng đã đăng nhập thành công vào hệ thống
e) Full View with Error
Mẫu này gợi ý rằng người dùng nên được phép nhìn thấy toàn bộ hệ thống Tuy nhiên, người dùng sẽ không được phép truy cập vào tài nguyên mà họ không được đặc quyền sử dụng Việc hạn chế quyền truy cập này cần phải có thông báo lỗi thích hợp
Ví dụ, khi bạn vào thư viện, bạn có thể xem toàn bộ danh mục sách có trong thư viện Tuy nhiên bạn không thể mượn sách và mang ra khỏi thư viện trừ khi bạn có thẻ thư viện
f) Limit View
Mẫu này cho phép người dùng chỉ biết một phần của hệ thống mà người dùng được phân quyền Mẫu này được sử dụng rộng rãi trong bảo mật mạng Khi kẻ tấn công biết các dịch vụ nào đang chạy trên máy tính, họ có thể sử dụng các công cụ có liên quan để thực hiện cuộc tấn công Do đó, chế độ xem có giới hạn của các cấu hình
mô hình và các lựa chọn được cho phép đối với người dùng dựa trên vai trò của mình Mẫu này nhận phiên hiện tại với vai trò của người dùng, áp dụng trạng thái hiện tại của ứng dụng và tự động xây dựng giao diện người dùng giới hạn xem dựa trên các thuộc tính này
g) Lớp truy cập an toàn (Secure Access Layer)
Khi thực hiện xây dựng bảo mật ứng dụng, nên xây dựng lớp truy cập an toàn để giao tiếp trong và ngoài ứng dụng Điểm quan trọng đối với mẫu này là xây dựng một lớp để cô lập nhà phát triển khỏi sự thay đổi Lớp này có thể có nhiều giao thức khác nhau tùy thuộc vào các loại thông tin liên lạc cần phải thực hiện Ví dụ, lớp này có thể
có một giao thức truy cập dữ liệu an toàn trong cơ sở dữ liệu Oracle và một giao thức khác để kết nối an toàn với máy chủ Apache thông qua SSL
h) Đặc quyền tối thiểu (Least Privilege)
Trong bất kỳ chương trình máy tính nào cũng phải luôn ở trạng thái ít đặc quyền nhất Khi có nhu cầu, nó sẽ nâng cao đặc quyền chỉ trong thời gian cần thiết Một khi đặc quyền chức năng hoàn thành, nó phải trở về trạng thái đặc quyền tối thiểu
i) Nhật ký (Journaling)
Trong bất kỳ hệ thống nào cần bảo mật, tất cả chi tiết hoạt động của hệ thống cần được ghi lại Tất cả các sự kiện và chi tiết hoạt động của hệ thống cần được ghi lại thông qua tệp tin nhật ký Các hành động quan trọng của người dùng như cố gắng truy cập một số tài nguyên đặc quyền, xóa các tệp hoặc yêu cầu nâng cao đặc quyền cần phải được ghi lại Những tệp tin này cũng có thể được sử dụng để xác định chi tiết tài
Trang 29nguyên sử dụng, và quan trọng hơn tất cả các tệp tin này cần được bảo vệ để chúng không bị giả mạo
j) Close Gracefully
Mẫu này đề xuất tất cả các hệ thống nên đóng đúng cách Bất kỳ tài nguyên được cấp phát trong suốt quá trình hoạt động của hệ thống cần phải được giải phóng vào thời điểm đóng hệ thống Tất cả các tệp tin cần được đóng lại, tất cả các tệp tin lưu trữ tạm thời trong đĩa và bộ nhớ cần được làm sạch, xóa và đưa trở lại hệ điều hành Nếu người dùng đang làm việc ở một đặc quyền nâng cao, đặc quyền cần phải được hạ xuống trước khi thoát Không nên để lại bất kỳ dữ liệu nào, bản sao dữ liệu trên bộ nhớ
và trên máy tính người dùng
3.1.3.2 Các hình thức ngăn chặn hành vi trộm cắp mật khẩu
Hệ thống thực hiện xác thực người dùng thông qua tên đăng nhập và mật khẩu Sau khi xác thực thành công, hệ thống sẽ thực hiện xác định quyền truy cập tài nguyên của người dùng trên hệ thống Nếu mật khẩu người dùng bị đánh cắp, kẻ tấn công có thể đánh lừa máy tính và truy cập vào tài khoản của người dùng Để ngăn chặn hành vi trộm cắp mật khẩu, có thể áp dụng một số kỹ thuật bảo mật sau đây [2]:
a) Delay authentication prompt
Trong ứng dụng, nếu trường hợp mật khẩu không chính xác, hệ thống sẽ đưa ra thông báo lỗi Vì vậy, trong chương trình cần đặt độ trễ một khoảng thời gian nhất định trước khi thông báo xác thực Ngoài ra, cần thêm một số thời gian trễ trước khi đưa ra thông báo tiếp theo Thời gian trễ cần được đồng bộ hóa với thời gian của người dùng Các thiết lập trên nhằm hạn chế cuộc tấn công thực hiện dò mật khẩu đăng nhập
hệ thống
b) Encrypt the Password
Mật khẩu không nên gửi dưới dạng cleartext vì tin tặc có thể sử dụng công cụ để đánh cắp tên đăng nhập và mật khẩu dễ dàng Để ngăn chặn lỗ hổng này, thông tin đăng nhập như tên đăng nhập hoặc mật khẩu phải được mã hóa để ngăn ngừa bị đánh cắp thông tin đăng nhập hệ thống
c) Strong Password
Mật khẩu mạnh là mật khẩu có khả năng chống lại các cuộc tấn công như đoán mật khẩu, tấn công brute-force hoặc tấn công dictionary Một mật khẩu mạnh là mật khẩu có độ dài từ 8 ký tự trở lên bao gồm chữ cái in hoa, chữ cái in thường, số và các
ký tự đặc biệt
d) One-Time Password
Trong cuộc tấn công phát lại, tin tặc có thể sử dụng dữ liệu tên đăng nhập và mật khẩu được thu thập từ phiên trước đó Do vậy, để ngăn chặn lỗ hổng loại này trong
Trang 30thiết kế, chúng ta sử dụng mật khẩu một lần Mật khẩu một lần được sinh ra ngẫu nhiên dựa theo công thức để xác minh giao dịch xảy ra tại một thời điểm Mục đích là chống giả mạo giao dịch
e) Storing the Password
Mật khẩu không bao giờ được lưu trữ dưới dạng bản gốc (plainttext), nó luôn phải được lưu trữ dưới hình thức được mã hóa Nếu tin tặc biết được khóa thì tin tặc có thể sử dụng chức năng giải mã để khôi phục mật khẩu Vì vậy, trong ứng dụng mật khẩu nên được lưu trữ bằng cách sử dụng thuật toán băm một chiều như MD5 hoặc thuật toán SHA Lợi thế của các thuật toán băm một chiều là không thể khôi phục mật khẩu gốc
3.1.3.3 Chứng thực
Chứng thực là để xác định vai trò của người dùng được sử dụng tài nguyên của
hệ thống Chứng thực còn được gọi là kiểm soát truy cập dựa trên vai trò [2]
Trong bảo mật dựa trên vai trò (role-based security), chúng ta sử dụng vai trò của người dùng để xác định đặc quyền mà người dùng có thể có quyền truy cập vào tài nguyên Việc kiểm soát như vậy gọi là Kiểm soát truy cập dựa trên vai trò (Role-base Access Control - RBAC) Trong RBAC các chính sách bảo mật và quyền truy cập phụ thuộc và ràng buộc với vai trò của người dùng Vai trò thường liên quan đến chính sách phân cấp sử dụng hệ thống trong một tổ chức
Hình 3.2: Xác định quyền dựa trên vai trò của người dùng
Trang 313.1.4 Đánh giá bảo mật
Trong suốt vòng đời phát triển bảo mật, chúng ta cần luôn ghi nhớ rằng kẻ tấn công sẽ cố gắng khai thác những lỗ hổng trong chương trình của chúng ta Do đó, sau khi viết code chúng ta cần đánh giá lại code đối với các rủi ro bảo mật Để thực hiện đánh giá code thì chúng ta cần một nhóm các thành viên có kiến thức về lỗ hổng bảo mật và yêu cầu bảo mật để có thể tìm ra lỗ hổng cần khắc phục Microsoft đã đề xuất thực hiện đánh giá code theo 4 bước như sau [2]:
3.1.4.1 Bước 1: Xác định các mục tiêu đánh giá bảo mật code
Bước đầu tiên là đặt mục tiêu và các ràng buộc cho đánh giá Khi chúng ta đặt mục tiêu cho đánh giá bảo mật, chúng ta cần biết các vấn đề bảo mật phổ biến đối với bất kỳ ứng dụng nào cũng như mọi thay đổi code cụ thể cần được xem xét Các nội dung cần đánh giá bao gồm:
Xác thực các dữ liệu đầu vào
Xác thực, ủy quyền, nhật ký, tài khoản
Các dữ liệu nhạy cảm
Các thông số cấu hình
Các đoạn mã không an toàn, quản lý các ngoại lệ
Mức truy cập dữ liệu
Tiêm mã, cross-site scripting
Quản lý đặc quyền và đặc quyền nâng cao
3.1.4.2 Bước 2: Rà soát sơ bộ
Việc thực hiện rà soát sơ bộ cần được thực hiện theo 2 cách thức là tự động và thông thường Đối với việc đánh giá code nên đặt các câu hỏi hoặc các tình huống như sau:
Xác định vùng tin tưởng: tất cả các đối tượng trong đó có thể tin cậy được
Xác định dữ liệu đầu vào: cần xác nhận từng dữ liệu đầu vào hợp lệ cho chương trình và loại bỏ các dữ liệu không hợp lệ
Code xác thực người dùng: Chương trình có xác thực người dùng không? Kỹ thuật xác thực nào đã sử dụng? Mã xác thực có được chỉnh sửa không?
Code ủy quyền người dùng: Người dùng được tin cậy nhưng có được phép thực hiện các nhiệm vụ đặc quyền không? Vai trò nào được cho phép và làm thế nào để chúng tương tác?
Mã hóa: Ứng dụng có sử dụng mã hóa không? Loại thuật toán nào hệ thống
sử dụng, đối xứng hoặc không đối xứng? Kích thước khóa nào đang sử dụng
Các đoạn mã xử lý ngoại lệ: Chương trình có một kiến trúc xử lý lỗi nhất quán? Chương trình có bắt và đưa ra ngoại lệ có cấu trúc
Trang 32 Độ đặc quyền sử dụng các chức năng: Có phần nào của chương trình cần được thực thi đặc trong quyền nâng cao không? Nếu có, nó được xử lý như thế nào?
Thư viện bên ngoài: Chương trình có sử dụng thư viện bên ngoài không? Nếu có, nó đáng tin đến mức nào?
3.1.4.3 Bước 3: Đánh giá các vấn đề bảo mật code
Đây là bước quan trọng nhất của tất cả, bước này sử dụng kết quả của bước 2 để phân tích Đối với việc đánh giá các vấn đề bảo mật code, cần thực hiện:
Đánh giá các vùng tin cậy: Đánh giá mức độ tin cậy của nguồn đầu vào đến
từ các nguồn nội bộ hoặc từ code được viết trong tổ chức, không nên tin tưởng bất kỳ đầu vào nào đến từ bên ngoài các thành phần của ứng dụng
Phân tích luồng thực hiện chức năng: Thực hiện phân tích luồng điều khiển
các bước thông qua các điều kiện logic bên trong code
Phân tích luồng lưu trữ dữ liệu: Thực hiện phân tích luồng dữ liệu để theo
dõi vòng đời của dữ liệu từ các điểm đầu vào đến các điểm đầu ra
Đầu vào/đầu ra: Trong quá trình phân tích luồng dữ liệu, cần thực hiện đánh
giá danh sách đầu vào và đầu ra
Đặc điểm của các ngôn ngữ lập trình: Vẫn có thể có rủi ro bảo mật từ các
phân đoạn code và thư viện khác nhau Các thư viện hoặc code đã được chứng nhận là đáng tin cậy nhưng cũng trở nên không đáng tin cậy do những thay đổi từ môi trường bên ngoài
3.1.4.4 Bước 4: Đánh giá các vấn đề bảo mật duy nhất trong kiến trúc
Sau khi đã hoàn thành bước 1, 2 và 3, cần thực hiện bước cuối cùng là tìm kiếm các vấn đề bảo mật liên quan đến kiến trúc duy nhất của ứng dụng Đây là bước cuối cùng xác minh các tính năng bảo mật duy nhất cho kiến trúc ứng dụng
3.1.5 Kiểm thử bảo mật
Kiểm thử phần mềm là một chức năng quan trọng trong vòng đời phát triển phần mềm Tất cả các phần mềm cần phải được kiểm tra trước khi đưa vào sử dụng Nội dung kiểm thử bảo mật bao gồm [2]:
3.1.5.1 Đánh giá lỗ hổng (Vulnerability Assessment)
Quá trình đánh giá lỗ hổng là tiến hành các phân tích và kiểm thử khác nhau trên một hệ thống cụ thể để đánh giá sự hiện diện của lỗ hổng bảo mật Đánh giá lỗ hổng được chia thành 2 loại: đánh giá lỗ hổng bên ngoài và bên trong
a) Đánh giá lỗ hổng bên ngoài
Nhóm đánh giá này xác định sự hiện diện của lỗ hổng bảo mật trong hệ thống khi
sử dụng từ môi trường bên ngoài như một số mạng bên ngoài hoặc môi trường không
Trang 33tin cậy, đặc biệt là môi trường Internet Các lỗ hổng có thể liên quan đến các bộ định tuyến, máy chủ, modem và tường lửa hoặc trong các hệ điều hành và các ứng dụng máy chủ
b) Đánh giá lỗ hổng bên trong
Nhóm đánh giá này thực hiện từ bên trong mạng tổ chức, mạng LAN, mạng tin cậy Đánh giá lỗ hổng nội bộ sẽ cung cấp cho tổ chức những dữ liệu đưa ra cho các nhân viên trong tổ chức Các lỗ hổng bên trong bao gồm các lỗ hổng liên quan đến ứng dụng, cơ sở dữ liệu và hệ điều hành của các thành phần mạng, các ứng dụng máy chủ trung gian của riêng tổ chức
c) Công cụ đánh giá lỗ hổng
Có khá nhiều công cụ có thể được sử dụng để phân tích các hệ thống và xác định
lỗ hổng Có khá nhiều công cụ miễn phí và mở, các công cụ này có thể download tại trang web Insecure.org và Sectools.org Một số công cụ phổ biến là Nessus, Snort và Tcpdump
3.1.5.2 Công cụ phủ sóng mã
Đây là một loại công cụ xác nhận mã (code) lúc chạy và cho biết liệu người viết code đã đảm bảo độ bao phủ của code chưa Bạn cần phải xác định điểm quan trọng của code để thực hiện kiểm tra
Công cụ này sau đó sẽ chạy mã, phân tích các kết quả và cho biết liệu bạn đã kiểm tra hết các code chưa Nếu một phần bảo mật quan trọng của code không được kiểm tra, bạn cần thực hiện kiểm tra lại
3.1.5.3 Kiểm thử tính hợp lệ hoặc không hoạt động
Kiểm thử tính hợp lệ là kiểm tra xem hệ thống có đang làm một cái gì đó mà nó không phải làm hay không
Kiểm thử không hoạt động là một phương pháp kiểm thử sử dụng các hồ sơ kiểm thử không tương ứng với các hồ sơ hoạt động dự kiến
3.1.5.4 Kiểm thử thâm nhập
Kiểm thử xâm nhập giúp chúng ta hiểu được bảo mật bên ngoài của một hệ thống Nó giúp đánh giá các lỗ hổng an ninh, các vấn đề về xác thực và việc phân quyền Một số công cụ miễn phí như Nessus, Nmap và Tcpdump có thể giúp bạn trong quá trình kiểm tra này
3.1.5.5 Hacker mũ trắng
Hacker mũ trắng gần giống như kiểm thử thâm nhập, tuy nhiên trong thực tế có một số khác biệt giữa hai khái niệm này:
Trang 34 Hacker mũ trắng hay còn gọi là hacker tốt, người được kiểm thử hệ thống nhưng không hack hệ thống cho mục đích xấu
Trong kiểm thử thâm nhập, người kiểm thử có thể sử dụng một số công cụ kiểm tra thâm nhập và kiểm tra các lỗ hổng bảo mật Hacker mũ trắng đòi hỏi một mức độ kỹ năng cao hơn so với kiểm thử thâm nhập
Hacker mũ trắng sẽ kiểm tra cả sự an toàn và các vấn đề bảo mật của một chương trình, trong khi kiểm thử thâm nhập chủ yếu sẽ giải quyết vấn đề bảo mật
3.1.5.6 Kiểm thử mờ (Fuzz Testing)
Kiểm thử mờ (Fuzz Testing) là một kỹ thuật kiểm thử phần mềm đối với việc cung cấp dữ liệu ngẫu nhiên cho đầu vào của một chương trình máy tính Sau đó, chương trình sẽ được giám sát các trường hợp ngoại lệ như treo máy, lỗi code không được thực thi, tài nguyên bộ nhớ thất thoát nhằm để xác định các hành vi bất thường, phát hiện các lỗ hổng bảo mật tiềm ẩn của chương trình Kiểm thử mờ thường được sử dụng để kiểm tra bảo mật chính cho việc phát hiện các lỗ hổng bảo mật nghiêm trọng
ở các phần mềm lớn hoặc hệ thống máy tính
3.1.5.7 Chèn lỗi (Fault Injection)
Chèn lỗi [2] là phương pháp lỗi được chèn tương tự như một lỗi trong môi trường ứng dụng để xem cách hệ thống phản ứng và liệu sẽ có một sự vi phạm bảo mật nào Nếu không, hệ thống được coi là an toàn
Có nhiều công cụ chèn lỗi mà có thể được sử dụng liên quan đến bảo mật như CECIUM, DOCTOR, ORCHESTRA, NTHAPE, và LOKI
3.2 Bảo mật trong NET
3.2.1 .NET Framework
3.2.1.1 Tổng quan về NET Framework
.NET Framework là một nền tảng phát triển để xây dựng các ứng dụng cho web, Windows, Windows Phone, Windows Server và Microsoft Azure [6] Nó bao gồm Common Language Runtime (CLR) và thư viện lớp NET Framework, thư viện này bao gồm một loạt các chức năng và hỗ trợ cho nhiều tiêu chuẩn
.NET Framework cung cấp nhiều dịch vụ, bao gồm quản lý bộ nhớ, kiểu và bộ nhớ an toàn, bảo mật, kết nối mạng và triển khai ứng dụng Nó cung cấp các cấu trúc
dữ liệu và API dễ sử dụng để trừu tượng hóa hệ điều hành Windows cấp thấp hơn Bạn
có thể sử dụng các ngôn ngữ lập trình khác nhau với NET Framework, bao gồm C#, F# và Visual Basic
Trang 353.2.1.2 Common Language Runtime (CLR)
CLR cung cấp nền tảng cho các nhà phát triển ứng dụng để xây dựng một ứng dụng tích hợp bao gồm các thành phần khác nhau đã được xây dựng bằng các nền tảng phát triển khác nhau Nó cung cấp một hệ thống loại chung và ngôn ngữ trung gian (Intermediate Language - IL) để thực hiện các chương trình được viết bằng nhiều ngôn ngữ khác nhau và để tạo điều kiện cho khả năng tương tác giữa các ngôn ngữ đó Nó
mô tả việc sắp xếp dữ liệu thông qua định nghĩa giao diện ngôn ngữ (Interface Definition Language - IDL) cần thiết cho khả năng tương tác ngôn ngữ [2]
CLR được thực hiện thông qua một cơ chế gọi là cơ sở hạ tầng ngôn ngữ chung (Common Language Infrastructure - CLI) CLI cung cấp các lợi ích sau cho các nhà phát triển ứng dụng [5]:
Cải tiến hiệu suất
Khả năng dễ dàng sử dụng các thành phần được phát triển trong các ngôn ngữ khác
Các kiểu mở rộng được cung cấp bởi một thư viện lớp
Các tính năng của ngôn ngữ như kế thừa, interface và overload cho lập trình hướng đối tượng
Hỗ trợ phân luồng rõ ràng cho phép tạo các ứng dụng đa luồng, có thể mở rộng
để lấy một lớp từ lớp C# ban đầu của bạn hoặc gọi một phương thức trên lớp gốc Bạn cũng có thể truyền một thể hiện của một lớp cho một phương thức của một lớp khác được viết bằng một ngôn ngữ khác
CLR cung cấp hạ tầng cho phép thực hiện quản lý thực thi, nó cũng cung cấp các dịch vụ khác nhau được sử dụng trong quá trình thực thi Trước khi một phương thức hoặc một chức năng có thể chạy được, mã nguồn phải được biên dịch để tạo mã thực thi dành riêng cho bộ xử lý Môi trường phát triển dịch mã nguồn thành mã quản lý (managed code) dưới dạng ngôn ngữ trung gian MSIL (Microsoft Intermediate Language) hay IL (Intermediate Language) Khi thực thi mã ứng dụng, tuỳ thuộc vào
Trang 36chỉ thị người dùng trình biên dịch tức thời JIT (Just In Time) của CLR cung cấp sẽ chuyển đổi mã quản lý (managed code) thành mã máy (native code) và JIT cất giữ mã máy phát sinh vào bộ nhớ đệm cho các thao tác tương tự
3.2.2 .NET Runtime security
Runtime loader thực hiện tải cả Managed code và Unmanaged code và hướng dẫn bộ xử lý thực thi chúng [2] Managed code thực thi dưới sự kiểm soát của runtime
và do đó có quyền truy cập tới các dịch vụ được cung cấp bởi môi trường runtime như quản lý bộ nhớ, biên dịch JIT và quan trọng nhất là các dịch vụ bảo mật như hệ thống chính sách bảo mật và xác minh Unmanaged code là code đã được biên dịch để chạy trên nền tảng phần cứng cụ thể và không thể sử dụng trực tiếp môi trường thực thi runtime Khi trình biên dịch ngôn ngữ tạo ra managed code được biểu diễn dưới dạng MSIL, nó sẽ được JIT biên dịch thành mã gốc trước khi thực thi
Có 2 hình thức xác minh trong quá trình runtime là MSIL verified và Assembly metadata validated
MSIL verified
Managed code được xác minh trong quá trình runtime Unmanaged code không thể xác minh trong quá trình runtime vì vậy nó phải được an toàn MSIL được phân thành 4 loại như sau:
MSIL không hợp lệ (Invalid MSIL) là MSIL mà trình biên dịch JIT không thể tạo ra biểu diễn gốc
MSIL hợp lệ (Valid MSIL) là tất cả các MSIL thỏa mãn ngữ pháp MSIL
MSIL kiểu an toàn (Type-safe MSIL) loại chỉ tương tác với các loại khác thông qua các contract được công khai
MSIL có thể kiểm chứng (Verifiable MSIL) là một loại MSIL an toàn có thể được chứng minh là loại an toàn bằng thuật toán xác minh
Assembly metadata verified
Assembly metadata được verified khi một assembly được nạp vào trong Global Assembly Cache (GAC), hoặc tải xuống bộ đệm, hoặc khi nó được đọc từ ổ đĩa nếu nó không nạp vào GAC GAC là trung tâm lưu trữ cho các assemplies Bộ đệm tải xuống lưu giữ các assemplies được tải xuống từ các vị trí khác, ví dụ từ Internet Metadata loại bỏ lỗi tràn bộ đệm khi không thể kiểm tra metadata token
3.2.3 Kiến trúc bảo mật NET
.NET Framework kết hợp với CLR và runtime cung cấp nhiều lớp và dịch vụ hữu ích cho phép các nhà phát triển dễ dàng viết code bảo mật và an toàn [2] Các lớp và dịch vụ này cũng cho phép quản trị viên hệ thống để tùy chỉnh quyền truy cập mà code
có thể truy cập tài nguyên được bảo vệ Ngoài ra, runtime và NET Framework cung
Trang 37cấp các lớp và dịch vụ hữu ích tạo điều kiện thuận lợi cho việc sử dụng mật mã và bảo mật dựa trên vai trò
.NET Framework cung cấp bảo mật truy cập code và bảo mật dựa trên vai trò để giải quyết các mối lo ngại về bảo mật về code di động và để cung cấp hỗ trợ cho phép các thành phần để xác định những gì người dùng có quyền thực hiện Cả bảo mật truy cập code và bảo mật dựa trên vai trò đều được triển khai bằng cách sử một cơ sở hạ tầng chung được cung cấp bởi CLR
3.2.3.1 Bảo mật ứng dụng Web NET
Bảo mật ứng dụng Web NET bao gồm bảo mật tầng web server, application server và database server Hình 3.3 mô tả kiến trúc bảo mật ứng dụng web NET [2]
Hình 3.3: Bảo mật ứng dụng web NET
3.2.3.1 Bảo mật trong web server IIS (Internet Information Services)
IIS là một máy chủ web Windows có sẵn trên hầu hết các các phiên bản hệ điều hành Microsoft Windows và nó chiếm vị trí thứ hai về mức độ sử dụng chung sau Apache HTTP server trên internet Nó sẽ lưu trữ các trang web, ứng dụng web và dịch
vụ cần thiết bởi người dùng hoặc các nhà phát triển IIS hỗ trợ các cơ chế xác thực quyền truy cập sau:
Ẩn danh (Anonymous): Anonymous không yêu cầu bất kỳ xác thực nào từ
phía client, cơ chế này được kích hoạt mặc định trong hệ thống Một khi đã
Trang 38kích hoạt xác thực Anonymous thì IIS sẽ không sử dụng bất cứ cơ chế xác thực nào khác trừ cơ chế phân quyền NTFS
Ưu điểm:
Đơn giản, hiệu năng cao do không phải thực hiện các thao tác xác thực người dùng
Không cần phải quản lý thông tin cá nhân của người dùng
Nếu IIS không kiểm soát mật khẩu, có thể truy cập tài nguyên mạng Nhược điểm: Không xác thực được thông tin của người dùng hệ thống
Basic: Kỹ thuật xác thực này là một phần của đặc tả giao thức HTTP 1.0, sử
dụng tài khoản người dùng Windows làm tài khoản xác thực Khi sử dụng xác thực Basic, trình duyệt sẽ yêu cầu người dùng cung cấp tên đăng nhập (username) và mật khẩu (password) Thông tin người dùng nhập sẽ được mã hóa ở Base64 và được truyền qua giao thức HTTP Khi sử dụng kỹ thuật xác thực này thì nên kết hợp với SSL, TLS để hỗ trợ mã hóa các phiên làm việc HTTP
Ưu điểm:
Do nó là một phần của HTTP 1.0, nên nó là cơ chế xác thực được hỗ trợ rộng rãi nhất
Có thể xác thực thông qua một máy chủ proxy
Có thể sử dụng để theo dõi, lưu vết người dùng
Nhược điểm:
Không an toàn, trừ khi kết hợp với SSL, TLS
Đòi hỏi phải tạo tài khoản Window cho mỗi người dùng
Degest Cơ chế này thực hiện gửi một tóm tắt của mật khẩu thay vì gửi mật
khẩu qua mạng Một tóm tắt là một đoạn mã có kích thước cố định, được tạo
ra bằng cách áp dụng hàm băm hoặc thuật toán tạo tóm tắt của mật khẩu Client và Server sử dụng cùng 1 thuật toán để xác thực bản tóm tắt mật khẩu
mà client gửi lên server
Hình 3.4: Cơ chế degest gửi password
Trang 39Ưu điểm:
Gửi một tóm tắt của mật khẩu thay vì gửi mật khẩu qua mạng
Làm việc được với proxy server và firewall
Không yêu cầu phải sử dụng SSL/TLS để bảo vệ mật khẩu
Nhược điểm:
Chỉ được hỗ trợ bởi Internet Explorer 5.0 trở lên
Phải lưu trữ mật khẩu ở dạng rõ ràng
Integrated Windows Authentication
Sử dụng xác thực bằng NTLM (NT Local Area Network Manager) hoặc Kerberos V5
Chỉ hoạt động trên Internet Explorer 2.0 trở lên
Là cơ chế xác thực tốt nhất trên môi trường Intranet
Cũng giống như Digest, cơ chế xác thực này không truyền mật khẩu của người dùng qua mạng, thay vào đó là truyền bản hashed của mật khẩu
Client Certificate Mapping
Sử dụng giấy chứng thực (certificate) để xác thực người dùng Giấy chứng thực là một tài liệu chữ ký số có chứa thông tin về một thực thể và khóa công khai liên quan đến thực thể đó
Giấy chứng thực chứa các loại thông tin khác nhau như: tên, số seri của giấy chứng thực, thuật toán được sử dụng để ký số…
Để xác thực Client, Server cung cấp một danh sách các giấy chứng nhận mong đợi Máy client sẽ gửi một bản sao của giấy chứng thực tới server
để xác thực Server sẽ dựa trên danh sách giấy chứng thực nó có để xác thực
Windows NT File System (NTFS) permissions
Cài đặt thông qua cơ chế role base access control
Có thể sử dụng phân quyền NTFS để định nghĩa các cấp độ truy cập tới người dùng, nhóm người dùng cụ thể
Có 5 quyền: Read, Write, Read & execute, Modify, Full control
Internet Protocol address restriction
Thực hiện lọc theo địa chỉ IP để cho phép hoặc không cho phép truy cập tài nguyên từ những địa chỉ IP xác định nào đó
Có thể cấu hình Webiste hoặc File transfer protocol (FTP)
Dùng cách này cho phép ngăn chặn các máy tính vô danh truy cập vào tài nguyên hệ thống