sql injection và các biện pháp phòng chống
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘITRƯỜNG ĐẠI HỌC CÔNG NGHỆ
KHÓA LUẬN TỐT NGHIỆP
(Hệ đại học chính quy)
Đề tài: Một số phương pháp bảo vệ websites trong thương mại điện tử
Giáo viên hướng dẫn: TS Lê Phê Đô
Sinh viên: Nguyễn Thế Thạo
Hà Nội – 2013
Trang 2Khóa luận tốt nghiệp 2013
LỜI MỞ ĐẦU
Trang 3TÓM TẮT NỘI DUNG
Trang 4Khóa luận tốt nghiệp 2013
MỤC LỤC
LỜI MỞ ĐẦU 2
TÓM TẮT NỘI DUNG 3
Chương 1: Tìm hiểu thương mại điện tử và đánh giá tình hình an toàn an ninh mạng hiện nay 8
I Tìm hiểu về thương mại điện tử 8
1 Khái niệm: 8
2 Lợi ích: 8
3 Các loại hình ứng dụng thương mại điện tử: 8
4 Thanh toán điện tử: 9
5 Quảng cáo trên Internet: 9
II Tình hình an toàn an ninh mạng hiện nay 9
Chương 2: Các phương thức tấn công phổ biến và cách phòng tránh 12
I Phòng chống các kỹ thuật tấn công cơ bản: 12
1 Lập bản đồ trang: 12
2 Đoán tập tin và thư mục: 12
3 Khai thác khi đã biết những luồng bảo mật: 13
4 Vượt qua hạn chế trên các lựa chọn đầu vào: 13
II Phòng chống tấn công dựa vào trạng thái của trang 14
1 Tấn công vào trường ẩn: 14
2 Tấn công dựa vào tham số CGI: 15
3 Tấn công bằng cách làm nhiễm độc cookie: 15
4 Tấn công bằng nhảy URL: 17
5. Tấn công chiếm hữu phiên làm việc (Session hijacking): 17
III Phòng chống chèn mã lệnh thực thi trên trình duyệt (cross-sites scripting - XSS): 20
1 Nội dung: 20
2 Cách phòng tránh: 22
IV Phòng chống chèn mã SQL – SQL Injection: 23
1 Khái niệm SQL Injection: 23
Trang 53.2 Câu lệnh điều kiện 32
3.2.1 Mô hình dựa trên nội dung phản hồi 33
3.2.2 Mô hình dựa trên độ trễ phản hồi 33
3.3 Blind SQL injection: 34
3.4 Qua mặt các bộ lọc tham số đầu vào: 37
3.4.1 Lợi dụng sự khác nhau giữa ký tự in thường và in hoa 38
3.4.2 Sử dụng SQL comment thay thế khoảng trắng 38
3.4.3 Sử dụng URL Encoding 39
3.4.4 Thực thi truy vấn động 39
3.4.5 Sử dụng các byte NULL 41
3.4.6 Một số phương pháp qua mặt bộ lọc của tường lửa Web: 41
4 Phòng chống SQL Injection 47
4.1 Phòng chống từ mức xây dựng mã nguồn ứng dụng: 47
4.1.1 Làm sạch dữ liệu đầu vào: 47
4.1.1.1 Mô hình danh sách cho phép – Whitelist: 47
4.1.1.2 Mô hình danh sách cấm – blacklist: 48
4.1.1.3 Xử lý input trên trong các ngôn ngữ lập trình cụ thể 49
4.1.2 Xây dựng truy vấn theo mô hình tham số hóa 49
4.1.2.1 Khái niệm 49
4.1.2.2 Khi nào thì sử dụng được truy vấn tham số hóa 50
4.1.2.3 Tham số hóa truy vấn trong PHP 51
4.1.2.4 Tham số hóa truy vấn trong C# 51
4.1.2.5 Tham số hóa truy vấn trong Java 52
4.1.3 Chuẩn hóa dữ liệu 52
4.1.4 Mô hình thiết kế mã nguồn tổng quát 53
4.1.4.1 Sử dụng các store procedure 53
4.1.4.2 Sử dụng các lớp giao tiếp trừu tượng 53
4.1.4.3 Quản lý các dữ liệu nhạy cảm 54
4.1.4.4 Tránh đặt tên các đối tượng dễ đoán 54
4.1.4.5 Thiết lập các đối tượng giả làm mồi nhử 55
4.1.4.6 Tham khảo và cập nhật các khuyến nghị bảo mật khác 55
4.2 Các biện pháp bảo vệ từ nền tảng hệ thống: 56
Trang 6Khóa luận tốt nghiệp 2013
4.2.1.2 Các bộ lọc ngăn chặn 58
4.2.2 Các biện pháp bảo vệ databases: 59
4.2.2.1 Giới hạn phạm vi ảnh hưởng của ứng dụng 59
4.2.2.2 Giới hạn phạm vi ảnh hưởng của database 59
V Tấn công từ chối dịch vụ: 60
1 Khái niệm: 60
2 Nội dung: 60
2.1 Khái niệm TCP bắt tay ba chiều: 60
2.2 Lợi dụng TCP thực hiện phương pháp SYN flood truyền thống 61
2.3 Tấn công vào băng thông 62
2.4 DrDoS (Distributed Reflection Denial of Service) - Tấn công từ chối dịch vụ phản xạ nhiều vùng 63
2.5 Kiểu tấn công vào tài nguyên hệ thống 64
3 Cách phòng tránh: 65
Chương 3: Sử dụng Modsecurity để phòng ngừa tấn công 67
I Hướng dẫn cài đặt: 67
1 Giới thiệu Modsecurity: 67
2 Các khả năng của Modsecurity: 67
3 Cài đặt Modsecurity: 69
II Hướng dẫn sử Modsecurity: 72
1 Cú pháp SecRul: 72
2 Giới thiệu về biểu thức chính quy – Regular expressions: 76
3 So sánh số (matching number): 77
4 Phases và sắp xếp rule: 77
5 Chức năng chuyển đổi: 78
6 Khóa 1 số request thông thường: 79
7 Khóa 1 số request không thông thường: 79
8 Phát hiện rò rỉ thẻ tín dụng: 79
9 Theo dõi vị trí địa lý khách truy cập: 80
Trang 71 Mục đích và đối tượng sử dụng website: 85
2 Các chức năng và phân loại người sử dụng: 85
II Áp dụng các phương pháp phòng chống tấn công vào website: 86
1 Phòng chống các kỹ thuật tấn công cơ bản: 86
2 Phòng chống tấn công vào trạng thái của trang: 87
2.1 Phòng chống tấn công trường ẩn: 87
2.2 Phòng chống tấn công dựa vào cgi: 87
2.3 Phòng chống tấn công bằng cách nhiễm độc cookie: 88
2.4 Phòng chống tấn công bằng nhảy url: 88
2.5 Phòng chống tấn công bằng cách chiếm hữu session: 89
3 Phòng chống tấn công chèn mã lệnh thực thi XSS: 90
4 Phòng chống tấn công chèn mã SQL: 92
5 Bảo mật mật khẩu khi người dùng bị quên 94
Phụ lục 1: Một số lời khuyên dành cho cá nhân sử dụng các dịch vụ của thương mại điện tử 97
Phụ lục 2: Một số cách thức tấn công được phát hiện gần đây 99
KẾT LUẬN 101
TÀI LIỆU THAM KHẢO 102
Trang 8Khóa luận tốt nghiệp 2013
Chương 1: Tìm hiểu thương mại điện tử và đánh giá tình hình an toàn an ninh mạng hiện nay.
I Tìm hiểu về thương mại điện tử
1 Khái niệm:
Có nhiều khái niệm về thương mại điện tử (TMĐT), nhưng hiểu một cách tổngquát, TMĐT là việc tiến hành một phần hay toàn bộ hoạt động thương mại bằng nhữngphương tiện điện tử TMĐT vẫn mang bản chất như các hoạt động thương mại truyềnthống Tuy nhiên, thông qua các phương tiện điện tử mới, các hoạt động thương mạiđược thực hiện nhanh hơn, hiệu quả hơn, giúp tiết kiệm chi phí và mở rộng không giankinh doanh
TMĐT càng được biết tới như một phương thức kinh doanh hiệu quả từ khiInternet hình thành và phát triển Chính vì vậy, nhiều người hiểu TMĐT theo nghĩa cụthể hơn là giao dịch thương mại, mua sắm qua Internet và mạng (ví dụ mạng Intranetcủa doanh nghiệp)
2 Lợi ích:
Lợi ích lớn nhất mà TMĐT đem lại chính là sự tiết kiệm chi phí và tạo thuận lợicho các bên giao dịch Giao dịch bằng phương tiện điện tử nhanh hơn so với giao dịchtruyền thống, ví dụ gửi fax hay thư điện tử thì nội dung thông tin đến tay người nhậnnhanh hơn gửi thư Các giao dịch qua Internet có chi phí rất rẻ, một doanh nghiệp cóthể gửi thư tiếp thị, chào hàng đến hàng loạt khách hàng chỉ với chi phí giống như gửicho một khách hàng Với TMĐT, các bên có thể tiến hành giao dịch khi ở cách xanhau, giữa thành phố với nông thôn, từ nước này sang nước kia, hay nói cách khác làkhông bị giới hạn bởi không gian địa lý Điều này cho phép các doanh nghiệp tiết kiệmchi phí đi lại, thời gian gặp mặt trong khi mua bán Với người tiêu dùng, họ có thể ngồitại nhà để đặt hàng, mua sắm nhiều loại hàng hóa, dịch vụ thật nhanh chóng
3 Các loại hình ứng dụng thương mại điện tử:
Dựa vào chủ thể của thương mại điện tử, có thể phân chia thương mại điện tử ra
Trang 94 Thanh toán điện tử:
Thanh toán điện tử là hình thức thanh toán tiến hành trên môi trường internet,thông qua hệ thống thanh toán điện tử người sử dụng mạng có thể tiến hành các hoạtđộng thanh toán, chi trả, chuyển tiền,
Thanh toán điện tử được sử dụng khi chủ thể tiến hành mua hàng trên các siêu thị
ảo và thanh toán qua mạng Để thực hiện việc thanh toán, thì hệ thống máy chủ củasiêu thị phải có được phầm mềm thanh toán trong website của mình
5 Quảng cáo trên Internet:
Cũng như các hình thức quảng cáo khác, quảng cáo trên mạng nhằm cung cấpthông tin đẩy nhanh tiến độ giao dịch giữa người bán và người mua Tuy nhiên, quảngcao trên mạng khác hẳn với quảng cáo trên các phương tiện thông tin đại chúng khác
vì nó giúp người tiêu dùng có thể tương tác với quảng cáo Trên mạng mọi thứ đều cóthể đưa vào quảng cáo, từ bố trí sản phẩm tới thiết kế các ảnh nền phía sau nội dungquảng cáo, làm cho logo hoặc bất cứ nhãn hiệu sản phẩm nào cũng trở nên nổi bật.Quảng cáo trên Internet cũng tạo cơ hội cho các nhà quảng cáo nhắm chính xác vàođối tượng khách hàng của mình và giúp họ quảng cáo với đúng sở thích và thị hiếungười dùng Ngoài ra, quảng cáo trên mạng còn là sự kết hợp của quảng cáo truyềnthống và tiếp thị trực tiếp Đó là sự kết hợp giữa cung cấp nhãn hiệu, cung cấp thôngtin và trao đổi buôn bán ở cùng một nơi
* Các hình thức quảng cáo trên Internet:
- Quảng cáo bằng các banner, đường link qua các website khác
- Quảng cáo qua E-mail
- Quảng cáo trên Website
II Tình hình an toàn an ninh mạng hiện nay
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ànnhiề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à anninh 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 giatăng mà điển hình là việc báo điện tử Vietnamnet bị tấn công nhiều lần (tháng 11,12/2010, 1/2011) Hình thức lừa đảo trực tuyến các email bằng tiếng việt đã bắt đầuxuấ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 antoà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
Trang 10Khóa luận tốt nghiệp 2013
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ậtngày càng cao hơn
Qua tìm hiểu sơ bộ, có 1 số điểm đáng lưu ý:
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 (342website)
tên miền vn bị các hacker nước ngoài thăm dò, tấn công
người, chiểm 31,9 % dân số; số thuê bao internet trên cả nước ước tính đạt 3,8triệ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ênmiền thương mại) Có rất nhiều doanh nghiệp đã ứng dụng thanh toán trực tuyếnvào công việc kinh doanh, giao dịch,…
TT-TT Hà Nội tổ chức hôm 21/9/2012, Trung tâm Ứng cứu khẩn cấp Máy tínhViệt nam (VNCERT, thuộc Bộ TT-TT) công bố "Gần 80% website có thể bị tấncông thay đổi nội dung hoặc đánh sập" Đây là 1 điều đáng quan tâm lo ngại hiệnnay
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ảntrị website và không thường xuyên kiểm soát lỗ hổng, ít quan tâm đến các cảnhbá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ôngtin quốc gia)
Trên thế giới, rất nhiều các websites thương mại nổi tiếng cũng bị tấn công khôngchỉ 1 mà nhiều lần, ví dụ như website của Amazon.com tại Anh, Pháp, Đức và Tây
Trang 11Willysy đã khai thác một một lỗ hổng trên phiên bản này sau đó cài mã độc chờ sẵncác “nạn nhân”.
Những kẻ gian dùng các phương pháp tấn công các websites thương mại điện tửnhằm mục đích chiếm đoạt tiền và tài sản của nạn nhân:
Dùng thủ đoạn Phishing, trojan horse, spyware để lấy cắp địa chỉ email, thông tinthẻ 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áyATM
e-gold, e-passport
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ửatiền, thực hiện hành vi trốn thuế
Trang 12Khóa luận tốt nghiệp 2013
Chương 2: Các phương thức tấn công phổ biến và cách phòng tránh
I Phòng chống các kỹ thuật tấn công cơ bản:
1 Lập bản đồ trang:
I.1 Nội dung:
- Sử dụng một chương trình thu thập đi theo các liên kết trong ứng dụng và chỉ ra
luồng di chuyển theo các trang của ứng dụng và cơ chế xác thực
- Đọc ghi chú trong các tài liệu gửi đến trình duyệt để có được sự gợi ý về logic
trong kinh doanh hay các thuật toán
- Tìm tên người dùng, mật khẩu, và tên cơ sở dữ liệu trong các các tài liệu gửi cho
khách hàng
- Tìm các truy vấn SQL để có manh mối về cấu trúc cơ sở dữ liệu và cách truy vấn
được xây dựng từ dữ liệu động
- Xác định vị trí trường ẩn trong form.
- Tìm ra giá trị của các tham số chuyển giữa các trang web.
- Tạo ra các trường hợp lỗi khác nhau để xem máy chủ trả lời Một ví dụ là, nếu
kiểm tra máy chủ khác nhau đưa ra một thông báo lỗi cho một không đúng tênngười dùng so với sai mật khẩu
I.2 Cách phòng tránh:
- Tránh đưa ra các thông tin về các truy vấn SQL.
- Không gắn kèm các ghi chú trong mã gửi đến khách hàng.
- Không đặt tên người dùng, mật khẩu, cơ sở dữ liệu vào chuỗi kết nối, trong mã và
thông báo lỗi
2 Đoán tập tin và thư mục:
II.1 Nội dung:
Những kẻ tấn công sẽ đoán những tệp và thư mục chứa thông tin quan trọng và cốgắng truy cập vào đó để lấy thông tin:
- Tập tin như config.inc, web.xml, và server.xml có thể chứa thông tin kết nối cơ
sở dữ liệu
- Tập tin Htpasswd có thể chứa thông tin tên người dùng và mật khẩu của họ.
- Thư mục như template/ có thể chứa các tệp tin với thông tin về các ứng dụng.
Trang 13- Bảo vệ bất kỳ tệp tin không liên quan đến người dùng, bằng cách đặt chúng trong
thư mục bên ngoài hệ thống file hoặc trong những nơi được bảo vệ đặc biệt như
Ta có thể hiểu đơn giản là phương pháp này dựa trên sự “nhanh tay nhanhchân” của kẻ tấn công, nhanh chóng tấn công vào 1 lỗi đã được công bố nhưng hệthống chưa kịp update các bản vá lỗi
3.2 Cách phòng tránh:
Thực hiện sửa lỗi các lỗ hổng đã phát hiện một cách nhanh chóng nhất có thể
4 Vượt qua hạn chế trên các lựa chọn đầu vào:
4.1 Nội dung:
Một lớp tấn công khác là vượt qua hạn chế trên lựa chọn đầu vào:
- Thông tin người dùng nhập vào thường bị hạn chế theo những phạm vi để dễ kiểm
soát
- Để cải thiện kinh nghiệm người sử dụng, mã của phía client sẽ thực hiện việc xác
nhận dữ liệu của người dùng
- Các ứng dụng được viết một cách đơn giản tin tưởng các giá trị được gửi lên sẽ
nằm trong phạm vi mong đợi
- Bởi vượt qua được giao diện người dùng, những kẻ tấn công có thể gán các giá trị
tùy ý cho biến đầu vào của người dùng
4.2 Cách phòng tránh:
Để giảm thiểu rủi ro, cần xác nhận tính hợp lệ tất cả các dữ liệu đến từ client
Trang 14Khóa luận tốt nghiệp 2013
II Phòng chống tấn công dựa vào trạng thái của trang
Giao thức HTTP không lưu trạng thái của các trang web hay người dùng khitương tác với ứng dụng Do yêu cầu của ứng dụng websites thương mại điện tử nhưđăng nhập vào hệ thống để sử dụng những tiện ích(mua bán, giao dịch, xác nhận, )hay đơn giản chỉ là đánh dấu những nơi đã đi qua nên các ứng dụng web sẽ lưu lạitrạng thái các phiên làm việc bằng cách thiết lập giá trị nào đó được lưu lại ở máytính của người dùng hay trong mã gửi đến người dùng thông qua trình duyệt
Trạng thái của phiên làm việc sẽ được lưu theo ba cách sau:
- Trường ẩn trong form
- Tham số CGI (cả trong phương thức GET và POST)
- Cookies
1 Tấn công vào trường ẩn:
1.1 Nội dung:
Ta có 1 form đơn giản gồm cả trường ẩn sau:
<form action = “giaodich.php” method = “post”>
<input type = “hidden” name = “price” value = “99”/>
</form>
Nếu không có gì thay đổi, thì máy chủ sẽ nhận được giá trị của biến price là
99 Nếu hacker thay đổi giá trị của biến price:
<form action = “giaodich.php” method = “post”>
<input type = “hidden” name = “price” value = “0.99”/>
</form>
Như vậy là giá trị của biến price chỉ còn là 0.99 khi đến máy chủ (Nếu đây làform xác nhận mua hàng thì cửa hàng sẽ bị lỗ rất nhiều)
1.2 Cách phòng tránh:
Trang 152 Tấn công dựa vào tham số CGI:
2.1 Nội dung:
Tham số CGI có thể nhìn thấy ở cuối của URL trong yêu cầu GET đằng sau dấu
“?”, mỗi tham số là một cặp gồm tên-giá trị phân cách nhau bằng dấu “=”, các
tham số được phân cách nhau bởi dấu “&” Nếu trong phương thức POST, ta có thể
tìm thấy ở phần chính của yêu cầu
Ta thấy trong chuỗi trên có tham số f và có giá trị là t%E1%BA%A5n+c
%C3%B4ng
Ta có thể chỉnh sửa URL một cách thủ công bằng cách thay đổi giá trị của tham
số hoặc thêm vào các tham số khác
Ví dụ: nếu ứng dụng web cho phép người dùng thay đổi mật khẩu và trang thay đổi
có URL truyền đi như sau:
http://thao-demo.com/changepasswd.php?u_name=thao&&new_passwd=abc
Trong URL trên có 2 tham số là:
Tham số u_name là tên tài khoản người dùng, có giá trị là thao
Tham số new_passwd là mật khẩu mới của tài khoản thao, có giá trị là abc
Ta có thể thay đổi giá trị của new_passwd từ abc thành xyz chẳng hạn.Như trong ví dụ trên ta có thể thay đổi mật khẩu của 1 tài khoản mà không cần tớimật khẩu cũ (tất nhiên là trong thực tế sẽ không tồn tại khả năng như vậy)
2.2 Cách phòng tránh:
- Xử lý tham số như xử lý phần người dùng nhập vào.
- Kiểm tra giá trị của chúng khi gửi lên server.
- Không sử dụng các phương thức GET truyền biến qua địa chỉ như vậy, hoặc nếu có
dùng thì hạn chế tối đa và đặt tên biến khó hiểu
Ví dụ như:
http://thao-demo.com/checklogin.php?pass=xyz&&a=thao&&b=123
như trên em đã dùng 1 biến là pass để làm khóa cho file checklogin.php, nếu điềnđúng giá trị của pass thì mới sử dụng được giá trị a là biến chứa tên tài khoản, và b
là biến chứa mật khẩu
3 Tấn công bằng cách làm nhiễm độc cookie:
3.1 Nội dung:
Cookie là dữ liệu dùng chung của server và client, do server tạo ra và lưu ở máy
Trang 16Khóa luận tốt nghiệp 2013
Cookie của mỗi ứng dụng web là khác nhau tùy vào người thiết kế ứng dụng, khácnhau theo cả trình duyệt web của người dùng Cookie có thể được thay đổi dễ dàngtrong file text
Hình 1 - Cookies được lưu của trang web
Hacker sẽ thay đổi những giá trị các trường trong cookie như là:
- Thay đổi thời hạn của cookie
- Thay đổi các dữ liệu xác thực
- Thay đổi thông tin giỏ hàng
3.2 Cách phòng tránh:
- Sử dụng đối tượng session thay cho cookie lưu trữ thông tin quan trọng trên
server 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 đó trongcache 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 id “người quảntrị” được được thiết lập là đúng trong cookie, nhưng giá trị của số thứ tự ngườidù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
Trang 174 Tấn công bằng nhảy URL:
4.1 Nội dung:
Người dùng gõ vào một URL và nhảy tới trang đó, không tuân theo thứ tự cáctrang thông thường của ứng dụng Ví dụ: Người dùng có thể truy cập mà không cầnđăng nhập Người dùng có thể mua hàng mà không cần trả tiền
Ta có thể hiểu:
chỉ trên vào thanh url của trình duyệt, trình duyệt sẽ đưa ta đến file index.php tức là
nhập rồi sau đó trình duyệt sẽ dẫn tới file trade.php để thực hiện giao dịch:
- Hạn chế truy cập vào tất cả các URL không dành cho người sử dụng như
những trang dành cho admin
- Khóa sự truy cập vào những nơi không phải là trang web
- Sử dụng thêm cookie, trường ẩn để chặn truy cập vào các trang không đúng
trình tự
- Sử dụng session để lưu phiên làm việc của từng user.
5 Tấn công chiếm hữu phiên làm việc (Session hijacking):
5.1 Nội dung:
Ứng dụng web lưu trạng thái mỗi phiên làm việc của người dùng bằng mã phiênlàm việc (session ID) Server sẽ cung cấp mỗi session ID khác nhau cho mỗi ngườidùng khác nhau để chứng thực phiên làm việc đó
Để duy trì phiên làm việc, SessionID thường được lưu vào:
- Tham số CGI
- Trường ẩn trong form
- Các cookie
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ờicho 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
Trang 18Khóa luận tốt nghiệp 2013
Hình 2 - Thông tin về session trong 1 phiên làm việc.
Những kẻ tấn công có thể thực hiện những cách sau:
Trang 19- Ăn cắp một mã phiên thông qua XSS Hacker sẽ sử dụng đoạn mã trên trình duyệtcủa nạn nhân và gửi kết quả về máy của mình.
Hình 4 - Tấn công ấn định phiên làm việc
Trong tấn công ấn định phiên làm việc, kẻ tấn công ấn định sẵn SessionID cho nạnnhân trước khi họ đăng nhập vào hệ thống Sau đó kẻ tấn công sẽ sử dụng SessionID này
để tiếp tục phiên làm việc của nạn nhân
5.2 Cách phòng tránh:
- 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ìcho trình chủ tạo mới, do đó để có thể phòng chống, ứng dụng phải hủy bỏ session
ID đượ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ộtsession ID mới khi người dùng đăng nhập thành công
- 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
Trang 20Khóa luận tốt nghiệp 2013
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ốngkhông thể sử dụng phương pháp tấn công này
- 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
dùng
thực hiện trên trình chủ hoặc trình duyệt (cookie)
thời và có thể những session ID còn lưu lại trên hệ thống khi họ quên thoát rangoà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
Chú ý:
- Không được chủ quan khi nghĩ rằng thuật toán tạo session của ứng dụng là bảo mật,
không ai có thể đoán được
- 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ướcsession ID sẽ là một vấn đề nếu thuật toán không tốt
III Phòng chống chèn mã lệnh thực thi trên trình duyệt (crosssites scripting XSS):
-1 Nội dung:
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ữngngườ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ườidù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ộtcá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
Trang 21http:// thao-demo 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ủaWebsite
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 loginhòm thư của người sử dụng này
<form action="http://thao-demo.com/save.asp" method="post" name="XSS">
<input type="hidden" name="cookie">
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ủaWeb 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 đó
Trang 22Khóa luận tốt nghiệp 2013
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ủaWebsite, 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ấtcookie, hay có thể sẽ bị cài các loại virus, backdoor, worm,…
2 Cách phòng tránh:
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ìnhduyệ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 XSSnà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ọccá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ự đặcbiệt, dấu nháy đơn kép, ký tự Null,… được định nghĩa trong đặc tả của HTML Mỗitrườ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 chophé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:
Lỗ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áychủ 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ặckhô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à ảnhhưở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
Trang 23mộ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.
IV Phòng chống chèn mã SQL – SQL Injection:
1 Khái niệm SQL Injection:
Trong chương này, chúng ta sẽ tìm hiểu kỹ càng hơn về phương pháp tấn công SQLInjection và các phương pháp phòng tránh hữu hiệu
SQL Injection (còn gọi là SQL Insertion) là một hình thức tấn công trong đó truy vấnSQL của ứng dụng đã bị chèn thêm các tham số đầu vào “không an toàn” do người dùngnhập vào, từ đó mã lệnh được gửi tới máy chủ database để phân tích cú pháp và thực thi.Hình thái chính của SQL Injection bao gồm việc chèn trực tiếp mã vào các tham số
mà sẽ được ghép vào các câu lệnh SQL (quá trình này gọi là sinh truy vấn SQL động) đểtạo thành truy vấn của ứng dụng gửi tới máy chủ database Một cách tấn công khác ít trựctiếp hơn, đó là chèn mã độc vào các xâu mà đích đến là việc lưu trữ trong các bảng hoặc
từ điển dữ liệu (metadata)
Khi các chuỗi đó được ghép vào các câu lệnh SQL thì đoạn mã đó sẽ được chạy Khiứng dụng Web thất bại trong việc lọc các tham số đầu vào (được dùng làm nguyên liệucho quá trình sinh SQL động), ngay cả khi dùng hình thức tham số hóa (parameterize) thì
kẻ tấn công có thể dễ dàng điều chỉnh quá trình xây dựng truy vấn SQL Một khi kẻ tấncông có thể sửa câu truy vấn SQL, thì những truy vấn SQL anh ta muốn sẽ được thực thivới quyền của người sở hữu ứng dụng, và thiệt hại anh ta có thể gây ra sẽ tùy theo quyềnhạn được cấp
SQL Injection là một dạng tấn công dễ thực hiện, hầu hết mọi thao tác người tấn côngcần được thực hiện với một trình duyệt web, có thể kèm theo một ứng dụng proxy server.Chính vì đơn giản như vậy cho nên bất cứ ai cũng có thể học cách tiến hành một cuộc tấncông Lỗi bắt nguồn từ mã nguồn của ứng dụng web chứ không phải từ phía database,chính vì thế bất cứ thành phần nào của ứng dụng mà người dùng có thể tương tác được đểđiều khiển nội dung (ví dụ : các form, tham số URL, cookie, tham số referrer, user-agent,
…) đều có thể được sử dụng để tiến hành chèn truy vấn có hại
Có thể rút ra vài nhận xét sau về lỗi SQL Injection:
Xác suất gặp phải lỗ hổng bảo mật loại này trong một trang web là khá cao
Là một trong số những lỗi bảo mật phổ biến nhất
Trang 24Khóa luận tốt nghiệp 2013
các đoạn mã JavaScript độc Bản chất điểm yếu SQL Injection là xuất hiện từ trong quátrình xử lý dữ liệu input của người dùng bên trong mã nguồn, do chính thời gian bảo trì
mã nguồn thường kéo dài nên các lỗi SQL Injection cũng chậm được khắc phục triệt để.Với tính nghiêm trọng của các cuộc tấn công, tính dễ thực hiện một cuộc tấn công đãkhiến cho SQL Injection một thời từng là hiểm họa nghiêm trọng đối với các giao dịchthương mại điện tử trên các ứng dụng Web được phát triển thiếu an toàn Hiện nay, việcnghiên cứu SQL Injection đã có hệ thống và toàn diện hơn, mối nguy hiểm này đã giảm
đi, nhưng các số liệu thống kê vẫn cho thấy vấn đề này còn chưa được giải quyết triệt để
2 Cơ chế sinh truy vấn SQL bên trong ứng dụng:
Tham số được nhập vào sẽ được sử dụng để xây dựng các truy vấn SQL nên nó sẽ cầnthỏa mãn các ràng buộc cú pháp với thành phần trước và sau trong truy vấn gốc
Xét đoạn mã PHP xử lý đăng nhập sau:
<?php
$_username = $_POST['username'];
$_passwd= $_POST['passwd'];
$str = "select * from users where username =
‘$_username’ && password = ‘$_passwd’";
SELECT * FROM users WHERE username=’$_username’ &&password = ‘$_passwd’;
Trong đó hai giá trị $_username và $_passwd được nhập từ người dùng Khi thực hiện
nhập giá trị username là admin’ or ‘1’=’1 truy vấn động thu được sẽ như sau:
Trang 25SELECT * FROM users WHERE username=’admin’ ANDpassword=’’;
Trường hợp này rõ ràng đăng nhập thất bại Tiếp tục thử với việc thêm cả cụm ‘ or
‘1’=’1 vào cả password, ta có truy vấn được sinh ra:
SELECT * FROM users WHERE username=’admin’ or ‘1’=’1’ ANDpassword=’’ or ‘1’=’1’;
Truy vấn trên tương đương với:
SELECT * FROM users WHERE username=’admin’ andpassword=’’ or ‘1’=’1’;
Trường hợp này việc xác thực đã thành công do mệnh đề WHERE luôn đúng Ngoài
cách trên ta có thể thực hiện chèn thêm một đoạn or ‘1’=’1 vào username, tức là admin’
or ‘1’=’1’ or ‘1’=’1 vào, kết quả thu được cũng tương tự, do toán tử AND đã được “khử”
trước các toán tử OR
3 Các phương pháp tấn công phổ biến:
3.1 Tấn công khai thác dữ liệu thông qua toán tử Union:
Khai thác thông tin thông qua việc sử dụng UNION là một trong 2 nhánh chính củaviệc khai thác dữ liệu thông qua lỗi SQL Injection Các điểm yếu SQL Injection có thểkhai thác được thông qua UNION là dạng điểm yếu mà thông tin trả về có thể được hiểnthị trực tiếp trên thông điệp phản hồi Loại hình thứ hai đó là thông qua các toán tử điềukiện sẽ được đề cập ở phần sau
Toán tử union sẽ thực hiện ghép dữ liệu của truy vấn gốc và truy vấn khai thác.Điều kiện là hai truy vấn này phải trả về cùng số cột, và các cột này có cùng kiểu dữ liệu
Để có thể thực hiện các khai thác thông qua toán tử UNION, chúng ta cần thực hiện banđầu hai giai đoạn, đó là tìm số cột, kiểu dữ liệu của các cột, và giai đoạn hai đó là tìm cộtnào có thể “chứa” thông tin trả về của truy vấn khai thác
3.1.1 Tìm số cột và kiểu dữ liệu của cột:
Xét một trang web chứa điểm yếu SQL Injection trên biến id tại đường dẫn sau:http://www.raysonicaudio.com/product_details.php?ID=4
Trang 26Khóa luận tốt nghiệp 2013
Hình 5 - Trang nạn nhân ban đầu
Để tìm ra số cột của bảng hiện thời, có hai cách có thể sử dụng, sử dụng UNION hoặc
sử dụng ORDER BY Giả sử truy vấn của ứng dụng xây dựng để trả về kết quả hiện thời
có dạng:
SELECT * FROM tbl_products WHERE id=4;
Mệnh đề ORDER BY được sử dụng để sắp xếp kết quả trả về bởi truy vấn theo cộtđược chỉ định Nếu cột đó không tồn tại,một thông báo lỗi trả về Giả sử ta muốn sắp xếptheo cột thứ 2 ta chèn tham số ORDER BY 2 vào giá trị tham số product_id, ví dụ ta cótruy vấn kiểu sau:
SELECT * FROM tbl_products WHERE id=4 ORDER BY 2
Trang 27Hình 6 - Trang nạn nhân, order by 2
Thấy có lỗi báo và thấy luôn cả câu truy vấn của mã nguồn: có 2 câu lệnh order by,
do đó cần chỉnh sửa câu lệnh của ta một chút:
SELECT * FROM tbl_products WHERE id=4 ORDER BY
2 Trong đó, ta thêm dấu - - để loại bỏ các câu truy vấn phía sau của mệnh đề
Trang 28Khóa luận tốt nghiệp 2013
Hình 7 – trang nạn nhân với truy vấn order by
2 Không có lỗi trả về, vậy bảng hiện tại có ít nhất 2 cột, ta tiếp tục tăng số cột dự đoánlên Chiến thuật đoán này có thể sử dụng tìm kiếm nhị phân, tức chúng ta xác định haimốc lớn nhất và bé nhất, từ đó tìm nhị phân giữa hai mốc này
Trang 29Ví dụ với mốc 6 cột, ta thấy trả về lỗi :
Hình 8 - Trang nạn nhân, order by
6 Tiếp tục tìm kiếm nhị phân giữa hai mốc 2 và 6, ta tìm được số cột là 2
Các thông tin khai thác được có thể biểu diễn thuận lợi nhất ở dạng xâu ký tự, vì thế,tiếp theo mục đích của chúng ta đó là tìm các cột trong số 2 cột trên có kiểu dữ liệu là xây
ký tự, rất đơn giản, chúng ta chỉ cần thực hiện UNION với truy vấn khai thác có cột cầnkiểm tra có giá trị xâu ký tự Để tránh gây nhiễu kết quả, các cột khác để giá trị NULL
Trang 30Khóa luận tốt nghiệp 2013
Hình 9 - Trang web nạn nhân, kiểm tra kiểu cột 1
Tiếp tục thử với các cột khác để có nhiều lựa chọn khai thác sau này
3.1.2 Tìm cột có khả năng “chứa” thông tin khai thác được:
Mục đích của công việc này đó là tìm cột có nội dung được hiển thị trên phản hồi, khi
đó “nhúng” thông tin khai thác được vào đó Sử dụng các nội dung mang tính “chỉ điểm”cột có thể khai thác được như sau:
SELECT * FROM tbl_products WHERE id = 4 UNION SELECT1,2
Nếu thấy bất cứ con số nào trong số các giá trị “chỉ điểm” kia xuất hiện bất thườngtrong phản hồi, ta có thể biết, cột đó có thể dùng để “nhúng” thông tin khai thác được
Trang 31UNION select
Trang 32user(),@@version Khóa luận tốt nghiệp 2013
Hình 12- “Nhúng” thông tin khai thác vào cột “mang” dữ liệu Kết quả cho thấy, ứng dụng nạn nhân đang sử dụng MySQL phiên bản 5.5.30 và user
hiện tại thực hiện truy vấn là raysonic_root@localhost.
3.2 Câu lệnh điều kiện
Ý tưởng chung của dạng tấn công dựa trên các câu lệnh điều kiện này chính là khiếncho database trả về những trạng thái khác nhau phụ thuộc vào từng điều kiện được đưa
ra Mỗi điều kiện đưa ra đó có thể giúp suy ra được từng bit của một byte dữ liệu cụ thể.Việc đi sâu vào dạng tấn công này sẽ được đề cập ở chương Blind SQL Injection, hiện tạichúng ta sẽ đề cập tới nguyên tắc chung của nó
Một truy vấn dựa vào điều kiện sẽ có dạng như một câu lệnh điều kiện trên các ngônngữ lập trình ứng dụng thông thường, tức là có dạng:
IF điều_kiện THEN chuỗi_xử_lý_đúng ELSE chuỗi_xử_lý_sai
Trên các DBMS cụ thể, có một số truy vấn dạng trên:
- Trên SQL Server:
IF(biểu_thức_boolean) SELECT trường_hợp_đúng ELSE
trường_hợp_sai
- Trên MySQL: SELECT
IF(biểu_thức_boolean, trường_hợp_đúng, trường_hợp_sai)
Trang 333.2.1 Mô hình dựa trên nội dung phản hồi
Đầu tiên chúng ta cần làm rõ tên gọi của mô hình này Phản hồi ở đây chính là nộidung kết quả truy vấn được database trả về Mô hình dựa trên phản hồi này sẽ dựa trên sựkhác biệt về nội dung phản hồi so với trường hợp nào đó tương đồng để suy ra đúng.Trường hợp dễ phân biệt nhất là phân biệt với một thông báo lỗi Các lỗi có lợi thếhơn so với các dạng khác chính là do thời gian thực thi truy vấn chứa nó rất nhanh, cáclỗi được dùng đa phần được phát hiện ra trong thời gian phân tích cú pháp của truy vấnchứ chưa hề được thực thi bên trong database, do đó thời gian phản hồi sẽ rất nhanh.Trường hợp tham số kiểu số (numeric): một mệnh đề suy luận có thể trả về giá trị 0,lỗi khi thực hiện phép chia cho 0 là một ví dụ, minh họa với mệnh đề suy luận usernamecủa người dùng hiện thời, database đối tượng là MySQL:
http://demo.com/products.php?id=32/(selectif((substr(user(),1,5) like 'admin%'),1,0))Nếu người dùng hiện thời có username bắt đầu bởi cụm “admin” thì id có giá trị là 32chia cho 1, ngược lại là 32 chia cho 0 (sinh lỗi) Có thể biểu diễn URL trên ở một dạngkhác như sau:
về đó là thay vì sinh lỗi, ta sinh một truy vấn hợp lệ có kết quả khác với truy vấn ban đầucủa ứng dụng Ví dụ:
Request ban đầu:
3.2.2 Mô hình dựa trên độ trễ phản hồi
Mô hình này dựa trên sự khác biệt về thời gian nhận được phản hồi từ database servernên còn được gọi là mô hình dựa trên thời gian (timebased) Khác với phương pháp nhận
Trang 34Khóa luận tốt nghiệp 2013
nội dung của truy vấn trả về, do đó các cấu hình chặn và xử lý thông báo lỗi của quản trịviên không ảnh hưởng tới phương pháp này
Các độ trễ thực thi của truy vấn chính được sinh ra do các hàm thực hiện hoãn thực thihoặc do việc thực thi một lượng truy vấn phụ lớn Các hàm trên các DBMS hỗ trợ trìhoãn thực thi truy vấn như WAITFOR DELAY trên SQL Server, SLEEP trên MySQL,…
Ví dụ một request sử dụng độ trễ để phân biệt trường hợp đúng/sai của mệnh đề suy luận:
“đánh dấu” trường hợp đúng/sai của mệnh đề quan hệ, ta chia ra hai cách chính thực hiệnblind SQL Injection:
- Dựa vào nội dung phản hồi (response-based)
- Dựa vào độ trễ của thời gian phản hồi (time-based)
Các phương pháp thực hiện blind SQL Injection có thể áp dụng cho các mô hìnhkhác mà không gặp trở ngại nào, tuy nhiên chi phí thực hiện sẽ luôn cao hơn về mặt thờigian và số truy vấn cần thiết
Tấn công Blind SQL Injection dựa vào thời gian phản hồi là cách tiến hành khai tháccác lỗi Blind SQL Injection mạnh nhất Trong nhiều trường hợp tuy truy vấn có chứađiểm yếu, nhưng kết quả của truy vấn “sạch” với truy vấn “độc hại” không có sự khác
Trang 35- Gọi các hàm trì hoãn thực thi được các DBMS hỗ trợ
- Sử dụng các truy vấn “lớn”
này Đây là trang web cho phép các nhà hàng đăng thông tin về các món ăn để cho kháchhàng đăng ký gọi món Request ban đầu:
Hình 13 - Truy vấn ban đầu
Thời gian phản hồi của request trên là 6 giây Chúng ta thử với một mệnh đề suy luậnphiên bản MySQL hiện tại Mệnh đề chúng ta sử dụng như sau:
if(@@version not like ‘5’, benchmark (100000,md5( rand()) ), 31)
Nếu phiên bản khác ‘5’, hàm benchmark thực hiện băm md5 chuỗi ký tự được sinhngẫu nhiên trong 100 nghìn lần, và sẽ sinh độ trễ nhất định Ví dụ:
Trang 36Khóa luận tốt nghiệp 2013
Hình 14 - Truy vấn khai thác sinh độ trễ
Độ trễ trong truy vấn phản hồi trên là 9 giây, như vậy phiên bản MySQL hiện tại ởserver không phải 5, dễ dàng suy ra đó là MySQL v4.x Tất nhiên thông tin khai thácđược không chỉ dừng lại ở việc khai thác tên phiên bản, mọi truy vấn khai thác có thể xâydựng ví dụ như việc dò từng ký tự password của username hiện tại, …
Các truy vấn lớn ở đây được hiểu là các truy vấn trên những tập dữ liệu rất lớn, ví
dụ dữ liệu metadata của database Khi thực hiện những truy vấn này bộ tối ưu phải làmviệc nhiều, và truy vấn sẽ bị trì hoãn một cách rất “tự nhiên”
Vẫn tiếp theo ví dụ trên, ta thực hiện chèn một mệnh đề suy luận vào tham số, trongmệnh đề suy luận này, chúng ta sử dụng một truy vấn “lớn” để làm “dấu hiệu” phân biệttrường hợp mệnh đề suy luận đúng/sai:
a = 15 and (char_length(username()) > 2) and 2<(selectcount(*) from information_schema.columns)
Biến a lấy giá trị của resid (id của nhà hàng), username là tên đăng nhập của nhà hàng.Mệnh đề suy luận chính là char_length(username()) > 2, truy vấn ‘lớn’ là truyvấn thứ 3, đếm số bản ghi trong bảng columns Việc suy luận diễn ra như sau:
truy vấn đòi hỏi chi phí cao
Trong trường hợp truy vấn này, bộ lập lịch sẽ thực thi mệnh đề suy luận trước Bởigiá trị true/false của nó sẽ quyết định tới việc có phải thực thi truy vấn lớn phía sauhay không
Nếu mệnh đề suy luận trả về false, truy vấn lớn sẽ bị bỏ qua, bởi ít nhất 1 toán hạngtrong toán tử and nhận giá trị false đủ khiến kết quả trở thành false
Nếu mệnh đề suy luận true, truy vấn lớn được thực thi và chúng ta sẽ quan sát thấy
độ trễ được sinh ra
Trường hợp mệnh đề suy luận false: thời gian tương đương truy vấn ‘sạch’ ban đầu,
cụ thể là 6 giây Trường hợp mệnh đề truy vấn true: thời gian tổng cộng là 17 giây vớitrường hợp không sử dụng phép nối tích Decartes trong mệnh đề FROM
Trang 37Hình 15 - Mệnh đề suy luận có giá trị sai
Hình 16 - Mệnh đề suy luận có giá trị đúng
Có thể thấy rõ rằng, trong trường hợp mệnh đề suy luận là TRUE, tức là độ dàiusername hiện tại lớn hơn 2, thì thời gian phản hồi truy vấn bị kéo dài thành 8 giây Việcnày rõ ràng rất dễ nhận ra Chúng ta có thể mở rộng bất cứ truy vấn khai thác nào theo
mô hình này chứ không chỉ sử dụng để xác định độ dài username
3.4 Qua mặt các bộ lọc tham số đầu vào:
Hiện tại, các ứng dụng đã triển khai nhiều biện pháp nhằm phòng chống những cuộc
Trang 38Khóa luận tốt nghiệp 2013
thức được chú trọng nhất đó là xây dựng các bộ lọc nhiều cấp, ban đầu từ mức các hệthống tường lửa Web (Web Application Firewall), các hệ thống ngăn chặn xâm nhập IPS(Intrusion Prevention System), sau đó là các phép lọc, chuẩn hóa dữ liệu trong mã nguồn,
… Chúng ta cần xem xét các phương pháp được sử dụng để qua mặt các bộ lọc này, từ đó
có chiến lược phòng tránh thích hợp Một số phương pháp được đề cập sau đây
3.4.1 Lợi dụng sự khác nhau giữa ký tự in thường và in hoa
SQL là ngôn ngữ không nhạy cảm kiểu ký tự thường hay hoa Trong một số trườnghợp bộ lọc từ khóa được xây dựng hời hợt, có thể xảy ra tình huống những từ khóa vềbản chất như nhau trong truy vấn SQL nhưng được ghép bởi ký tự khác kiểu nhằm vượtqua bộ lọc Ví dụ đoạn truy vấn inject sau:
‘ And
‘1’=’1’ Giải pháp phòng tránh cho tình huống này cũng khá đơn giản, chuyển hết trường hợpcần xét về dạng chữ hoa hoặc chữ thường để lọc
3.4.2 Sử dụng SQL comment thay thế khoảng trắng
Vai trò của các khoảng trắng là phân cách các từ tố trong mã nguồn Do đó mộtphương thức lọc dữ liệu đầu sử dụng việc xóa các khoảng trắng nhằm vô hiệu hóa các từkhóa nguy hiểm có trong dữ liệu đầu vào của tham số
Ví dụ với một chuỗi giá trị tham số đầu vào như sau:
‘ UNION SELECT * FROM tbl_users LIMIT
1,3 Sẽ dễ dàng được biến đổi như sau để vượt qua bộ lọc:
‘/**/UNION/**/SELECT/**/*/**/FROM/**/tbl_users/**/LIMIT/**/1,3
Bởi bộ ký tự comment nhiều dòng được bỏ qua trong khi phân tích cú pháp nhưngchính vì thế mà nó có tác dụng như dấu khoảng trống trong việc ngăn cách các từ
Trang 39
**/LI/**/MIT/**/1,3 3.4.3 Sử dụng URL Encoding
“Mã hóa URL là việc chuyển đổi các ký tự trên URL về một định dạng mà có thể
http://www.w3schools.com/html/html_urlencode.asp)
Một số đặc điểm của URL đã được mã hóa:
- URL được biểu diễn bởi tập các ký tự ASCII
- Các ký tự ASCII không an toàn được thay thế bằng cụm“%xx” trong đó xx là cụm
ký tự đại diện cho ký tự không an toàn tương ứng trong bảng mã ISO-8859-1(Tham khảo tại: http://www.w3schools.com/tags/ref_entities.asp)
- Các khoảng trắng (dấu cách) được thay thế bằng dấu cộng (+).
Một điểm yếu được phát hiện ra trong việc xây dựng bộ lọc giá trị tham số đầu vàocho PHP Nuke (2007), trong đó bộ lọc thực hiện chặn cả các khoảng trắng và cụm ký tự
mở khối comment nhiều dòng /* Điểm yếu được phát hiện ra là bộ lọc thất bại trong việcngăn chặn ký tự mở khối comment nhiều dòng được biểu diễn ở dạng URL đã mã hóa Ví
dụ, tham số giả mạo sau:
‘/**/UNION/**/SELECT/**/password/**/FROM/**/tbl_users/**/WHERE/**/username/**/LIKE/**/‘admin’
Có thể được mã hóa URL như sau để qua mặt bộ lọc (mã hóa cụm /* thành %2f%2a):
Thực thi các truy vấn động này ở mỗi DBMS sẽ có những khác biệt nhau, đa phần là
sự khác biệt từ những hàm được gọi để thực thi truy vấn Ở SQL Server có hàmEXEC(string query) được sử dụng để thực thi một truy vấn ở dạng chuỗi Ví dụ:EXEC(‘SELECT password FROM tbl_users’) Trong Oracle, sử dụng lệnh EXECUTE
Trang 40Khóa luận tốt nghiệp 2013
Dấu + gặp phải trong trường hợp của MySQL có thể sử dụng mã hóa URL để có thểgửi truy vấn trên thông qua HTTP request
Một dạng xử lý xâu hiệu quả hơn đó là sử dụng các hàm đại diện, có thể trả về ký tự
bị cấm thông qua chuyển đổi mã ASCII hoặc mã HEXA của nó Các hàm như CHAR(hay CHR trên Oracle) được sử dụng để thực hiện việc này Có hai cách thực hiện việc
xử lý chuỗi ký tự :
mã ASCII của ký tự đó , ví dụ: SELECT ta sẽ thực hiện biến đổi thành
char(83)+char(69)+char(76)+char(69)+char(67)+char(84)
diện cho cả xâu bị cấm, ví dụ select sẽ được biểu diễn bởi: 0x73656c656374
Ta có một truy vấn được thực thi động như sau: