Skipfish là một trình quét ứng dụng web mã nguồn mở mới được viết và duy trì bởi Michal Zalewski, Niels Heinen và Sebastian Roschke. Công cụ này sử dụng ngôn ngữ lập trình C, được phát triển bởi Google và đã có bản quyền được bảo lưu vào năm 2009 – 2012. Khi Skipfish chính thức được phát hành thì nó đã được cấp phép một cách đầy đủ theo các điều khoản và điều kiện của Apache phiên bản 2.0. Mục tiêu của Skipfish tương tự như mục tiêu của các máy quét lỗ hổng bảo mật web trước đây như Nmap và Nessus, cho phép các nhà phát triển web quét ứng dụng hoặc trang web của họ để tìm các vấn đề bảo mật tiềm ẩn. Skipfish có thể được sử dụng để xác định xem mã có dễ bị tấn công bởi các cuộc tấn công phổ biến như chèn các đoạn mã cho trang web XSS, SQL và tấn công chèn XML hay không vì nó thực hiện quét các lỗ hổng với các mức độ rủi ro cao, lỗ hổng rủi ro trung bình và quét sự cố thấp. Sau khi Skipfish hoàn thành quá trình quét của nó, nó chuẩn bị một bản đồ trang web tương tác cho trang web được nhắm mục tiêu bằng cách thực hiện thu thập dữ liệu đệ quy và các thăm dò dựa trên từ điển. Skipfish được cho là có thể dễ dàng xử lý hơn 2.000 yêu cầu HTTP mỗi giây nếu máy chủ đang được kiểm tra có thể xử lý tải.
GIỚI THIỆU VỀ CÔNG CỤ SKIPFISH
Tổng quan về công cụ Skipfish
Skipfish là một công cụ quét ứng dụng web mã nguồn mở, được phát triển và duy trì bởi các chuyên gia Michal Zalewski, Niels Heinen và Sebastian Roschke Được viết bằng ngôn ngữ lập trình C, Skipfish là sản phẩm của Google và đã được bảo vệ bản quyền từ năm phát hành.
2009 – 2012 Khi Skipfish chính thức được phát hành thì nó đã được cấp phép một cách đầy đủ theo các điều khoản và điều kiện của Apache phiên bản 2.0.
Hình 1.1: Giới thiệu công cụ Skipfish
Skipfish là công cụ quét lỗ hổng bảo mật web, tương tự như Nmap và Nessus, giúp các nhà phát triển web kiểm tra ứng dụng hoặc trang web của họ để phát hiện các vấn đề bảo mật tiềm ẩn Công cụ này xác định các lỗ hổng dễ bị tấn công bởi các phương thức phổ biến như XSS, SQL injection và XML injection, với khả năng quét các mức độ rủi ro khác nhau Sau khi hoàn tất quét, Skipfish tạo ra một bản đồ trang web tương tác thông qua việc thu thập dữ liệu đệ quy và thăm dò từ điển, cho thấy tính năng dễ sử dụng của nó.
2.000 yêu cầu HTTP mỗi giây nếu máy chủ đang được kiểm tra có thể xử lý tải.
Skipfish tập trung vào việc phát hiện các vấn đề bảo mật của trang web và ứng dụng web trên internet, giúp các nhà phát triển quét ứng dụng để tìm ra lỗ hổng Lỗ hổng bảo mật là những điều kiện gia tăng mối đe dọa, làm tăng rủi ro và xác suất xảy ra sự cố Công cụ này cho phép nhà phát triển xác định ngay lập tức các điểm yếu của ứng dụng, giúp họ thực hiện các biện pháp bảo vệ cần thiết để giảm thiểu nguy cơ Như George Christoph Lichtenberg đã nói: “Một khi chúng tôi biết điểm yếu của mình, họ sẽ không làm chúng tôi nữa gây hại.” Điều này khẳng định rằng Skipfish là công cụ hiệu quả để bảo vệ ứng dụng khỏi các rủi ro tiềm ẩn.
Hình 1.2: Báo cáo của Skipfish về việc quét các lỗ hổng bảo mật của một trang web
Hiện nay, có nhiều công cụ mã nguồn mở và thương mại nổi tiếng như Acunetix, Nikto, Websecurify, Netsparker, w3af, Arachni, được sử dụng phổ biến trong ngành an ninh thông tin nhờ vào giao diện dễ sử dụng và thường xuyên được cập nhật Tuy nhiên, Skipfish không thể so sánh với các công cụ này vì nó không nhằm mục đích thương mại mà chủ yếu phục vụ cho nghiên cứu, và phiên bản mới nhất của nó đã ra đời cách đây gần một thập kỷ Trong bối cảnh công nghệ phát triển nhanh chóng, các công cụ hiện tại có khả năng quét mạnh mẽ hơn nhiều so với Skipfish.
Hình 1.3: Bảng so sánh giữa hai công cụ Skipfish và Acunetix
Hình 1.4: Bảng so sánh giữa hai công cụ Skipfish và Nikto
So với các công cụ rà quét lỗ hổng hiện nay, Skipfish có những hạn chế nhất định trong việc giám sát và tìm kiếm vấn đề bảo mật ứng dụng web Các công cụ mới trên thị trường hiện nay thể hiện sự nổi bật hơn hẳn trong khả năng phát hiện và xử lý các lỗ hổng bảo mật.
So với các công cụ rà quét khác như Grabber và Vega, Skipfish đã chứng tỏ được hiệu suất vượt trội với kết quả ấn tượng, xứng đáng nằm trong top đầu các công cụ rà quét đáng sử dụng.
Hình 1.5: Bảng so sánh đưa ra các tính năng vượt trội của Skipfish so với Grabber
Mỗi công cụ bảo mật ứng dụng web đều có những ưu điểm và đặc trưng riêng, giúp giải quyết các vấn đề phổ biến về an toàn và bảo mật mà các công cụ khác có thể không đáp ứng được.
Một số các tính năng cũng như ưu điểm nổi bật của công cụ Skipfish:
Hiệu suất cao của hệ thống được thể hiện qua khả năng xử lý hơn 500 yêu cầu mỗi giây cho các mục tiêu Internet, trên 2000 yêu cầu mỗi giây trên mạng LAN/MAN và hơn 7000 yêu cầu cho các phiên bản cục bộ, đồng thời giữ mức sử dụng CPU, mạng và bộ nhớ ở mức rất khiêm tốn.
Ghép kênh đơn luồng cùng với I/O mạng hoàn toàn không đồng bộ và mô hình xử lý dữ liệu giúp cải thiện hiệu quả quản lý bộ nhớ, lập lịch và giao tiếp giữa các tiến trình (IPC) trong các hệ thống máy khách đa luồng.
HTTP/1.1 cung cấp nhiều tính năng nâng cao như yêu cầu phạm vi, nén nội dung và duy trì kết nối, giúp kiểm soát chi phí cấp mạng hiệu quả Ngoài ra, nó cũng đặt ra giới hạn kích thước phản hồi bắt buộc, đảm bảo việc truyền tải dữ liệu diễn ra suôn sẻ và tiết kiệm tài nguyên mạng.
• Bộ nhớ đệm phản hồi thông minh và phỏng đoán hành vi máy chủ nâng cao được sử dụng để giảm thiểu lưu lượng truy cập không cần thiết.
• Triển khai C thuần túy theo định hướng hiệu suất, bao gồm một ngăn xếp HTTP tùy chỉnh.
Skipfish là một công cụ dễ sử dụng, hỗ trợ trên nhiều khuôn khổ web khác nhau, bao gồm cả các trang web công nghệ hỗn hợp Nó nổi bật với khả năng nghiên cứu tự động, tạo danh sách từ nhanh chóng và tự động hoàn thành biểu mẫu Với tính thích nghi cao và độ tin cậy, Skipfish tích hợp nhiều tính năng hữu ích khác nhau.
• Nhận dạng theo kinh nghiệm của các lược đồ xử lý tham số dựa trên đường dẫn và truy vấn không rõ rang.
Xử lý hiệu quả các trang web đa khuôn khổ yêu cầu phải nhận diện và quản lý các đường dẫn có ngữ nghĩa khác nhau hoặc áp dụng các quy tắc lọc khác nhau.
• Xây dựng danh sách từ tự động dựa trên phân tích nội dung trang web.
• Tính năng quét xác suất để cho phép đánh giá định kỳ, có giới hạn thời gian đối với các trang web phức tạp tùy ý.
Skipfish là công cụ kiểm tra bảo mật được thiết kế tốt, với chất lượng cao và ít dương tính giả Nó có khả năng phát hiện nhiều lỗ hổng tinh vi, bao gồm cả vectơ tiêm mù, nhằm cung cấp kết quả chính xác và có ý nghĩa.
• Từ điển thủ công cung cấp phạm vi bảo hiểm tuyệt vời và cho phép
$keyword, $extension kiểm tra kỹ lưỡng trong một khung thời gian hợp lý.
• Quá trình thăm dò các khác biệt sử dụng ba bước triển khai được ưu tiên hơn để kiểm tra các chữ ký và phát hiện các lỗ hổng.
Logic của Ratproxy được áp dụng để phát hiện các vấn đề bảo mật phức tạp, bao gồm việc giả mạo yêu cầu trên nhiều trang web, sử dụng tập lệnh trên nhiều trang, nội dung hỗn hợp, vấn đề về MIME, sự không khớp trong bộ mã ký tự và các chỉ thị bộ nhớ đệm không chính xác.
Kiểm tra bảo mật theo gói được thiết kế để giải quyết các tình huống phức tạp như XSS lưu trữ (bao gồm đường dẫn, tham số và tiêu đề), cũng như các lỗ hổng chèn SQL, XML mù và chèn trình bao mù.
Hướng dẫn cài đặt và sử dụng công cụ Skipfish
1.2.1 Hướng dẫn cài đặt công cụ Skipfish
Skipfish là một công cụ phổ biến và dễ sử dụng, được phát hành lần đầu vào ngày 19 tháng 3 năm 2010 với phiên bản 1.00 beta Sau nhiều giai đoạn phát triển, phiên bản mới nhất, Skipfish 2.10 beta, đã được ra mắt vào tháng 4 năm 2012 Được viết bằng ngôn ngữ lập trình C và mã nguồn mở, Skipfish có khả năng tích hợp và cài đặt dễ dàng trên các hệ điều hành như OSX, Linux và Windows.
Để cài đặt công cụ Skipfish trên các hệ điều hành khác nhau, người dùng cần truy cập vào trang chủ của Skipfish và chọn mục Downloads Tại đây, có nhiều phiên bản khác nhau được cung cấp, phù hợp với từng hệ điều hành, với các phiên bản này được đánh dấu bằng màu xanh lá cây để dễ dàng nhận diện và lựa chọn.
Sau khi tải xuống, tệp sẽ được lưu dưới dạng nén Quy trình giải nén và cài đặt công cụ có sự khác biệt tùy thuộc vào hệ điều hành Dưới đây là hướng dẫn cài đặt cho hai hệ điều hành phổ biến: Windows và Linux.
* Đối với hệ điều hành Windows
Công cụ Skipfish không phải là một ứng dụng Windows thực thụ, do đó, khi giải nén, chúng ta sẽ không thấy các tệp thực thi như exe hay msi Để sử dụng Skipfish, người dùng cần cài đặt Cygwin và thực hiện các thao tác tương tự như trên một ứng dụng Linux.
Bước 1: Tải xuống và cài đặt phần mềm Cygwin từ trang chủ [Cygwin](http://www.cygwin.com/) với phiên bản tương thích cho máy tính Windows 32 bit hoặc 64 bit Trang web cung cấp hướng dẫn cài đặt chi tiết, và bạn cũng có thể tham khảo hướng dẫn cài đặt trên hệ điều hành Windows 10 tại [đây](https://github.com/lakelse/videos/tree/master/01-install-cygwin-on-windows-youtube).
Bước 2: Thực hiện tiêu chuẩn các bước của Trình hướng dẫn cài đặt công cụ
Cygwin cho đến khi màn hình 'Thiết lập Cygwin - Packages' Chọn các gói bổ sung sau và cài đặt sau phiên bản 'devel' nếu có:
Bước 3: Mở Terminal của Cygwin, giao diện sẽ giống với Linux Tiến hành cài đặt Skipfish bằng cách sử dụng các câu lệnh để giải nén tệp tin Skipfish đã tải về và cài đặt từ mã nguồn với lệnh make.
• $ tar -xf /path to/ skipfish-2.10b.tgz
Quá trình cài đặt công cụ Skipfish trên Cygwin đã hoàn tất, cho phép người dùng sử dụng nó trên hệ điều hành Windows thông qua giao diện dòng lệnh.
* Đối với hệ điều hành Linux
Hệ điều hành Linux có nhiều phiên bản khác nhau như Ubuntu, Kali Linux, Fedora, RedHat, CentOS và Linux Mint Bài viết này sẽ hướng dẫn cài đặt công cụ Skipfish trên hai nền tảng phổ biến nhất là Ubuntu và Kali Linux.
Hệ điều hành Ubuntu, một trong những hệ điều hành Linux phổ biến nhất hiện nay, nổi bật với giao diện đẹp và khả năng tương tác tuyệt vời Tuy nhiên, công cụ Skipfish không được tích hợp sẵn trong Ubuntu, vì vậy người dùng cần thực hiện cài đặt nó Quá trình cài đặt Skipfish trên Ubuntu rất đơn giản và dễ dàng.
Bước 1: Nếu bạn chưa tải tập tin nén của Skipfish từ trang chủ, hãy mở Terminal trên Ubuntu và sử dụng lệnh sau để tải về tập tin nén của công cụ này: ```bashwget https://skipfish.googlecode.com/files/skipfish-2.10b.tgz``` Lưu ý rằng liên kết tải về có thể không còn hoạt động.
Bước 2: Sau khi tải về được tập tin nén của phiên bản Skipfish, chúng ta sẽ tiến hành giải nén nó bằng lệnh: tar zxvf skipfish-2.10b.tgz
Để hoàn tất quá trình cài đặt, bạn cần tải về thư viện libidn-dev phiên bản 11, một yêu cầu bắt buộc giúp mã hóa và giải mã các tên miền quốc tế hóa Sử dụng câu lệnh sau: sudo apt-get install libidn11-dev để thực hiện việc này.
Bước 4: Chuyển hướng tới thư mục skipfish và tiến hành cài đặt công cụ bằng các câu lệnh sau:
• cp dictionaries/default.wl skipfish.wl
Bước 5: Quá trình cài đặt hoàn tất, bây giờ chúng ta có thể sử dụng công cụ
Skipfish bằng các thao tác trên dòng lệnh ví dụ như:
/skipfish -o output-folder http://example.com
+ Hệ điều hành Kali Linux: với các phiên bản mới nhất hiện nay thì công cụ
Skipfish đã được tích hợp sẵn, giúp người dùng tiết kiệm thời gian cài đặt Bạn có thể sử dụng công cụ này trực tiếp thông qua giao diện dòng lệnh trên Terminal.
Có hai cách để mở công cụ Skipfish trên Kali Linux như sau:
Cách 1: Bật cửa sổ Terminal lên và gõ vào đó câu lệnh skipfish -h
Hình 1.7: Cách khởi động công cụ Skipfish bằng câu lệnh trên Kali Linux
Để bật công cụ Skipfish mà không cần sử dụng câu lệnh trên Terminal, bạn có thể truy cập theo đường dẫn: Ứng dụng -> 03 - Phân tích Ứng dụng Web -> skipfish.
Công cụ Skipfish đã được tích hợp sẵn trên Kali Linux, cho phép người dùng dễ dàng khởi động mà không cần cài đặt thêm Hướng dẫn cài đặt chi tiết công cụ này trên các nền tảng hệ điều hành khác nhau sẽ giúp người dùng lựa chọn phương pháp phù hợp với nhu cầu và môi trường làm việc của họ Trong bài báo cáo này, chúng tôi sẽ chủ yếu sử dụng Skipfish trên Kali Linux với phiên bản mới nhất để đảm bảo hiệu quả tối ưu.
Việc sử dụng công cụ Skipfish giúp rà quét các lỗ hổng bảo mật một cách hiệu quả, từ đó tạo điều kiện thuận lợi cho việc kết hợp các công cụ và phương thức tấn công khác nhau Điều này cho phép người dùng thực hành vá các lỗ hổng một cách nhanh chóng và dễ dàng.
Các vấn đề thường gặp và cách khắc phục với công cụ Skipfish
+ Vấn đề 1: Biên dịch không thành công
Một trong những lý do phổ biến nhất gây ra các vấn đề là do môi trường xây dựng không được cấu hình đúng cách Để khắc phục, hãy đảm bảo rằng tất cả các thành phần cần thiết và phụ thuộc của chúng đã được cài đặt đầy đủ.
• Thư viện GNU C (bao gồm các tiêu đề phát triển)
• zlib (bao gồm các tiêu đề phát triển)
• OpenSSL (bao gồm các tiêu đề phát triển)
• libidn (bao gồm các tiêu đề phát triển)
• libpcre (bao gồm các tiêu đề phát triển)
Tất cả các tiêu đề phát triển cần phải được bao gồm trong đường dẫn mặc định; tuy nhiên, một số nhà cung cấp có thể gây khó khăn trong việc này Trong trường hợp đó, chúng ta cần xác định vị trí của tệp bằng cách sử dụng các công cụ tìm kiếm và thêm đường dẫn tệp với tùy chọn -I/path/to/include/files/ trong CFLAGS và -L/path/to/libraries/ trong LDFLAGS.
Khi gặp phải vấn đề quét diễn ra liên tục, điều đầu tiên cần kiểm tra là số lượng yêu cầu mỗi giây của máy quét Đối với các mục tiêu từ xa trên Internet, số lượng này nên đạt ít nhất 200 req/s, trong khi trên mạng cục bộ, con số tối thiểu là 1000 req/s Nếu thấp hơn đáng kể, có thể do tốc độ máy chủ chậm Trong trường hợp này, hãy thử điều chỉnh tham số -m; giảm xuống 2-5 có thể hữu ích cho các mục tiêu lân cận với độ trễ thấp, trong khi tăng lên 20-30 có thể hỗ trợ cho các điểm đến chậm Ngoài ra, người dùng cũng nên xem xét việc sửa đổi cài đặt từ điển theo hướng dẫn trong dictionaries/README.
FIRST để giảm số lượng yêu cầu được gửi, với chi phí là phạm vi kiểm tra brute- force.
Chuyển từ complete.wl sang minimal.wl có thể giảm thời gian quét xuống 3 lần Sử dụng tham số -Y có thể tăng tốc độ lên 20 lần, trong khi vô hiệu hóa hoàn toàn brute-force với tham số -L Bên cạnh đó, tham số -W sẽ giúp tăng tốc độ tổng thể lên 500 lần.
Nếu tốc độ quét và phạm vi phủ sóng brute-force đủ, nhưng quá trình quét một trang web nhỏ vẫn mất nhiều giờ, hãy nhấn space để xem trước các yêu cầu hiện tại và xác định vị trí đang được quét Nếu vị trí không có ý nghĩa, hãy hủy quá trình quét bằng Ctrl-C và kiểm tra báo cáo đã tạo Nếu phát hiện các nút đệ quy không có thật hoặc bất thường khác, hãy liên hệ với người quản trị hệ thống để khắc phục Đồng thời, có thể sử dụng các tham số như -c, -x, -r và -d để giới hạn phạm vi quét, hoặc -X để loại trừ các địa điểm có vấn đề.
+ Vấn đề 3: Quá trình quét của diễn ra quá nhanh
Để tránh quá tải máy chủ, bạn có thể điều chỉnh số lượng yêu cầu mỗi giây bằng cách sử dụng tùy chọn -l, ví dụ như "-l 10" để giới hạn chỉ 10 yêu cầu mỗi giây Bên cạnh đó, bạn cũng có thể giảm số lượng kết nối đồng thời bằng cách sử dụng tham số -m.
Trong trường hợp hiếm hoi khi các tham số -l và -m không đủ để làm chậm quá trình quét của Skipfish, bạn có thể áp dụng các thủ thuật khác để hạn chế băng thông mà công cụ này sử dụng.
+ Vấn đề 4: Gặp phải một số vấn đề về hiển thị hoặc bị giật trong quá trình sử dụng công cụ
Nếu thiết bị đầu cuối của bạn sử dụng bảng màu không chuẩn, kết quả đầu ra của Skipfish có thể bị ảnh hưởng, khiến nó khó đọc Ngoài ra, số lượng yêu cầu quá nhiều và thời gian quét có thể bị giật Để khắc phục vấn đề này, hãy chỉnh sửa file config.h và biên dịch lại.
Nếu thiết bị đầu cuối của bạn có kích thước màn hình quá nhỏ, chẳng hạn như 80x25, thì thống kê thời gian chạy của Skipfish có thể không hiển thị đầy đủ Để đảm bảo công cụ hoạt động hiệu quả, hãy thay đổi kích thước màn hình tối thiểu là 100x35.
Nếu bạn cảm thấy khó chịu với báo cáo thời gian chạy dài dòng hoặc đang sử dụng thiết bị đầu cuối chậm, hãy sử dụng tham số -u để ngăn chặn tất cả thông tin đầu ra hiển thị trong thời gian thực khi quét.
Vấn đề 5: Không thể xem báo cáo trong Safari hoặc Chrome có thể xảy ra do bạn đã truy cập báo cáo qua giao thức file:/// Các cải tiến bảo mật quan trọng trong hai trình duyệt này đã ảnh hưởng đến khả năng hiển thị ngôn ngữ kịch bản của công cụ, dẫn đến những khó khăn khi xem báo cáo.
Để khắc phục vấn đề trong Chrome, bạn có thể sử dụng tùy chọn dòng lệnh allow-file-access-from-files Ngoài ra, bạn cũng có thể lưu báo cáo trong thư mục gốc www cục bộ và truy cập qua địa chỉ http://localhost/ hoặc lựa chọn sử dụng Firefox.
+ Vấn đề 6: Ảnh hưởng của thư mục đầu ra quét rất lớn
Thư mục không chỉ liệt kê các vấn đề phát hiện mà còn bao gồm tất cả các yêu cầu và phản hồi HTTP quan trọng, cùng với bản sao của các tệp đã được phát hiện, nhằm xác nhận và phát hiện máy quét tài liệu Mặc dù dữ liệu này có thể khá lớn, nhưng nó không làm ảnh hưởng đến trải nghiệm xem báo cáo.
Nếu bạn không muốn lưu trữ bằng chứng, hãy sử dụng tùy chọn -e để ngăn chặn việc lưu nội dung của các tệp nhị phân, hoặc bạn có thể xóa tất cả các tệp *.dat một cách đệ quy.
+ Vấn đề 7: Ảnh hưởng của những dấu chân về bộ nhớ rất lớn
Skipfish không rò rỉ bộ nhớ và sử dụng ít bộ nhớ để hiển thị dữ liệu, nhưng vẫn giữ bộ nhớ đệm cho tất cả tài liệu đã thu thập Kích thước mẫu mặc định khá lớn, trung bình khoảng 200 kB Nếu trang web có 30.000 video lớn, bạn nên cân nhắc tùy chỉnh bộ nhớ cho phù hợp.
Có một số cách đơn giản để khắc phục điều này:
• Sử dụng tham số -e để dừng máy quét để lưu trữ các tệp nhị phân cho mục đích báo cáo
• Chỉ định tham số -c hoặc -x để giới hạn số lượng các nút được lập chỉ mục.
• Tham số -I để thu hẹp quá trình quét đến các vị trí động, thú vị trên máy chủ của bạn.
THỬ NGHIỆM KỊCH BẢN TẤN CÔNG TRÊN CÔNG CỤ SKIPFISH36 2.1 Các kỹ thuật tấn công và công cụ tích hợp sử dụng trong bài LAB
Kịch bản thử nghiệm tấn công thực tế
Bài LAB sau đây sẽ thực hiện rà quét một số trang web bằng công cụ Skipfish để khai thác lỗ hổng SQL Injection.
Kẻ tấn công thực hiện cuộc tấn công khai thác lỗ hổng SQL Injection trên các trang web có lỗ hổng bảo mật Họ sử dụng công cụ rà quét để phát hiện các lỗ hổng này và kết hợp với nhiều phương thức khác nhau để khai thác SQL Injection Mục tiêu của cuộc tấn công là chiếm đoạt thông tin nhạy cảm trong cơ sở dữ liệu, như tài khoản và mật khẩu của người quản trị hệ thống, từ đó có thể kiểm soát toàn bộ hệ thống.
2) Các thiết bị cần chuẩn bị
Một máy tính chạy hệ điều hành Kali Linux có:
+ Cài đặt công cụ Skipfish để phục vụ cho quá trình rà quét + Cài đặt một trình duyệt web bất kỳ để truy cập vào trang web.
3) Các kỹ thuật sử dụng
Sử dụng các câu lệnh truy vấn để khai thác lỗ hổng SQL Injection là một phương pháp quan trọng trong bảo mật web Kỹ thuật rà quét và phân tích dữ liệu trang web bằng công cụ Skipfish giúp phát hiện các lỗ hổng bảo mật tiềm ẩn, từ đó nâng cao khả năng bảo vệ hệ thống.
Kẻ tấn công đã sử dụng công cụ Skipfish qua giao diện dòng lệnh, nhắm vào hai trang web có lỗ hổng SQL Injection: trang demo của Acunetix tại testphp.vulnweb.com và trang web thực www.nhuaphucthinh.com.vn Sau khi quét, báo cáo cho thấy cả hai trang đều tồn tại lỗ hổng SQL Injection, cho phép kẻ tấn công thực hiện các truy vấn trực tiếp qua URL để khai thác thông tin tài khoản và mật khẩu của người dùng cũng như quản trị viên hệ thống.
Kịch bản số 1 mô tả việc khai thác lỗ hổng SQL Injection trên trang web testphp.vulnweb.com nhằm đánh cắp tài khoản và mật khẩu của người dùng Quá trình này được thực hiện bằng cách sử dụng các công cụ như Skipfish và Google Hacking để truy cập trái phép vào hệ thống.
Bước 1: Khởi động Terminal của Kali Linux và khởi chạy công cụ Skipfish bằng câu lệnh skipfish -h
Hình 2.1: Khởi động công cụ Skipfish trong Kali Linux
Sử dụng công cụ Skipfish để quét lỗ hổng bảo mật cho trang web testphp.vulnweb.com bằng lệnh: skipfish -o outputdemo http://testphp.vulnweb.com.
Hình 2.2: Truyền lệnh vào công cụ Skipfish để tiến hành rà quét
Bước 3: Công cụ Skipfish sẽ khởi động quá trình quét và thu thập dữ liệu từ trang web, đồng thời phát hiện các vấn đề bảo mật với các mức độ cảnh báo khác nhau Thời gian quét có thể thay đổi nhanh hay chậm tùy thuộc vào quy mô dữ liệu của trang web.
Hình 2.3: Hiển thị các tính năng quét của Skipfish
Hình 2.4: Một vài thông số về quá trình rà quét của Skipfish
Hình 2.5: Chi tiết các yêu cầu được rà quét để thu thập thông tin trang web
Sau khi hoàn tất quá trình quét, kết quả báo cáo sẽ được lưu trữ trong thư mục outputdemo Để xem chi tiết bản báo cáo, bạn chỉ cần truy cập vào thư mục này và mở file index.html trên trình duyệt.
Hình 2.6: Thư mục chưa báo cáo đầu ra sau khi quá trình quét hoàn tất
Hình 2.7: Báo cáo kết quả cho trang web testphp.vulnweb.com trên trình duyệt
Báo cáo chi tiết cung cấp kết quả từ các tài liệu thu thập được trên trang web, với từng thư mục được phân tích rõ ràng Quan trọng nhất, báo cáo chỉ ra rằng trang web này đã tồn tại lỗ hổng SQL Injection, và bước tiếp theo sẽ là khai thác những lỗ hổng đó.
Bước 5: Sau khi phát hiện lỗ hổng SQL Injection trên trang web, chúng ta sẽ tiến hành khai thác lỗ hổng này thông qua Google Hacking bằng cách chèn câu truy vấn trực tiếp vào URL Nếu trang web có chức năng đăng nhập, mục tiêu của chúng ta là trích xuất dữ liệu từ cơ sở dữ liệu để lấy tài khoản và mật khẩu cần thiết cho việc đăng nhập.
Hình 2.8: Giao diện đăng nhập của trang web testphp.vulnweb.com
Bước 6: Truy cập vào mục artists và chọn một bản ghi cụ thể, đường dẫn sẽ thay đổi thành http://testphp.vulnweb.com/artists.php?artist=1 Tiếp theo, chèn câu truy vấn "order by N" (với N = 1, 2, 3, …) để lấy số cột tương ứng từ bảng artist Khi thử nghiệm với N = 1, 2, 3, kết quả hiển thị thành công, nhưng khi sử dụng N = 4, sẽ xuất hiện lỗi hiển thị.
Hình 2.9: Sử dụng truy vấn order by với N=3
Hình 2.10: Sử dụng truy vấn order by với N=4
-> Nên ta biết được số cột ở đây là 3 cột.
Bước 7: Chúng ta sẽ tạo một ID không tồn tại trong cơ sở dữ liệu (ID = -1) nhằm xác định các cột gặp lỗi trong ba cột đã xác định, từ đó tiếp tục khai thác các câu truy vấn tiếp theo.
Ta sẽ sử dụng cú pháp http://testphp.vulnweb.com/artists.php?artist=-1 u nion select 1,2,3
Hình 2.11: Sử dụng truy vấn union select để trích xuất các bảng bị lỗi hiển thị
Kết quả cột cho ta thấy, có hai cột bị hiển thị lỗi ở đây chính ra cột số 2 và cột số 3.
Bước 8: Ta sẽ thay giá trị ở cột số 2 bằng “version()” để kiểm tra phiên bản của cơ sở dữ liệu.
Hình 2.12: Sử dụng truy vấn để kiểm tra phiên bản cơ sở dữ liệu
Thay giá trị ở cột số 2 bằng “database()” để trích xuất ra tên của cơ sở dữ liệu.
Hình 2.13: Sử dụng truy vấn để trích xuất tên cơ sở dữ liệu
Bước 9: Sau khi xác định phiên bản và tên cơ sở dữ liệu, chúng ta sẽ xuất danh sách các bảng có trong cơ sở dữ liệu bằng cú pháp: http://testphp.vulnweb.com/artists.php?artist=-1 union select 1, group_concat.
(table_name), 3 from information_schema.tables where table_schema = database()
Hình 2.14: Sử dụng truy vấn để trích xuất các bảng có trong cơ sở dữ liệu
Kết quả hiển thị ra có tất cả có 8 bảng tồn tại trong cơ sở dữ liệu lần lượt là artists, carts, categ, featured, guestbook, pictures, products, users.
Bước 10: Sau khi truy xuất các bảng trong cơ sở dữ liệu, chúng ta sẽ tập trung vào bảng chứa thông tin nhạy cảm của người dùng, thường là bảng có tên là "users" Tiếp theo, để tìm các cột trong bảng "users", ta sử dụng cú pháp: http://testphp.vulnweb.com/artists.php?artist=-1 union select 1, group_concat.
(column_name), 3 from information_schema.columns where table_name =
Trong đó dữ liệu của biến table_name ta phải dịch từ dạng text sang dạng ASCII và ngăn cách nhau bằng dấu “,”.
Hình 2.15: Sử dụng truy vấn trường thông tin trong bảng users
Kết quả hiển thị ra có tất cả có 8 cột tồn tại trong bảng users gồm address, cart, cc, email, name, pass, phone, uname.
Bước 11: Sau khi xác định các cột trong bảng users, hai cột quan trọng nhất là uname và pass Đây là thông tin đăng nhập của người dùng mà chúng ta cần nhắm tới để thực hiện việc đánh cắp và bypass.
To extract the username and password of users from the database, use the following syntax: http://testphp.vulnweb.com/artists.php?artist=-1 UNION SELECT 1, uname, pass FROM users.
Hình 2.16: Truy xuất được thành công username và password
Các biện pháp đối phó dựa trên thử nghiệm tấn công
Quá trình thực nghiệm tấn công SQL Injection bằng công cụ Skipfish cho thấy đây là một lỗ hổng nghiêm trọng, có khả năng đánh cắp dữ liệu người dùng và chiếm quyền điều khiển hệ thống Để bảo vệ trước các cuộc tấn công SQL Injection, cần áp dụng một số biện pháp phòng ngừa hiệu quả.
+ Các biện pháp phòng chống dựa trên kiểm tra và lọc dữ liệu đầu vào:
• Kiểm tra tất cả các dữ liệu đầu vào, đặc biệt dữ liệu nhập từ người dùng và từ các nguồn không tin cậy.
• Kiểm tra định dạng và kích thước dữ liệu đầu vào.
Để bảo vệ hệ thống khỏi các cuộc tấn công, cần tạo ra các bộ lọc nhằm loại bỏ các ký tự đặc biệt như *, ‘, =, và các từ khóa nguy hiểm như SELECT, INSERT, UPDATE, DELETE, DROP trong những trường hợp cần thiết.
+ Các biện pháp phòng chống dựa trên việc sử dụng thủ tục (stored procedures) trong CSDL:
Đưa tất cả các câu truy vấn như SELECT, INSERT, UPDATE, DELETE vào thủ tục lưu trữ và truyền dữ liệu thông qua các tham số Việc này giúp tách biệt dữ liệu khỏi mã, từ đó hạn chế hiệu quả các cuộc tấn công chèn mã SQL.
• Hạn chế thực hiện các câu lệnh SQL động trong thủ tục.
Cấm hoặc vô hiệu hóa các thủ tục hệ thống là biện pháp cần thiết để ngăn chặn việc can thiệp vào hệ quản trị cơ sở dữ liệu (CSDL) và hệ điều hành nền Việc này giúp bảo vệ an toàn dữ liệu và đảm bảo tính ổn định của hệ thống.
• Các Extended/system Stored Procedures trong MS-SQL như xp_cmdshell cho phép chạy lệnh của hệ điều hành.
+ Các biện pháp phòng chống dựa trên thiết lập quyền truy nhập người dùng cho phù hợp:
Không nên sử dụng người dùng có quyền quản trị hệ thống (system admin) hoặc chủ sở hữu cơ sở dữ liệu (database owner) để truy cập dữ liệu Ví dụ, tránh sử dụng tài khoản sa (MS-SQL) hoặc root (MySQL) cho mục đích này Những tài khoản này chỉ nên được sử dụng cho các công việc quản trị hệ thống.
• Chia nhóm người dùng, chỉ cấp quyền vừa đủ để truy cập các bảng biểu, thực hiện câu truy vấn và chạy các thủ tục.
Để đảm bảo an toàn cho dữ liệu, tốt nhất là không cấp quyền thực hiện trực tiếp các câu truy vấn, cập nhật, sửa, xóa Thay vào đó, hãy thủ tục hóa tất cả các câu lệnh và chỉ cấp quyền thực hiện các thủ tục này.
+ Chủ động sử dụng công cụ rà quét lỗ hổng bảo mật để rà quét tìm các lỗ hổng và khắc phục:
Sử dụng công cụ Skipfish hoặc các công cụ quét lỗ hổng bảo mật khác để rà quét ứng dụng web và website nhằm phát hiện các lỗi chèn mã SQL.
SQLmap là một công cụ mã nguồn mở miễn phí được viết bằng Python, có thể tải về từ trang sqlmap.org Công cụ này cho phép người dùng kiểm tra các website để phát hiện lỗi chèn mã SQL và khai thác các lỗi này nhằm điều khiển máy chủ cơ sở dữ liệu SQLmap hỗ trợ hầu hết các hệ quản trị cơ sở dữ liệu phổ biến hiện nay, bao gồm MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase và SAP MaxDB.