Một số kỹ thuật tấn công web mà hacker hay sử dụng để lấy cắp thông tin, phá hỏng dữ liệu trên hệ thống đó là:
- XSS (Cross-Site Scripting):
Là một trong những kĩ thuật tấn công phổ biến nhất hiện nay, đồng thời 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ững người sử dụng web. XSS là một kỹ thuật tấn công bằng cách chèn vào các website động những thẻ HTML hay những đoạn scrip nguy hiểm có thể gây hại cho những người sử dụng khác. Trong đó, những đoạn mã nguy hiểm được chèn vào hầu hết được viết bằng các Client-Site Scrip như JavaScrip, Jscrip.. và cũng có thể là các thẻ HTML. - CSRF (Cross-site Request Forgery):
Là kỹ thuật tấn công bằng cách sử dụng quyền chứng thực của người dùng đối với một website. Nó là kỹ thuật tấn công vào người dùng, dựa vào đó hacker có thể thực thi những thao tác phải yêu cầu sự chứng thực. - SQL injection:
SQL Injection là một kỹ thuật lợi dụng những lỗ hổng về câu truy vấn lấy dữ liệu của những website không an toán, đây là một kỹ thuật tấn công rất phổ biến và sự thành công của nó cũng tương đối cao.
1. Cách thực hiện
1.1. XSS
Cho phép kẻ tấn công nhúng mã đọc Javacsript, VBScript, ActiveX, HTML, hoặc Flash vào một trang năng động, dễ bị đánh lừa người sử dụng, thực hiện kịch bản trên máy tính của mình để thu thập dữ liệu. Kỹ thuật này không tấn công vào CSDL hệ thống như SQL injection mà chúng tấn công trực tiếp từ phía người dùng bằng cách xâm nhập hệ thống bằng các đoạn mã đơn giản để lấy cắp cookies và session từ đó chúng có thể thao túng người dùng cướp quyền truy cập tài khoản mà không cần tới mật khẩu.
- Non-persistent(Reflected) là loại phổ biến nhất: Loại này xuất hiện khi dữ liệu được cung cấp từ một web client nào đó. Hacker khi muốn tấn công thì điều đầu tiên là sẽ phải tìm ra lỗ hổng bảo mật trên website bằng cách gắn một đoạn mã test vào web client để web client gửi đến server và chờ phản hồi của web server để tìm ra lỗ hổng bảo mật.Hacker tấn công dựa vào sự thiếu chú ý về việc lọc dữ liệu vào từ URL vủa website và gắn thêm những đoạn mã độc vào đây để thực hiện hành vi tấn công website. Loại này thì chỉ có tác dụng trong một lần.Ví dụ : Có thể một request được gửi từ các form dữ liệu hoặc cũng có thể chỉ là các URL:
http://www.example.com/search?query=alert('XSS was found !');
- Stored XSS: Là một biến thể tàn phá gây hậu quả rất nặng nề. Loại này xảy ra khi dữ liệu do các hacker cung cấp được lưu trữ trên các máy chủ thông qua một số chức năng trên website và từ đó về sau thì các dữ liệu này hiển nhiên được hiển thị một cách bình thường trên các trình duyệt của người dùng mà không cần tới HTML riêng nữa. Và khi người dùng click vào những phần bị gắn mã độc thì đã bị dính XSS. Đoạn mã chèn thêm vào được lưu trữ vào CSDL trên server dưới dạng các comment trong blog, mesage, forum hay visitor logVí dụ: Khi đăng ký thành viên, phần giới thiêu về bản thân, nếu hacker nhập vào mã XSS và website không kiểm tra kỹ dữ liệu đầu vào, thì mỗi khi truy cập trang thành viên của hacker đó, bạn sẽ bị khai thác.
- Mô hình XSS
Từ những điều này có thể thấy Stored XSS nguy hiểm hơn Reflected XSS rất nhiều, đối tượng bị ảnh hưởng có thế là tất cả nhưng người sử dụng ứng dụng web đó. Và nếu nạn nhân có vai trò quản trị thì còn có nguy cơ bị chiếm quyền điều khiển web.
1.2. CSRF
Tấn công sử dụng kỹ thuật này dành cho người am hiểu về hệ thống, có thể đã từng phát triển hệ thống đó, hoặc một mã nguồn mở, hoặc một mã nguồn nào đó đã được công khai code. Hacker thực hiện gửi tin nhắn dến Admin, khi admin đọc tin nhắn này trình duyệt sẽ request đến link đó và lấy cookie của trình duyệt và tiến hành active. Trường hợp không gửi được mail, giả sử ta biết rằng admin đang login hacker có thể send 1 trang web mà hacher lập ra, trong đó có đoạn code độc hại rồi send qua yahoo hay gì gì đó, khi đó admin viếng thăm vào và thực hiện các thao tác trên. Như vậy hacker thực hiện một truy vấn trái phép dựa vào chính người dùng
1.3. SQl Injection
Chắc hẳn các bạn đã biết mô hình hoạt động của website rồi nhỉ? Khi một request được gửi từ client thì ngôn ngữ SERVER như PHP sẽ lấy các thông tin từ request đó. Nhưng bản thân nó không hề phát hiện ra những thông tin đó có chứa những câu SQL độc, vì thế công việc này ta phải đổ trách nhiệm tới kinh nghiệm của lập trình viên.
– Giả sử tôi có một trang đăng nhập với hai thông tin là tên đăng nhập và mật khẩu. Và đoạn code xử lý tấn công sql injection của tôi có dạng như sau:
123456 | Nếu nhập ” ‘ OR 1=1″ vào ô text user và pass thì câu lệnh SQL sẽ có dạng:`SELECT * FROM T_USERS WHERE username=” OR 1=1 and password=” OR 1=1;`Chạy câu truy vấn này lên thì kết quả nó trả về là danh sách user nên nếu code cùi cùi thì login được luôn. |
Trên đây là một ví dụ điển hình thôi, chứ thực tế thì hacker còn rất nhiều mưu mẹo khác. Tuy nhiên chung quy lại với kỹ thuật tấn công SQL Injection ta vẫn có thể không chế được nó.
2. Cách phòng chống:
2.1. XSS
Cách phòng chống tốt nhất XSS là theo nguyên tắc filter input và escape output. Để làm việc này thì hiện tại có khá nhiều bộ lọc để chúng ta lựa chọn. Dựa vào cách khắc phục đó bạn có thể dùng một thư viện viết bằng PHP cho phép filter HTML để ngăn chặn kẻ xấu post mã độc XSS thông qua website của bạn. Thư viện có sẵn đó là HTML Purifier. Đây là bộ thư viện rất mạnh dùng triển kahi trong code của mình để chống XSS. Được xây dựng theo mô hình ÔP nên sử dụng rất dễ, sau thao tác include file thư viện, chỉ cần tạo instance của đối tượng HTML Purifier và gọi phương thức purify() là có thể filter được dữ liệu đầu vào
2.2. CSRF
Thông thường để tránh tấn công ta sẽ chia làm hai đối tượng, một là đối tượng coder và hai là đối tượng người dùng cuối (user).
– Với đối tượng người dùng cuối thì:
– Hạn chế sử dụng login vào hệ thống khi nói chuyện tiếp xúc với những người lạ qua các kênh khác nhau, những email không rõ nguồn gốc. Khi không dùng hệ thống thì lập tức logout.
– Nên login vào một máy riêng và không cho người thứ 2 tiếp xúc với máy đó.
– Thay đổi mật khẩu liên tục, và chọn những mật khẩu khó đoán, có kỹ tự đặc biệt. Vì hiện nay có rất nhiều phần mềm dò pass.
– Với đối tượng coder:
– Thực hiện tạo những token auto và random với từng máy, từng trình duyệt và thiết lập thời gian sống cho token đó.
– Không sử dụng phương thức GET với những request mà có ảnh hưởng đến CSDL.
– Khi lấy dữ liệu từ người dùng thì kiểm tra chặt chẽ.
– URL trong admin càng khó nhớ càng bí hiểm càng tốt.
2.3. SQL Injection
- Nhận dữ liệu kiểu INT
- Viết lại đường dẫn có thể chống SQL Injection
- Sử dụng hàm sprintf và
mysql_real_escape_string
để các định kiểu dữ liệu cho câu truy vấn.
Trên đây là 3 cách mà hacker thường dùng để có thể xâm nhập vào hệ thống. Vì vậy Coder thì nên biết để phòng tránh và Tester nên biết để tìm ra các lỗi này để hacker khó có thể xâm nhập được vào hệ thống.