Networks Business Online Việt Nam & International VH2

SQL Injection là gì? Cách bảo mật website an toàn trước lỗ hổng này

Đăng ngày 19 September, 2022 bởi admin
Khi nói về yếu tố bảo mật thông tin bảo mật an ninh mạng cho nền tảng website thì không hề không nhắc đến cuộc tiến công của SQL Injection. Bởi SQL Injection được cho là kiểu tiến công website nguy hại nhất lúc bấy giờ và gây ra hậu quả, thiệt hại rất lớn .

Tình trạng website bị tấn công bởi SQL Injection ngày càng trở nên phổ biến, tuy nhiên nhiều người chưa nhận thức được sự nguy hiểm của nó hoặc chưa biết cách để khắc phục và phòng tránh SQL Injection để giúp doanh nghiệp luôn an toàn và tránh những tác động xấu. Bài viết dưới đây, LPTech sẽ giúp bạn hiểu rõ hơn về SQL Injection và cách để bảo mật website an toàn trước lỗ hổng này.

SQL Injection là gì?

 

SQL Injection (viết tắt SQLi) là kỹ thuật tấn công web lợi dụng lỗ hổng trong việc kiểm tra dữ liệu đầu vào (Input) của ứng dụng web và các thông báo lỗi của hệ quản trị cơ sở dữ liệu, làm sai lệch các câu truy vấn ban đầu bằng SQL.

SQL Injection cho phép kẻ tấn công chèn vào các đoạn mã SQL bất hợp pháp và thực hiện các thao tác như nhà quản trị web. Với mục đích khai thác lỗ hổng bảo mật tồn tại trong cơ sở dữ liệu, khai thác và lấy cắp thông tin, dữ liệu hoặc tệ nhất là chiếm quyền cơ sở dữ liệu.

SQL Injection là một dạng tiến công dễ triển khai, hầu hết mọi thao tác người tiến công chỉ cần được thực thi với một trình duyệt web. Theo như những nhà nghiên cứu về SQL Injection thì có đến gần 50 % những vụ tiến công bảo mật thông tin tương quan đến SQL Injection .

SQL Injection

Nguyên nhân gây ra lỗi SQL Injection

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ì vậy bất kể thành phần nào của ứng dụng mà người dùng hoàn toàn có thể tương tác được để điều khiển và tinh chỉnh nội dung. Dưới đây là những nguyên do gây ra lỗi SQL :

Không kiểm tra tài liệu nguồn vào ( Input )

Đây là dạng lỗi SQL Injection xảy ra khi thiếu đoạn mã kiểm tra tài liệu nguồn vào trong câu truy vấn SQL. Kết quả là người dùng cuối hoàn toàn có thể thực thi 1 số ít truy vấn không mong ước so với cơ sở tài liệu của ứng dụng .

Xử lý không đúng trọng tâm

Lỗi SQL injection dạng này thường xảy ra do lập trình viên định nghĩa đầu vào dữ liệu không rõ ràng hoặc thiếu bước kiểm tra và lọc kiểu dữ liệu đầu vào. Điều này có thể xảy ra khi một trường số được sử dụng trong truy vấn SQL nhưng lập trình viên lại thiếu bước kiểm tra dữ liệu đầu vào để xác minh kiểu của dữ liệu mà người dùng nhập vào có phải là số hay không.

Lỗi bảo mật bên trong máy chủ

Đôi khi lỗ hổng hoàn toàn có thể sống sót chính trong ứng dụng sever cơ sở tài liệu, như thể trường hợp hàm mysql_real_escape_string ( ) của những sever MySQL. Điều này sẽ được cho phép kẻ tiến công hoàn toàn có thể thực thi một cuộc tiến công SQL injection thành công xuất sắc dựa trên những ký tự Unicode không thường thì ngay cả khi tài liệu nguồn vào đã được trấn áp .

Nguyên nhân gây ra lỗi SQL Injection

Ảnh hưởng, hậu quả của SQL Injection gây ra .

SQL Injection tiến công bằng hình thức chèn, gửi lệnh SQL mang tính ô nhiễm tới sever trải qua việc tận dụng thao tác đăng nhập, ĐK, … từ phía người dùng. Bởi vậy nó sẽ ảnh hưởng tác động và gây ảnh hưởng tác động rất lớn đến thông tin và tài liệu thống gây ra những hậu quả rất nghiêm trọng .

SQL Injection cho phép kẻ tấn công có thể thực hiện các thao tác xóa, hiệu chỉnh, … do có toàn quyền trên cơ sở dữ liệu của ứng dụng, gây ra những thiệt hại lớn khiến những dữ liệu trong database bị lộ ra ngoài.

