1. Trang chủ
  2. » Luận Văn - Báo Cáo

Phát hiện các lỗ hổng bảo mật trong hệ cơ sở dữ liệu

92 63 0

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 92
Dung lượng 3,85 MB

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

Nội dung

Nội dung luận văn chia là hai phần chính, phần đầu trình bày các tính chất của việc bảo mật cơ sở dữ liệu, các khái niệm về lỗ hổng bảo mật và các phương pháp dùng để phát hiện các lỗ hổ

Trang 1

LUẬN VĂN THẠC SĨ

TP Hồ Chí Minh -2009-

Trang 3

LỜI CẢM ƠN -

Trong suốt quá trình nghiên cứu và thực hiện Luận văn, tôi đã nhận được sự động viên, giúp đỡ tận tình của tiến sĩ Đặng Trần Khánh Tôi xin được bày tỏ lòng biết ơn sâu sắc về sự giúp đỡ quý báu này

Tôi xin chân thành cảm ơn các thầy cô giáo trong khoa Khoa học máy tính đã dạy bảo trong suốt hai năm học cao học, để tôi có được những kiến thức như ngày hôm nay và cụ thể là qua những kết quả Luận văn này đã phần nào thể hiện

Sau cùng, tôi xin gửi lời cảm ơn chân thành đến gia đình và bạn bè, những người luôn ở bên cạnh động viên tôi Đây là nguồn cổ động tinh thần rất lớn với tôi

TP Hồ Chí Minh, ngày 27 tháng 6 năm 2009

Học viên

Hà Hồng Sơn

Trang 4

TÓM TẮT LUẬN VĂN

- Luận văn nghiên cứu vấn đề phát hiện các lỗ hổng trong hệ cơ sở dữ liệu Nội dung luận văn chia là hai phần chính, phần đầu trình bày các tính chất của việc bảo mật cơ sở dữ liệu, các khái niệm về lỗ hổng bảo mật và các phương pháp dùng

để phát hiện các lỗ hổng bảo mật hiện nay, phần thứ hai nghiên cứu cụ thể về một

số phương pháp tấn công khai thác lỗ hổng rất phổ biến trong hệ cơ sở dữ liệu, các

lỗ hổng cụ thể trong hệ cơ sở dữ liệu Oracle và hiện thực một chương trình có khả năng phát hiện ra các vấn đề về bảo mật do trong quá trình vận hành cơ sở dữ liệu

có thể gây ra

Hệ thống được thực hiện dựa trên kĩ thuật fuzz-testing và chạy trên hệ cơ sở

dữ liệu Oracle 10g

Trang 5

MỤC LỤC

CHƯƠNG 1: ĐẶT VẤN ĐỀ 1

1.1 Lý do hình thành đề tài và ý nghĩa thực tiễn 1

1.2 Mục tiêu, yêu cầu và giới hạn của đề tài 2

CHƯƠNG 2: TỔNG QUAN VỀ BẢO MẬT CƠ SỞ DỮ LIỆU 3

2.1 Các tính chất trong bảo mật cơ sở dữ liệu 3

2.1.1 Tính bí mật 3

2.1.2 Tính toàn vẹn (Integrity) 4

2.1.3 Tính sẵn sàng (Availability) 5

2.1.4 Tính chống thoái thác (Non-repudiation) 5

2.2 Các nguy cơ ảnh hưởng tới hệ cơ sở dữ liệu 5

2.2.1 Nghe lén và ăn cắp dữ liệu 5

2.2.2 Giả mạo dữ liệu 6

2.2.3 Giả mạo định danh 6

2.2.4 Truy cập bất hợp pháp 7

2.2.5 Khả năng đáp ứng 7

2.3 Một số thuật ngữ liên quan 8

2.3.1 Authentication, authorization and Accounting ( hay Auditing) 8

2.3.2 Hiểm họa (Threat) 9

2.3.3 Lỗ hổng bảo mật (vulnerability) 9

2.4 Phân loại lỗ hổng trong hệ cơ sở dữ liệu 10

2.4.1.Phân loại dựa vào các thành phần hệ thống 10

2.4.1.1 Lỗ hổng trong cơ sở dữ liệu 11

2.4.1.2 Lỗ hổng trong các ứng dụng 11

2.4.1.3 Lỗ hổng trong hệ điều hành 12

2.4.1.4 Lỗ hổng trong Web server 13

2.4.1.5 Lỗ hổng trong môi trường mạng 13

2.4.2 Phân loại dựa vào các yếu tố ảnh hưởng trực tiếp tới hệ cơ sở dữ liệu 14

2.4.2.1 Lỗ hổng bỏ qua xác thực trong giao thức mạng (Unauthenticated Flaws in Network Protocols) 14

2.4.2.2 Lỗ hổng xác thực trong giao thức mạng (Authenticated Flaws in Network Protocols) 15

2.4.2.3 Lỗ hổng trong các giao thức xác thực ( Flaws in Authentication Protocols ) 16

2.4.2.4 Truy cập vào các tính năng không được phép (Unauthenticated Access to Functionlity) 16

2.4.2.5 Thực thi các đoạn mã trong môi trường SQL (Arbitrary Code Execution in Intrinsic SQL Elements ) 17

2.4.2.6 Nâng quyền dựa vào SQL injection ( Privilege Elevation via SQL Injection ) 18

2.4.2.7 Các vấn đề về nâng quyền trong hệ thống cục bộ ( Local Privilege Elevation Issues ) 18

2.5 Tổng quan về SQL injection 18

Trang 6

2.5.1 Khái niệm SQL Injection 19

2.5.2 Các dạng tấn công bằng SQL Injection 19

2.5.2.1 Dạng tấn công vượt qua kiểm tra đăng nhập 19

2.5.2.2 Dạng tấn công sử dụng câu lệnh SELECT 21

2.5.2.3 Dạng tấn công sử dụng câu lệnh INSERT 24

2.5.2.4 Dạng tấn công sử dụng stored-procedures 24

2.5.3 Cách phòng tránh 25

2.5.3.1 Kiểm soát chặt chẽ dữ liệu nhập vào 25

2.5.3.2 Thiết lập cấu hình an toàn cho hệ quản trị cơ sở dữ liệu 26

CHƯƠNG 3: CÁC KĨ THUẬT PHÁT HIỆN LỖ HỔNG BẢO MẬT TRONG HỆ CƠ SỞ DỮ LIỆU 27

3.1 Penetration Testing 27

3.1.1 Khái niệm về Pentesting 27

3.1.2 Các bước thực hiện Pentesting 28

3.1.3 Ưu điểm và khuyết điểm 30

3.2 Khai phá dữ liệu 31

3.2.1 Khái niệm về khai phá dữ liệu 31

3.2.2 Các bước trong khai phá dữ liệu 32

3.2.3 Hệ thống phát hiện xâm nhập IDS 33

3.3 Một số phần mêm phát hiện lỗ hổng bảo mật tiêu biểu 36

3.3.1 Nessus 36

3.3.2 Phần mềm phát hiện xâm nhập (IDS) Snort 41

CHƯƠNG 4 : THIẾT KẾ MỘT GIẢI PHÁP PHÁT HIỆN LỖ HỔNG BẢO MẬT TRONG HỆ CƠ SỞ DỮ LIỆU ORACLE 45

4.1 Lỗ hổng bảo mật trong hệ cơ sở dữ liệu Oracle 10g 45

4.1.1 Username và password mặc định 45

4.1.2 Password yếu 46

4.1.3 Quyền public 47

4.1.4 Quyền mặc định 52

4.1.5 Các gói trong cơ sở dữ liệu 55

4.1.6 Các ví dụ về PL/SQL injection và một số tính năng đặc biệt của PL/SQL 57

4.2 Thiết kế một chương trình phát hiện lỗ hổng bảo mật trong hệ cơ sở dữ liệu Oracle 66

4.2.1 Mô tả hệ thống 67

4.2.2.Cài đặt và cấu hình chương trình 73

CHƯƠNG 5 : KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 81

5.1 Kết luận 81

5.2 Hướng phát triển kế tiếp 82

TÀI LIỆU THAM KHẢO 83

Trang 7

DANH MỤC CÁC HÌNH

-

Hình 2 1.Các tính chất của bảo mật cơ sở dữ liệu 3

Hình 2 2 Tấn công kiểu giả mạo dữ liệu 6

Hình 2 3 Tấn công kiểu giả mạo định danh 7

Hình 3 1 Các bước trong pentesting 29

Hình 3 2 Các bước trong khai phá dữ liệu 32

Hình 3 3 hệ thống HIDS được cài trên từng máy 35

Hình 3 4 Hệ thống NIDS 35

Hình 3 5 Chọn máy hệ điều hành mà máy khách Nessus chạy 39

Hình 3 6 Nhập địa chỉ các máy cần kiểm tra 40

