1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Ứ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

78 46 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 78
Dung lượng 1,95 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 3

LỜ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 4

LỜ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 5

MỤ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 6

2.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 7

4.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 8

DANH 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 9

DANH 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 10

Hì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 11

DANH 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 12

Chươ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 14

dự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 15

Chươ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 16

2.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 17

Cầ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 19

hệ 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 20

Hậ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 21

mạ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 22

lậ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 23

2.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 24

2.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 25

Chươ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 27

3.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 28

thà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 29

nguyê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 30

thiế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 31

3.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 33

tin 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 35

3.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 36

chỉ 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 37

cấ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 38

kí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

Ngày đăng: 14/10/2019, 23:49

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Cổng thông tin điện tử chính phủ, Nội dung Thông tư 18/2018/TT-NHNN, http://congbao.chinhphu.vn/noi-dung-van-ban-so-18-2018-tt-nhnn-27195Tiếng Anh Sách, tạp chí
Tiêu đề: Nội dung Thông tư 18/2018/TT-NHNN
[2] Asoke K.Talukder, Manish Chaitanya (2009), Architecting Secuce Software System, CRC, New York Sách, tạp chí
Tiêu đề: Architecting Secuce Software System
Tác giả: Asoke K.Talukder, Manish Chaitanya
Năm: 2009
[3] Matt Bishop (2004), Introduction to Computer Security, Addison-Wesley, New York Sách, tạp chí
Tiêu đề: Introduction to Computer Security
Tác giả: Matt Bishop
Năm: 2004
[4] Somesh Mohanty, 5 Important Software Vulnerabilities, https://dzone.com/articles/5-important-software-vulnerability-and-attacks-tha [5] .Net Guide, https://docs.microsoft.com/en-us/dotnet/standard/ Sách, tạp chí
Tiêu đề: 5 Important Software Vulnerabilities
[6] .Net framework Guide, https://docs.microsoft.com/en-us/dotnet/framework/ Link
[10] Wikipedia - the Free Encyclopedia, http://www.wikipedia.org Link

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w