Sự tấn công của SQL không những cho phép những kẻ tấn công đọc được, chỉnh sửa được dữ liệu. Họ có thể lợi dụng điểm này để xóa toàn bộ dữ liệu và làm cho hệ thống web ngừng hoạt động, tạo các bảng dữ liệu mới nó có thể điều khiển toàn bộ hệ quản trị CSDL và với quyền hạn rộng lớn.

Việc lộ thông tin gây ảnh hưởng rất lớn đến hình ảnh, uy tín, bảo mật công ty, doanh nghiệp bạn. Khi thông tin và dữ liệu của khách hàng bị lộ, họ sẽ không tin tưởng và sử dụng dịch vụ của bạn nữa. Khách hàng họ thường để chung một mật khẩu cho nhiều tài khoản nên khi bị lỗ một tài khoản thì những tài khoản còn lại cũng vậy. Bởi vậy khách hàng sẽ bị ảnh hưởng rất lớn từ đó họ sẽ không sử dụng dịch vụ của công ty dẫn đến phá sản chủ doanh nghiệp.

Cách thức hoạt động và tấn công của SQL Injection

SQL Injection là một trong số những lỗi bảo mật phổ biến nhất. Xác suất gặp phải lỗ hổng bảo mật loại này trong một website là khá cao, bởi vậy doanh nghiệp nào cũng nên cảnh giác cao và để ngăn chặn được lỗ hổng bảo mật thì bạn phải nắm được cách thức hoạt động và tấn công của SQL Injection.

Cách thức hoạt động giải trí của SQL Injection

SQL Injection hoặt động như sau :

  1. Tìm kiếm mục tiêu: tìm kiếm các trang web cho phép việc submit dữ liệu ở bất kỳ trình duyệt nào chẳng hạn như các trang login, search, feedback,…
  2. Kiểm tra chỗ yếu của trang web: Thử gửi các file, tên đăng nhập, mật khẩu, field id, bằng hi’ or 1=1–. Nếu site chuyển sang tham số file ẩn, hãy download source HTML, lưu trên đĩa cứng và thay đổi lại URL cho phù hợp.
  3. Thi hành lệnh từ xa của SQL Injection: Thông qua các yêu cầu của người dùng được cho phép bởi website, máy chủ cơ sở dữ liệu sẽ được gửi đến lệnh SQL độc hại.
  4. Nhận output của SQL: Có thể sử dụng sp_makewebtask để ghi các output của SQL query ra một file HTML, lưu ý folder “share” phải được share trước đó.
  5. Nhận dữ liệu qua “database using ODBC error message”: Nhập các thông tin quan trọng từ các thông báo lỗi của máy chủ SQL để nhập tên của table.
  6. Xác định tên của column trong table: Table INFORMATION_SCHEMA COLUMNS chứa tên của tất cả các column trong table. Xác định và khai thác tên của các cột có trong table.
  7. Thu thập các dữ liệu quan trọng: Sau khi xác định được tên của column và table, kẻ tấn công có thể dễ dàng thu thập được những thông tin quan trọng.
  8. Nhận các ký tự alphabet và numeric string: nhằm gây thất bại cho quá trình chuyển đổi từ từ text sang số của máy chủ.
  9. Thay đổi dữ liệu của CSDL: Khi đã có tên của tất cả các column trong table, có thể sử dụng lệnh update hoặc insert để sửa đổi/tạo mới một record vào table.

Cách thức hoạt động và tấn công của SQL Injection

Các hình thức tấn công của SQL Injection

SQL Injection hoàn toàn có thể tiến công bất kỳ khi nào qua những hình thức sau đây :

Vượt qua kiểm tra lúc đăng nhập (Bypass Login)

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. Thông thường để cho phép người dùng truy cập vào các website đượ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. Điểm sơ hở trong đoạn mã xử lý nhập liệu trên nằm ở chỗ dữ liệu nhập vào từ người dùng được dùng để xây dựng trực tiếp câu lệnh SQL. Chính điều này cho phép tin tặc có thể điều khiển câu truy vấn sẽ được thực hiện.

Dạng tấn công thu thập thông tin dựa trên các phản hồi từ database

Các database đều có tính năng thông báo lỗi xảy ra trong quá trình truy vấn dữ liệu. Mục đích của tính năng này là giúp người quản trị có thể dễ dàng nhận biết và sửa lỗi dễ dàng hơn. Tuy nhiên, nó lại là một điểm yếu bị lợi dụng trong các cuộc tấn công SQL Injection.
Để thực hiện được kiểu tấn công này, kẻ tấn công phải có khả năng sử dụng các câu lệnh SQL thông thường, biết cách lợi dụng 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 việc tấn công.

