« Home « Kết quả tìm kiếm

SQL injection tấn công và cách phòng tránh


Tóm tắt Xem thử

- 1 TỔNG QUAN VỀ ỨNG DỤNG WEB VÀ SQL INJECTION.
- Tổng quan về ứng dụng web.
- Một ứng dụng web hƣớng cơ sở dữ liệu thông thƣờng có ba tầng: Tầng trình diễn (trình duyệt web hay các chƣơng trình máy tính), tầng logic (một ngôn ngữ lập trình nhƣ C#, PHP, JSP, ASP.NET.
- và tầng dữ liệu (một cơ sở dữ liệu nhƣ SQL Server, MySQL, Oracle.
- gửi yêu cầu đến tầng giữa (tầng logic) mà các dịch vụ yêu cầu bằng cách truy vấn và những cập nhật ngƣợc lại cơ sở dữ liệu.
- Kết nối cơ sở dữ liệu $conn = mysql_connect("localhost","username","password.
- Câu lệnh sẽ trả lại tất cả các sản phẩm có trong cơ sở dữ liệu mà có giá thấp hơn 100 USD.
- Tầng dữ liệu: Là tầng chứa các máy chủ cơ sở dữ liệu.
- Tầng này giữ cho dữ liệu độc lập với các máy chủ ứng dụng hoặc tầng logic.
- Trong hình 1.1, trình duyệt web gửi các yêu cầu đến tầng logic, nơi 4 các dịch vụ của chúng sẽ đƣợc truy vấn và cập nhật ngƣợc trở lại cơ sở dữ liệu.
- Kịch bản sẽ mở ra một kết nối tới tầng dữ liệu bằng cách sử dụng một kết nối cơ sở dữ liệu và thực thi một câu lệnh SQL ngƣợc trở lại cơ sở dữ liệu.
- Cơ sở dữ liệu trả về dữ liệu cho các kết nối cơ sở dữ liệu, thông qua các engine trong tầng logic.
- Trong giải pháp mô hình 4 tầng đƣợc đƣa ra có liên quan đến việc sử dụng một phần trung gian, thƣờng đƣợc gọi là một máy chủ ứng dụng giữa các máy chủ web và máy chủ cơ sở dữ liệu.
- Các máy chủ ứng dụng mở một kết nối đến tầng dữ liệu bằng cách sử dụng một kết nối cơ sở dữ liệu và thực thi một câu lệnh SQL ngƣợc trở lại cơ sở dữ liệu.
- Ví dụ, một quyết định thay đổi các nhà cung cấp cơ sở dữ liệu thì nên yêu cầu gì hơn là một số thay đổi để các phần có thể ứng dụng của tầng ứng dụng.
- Vậy SQL injection là gì? SQL injection là một 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 để "chèn 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).
- do có toàn quyền trên cơ sở dữ liệu của ứng dụng, thậm chí là server mà ứ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 nhƣ SQL Server, MySQL, Oracle, DB2, Sysbase.
- Có nhiều cách để khai thác các lỗ hổng SQL injection để đạt đƣợc rất nhiều mục tiêu, sự thành công của một cuộc tấn công thƣờng phụ thuộc nhiều vào cơ sở dữ liệu cơ bản và hệ thống kết nối với nhau đang bị tấn công.
- Một lỗ hổng SQL injection đã cho phép hợp thực hóa ứng dụng để đƣợc thao tác và phá vỡ.
- Hầu hết các ứng dụng web hƣớng cơ sở dữ liệu thì đều sử dụng dữ liệu trong cơ sở dữ liệu để tạo ra nội dung cho trang web, cuối cùng kịch bản đó sẽ đƣợc trình bày cho ngƣời dùng về những trang web hoặc những ứng dụng bị lỗi.
- Tìm hiểu các lỗ hổng Sql injection SQL là ngôn ngữ chuẩn để truy cập vào các máy chủ cơ sở dữ liệu nhƣ Microsoft SQL Server, Oracle, MySQL, Sybase và Informix.
- cung cấp các cách thức lập trình kết nối đến cơ sở dữ liệu và tƣơng tác với nó.
- đƣợc xác nhận trƣớc khi chúng đƣợc chạy với các truy vấn SQL mà sẽ đƣợc thực thi trên một máy chủ cơ sở dữ liệu.
- Những nhà phát triển có thể tạo ra những mục đích chung, các ứng dụng mềm dẻo bằng cách sử dụng SQL động.
- nhƣ một ranh giới giữa đoạn mã và dữ liệu.
- Một cách cú pháp hóa, câu truy vấn SQL đƣợc thực thi lúc trong thời gian chạy không đúng (nó có một chuỗi ký tự quá nhiều ký tự phân cách), và do đó cơ sở dữ liệu đƣa ra một ngoại lệ.
- Các cơ sở dữ liệu SQL hiểu ký tự „ nhƣ một ký tự đặc biệt (một chuỗi phân cách).
- Vâng, đó là một cái bẫy mà nhiều nhà phát triển ứng dụng web đã rơi vào.
- nếu không các dữ liệu số sẽ đƣợc hiểu nhƣ một chuỗi.
- Vấn đề thƣờng xảy ra nhất là khi các thông báo lỗi nội bộ chẳng hạn nhƣ cơ sở dữ liệu đổ vỡ và các mã lỗi đƣợc hiển thị chi tiết cho ngƣời dùng hoặc kẻ tấn công.
- Nếu một kẻ tấn công thao tác bằng tay những yêu cầu bằng HTTP và thay thế các giá trị ID dự kiến của mình vào cho câu lệnh SQL, thì hắn ta có thể sử dụng thông tin về những thông điệp lỗi SQL để tìm hiểu giá trị trong cơ sở dữ liệu.
- Ví dụ, nếu kẻ tấn công nhập vào các truy vấn sau đây, thực thi các câu lệnh SQL sẽ cho kết quả trong một thông tin với những thông báo lỗi SQL đƣợc hiển thị có chứa thông tin về phiên bản của hệ quản trị cơ sở dữ liệu (RDBMS) mà ứng dụng web đang sử dụng.
- tuy nhiên không thể bỏ qua cơ sở dữ liệu của mình.
- Cơ sở dữ liệu đi kèm với một số lƣợng lớn ngƣời dùng mặc định đƣợc cài đặt sẵn.
- Các nhà phát triển ứng dụng thƣờng viết những ứng dụng của họ để kết nối với một cơ sở dữ liệu sử dụng những tài khoản đƣợc tạo ra trƣớc với những đặc quyền thay vì tạo ra một tài khoản cụ thể cho những ứng dụng.
- Những tài khoản có quyền thì có thể thực hiện vô số hành động trên cơ sở dữ liệu mà không liên quan đến những yêu cầu của ứng dụng.
- Khi một kẻ tấn công khai thác một lỗ hổng SQL injection trong một ứng dụng mà kết nối vào cơ sở dữ liệu với một tài khoản đặc quyền, thì hắn ta có thể thực thi những đoạn mã với quyền của tài khoản đó.
- Trong một thế giới lý tƣởng, các ứng dụng cũng nên sử dụng những ngƣời dùng cơ sở dữ liệu khác nhau để thực hiện SELECT, UPDATE, INSERT và những lệnh tƣơng tự.
- Hầu hết các ứng dụng không có những đặc quyền riêng biệt, vì vậy một kẻ tấn công thƣờng truy cập đƣợc tất cả dữ liệu trong cơ sở dữ liệu và thực hiện SELECT, INSERT, UPDATE, DELETE, EXECUTE, và những đặc quyền tƣơng tự.
- Những đặc quyền quá thừa thƣờng có thể cho phép một kẻ tấn công chuyển từ cơ sở dữ liệu và truy cập những dữ liệu bên ngoài những lƣu trữ của ứng dụng.
- Đối với MySQL Server phiên bản 5.0 trở lên, dữ liệu này đƣợc tổ chức trong cơ sở dữ liệu ảo INFORMATION_SCHEMA và có thể đƣợc truy cập bằng cách sử dụng những lệnh SHOW DATABASES và SHOW TABLES.
- Các chức năng Metadata DBA_ yêu cầu những quyền của những nhà quản trị cơ sở dữ liệu (DBA).
- Tìm kiếm lỗ hổng SQL injection SQL injection có thể tồn tại trong bất kỳ ứng dụng trƣớc-sau thu nhận việc nhập dữ liệu từ một hệ thống hoặc ngƣời dùng, sau đó đƣợc sử dụng để truy cập vào một máy chủ cơ sở dữ liệu.
- Nơi mà sẽ tạo ra các truy vấn SQL bằng cách sử dụng submitted dữ liệu.
- Xác định tất cả các mục dữ liệu trên các ứng dụng web.
- Một khi xác định tất cả các dữ liệu đƣợc ứng dụng chấp nhận, ta cần phải sửa đổi nó và phân tích những phản hồi từ máy chủ.
- Ta có thể khẳng định rằng các ứng dụng không phải tĩnh, và dƣờng nhƣ chúng phụ thuộc vào giá trị của tham số category mà mỗi loại ứng dụng sẽ hiển thị sản phẩm khác nhau dựa trên kết quả của truy vấn đến một cơ sở dữ liệu phía sau.
- Lỗi này chỉ ra rằng các ứng dụng từ xa không xử lý dữ liệu bất thƣờng một cách chính xác.
- at line 1 Chúng ta thấy, một số ứng dụng phản ứng theo những cách bất thƣờng khi xử lý dữ liệu ngƣời dùng.
- Vậy chúng ta có thể tự hỏi tại sao các máy chủ web cho thấy một lỗi từ cơ sở dữ liệu nếu thay đổi tham số.
- Mặc dù các lỗi đƣợc hiển thị trong phản hồi máy chủ web, SQL injection xảy ra ở các lớp cơ sở dữ liệu.
- Những ví dụ 27 trên cho thấy cách mà ta có thể tiếp cận đƣợc tới các máy chủ cơ sở dữ liệu thông qua ứng dụng Web.
- Điều quan trọng là có một sự hiểu biết rõ ràng về cách thức nhập dữ liệu trong một truy vấn SQL và loại phản ứng mà ta có thể mong đợi từ phía máy chủ.
- Các máy chủ Web truy xuất dữ liệu của ngƣời dùng, tạo ra một câu lệnh SQL có chứa dữ liệu ngƣời dùng, và sau đó gửi các truy vấn đến máy chủ cơ sở dữ liệu.
- Các máy chủ cơ sở dữ liệu thực thi các truy vấn SQL và trả về kết quả cho máy chủ web.
- Lƣu ý rằng các máy chủ cơ sở dữ liệu không biết về logic của ứng dụng, nó sẽ chỉ thực hiện một kết quả truy vấn và trả lại kết quả.
- Các máy chủ web tự động tạo ra một trang HTML dựa trên các phản hồi cơ sở dữ liệu.
- Nhƣ chúng ta thấy, máy chủ web và máy chủ cơ sở dữ liệu là những thực thể riêng biệt.
- Các cơ sở dữ liệu máy chủ nhận đƣợc truy vấn và trả kết quả về máy chủ web.
- Điều này là rất quan trọng đối với khai thác các lỗ hổng SQL injection bởi vì nếu ta có thể thao tác các câu lệnh SQL và làm cho máy chủ cơ sở dữ liệu trả lại dữ liệu tùy ý (nhƣ tên ngƣời dùng và mật khẩu từ trang web Victim Inc.) của máy chủ web không có phƣơng tiện để kiểm tra xem dữ liệu là hợp pháp.
- Các lỗi cơ sở dữ liệu Trong phần trƣớc, chúng ta đã thấy một số lỗi SQL injection hiện thị nhƣ một kết quả của quá trình thao tác các tham số.
- Mặc dù các lỗi đƣợc hiển thị trong các phản hồi từ máy chủ web, SQL injection xảy ra tại lớp cơ sở dữ liệu.
- Những ví dụ cho thấy cách mà ta có thể liên lạc đƣợc với máy chủ cơ sở dữ liệu.
- Một điều rất quan trọng là chúng ta phải làm quen với các lỗi cơ sở dữ liệu khác nhau mà ta có thể nhận đƣợc từ máy chủ web khi tiến hành kiểm tra các lỗ hổng SQL injection.
- Máy chủ web lấy dữ liệu từ phía ngƣời dùng cung cấp, sau đó gửi một truy vấn SQL đến máy chủ cơ sở dữ liệu.
- Máy chủ cơ sở dữ liệu nhận đƣợc câu truy vấn SQL đã bị thay đổi và trả lại một lỗi về máy chủ web.
- Máy chủ web nhận lỗi đó từ máy chủ cơ sở dữ liệu và gửi trở lại phía ngƣời dùng thông tin lỗi đó dƣới dạng file HTML.
- Các ví dụ trên đây minh họa một kịch bản yêu cầu từ phía ngƣời dùng gây nên một lỗi trong cơ sở dữ liệu.
- Khả năng để xác định một cơ sở dữ liệu từ xa là tối quan trọng để có thể tiến hành một cuộc tấn công SQL injection thành công và di chuyển về từ những nhận định của những lỗ hổng này để khai thác thêm.
- 30 Các lỗi SQL hiển thị thông thƣờng Trong phần trƣớc, chúng ta đã thấy rằng các ứng dụng phản ứng khác nhau khi cơ sở dữ liệu trả về một lỗi.
- Có một số kỹ thuật để chúng ta có thể sử dụng để lấy thông tin nhúng trong những lỗi trả về từ cơ sở dữ liệu.
- 32 Ứng dụng phản hồi lại: Server Error in.
- Các cơ sở dữ liệu báo cáo lỗi, chuyển đổi kết quả của @@version sang một số nguyên và hiện thị nội dung.
- Nhƣ là một phép chia đƣợc thực thi giữa hai số, cơ sở dữ liệu cố gắng chuyển đổi các kết quả từ @@version sang một số nguyên.
- Khi phép toán thực hiện lỗi thì cơ sở dữ liệu hiển thị nội dung của biến.
- Ta có thể sử dụng kỹ thuật này để hiển thị bất cứ biến nào trong cơ sở dữ liệu.
- Cũng có một kỹ thuật để hiển thị thông tin về câu lệnh đƣợc thực thi bởi cơ sở dữ liệu bằng cách sử dụng having 1=1: http://www.victim.com/showproducts.aspx?category=bikes' having 1'='1 Ứng dụng phản hồi trở lại nhƣ sau: Server Error in.
- Nếu yêu cầu không đƣợc đáp ứng, cơ sở dữ liệu sẽ gửi trở lại một lỗi hiển thị cột đầu tiên xuất hiện.
- Lỗi cơ sở dữ liệu hiển thị trong cột ké tiếp và tên.
- Ứng dụng hồi đáp: Server Error in.
- Ta có thể cấu hình các lỗi hiển thị trong ứng dụng ASP.NET sử dụng tệp tin web.config.
- Tất cả các ngôn ngữ kịch bản chính trên server có truy cập các cơ sở dữ liệu MySQL.
- PHP có một chức năng mysql_error đƣợc xây dựng sẵn, cung cấp những thông tin về những lỗi từ cơ sở dữ liệu MySQL trong quá trình thực thi câu lệnh SQL.
- Kiểm tra toàn diện Để kiểm tra toàn diện một ứng dụng web đối với những lỗ hổng SQL injection phải mất nhiều công sức mới có thể đoán trƣớc đƣợc.
- Tuy niên các cơ sở dữ liệu thông báo lỗi không phải luôn rõ ràng.
- 3.2.2 Basic UNION Những truy vấn SELECT đƣợc sử dụng để lấy thông tin từ một cơ sở dữ liệu.
- Dƣới đây là kết quả của truy vấn khi đƣợc gửi đến máy chủ cơ sở dữ liệu: SELECT FirstName, LastName, Title FROM Employees WHERE City = 45.
- Đó là những gì sẽ xảy ra: các engine trong cơ sở dữ liệu sẽ thông qua bảng Employees, tìm kiếm một hàng mà City để trống.
- 3.2.3 Liệt kê những truy vấn với những lỗi cú pháp Một số máy chủ cơ sở dữ liệu trả về những phần của truy vấn chứa những lỗi cú pháp trong những thông báo lỗi của chúng.
- Chọn một tên bảng trong hệ thống có hiệu lực từ các phụ lục tƣơng ứng với các máy chủ cơ sở dữ liệu mà ta đang tấn công.
- Với SQL Server ta có thể dễ dàng nhận đƣợc tất cả các bảng và tên các cột trong cơ sở dữ liệu.
- Với Oracle và Access ta có thể hoặc không thể làm điều đó, tùy thuộc vào quyền của tài khoản mà ứng dụng web sử dụng để truy cập vào cơ sở dữ liệu.
- Trong các bảng này sẽ có danh sách tất cả các bảng các cột trong cơ sở dữ liệu.
- SELECT name FROM sysobjects WHERE xtype = 'U' 48 Điều này sẽ trả về tên của tất cả các bảng trong cơ sở dữ liệu.
- 3.3 Câu lệnh INSERT 3.3.1 Insert basics Các từ khóa INSERT đƣợc sử dụng để thêm thông tin vào cơ sở dữ liệu.
- Nếu ta có thể chèn vào một SQL làm việc trên một ứng dụng web nhƣ SQL Server thì ta có thể sử dụng thủ tục này để lấy ra một số dữ liệu đáng kể.
- 3.5 Blind SQL Injection Dạng lỗi Blind SQL Injection này nằm ngay trong ứng dụng Web, để đảm bảo an toàn cho website các nhà quản trị web đã tắt chế độ hiển thị thông báo lỗi khi có truy cập cơ sở dữ liệu không hợp lý.
- Các module này có thể đƣợc cài đặt độc lập, không làm thay đổi hoạt động của ứng dụng Web.
- 75 Lớp bảo vệ mức 2: Trang bị thiết bị tƣờng lửa chuyên dụng cho ứng dụng web (WAF) nhằm mục đích kiểm soát tất cả các luồng dữ liệu đi qua các máy chủ ứng dụng

Xem thử không khả dụng, vui lòng xem tại trang nguồn
hoặc xem Tóm tắt