Ứng dỤng kỸ thuẬt bẢo mẬt trong microsoft .net vÀo...
TRANSCRIPT
ĐẠ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
ĐẠ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
1
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
2
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
3
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
4
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
5
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
6
DANH SÁCH KÝ HIỆU, CHỮ VIẾT TẮT
Ký hiệu Thuật ngữ Ý nghĩa
CNTT Công nghệ thông tin
Code Mã (trong phần mềm)
Client Máy trạm
CN/PGD Chi nhánh/Phòng giao dịch
DDoS Distributed Denial of Service Tấn công từ chối dịch vụ
DoS Denial of Service Từ chối dịch vụ
GPBank Ngân hàng TM TNHH MTV
Dầu Khí Toàn Cầu
Hacker Tin tặc
HĐH Hệ điều hành
HTTP Hypertext Transfer Protocol Giao thức truyền siêu văn bản
HTTPS Hypertext Transfer Protocol
Secure
Bảo mật giao thức truyền siêu
văn bản
NTFS Window NT File System Hệ thống file Window
Server Máy chủ
SSL Secure Socket Layer Bảo mật lớp cổng
TSC Trụ sở chính
TSL Transport Layer Securrity Bảo mật lớp vận chuyển
TT 18/2018 Thông tư số 18/2018/TT-
NHNN ngày 21/08/2018 Quy
định về an toàn hệ thống
thông tin trong hoạt động
Ngân hàng
7
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
8
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
9
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
10
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
và bảo mật hệ thống ứng dụng như:
Giám sát và ghi nhật ký hoạt động của hệ thống.
Quản lý truy cập
Quy định đặt mật khẩu
Quy định về đảm bảo an toàn, bảo mật cho hệ thống ứng dụng
11
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
12
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.
13
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ụ.
14
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.
15
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.
16
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
17
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.
2.4. Các kiểu tấn công
Có rất nhiều kiểu tấn công bảo mật khác nhau, dưới đây là một số loại tấn công
bảo mật điển hình. [2, 10]
2.4.1. Tấn công Brute-Force
Tấn công Brute-Force là gì?
Tấn công Brute-Force (Brute-Force attack) là một phương pháp thực hiện thử
mật khẩu đúng sai. Hacker sẽ sử dụng phần mềm để tự động thử đăng nhập username
và password phổ biến nhằm đăng nhập trái phép vào các tài khoản. Với các hệ thống
phức tạp hơn, việc dò tìm mật khẩu sẽ là lần lượt để nâng cao khả năng thành công,
nhưng đồng nghĩa với việc này là mất nhiều thời gian dò mật khẩu lên không giới hạn.
18
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
cá nhân.
Đặt thêm captra cho ô đăng nhập
Hạn chế số lần đăng nhập sai.
2.4.2. Tấn công xác thực
Xác thực là cấp độ bảo mật đầu tiên trong phần lớn các hệ thống. Đây là phương
pháp tấn công sử dụng kỹ thuật xác nhận và phản hồi để xác thực. Đây là cách hệ
thống xác thực người dùng là hợp pháp. Sau khi xác thực thành công, người dùng sẽ
được phép truy cập vào tài nguyên của hệ thống.
2.4.2.1. Tấn công từ điển
Tấn công từ điển là gì?
Tấn công từ điển (Dictionary attack) là kỹ thuật phá mã hoặc vượt qua một cơ
chế xác thực bằng cách thử các khóa mã hay mật khẩu trong một danh sách dài gọi là
từ điển (danh sách được chuẩn bị trước). Đối với tấn công từ điển, không gian khóa
được tìm kiếm một cách hệ thống, thử trong vùng có nhiều khả năng thành công nhất.
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ữ).
Cách khắc phục
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
cá nhân.
Hạn chế số lần đăng nhập sai.
2.4.2.2. Tấn công phát lại
Tấn công phát lại là gì?
Tấn công phát lại (Replay attack) là một hình thức tấn công mạng lưới trong đó
các thực thể độc hại chặn và lặp lại việc truyền tải một dữ liệu hợp lệ đi vào trong
19
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ệ.
Cách khắc phục
Bổ sung thêm mốc thời gian vào chuyển tiếp dữ liệu để phòng chống các
hình thức tấn công phát lại đơn giản.
Các máy chủ cũng có thể lưu trữ cache các đoạn tin nhắn lặp lại và xóa đi sau
một số lần lặp nhất định.
2.4.2.3. Đoán mật khẩu
Tấn công đoán mật khẩu (Password guessing attack) là một phương pháp mà kẻ
tấn công cố gắng đoán tên đăng nhập và mật khẩu tương ứng. Biết tên đăng nhập
tương đối dễ dàng. Nếu một kẻ tấn công có thể có được danh tính hoặc tên cá nhân của
bạn, họ có thể đoán được tên đăng nhập của bạn vì tên đăng nhập thường là tên của
người dùng hoặc một số từ khóa bắt nguồn từ tên của người dùng. Tin tặc sử dụng các
máy tính và các danh sách từ lớn để thử một số lượng lớn các mật khẩu có khả năng
truy cập vào hệ thống.
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
20
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,…
2.5. Lập trình bảo mật
Lập trình bảo mật là sự kết hợp giữa lập trình bảo mật và lập trình an toàn bao
gồm: các thuộc tính bảo mật, lập trình an toàn và khắc phục lỗ hổng [2].
2.5.1. Các thuộc tính bảo mật
Có nhiều thuộc tính bảo mật rất cần thiết trong lập trình bảo mật. Các thuộc tính
này là sự tin cậy, toàn vẹn, sẵn sàng, xác thực, chứng thực và ẩn danh.
21
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ò.
22
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.
23
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.
24
Để 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]:
3.1.2.1. Tính bí mật (Confidentialy)
Tính bí mật của thông tin là tính giới hạn về đối tượng được quyền truy xuất đến
thông tin, bảo vệ dữ liệu không bị lộ ra ngoài một cách trái phép. Đối tượng truy xuất
có thể là con người, là máy tính hoặc phần mềm, kể cả phần mềm phá hoại như virus,
worm, spyware, … Ví dụ, trong hệ thống ngân hàng, một khách hàng được phép xem
thông tin số dư tài khoản của mình nhưng không được phép xem thông tin của khách
hàng khác.
Để đả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.
25
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
26
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
27
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
28
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.
29
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.
30
Độ đặ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
31
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:
32
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.
33
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.
Hỗ trợ xử lý ngoại lệ có cấu trúc.
Hỗ trợ cho các thuộc tính tùy chỉnh.
Thu gom rác.
Sử dụng các đại diện thay cho các con trỏ hàm để tăng độ an toàn và bảo
mật.
CLR giúp dễ dàng thiết kế các thành phần và ứng dụng có đối tượng tương tác
qua các ngôn ngữ. Các đối tượng được viết bằng các ngôn ngữ khác nhau có thể giao
tiếp với nhau một cách dễ dàng và hành vi của chúng có thể được tích hợp chặt chẽ. Ví
dụ: bạn có thể định nghĩa một lớp trong C# và sau đó sử dụng ngôn ngữ Visual Basic
để 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
34
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
35
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 đã
36
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.
37
Ư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.
38
3.2.3.2. Bảo mật trong ASP.NET
a) Tệp tin Web.config
Web.config là tệp tin lưu giữ cấu hình và điều khiển tất cả các vấn đề bảo mật
trong website với định dạng XML. Mỗi website có duy nhất một file web.config được
lưu trữ tại thư mục gốc. Tuy nhiên có thể thêm các file khác trong thư mục con. Để
thực hiện thay đổi cấu hình, có thể sử dụng bất kỳ trình soạn thảo nào.
Hình 3.5: Ví dụ cài đặt file web.config.
b) Cơ chế xác thực quyền truy cập (Authentication)
Xác thực người dùng trả lời cho câu hỏi: Bạn là ai (Who are you?). ASP.NET hỗ
trợ các cơ chế xác thực bao gồm [2]: Window Base, Form Base, Passport, None.
Windows. Đây là cơ chế xác thực mặc định trong đó nhà cung cấp dựa trên
IIS thực hiện xác thực client. Sau khi IIS thực hiện xác thực một client, nó
gửi đi một thẻ bài bảo mật cho ASP.NET.
Ưu điểm:
Phù hợp cho hệ thống web cục bộ (intranet).
Không cần thông báo xác thực.
Do sử dụng tài khoản window nên không cần viết bất cứ đoạn mã xác
thực nào.
Nhược điểm: Có thể phát sinh yêu cầu quản lý các tài khoản của window.
Forms. Đây là cơ chế xác thực dựa trên cookie. Là cơ chế thu thập thông tin
xác thực từ máy client thông qua form HTML. Client gửi thông tin xác thực
tới ứng dụng ASP.NET để thực hiện xác thực. Sau khi xác thực thành công,
ứng dụng ASP.NET sẽ tạo ra 1 cookie để client sử dụng trong các lần request
tiếp theo. Các thông tin dùng để xác thực có thể được lưu trữ trong file cấu
hình hoặc trong Database server.
Ưu điểm:
Có thể sử dụng để xác nhận hoặc cá nhân.
Không yêu cầu tài khoản phải tương ứng với tài khoản window.
Nhược điểm:
39
Là đối tượng bị tấn công khi còn trong vòng đời của cookie, trừ khi sử
dụng SSL/TLS.
Chỉ dùng được cho các tài nguyên là các file .asax, .ascx, .aspx, .asmx,
và .config. Không thực hiện bất cứ xử lý nào từ các file .htm, .jpg hoặc
.gif.
Ví dụ về cài đặt:
Hình 3.6: Ví dụ về cài đặt xác thực Forms.
Passport. Microsoft Passport sử dụng kỹ thuật single sign on (SSO). Khi các
thành viên sử dụng site đăng ký với Passport thì dịch vụ Passport sẽ cung cấp
1 khóa để thực hiện mã hóa, giải mã thông tin truy vấn được truyền giữa
thành viên của site và server xác thực Passport. Để sử dụng, cần cài đặt
Passport SDK của Microsoft. Bản quyền miễn phí cho các nhà phát triển, có
phí đối với các doanh nghiệp.
None. Trong cơ chế xác thực này, sử dụng quyền truy cập Anonymous đến
web server. Cơ chế này quản lý bảo mật thông qua ISAPI và sử dụng tài
khoản IUSER_machinename của Windows. Bạn có thể sử dụng cái này nếu
bạn có kế hoạch phát triển mã xác thực tùy chỉnh của riêng bạn.
c) Cơ chế chứng thực quyền sử dụng (Authorization)
Chứng thực quyền sử dụng trả lời cho câu hỏi: Bạn có thể làm gì? (What you can
do?). Cơ chế chứng thực thực hiện xác thực quyền truy cập thư mục, tệp tin của
người dùng. Cơ chế hỗ trợ của ASP.NET bao gồm:
Membership
Role-based Security
Verb-based: GET, POST, HEAD (dựa vào giao thức HTTP)
Anonymous Users (? Users)
Authenticated Users (* Users)
40
Hình 3.7: Ví dụ về cài đặt chứng thực.
ASP.NET cung cấp 2 cách để cho phép truy cập vào một tài nguyên nhất định:
File authorization. Được thực hiện bởi module FileAuthorizationModule. Nó
kiểm tra danh sách quyền truy cập (access control list - ACL) của file .aspx
hoặc .asmx để xác định xem 1 người dùng có quyền truy cập vào file không.
Quyền ACL được xác minh cho định danh của người dùng Windows (nếu
Windows xác thực được bật) hoặc cho định danh Windows của quy trình
ASP.NET.
URL authorization. Được thực hiện bởi module UrlAuthorizationModule,
ánh xạ người dùng và vai trò đối với Uniform Resource Locators (URLs)
trong các ứng dụng ASP.NET. Mô-đun này có thể được sử dụng để cho phép
có chọn lọc hoặc từ chối truy cập vào các phần tùy ý của ứng dụng (thường
là thư mục) cho người dùng hoặc vai trò cụ thể.
.NET Roles: Chứng thực và bảo mật dựa trên vai trò trong ASP.NET cũng có
thể được thực hiện thông qua .NET roles.
d) Bảo mật cho trang web
Để thực hiện bảo mật cho trang web, thêm thẻ <location> vào file Web.config
<configuration>
<location path=“somepage.aspx”>
<system.web>
<authorization>
…
</authorization >
</system.web>
</location>
</configuration>
41
e) Bảo mật cho thư mục web
Để bảo mật cho thư mục web, tạo thêm một file Web.config mới cho thư mục
cần bảo mật. Nội dung file chỉ cần chứa các thông tin sau:
<configuration>
<system.web>
<authorization>
…
</authorization >
</system.web>
</configuration>
f) Các cơ chế xác thực và chứng thực dịch vụ
Hình 3.8: Các dịch vụ bảo mật ASP.NET.
Hình 3.8 mô tả các cơ chế xác thực và chứng thực được cung cấp bởi IIS và
ASP.NET khi một client gửi yêu cầu dịch vụ Web [2]:
1. Yêu cầu Web HTTP hoặc HTTPS nhận được từ mạng. Nên sử dụng SSL vì
SSL xác thực danh tính máy chủ bằng chứng chỉ máy chủ và định danh
client. SSL cũng cung cấp một kênh an toàn để bảo vệ dữ liệu giữa client và
server với tính bảo mật và toàn vẹn.
2. IIS xác thực người dùng bằng cách sử dụng xác thực Basic, Digest,
Integrated (NTLM or Kerberos) hoặc Certificate.
42
Nếu IIS được cấu hình để xác thực ẩn danh, IIS sẽ tạo một token truy cập
cho tài khoản người dùng ẩn danh, mặc định là IUSR_MACHINE.
Nếu IIS được cấu hình để xác thực, sau khi xác thực thành công, IIS tạo
ra một token truy cập Windows cho mỗi người dùng được xác thực.
3. Tại thời điểm này, IIS cho phép người gọi truy cập tài nguyên được yêu cầu.
Quyền NTFS được xác định thông qua Access Control List (ACL) được liên
kết với tài nguyên đã được yêu cầu và sử dụng để cấp quyền truy cập. IIS
cũng được cấu hình để chỉ chấp nhận các yêu cầu từ các client này với các
địa chỉ IP riêng.
4. IIS chuyển xác thực token truy cập Windows của người gọi như được tạo ở
bước 2 cho ASP.NET.
5. Ở thời điểm này, các điều khiển chuyển từ IIS sang ASP.NET và ASP.NET
xác thực người gọi.
Nếu ASP.NET được cấu hình để xác thực Windows, không có xác thực
bổ sung nào được thực hiện tại thời điểm này. Để xác thực Windows,
ASP.NET sẽ chấp nhận mọi token mà nó nhận được từ IIS.
Nếu ASP.NET được cấu hình để xác thực Forms, thông tin đăng nhập do
người gọi cung cấp sẽ được xác thực dựa trên dữ liệu lưu trữ. Dữ liệu lưu
trữ có thể là dịch vụ thư mục Active Directory, Giao thức truy cập thư
mục (Lightweight Directory Access Protocol - LDAP) hoặc thậm chí cơ
sở dữ liệu chẳng hạn như SQL Server hoặc Oracle.
Nếu ASP.NET được cấu hình để xác thực Passport, người dùng sẽ được
chuyển hướng đến trang web Passport cho dịch vụ xác thực Passport để
xác thực người dùng.
6. Tại thời điểm này, ASP.NET cho phép truy cập vào tài nguyên hoặc hệ điều
hành theo yêu cầu của người gọi. Với xác thực Windows,
FileAuthorizationModule (một hệ thống được cung cấp bởi module HTTP)
kiểm tra xem người gọi có quyền cần thiết để truy cập tài nguyên được yêu
cầu hay không. Token truy cập của người gọi được khớp với ACL được liên
kết với tài nguyên. UrlAuthorizationModule (một hệ thống khác được cung
cấp bởi module HTTP) sử dụng các quy tắc ủy quyền được định cấu hình
trong Web.config. Có thể sử dụng .NET princial, quyền, role-base security
kết hợp với khai báo và lập trình bảo mật để kiến trúc một hệ thống xác nhận
quyền rất tinh vi để cho phép hoặc cấm truy cập vào tài nguyên được yêu cầu
hoặc thực hiện thao tác được yêu cầu.
7. Nếu cần thiết, mã trong ứng dụng của bạn truy cập tài nguyên cục bộ hoặc từ
xa bằng cách sử dụng một định danh cụ thể.
43
3.2.3.3. Web Service
Web service đóng gói các chức năng nghiệp vụ có thể từ một câu trả lời yêu cầu
đơn giản đến các tương tác quy trình nghiệp vụ đầy đủ bao quang ứng dụng [2]. Công
nghệ web service là tương tác và trung lập với nhà cung cấp hoặc trung lập nền tảng.
Web service là khép kín, các module ứng dụng và các dịch vụ có thể được mô tả, xuất
bản, phát hiện, định vị và gọi qua mạng đặc biệt là Internet.
Bảo mật web service là cơ chế bảo mật cho các dịch vụ web sử dụng cơ chế xác
thực thẻ bài (token security). Một dịch token security có thể là Kerberos, PKI (Public
Key Infrastructure), hoặc một dịch vụ xác thực username/ password. Thẻ bài sẽ được
gắn vào thông điệp SOAP khi được gửi từ client đến web service. Thẻ bài có thể được
dùng cho một hoặc nhiều gói tin SOAP.
Xác thực (Authentication):
Xác thực thông qua token, tên của token trong trường hợp này là
UsernameToken.
Hình 3.9: Cấu hình xác thực Token.
Xác thực PKI thông qua X.509 Certificates. Tên của Token trong trường hợp
này là BinarySecurityToken.
Hình 3.10: Cấu hình xác thực PKI X.509 Certificate.
Chữ ký (Signatures)
Định danh người dùng theo X.509, UsernameToken hoặc Kerberos được
dùng để ký trên thông điệp.
Các thông điệp là không thể giả mạo vì đã được ký vì web service có thể xác
thực được nguồn gốc nhờ thông tin về chữ ký của các client.
44
3.2.3.4. Structured Query Language Server
SQL Server
SQL Server cung cấp một một kiến trúc bảo mật cho phép các nhà quản trị và
nhà phát triển CSDL tạo các ứng dụng CSDL an toàn và chống lại các mối đe dọa.
Kiến trúc bảo mật SQL Server được mô tả ở hình 3.11
Hình 3.11: Kiến trúc bảo mật SQL Server.
Các ứng dụng client sử dụng kết nối bảo mật với CSDL.
Định danh truy cập CSDL hỗ trợ SSL hoặc IPSec.
Xác thực đăng nhập bằng user Window và user SQL.
Phân quyền truy cập đến CSDL, đến các bảng, thủ tục, hàm trong CSDL.
3.2.3.5. ActiveX Data Object
Microsoft ActiveX Data Objects (ADO) cho phép ứng dụng client của bạn truy
cập và thao tác dữ liệu từ nhiều datasource khác nhau. ADO.NET là một phần được
tích hợp trong .NET framework cung cấp khả năng truy cập đến các cơ sở dữ liệu quan
hệ như SQL Server, XML và dữ liệu ứng dụng.
ADO gồm một số chức năng như Object Linking and Embedding Database (OLE
DB) Provider, Open Database Connectivity (ODBC) Drivers được sử dụng để theo dõi
dữ liệu và xây dựng các ứng dựng Web-base và ứng dụng client/server. Remote data
service (RDS) cho phép bạn chuyển dữ liệu từ server qua ứng dụng client hoặc web
page. ActiveX Data Objects Extensions (ADOX) là một thư viện đi kèm cho phép tạo
mới, sửa, xóa các đối tượng như bảng hay thủ tục. Nó cũng bao gồm các đối tượng bảo
mật để duy trì người dùng và các nhóm (user and group), gán và bỏ quyền trên đối
tượng.
ActiveX Data Objects Multidimensional (ADO MD) mở rộng thêm tính năng của
ADO bao gồm các đối tượng dữ liệu đa chiều như CubeDef and Cellset objects. Thư
viện ADODB - ADODB Library bao gồm các đối tượng phía server được thêm vào
45
(Kết nối, câu lệnh, lỗi, biến) được sử dụng trong các thành phần phía server để giao
tiếp với cơ sở dữ liệu. ADOR (ADO Recordset) Library là một dạng thu nhỏ sử dụng
trên phía client, cho phép thao tác trên các bản ghi tồn tại ở phía client. ADOR không
bao gồm (Kết nối, câu lệnh, lỗi, biến).
3.2.4. Thư viện bảo mật trong .NET
.NET Framework cung cấp triển khai nhiều thuật toán mã hóa tiêu chuẩn, nó
được chia thành hai nhóm chính [2, 7]:
3.2.4.1. Mã hóa
Trong mật mã học, mã hóa là quá trình mã hóa thông điệp hoặc thông tin sang
dạng hiển thị khác sử dụng thuật toán + khóa, do vậy chỉ các bên được ủy quyền mới
có thể giải mã và những người không được ủy quyền thì không thể giải mã. Các dạng
mã hóa bao gồm: hàm băm, mã hóa khóa đối xứng, mã hóa khóa khóa công khai.
a) Hàm băm (Hash)
Sử dụng thuật toán Hash để đưa ra một chuỗi cố định từ một thông điệp có độ dài
bất kỳ. Khi sử dụng thuật toán này, xung đột giá trị băm rất hiếm khi xảy ra, chuỗi mã
hóa không thể giải mã thành chuỗi ban đầu do không sử dụng khóa.
Các thuật toán mã hóa bao gồm: MD5, SHA-1, SHA256, SHA512,… Các thư
viện trong .NET hỗ trợ các thuật toán trên:
MD5CryptoServiceProvider
SHA1CryptoServiceProvider
SHA356CryptoServiceProvider
SHA512CryptoServiceProvider
b) Mã hóa khóa đối xứng
Trong mã khóa đối xứng, sử dụng 1 khóa dùng chung để mã hóa và giải mã.
Trong loại mã hóa này, khóa được giữ bí mật và chỉ được biết đến với các bên mã hóa
(người gửi) và giải mã (người nhận).
Hình 3.12: Mã hóa và giải mã với 1 khóa.
46
Trong mật mã khóa đối xứng có 5 thành phần (Hình 3.12), đó là
Plainttext: Bản rõ
Ciphertext: Bản mã
Encryption algorithm: Thuật toán mã hóa
Decription algorithm: Thuật toán giải mã
KEY: Khóa bí mật
Các thuật toán mã hóa bao gồm: 3DES, Rijndael (AES), blowfish,… Các thư
viện trong .NET hỗ trợ các thuật toán trên:
AesCryptoServiceProvider
AesManaged
DESCryptoServiceProvider
RC2CryptoServiceProvider
RijndaelManaged
TripleDESCryptoServiceProvider
Các lưu ý khi thực hiện tạo khóa mật mã hóa khóa đối xứng an toàn:
Khóa tốt nhất là một số nguyên tố ngẫu nhiên.
Sử dụng thuật toán hàm băm (MD5, SHA) để tạo khóa.
Sử dụng khóa băm HMAC để sinh khóa.
b) Mã hóa khóa công khai (Mã hóa bất đối xứng)
Trong mã khóa công khai, sử dụng hai khóa để cùng tạo nên một cặp chìa khóa
(public key và private key). Một trong những khóa này từ cặp được sử dụng để mã hóa
và khóa còn lại để giải mã. Một trong những khóa này được giữ bí mật và khóa còn lại
được công khai cho mọi người sử dụng, đây là lý do tại sao nó được đặt tên là mật mã
khóa công khai. Vì có hai khóa khác nhau được sử dụng, đây còn được gọi là mật mã
khóa bất đối xứng.
Hình 3.13a: Mã hóa với Public key và giải mã với Private key.
47
Hình 3.13b: Mã hóa với Private key và giải mã với Public key.
Trong mật mã khóa công khai có 6 thành phần (Hình 2.5a và 2.5b), đó là:
Plaintext: Bản rõ
Ciphertext: Bản mã
Encryption algorithm: Thuật toán mã hóa
Decryption algorithm: Thuật toán giải mã
Public key: khóa công khai, khóa này có thể dùng để mã hóa và giải mã
Private key: khóa bí mật, khóa này có thể dùng để mã hóa và giải mã
Các thuật toán mã hóa bao gồm: RSA, DSA. Các thư viện trong .NET hỗ trợ các
thuật toán trên:
DSACryptoServiceProvider
RSACryptoServiceProvider
ECDiffieHellmanCng
ECDsaCng
Các giải thuật tiêu biểu của mật mã hóa khóa công khai:
Thuật toán mã hóa RSA
Các kỹ thuật mã hóa đường cong Elliptic
Lưu ý khi thực hiện tạo khóa mật mã khóa công khai an toàn, sử dụng số nguyên tố
ngẫu nhiên đủ lớn để tạo ra cặp khóa công khai và bí mật.
3.2.3.5. Chữ ký số
Chữ ký số là thông tin đi kèm theo dữ liệu (văn bản, hình ảnh, video…) nhằm
mục đích xác định người chủ của dữ liệu đó. Chữ ký số mang một số ích lợi:
Khả năng xác định nguồn gốc của dữ liệu.
Tính toàn vẹn dữ liệu.
Tính không thể phủ nhận của dữ liệu.
3.3. Một số kiểu tấn công ứng dụng Web
Các lỗi bảo mật ứng dụng web là nguyên nhân chủ yếu gây ra các lỗi đối với
website đang vận hành. Sau khi xác định các lỗi này, tin tặc sẽ sử dụng các kỹ thuật
48
khác nhau để tiến hành khai thác hệ thống đích. Một số kỹ thuật thường được sử dụng:
Buffer Overflows, SQL Injection, và Cross-site Scripting…Việc phân loại các kiểu tấn
công thành các nhóm khác nhau sẽ giúp cho người quản trị dễ dàng xác định các nguy
cơ cũng như biên pháp đối phó hơn.
3.3.1. SQL Injection
Tấn công SQL Injection được thực thi bằng cách chèn các câu truy vấn SQL vào
dữ liệu tương tác giữa máy khách và trình ứng dụng. Quá trình khai thác lỗi SQL
Injection thành công có thể giúp tin tặc lấy được các dữ liệu nhạy cảm trong cở sở dữ
liệu, thay đổi cơ sở dữ liệu (Insert/Update/Delete), thực thi các hành động với quyền
của người quản trị và cao hơn có thể điều khiển được hệ điều hành máy chủ.
Đặc điểm của tấn công SQL Injection
Tấn công SQL Injection dựa vào cách thức hoạt động của trang web.
Sử dụng nguồn dữ liệu nhập vào: Textbox, QueryString.
Sử dụng kỹ thuật chèn các “mã độc SQL” vào lệnh SQL: chức năng tìm
kiếm, phân trang, xác thực người dùng. Ví dụ: string sql = "select * from Users
where user=' ' or 1=1 --' and pwd=''";
Chiếm quyền kiểm soát hệ thống, có thể thực hiện các lệnh hệ thống như:
;xp_cmdshell 'format c: /q /yes'; drop database myDB; --. Ví dụ: select * from
tabelle where id=1; xp_cmdshell 'format c: /q /yes '; drop database myDB; --
Biện pháp đối phó:
Không sử dụng quyền “sa”.
Chuỗi kết nối (connection string) lưu có mã hóa.
Sử dụng Store Procedure để thực hiện truy vấn dữ liệu.
Sử dụng tham số (đối tượng Parameter) trong lệnh SQL.
string sql = "select * from Users where user = @user and pwd = @pwd";
SqlCommand cmd = new SqlCommand(sql,con);
cmd.Parameters.Add("@user",User.Text);
cmd.Parameters.Add("@pwd",Password.Text);
3.3.2. Cross-site scripting (XSS)
Cross-site scripting là một trong những kĩ thuật tấn công phổ biến nhất hiện nay,
đồng thời nó cũng là một trong những vấn đề bảo mật quan trọng đối với các nhà phát
triển web và cả những người sử dụng web. Bất kì một website nào cho phép người sử
dụng đăng thông tin mà không có sự kiểm tra chặt chẽ các đoạn mã nguy hiểm thì đều
có thể tiềm ẩn các lỗi XSS.
Tin tặc tấn công bằng cách chèn vào các website động (ASP, PHP, CGI, JSP …)
những thẻ HTML hay những đoạn mã script nguy hiểm có thể gây nguy hại cho những
49
người sử dụng khác. Trong đó, những đoạn mã nguy hiểm đựơc chèn vào hầu hết được
viết bằng các Client-Site Script như JavaScript, JScript, DHTML và cũng có thể là cả
các thẻ HTML
Giải pháp:
Chỉ cho phép những dữ liệu hợp lệ, từ chối nhận các dữ liệu sai, thường
xuyên kiểm tra và lọc dữ liệu đầu vào.
Sử dụng Validation controls, Regexp.
Sử dụng Server.HtmlEncode/ Server.HtmlDecode.
3.3.3. HTTP Harvesting
Tấn công HTTP Harvesting cũng là một kỹ thuật tấn công ứng dụng web, tin tặc
tấn công bằng cách lợi dụng:
Trang web điều khiển cơ sở dữ liệu
Hiển thị kết kết quả dựa vào: Textbox, QueryString, Cookie.
Sử dụng các lệnh SQL.
Sử dụng tham số phân trang: Detail.aspx?id=1
Địa chỉ email để gửi thư rác.
Giải pháp:
Mã hóa QueryString.
Kết hợp dữ liệu đầu vào người dùng với Textbox
Sử dụng System.Drawing.
Theo dõi quá trình khai thác web của người dùng.
Đánh giá của bên thứ ba.
3.4. Kết luận
Như vậy ở chương này luận văn đã cung cấp một cái nhìn tổng quan về kiến trúc
bảo mật hệ thống thông qua vòng đời phát triển bảo mật, kỹ thuật về phân tích yêu cầu
bảo mật, thiết kế bảo mật, đánh giá bảo mật cũng như kiểm thử bảo mật. Luận văn
cũng cung cấp một cái nhìn tổng quan về .NET Framwork, kỹ thuật bảo mật từ web
server IIS, ứng dụng web ASP.NET, công cụ hỗ trợ kết nối tới CSDL ADO.NET, cơ
sở dữ liệu SQL Server. Ngoài ra còn cung cấp các thư viện mã hóa trong .NET và một
số kiểu tấn công ứng dụng web.
50
Chương 4: MỘT MÔ HÌNH ỨNG DỤNG KỸ THUẬT BẢO MẬT TRONG
MICROSOFT .NET TẠI GPBANK
Trên cơ sở lý thuyết về các kiểu tấn công trong chương 2 và chương 3, kiến trúc
bảo mật hệ thống phần mềm trong chương 3, bảo mật trong Microsoft .NET,
ASP.NET và các thư viện mã hóa trong .NET trong chương 3, trong chương này tôi
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. Hệ thống xây
dựng trong chương này cụ thể là thống TestKey Management System (TMS). Đây là
hệ thống quản lý các yêu cầu và chứng từ chuyển tiền thanh toán quốc tế từ các
PGD/CN chuyển lên phòng Thanh toán Quốc tế tại TSC ứng dụng các kỹ thuật bảo
mật trong Microsoft .NET, ứng dụng giải pháp hạn chế lỗ hổng bảo mật và tấn công
ứng dụng web.
4.1. Mô tả bài toán
4.1.1. Mục đích
Xây dựng hệ thống TMS (TestKey Management System) quản lý mã Testkey
và mã hóa một phần văn bản, có chức năng sinh và xác thực mã Testkey, mã
hóa và giải mã văn bản, đảm bảo tính đúng đắn cho các văn bản cần lưu
chuyển trong nội bộ GPBank.
Tên đăng nhập, mật khẩu đăng nhập hệ thống phải đảm bảo tuân thủ đúng
theo yêu cầu của TT18/2018 và Quy định an toàn bảo mật hệ thống CNTT
của GPBank.
Đảm bảo được tính logic của thuật toán sinh mã xác thực Testkey, thuật toán
mã hóa và giải mã văn bản.
Đảm bảo được việc quản lý truy cập hệ thống; giám sát và ghi nhật ký hoạt
động của hệ thống; yêu cầu về an toàn và bảo mật hệ thống theo quy định
của TT 18/2018.
Cho phép người dùng in ra bản cứng Testkey.
4.1.2. Phạm vi
Xây dựng hệ thống TMS quản lý mã Testkey và mã hóa thông tin chuyển
tiền, có chức năng sinh và xác thực mã Testkey, mã hóa và giải mã văn bản,
đảm bảo tính đúng đắn cho các yêu cầu và chứng từ chuyển tiền thanh toán
Quốc tế của khách hàng chuyển từ các CN/PGD lên phòng Thanh toán Quốc
tế tại TSC.
Xây dựng ứng dụ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.
Người sử dụng hệ thống là người dùng cuối tại các CN/PGD, cán bộ phòng
HTVH, cán bộ phòng TTQT tại TSC.
51
Thông tin cập nhật hệ thống là các thông tin liên quan đến yêu cầu chuyển
tiền thanh toán quốc tế của khách hàng và các file scan màu (file .PDF)
chứng từ kèm theo.
4.1.3. Yêu cầu cụ thể
4.1.3.1. Yêu cầu chức năng
a) Module thực hiện nghiệp vụ
Chức năng nhập yêu cầu bao gồm: thông tin chuyển tiền, tạo mã Testkey và
ký vào thông tin chuyển tiền.
Chức năng xác nhận yêu cầu bao gồm: kiểm tra Testkey, kiểm tra chữ ký
thông tin chuyển tiền.
b) Module Thống kê, Báo cáo
Thống kê các giao dịch theo thời gian, loại tiền, đơn vị.
c) Module quản trị Admin
Cho phép admin có quyền quản trị người dùng: thêm mới, sửa, xóa, phân
quyền.
Cho phép admin có quyền quản trị thông tin phòng/ban, quản trị khóa ký (sử
dụng để mã hóa và giải mã).
Cho phép thay đổi thông tin cấu hình hệ thống.
4.1.3.2. Yêu cầu phi chức năng
a) Hiệu suất
Đảm bảo thời gian thực hiện nghiệp vụ nhanh chóng.
Đảm bảo thời gian truy xuất, tìm kiếm thông tin chính xác.
b) Bảo mật
Thực hiện yêu cầu bảo mật cho hệ thống tuân thủ theo yêu cầu của TT18/2018 và
Quy định an toàn bảo mật hệ thống CNTT của GPBank như:
Mật khẩu người dùng phải tuân thủ các nguyên tắc sau:
o Chứa cả các ký tự viết hoa và viết thường (Ví dụ: a – z, A - Z)
o Có các con số, các ký tự đặc biệt (Ví dụ: 0 – 9,
|@#!%&*()_+=\’{}[]:”;<>?/)
o Có ít nhất 8 ký tự cả chữ và số.
Thời hạn sử dụng mật khẩu: Mật khẩu phải được thay đổi định kỳ 45
ngày/lần.
Quản lý người sử dụng hệ thống:
o Giới hạn thời gian truy cập hệ thống: từ 07h00 đến 19h00
52
o Giới hạn số lần đăng nhập sai: 3 lần
o Giới hạn phiên làm việc: 1 lần
o Mã hóa mật khẩu của người dùng lưu trữ trong Cơ sở dữ liệu
o Khóa người dùng nếu đăng nhập sai quá số lần quy định.
Mã hóa thông tin yêu cầu chuyển tiền, mã hóa file chứng từ yêu cầu.
Độ dài TestKey tối thiểu là 8 ký tự và không trùng với các TestKey đã tồn tại
trên hệ thống.
Ghi nhật ký hoạt động của hệ thống.
Mã hóa thông tin kết nối tới CSDL
Phòng chống các cuộc tấn công ứng dụng web, áp dụng giải pháp khắc phục
lỗ hổng bảo mật.
c) Môi trường
Tương thích với môi trường các máy chủ Window và các ứng dụng phát triển sử
dụng Microsoft .Net hiện tại, tránh phát sinh thêm chi phí.
4.1.4. Giải pháp
Xây dựng ứng dụng Web sử dụng ASP.NET và Bootrap, cơ sở dữ liệu MS
SQL Server.
Sử dụng các thư viện mã hóa của Microsoft .NET để thực hiện mã hóa mật
khẩu, mã hóa/giải mã file PDF, mã hóa/giải mã thông tin yêu cầu chuyển
tiền, tạo/xác thực mã Testkey.
Áp dụng một số giải pháp để hạn chế tấn công ứng dụng web.
Sử dụng cấu hình của IIS, ASP.NET để thực hiện cấu hình đáp ứng các yêu
cầu bảo mật.
4.2. Phân tích nghiệp vụ
4.2.1. Mô tả chức năng
a) Quản lý luân chuyển yêu cầu chuyển tiền
Thông tin yêu cầu chuyển tiền của khách hàng cần được người dùng tại đơn vị
yêu cầu thu thập đủ.
Thông tin cơ bản yêu cầu chuyển tiền bao gồm: Ngày yêu cầu, đơn vị yêu cầu
(phòng/ban), đơn vị nhận yêu cầu, người yêu cầu, mã khách hàng, tên khách
hàng, số tiền, loại tiền, số tham chiếu, số trang văn bản (gửi kèm), ghi chú,…
b) Quản lý khóa ký
Việc sử dụng khóa để ký được người dùng thực hiện khi tạo yêu cầu.
Việc sử dụng khóa để kiểm tra được người dùng thực hiện khi tiếp nhận yêu
cầu.
53
Khóa được tạo thành từng cặp bao gồm đơn vị gửi yêu cầu và đơn vị nhận yêu
cầu.
c) Thống kê, báo cáo
Thực hiện thống kê các giao dịch theo ngày, đơn vị, loại tiền.
d) Quản trị hệ thống
Quản lý thông tin về người dùng, thông tin về đơn vị,…
4.2.2. Quy trình luân chuyển yêu cầu chuyển tiền
4.2.2.1. Mô tả
Khi khách hàng có nhu cầu chuyển tiền thanh toán quốc tế, các PGD/CN trong
hệ thống thực hiện tiếp nhận yêu cầu của khách hàng và lập chứng từ cần thiết. Sau khi
có đầy đủ thông tin PGD/CN thực hiện gửi yêu cầu cho phòng thanh toán Quốc tế tại
TSC để thực hiện giao dịch cho khách hàng. Quy trình luân chuyển yêu cầu chuyển
tiền thực hiện trong hệ thống bao gồm 2 bước:
Bước 1: PGD/CN thực hiện tạo yêu cầu và gửi thông tin cho phòng Thanh
toán quốc tế tại TSC.
Bước 2: Thanh toán quốc tế tại TSC sau khi nhận được yêu cầu thực hiện
kiểm tra xác thực thông tin yêu cầu của PGD/CN.
4.2.2.2. Quy trình tạo yêu cầu chuyển tiền
a) Mô hình quy trình xử lý
Việc tạo yêu cầu được thực hiện tại PGD/CN khi có yêu cầu từ khách hàng.
Thông tin về yêu cầu chuyển tiền sẽ được cập nhật vào CSDL sau khi người dùng thực
hiện xong việc tạo yêu cầu.
54
Bắt đầu
Kết thúc
Nhập thông tin chuyển tiền
của khách hàng
Ký vào yêu cầu chuyển tiền
Gửi yêu cầu
1
2
4
Tạo Testkey
3
Hình 4.1: Quy trình tạo yêu cầu chuyển tiền.
b) Mô tả các bước thực hiện trong quy trình
Nhập thông tin chuyển tiền của khách hàng (bước 1)
Đối tượng thực hiện: Người dùng cuối tại PGD/CN
Đầu vào: ngày yêu cầu, đơn vị yêu cầu (phòng/ban), người yêu cầu, mã
khách hàng, tên khách hàng, số tiền, loại tiền, số tham chiếu, số trang
văn bản (gửi kèm), ghi chú, file scan PDF chứng từ.
Đầu ra: Thông tin yêu cầu chuyển tiền
Mô tả: Hệ thống kiểm tra và cập nhật thông tin vào CSDL
Tạo Testkey (bước 2)
Đối tượng thực hiện: Người dùng cuối tại PGD/CN
Đầu vào: Khóa bí mật, ngày yêu cầu, đơn vị yêu cầu (phòng/ban), người
yêu cầu, mã khách hàng, số tiền, loại tiền, số trang văn bản.
Đầu ra: Mã Testkey độ dài 10 ký tự.
Mô tả: Hệ thống sử dụng hàm băm để mã hóa 1 chiều thông tin và lấy ra
10 ký tự ở các vị trí xác định trong chuỗi băm.
Ký vào yêu cầu chuyển tiền (bước 3)
Đối tượng thực hiện: Người dùng cuối tại PGD/CN
Đầu vào: Thông tin yêu cầu chuyển tiền và chữ ký (Public key) của đơn
vị đã được cung cấp.
Đầu ra: Thông tin chuyển tiền đã được mã hóa và ký, chứng từ đính kèm
(file PDF) được mã hóa.
55
Mô tả: Hệ thống thực hiện mã hóa thông tin chuyển tiền bằng public key
của đơn vị và mã hóa file PDF.
Gửi yêu cầu (bước 4)
Đối tượng thực hiện: Người dùng cuối tại PGD/CN
Đầu vào: Thông tin chuyển tiền đã được mã hóa và ký
Đầu ra: Trạng thái bản ghi Thông tin chuyển tiền đã được mã hóa và ký.
Mô tả: Hệ thống thay đổi trạng thái bản ghi và cập nhật thông tin ngày
giờ chuyển thông tin.
4.2.2.3. Quy trình tiếp nhận, kiểm tra và xử lý
a) Mô hình quy trình xử lý
Việc tiếp nhận và xử lý yêu cầu được thực hiện bởi cán bộ tại phòng Thanh toán
Quốc tế tại TSC.
Bắt đầu
Kết thúc
Nhận yêu cầu
Kiểm tra chữ ký
Xác nhận
Yes
Đúng chữ ký
1
3
4
Phản hồi lại cho PGD/CNNo
Kiểm tra Testkey
Đúng Testkey No
Yes
2
Hình 4.2: Quy trình kiểm tra, xác nhận yêu cầu.
b) Mô tả các bước thực hiện trong quy trình
Nhận yêu cầu (bước 1)
Đối tượng thực hiện: Người dùng cuối tại Phòng thanh toán Quốc tế.
56
Đầu vào: Ngày yêu cầu, đơn vị yêu cầu (phòng/ban), người yêu cầu, mã
khách hàng, tên khách hàng.
Đầu ra: Thông tin yêu cầu chuyển tiền từ đơn vị yêu cầu.
Mô tả: Hệ thống tìm kiếm và hiển thị thông tin yêu cầu trên CSDL.
Kiểm tra Testkey (bước 2)
Đối tượng thực hiện: Người dùng cuối tại Phòng thanh toán Quốc tế.
Đầu vào: Thông tin yêu cầu chuyển tiền và mã Testkey in/ghi trên bản
cứng.
Đầu ra: Mã Testkey hợp lệ/không hợp lệ.
Mô tả: Hệ thống thực hiện kiểm tra mã Testkey nhập vào trên hệ thống
căn cứ thông tin yêu cầu.
Kiểm tra chữ ký (bước 3)
Đối tượng thực hiện: Người dùng cuối tại Phòng thanh toán Quốc tế.
Đầu vào: Thông tin yêu cầu chuyển tiền và chữ ký (Private key) tương
ứng với đơn vị yêu cầu.
Đầu ra: Thông tin chuyển tiền, chứng từ đính kèm (file PDF) được giải
mã và/hoặc chữ ký không hợp lệ.
Mô tả: Hệ thống thực hiện sử dụng chữ ký Private key tương ứng với
đơn vị gửi yêu cầu thực hiện giải mã thông tin yêu cầu chuyển tiền và
file chứng từ PDF gửi kèm theo.
Xác nhận (bước 4)
Đối tượng thực hiện: Người dùng cuối tại Phòng thanh toán Quốc tế.
Đầu vào: Thông tin chuyển tiền.
Đầu ra: Trạng thái bản ghi Thông tin chuyển tiền đã được xác nhận.
Mô tả: Hệ thống thay đổi trạng thái bản ghi và cập nhật thông tin ngày
giờ nhận thông tin.
4.2.3. Biểu đồ ca sử dụng
Tác động vào hệ thống bao gồm 3 nhóm chính là: Quản trị hệ thống, Hỗ trợ vận
hành, Người dùng cuối. Người dùng thuộc nhóm Quản trị hệ thống sẽ có quyền thực
hiện tất cả các chức năng trong hệ thống. Người dùng thuộc nhóm Hỗ trợ vận hành sẽ
có quyền thực hiện trên module Quản trị người dùng và Quản lý khóa ký. Người dùng
cuối chỉ có quyền thực hiện các chức năng trên module Quản lý luân chuyển văn bản.
57
Trường hợp sử dụng tổng quan các module trong hệ thống:
Quản lý Phòng ban
Thống kê, báo cáo
Quản lý người dùng
Quản lý khóa ký
Quản lý luân chuyển
yêu cầu chuyển tiền
Quản trị hệ thống
Người dùng cuối
Hỗ trợ vận hành
Cấu hình hệ thống
Hình 4.3: Ca sử dụng các module trong hệ thống.
Trong trường hợp tổng quan, người Quản trị hệ thống có thể thực hiện các chức
năng: Quản lý thông tin phòng ban, Quản lý khóa, Quản lý người dùng, Quản lý luân
chuyển thông tin chuyển tiền, Thống kê báo cáo.
Một số trường hợp sử dụng cụ thể:
Quản lý Phòng ban
Quản trị hệ thống
Thêm mới phòng ban
Xem thông tin phòng ban
Chỉnh sửa phòng ban
Xóa phòng ban
Hỗ trợ vận hành
Quản lý phòng ban
<<include>>
<<include>>
<<include>>
<<include>>
Hình 4.4: Ca sử dụng Quản lý phòng ban.
58
Ca sử dụng này thực hiện Quản lý thông tin phòng ban. Người dùng thuộc nhóm
Quản trị hệ thống, Hỗ trợ vận hành có thể thực hiện các chức năng: Thêm mới, chỉnh
sửa, xem và xóa thông tin phòng ban.
Quản lý khóa ký
Quản trị hệ thống
Tạo mới khóa ký
Cập nhật khóa ký
Xóa khóa ký
Hỗ trợ vận hành
Quản lý khóa ký
<<include>>
<<include>>
<<include>>
Hình 4.5: Ca sử dụng Quản lý khóa ký.
Ca sử dụng này thực hiện quản lý thông tin khóa ký. Người dùng thuộc nhóm
Quản trị hệ thống, Hỗ trợ vận hành có thể thực hiện các chức năng: Tạo mới, cập nhật,
và xóa thông tin khóa ký.
Quản lý luân chuyển yêu cầu chuyển tiền
Quản trị hệ thống
Tạo mới yêu cầu
Xác nhận yêu cầu
Xem thông tin yêu cầu
Người dùng cuối
Quản lý yêu cầu chuyển tiền
<<include>>
<<include>>
<<include>>
Hình 4.6: Ca sử dụng Quản lý luân chuyển yêu cầu chuyển tiền.
59
Ca sử dụng này thực hiện chức năng Tạo mới yêu cầu, Xác nhận yêu cầu và xem
thông tin yêu cầu chuyển tiền. Người dùng thuộc nhóm Quản trị hệ thống, Người dùng
cuối có thể thực hiện các chức năng: Tạo yêu cầu, xác nhận yêu cầu và xem yêu cầu.
Thống kê, báo cáo
Quản trị hệ thống
Thống kê số giao dịch theo đơn vị gửi
Thống kê số giao dịch theo loại tiền
Thống kê số giao dịch theo ngày
Người dùng cuối
Thống kê
<<include>>
<<include>>
<<include>>
Hình 4.7: Ca sử dụng Thống kê – báo cáo.
Người dùng thuộc nhóm Người dùng cuối, Quản trị hệ thống có thể xem được
thống kê các giao dịch theo đơn vị gửi, theo loại tiền, theo ngày gửi.
Quản lý người dùng
Quản trị hệ thống
Đăng ký người dùng
Tra cứu người dùng
Cập nhật người dùng
Xóa người dùng
Quản lý người dùng
<<include>>
<<include>>
<<include>>
<<include>>
Đăng nhập hệ thống
Đăng xuất hệ thống
Phân quyền người dùng
<<include>>
<<include>>
<<include>>
Hỗ trợ vận hành
Hình 4.8: Ca sử dụng Quản lý người dùng.
60
Người dùng thuộc nhóm Quản trị hệ thống, Hỗ trợ vận hành có thể tạo mới người
dùng trong hệ thống, cấp quyền cho người dùng vào các chức năng trong hệ thống.
Đồng thời người quản trị, Người hỗ trợ vận hành cũng có thể chỉnh sửa thông tin
người dùng, khóa người dùng cũng như xóa người dùng trong trường hợp không sử
dụng.
Cấu hình hệ thống
Quản trị hệ thống
Cấu hình thông tin kết nối
Cấu hình thông tin Người dùng
Cấu hình hệ thống
<<include>>
<<include>>
Hình 4.9: Ca sử dụng Cấu hình hệ thống.
4.2.4. Biểu đồ lỗ hổng ca sử dụng
Quản lý Phòng ban
Thống kê, báo cáo
Quản lý người dùng
Quản lý khóa ký
Quản lý luân chuyển
yêu cầu chuyển tiền
Người sử dụng
Kẻ trộm/Hacker
Đăng nhập hệ thống
Thay đổi mật khẩu
Lấy được mật khẩu
Tấn công SQL
Injection
Tấn công Cross site-
scripting
Hình 4.10: Lỗ hổng ca sử dụng.
4.2.5. Các Module chức năng hệ thống
Hệ thống cần phải có các khối chức năng chính sau đây:
Quản lý phòng ban.
61
Quản lý khóa ký.
Quản lý luân chuyển yêu cầu chuyển tiền.
Thống kê, báo cáo.
Quản trị hệ thống: cấu hình hệ thống, quản lý người dùng.
4.3. Thiết kế hệ thống
4.3.1. Mô hình tổng thể hệ thống
Quản lý
phòng ban
Quản lý khóa
ký
Quản lý
người dùng
Quản lý luân chuyển
yêu cầu chuyển tiền
Thống kê,
báo cáo
Cấu hình hệ
thống
Hình 4.11: Mô hình tổng thể hệ thống.
4.3.2. Mô hình chức năng
HỆ THỐNG QUẢN LÝ LUÂN CHUYỂN
YÊU CẦU CHUYỂN TIỀN
Quản lý phòng
ban
Quản lý khóa
ký
Quản lý người
dùngQuản lý luân
chuyển yêu cầu
chuyển tiền
Thống kê, báo
cáo
Danh sách
phòng ban
Thêm mới
phòng ban
Chỉnh sửa
phòng ban
Xóa phòng
ban
Danh sách
khóa ký
Tạo mới
khóa ký
Chỉnh sửa
khóa ký
Xóa khóa
ký
Phân quyền
người dùng
Tạo mới
người dùng
Chỉnh sửa
người dùng
Xóa người
dùng
Tra cứu
người dùng
Thống kê
theo loại
tiền
Thống kê
theo ngày
Thống kê
theo đơn vị
gửi Tạo mới
yêu cầu
Xác nhận
yêu cầu
Tra cứu
thông tin
Cấu hình hệ
thống
Cấu hình thông
tin kết nối
Cấu hình thông
tin người dùng
Hình 4.12: Mô hình chức năng.
62
4.3.3. Kiến trúc hệ thống
SQL ServerWeb
ApplicationNgười sử
dụng
Hình 4.13: Kiến trúc hệ thống.
Các thành phần trong hệ thống:
Người sử dụng: Người sử dụng trong hệ thống.
Web Application: triển khai các trang frontend của hệ thống được viết bằng
ASP.NET sử dụng web server IIS.
SQL Server: Lưu trữ cơ sở dữ liệu của hệ thống
4.4. Xây dựng hệ thống thử nghiệm
4.4.1. Môi trường cài đặt, triển khai
Hệ thống luân chuyển yêu cầu chuyển tiền quốc tế của khách hàng được xây
dựng và triển khai trên nền tảng công nghệ Microsoft .NET, cụ thể các công nghệ và
môi trường cài đặt như sau:
Hệ điều hành: Window Server 2012
Hệ quản trị cơ sở dữ liệu: MS SQL Server 2014
Công nghệ lập trình ứng dụng web: ASP.Net, Entity Framework, Bootrap
Nền tảng công nghệ: .NET
Máy chủ web: IIS
Công cụ lập trình: Visual Studio 2017
4.4.2. Màn hình giao diện
a) Giao diện đăng nhập hệ thống (dành cho Quản trị viên và người dùng)
Để có thể vào giao diện quản lý, giao diện thực hiện nghiệp vụ thì người dùng
phải thực hiện đăng nhập vào hệ thống. Việc này đảm bảo chỉ người được cấp quyền
mới có thể truy cập và sử dụng các tính năng của hệ thống.
63
Hình 4.14: Giao diện đăng nhập hệ thống.
b) Giao diện nhập yêu cầu chuyển tiền
Giao diện hiển thị các thông tin cần nhập cho yêu cầu chuyển tiền cho người dùng tại
các CN/PGD
Hình 4.15: Giao diện nhập yêu cầu chuyển tiền.
c) Giao diện xác nhận yêu cầu chuyển tiền
Giao diện hiển thị các thông tin xác nhận yêu cầu chuyển tiền từ các CN/PGD cho
người dùng tại phòng Thanh toán quốc tế.
64
Hình 4.16: Giao diện xác nhận yêu cầu chuyển tiền.
4.4.3. Đánh giá khả năng an toàn và bảo mật của hệ thống
Đánh giá khả năng an toàn và bảo mật cũng là một nhiệm vụ vô cùng quan trọng
đối với các ứng dụng. Hệ thống TMS đã ứng dụng và cài đặt một số kỹ thuật bảo mật
trong Microsoft .NET để đáp ứng một số yêu cầu liên quan đến an toàn và bảo mật hệ
thống trong TT 18/2018 và Quy định an toàn bảo mật hệ thống CNTT của GPBank.
Dưới đây là kết quả của việc ứng dụng và cài đặt:
4.4.3.1. Thiết kế cơ sở dữ liệu đảm bảo yêu cầu bảo mật về người dùng
a) Thiết kế bảng tham số hệ thống cấu hình mật khẩu cho User
Bảng 4.1 mô tả chi tiết các tham số đáp ứng yêu cầu bảo mật liên quan đến mật
khẩu của người dùng. Thiết kế này đáp ứng được yêu cầu của bài toán. Hình 4.17 mô
tả thiết kế và lưu trữ bảng tham số trong cơ sở dữ liệu.
Bảng 4.1: Mô tả bảng tham số cấu hình mật khẩu cho User.
Tên tham số Giá trị Diễn giải
USER_NUMBER_INPUT_INCORRECT_PASWORD 3 Số lần nhập sai mật
khẩu
USER_NUMBER_DÁY_CHANGE_PASSWORD 45 Thời hạn sử dụng
mật khẩu
USER_PASSWORD_MIN_LENGTH 8 Độ dài tối thiểu của
mật khẩu
USER_PASSWORD_MAX_LENGTH 15 Độ dài tối đa của
mật khẩu
USER_PASSWORD_VALID_POLICY True/False Áp dụng chính sách
mật khẩu hay khống
65
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.
b) Thiết kế bảng cấu hình thông tin User
Bảng 4.2 mô tả chi tiết các thông tin đáp ứng yêu cầu bảo mật liên quan đến
người dùng như cho phép khai báo thời gian sử dụng trong ngày, khóa user nếu đăng
nhập sai mật khẩu, đăng nhập với 1 phiên làm việc. Thiết kế này đáp ứng được yêu
cầu của bài toán. Hình 4.18 minh họa lưu trữ thông tin User trong cơ sở dữ liệu.
Bảng 4.2: Mô tả bảng tham số cấu hình cho User.
Tên tham số Kiểu giá trị Diễn giải
USER_ID varchar Tên đăng nhập
USER_NAME varchar Tên người dùng
PASSWORD varchar Mật khẩu được lưu dưới
dạng mã hóa
IS_LOCK Bit User bị khóa/không khóa
IS_LOGIN Bit User đã đăng nhập/chưa
đăng nhập
IS_USED Bit User có sử dung/không
sử dụng
LAST_CHANGE_PASSWORD Datetime Thời gian đổi mật khẩu
cuối cùng
START_TIME Time Thời gian bắt đầu của
ngày làm việc
END_TIME Time Thời gian kết thúc của
ngày làm việc
Hình 4.18: Thiết kế cấu hình thông tin User.
66
Kết quả thực hiện cho thấy các thiết kế về user và thiết kế các tham số cấu hình
mật khẩu người dùng đã đáp ứng được yêu cầu của bài toán và yêu cầu Quản lý truy
cập trong TT 18/2018 và Quy định an toàn bảo mật hệ thống CNTT của GPBank.
4.4.3.2. Các thiết lập đảm bảo an toàn cho ứng dụng
a) Mã hóa mật khẩu người dùng
Hình 4.19 mô tả hàm thực hiện cập nhật mật khẩu đã được mã hóa sử dụng thuật
toán SHA1 trước khi lưu vào cơ sở dữ liệu, tránh việc lộ mật khẩu nếu lưu dưới dạng
cleartext.
Hình 4.19: Mã hóa mật khẩu lưu vào Cơ sở dữ liệu.
b) Sử dụng Store Procedure
Hình 4.20 mô tả hàm thực hiện xác thực người dùng đăng nhập sử dụng Store
Procedure, tránh được kiểu tấn công SQL Injection trên ứng dụng web
Hình 4.20: Sử dụng Store procedure xác thực người dùng.
c) Sử dụng các cấu hình đảm bảo an toàn
Cấu hình các trường dữ liệu đầu vào
Hình 4.21 mô tả sử dụng cấu hình các control nhập dữ liệu đầu vào cho chức
năng đăng nhập: sử dụng Validation control, đặt giới hạn độ dài dữ liệu nhập vào, hủy
tính năng Autocomplete đối với tên đăng nhập và mật khẩu đăng nhập.
67
Hình 4.21: Sử dụng Validation control, giới hạn độ dài và hủy bỏ Autocomplete.
Cấu hình chống tấn công Cross-Site Scripting
Hình 4.22 mô tả cấu hình trên các trang Master Page và ASPX để đảm bảo hệ
thống an toàn trước tấn công Cross-Site Scripting.
Hình 4.22: Thiết lập phòng chống tấn công Cross-Site Scripting.
Cấu hình thời gian tương tác với hệ thống
Để thực hiện ngắt kết nối khi người sử dụng không tương tác với ứng dụng trong
một khoảng thời gian nhất định, sử dụng config như sau:
<script Language="JavaScript">
window.setTimeout("window.navigate('Logout.asp')", 900000); </script>
Kết quả thực hiện cho thấy các thiết lập đã đáp ứng được yêu cầu của bài toán là
chống được tấn công SQL Injection và Cross-Site Scripting, mã hóa mật khẩu trước
khi lưu vào cơ sở dữ liệu.
4.4.3.3. Các thiết lập đảm bảo bảo mật cho ứng dụng
a) Xây dựng hệ thống thành các lớp riêng biệt
TMS: Các lớp giao diện người dùng
TMS.DataModel.dll: Thư viện chứa các lớp thực hiện truy suất dữ liệu.
TMS.Security.dll: Thư viện chứa các lớp thực hiện tăng cường an ninh, bảo
mật.
TMS.Common.dll: Thư viện chứa các lớp tiện ích và sử dụng chung.
68
b) Mã hóa xâu kết nối cơ sở dữ liệu
Sử dụng giải pháp mã hóa RSA để mã hóa xâu kết nối cơ sở dữ liệu trong trong
file Web.config và thuật toán SHA1 mã hóa lưu trong Registry.
Trong Web.config:
Hình 4.23 mô tả sử dụng mã hóa RSA để mã hóa xâu kết nối cơ sở dữ liệu
Hình 4.23: Mã hóa xâu kết nối Cơ sở dữ liệu trong file web.config.
69
Trong Registry:
Mã hóa dựa trên thuật toán mã hóa một chiều SHA1. Sau khi mã hóa sử dụng
thuật toán encode Base64 để lưu dưới dạng text. Hình 4.24 mô tả lưu mật khẩu đã mã
hóa vào registry.
Hình 4.24: Mã xâu kết nối Cơ sở dữ liệu lưu vào Registry.
c) Cấu hình bảo mật web.config
Hình 4.25 mô tả cấu hình bảo mật cho ứng dụng trong file web.config bao gồm:
cơ chế xác thực Form, thời gian timeout của một phiên làm việc.
Hình 4.25: Cấu hình bảo mật trong file web.config.
70
d) Cấu hình ghi nhật ký hoạt động của hệ thống
Hình 4.26 mô tả cấu hình sử dụng log4net trong file web.config để ghi lại các
hoạt động của hệ thống ra file.
Hình 4.26: Cấu hình ghi nhật ký.
e) Tạo mã TestKey
Hình 4.27 mô tả hàm thực hiện tạo mã TestKey 8 ký tự từ việc sinh ngẫu nhiên
key và sử dụng thuật toán mã hóa một chiều SHA256 key sinh ngẫu nhiên và dữ liệu
đầu vào. Hàm sinh TeskKey đảm bảo không trùng với key đã có trên hệ thống.
Hình 4.27: Tạo mã TestKey với độ dài 8 ký tự.
f) Mã hóa và giải mã file PDF
Hình 4.28a mô tả hàm thực hiện mã hóa file chứng từ PDF sử dụng thư viện
Rfc2898DeriveBytes, đảm bảo nếu không được giải mã thì không thể đọc được nội
dung file.
71
Hình 4.28b mô tả hàm thực hiện giải mã file chứng từ PDF sử dụng thư viện
Rfc2898DeriveBytes, đảm bảo nếu không đúng khóa thì không thể giải mã thành công
file đã được mã hóa trước đó.
Hình 4.28a: Mã hóa file sử dụng thư viện Rfc2898DeriveBytes.
Hình 4.28b: Giải mã file sử dụng thư viện Rfc2898DeriveBytes.
Kết quả thực hiện cho thấy các thiết lập đã đáp ứng được yêu cầu của bài toán:
mã hõa chuỗi kết nối cơ sở dữ liệu, tạo mã TestKey, mã hóa/giải mã file chứng từ
PDF, ghi nhật ký hoạt động của hệ thống.
72
4.4.4. Một số Test case về an toàn và bảo mật của hệ thống
a) Các Test case SQL Injection với chức năng đăng nhập
Bảng 4.3: Kết quả thực hiện Test lỗ hổng SQL Injection.
Test
Case
ID
Kịch bản
kiểm thử
Các bước
kiểm thử
Dữ liệu kiểm thử Kết quả
dự kiến
Kết quả
thực tế
Pass/
Fail
TU01 Kiểm thử
đăng nhập
với dữ liệu
hợp lệ
B1: Truy cập
đường link
B2: Nhập tên
người dùng
và mật khẩu
B3: Click
vào nút
“Đăng nhập”
User: manhtr
Pass: manh2019
Người
dùng đăng
nhập thành
công
Như
mong
đợi
Pass
TU02 Kiểm thử
đăng nhập
với dữ liệu
không hợp lệ
B1: Truy cập
đường link
B2: Nhập tên
người dùng
và mật khẩu
B3: Click
vào nút
“Đăng nhập”
User: 1' or '1' = '1
Pass: 1' or '1' = '1
Người
dùng đăng
nhập không
thành công
Như
mong
đợi
Pass
TU03 Kiểm thử
đăng nhập
với dữ liệu
không hợp lệ
B1: Truy cập
đường link
B2: Nhập tên
người dùng
và mật khẩu
B3: Click
vào nút
“Đăng nhập”
User: 1' or '1' = '1'))/*
Pass: foo
Người
dùng đăng
nhập không
thành công
Như
mong
đợi
Pass
TU04 Kiểm thử
đăng nhập
với dữ liệu
không hợp lệ
B1: Truy cập
đường link
B2: Nhập tên
người dùng
và mật khẩu
B3: Click
vào nút
“Đăng nhập”
User: 1' or '1' = '1'))/*
Pass: foo
Người
dùng đăng
nhập không
thành công
Như
mong
đợi
Pass
73
b) Các Test case Cross-Site Cripting
Bảng 4.4: Kết quả thực hiện Test lỗ hổng Cross-Site Scripting.
Test
Case
ID
Kịch bản
kiểm thử
Các bước
kiểm thử
Dữ liệu kiểm thử Kết quả
dự kiến
Kết
quả
thực tế
Pass/
Fail
TU01 Kiểm thử
đăng nhập
với dữ liệu
hợp lệ
B1: Truy
cập đường
link
B2: Nhập
tên người
dùng và mật
khẩu
B3: Click
vào nút
“Đăng
nhập”
User: manhtr
Pass: manh2019
Người
dùng đăng
nhập thành
công
Như
mong
đợi
Pass
TU02 Kiểm thử
đăng nhập
với dữ liệu
không hợp
lệ
B1: Truy
cập đường
link
B2: Nhập
tên người
dùng và mật
khẩu
B3: Click
vào nút
“Đăng
nhập”
User:
<script>alert("Hacked")
</script>
Pass: manh2019
Người
dùng đăng
nhập
không
thành công
Như
mong
đợi
Pass
TU03 Kiểm thử
với thay đổi
dữ liệu
không hợp
lệ trên
đường link
B1; Đăng
nhập hệ
thống
B2: Sửa dữ
liệu
Link: http://localhost:20817/
DepartmentManagement
/ListDepartmanet?
Info=<script>alert(‘HACK’)
</script>
Hệ thống
không báo
lỗi
Như
mong
đợi
Pass
74
4.5. Kết luận
Như vậy chương này đã giới thiệu về bài toán luân chuyển yêu cầu chuyển tiền
quốc tể của khách hàng từ các PGD/CN đến phòng Thanh toán quốc tế tại GPBank
ứng dụng kỹ thuật bảo mật trong Microsoft .Net và quá trình triển khai ứng dụng trên
môi trường Microsoft .Net, thử nghiệm quy trình hệ thống với các tính năng như lập
yêu cầu chuyển tiền, ký vào yêu cầu chuyển tiền, mã hóa file chứng từ PDF, kiểm tra
và xác nhận yêu cầu, giải mã file PDF đã mã hóa, thống kê khối lượng giao dịch theo
đơn vị gửi, theo thời gian gửi và theo loại tiền. Hệ thống hiện đang được triển khai tại
GPBank nhằm đáp ứng yêu cầu từ phòng Thanh toán quốc tế khi thực hiện nghiệp vụ
chuyển tiền ra nước ngoài.
Chương này cũng đã thực hiện thử nghiệm áp dụng các kỹ thuật bảo mật .NET
nhằm đáp ứng một phần yêu cầu bảo mật của bài toán, yêu cầu bảo mật của TT
18/2018 và Quy định an toàn bảo mật hệ thống CNTT của GPBank. Các thử nghiệm
đã được thực hiện bao gồm: thiết kế cài đặt cấu hình mật khẩu người dùng, thiết kế cài
đặt thông tin người dùng để đáp ứng yêu cầu về quản lý truy cập, thực hiện các thiết
lập chống tấn công SQL Injection và Cross-Site Scripting, mã hóa mật khẩu trước khi
lưu vào cơ sở dữ liệu, mã hóa chuỗi kết nối cở sở dữ liệu trong file web.config, tạo mã
TestKey, mã hóa/giải mã file chứng từ PDF, ghi nhật ký hoạt động của hệ thống.
75
Chương 5: KẾT LUẬN
Việc triển khai các ứng dụng các kỹ thuật bảo mật trong Microsoft .NET hiện đã
được áp dụng nhiều nhằm đáp ứng yêu cầu về ứng dụng CNTT trong sản xuất kinh
doanh. Microsoft .NET cung cấp đầy đủ các công cụ và kỹ thuật trong đó có kỹ thuật
bảo mật nhằm đáp ứng các yêu cầu về xây dựng hệ thống ứng dụng cho doanh nghiệp.
Sau thời gian tìm hiểu, nghiên cứu tài liệu, tôi đã hoàn thành luận văn 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”. Luận văn đã đạt được kết quả sau:
Tìm hiểu, nghiên cứu những lý thuyết tổng quan bảo mật trong hệ thống
phần mềm, các lỗ hổng bảo mật phần mềm cũng như các kiểu tấn công bảo
mật và lập trình bảo mật.
Tìm hiểu kiến trúc bảo mật trong hệ thống phần mềm.
Tìm hiểu kiến trúc bảo mật và kỹ thuật bảo mật trong Microsoft .NET
Áp dụng kỹ thuật bảo mật trong Microsoft .NET để đặc tả và 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”.
Kết quả nghiên cứu của luận văn có thể áp dụng cho việc triển khai các ứng dụng
sử dụng công nghệ bảo mật của Microsoft .NET tại GPBank.
Hướng phát triển trong tương lai của đề tài:
- Tích hợp với hệ thống Corebank để kiểm tra thông tin khách hàng.
- Tích hợp với hệ thống email nội bộ để xác thực người dùng là cán bộ đang
làm việc tại GPBank.
- Phát triển thêm các chức năng quản lý luân chuyển cho các loại hồ sơ theo
yêu cầu từ các phòng ban nghiệp vụ tại TSC tuân thủ yêu cầu bảo mật theo
TT 18/2018-TT-NHNN và Quy định An toàn bảo mật hệ thống CNTT của
GPBank.
76
TÀI LIỆU THAM KHẢO
Tiếng Việ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-27195
Tiếng Anh
[2] Asoke K.Talukder, Manish Chaitanya (2009), Architecting Secuce Software
System, CRC, New York.
[3] Matt Bishop (2004), Introduction to Computer Security, Addison-Wesley, New
York.
[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/
[6] .Net framework Guide, https://docs.microsoft.com/en-us/dotnet/framework/
[7] .NET Framework Cryptography Model https://docs.microsoft.com/en-
us/dotnet/standard/security/cryptography-model
[8] Difference Between Active and Passive Attacks,
https://techdifferences.com/difference-between-active-and-passive-attacks.html
[9] OS command injection, https://portswigger.net/web-security/os-command-
injection
[10] Wikipedia - the Free Encyclopedia, http://www.wikipedia.org