Cách bảo mật thông tin website bảo đảm an toàn trước lỗ hổng này .

Hiện nay có nhiều Framework hiện đại không ngừng đưa ra những giải pháp mặc định để phòng chống lại SQL Injection, tuy nhiên để đảm bảo an toàn trước cuộc tấn công thì bạn phải nắm được cách để phát hiện các lỗ hổng từ đó tìm ra cách khắc phù hợp giúp website được bảo mật an toàn.

Cách phát hiện lỗ hổng SQL

Phần lớn những lỗ hổng SQL Injection được tìm thấy nhanh gọn và đáng an toàn và đáng tin cậy bằng cách sử dụng trình quét lỗ hổng web có sẵn trên internet. SQL hoàn toàn có thể được phát hiện thủ công bằng cách kiểm tra hàng loạt mạng lưới hệ thống vào mọi thời gian trong ứng dụng :

  1. Gửi ký tự trích dẫn duy nhất ‘ và tìm kiếm lỗi hoặc bất thường khác.
  2. Đệ trình một số cú pháp dành riêng cho SQL để đánh giá giá trị cơ sở (bản gốc) của điểm nhập và đến một giá trị khác và tìm kiếm sự khác biệt có hệ thống trong các phản hồi của ứng dụng.
  3. Đệ trình các điều kiện Boolean như OR 1 = 1 và OR 1 = 2 và tìm kiếm sự khác biệt trong phản hồi của ứng dụng.
  4. Gửi tải trọng được thiết kế để kích hoạt độ trễ thời gian khi được thực hiện trong truy vấn SQL và tìm kiếm sự khác biệt về thời gian thực hiện để phản hồi.
  5. Gửi tải trọng được thiết kế để kích hoạt tương tác mạng ngoài băng khi được thực hiện trong truy vấn SQL và giám sát mọi tương tác kết quả.

sql-la-gi-1

Cách bảo mật thông tin website bảo đảm an toàn, ngăn ngừa lỗ hổng SQL

Để bảo mật website một cách an toàn trước lỗ hổng SQL cần dựa vào các kênh Input từ phía người sử dụng. Dưới đây là cách các để ngăn chặn lỗ hổng nguy hiểm này:

  1. Không được tin tưởng những input người dùng nhập vào: bạn cần làm là xác thực mọi dữ liệu trước khi sử dụng câu lệnh SQL. Bạn cần nhìn nhận các dữ liệu nhập vào hệ thống đều là các yếu tố độc hại, bởi nó sử dụng rất nhiều yếu tố như cookie, chuỗi tham vấn, các tệp tin được tải lên hay Input bị ẩn.
  2. Sử dụng các thủ tục được lưu trữ: có thể trừu tượng hóa các lệnh SQL và xem xét toàn bộ input. Nhờ đó không gây ảnh hưởng đến cú pháp lệnh SQL.
  3. Chuẩn bị sẵn các lệnh: tạo truy vấn SQL như hành động đầu tiên và xử lý toàn bộ dữ liệu đã được gửi tương tự như những tham số.
  4. Thông báo lỗi đúng: các thông báo lỗi phải tuyệt đối chính xác thông tin, chi tiết nhạy cảm và vị trí xảy ra lỗi trên thông báo lỗi.
  5. Giới hạn quyền truy cập: chỉ các tài khoản có quyền truy cập mới được kết nối cơ sở dữ liệu, để giảm thiểu những lệnh SQL được thực thi tự động trên server.
  6. Loại bỏ các ký tự meta và extend: khi nhận được các input người dùng, các tham số từ URL hay các giá trị từ cookie thì bạn cần loại bỏ các ký tự meta và extend như /\, NULL, LF, CR,… trong các string.
  7. Chuyển các giá trị numeric sang integer hoặc dùng ISNUMERIC: trước khi Query SQL để chắc chắn nó là một integer.
  8. Xóa các stored procedure trong database master không dùng như xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask.

>>> Bài viết hữu ích: Nâng cấp webiste để tránh rủi ro bảo mật và tấn công mạng

SQL Injection là một trong lỗ hổng thông dụng và nguy khốn so với website, chính thế cho nên những nhà lập trình phải trang bị cho mình không thiếu kỹ năng và kiến thức về lỗ hổng SQL này. Hy vong bài viết dưới đây sẽ giúp bạn hiểu rõ hơn về SQL Injection để bảo vệ bảo đảm an toàn cho website .

Liên hệ tư vấn - LPTech

Source: https://vh2.com.vn
Category : Startup