5.1 Mã Hóa URL (URL Encoding)
a. Khái niệm
Theo RFC 1738 định nghĩa URL và RFC 2369 cho URIs, những kí tự được giới hạn sử dụng trên URL hoặc URI là một tập các kí tự US-ASCII. Theo RFC 1738, 2369 những kí tự chữ số, kí tựđặc biệt như “ $-_.+!*’() ” và một số kí tự dành riêng là không bị mã hoá trên URL hay URIs. Còn những kí tựđặc biệt khác thì được mã hóa như khoảng trắng, < > ”…Sau khi trình chủ nhận được dữ liệu này, trình chủ sẽ tự động giải mã để thao tác như bình thường.
Vậy hacker có thể lợi dụng được gì trong URL mã hóa này.
Những nhà phát triển ứng dụng có thể sẽ thiết kế ứng dụng để kiểm tra dữ liệu nhập vào của người dùng có hợp lệ hay không, những kí tự đặc biệc như < > trong thẻ script thường được dùng trong những kĩ thuật tấn công như XSS sẽ bị lọai bỏ Vậy để hợp thức hóa nội dung dữ liệu cần nhập, hacker thay vì nhập trựctiếp kí tự đặc biệt vào ô nhập thì họ có thể nhập những kí tự đã được mã hoá theo chuẩn RFC 1738, RFC 2369. Như vậy bằng cách đó, hacker có thể dễ dàng vượt qua kiểm soát này.
b. Một số biện pháp phòng chống
Tránh sử dụng phương thức GET vì nếu dùng GET, dữ liệu dễ dàng được thêm vào URL. Vì thế, sử dụng phương thức POST bất cứ khi nào có thể.
Trong trường hợp URL bắt buộc được sử dụng để chuyển dữ liệu lên trình chủ, cần giới hạn kiểu dữ liệu, nên kiểm tra dữ liệu trong ứng dụng trước khi sử dụng.
Không nên sử dụng ngôn ngữ máy khách để kiểm tra tính đúng đắn của dữ liệu.
5.2 Kiểu tấn công vượt đường dẫn
a. Khái niệm
Nhiều ứng dụng sử dụng tập tin hệ thống của trình chủ trong “lớp trình bày” để hiển thị thông tin lưu trử tạm thời. Những tập tin này bao gồm những tập tin hình ảnh , tập tin HTML, hay những ứng dụng CGI. Thư mục WWW-ROOT là một thư mục gốc ảo bên trong trong hoặc bên ngòai WWW-ROOT.
Nếu ứng dụng không kiểm tra những kí tự đặc biệt, thường được sử dụng trong đường dẫn như “/” thì có thể rằng ứng dụng đã có một lỗ hổng cho kiểu tấn công vượt đường dẫn. Hacker có thể yêu cầu trình chủ trả về kết quả là nội dung những tập tin vật lí như /etc/password…
Tóm lại :
Kiểu tấn công này cũng dựa vào sự lỏng lẻo trong quá trình kiểm tra dữ liệu trên URL, cookie, HTTP Header yêu cầu. Lợi dụng quyền truy xuất một tập tin của ứng dụng, nhờđó hacker có thể xem được file lưu trữ trên hệ thống.
b. Một số biện pháp phòng chống
Việc phòng chống kiểu tấn công vượt đường dẫn là một thử thách lớn cho những nhà ứng dụng trong một hệ thống phân tán. Tuy nhiên, cách phòng chống tốt nhất vẫn là Ứng dụng cần kiểm tra việc truy xuất file trước khi xuất kết quả cho trình duyệt.
5.3 Tấn công dựa vào ký tự rỗng
a. Khái niệm
Nhiều ứng dụng Web thường sử dụng ngôn ngữ lập trình như C, Java để tạo modul xử lý những công việc như thao tác trên những dữ liệu nhập vào từ người dùng. Lợi dụng kí tự kết thúc chuỗi mà hacker sẽ thêm vào một chuỗi nhập để đánh lừa ứng dụng.
b. Một số biện pháp phòng chống
Cách duy nhất để phòng chống trường hợp này đó là chỉ chấp nhận những dữ liệu hợp lệ. Những kí tự như “\” phải bị lọai bỏ trước khi ứng dụng sử dụng chúng.
5.4 Ngôn ngữ phía trình chủ
a. Khái niệm
SSI là đoạn mã được nhúng vào trong trang Web để yêu cầu trình chủ cung cấp thông tin ở một điểm nào đó trong trang.
Tuy nhiên, SSI không phải được hỗ trợ trong hầu hết các trình chủ, Apache và IIS là 2 trình chủ hỗ trợ SSI. Trang Web có sử dụng SSI thường được lưu dưới dạng .shtml hoặc.stm (là phần mở rộng của .html hay .htm) để báo hiệu cho trình chủ biết trang này có sử dụng SSI để tiết kiệm thời gian xử lí cho trình chủ (không mất thời gian tìm kiếm).
b. Quá trình thực hiện xử lí một trang Web yêu cầu:
Nếu không có bất kì chỉ thị nào khác, trình chủ chỉ gửi nội dung trang Web cho trình duyệt nhưng với một SSI, thì công việc tuần tự theo những bước như sau:
1. Trình chủ nhận dữ liệu và phân tích dữ liệu (tìm kiếm và phân loại những câu lệnh đặc biệt) để chỉ thị thực hiện
2. Dưa trên những câu lệnh mà trình chủ tìm thấy, trình chủ thực thi những câu lệnh đó để trả kết quả cho trình duyệt.
3. Trả kết quả về cho trình duyệt 4. Có 3 khả năng thực hiện:
5. Nhận thông tin từ một file và chèn vào trong trang 6. Gán giá trị cho một số biến
7. Gọi chương trình CGI
c. Cách tấn công
Hacker lợi dụng những ô nhập để chèn thêm vào đónội dung một câu lệnh SSI. Ví dụ :
<!--#jdbc select="SELECT * FROM User" name="result" driver="org.gjt.mm.mysql.Driver"
url="jdbc:mysql://localhost:3306/project" --> Thiết lập câu lệnh Select
<!--#jdbc name="result"next="true"-->
Câu lệnh này di chuyển con trỏ đến dòng đầu tiên trong tập
d. Biện pháp phòng chống
Với người quản trị, cấu hình lại trình chủ sao cho trình chủ không hỗ trợ SSI.
Với người lập trình, kiểm tra kĩ nội dung dữ liệu gửitừ người dùng. Loại bỏ những kí tự như < > # -- !…Tuy nhiên điều này nên được thực hiện tại trình chủ, không nên kiểm tra tính đúng đắn của dữ liệu bằng ngôn ngữ phía trình khách, vì khả năng
PHẦN IV - TỔNG KẾT CÁC BIỆN PHÁP PHÒNG CHỐNG 1. VỚI NHỮNG NHÀ QUẢN TRỊ MẠNG
Người quản trị hệ thống cần xác định rõ những đối tượng nào là quan trọng nhất trong hệ thống cần bảo vệ; xác định rõ mức độ ưu tiên đối với những đối tượng đó.
Ví dụ các đối tượng cần bảo vệ trên một hệ thống có thể là: Các máy chủ dịch vụ, các router, các điểm truy nhập hệ thống, các chương trình ứng dụng, hệ quản trị CSDL, các dịch vụ cung cấp…
•Cấu hình cho những ứng dụng:
Thận trọng trong việc cấu hình trình chủ và một số ứng dụng. Trình chủ nên hay không cho phép thực thi những câu lệnh SSI. Ngoài ra phải thiết lập quyền cho ứng dụng chỉ chạy dưới một số quyền hạn nhất định như trong quản trị CSDL (không nên chạy quyền Admin) tránh trường hợp hacker có thể lợi dụng chạy những câu lệnh điều khiển hệ thống.
Xác định nguy cơ đối với hệ thống chính là xác định các lỗ hổng bảo mật của các dịch vụ, ứng dụng trên hệ thống đó. Việc xác định đúng đắn các nguy cơ này giúp người quản trị có thể tránh được những cuộc tấn công mạng, hoặc có những biên pháp bảo vệ đúng đắn bằng cách thường xuyên cập nhật tin tức trên các nhóm tin về bảo mật và từ nhà cung cấp phần mềm sử dụng. Khi phát hiện lỗi cần cập nhật những phần mềm mới nhất để tránh trường hợp hacker lợi dụng những lỗ hổng có trong ứng dụng chưa được sữa chữa trong phiên bản cũ.
Nắm được hoạt động của các phần mềm sử dụng, ý nghĩa của các file cấu hình quan trọng (như ete/password), áp dụng các biện pháp bảo vệ cấu hình như sử dụng phương thức mã hóa hashing code (MD5).
Sử dụng một vài công cụ có thể phát hiện ra các hoạt động truy nhập không hợp lệ vào một hệ thống như logfile.
Kiểm soát chặt chẽ các quyền của các tài khoản trên hệ thống; không sử dụng quyền root trong các trường hợp không cần thiết. Đối với các tài khoản không sử dụng trên hệ thống cần đổi mật khẩu hoặc hủy bỏ.
•Quản lý mật khẩu một cách chặt chẽ:
Buộc người sử dụng thay đổi mật khẩu trong một thời gian nhất định. Hầu hết các hệ thống hiện nay đều hỗ trợ cơ chế này; nếu không thay đổi mật khẩu tài khoản đó không còn giá trị trên hệ thống.
Trong trường hợp người sử dụng bị mất mật khẩu, để cấp lại mật khẩu mới cần có các thủ tục khác để xác thực người sử dụng…
Cần giám sát và theo dõi chặt chẽ các chương trình đổi mật khẩu; đây thường là mục tiêu để tấn công.
2. VỚI NHỮNG NHÀ THIẾT KẾ ỨNG DỤNG WEB
•Đảm bảo được những dữ liệu được cung cấp từ người dùng hợp lệ :
- Tất cả những dữ liệu được đưa vào ứng dụng phải đảm bảo được kiểm tra kỹ, loại bỏ hoặc từ chối những kí tự đặc biệt như <>’/…
- Tuy nhiên, không nên dùng ngôn ngữ trình khách (như JavaScript, VBScript..) để kiểm tra dữ liệu nhập hợp lệ vì hacker vẩn có thể lợi dụng để tấn công như trong kỹ thuật mã hóa URL hay vượt đường dẫn…Cách tốt nhất vẫn là kiểm tra ngay trên ứng dụng.
- Nếu không thể từ chối cũng như loại bỏ những kí tự, ứng dụng cần kiểm tra dữ liệu xuất để đảm bảo rằng dữ liệu xuất đến trình duyệt là an toàn.
•Chứng thực người dùng :
- Nhiều ứng dụng hiện nay quản lí một phiên làm việc của người dùng bằng sessionID nhưng sự yếu kém trong cách quản lí một phiên làm việc khiến cho hacker có thể dể dàng kiểm soát được một phiên là việc của người dùng. Vì vậy đối với phiên làm việc, ứng dụng sẽ bị hủy ngay sau khi trình duyệt đóng kết nối.
•Mã hóa dữ liệu quan trọng:
- Những thông tin quan trọng như tên/mật khẩu, credit card….cần được mã hóa để tránh hacker có thể lấy được nội dung và sử dụng chúng như trong kỹ thuật XSS, SQL Injection..Ngoài ra, trong quá trình truyền, kết hợp phương pháp SSL để tránh trường hợp mất mát thông tin trên đường truyền.
- Hiện nay trong lĩnh vực mã hóa dữ liệu, có rất nhiều phương pháp mã hóa như mã hóa khóa bí mật, mã hóa công khai…nên tùy vào mức độ sử dụng cũng như tầm quan trọng mà ứng dụng có thể chọn một trong những phương pháp mã hóa để đảm bảo dữ liệu được bảo mật.
- Tuy nhiên, hiện nay nhiều nhà ứng dụng lại mã hóa dữ liệu kết hợp với vài thông tin như ngày giờ, địa chỉ IP…khiến cho hacker có thể dể dàng dự đoán, hoặc nội dung dữ liệu mã hóa quá ngắn khiến cho hacker có thể sử dụng những công cụ sẳn có để vét cạn những khả năng có thể xảy ra như trong kĩ thuật tấn công sessionID. Hoặc phương pháp mã hóa đã quá củ khiến cho hacker có thể dể dàng dùng những công cụ giải mã như ”John and Ripper”.
- Do đó, cần chọn thuật toán mã hóa cùng với khóa để mã hóa sao cho dữ liệu không để dự đoán và bị vét cạn.
- Ngoài ra, việc dùng SSL là cần thiết để tránh trường hợp dữ liệu bị đánh cắp trên đường truyền.
•Dùng phần mềm có sẵn :
- Hiện nay trên thị trường xuất hiện những phần mềm như Appshield hoạt động như một proxy, nghĩa là trung gian giũa máy khách và máy chủ, mọi yêu cầu từ máy khách đều bị qua phần mềm này, nếu phát hiện trong yêu cầu có ẩn chứa khả năng tấn công lên hệ thống, nó sẽ từ chối yêu cầu, không gửi lên máy chủ nữa mà sẽ tự động hủy yêu cầu.
- Với những ứng dụng, hệ thống chỉ nên cung cấp những quyền hạn nhất định sao cho ứng dụng đủ thực hiện các chức năng của mình. Không nên đưa quyền cao nhất, như root vì hacker có thể lợi dụng quyền root này để có thể t hực thi những câu lệnh của hệ thống, như trong kĩ thuật tấn công SQL Injectio..
3. VỚI NHỮNG NGƯỜI SỬ DỤNG WEB
Đưa ra những lời cảnh báo cho những người sử dụng Web rủi ro có thể xảy ra, đặc biệt nên chú ý khi cho phép trình duyệt thực thi ngôn ngữ trình khách trên máy của mình, vì khả năng lợi dụng ngôn ngữ này là rất lớn như trong kỹ thuật sessionID.
Sau khi sử dụng xong ứng dụng cần thoát ra khỏi hệ thống theo quy định (như Sigh-out của yahoo) để những nội dung quan trọng lưu dữ trong cookie bị hủy bỏ, tránh khả năng hacker vẩn tiếp tục dùng sessionID tồn tại đó để đăng nhập vaò hệ thống hợp lệ.
Quản lí tài khoản :
-Người dùng cần nhận thức được vai trò quan trọng trong việc bảo vệ tài khoản cảu mình. Các hoạt động bảo vệ tài khoản bao gồm việc bảo vệ mật khẩu, thay đổi mật khẩu định kỳ, đăng kí thời điểm… Sử dụng các phần mềm bảo vệ máy trạm của người sử dụng, log out khỏi hệ thống sau một thời gian time-out..
PHẦN V - KẾT LUẬN 1. NHỮNG VẤN ĐỀ ĐẠT ĐƯỢC
Theo yêu cầu đặt ra ban đầu là “Nghiên cứu phát hiện và khai thác một số yếu điểm trên website”, cho đến thời điểm hiện tại, khóa luận đã đạt được các nội dung sau:
• Tìm hiểu các kỹ thuật tấn công ứng dụng Web bao gồm các kỹ thuật: • Thao tác trên tham số truyền như URL, biến ẩn form, cookie, HTTP header.
• Chèn mã lệnh thực thi trên trình khách Cross-site Scripting. • Chèn câu truy vấn SQL
• Đánh chiếm phiên làm việc của người dùng • Tràn bộ đệm
• Từ chối dịch vụ
• Các kỹ thuật khác như: Mã hóa URL, vượt đường dẫn, kí tự rỗng, ngôn ngữ phía trình chủ,…
Các biện pháp bảo mật từ sự kết hợp giữa nhà quản trị mạng, nhà thiết kế ứng dụng Web và người dùng
Về chương trình “Web Checker” đã đạt một số nội dung cơ bản sau:
• Kiểm tra một trang Web có khả năng bị tấn công bằng những kỹ thuật chèn câu lệnh SQL, thay đổi tham số hay không.
• Chương trình cho phép người dùng thực hiện giao tiếp với trình chủ giống như một trình duyệt thông thường.
2. HƯỚNG PHÁT TRIỂN
• Trong phạm vi khóa luận tốt nghiệp, khóa luận cơ bản đã đạt được các yêu cầu đặt ra.
• Tuy nhiên, các kết quả còn khá khiêm tốn do hạn chế về tài liệu và thời gian. Trong thời gian tới, nếu có điều kiện, khóa luận sẽ cố gắng phát triển thêm những nội dung sau:
- Tìm hiểu thêm về các kĩ thuật tấn công để đưa ra phương pháp bảo mật ứng dụng Web ở mức độ sâu hơn.
- Tìm hiểu về vấn đề bảo mật sâu hơn, không chỉ dừng ở mức độ một ứng dụng Web mà phát triển hơn vần đề bảo mật ở các hệ thống mạng và dịch vụ.
- Khai triển chương trình phát hiện lỗ hổng tốt hơn, trên nhiều phương diện kỹ thuật.
Phát triển chương trình như một Proxy giữa trình chủ với các trình duyệt. Mọi yêu cầu từ trình duyệt hay trả lời từ trình chủđều phải đi qua chương trình. Bất cứ khi nào chương trình kiểm tra thấy khả năng tấn công từ trình duyệt, chương trình sẽ từ chối yêu cầu đó và đóng kết nối.
TÀI LIỆU THAM KHẢO
Tiếng Việt
[1]. Lê Đình Duy, Bảo vệ ứng dụng web chống tấn công kiểu Sql Injection, kỷ yếu hội thảo CNTT – 2004, ĐHKHTN Tp.HCM.
[2] Nguyễn Duy Thăng, Nguyễn Minh Thu, Nghiên cứu một số vấn đề về bảo mật, CNTT – 2003, ĐHKHTN Tp.HCM.
Tiếng nước ngoài
[3]. Justin Clarke, SQL Injection Attacks and Defense, Syngress, 2009.
Trang Web [4]. http://www.owasp.org/index.php/SQL_Injection [5]. http://www.sqlsecurity.com/FAQs/SQLInjectionFAQ/tabid/56/Default.aspx [6].http://www.sensepost.com/labs/papers/sql_insertion/SQLinsertion2002_whitepaper .pdf [7].http://www.3c.com.vn/Story/vn/traodoikinhnghiem/leganninhmang/2007/11/3039 1.html [8]. http://tusach.thuvienkhoahoc.com/wiki/CROSS-SITE_SCRIPTING [9]. http://congdongit.org/security/1016-phong-ngua-tan-cong-tu-choi-dich-vu.html