Hình 3 7 Kết quả thu được sau khi chạy Snort 40

Hình 3 8 Cài đặt Snort 42

Hình 4 1 Mô hình ERD của chương trình 68

Hình 4 2 Khởi tạo tài khoản để tiến hành cài đặt 74

Hình 4 3 Cài đặt chương trình kiểm tra TestOr 75

Hình 4 4 Kiểm tra gói DBMS_DEFER_SYS 77

Hình 4 5 Tạo một hàm minh họa 78

Hình 4 6 Sử dụng TestOr để phát hiện lỗ hổng 79

Trang 8

CHƯƠNG 1: ĐẶT VẤN ĐỀ

1.1 Lý do hình thành đề tài và ý nghĩa thực tiễn

Hiện nay công nghệ thông tin được ứng dụng hầu hết trong mọi lĩnh vực của cuộc sống, sự phát triển của nó làm thay đổi cách thức lưu trữ dữ liệu truyền thống

từ các tập hồ sơ giấy sang lưu trữ trên máy tính, có thể nói dữ liệu lưu trữ trên máy tính hiện nay ảnh hưởng hầu hết đến mọi khía cạnh đời sống con người thậm chí trong các lĩnh vực nhạy cảm như chính trị, quân sự, kinh tế Ví dụ : thông tin về tài khoản cá nhân của khách hàng trong nhà băng, tài liệu về hệ thống quân sự, thông tin về các kế hoạch phát triển của doanh nghiệp, đó thực sự là các dữ liệu có giá trị quan trọng, là mục tiêu đánh cắp của nhiều đối tượng khác nhau như các thế lực thù địch của quốc gia, các tội phạm công nghệ cao, các đối thủ cạnh tranh vv v Do đó việc bảo mật các dữ liệu này có vai trò hết sức quan trọng trong thời đại công nghệ hiện nay

Cùng với sự phát triển của công nghệ, việc bảo vệ các dữ liệu này đã có những tiến bộ đáng kể, tuy nhiên công nghệ phát triển đồng thời cũng làm cho các phương thức đánh cắp dữ liệu ngày càng nguy hiểm hơn, mức độ tinh vi càng cao hơn Ngoài ra vòng đời phát triển các phần mềm càng ngày càng ngắn hơn do áp lực kinh doanh rất dễ tạo ra các lỗ hổng để tội phạm có thể dễ dàng lợi dụng để đánh cắp dữ liệu Do đó việc nắm được các lỗ hổng bảo mật cũng như các dấu hiệu vi phạm sẽ giúp nhà quản trị cơ sở dữ liệu có thể ngăn chặn, khắc phục và bảo vệ hệ thống một cách tốt nhất

Xây dựng một hệ thống có khả năng tìm ra các lỗ hổng bảo mật cũng như các nguy cơ tiềm ẩn trong hệ cơ sở dữ liệu sẽ góp phần giúp cho nhà quản trị có khả năng bảo vệ dữ liệu tốt hơn, hạn chế đến mức thấp nhất nguy cơ mất cắp dữ liệu Trong phạm vi nghiên cứu của đề tài này cố gắng đưa ra một mô hình kết hợp nhiều

Trang 9

phương thức khác nhau để phát hiện ra các nguy cơ, lỗ hổng tiềm ẩn cũng như các nguy hiểm có thể có trong quá trình vận hành và khai thác cơ sở dữ liệu

1.2 Mục tiêu, yêu cầu và giới hạn của đề tài

Mục tiêu của đề tài là tìm hiểu về bảo mật hệ cơ sở dữ liệu và nghiên cứu các phương pháp tìm kiếm lỗ hổng bảo mật trong các hệ cơ sở dữ liệu

Yêu cầu của đề tài : Áp dụng các kết quả nghiên cứu để đề xuất hoặc cải tiến một giải pháp hiệu quả cho việc tìm kiếm lỗ hổng bảo mật trong một DBMS cụ thể

Giới hạn của đề tài : Phần hiện thực hệ thống tập trung xây dựng một package tích hợp vào hệ cơ sở dữ liệu Oracle 10g nhằm phát hiện các cấu trúc lệnh nguy hiểm có thể dùng để khai thác lỗi SQL injection hoặc tấn công DOS nhằm đánh cắp toàn bộ dữ liệu

Trang 10

CHƯƠNG 2: TỔNG QUAN VỀ BẢO MẬT CƠ SỞ DỮ LIỆU

2.1 Các tính chất trong bảo mật cơ sở dữ liệu

Bảo mật thông tin trong cơ sở dữ liệu liên quan đến việc đảm bảo dữ liệu an

toàn ở ba khía cạnh sau [4] : tính bí mật (confidentiality), tính toàn vẹn (integrity)

và tính sẵn sàng (Availbility) Tuy nhiên, còn một khía cạnh khác cần phải quan tâm

khi hiện thực một hệ thống bảo mật cơ sở dữ liệu, đó chính là tính chống thoái thác

(non-repudiation) [4] Do đó, các yêu cầu bảo mật cơ sở dữ liệu bao gồm cả bốn

tính chất trên Hình 2.1 sẽ chỉ rõ các tính chất của bảo mật cơ sở dữ liệu

Hình 2 1.Các tính chất của bảo mật cơ sở dữ liệu

2.1.1 Tính bí mật

Về cơ bản tính bí mật cho dữ liệu là việc bảo vệ dữ liệu không bị xem, bị sửa đổi hoặc khai thác bởi những người không có quyền [4] Đây là một tính chất quan trọng trong bảo mật dữ liệu

Ví dụ: trong hệ thống ngân hàng, tính bí mật được thể hiện ở việc một người chỉ có thể xem thông tin tài khoản của mình mà không được biết thông tin tài khoản của người khác

Trang 11

Cơ chế để đảm bảo tính bí mật của dữ liệu là cơ chế điều khiển truy cập (access control mechanism) [4] Điều khiển truy cập được dùng để giới hạn việc truy cập của người dùng vào dữ liệu của hệ thống Các cách để điều khiển truy cập

