Đồ án Phương pháp tấn công vào trang web và cách phòng chống, xây dựng ứng dụng demo SQL injection

MỞ ĐẦU  
Ngày nay, khi Internet được phổ biến rộng rãi ,các tổ chức đều có 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à vi phạm ứ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 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 để 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 Internet, số  
lượng dịch 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 cập  
thông tin của Internet, thì các tài liệu chuyên môn bắt đầu đề cập đến nhiều vấn đề  
bảo đảm và an toàn dữ liệu cho các máy tính kết nối vào mạng Internet.  
thế vấn đề bảo đảm và an toàn dữ liệu cho các máy tính được kết nối vào mạng  
Internet là cần thiết nhằm mục đích bảo vệ dữ liệu, bảo vệ thông tin doanh nghiệp,  
người dùng và bảo vệ hệ thống.  
Tuy đã nhiều cố gắng từ các nhà lập trình Web nhưng vẫn không thể đảm bảo  
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 một vài khuôn khổ mà linh động 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.  
vậy, đề tài này được thực hiện với mục đích tìm hiểu, phân tích các lỗ hổng bảo  
mật trong các ứng dụng Web.  
* Mục tiêu và nhiệm vụ  
- Tìm hiểu các vấn đề liên quan đến hoạt động của một ứng dụng Web.  
- Tìm hiểu các kỹ thuật tấn công ứng dụng Web cơ bản như: XSS, Session, DOS.  
- Tìm hiểu và nghiên cứu cụ thể kỹ thuật tấn công chèn câu truy vấn SQL Injection  
và các giải pháp phòng ngừa.  
- Xây dựng ứng dụng Web Demo thể hiện các cách tấn công của kỹ thuật SQL  
Injection và đưa ra giải pháp fix các lỗ hổng trong chương trình.  
- Kết quả thực hiện: nắm bản chất và cách thức tấn công vào ứng dụng Web, áp  
dụng vào thực tế để hạn chế thấp nhất khả năng bị tấn công các ứng dụng Web sẽ  
triển khai.  
* Đối tượng phạm vi nghiên cứu  
- Cở sở thuyết liên quan của hoạt động ứng dụng Web.  
- Các mô hình tấn công đặc trưng vào ứng dụng Web.  
-1-  
- Kỹ thuật vượt qua cửa sổ đăng nhập.  
- Kỹ thuật lợi dụng các câu lệnh Select, Insert.  
- Kỹ thuật dựa vào các Stored Procedure.  
- Các giải pháp phòng ngừa ở mức quản trngười lập trình ứng dụng.  
- Ngôn ngữ ASP.NET, SQL Server 2005.  
* Phương pháp nghiên cứu  
- Tổng hợp tìm hiểu, nghiên cứu từ các tư liệu liên quan.  
- Phân tích, đánh giá các kỹ thuật tấn công. Đưa ra các giải pháp phòng ngừa ở các  
mức.  
- Thiết kế table cơ sở dữ liệu, xây dựng ứng dụng Web Demo thể hiện các cách tấn  
công của SQL Injection.  
* Ý nghĩa thực tiễn của đtài  
- Về mặt thuyết, đề tài thể hiện rõ các cách tấn công cơ bản thường được hacker  
sử dụng để tấn công vào các ứng dụng Web từ trước đến nay, và có thể sử dụng tiếp  
trong thời gian dài trong tương lai.  
- Về mặt thực tiển, với các cách tấn công của hacker như đã tìm hiểu, nghiên cứu  
trong báo cáo này, nếu áp dụng tốt các phương pháp phòng ngừa trong đề tài nêu ra  
sẽ góp phần nâng cao khả năng bảo vệ các ứng dụng Web trước nguy cơ tấn công  
của kẽ xấu.  
* Bố cục của báo cáo đồ án tốt nghiệp  
Báo cáo tốt nghiệp được chia thành 3 chương:  
- Chương 1: TỔNG QUAN VỀ WEB VÀ CÁC NGUY CƠ TẤN CÔNG ỨNG  
DỤNG WEB  
- Chương 2: MỘT SỐ PHƯƠNG PHÁP TẤN CÔNG VÀO TRANG WEB VÀ  
CÁCH PHỒNG CHỐNG  
- Chương 3: XÂY DỰNG ỨNG DỤNG DEMO SQL INJECTION  
-2-  
CHƯƠNG 1  
TỔNG QUAN VỀ WEB VÀ CÁC NGUY CƠ TẤN CÔNG  
ỨNG DỤNG WEB  
1.1 TỔNG QUAN VỀ WEB  
1.1.1 Khái niệm ứng dụng Web  
Ứng dụng Web là một ứng dụng chủ, khách sử dụng giao thức HTTP để  
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 sử dụng thường một trình duyệt web như  
Internet Explorer hay Netscape Navigator. Cũng thể một chương trình đóng  
vai trò đại 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-mial…  
Tốc độ phát triển của 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 cơ  
sở dữ liệu đơ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 và chạy trên máy chủ phân tán, kết nối đến nhiều nguồn dữ liệu.  
Dù có nhiều biến thể, một ứng dụng Web thông thường được cấu trúc như một  
ứng dụng ba lớp:  
Hình 1.1 Một số ứng dụng web thường kiến trúc  
-3-  
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  
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: nơi xử lý các ứ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, NET, 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ị dữ liệu (DBMS) chịu trách nhiệm  
quản lý các file dữ liệu quyền sử dụng.  
Hình 1.2 Mô hình hoạt động của một ứng dụng Web  
Kiến trúc một ứng dụng Web  
Trong đó :  
-
-
-
Trình duyệt: Internet Explorer, Nétcap Navigator  
Trình chủ : Apache, IIS….  
Hệ quản trị cơ sỡ dữ liệu : SQL, Server, MySQL, DB2, Access…  
Bên cạnh đó, một gải pháp dùng để bảo vệ một hệ thống mạng thường được sử  
dụng bức tường lửa, nó có vai trò như lớp rào chắn bên ngoài một hệ thống  
mạng chức năng chính của firewall là kiểm soát luồng thông tinh giữa các máy  
tính. Có thể xem là firewall như một bộ lộc thông tin, nó xác định cho phép một  
-4-  
máy tính này được truy xuất đến một máy tính khác hay không, hay một mạng này  
được truy xuất đến mạng kia hay không.  
Người ta thường dùng firewall vào mục đích:  
Cho phép hoặc cấm những dịch vụ truy xuất ra ngoài.  
Cho phép hoặc cấm những dịch vụ từ ngoài truy nhập vào trong.  
Kiểm soát địa chỉ truy nhập, cấm địa chtruy nhập.  
1.1.2 Các vấn đề liên quan đến ứng dụng Web  
1.1.2.1 Nguồn gốc phát triển ứng dụng Web  
Các ứng dụng Web được phát triển từ nhiều nguồn khác nhau, nên các lỗ hổng,  
các lỗi bảo mật cũng rất đa dạng. Tuy vậy, các ứng dụng Web chủ yếu được phát  
triển từ các nguồn chính sau đây:  
Người lập trình tự phát triển ứng dụng Web (Sử dụng các ngôn ngữ kịch bản  
để tạo ứng dụng, phát triển rộng rãi mà ít quan tâm đến quá trình phát triển  
ứng dụng an toàn. Thiếu đội ngũ lập trình với kỹ năng nhận biết phát triển  
ứng dụng tránh các lỗi bảo mật).  
Sử dụng ứng dụng Web từ nguồn mở (Thường không theo dõi và cập  
nhật các bản lỗi bảo mật).  
Phát triển ứng dụng Web từ một ứng dụng mở khác (Trường hợp này thường  
không kiểm tra lỗi bảo mật ứng dụng củ trước khi phát triển tiếp, nên vẫn tồn  
tại các lỗi bảo mật).  
1.2.1.2 Sự phát triển đa dạng của ứng dụng Web  
Ngày nay với sự phát triển không ngừng của Internet, các ứng dụng Web cũng  
phát triển đa dạng trên nhiều lĩnh vực: Cổng thông tin điện tử, báo tin tức điện tử,  
giao dịch tài chính ngân hàng, thị trường chứng khoán, trang thông tin điện tử  
doanh nghiệp,…  
1.1.3 Mô tả hoạt động của ứng dụng Web  
Đầ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ư: C,C++,java…  
hoặc trình chủ yêu cầu bộ diển dịc thực thi các trang ASP, JSP…theo yêu cầu của  
trình khách.  
-5-  
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 cơ sở dữ liệu, lưu các thông tin do trình khách gữi đến… từ đó trả về cho  
trình khách 1 luồng dữ liệu cố định dạng theo giao thức HTTP nó gồm 2 phần:  
Header mô tả các thông tin về gói dữ liệu 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ể 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 mô hình hình với firewall, luồng thông tin giữa trình chủ và trình khách  
luồng thông tin hợp lệ. thế, nếu hacker tìm thấy vài lỗ hổng trong ứng dụng  
Web thì firewall không còn hữu dụng trong việc ngăn chặn hacker này. 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  
tấn công trực tiếp hệ thống mạng, hệ điều hành. Tuy nhiên, hacker cũng 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ông  
liên quan khác.  
1.2 CÁC KHÁI NIỆM THUẬT NGỮ LIÊN QUAN  
1.2.1 Hacker  
Hacker là một thuật ngữ dùng để chỉ những chuyên gia về máy tính. Hacker  
không tạo ra các kẻ hở cho hệ thống, nhưng hacker lại những người am hiểu về  
hệ điều hành, hệ quản trị dữ liệu, các ngôn ngữ lập trình…. Họ sử dụng kiến thức  
của mình trong việc tìm tòi và khai thác các lỗ hổng của hệ thống mạng.  
Một số hacker chỉ dừng lại việc phát hiện và thông báo lổi tìm được cho những  
nhà bảo mật hay người phát triển chương trình, họ được xem như là WhiteHat  
(Hacker mũ trắng). Một số Hacker dựa vào lỗ hổng thực hiện việc khai thác trái  
phép nhằm mục đích phá hoại hay mưu lợi riêng, những người này bị xem như là  
BlackHat (Hacker mũ đen).  
1.2.2 Giao thức HTTP và HTTPS  
HTTP là chữ viết tắt từ HyperText Transfer Protocol (giao thức truyền tải siêu  
văn bản). Nó là giao thức cơ bản mà World Wide Web sử dụng. HTTP xác định  
cách các thông điệp (các file văn bản, hình ảnh đồ hoạ, âm thanh, video,…) được  
định dạng truyền tải ra sao, và những hành động nào mà các Web server và các  
trình duyệt Web phải làm để đáp ứng các lệnh. Khi gõ một địa chỉ Web URL vào  
trình duyệt Web, một lệnh HTTP sẽ được gửi tới Web server để ra lệnh hướng  
dẫn nó tìm đúng trang Web được yêu cầu và kéo về mở trên trình duyệt Web.  
-6-  
Tóm lại, HTTP là giao thức truyền tải các file từ một Web server vào một trình  
duyệt Web để người dùng có thể xem một trang Web đang hiện diện trên Internet.  
HTTP là một giao thức ứng dụng của bộ giao thức TCP/IP (các giao thức nền tảng  
cho Internet).  
HTTP header là phần đầu (header) của thông tin mà trình khách và trình chủ  
gữi cho nhau. Những thông tin của trình khách gữi cho trình chủ được gọi là HTTP  
requests (yêu cầu) còn trình chủ gữi cho trình là HTTP responses (trả lời). Thông  
thường một HTTP header gồm nhiều dòng, mỗi dòng dựa trên tham số và giá trị.  
Một số tham số thể dùng trong cả header yêu cầu và header trả lời, còn số khác  
chỉ được dùng riêng trong từng loại.  
GET /tintuc/homnay.asp HTTP/1.1  
Accept: */*  
Accept-Language: en-us  
Connection: Keep-Alive  
Host: localhost  
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)  
Accept-Encoding: gzip, deflate  
Dòng đầu là dòng yêu cầu cho biết phương thức yêu cầu (GET hoặc POST), địa  
chỉ yêu cầu (/tintuc/homnay.asp) và phiên bản HTTP .  
Tiếp theo là các tham số. Chẳng hạn như :  
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.  
Header của HTTP request sẽ kết thúc bằng một dòng trống.  
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  
-7-  
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, mã trạng  
thái (200) và trạng thái (OK) Tiếp theo là các tham số. 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.  
HTTPS (Securety HTTP), là một sự kết hợp giữa giao thức HTTP và giao thức  
bảo mật SSL hay TLS cho phép trao đổi thông tin một cách bảo mật trên Internet.  
Các kết nối HTTPS thường được sử dụng cho các giao dịch thanh toán trên World  
Wide Web và cho các giao dịch nhạy cảm trong các hệ thống thông tin công ty,  
trong đó dữ liệu cần phải được an toàn. HTTPS không nên nhầm lẫn với Secure  
HTTP (S-HTTP) quy định trong RFC 2660.  
Theo hai khái niệm ở trên, ta có thể thấy nếu trang Web có địa chỉ bắt đầu  
bằng http:// ” thì có nghĩa rằng trang Web không an toàn. Nói cách khác, một  
người nào đó thể nghe lén những gì trao đổi với trang Web và có thể lấy những  
dữ kiện gửi đi từ máy của bạn đến trang Web như tên tuổi, địa chỉ, số thẻ tín  
dụng,… Nhưng nếu địa chỉ của trang Web bắt đầu bằng https:// ” thì điều này có  
nghĩa là liên lạc an toàn với server của trang Web và người ta không thể nghe lén và  
trộm những thông tin gửi đi.  
1.2.3 Session  
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ạng thái làm việc giữa trình duyệt với trình chủ. Sự 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 đã 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ì SesionID thường được lưu vào:  
Biến trên URL  
-8-  
Biến ẩn form  
Cookie  
Phiên làm việc chỉ tồn tại trong một khoảng thời gian cho phép, thời gian này  
được cấu hình quy định tại trình chủ hay vớ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.  
1.2.4 Cookie  
Cookie là những phần dữ liệu nhỏ cấu trúc được chia sẻ giữa trình chủ và  
trình duyệt giữa người dùng.  
Các Cookie được lưu trữ dưới dạ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 họ đi qua trong trang. Những thông tin này có thể bao gồm tên,  
định dạng 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 thể dùng lại những  
thông tin trong cookie (như thông tin liên quan đến việc đăng nhập vào Yahoo  
Messenger..) mà người dùng không phải làm lại những thao tác đăng nhập hay phải  
cung cấp lại các thông tin khác.  
Persistent và Secure  
Persistent và Non-Secure  
Non-Persistent và Secure  
Non-Persistent và Non-Secure  
Persistent cookie được lưu trữ dưới dạng tập tin.txt (ví dụ trình duyệt Nestcape  
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 từ trang web.  
Secure cookie chỉ thể được gửi thông tin qua HTTPS (SSL).  
Non-Secure cookie có thể được gữi bằng hai giao thức HTTPS hay HTTP. Thực  
chất đố với sercure cookie thì trình chủ sẻ cung cấp chế độ truyền bảo mật.  
Các thành phần của một cookie gồm :  
-9-  
Domain  
Flag  
Path Secure Expiration  
Name Value  
64.3.40.151.1  
6
115402949  
FALSE  
FALSE  
0
Apache  
01899634924  
7 409  
Domain: Tên miền của trang web đã tạo cookie (ví dụ trên là  
www.redhat.com)  
Flag: Mang giá trị TRUE/FALSE-Xác định các máy khác với cùng tên miền  
được truy xuất đến cookie hay không.  
Path: Phạm vị các địa chỉ thể truy xuất cookie. Ví dụ : Nếu path  
là”/tracuu”thì các địa chỉ trong thư mục /tracuu cũng như tất cả các thư mục  
con của như /tracuu/baomat có thể truy xuất đến cookie này. Còn nếu giá  
trị là “/” thì cookie có thể truy xuất đến tất cả địa chỉ thuộc miền trang web  
tạo cookie.  
Secure: Mang giá trị TRUE/FALSE. Xác định đây một secure cookie hay  
không nghĩa kết nối sử dụng SSL hay không.  
Expiration: Thời gian hết hạn của cookie, đực tính bằng giây kể từ 00:00:00  
giờ GMT ngày 01/01/1970. Nếu giá trị này không được thiết lập thì trình  
duyệ sẽ hiểu đây là non-persistent cookie và chỉ lưu trong bộ nhớ RAM và sẽ  
xóa nó khi trình duyệt bị đóng.  
Name: Tên biến (trong trường hợp này là Apache)  
Value: Với cookie được tạo ở trên thì giá trị của Apache là 64.3.40.151.  
16018996349247480 và ngày hết hạn là 27/07/2006, của tên miền  
Máy trạm thể lưu tối đa là 300 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. Các máy chủ không mong máy  
trạm vượt quá những giới hạn này. Khi giới hạn 300 cookie hoặc 20 cookie mỗi tên  
miền của máy chủ bị vượt quá, máy trạm sẽ xoá cookie được sử dụng ít nhất.  
1.2.5 Proxy  
-10-  
Proxy cung cấp cho người sử dụng truy xuất Internet những nghi thức đặc biệt  
hoặc một tập những nghi thức thực thi trên dual_homed host hoặc basion host.  
Những chương trình client của người sử dụng sẽ qua trung gian proxy server thay  
thế cho server thật sự người sử dụng cần giao tiếp.  
Proxy server cần xác định những yêu cầu từ client và quyết định đáp ứng hay  
không đáp ứng, nếu yêu cầu được đáp ứng, proxy server sẽ kết nối với server thật  
thay cho client và tiếp tục chuyển tiếp những yêu cầu từ client đến server, cũng như  
trả lời server đến client. Vì vậy proxy server giống cầu nối trung gian giữa server và  
client.  
1.2.6 Firewall  
Một giải pháp dùng để bảo vệ một hệ thống mạng thường được sử dụng bức  
tường lửa - Firewall (hoạt động dựa trên gói IP do đó kiểm soát việc truy nhập của  
máy người sử dụng). Nó có vai trò như lớp rào chắn bên ngoài một hệ thống  
mạng, chức năng chính của firewall là kiểm soát luồng thông tin giữa các máy  
tính. Có thể xem firewall như một bộ lọc thông tin, nó xác định và cho phép một  
máy tính này có được truy xuất đến một máy tính khác hay không, hay một mạng  
này có được truy xuất đến mạng kia hay không.  
Người ta thường dùng firewall vào mục đích:  
Cho phép hoặc cấm những dịch vụ truy xuất ra ngoài.  
Cho phép hoặc cấm những dịch vụ từ bên ngoài truy nhập vào trong.  
Kiểm soát địa chỉ truy nhập, cấm địa chtruy nhập.  
1.3 SƠ LƯỢC VQUÁ TRÌNH TẤN CÔNG CỦA HACKER  
1.3.1 Các giai đoạn tấn công  
Quá trình tấn công của một hacker có thể được khái quát qua 3 giai đoạn:  
Thu thập thông tin.  
Phân tích và hành động.  
Dừng và xoá dấu vết.  
-11-  
FootPrinting  
Pilfering  
Creating Backdoors  
(Tạo cổng hậu)  
(In dấu ấn)  
(Khai thác hệ thống)  
Scanning  
Privilege Escalation  
Covering Tracks (Xoá  
dấu vết)  
(Quét mạng)  
(Nâng quyền hệ thống)  
Enumeration  
Gaining Access  
(Điểm danh mạng)  
(Đột nhập hệ thống)  
Hình 1.3 Quá trình tấn công của hacker  
Giai đoạn 1: Thu thập thông tin  
Gồm 3 bước chính FootPrinting, Scanning, Enumeration.  
FootPrinting (In dấu chân): Là bước kẻ tấn công thu thập thông tin về đối  
tượng, người dùng, doanh nghiệp, các chi nhánh của công ty, máy chủ,… bao gồm  
các chi tiết Domain Name, Địa chỉ IP, Networking Prototcols, thông tin về người  
quản trị,…Đây một bước quan trọng cho hacker ,đôi khi với những thông tin này  
hacker đã thể làm chủ hệ thống. Công cụ hỗ trợ: Nslookup, Smart Whois,  
UseNet,  
Google  
Earth,  
Search  
engines  
(công  
cụ  
tìm  
kiếm),  
Sanning (Quét thăm mạng): Phần lớn thông tin quan trọng từ server có được  
từ bước này. Xác định hệ điều hành, xác định hệ thống đang chạy không, tìm  
hiểu các dịch vụ đang chạy hay đang lắng nghe, tìm hiểu các lỗ hổng, kiểm tra các  
cổng, xác định các dịch vụ sử dụng giao thức TCP và UDP,... Công cụ hổ trợ như  
LANGuard, xScan, NetScanToolsiNetToolsNmap.  
Enumeration (Điểm danh mạng - liệt kê tìm lỗ hổng): Đến đây, các attacker bắt  
đầu kiểm soát server sơ bộ. Bước này là tìm kiếm những tài nguyên được bảo vệ  
kém, hoặc tài khoản người dùng mà 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ủa thiết bị. Công cụ hỗ trợ:  
DumpSec, NbtScan, SuperScan, NetviewX, UserInfo,…  
Giai đoạn 2: Phân tích và hành động  
Gaining Access (Đột nhập hệ thống): Hacker sẽ 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 có  
thể tấn công vào lỗi tràn bộ đệm, lấy giải mã file password, hay brute force  
-12-  
(kiểm tra tất cả các trường hợp) password, đột nhập qua các cổng mở,…Công cụ hỗ  
trợ: Password eavesdropping, Tcpdump, L0phtcrack, NAT, Pwdump2 (NT),  
Remote Buffer Overflows, Brute-force password attacks,…  
Privilege Escalation (Nâng quyền hệ thống): Trong trường hợp hacker xâm nhập  
đựợc vào mạng với một 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 crack password của admin, hoặc sử dụng lỗ hổng để leo  
thang đặc quyền. Kẻ xâm nhập thể truy cập vào các files hay folder dữ liệu mà  
tài khoản người sử dụng ban đầu không được cho phép truy cập. Khi hacker đạt  
được mức độ quyền truy cập đủ cao, họ thể cài đặt phần mềm như là Backdoors  
và Trojan horses, cũng như cho phép truy cập sâu hơn thăm dò. Mục đích chung  
của hacker là chiếm được quyền truy cập ở mức độ quản trị. Khi đã đạt được mục  
đích đó, họ có toàn quyền điều khiển hệ thống mạng.  
Công cụ hỗ trợ: L0phtcrack, Password cracking, BUG, Exploits. John và Riper  
là hai chương trình crack password rất hay được sử dụng. thể sử dụng Sniffer để  
bắt các gói tin, từ đó phân tích tìm ra mật khẩu.  
Pilfering (Khai thác hệ thống): Thông tin lấy từ bước trên đủ để hacker định vị  
server và điều khiển server. Nếu bước này không thành công, hãy đến bước DoS  
(Denial of Service).  
Công cụ hỗ trợ: Rhost, Configuration files, Registry, Telnet, Ftp,…  
Giai đoạn 3: Dừng và xoá dấu vết  
Creating Backdoors (Tạo cổng hậu): Để chuẩn bị cho lần xâm nhập tiếp theo  
được dễ dàng hơn. Hacker để lại Backdoors, tức một cơ chế cho phép hacker truy  
nhập trở lại bằng con đường mật không phải tốn nhiều công sức khai phá, bằng  
việc cài đặt Trojan hay tạo user mới.  
Công cụ hỗ trợ: Ở đây là các loại Trojan, keylog, creat rogue user accounts,  
schedule batch jobs, replace apps with Trojan. VNC, BO2K, …  
Covering Tracks (Xoá dấu vết): Sau khi đã những 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 (vì hệ thống luôn ghi nhận  
những hành động của người dùng) làm cho người quản lý không nhận ra hệ thống  
đã bị xâm nhập hoặc biết cũng không tìm ra kẻ xâm nhập là ai.  
Công cụ hỗ trợ: Clear logs, Zap, Event log GUI, rootkits, file streaming, ...  
1.3.2 Khảo sát ứng dụng Web  
Khi phạm vi ứng dụng của các Web application ngày càng phổ biến thì khả  
năng xuất hiện lỗi bị tấn công càng cao. Trong các lĩnh vực hacking, hack Web  
-13-  
application luôn là một công việc được hacker nhắm đến nhằm mục đích phục vụ  
một yêu cầu nào đó của họ hay để phá hoại.  
Trước hết hacker tiến hành thu thập thông tin ở mức trên về hạ tầng của mục  
tiêu. Thu thập một số thông tin quan trọng như có bao nhiêu server, mô hình của các  
Web server, các client nào sẽ tương tác với ứng dụng Web, kiểu giao tiếp thông tin  
(transport) và thông qua các cổng (port) nào, những site liên quan đến việc thực  
hiện chức năng của site mục tiêu, ...  
Tiếp đó hacker khảo sát ứng dụng Web:  
Một trong những phương pháp khảo sát khá phổ biến từ trước đến giờ, đó là  
xem mã nguồn lợi dụng các lỗi cho phép xem mã nguồn các ngôn ngữ Web  
thông dụng hiện nay như Active Server Pages (ASP), Common Gateway Interface  
(CGI), ColdFusion Server (CFM), Hypertext Preprocessor (PHP).  
Sử dụng một số phép thử như thêm dấu ’ vào các url theo khuôn dạng truyền  
vào giá trị rất phổ biến, đưa vào những mẫu thử cơ bản của form xác thực đăng  
nhập để khảo sát các lỗi SQL Injection.  
Đưa vào các thông tin “lạ” ở các form ứng dụng Web hay trên url để xem các  
thông điệp chuyển xuống cho người dùng khi ứng dụng 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 thể cho phép kẻ tấn công biết  
được điểm yếu của hệ thống.  
Sử dụng các công cụ để đưa các trang Web mục tiêu vào dò tìm các lỗi của  
người phát triển ứng dụng để từ đó xây dựng nên kịch bản tấn công và chọn  
cách tấn công cụ thể.  
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.  
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 để  
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 đó 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 để đoạt quyền điều khiển hệ thống.  
1.3.3 Tấn công mục tiêu  
-14-  
Việc thu thập thông tin là vấn đề quan trọng cho việc tấn công vào một hệ thống  
máy mục tiêu. Cho dù hacker tấn công theo phương diện phần cứng hay qua ứng  
dụng thì việc thu thập vẫn cần thiết.  
Sau khi đã khảo sát và thu thập thông tin mục tiêu, 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ó thể trong những bước đã nêu hacker không cần phải đi qua theo  
thứ tự hay qua hết, nhưng việc nắm rõ thông tin của máy mục tiêu luôn là điều kiện  
tiên quyết để dẫn đến thành công trong việc tấn công. Tùy vào thông tin thu thập  
được mà hacker sẽ quyết định tấn công theo kỹ thuật nào, xây dựng một kịch bản  
tấn công phù hợp.  
Một số kịch bản tấn công:  
Tấn công đồng loạt vào các trang tin điện tử thuộc Chính phủ, thành phố, bộ,  
sở ban ngành,… làm thay đổi nội dung, đưa thông tin sai lệch,…  
Tấn công vào các ứng dụng Web mua bán, giao dịch trực tuyến để đánh cắp  
thông tin cá nhân, thẻ tín dụng,…  
Tấn công ứng dụng Web, đặt độc tại trang Web, sử dụng máy chủ bị lỗi  
để thực hiện hành vi tấn công khác.  
Mục đích tấn công cơ bản của hacker trên các ứng dụng Web như sau:  
Tấn công với mục đích chính trị (tấn công các trang tin điện tử thuộc chính  
phủ, thành phố, các sở ban ngành,…).  
Tấn công với mục đích lợi nhuận (các trang thương mại điện tử, tài chính,  
ngân hàng, các doanh nghiệp, …).  
Tấn công với mục đích cá nhân.  
Hậu quả tấn công của hacker trên các ứng dụng Web:  
tấn công dưới bất kỳ với mục đích gì thì hậu quả ảnh hưởng đều rất đáng  
kể, thiệt hại to lớn về uy tín, kinh tế, gây thiệt hại cho người dùng mạng, bị đánh  
cắp thông tin, có thể bị hacker lợi dụng để tấn công một tổ chức khác, tận dụng phát  
tán lừa đảo,…  
Nếu không thành công trong việc xâm nhập bằng các kỹ thuật phổ biến, thì Dos  
là cách thức mà hacker thường lựa chọn để làm cho hệ thống không thể hoạt động  
được.  
Do đó, việc bảo mật cho một hệ thống cần đòi hỏi sự kết hợp không chỉ của riêng  
nhà quản trị hệ thống mà còn của nhà thiết kế ứng dụng sự hợp tác của cả những  
khách hàng sử dụng ứng dụng.  
-15-  
CHƯƠNG 2  
KỸ THUẬT TẤN CÔNG VÀO CÁC LỖ HỔNG TRÊN  
WEBSITE VÀ CÁCH PHÒNG CHỐNG  
2.1 THỰC TRẠNG AN NINH MẠNG TẠI VIỆT NAM HIỆN NAY VÀ DỰ  
BÁO XU HƯỚNG AN NINH MẠNG NĂM 2011  
2.1.1 Tình hình phát trin Internet tới Vit Nam đến tháng 1/2011  
Tại Việt Nam, nhiều doanh nghiệp phải đối mặt với việc hình thành và lan tràn  
nhiều biến thể virut mới, tấn công trên mạng ngày càng nở rộ với mục đích vụ lợi cá  
nhân cũng như mục đích kinh tế, thậm chí ảnh hưởng đến hoạt động kinh doanh và  
an ninh quốc gia. Các website trong nước liên tiếp bị tấn công với mức độ phức tạp  
gia tăng điển hình là việc báo điện tử Vietnamnet bị tấn công nhiều lần đánh  
sập vào ngày 22/11/2010. Hình thức lừa đảo trực tuyến các email bằng tiếng việt đã  
bắt đầu xuất hiện và phát tán rộng…đã đặt ra yêu cầu đối với sự nhận thức đúng đắn  
về mức độ cấp thiết, tối quan trọng của an ninh mạng, bảo mật thông tin.  
Mạng Internet Việt Nam còn tiềm ẩn rất nhiều những nguy cơ về mặt an ninh  
an toàn thông tin. Hàng loạt website lớn bị tấn công với mức độ phức tạp ngày càng  
gia tăng. Rất nhiều các website của các tổ chức, doanh nghiệp còn tồn tại các lỗ  
hổng an toàn thông tin. Nhiều lỗ hổng an toàn thông tin mới được phát hiện. Tội  
phạm mạng đang diễn ra với tốc độ nhanh hơn, quy mô hơn, tính chuyên nghiệp,  
trình độ kỹ thuật ngày càng cao hơn  
Số lượng các cuộc tấn công web tăng gấp đôi:  
Trong năm 2009, ở nước ta có hơn 1000 (1.037) website bị hacker tấn công,  
tăng hơn gấp đôi so với năm 2008 (461 website) và gấp ba lần so với năm  
2007 (342 website).  
Trong 3 tháng đầu năm 2010 đã hơn 300 website của các cá nhân và tổ  
chức có tên miền .vn bị các hacker nước ngoài thăm dò, tấn công.  
Tính đến cui quý I/2011, số người sử dụng Internet tại Việt Nam  
đạt 27.559.006 người, chiểm 31,9 % dân số; sthuê bao internet trên cnước  
ước tính đạt 3,8 triu thuê bao. Đa số các doanh nghiệp và các tổ chức hệ  
thống mạng và website giới thiệu, quảng thương hiệu (191.667 tên miền  
.vn và hàng triệu tên miền thương mại). rất nhiều doanh nghiệp đã ứng  
dụng thanh toán trực tuyến vào công việc kinh doanh, giao dịch,…  
-16-  
Các website bị tấn công chủ yếu là các website kinh doanh trực tuyến, ngân  
hàng, các tổ chức cung cấp dịch vụ ,…( Nguyên nhân: chủ yếu sự yếu kém  
trong quản trị website và không thường xuyên kiểm soát lỗ hổng, ít quan tâm  
đếncác cảnh báo an ninh của các quan, tổ chức chức năng đảm bảo an  
ninh an toàn thông tin quốc gia  
Rất nhiều website trong nước tồn tại các lỗ hổng an toàn thông tin ở mức độ  
nguy hiểm cao. Đa số các trang web lớn của Việt Nam đều lỗ hổng bảo mật và  
thể bị chiếm quyền điều khiển. Hiện nay, trên mạng Internet Việt Nam có đến  
90% các website được xây dựng trên công nghệ ASP.NET và sử dụng dịch vụ IIS  
6.0, đây lỗ hổng lớn nhất vẫn chưa được khắc phục. Trong năm 2010 đã ghi  
nhận hơn 1000 website ở nước ta bị tấn công từ các lỗ hổng đang tồn tại trên các  
website và các lỗ hổng trên các máy chủ hệ thống. Các website của các tổ chức tài  
chính, ngân hàng, chứng khoán vẫn tồn tại rất nhiều lỗ hổng.  
Các hành vi phạm tội vẫn là:  
Dùng thủ đoạn Phishing, trojan horse, spyware để lấy cắp địa chỉ email,  
thông tin thẻ tín dụng và thông tin cá nhân như tên, địa chỉ,số điện thoại, số  
thẻ an ninh xã hội, thông tin giấy phép lái xe…  
Mua bán thông tin thẻ tín dụng trên mạng internet.  
Trộm cắp tiền từ thẻ tín dụng và tài khoản, làm thẻ tín dụng giả rút tiền từ  
máy ATM.  
Rửa tiền: chuyển tiền từ tài khoản trộm cắp được sang tài khoản e-money tại  
e-gold, e-passport.  
Lừa đảo qua quảng cáo, bán hàng trực tuyến trên mạng internet, trong hoạt  
động thương mại điện tử,trong mua bán ngoại tệ,cổ phiếu qua mạng, đánh  
bạc rửa tiền, thực hiện hành vi trốn thuế.  
Buôn bán ma túy, mại dâm qua mạng internet, truyền bá khiêu dâm trên  
mạng, thực hiện các hoạt động khủng bố, phá hoại, ...  
2.1.2 Các cuộc tấn công của hacker và những thiệt hại mà nó gây ra hiện nay  
tại Việt Nam  
Trong hai năm trở lại đây, khủng hoảng kinh tế nên bọn tội phạm vẫn nhằm vào  
các hệ thống Công Nghệ Thông Tin của lĩnh vực tài chính ngân hàng, với mục tiêu  
kiếm được nhiều tiền hơn, nên chúng có xu hướng hoàn thiện kỹ thuật tấn công để  
tấn công các mục tiêu này và chúng đã thành công ở một số hệ thống.  
-17-  
Trong năm 2009, chỉ tính riêng hơn 40 vụ án công nghệ cao bị phanh phui, thiệt  
hại loại tội phạm này gây ra đã lên đến hàng ngàn tỉ đồng.  
Thiệt hại do lộ thông tin bí mật của các doanh nghiệp, tổ chức không có thể ước  
tính được. Các quan chức năng đã phối hợp điều tra,truy tố xét xử một số vụ tấn  
công nghiêm trọng  
Vụ 2 đối tượng người Malaysia là Cham Tack Choi và Tan Wei Hong sử dụng  
thẻ tín dụng Visa, Master giả để thanh toán tại khách sạn Metropol (thanh toán số  
tiền hơn 500 triệu đồng). Ngày 8/01/2009, TAND Hà Nội đã tuyên phạt Cham Tack  
Choi (SN 1984) và Tan Wei Hong (SN 1981), quốc tịch Malaysia mỗi người 7 năm  
giamvề tội Trộm cắp tài sản.  
Tháng 10/2009: Vụ Nguyen Hoawrd quốctịch Mỹ, ArialFradin quốc tịch  
Canada vào Việt Nam đi du lịch đã dùng thẻ AMEX hết hạn, báo mất, khóa giao  
dịch ở ngân hàng phát hành rút tiền tại các máy ATM để chiếm đoạt. Nguyen  
Howard và đồng bọn đã rút 1,4 tỷ đồng, Arial Fardin đã rút 800 triệu Điều tra, khám  
phá những vụ án TPCNC  
Vụ Công ty Golden Rock: Trưởng Văn phòng đại diện của Công ty này tại  
mạng năm 2010 vẫn tiếp tục nóng bỏng, xuất hiện việc các cá nhân, tổ chức thuê  
hăcker điều hành mạng máy tính “Ma” để tấn công nhằm phá hủy hệ thống Công  
Nghệ Thông Tin của đối thủ cạnh tranh  
vụ mới đây nhất, Ngày 22/11/2010 là ngày đầu tiên hacker bắt đầu tấn công  
vào hệ thống website của báo Vietnamnet. Đây cuộc tấn công với quy mô lớn,  
liên tục và kéo dài. Nó đã phá hủy hầu như gần hết cơ sở dữ liệu đã lưu trữ 10 năm  
của báo VietNamNet.  
-18-  
Hình 2.1 Giao diện báo điện tử VietNamNet bị tấn công  
Lỗ hổng an ninh của các hệ thống ngày càng được phát hiện nhiều hơn. Số  
lượng các điểm yếu an ninh trong năm 2010 là 4.300 (năm 2009 là 3.500) có  
tới 30% lỗ hổng mức độ nguy hiểm cao. Gần một nửa (49%) số lỗ hổng an ninh  
vẫn chưa có các bản vá do nhà cung cấp dịch vụ phát hành. Lỗ hổng liên quan đến  
phần mềm Adobe Acrobat PDF được phát hiện nhiều nhất. Ở nước ta vấn đề lỗ  
hổng của hệ thống, ứng dụng vẫn chưa được các quản trị hệ thống cập nhật các bản  
kịp thời.  
Thực trạng tấn công vào các website của hacker không mới so với những năm  
trước tuy nhiên đến nay các website tại Việt Nam vẫn chưa được đầu tư về nhân  
lực, kinh phí để được bảo vệ một cách tốt nhất. Nguyên nhân chủ yếu sự yếu kém  
trong quản trị website và không thường xuyên kiểm soát lỗ hổng, khoán trắng vấn  
đề bảo đảm ATTT cho nơi đặt website, ít quan tâm đến các cảnh báo an ninh của  
các quan, tổ chức chức năng đảm bảo an ninh an toàn thông tin quốc gia.  
Tại Việt Nam, năm 2010, đã gần 60 triệu lượt máy tính bị nhiễm virus.  
Trung bình một ngày có hơn 160.000 lượt máy tính bị nhiễm virus. Đây là con số  
đáng báo động về tình hình máy tính bị nhiễm virus nước ta. Đã hơn 57.000  
dòng virus mới xuất hiện. Virus lây lan nhiều nhất qua các máy tính vẫn là virus  
Conficker. Trong năm 2010, đã tới 6,5 triệu lượt máy tính bị nhiễm loại virus  
này. Có hơn 1,4 triệu lượt máy tính đã bị nhiễm dòng virus giả mạo thư mục, giả  
-19-  
mạo file ảnh, file word, excel... Các virus siêu đa hình tiếp tục đứng trong top 3  
những virus lây nhiễm nhiều nhất trong năm và là nỗi ám ảnh với người sử dụng  
máy tính tại Việt Nam. Với khả năng “thay hình đổi dạng” để lẩn trốn, 2 dòng virus  
Vetor và Sality đã lan truyền trên 5,9 triệu lượt máy tính.  
thể nói, chính sự chủ quan, hạn chế trong nhận thức, thiếu hụt về đầu tư an  
ninh thông tin (ANTT) của các doanh nghiệp, người sử dụng đã tạo tiền đề cho sự  
gia tăng các mối đe dọa và nguy cơ bảo mật. Vấn đề ANTT có tầm quan trọng sống  
còn đối với các doanh nghiệp, đặc biệt khi các giao dịch trực tuyến đã trở nên ngày  
càng phổ biến hơn tại Việt Nam. Lời khuyên của tôi là không nên cắt giảm ngân  
sách cho an ninh bảo mật mà thay vì đó cần phải đầu tư vào đó một cách khôn  
ngoan hơn.  
2.1.3 Dự báo xu hướng an ninh mạng năm 2011  
An ninh mạng năm 2011 vẫn tiếp tục nóng bỏng, xuất hiện việc các cá nhân, tổ  
chức thuê hacker điều hành mạng máy tính “Ma” để tấn công nhằm phá hủy hệ  
thống CNTT của đối thủ cạnh tranh.  
Kỹ thuật tấn công tinh vi hơn, hoàn hảohơn; độc ngày càng “độc” hơn…  
sẽ tiếp tục đặ tra những thách đố mới cho năm 2010.  
Kinh tế càng khủng hoảng, tin tặc càng tìm cách xoay sở kiếm tiền, hoạt  
động cuả gới tội phậm công nghệ cao sẽ tinh vi hơn, thủ đoạn hơn để làm sao  
kiếm được nhiều tiền.  
Mạng hội (Twiter, spacebook,..) đang phát triển mạnh mẽ không chỉ là  
trào lưu nhất thời, đã trở thành một nền tảng mới rất hiệu quả giúp con người  
giao tiếp, liên lạcvới nhau. Đây chính là một môi trường thuậnlợi để giới tội  
phạm công nghệ cao thử nghiệm các thủ đoạn, kỹ thuật tấn công đe dọa an  
ninh mạng.  
Tiếp tục xuất hiện nhiều chương trình diệt virus giả.  
Hình thành nhiều mạng máy tính Ma (bootnet) được điều khiển bởi các  
hăcker có chuyên môn cao, có nguy cơ xuất hiện các cuộc chiến lớn trên  
mạng (chiến tranh mạng).  
Điện toán đám mây sẽ đích nhắm mới của giới tội phạm, đặc biệt là khi  
mạng 3G bắt đầu được đưa vào hoạt động tại ViệtNam.  
Việc sử dụng thiết bị di động không dây Apple có dấu hiệu bùng nổ tại Việt  
Nam, trong khi đó Apple chưa giải pháp đảm bảo an toàn cho các dịch vụ  
-20-  
của thiết bị này, do vậy Apple có thể sẽ một mục tiêu quan tâm mới của  
giới tội phạm mạng.  
Virus đa hình và Thư rác tin nhắn tức thời (IM) ngày càng phức tạp.  
Rootkit là một bộ công cụ phần mềm do kẻ xâm nhập đưa vào máy tính nhằm  
mục đích cho phép mình quay lại xâm nhập máy tính đó và dùng nó cho các mục  
đích xấu mà không bị phát hiện. Đây sẽ một xu hướng mới khi đã trở thành công  
cụ “đại chúng hóa” chứ không còn là “đặc quyền” của một số tin tặc “biết nghề”  
như trước. Các dòng virus siêu đa hình sẽ kết hợp nhiều kỹ thuật mới để tạo ra  
những sự lây lan dai dẳng kéo dài trong nhiều năm.  
Cùng sự phổ biến của Windows 7 với khả năng đảm bảo an ninh cao và mọi  
quyết định thực thi quan trọng trên máy tính sẽ thuộc về người sử dụng, xu hướng  
virus đánh lừa người sử dụng bằng cảm quan sẽ phát triển mạnh. Trường hợp các  
virus giả mạo file dữ liệu (Fake icon) là những biểu hiện đầu tiên và xu hướng này  
sẽ tiếp tục trong năm 2011.  
Sẽ nhiều cuộc tấn công, lừa đảo trên điện thoại di động trong năm 2011. Có  
thể sẽ ghi nhận những cuộc phát tán mã độc đầu tiên trên điện thoại di động, với  
hình thức tấn công chủ yếu dưới dạng các trojan, ẩn náu và ăn cắp thông tin cá  
nhân.  
2.2 MỘT SỐ KỸ THUẬT TẤN CÔNG CỦA HACKER VÀO LỖ HỎNG  
TRÊN TRANG WEB VÀ BIỆN PHÁP PHÒNG CHỐNG  
2.2.1 Tấn công chèn câu truy vấn SQL Injection  
2.2.1.1 SQL Injection là gì?  
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ỡ giữ  
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. Tại Việt Nam, đã qua thời kì các quản trị website việc  
quét virus, cập nhật các bản lỗi từ các phần mềm hệ thống, nhưng việc chăm sóc  
các lỗi của các ứng dụng lại rất ít được quan tâm. Đó là lý do tại sao trong thời gian  
vừa qua, không ít website tại Việt Nam bị tấn công và đa số đều lỗi SQL  
injection. Vậy SQL injection là gì?  
SQL injection là 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 rất tai hại vì  
-21-  
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à nó ứ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 nSQL Server, MySQL, Oracle, DB2, Sysbase.  
2.2.1.2 Các dạng tấn công SQL Injection  
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ệnh SELECT, sử dụng câu lệnh INSERT, sử  
dụng các stored-procedures [2],[3]…  
a. Dạng 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 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 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 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 mật khẩu 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 người ta có thể dùng hai trang, một trang HTML để hiển  
thị form nhập liệu một trang ASP dùng để xử lý thông tin nhập từ phía người  
dùng. Ví dụ:  
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")  
-22-  
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  
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 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 để 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. dụ,  
nếu người dùng nhập chuổi sau vào trong 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 hợp lệ sẽ trả về tất cả các bản ghi T_USERS và đoạn mã  
tiếp theo xử người dùng đăng nhập bất hợp pháp này như người dùng đăng  
nhập hợp lệ.  
b. 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 khả năng hiểu 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 cuộc tấn công.  
Xét ví dụ rất thường gặp trong các website về tin tức. Thông thường, sẽ 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  
<%  
-23-  
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 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 hầu như không thấy lỗi. Tuy nhiên, giống như 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,  
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 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  
%>  
-24-  
Tương tự như trên, tin tặc thể lợi dụng sơ hở trong câu lệnh SQL để nhập  
các trường trê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 không 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.  
Tất nhiên là các ví dụ nói trên, dường như không có gì nguy hiểm, nhưng hãy  
thử tưởng tượng kẻ tấn công có thể xóa toàn bộ cơ sở dữ liệu bằng cách chèn vào  
các đoạn lệnh nguy hiểm như DROP TABLE. Ví dụ như :’DROP  
TABLE_AUTHORS-’  
Làm sao biết được ứng dụng web bị lỗi dạng này được. Rất đơn giản, 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 hệ thống đã thực hiện câu SELECT sau từ khóa  
UNION, vì như vậy mới thể trả về lỗi mà ta đã cố tình tạo ra trong câu lệnh  
SELECT.  
Cũng sẽ thắc mắc là làm thế nào có thể biết được tên của các 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. Cũng rất  
đơn giản, bởi vì trong SQL Server, có hai đối tượng là sysobjects và syscolumns  
cho phép liệt tất các tên bảng cột có trong hệ thống. Ta chỉ cần chỉnh lại câu  
lệnh SELECT, ví dụ như :  
‘UNION SELECT name FROM sysobjects WHERE xtype=’U’ là có thể liệt kê  
được tất cả các bảng dữ liệu.  
c. 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 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ảu thông tin nhập vào.  
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 SQL có dạng :  
<%  
strSQL = "INSERT INTO TableName VALUES(' " & strValueOne & " ', ' " _  
& strValueTwo & " ', ' " & strValueThree & " ') "  
-25-  
Set objRS = Server.CreateObject("ADODB.Recordset")  
objRS.Open strSQL, "DSN=..."  
Set objRS = Nothing  
%>  
Thì chắc chắn sẽ bị lỗi SQL injection, bởi vì chúng ta nhập vào trường thứ nhất  
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ư bạn đã yêu cầu thực hiện thêm một câu lệnh nữa đó là: SELECT TOP 1  
FieldName FROM TableName.  
d. 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 ta thay đoạn mã tiêm vào 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ê  
như mục trên ở ổ đĩa C:\cài đặt server. Việc phá hoại kiểu nào tùy thuộc vào câu  
lệnh đằng sau cmd.exe.  
2.2.1.3 Cách phòng tránh  
Trong hầu hết trình duyệt, những tự nên được mã hóa trên địa chỉ URL trước  
khi sử dụng.  
Việc tấn công theo SQL Injection dựa vào những câu thông báo lỗi do đó việc  
phòng chống hay nhất là không cho hiển thị những thông điệp lỗi cho người dùng  
bằng cách thay thế những lỗi thông báo bằng một trang do người phát triển thiết kế  
mỗi khi lỗi xảy ra trên ứng dụng.  
Kiểm tra kĩ dữ liệu nhập vào thay thế những tự như :  
Đối với các giá trị numeric, hãy chuyển nó sang Interger trước khi thực hiện  
câu truy vấn SQL, hoặc dùng ISNUMERIC để chắc chắn nó là một Interger.  
Dùng thuật toán mã hóa dữ liệu.  
Như vậy, 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  
-26-  
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ớ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, ta có thể thực hiện ở hai mức  
a. Kiểm soát chặt chẽ dữ liệu nhập vào  
Kiểm tra tính đúng đắn của dữ liệu một vấn đề phức tạp thường chưa được  
quan tâm đúng mức trong các ứng dụng. Khuynh hướng của việc kiểm tra tính đúng  
đắn của dữ liệu không phải chỉ cần thêm một số chức năng vào ứng dụng, mà  
phải kiểm tra một cách tổng nhanh chống để đạt được mục đích.  
Có ba giải pháp tiếp cận vấn đề này:  
Cố gắng kiểm tra và chỉnh sửa để làm cho dữ liệu hợp lệ .  
Loại bỏ những dữ liện bát hợp lệ.  
Chỉ chấp nhận những dữ liệu hợp lệ.  
Để phòng tránh nguy thể xảy ra, hãy 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 dữ liệu nhập nhận được từ đối tượng Request  
(Request,  
Request.  
QueryString,  
Request.Form,  
Request.Cookies,and  
Request.ServerVariables). dụ: 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 Escape Quotes để thay thế các dấu nháy đơn bằng hai dấu nháy đơn  
như:  
<%  
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 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 đúng hay không bằng hàm  
IsNumeric().  
-27-  
Ngoài ra có thể xây dựng hàm loại bỏ một số tự 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  
%>  
b. Thiết lập cấu hình an toàn cho hệ quản trị cơ sở dữ liệu  
Cần cơ chế kiểm soát chặt chẽ giới hạn quyền xữ dữ liệu đến tài khoản  
người dùng mà ứng dụng web dang 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 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 thể cho  
phép kẻ tấn công biết được điểm yếu của hệ thống.  
Xác định các phương pháp kết nối server :  
Dùng tiện ích Network Utility để kiểm tra rằng chỉ có các thư viện mạng  
đang hoạt động.  
Kiểm tra tất cả các tài khoản trong SQL server  
Chỉ tạo tài khoản quyền thấp cho các ứng dụng.  
Loại bỏ những tài khoản không cần thiết.  
-28-  
Đảm bảo rằng tất ccác tài khoản co một mật khẩu hợp lệ.  
Kiểm tra các đối tượng tồn tại  
Nhiều extended stored procedure có thể được xóa bỏ một cách an toàn. Nếu  
điều này được thực hiện, thì cũng xem xét việc loại bỏ luôn những tập tin.  
Dll chứa của extended stored procedure.  
Xóa bỏ tất cả dữ liệu mẫu như “northwind” và “pubs”  
Xóa các stored procedure không dùng như: master…xp_cmdsell,  
xp_startmail, xp_makewebtask.  
Kiểm tra những tài khoản nào có thể truy xuất đến những đối tượng nào  
Đối với những tài khoản của một ứng dụng nào đó dùng để truy xuất cơ sở  
dữ liệu thì chỉ được cấp những quyền hạn cần thiết tối thiểu để truy xuất đến  
những đối tượng cần dung.  
2.2.2 Chèn mã lệnh thực thi trên trình duyệt Cross-Site Scripting  
2.2.2.1 Tấn công Cross-Site Scripting  
Cross-Site Scripting (XSS) là một trong những kỹ thuật tấn công phổ biến, nó  
cũng một trong những vấn đề bảo mật quan trọng đối với các nhà phát triển Web  
cả những người sử dụng Web. Bất một Website nào cho phép người sử dụng  
đăng thông tin mà không có sự kiểm tra chặt chẽ các đoạn mã nguy hiểm thì đều có  
thể tiềm ẩn các lỗi XSS.  
Hacker sẽ lợi dụng sự kiểm tra lỏng lẻo từ ứng dụng hiểu biết hạn chế của  
người dùng cũng như 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. Hacker thực hiện tấn công XSS bằng cách chèn vào các  
Website động (ASP, PHP, CGI, JSP,...) những thẻ HTML hay những đoạn mã script  
nguy hiểm thể gây hại cho những người sử dụng khác.  
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 nguy hiểm được chèn vào, hầu hết được viết  
bằng các Client-Site Script như JavaScript, Jscript và cũng thể cả các thẻ  
HTML,… được thực thi trên chính trình duyệt của nạn nhân.  
dụ 1: Hacker thường gắn thêm đoạn độc vào URL của Website và gởi  
đến nạn nhân, nếu nạn nhân truy cập URL đó thì sẽ bị dính mã độc.  
http://example.com/search.cgi?query=<script>alert(document.cookie);</scrip  
t>  
-29-  
Lợi dụng cách truyền tham số trên URL mà hacker có thể dễ dàng thêm vào  
đoạn đánh cắp cookie. Điều này xảy ra do ta không chú ý điều kiện lọc input từ  
URL của Website.  
dụ 2: Trường hợp mở các bức thư mà không hề cảnh giác với XSS. Chỉ cần  
với một đoạn mã HTML gửi trong thư thì đã hoàn toàn bị mất cookie của mình:  
Khi nhận thư, nếu vô tình người dùng đưa con chuột qua bức ảnh gửi kèm thì  
cũng nghĩa đã bị lấy mất cookie. Và với cookie lấy được, các hacker có thể dễ  
dàng login hòm thư của người sử dụng này.  
<input type="hidden" name="cookie">  
</form>  
<img border="0" onmouseover ="window.document .XSS.cookie.value =  
document.cookie; window.document .XSS.submit();" src="anh.jpg">  
Nhưng thực sự thì có rất 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ể dễ dàng lợi dụng Document Object Model  
(DOM) để thay đổi ngữ cảnh nội dụng Web ứng dụng. Một vài loại thẻ thể  
chèn đoạn mã:  
<link rel="stylesheet" type="text/css" href="javascript:[code]" />  
<script type="text/javascript">[code]</script>  
<script>[code]</script>  
<iframe src="vbscript:[code]" />  
<img src="[code]" />  
<img src="blah" onmouseover="[code]" />  
<xml src="javascript:[code]" />  
Phần in đậm phần thể đặt đoạn đánh cắp thông tin.  
Nếu như các kỹ thuật tấn công khác có thể làm thay đổi được dữ liệu nguồn của  
Web server (mã nguồn, cấu trúc, cơ sở dữ liệu) thì XSS chỉ gây tổn hại đối với  
Website phía client mà nạn nhân trực tiếp những người khách duyệt site đó.  
-30-  

Tải về để xem bản đầy đủ

doc 65 trang yennguyen 18/07/2025 440
Bạn đang xem 30 trang mẫu của tài liệu "Đồ án Phương pháp tấn công vào trang web và cách phòng chống, xây dựng ứng dụng demo SQL injection", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • docdo_an_phuong_phap_tan_cong_vao_trang_web_va_cach_phong_chong.doc