Khi nói về vấn đề bảo mật an ninh mạng cho nền tảng website thì không thể không nhắc đến cuộc tấn công của SQL Injection. Bởi SQL Injection được cho là kiểu tấn công website nguy hiểm nhất hiện nay 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 tấn công dễ thực hiện, hầu hết mọi thao tác người tấn công chỉ cần được thực hiện với một trình duyệt web. Theo như các nhà nghiên cứu về SQL Injection thì có đến gần 50% các vụ tấn công bảo mật liên quan đến 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ì 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. Dưới đây là các nguyên nhân gây ra lỗi SQL:
Không kiểm tra dữ liệu đầu vào (Input)
Đây là dạng lỗi SQL Injection xảy ra khi thiếu đoạn mã kiểm tra dữ liệu đầu vào trong câu truy vấn SQL. Kết quả là người dùng cuối có thể thực hiện một số truy vấn không mong muốn đối với cơ sở dữ 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 có thể tồn tại chính trong phần mềm máy chủ cơ sở dữ liệu, như là trường hợp hàm mysql_real_escape_string()của các máy chủ MySQL. Điều này sẽ cho phép kẻ tấn công có thể thực hiện một cuộc tấn công SQL injection thành công dựa trên những ký tự Unicode không thông thường ngay cả khi dữ liệu đầu vào đã được kiểm soát.
Ảnh hưởng, hậu quả của SQL Injection gây ra.
SQL Injection tấn công bằng hình thức chèn, gửi lệnh SQL mang tính độc hại tới máy chủ thông qua việc lợi dụng thao tác đăng nhập, đăng ký,...từ phía người dùng. Bởi vậy nó sẽ tác động và gây ảnh hưởng rất lớn đến thông tin và dữ 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 của SQL Injection
SQL Injection hoặt động như sau:
- 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,...
- 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.
- 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.
- 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 đó.
- 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.
- 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.
- 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.
- 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ủ.
- 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ác hình thức tấn công của SQL Injection
SQL Injection có thể tấn công bất cứ lúc nào qua các 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 website 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 các lỗ hổng SQL Injection được tìm thấy nhanh chóng 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 có thể được phát hiện thủ công bằng cách kiểm tra toàn bộ hệ thống vào mọi thời điểm trong ứng dụng:
- 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.
- Đệ 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.
- Đệ 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.
- 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.
- 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ả.
Cách bảo mật website an toàn, ngăn chặn 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:
- 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.
- 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.
- 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ố.
- 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.
- 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.
- 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.
- 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.
- Xóa các stored procedure trong database master không dùng như xp_cmdshell, xp_startmail, xp_sendmail, sp_makewebtask.
SQL Injection là một trong lỗ hổng phổ biến và nguy hiểm đối với website, chính bởi vậy những nhà lập trình phải trang bị cho mình đầy đủ 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 để đảm bảo an toàn cho website.
Thông tin liên hệ
Nếu bạn có thắc mắc gì, có thể gửi yêu cầu cho chúng tôi, và chúng tôi sẽ liên lạc lại với bạn sớm nhất có thể .
Công ty TNHH TMĐT Công nghệ LP
Giấy phép kinh doanh số 0315561312/GP bởi Sở Kế Hoạch và Đầu Tư TP. Hồ Chí Minh.
Văn phòng: Lầu 4, Toà nhà Lê Trí, 164 Phan Văn Trị, Phường 12,Quận Bình Thạnh, HCMC
Hotline: 0338 586 864
Mail: sales@lptech.asia
Liên hệ qua Zalo: 0338586864 ( hoặc bấm vào link này: http://lptech.asia/zalo-lptech). Hoặc nhập thông tin mà bạn cần hỗ trợ vào ô liên hệ bên dưới để lên lạc với LPTech nhé.