là mã hóa (cryptography) và thẩm định quyền và quyền hạn (Authentication và

Thẩm định quyền (authentication) là yêu cầu người sử dụng phải cung cấp những

bằng chứng (ví dụ như chữ ký, dấu vân tay, username, password,…) để xác thực

mình là người có quyền truy cập vào hệ thống Quyền hạn (authorization) liên quan

đến việc xác định một người sử dụng hợp pháp (đã qua được bước authentication)

có những quyền nào đối với cơ sở dữ liệu, các quyền là quyền xem, xóa, chỉnh sửa

dữ liệu, và còn nhiều quyền khác nữa

2.1.2 Tính toàn vẹn (Integrity)

Bảo đảm tính toàn vẹn cho dữ liệu là ngăn không cho dữ liệu bị sửa đổi, bổ sung hay xóa bởi những người không có quyền [4]

Ví dụ: trong hệ thống ngân hàng, tính toàn vẹn chính là việc không cho phép người

sử dụng có thể tự sửa đổi số tiền trong tài khoản của chính mình

Cơ chế để đảm bảo cho tính toàn vẹn dữ liệu (Integrity mechanism) được chia làm hai loại sau: cơ chế ngăn chặn (prevention mechanism) và cơ chế phát hiện

(detection mechanism)

Cơ chế ngăn chặn (prevention mechanism) duy trì tính toàn vẹn bằng cách chặn đứng (block) mọi hoạt động được cho là bất hợp pháp nhằm thay đổi dữ liệu Còn cơ chế phát hiện (detection mechanism) thì không cố gắng ngăn chặn những sự

Trang 12

thay đổi dữ liệu bất hợp pháp mà chỉ đơn giản là báo cáo lại với người quản trị hay người dùng là dữ liệu nào đã có thay đổi và không còn đúng nữa

2.1.3 Tính sẵn sàng (Availability)

Bảo đảm tính sẵn sàng là đảm bảo cho dữ liệu luôn sẵn sàng đáp ứng nhu cầu

sử dụng của user có quyền hợp pháp [4]

Ví dụ, trong hệ thống ngân hàng, tính sẵn sàng liên quan đến việc đảm bảo rằng những khách hàng luôn có thể giao dịch vào những thời điểm được quy định trong luật

Một trong những cơ chế thường dùng để giữ tính sẵn sàng là cơ chế dư thừa

(redundance mechanism) Dữ liệu được lưu trữ dư thừa ở nhiều nơi nhằm tăng hiệu quả phục vụ, cũng như đảm bảo tính sẵn sàng vì khi có lỗi xảy ra ở một nơi thì vẫn còn những nơi khác phục vụ

2.1.4 Tính chống thoái thác (Non-repudiation)

Bảo đảm tính chống thoái thác (Non-repudiation) là khả năng ngăn chặn việc

thoái thác một hành động đã làm, là khả năng chứng minh được nguồn gốc (ai, khi nào, làm gì) của những giao tác đã thực hiện

Ví dụ: trong hệ thống ngân hàng, hệ thống có khả năng cung cấp những chứng cứ chứng minh được là khách hàng đã thực hiện giao dịch hay chưa

Cơ chế để đảm bảo tính chống thoái thác thì có cơ chế ghi nhận lại (logging

mechanism) Cơ chế này như là một cuốn nhật ký ghi nhận lại những hành động xảy

ra trong hệ thống

2.2 Các nguy cơ ảnh hưởng tới hệ cơ sở dữ liệu

2.2.1 Nghe lén và ăn cắp dữ liệu

Với sự phát triển của công nghệ việc sử dụng thiết bị nghe lén cũng như bắt các gói tin truyền trong hệ thống mạng ngày càng phổ biến, kiểu tấn công này dùng

Trang 13

để lấy trộm thông tin về tài khoản cá nhân hay các loại thông tin nhạy cảm khác, nó

vi phạm tới tính bí mật của dữ liệu

2.2.2 Giả mạo dữ liệu

Dữ liệu truyền trong môi trường mạng là môi trường không an toàn, với một

hệ thống hiện đại, tin tặc hoàn toàn có thể nắm bắt được các gói tin truyền trên hệ thống mạng của một người dùng nào đó Nghiêm trọng hơn chúng có thể sửa đổi dữ liệu mà người dùng truyền đi cho một mục đích nào đó Kiểu tấn công này làm vi

phạm tính confidentiality và tính integrity của bảo mật dữ liệu

Hình 2 2 Tấn công kiểu giả mạo dữ liệu

2.2.3 Giả mạo định danh

Như nói trên, môi trường mạng là môi trường không an toàn, việc tin tặc có thể nắm bắt các gói tin truyền có thể giúp chúng xác định được người dùng đang trao đổi dữ liệu với ai từ đó chúng có thể giả mạo chính đối tác cần trao đổi đó để đánh lừa người dùng với mục đích xấu, giả mạo định danh vi phạm tính

confidentiality của dữ liệu

Trang 14

Hình 2 3 Tấn công kiểu giả mạo định danh

2.2.4 Truy cập bất hợp pháp

Trong bất kì một hệ thống nào đều có các loại dữ liệu nhạy cảm, chỉ có những người có đủ thẩm quyền mới được truy cập tới Do đó cần phải bảo vệ các loại dữ liệu này trước người dùng không hợp lệ Việc phân quyền và mã hóa dữ liệu

là cần thiết tuy nhiên vẫn có thể có những lỗ hổng tạo điều kiện cho tin tặc có thể tiếp cận thông tin nhạy cảm như tấn lấy cắp mật khẩu, SQL Injection, v.v.v Điều này đòi hỏi phải quản lý truy cập vào hệ thống dữ liệu thật tốt

2.2.5 Khả năng đáp ứng

Những hệ thống lớn thông thường phải hỗ trợ rất nhiều người sử dụng, hàng ngàn hoặc thậm chí hàng trăm ngàn người sử dụng, do đó chúng phải có tính mở

rộng (scalable) Trong những môi trường rộng lớn, việc quản lý một khối lượng lớn

các tài khoản và password có thể dẫn đến lỗi và bị tấn công

Mặt khác, khả năng đáp ứng của một hệ thống đối với một lượng người sử dụng truy xuất đồng thời cũng có hạn Nếu hệ thống không giới hạn số transaction của mỗi user thì có khả năng xảy ra lỗi DoS (Denial of Service – Từ chối dịch vụ)

Kẻ tấn công có thể liên tục tạo ra một số lương rất lớn các giao dịch làm cho hệ

Trang 15

thống không thể đáp ứng kịp và dẫn đến treo (block) Điều này làm cho hệ thống không còn giữ được tính availability

2.3 Một số thuật ngữ liên quan

2.3.1 Authentication, authorization and Accounting ( hay Auditing)

Đây là các khái niêm cơ bản chung trong lĩnh vực bảo mật và dựa vào đây để đưa ra các quy trình dùng để bảo vệ dữ liệu

- Authentication ( Xác thực) : là tiến trình kiểm tra lại định danh của một

người dùng, một thiết bị hay các thực thể khác trong hệ thống máy tính, thường là các yêu cầu ban đầu cho phép truy cập đến tài nguyên của hệ thống Một yêu cầu xác thực có thể đến từ những tác nhân như: con người,

hệ thống máy tính,, thiết bị mạng như router hay switch, chương trình phần mềm Quá trình xác thực có thể diễn ra trên một máy tính đơn hoặc thông qua mạng đến hệ thống xác thực trung tâm Mục đích của nó là thiết lập một thông số như là một giấy ủy nhiệm điện tử được gắn quyền truy xuất vào tài nguyên, nhóm thành viên và hệ thống máy tính hoặc mạng

- Access control (Điều khiển truy xuất) : là quá trình giới hạn truy cập đến

nguồn tài nguyên của hệ thống chỉ để cho những người, chương trình, tiến trình hay các hệ thống khác có thẩm quyền truy nhập Thuật ngữ này đồng nghĩa với điều khiển truy cập và giới hạn truy cập Các yêu cầu truy cập đến nguồn tài nguyên đều phải được điều khiển bởi hệ thống Trong khái niệm bảo mật máy tính, điều khiển truy cập là khả năng giới hạn và điều khiển các truy cập đến hệ thống máy chủ và ứng dụng thông qua các đường liên lạc thông tin Để thực hiện được sự điều khiển này, mỗi điểm truy cập trước khi truy cập phải được xác định hoặc xác thực, vì vậy quyền truy cập có thể xác định được cho từng người sử dụng

- Accounting hay Auditing : là quá trình theo dõi ( tracking) người dùng và

các hoạt động của họ trong hệ thống máy tính hoặc mạng, nó cung cấp khả

Trang 16

năng theo dấu các truy xuất và nỗ lực truy xuất, các vấn đề về lỗi thiết bị và các sự kiện khác có ý nghĩa quan trọng đối với hệ thống [2]

2.3.2 Hiểm họa (Threat)

Hiểm họa là một xâm phạm tiềm ẩn Nó ám chỉ đến tình huống mà trong đó

sự kiện không mong muốn xảy ra do con người hoặc tự nhiên Nó có nhiều định nghĩa khác nhau tùy tình huống

- Là hành động hoặc sự kiện có thể tác động xấu đến độ an toàn

- Là một chuỗi các tình huống và sự kiện cho phép con người hoặc một tác nhân nào đó gây ảnh hưởng xấu đến các thông tin quan hệ bằng cách khai thác lỗ hổng trong một sản phẩm tin học Hiểm họa đó có thể là vô tình hoặc chủ tâm

- Là một tình huống hoặc sự kiện tiềm ẩn khả năng gây ra các tác hại cho hệ thống như phá hủy, phơi bày thông tin, chỉnh sửa dữ liệu hoặc từ chối dịch

Thông thường các lỗ hổng bảo mật rất khó phát hiện và rất khó chứng minh

sự tồn tại của chúng, nhiều lỗ hổng chỉ xuất hiện trong các môi trường không quen thuộc hoặc sử dụng những kĩ thuật khác lạ Theo các chuyên gia bảo mật thì

Trang 17

đến kết quả khó dự đoán Điều này xuất phát từ nguyên nhân các chỗ sai sót thường

do nhầm lẫn không thể lý giả được Tuy nhiên lỗ hổng bảo mật có thể được phân loại theo cách mà con người có thể nắm được vấn đề

Chú ý rằng có sự khác biệt giữa hiển họa và lỗ hổng bảo mật Hầu hết các hệ thống đều có lỗ hổng nhưng không phải tất cả chúng đều có thể khai thác Sự khác biệt chính giữa hiểm họa và lỗ hổng bảo mật là không phải mọi hiểm họa đều dẫn đến tấn công hệ thống và không phải mọi cuộc tấn công đều thành công Sự thành công tùy thuộc vào mức độ lỗ hổng, sức mạnh của nguồn tấn công và các biện pháp phòng vệ của hệ thống Nếu việc khai thác lỗ hổng là quá khó thì có thể bỏ qua lỗ hổng đó Tương tự nếu lợi ích của việc tấn công quá nhỏ thì cũng có thể bỏ qua lỗ hổng đó, tuy nhiên nếu việc khai thác lỗ hổng đó quá dễ dàng và hệ thống có nhiều người sử dụng thì vẫn hấp dẫn tin tặc tấn công

2.4 Phân loại lỗ hổng trong hệ cơ sở dữ liệu

Hiện nay có nhiều tổ chức khác nhau tiến hành phân loại các lỗ hổng bảo mật cho cơ sở dữ liệu dựa trên các tiêu chí khác nhau, trong bài luận văn này chỉ nêu ra hai cách phân loại dựa trên nghiên cứu và thực tiễn

2.4.1.Phân loại dựa vào các thành phần hệ thống

Có rất nhiều thành phần tham gia tạo thành một hệ thống thông tin, gồm database, database server, application web server, các máy client, kết nối mạng (network), … và cả con người sử dụng hệ thống đó Mỗi thành phần đều tồn tại những lỗ hổng bảo mật bên trong nó, những lỗ hổng này đều có thể bị tin tặc lợi dụng để tấn công vào cơ sở dữ liệu Do đó việc phân loại và quản lý các lỗ hổng bảo mật này sẽ giúp bảo vệ cơ sở dữ liệu an toàn hơn

Dựa vào thành phần có thể phân loại lỗ hổng bảo mật như sau;

1 Lỗ hổng trong cơ sở dữ liệu

2 Lỗ hổng trong ứng dụng

3 Lỗ hổng trong hệ điều hành

Trang 18

4 Lỗ hổng trong Web server

5 Lỗ hổng trong môi trường mạng

2.4.1.1 Lỗ hổng trong cơ sở dữ liệu

Trong cơ sở dữ liệu, lỗ hổng thường hay xuất hiện nhất trong hai quá trình là xác thực (Identification & Authentication ) và phân quyền truy xuất (Authorization

& Access Control ), xác thực là quá trình thẩm định người dùng có hợp lệ hay không, hiện nay quá trình xác thực trong cơ sở dữ liệu là thông qua tài khoản

(username ) và mật khẩu ( password ) Lỗ hỗng xuất hiện ở đây chính là username

và password kém, không an toàn và sử dụng password mặc định của hệ thống cung cấp, ví dụ trong hệ cơ sở dữ liệu Oracle tồn tại rất nhiều password mặc định khoảng

600 [10][23], ngoài ra rất nhiều người dùng sử dụng những chuỗi kí tự đơn giản như

123456, password trùng lắp với user, hoặc dùng ngày tháng năm sinh của mình để làm password, các loại password trên đều dễ dàng bị đoán ra và bị tin tặc lợi dụng

Ngoài ra trong quá trình phân quyền truy xuất cũng gây ra các lỗ hổng ví dụ như việc phân quyền không chặt chẽ và không giám sát đầy đủ sẽ bị lợi dụng để nâng quyền cho uesr tức là làm cho một tài khoản nào đó có được quyền mà nó không được phép ví dụ trong hệ thống ngân hàng thì tài khoản khách hàng không được phép sửa đổi các thông tin giao dịch nhưng bằng việc nâng quyền lên cho phép sửa đổi thông tin sẽ làm toàn bộ hệ thống bị sai lệch dẫn đến tin tặc lợi dụng

để tiến hành các giao dịch bất hợp pháp

2.4.1.2 Lỗ hổng trong các ứng dụng

Việc truy xuất vào cơ sở dữ liệu thường thông qua các ứng dụng, đặc biệt là các ứng dụng trên Internet, việc phát triển ứng dụng không chặt chẽ cũng gây ra các

lỗ hổng nghiêm trọng ảnh hưởng trực tiếp đến cơ sở dữ liệu, có lẽ phổ biến hơn cả

chính là lỗi SQL injection và lỗi tràn bộ đệm (overbuffer) SQL injection chính là

việc lợi dụng lỗi trong ứng dụng để tiêm các câu lênh SQL bất hợp pháp vào hệ cơ

sở dữ liệu nhắm mục đích đánh cắp thông tin hoặc nâng quyền bất hợp pháp, lỗi

Trang 19

biên của một bộ nhớ đệm có chiều dài cố định Kết quả là dữ liệu đó sẽ đè lên các vị trí bộ nhớ liền kề Dữ liệu bị ghi đè có thể bao gồm các bộ nhớ đệm khác, các biến

và dữ liệu điều khiển luồng chạy của chương trình (program flow control)

Các lỗi tràn bộ đệm có thể làm cho một tiến trình đổ vỡ hoặc cho ra các kết quả sai Các lỗi này có thể được kích hoạt bởi các dữ liệu vào được thiết kế đặc biệt

để thực thi các đoạn mã phá hoại hoặc để làm cho chương trình hoạt động một cách không như mong đợi Bằng cách đó, các lỗi tràn bộ đệm gây ra nhiều lỗ hổng bảo

mật (vulnerability) đối với phần mềm và tạo cơ sở cho nhiều thủ thuật khai thác (exploit) Việc kiểm tra biên (bounds checking) đầy đủ bởi lập trình viên hoặc trình

biên dịch có thể ngăn chặn các lỗi tràn bộ đệm

Trong phần tiếp theo tới chúng ta sẽ thảo luận sâu hơn về SQL injection cũng như cách khai thác và phòng chống

2.4.1.3 Lỗ hổng trong hệ điều hành

Trong hệ điều hành tồn tại rất nhiều lỗ hổng khác nhau liên quan tới rất nhiều vấn đề, tuy nhiên các lỗi ảnh hưởng tới hệ cơ sở dữ liệu bao gồm một số lỗi như sau:

Trong hệ điều hành Microsoft window phổ biến là việc quản lý tài khoản quản trị không chặt chẽ, cơ chế điều khiển truy nhập registry không tốt, chính sách truy cập cho các tài khoản trong hệ thống v.v.v.Ví dụ phổ biến nhất là sử dụng user mặc định Guest cho phép mọi đối tượng có thể truy xuất vào hệ điều hành, từ đó cho phép kết nối đến hệ cơ sở dữ liệu cài trên đó, ngoài ra cơ chế truy xuất registry không chặt chẽ có thể cho phép tin tặc thêm các khóa có hại như cho phép một chương trình độc hại hoặc chương trình ăn cắp bàn phím (keylogger) chạy trên hệ thống

Trang 20

2.4.1.4 Lỗ hổng trong Web server

Những lỗ hổng này tồn tại là do tương tác giữa web server và hệ cơ sở dữ liệu Ví dụ, một vài lỗ hổng cho phép quyền thực thi với quyền của Apache process

Trên hệ thống UNIX, những Apache process thông thường sẽ chạy với người dùng là “oracle” Còn trên Windows, Apache service thông thường lại được chạy với người dùng là “SYSTEM” Do đó, kẻ tấn công có thể đoạt hết quyền kiểm soát

hệ thống bằng cách khai thác những lỗ hổng này

2.4.1.5 Lỗ hổng trong môi trường mạng

Mạng là mối liên kết giữa người sử dụng, ứng dụng, và cơ sở dữ liệu, nó là mắt xích quan trọng trong bảo mật Những kẻ tấn công thích tấn công vào mạng để

ăn cắp dữ liệu từ xa, bằng những cách sau:

Xét với Oracle, TNS Listener là một process luôn đảm nhiệm việc kết nối mạng với cơ sở dữ liệu Có 2 điểm quan trọng về listener:

- Nó là chương trình đóng vai trò quan trọng và cần được chạy trong suốt thời gian

- Nó nằm ở giữa ứng dụng và cơ sở dữ liệu, điều đó có nghĩa là tồn tại một nguy cơ lớn bị tấn công Những chương trình của người dùng có thể giao tiếp với listener trực tiếp ngay mà không cần có tài khoản trong cơ sở dữ liệu

Trang 21

Để bảo vệ listener process việc đầu tiên chính là dùng password để bảo vệ

nó Việc thứ hai chính là giới hạn những thông tin trạng thái mà listener có thể in ra nếu có yêu cầu, bởi vì listener có thể xuất ra mọi thông tin mà nó biết về trạng thái hiện tại Những thông tin này cần thiết không chỉ cho DBA mà cả tin tặc

Đồng thời, một việc cũng rất cần để bảo vệ listener chính là thay đổi port mặc định của nó Khi cài một hệ cơ sở dữ liệu thì nó luôn dùng một số port mặc định để giao tiếp, những port này cũng được các tin tặc biết đến Nếu listener đã đổi

port giao tiếp, một người nào đó đang quét (scan) mạng để tìm những port đang mở,

khi đó mặc dù phát hiện ra có process đang chạy trên một port nào đó nhưng có thể

họ vẫn không biết process đó là gì, có phải listener hay không Một lợi điểm khác của việc đổi port đó là việc scan tất cả các port sẽ là một cảnh báo cho hệ thống biết rằng có người đang muốn tấn công hệ thống

2.4.2 Phân loại dựa vào các yếu tố ảnh hưởng trực tiếp tới hệ cơ sở dữ liệu

Như đã nói trên, việc phân loại các lỗ hổng dựa trên thành phần của hệ thống thông tin đôi khi không phản ánh đầy đủ sự ảnh hưởng của nó tới hệ cơ sở dữ liệu, chính vì vậy một số tác giả đã phân loại các lỗ hổng dựa trên các tác động trực tiếp tới hệ cơ sở dữ liệu[10] như sau :

2.4.2.1 Lỗ hổng bỏ qua xác thực trong giao thức mạng (Unauthenticated Flaws

in Network Protocols)

Đây là loại lỗ hổng đặc biệt nguy hiểm vì nó cho phép tấn công vào hệ thống trực tiếp mà không cần phải thông qua quá trình xác thực, phổ biến nhất là các lỗ hổng tràn bộ đệm

Có lẽ lỗ hổng nổi tiếng nhất trong loại này là sâu ‘Slammer’ [10] ảnh hưởng

đến cơ sở dữ liệu SQL Server của Microsoft, nó liên quan đến các tác vụ phân giải dịch vụ qua giao thức UDP với cổng mặc định là 1434, nó làm lộ ra các hàm thực thi, hai trong số các hàm đó dính lỗi tràn bộ đệm (CAN-2002-0649) là tiền đề cho sâu Slammer tấn công SQL Server

Trang 22

Oracle cũng không miễn nhiễm với lỗi này, David Litchfield [10] đã tìm ra một lỗi ngiêm trọng trong các biến môi trường mở rộng trong cơ chế “extproc” của Oracle có thể được khai thác mà không cần username và password (CAN-2004-1363) Mark Litchfield của NGS cũng tìm ra một lỗi trong các đoạn mã xử lý quá trình xác thực của người dùng là với một tên người dùng quá dài sẽ làm kích hoạt một lỗ hổng tràn bộ đệm (CAN-2003-0095)

Để phòng chống lại loại lỗi này việc trước tiên là phải cập nhập thường xuyên các bản vá lỗi, thứ hai, cố gắng bảo đảm rằng chỉ có các máy đáng tin cậy được phép truy cập vào máy chủ chứa hệ cơ sơ dữ liệu của bạn bằng cách thiết lập các giao thức kết nối bảo đảm như là SSH hay Ipsec Vấn đề này đòi hỏi sự khéo léo tùy thuộc vào vai trò và chức năng của hệ cơ sở dữ liệu

Một cách bảo vệ khác nữa là trang bị hệ thống phát hiện xâm nhập IDS ( Intrusion Detection System) hoặc hệ thống chống xâm nhập IPS (Intrusion Prevention System), các hệ thống này sẽ được đề cập chi tiết trong các chương sau Các hệ thống này sẽ cung cấp các cảnh báo, cũng như thực hiện một số biện pháp

cơ bản để giúp bạn xác định và phòng chống các mối nguy hại tiềm ẩn dựa trên một

số dấu hiệu nhận biết có sẵn của nó hoặc dựa vào việc khai phá dữ liệu

2.4.2.2 Lỗ hổng xác thực trong giao thức mạng (Authenticated Flaws in Network Protocols)

Trái với lỗ hổng bỏ qua việc xác thực, các lỗ hổng xác thực là các loại lỗ hổng chỉ khai thác được khi có được username và password hợp lệ Tuy nhiên hiện nay loại lỗ hổng này ít xuất hiện hơn do các hệ thống xác thực ngày càng hoàn thiện hơn và sự ý thức về việc bảo về tài khoản của người dùng cũng cao hơn

Các lỗ hổng này có xu hướng tập trung ở các ứng dụng khai thác cơ sở dữ liệu trên web, trong đó phổ biến là việc truyền dữ liệu không mã hóa làm lộ ra tài khoản người dùng

Cách tốt nhất để bảo vệ hệ cơ sở dữ liệu chống lại các nguy cơ này là phải

Trang 23

này phải có mật khẩu mạnh, không sử dụng các giao thức xác thực không được mã hóa Ngoài ra nên sử dụng nhật kí ghi lại các quá trình xác thực vì nó có thể giúp phát hiện ai đó đang cố gắng dùng phương thức brute-force để bẻ mật khẩu và cũng

là nơi bắt đầu tìm kiếm một vấn đề nghi ngờ nào đó

2.4.2.3 Lỗ hổng trong các giao thức xác thực ( Flaws in Authentication Protocols )

Một số hệ cơ sở dữ liệu sử dụng các giao thức xác thực không an toàn, như là mật khẩu không được mã hóa hoặc các giao thức mã hóa không đủ mạnh và dễ dàng

bị bẻ gãy Ví dụ hệ cơ sở dữ liệu Sysbase mặc định lưu password dưới dạng plaintext, tức là có thể nhìn thấy được mà không cần giải mã Hệ cơ sở dữ liệu SQL server mặc định mã hóa password bằng cách chuyển đổi (swapping) các nibbles ( 4bit, một nửa của byte) và XOR nó với 0xA5 Cả hai điều này đễ dễ dàng bị bẻ khóa

Lỗ hổng này đặc biệt nguy hiểm bởi vì nhìn vào hệ thống ta thấy chúng vẫn hoạt động bình thường Các tin tặc không cần tấn công vào các lỗ hổng nào mà chỉ cần bắt giữ các gói tin truyền username và password rồi giải mã và sử dụng chúng

để truy cập vào hệ thống một cách hợp lệ để ăn cắp dữ liệu

Để phòng chống lại loại lỗ hổng này, cách tốt nhất là hãy đảm bảo hệ thống của bạn cập nhật các bản vá lỗi kịp thời, nếu hệ thống cơ sở dữ liệu không có cơ chế xác thực mạnh, hãy sử dụng một vài giao thức truyền dữ liệu bảo đảm như là SSH hay IPsec vv

2.4.2.4 Truy cập vào các tính năng không được phép (Unauthenticated Access

to Functionlity)

Một số thành phần tích hợp với cơ sở dữ liệu cho phép truy cập không cần xác thực vào một số tính năng nào đó mà đáng lẽ ra nó cần phải xác thực mới được phép truy cập vào David Flitchfield đã phát hiện một lỗi như vậy với tính năng TNS Listener của Oracle 8 và 9i, qua đó, một tài khoản không cần xác thực có thể tải và thực thi một chức năng bất kì nào đó thông qua cơ chế “extproc” của Oracle

Trang 24

(CVE-2002-0567) Như vậy tin tặc có thể lơi dụng tính năng này để nạp vào các thư viện như là Libc hoặc msvcrt ( tùy thuộc vào mục đích và hệ điều hành) và tiến hành thực thi các chức năng hệ thống cho phép tin tặc có quyền của quản trị

Để bảo đảm tránh các lỗi này, cần phải cập nhật các bản vá lỗi và đồng thời phải thiết lập mật khẩu bảo vệ khi truy cập vào một số tính năng quan trọng trong

Một ví dụ điển hình của loại lỗi này chính là lỗi tràn trong tác vụ pwdencryt của Microsoft SQL server được khám phá bởi Martin Rakhmanoff (CAN-2002-0624) Đây là một lỗi tràn stack trong hàm giải mã mật khẩu của SQL server Thông qua nó có thể tấn công và chiếm đoạt tài khoản quản trị

Oracle cũng có một số lỗi liên quan đến loại này, Mark Litchfield tìm ra một lỗi trong các hàm thời gian TIME_ZONE như là NUMTOYMINTERVAL, NUMTODSINTERVAL, FROM_TZ có thể có các lỗi tràn bộ đệm cho phép tin tặc

Trang 25

Cách tốt nhất để phòng chống loại lỗi này là phải cập nhật thường xuyên các bản vá, ngoài ra không cho phép một tài khoản không được tin tưởng thực hiện các câu truy vấn vào hệ cơ sở dữ liệu, tuy nhiên ngay cả khi thực hiện các biện pháp đó vẫn còn tồn tại lỗ hổng trong quá trình thao tác dữ liệu vô tình tạo ra, đây cũng chính là tiền đề để tôi thực hiện một chương trình nhằm kiểm tra xem các hàm, các thủ tục, script, các gói do người sử dụng ( người quản trị dữ liệu, người sử dụng cao cấp vv v) tạo ra trong quá trình thao tác dữ liệu có các đoạn mã nguy hiểm có thể dẫn đến lỗi tràn bộ đệm hay SQL injection hay không

2.4.2.6 Nâng quyền dựa vào SQL injection ( Privilege Elevation via SQL Injection )

SQL Injection là một lỗi thường hay mắc phải trên các trang web cho phép khai thác dữ liêu của trang web đó, tuy nhiên trong các cơ sở dữ liệu, các thành phần tích hợp của nó đôi khi cũng bị mắc lỗi này và cho phép một tài khoản bình thường có thể khai thác dữ liệu mà đáng ra ở cấp cao hơn mới có quyền Các bản vá lỗi kịp thời là biện pháp tốt nhất để phòng tránh Chi tiết vấn đề này sẽ được thảo luận kĩ hơn trong phần sau

2.4.2.7 Các vấn đề về nâng quyền trong hệ thống cục bộ ( Local Privilege Elevation Issues )

Là các lỗ hổng mặc dù không ảnh hưởng trực tiếp tới cơ sở dữ liệu nhưng nó lại cho phép một tài khoản bình thường của cơ sở dữ liệu có được các quyền quản trị trên hệ điều hành cài nó, và khi có được quyền này rồi thì rất dễ dàng khai thác được ngược lại cơ sở dữ liệu Để có thể đối phó với loại lỗi này tốt nhất là chạy cơ

sở dữ liệu với tài khoản hạn chế trong hệ điều hành nhưng cấp thêm quyền “đọc” và

“ghi” đồng thời cập nhật tốt các bản sửa lỗi

2.5 Tổng quan về SQL injection

Trang 26

Trong phần này trình bày về SQL injection, đây là một lỗi rất phổ biến và được tin tặc sử dụng nhằm khai thác dữ liệu từ các cơ sở dữ liệu Hầu hết các hệ cơ

sở dữ liệu đều mắc lỗi này

2.5.1 Khái niệm SQL Injection

Khi triển khai các ứng dụng web trên Internet, nhiều người vẫn nghĩ rằng việc đảm bảo an toàn, bảo mật nhằm giảm thiểu tối đa khả năng bị tấn công từ các tin tặc chỉ đơn thuần tập trung vào các vấn đề như chọn hệ điều hành, hệ quản trị cơ

sở dữ liệu, webserver sẽ chạy ứng dụng, mà quên mất rằng ngay cả bản thân ứng dụng chạy trên đó cũng tiềm ẩn một lỗ hổng bảo mật rất lớn Một trong số các lỗ hổng này đó là SQL injection Hiện nay các quản trị trang web đã chú trọng cập nhật các bản vá lỗi từ các phần mềm hệ thống, nhưng việc kiểm tra và vá các lỗi của các ứng dụng lại rất ít được quan tâm Chính vì vậy không ít hệ thống thường xuyên

bị tấn công và đa số là các lỗi SQL injection Vậy SQL injection là gì ?

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 trong việc kiểm tra dữ liệu nhập trong các ứng dụng web và các thông báo lỗi của

hệ quản trị cơ sở dữ liệu để "tiêm vào" (inject) và thi hành các câu lệnh SQL bất

hợp pháp (không được người phát triển ứng dụng lường trước) Hậu quả của nó rất tai hại vì nó cho phép những kẻ tấn công có thể thực hiện các thao tác xóa, hiệu chỉnh, … do có toàn quyền trên cơ sở dữ liệu của ứng dụng, thậm chí là server mà ứng dụng đó đang chạy Lỗi này thường xảy ra trên các ứng dụng web có dữ liệu được quản lí bằng các hệ quản trị cơ sở dữ liệu như SQL Server, MySQL, Oracle, DB2, Sysbase

2.5.2 Các dạng tấn công bằng SQL Injection

Có bốn dạng thông thường bao gồm: vượt qua kiểm tra lúc đăng nhập

(authorization bypass), sử dụng câu lện SELECT, sử dụng câu lệnh INSERT, sử

dụng các stored-procedures [23]

2.5.2.1 Dạng tấn công vượt qua kiểm tra đăng nhập

Trang 27

Với dạng tấn công này, tin tặc có thể dễ dàng vượt qua các trang đăng nhập nhờ vào lỗi khi dùng các câu lệnh SQL thao tác trên cơ sở dữ liệu của ứng dụng web

Xét một ví dụ điển hình, thông thường để cho phép người dùng truy cập vào các trang web được bảo mật, hệ thống thường xây dựng trang đăng nhập để yêu cầu người dùng nhập thông tin về tên đăng nhập và mật khẩu Sau khi người dùng nhập thông tin vào, hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay không

để quyết định cho phép hay từ chối thực hiện tiếp

Trong trường hợp này, có thể dùng hai trang, một trang HTML để hiển thị form nhập liệu và một trang ASP dùng để xử lí thông tin nhập từ phía người dùng

Ví dụ:

Trang 28

Thoạt nhìn, đoạn mã trong trang execlogin.asp dường như không chứa bất cứ một lỗ hổng về an toàn nào Người dùng không thể đăng nhập mà không có tên đăng nhập và mật khẩu hợp lệ Tuy nhiên, đoạn mã này thực sự không an toàn và là tiền đề cho một lỗi SQL injection Đặc biệt, chỗ sơ hở nằm ở chỗ dữ liệu nhập vào

từ người dùng được dùng để xây dựng trực tiếp câu lệnh SQL Chính điều này cho phép những kẻ tấn công có thể điều khiển câu truy vấn sẽ được thực hiện Ví dụ, nếu người dùng nhập chuỗi sau vào trong cả 2 ô nhập liệu username/password của

trang login.htm là: ' OR ' ' = ' ' Lúc này, câu truy vấn sẽ được gọi thực hiện là:

SELECT * FROM T_USERS WHERE USR_NAME ='' OR ''='' and USR_PASSWORD= '' OR ''=''

Câu truy vấn này là hợp lệ và sẽ trả về tất cả các bản ghi của T_USERS và đoạn mã tiếp theo xử lí người dùng đăng nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ

2.5.2.2 Dạng tấn công sử dụng câu lệnh SELECT

Dạng tấn công này phức tạp hơn Để thực hiện được kiểu tấn công này, kẻ tấn công phải có khả năng hiểu và lợi dụng các sơ hở trong các thông báo lỗi từ hệ thống để dò tìm các điểm yếu khởi đầu cho việc tấn công

Xét một ví dụ rất thường gặp trong các website về tin tức Thông thường, sẽ

có một trang nhận ID của tin cần hiển thị rồi sau đó truy vấn nội dung của tin có ID

này Ví dụ: http://www.myhost.com/shownews.asp?ID=123 Mã nguồn cho chức

năng này thường được viết khá đơn giản theo dạng

Trang 29

Trong các tình huống thông thường, đoạn mã này hiển thị nội dung của tin có

ID trùng với ID đã chỉ định và hầu như không thấy có lỗi Tuy nhiên, giống như ví

dụ đăng nhập ở trước, đoạn mã này để lộ sơ hở cho một lỗi SQL injection khác Kẻ tấn công có thể thay thế một ID hợp lệ bằng cách gán ID cho một giá trị khác, và từ

đó, khởi đầu cho một cuộc tấn công bất hợp pháp, ví dụ như: 0 OR 1=1 (nghĩa là, http://www.myhost.com/shownews.asp?ID=0 or 1=1)

Câu truy vấn SQL lúc này sẽ trả về tất cả các article từ bảng dữ liệu vì nó sẽ thực hiện câu lệnh:

SELECT * FROM T_NEWS WHERE NEWS_ID=0 or 1=1

Một trường hợp khác, ví dụ như trang tìm kiếm Trang này cho phép người dùng nhập vào các thông tin tìm kiếm như Họ, Tên, … Đoạn mã thường gặp là:

Trang 30

Tương tự như trên, tin tặc có thể lợi dụng sơ hở trong câu truy vấn SQL để nhập vào trường tên tác giả bằng chuỗi giá trị:

' UNION SELECT ALL SELECT OtherField FROM OtherTable WHERE ' '='

như lệnh DROP TABLE Ví dụ như: ' DROP TABLE T_AUTHORS – Để biết

được ứng dụng web nào bị lỗi dạng này được, hãy nhập vào chuỗi (*) như trên, nếu

hệ thống báo lỗi về cú pháp dạng: Invalid object name “OtherTable”; ta có thể biết chắc là hệ thống đã thực hiện câu SELECT sau từ khóa UNION, vì như vậy mới có thể trả về lỗi mà ta đã cố tình tạo ra trong câu lệnh SELECT

Nguyên nhân làm thế nào có thể biết được tên của các bảng dữ liệu mà thực hiện các thao tác phá hoại khi ứng dụng web bị lỗi SQL injection Một cách đơn giản, bởi vì trong SQL Server, có hai đối tượng là sysobjects và syscolumns cho phép liệt kê tất cả các tên bảng và cột có trong hệ thống Ta chỉ cần chỉnh lại câu

Trang 31

' UNION SELECT name FROM sysobjects WHERE xtype = 'U' là có thể liệt

kê được tên tất cả các bảng dữ liệu

2.5.2.3 Dạng tấn công sử dụng câu lệnh INSERT

Thông thường các ứng dụng web cho phép người dùng đăng kí một tài khoản

để tham gia Chức năng không thể thiếu là sau khi đăng kí thành công, người dùng

có thể xem và hiệu chỉnh thông tin của mình SQL injection có thể được dùng khi

hệ thống không kiểm tra tính hợp lệ của thông tin nhập vào

Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng: INSERT INTO TableName VALUES('Value One', 'Value Two', 'Value Three') Nếu đoạn mã xây dựng câu lệnh SQL có dạng :

Thì chắc chắn sẽ bị lỗi SQL injection, bởi vì nếu nhập vào trường thứ nhất ví dụ

như: ' + (SELECT TOP 1 FieldName FROM TableName) + ' Lúc này câu truy vấn sẽ là: INSERT INTO TableName VALUES(' ' + (SELECT TOP 1

FieldName FROM TableName) + ' ', 'abc', 'def') Khi đó, lúc thực hiện

lệnh xem thông tin, xem như người dùng đã yêu cầu thực hiện thêm một lệnh nữa

đó là: SELECT TOP 1 FieldName FROM TableName

2.5.2.4 Dạng tấn công sử dụng stored-procedures

Việc tấn công bằng stored-procedures sẽ gây tác hại rất lớn nếu ứng dụng được thực thi với quyền quản trị hệ thống 'sa' Ví dụ, nếu thay đoạn mã tiêm vào

Trang 32

dạng: ' ; EXEC xp_cmdshell ‘cmd.exe dir C: ' Lúc này hệ thống sẽ thực hiện

lệnh liệt kê thư mục trên ổ đĩa C:\ cài đặt server Việc phá hoại kiểu nào tuỳ thuộc vào câu lệnh đằng sau cmd.exe

2.5.3 Cách phòng tránh

Như vậy, có thể thấy lỗi SQL injection khai thác những bất cẩn của các lập trình viên phát triển ứng dụng web khi xử lí các dữ liệu nhập vào để xây dựng câu lệnh SQL Tác hại từ lỗi SQL injection tùy thuộc vào môi trường và cách cấu hình

hệ thống Nếu ứng dụng sử dụng quyền dbo (quyền của người sở hữu cơ sở dữ liệu - owner) khi thao tác dữ liệu, nó có thể xóa toàn bộ các bảng dữ liệu, tạo các bảng dữ liệu mới, … Nếu ứng dụng sử dụng quyền sa (quyền quản trị hệ thống), nó có thể điều khiển toàn bộ hệ quản trị cơ sở dữ liệu và với quyền hạn rộng lớn như vậy nó

có thể tạo ra các tài khoản người dùng bất hợp pháp để điều khiển hệ thống của bạn

Để phòng tránh, có thể thực hiện ở hai mức sau :

2.5.3.1 Kiểm soát chặt chẽ dữ liệu nhập vào

Để phòng tránh các nguy cơ có thể xảy ra, cần thiết phải bảo vệ các câu lệnh SQL là bằng cách kiểm soát chặt chẽ tất cả các dữ liệu nhập nhận được từ đối tượng Request (Request, Request.QueryString, Request.Form, Request.Cookies, and Request.ServerVariables) Ví dụ, có thể giới hạn chiều dài của chuỗi nhập liệu, hoặc xây dựng hàm EscapeQuotes để thay thế các dấu nháy đơn bằng 2 dấu nháy đơn như:

Trong trường hợp dữ liệu nhập vào là số, lỗi xuất phát từ việc thay thế một

Trang 33

tránh điều này, hãy kiểm tra dữ liệu có đúng kiểu hay không bằng hàm IsNumeric()

Ngoài ra có thể xây dựng hàm loại bỏ một số kí tự và từ khóa nguy hiểm như: ;, ,

select, insert, xp_, … ra khỏi chuỗi dữ liệu nhập từ phía người dùng để hạn chế các

tấn công dạng này:

2.5.3.2 Thiết lập cấu hình an toàn cho hệ quản trị cơ sở dữ liệu

Cần có cơ chế kiểm soát chặt chẽ và giới hạn quyền xử lí dữ liệu đến tài khoản người dùng mà ứng dụng web đang sử dụng Các ứng dụng thông thường nên tránh dùng đến các quyền như dbo hay sa Quyền càng bị hạn chế, thiệt hại càng ít Ngoài ra để tránh các nguy cơ từ SQL Injection attack, nên chú ý loại bỏ bất kì thông tin kĩ thuật nào chứa trong thông điệp chuyển xuống cho người dùng khi ứng dụng có lỗi Các thông báo lỗi thông thường tiết lộ các chi tiết kĩ thuật có thể cho phép kẻ tấn công biết được điểm yếu của hệ thống

Trang 34

CHƯƠNG 3: CÁC KĨ THUẬT PHÁT HIỆN LỖ HỔNG BẢO MẬT TRONG HỆ CƠ SỞ DỮ LIỆU

Trong phần này sẽ tìm hiểu một số kĩ thuật phát hiện lỗ hổng trong hệ cơ sở

dữ liệu, phổ biến nhất là hai kĩ thuật Penetration Testing (hay còn gọi là Pentesting)

và Data mining, trong đó kĩ thuật Pentesting được sử dụng rộng rãi nhất trong việc kiểm tra bảo mật hệ thống vì tính dễ sử dụng và uyển chuyển, hầu hết các công cụ phát hiện lỗ hổng bảo mật trên thế giới hiện nay đều sử dụng phương pháp này Data mining là một kĩ thuật phức tạp hơn, được ứng dụng rất rộng rãi trong nhiều lĩnh vực khác nhau, trong lĩnh vực bảo mật, Data mining được áp dụng chủ yếu trong các hệ thống chống/phát hiện xâm nhập IPS/IDS

3.1 Penetration Testing

3.1.1 Khái niệm về Pentesting

Một cách tổng quát Pentesting được định nghĩa như là một tập hợp các thủ tục chuẩn được thực hiện nhằm vượt qua các hệ thống kiểm soát an ninh của hệ thống với mục đích kiểm tra xem hệ thống có kháng cự lại được các cuộc tấn công không chỉ từ bên ngoài mà còn cả ở bên trong hay không [16]

Pentesting được thực hiện nhằm tìm ra các điểm yếu của hệ thống và xác định xem hệ thống phản ứng thế nào khi bị tấn công vào các điểm yếu đó, cần phải nói thêm rằng khi hệ thống có một điểm yếu thì không có nghĩa là hệ thống có lỗ hổng mà lỗ hổng chỉ thực sự xuất hiện khi điểm yếu nào đó được khai thác thành công, Pentesting sẽ thực hiện nhiều bài kiểm tra bao gồm hàng loạt các kiểu tấn công khác nhau vào hệ thống Dựa vào sự thành công cũng như thất bại của các cuộc tấn công đó sẽ xác định mức độ an toàn của hệ thống

Mục đích của Pentesting là nhằm kiểm tra mức độ chịu đựng của hệ thống chính vì vậy các cuộc tấn công thử nghiệm này luôn sử dụng các kĩ thuật và các thủ thuật của một tin tặc thực sự Nếu cuộc tấn công thành công, chứng tỏ đã có một lỗ

Trang 35

hổng Điều này cho phép hệ thống tìm kiếm và giảm thiểu các điểm yếu bảo mật trước khi hệ thống bị một cuộc tấn công thực sự từ tin tặc

Pentesting có thể được chia là ba loại như sau :

Black-box test : Người kiểm tra (tester) được giả sử rằng họ không biết gì về

hệ thống do đó họ cần thu thập thông tin và tiến hành các công việc tấn công gần như là một tin tặc thật sự, ví dụ tester chỉ biết địa chỉ web của hệ thống

và cố gắng sử dụng mọi biện pháp nhằm tìm kiếm cũng như khai thác thông

tin để lấy cắp thông tin quan trọng của hệ thống

White-box test : Ở kiểu kiểm tra này tester có được đầy đủ thông tin về hệ

thống như là cách tổ chức hệ thống mạng máy tính như thế nào, danh sách các máy trạm, thông tin về các người quản trị, vận hành cũng như là các ứng dụng chạy trên hệ thống Mặc dù điều này không thể hiện đây là một cuộc tấn công từ bên ngoài của tin tặc nhưng nó thể hiện một kịch bản xấu nhất –

Hệ thống bị tấn công bởi một tin tặc thu thập được đầy đủ thông tin

Gray-box test : hay còn có tên gọi khác là crytal-box test, ở đây giả lập một

tình huống đặc thù, hệ thống bị tấn công từ bên trong nội bộ, tester được cấp một tài khoản hợp lệ để truy cập vào hệ thống và tiến hành khai thác thông

tin nằm ngoài giới hạn tài khoản được cấp cho phép

3.1.2 Các bước thực hiện Pentesting

Bao gồm năm bước sau

Trang 36

Hình 3 1 Các bước trong pentesting

B ước 1: Thu thập thông tin

Ở bước này tester thu thập càng nhiều thông tin về hệ thống càng tốt ví dụ hệ điều hành nào đang chay DBMS, tên DBMS, version DBMS, địa chỉ IP của hệ thống v v Có hai cách thu thập thông tin là chủ động và bị động, chủ động là sử dụng các công cụ như nslookup để tìm hiểu về các thông tin của hệ thống, sử dụng DNS để dò tìm địa chỉ IP cũng như nơi đặt máy chủ chứa DBMS Bị động là thu thập các thông tin được đưa ra trên mạng tin tức, bolg vv.v

B ước 2 Tìm kiếm lỗ hổng hay còn gọi là Scanning

Từ những thông tin thu thập được ở bước 1, tester bắt đầu sử dụng các công

cụ, các biện pháp nghiệp vụ để tìm kiếm trong hệ thống ví dụ như sử dụng các công

cụ dò tìm lỗ hổng Nmap, Nessus hoặc tự viết các script dựa trên kinh nghiệm vv

Thu thập thông tin

Tìm kiếm điểm yếu

Đánh giá kết quả

và đưa ra báo cáo Giả lập tấn công

Xóa nhật kí tấn công

Trang 37

Mục đích của bước này là tìm kiếm xem hệ thống đang có các vấn đề gì về bảo mật hay không hoặc có ẩn chứa nguy cơ gì hay không

B ước 3 Giả lập tấn công

Ở giai đoạn này tester tiến hành khai thác các điểm yếu đã phát hiện được trong bước 2 , nếu khai thác thành công, hệ thống có lỗ hổng

B ước 4 Đánh giá kết quả và đưa ra báo cáo

Sau quá trình giả lập tấn công, tester sẽ lập báo cáo đánh giá các kết quả thu được và đưa lên cho người quản lý nhằm đưa ra các giải pháp phù hợp để nâng cấp, cập nhật hệ thống

B ước 5 Xóa nhật kí

Trong tất cả các quá trình xâm nhập, hệ thống sẽ tự động ghi lại bởi nhật kí

tự động của nó, việc cuối cùng của tester là phải xóa hết toàn bộ các nhật kí này vì

nó cho thấy rõ lỗ hổng đang tồn tại, nếu nhật kí này bị một tin tặc thật sự tấn công

và lấy được sẽ rất nguy hiểm

3.1.3 Ưu điểm và khuyết điểm

Ưu điểm :

Đây là giả pháp đơn giản, dễ sử dụng đồng thời thể hiện rõ được quá trình xâm nhập của một tin tặc vì nó giả lập như chính một tin tặc tấn công vào hệ thống

Ở đây việc giả lập không chỉ đơn thuần giả lập về mặt kĩ thuật mà còn có thể giả lập

về mặt xã hội ví dụ như sử dụng phương pháp Social engineering để tấn công vào con người Hiện nay, đa số các chương trình phát hiện lỗ hổng bảo mật hoặc các giải pháp bảo mật sử dụng phương pháp này

Khuy ết điểm:

Pentesting chỉ phát hiện được các lỗ hổng đã đặc tả trước, phương pháp này hoàn toàn không thể phát hiện được các lỗi tiềm ẩn, ngoài ra việc giả lập tấn như một tin tặc thật sự cũng có thể gây hại cho hệ thống, ví dụ : Làm treo hệ thống, xóa

Trang 38

mất cơ sở dữ liệu, do đó khi sử dụng phương pháp này, phải kiểm soát chặt chẽ nhưng gì chúng ta đang làm

3.2 Khai phá dữ liệu

3.2.1 Khái niệm về khai phá dữ liệu

Khai phá dữ liệu là tiến trình khám phá các thông tin khả dụng, tiềm ẩn trong các khối dữ liệu lớn, Fayyad 1996 [14]

Cụ thể hơn: khai phá dữ liệu là quá trình tìm kiếm các mẫu mới, những thông tin tiềm ẩn mang tính dự đoán trong các khối dữ liệu lớn

Lượng thông tin tiềm ẩn, khả dụng có trong cơ sở dữ liệu thường rất ít so với khối lượng dữ liệu rất lớn

Khai phá dữ liệu thường dùng để giải quyết các bài toán như phân lớp, dự đoán, phân cụm Với bài toán phân lớp, các giải thuật phân loại sẽ học ra bộ phân loại dùng để phân các dữ liệu thành những lớp theo tiêu chí đã được xác định trước Tương tự vậy, lớp bài toán dự đoán sẽ học ra các bộ dự đoán Khi có dữ liệu mới đến, bộ dự đoán sẽ dựa trên thông tin đang có để đưa ra một giá trị số học cho hàm cần dự đoán

Khai phá dữ liệu thường dùng các kỹ thuật phân cụm và giải thuật tìm luật liên kết để giải quyết các bài toán trên Giải thuật “tìm kiếm liên kết” tìm kiếm các mối liên kết giữa các phần tử dữ liệu, ví dụ như nhóm các món hàng thường được mua kèm với nhau trong siêu thị Các kỹ thuật phân cụm sẽ nhóm các đối tượng dữ liệu

có tính chất giống nhau vào cùng một nhóm, ví dụ như phân hoạch dữ liệu tiếp thị hay xử lý sơ bộ tập dữ liệu thô

Các ứng dụng khai phá dữ liệu trong lĩnh vực bảo mật thông tin áp dụng những kĩ thuật khai phá như trên để giải quyết các vấn đề về bảo mật như Intrusion detection, auditing và forensics Trong auditing, dữ liệu bị khai phá rất lớn Việc áp dụng khai phá dữ liệu để phát hiện ra những patter bất thường Những dữ liệu để

Trang 39

3.2.2 Các bước trong khai phá dữ liệu

Hình 3 2 Các bước trong khai phá dữ liệu

B ước 1: Làm sạch dữ liệu

Từ khối dữ liệu khổng lồ, ta chỉ chọn lọc những dữ liệu cần thiết cho việc khai phá, loại bỏ những dữ liệu nhiễu và dư thừa

B ước 2: Chuyển đổi dữ liệu

Dữ liệu sẽ được chuyển đổi về dạng phù hợp cho việc khai phá bằng cách thực hiện các thao tác nhóm hoặc tập hợp

B ước 3: Khai phá dữ liệu

Đây là giai đoạn thiết yếu, trong đó các phương pháp thông minh sẽ được áp dụng để trích xuất ra các mẫu dữ liệu

B ước 4: Đánh giá mẫu

Trang 40

Đánh giá sự hữu ích của các mẫu biểu diễn tri thức dựa vào một số phép đo

B ước 5: Trình diễn dữ liệu

Sử dụng các kĩ thuật trình diễn và trực quan hoá dữ liệu để biểu diễn tri thức khai phá được cho người sử dụng

Trong bảo mật, kĩ thuật khai phá dữ liệu thường được áp dụng trong các hệ thống phát hiện và ngăn ngừa xâm nhập (IDS/IPS), đây là các hệ thống phức tạp, có khả năng nhận biết được các nguy cơ tiềm ẩn và chưa được công bố, do tính phức tạp của nó, tôi sẽ không đi sâu vào mà chỉ xin nói qua về các hệ thống này

3.2.3 Hệ thống phát hiện xâm nhập IDS

Khái ni ệm :Hệ thống phát hiện xâm nhập (Intrusion Detection System –

IDS) là hệ thống phần cứng hoặc phần mềm có chức năng tự động theo dõi các sự kiện xảy ra trên hệ thống máy tính, phân tích để phát hiện ra các vấn đề liên quan đến an ninh, bảo mật Khi mà số vụ tấn công, đột nhập vào các hệ thống máy tính, mạng ngày càng tăng, hệ thống phát hiện xâm nhập càng có ý nghĩa quan trọng và cần thiết hơn trong nền tảng bảo mật của các tổ chức

Các hệ thống IDS thực hiện việc kiểm soát một hệ thống bằng cách tìm kiếm các “dấu vết” nhất định của các hành vi Tuy nhiên, việc sử dụng phương pháp này hầu hết đều không thể phát triển các cơ sở dữ liệu đủ thông minh nhằm cảnh báo các hiểm hoạ tấn công Sở dĩ có điều này là do ba nguyên nhân Đầu tiên, các dấu hiệu này phải ở dạng hand-coded (nhập liệu thủ công) Các dấu hiệu tấn công đã được nhận dạng thì đã được mã hóa trong cơ sở dữ liệu, đối lập với các dấu hiệu mà IDS sử dụng để nhận biết hành vi hiện tại Các hệ thống như vậy có thể thấy rằng rất cứng nhắc Thứ hai, có vô vàn các phương thức tấn công cùng với các dị bản của

nó, như vậy cần phải có một cơ sở dữ liệu với kích thước vô tận để có thể phát hiện tất cả các tấn công có thể xảy ra Đương nhiên điều này là không thể thực hiện được

và một khi có bất kỳ một sự tấn công nào đấy không được nhận diện chính xác sẽ là một hiểm họa tiềm năng đối với hệ thống Vấn đề thứ ba là các phương pháp hiện

Ngày đăng: 01/02/2021, 14:23

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w