Bảo vệ máy chủ bằng Scapy – Phần 1

Có rất nhiều công cụ giúp bảo vệ sự an toàn cho máy chủ và mạng của bạn, tuy nhiên việc chọn ra một công cụ nào đó phù hợp là điều không hề dễ dàng chút nào. Trong bài này chúng tôi sẽ giới thiệu cho các bạn cách sử dụng công cụ Scapy để bảo vệ các máy chủ của mình.

Bảo vệ mạng chống lại những mối đe họa đến từ Internet là một nhiệm vụ không hề đơn giản. Tường lửa là một kiểu kỹ thuật bảo vệ mạng bên trong bằng cách sử dụng hai kết nối Ethernet riêng biệt với phần mềm proxy được dùng để lọc lưu lượng qua lại giữa hai cổng. Ở điểm này, Linux hỗ trợ như một nền tảng tuyệt vời với các công cụ netfilter/iptables.

Một số kỹ thuật khác được sử dụng để tạo nên các công cụ kiểm tra gói dữ liệu bộ lọc như Wireshark hay công cụ quét cổng như nmap. Cả hai công cụ này rất thân thuộc với hầu hết các quản trị viên mạng. Do đó trong bài này chúng tôi sẽ giới thiệu một công cụ hoàn toàn khác, Scapy, một công cụ kết hợp được những tính năng ưu việt trong phân tích và capture dữ liệu của Wireshark, tính năng phát dữ liệu của nmap. Phần một của bài này sẽ tập trung giới thiệu cho các bạn về cách cài đặt và một số hoạt động cơ bản như làm thế nào để capture và hiển thị lưu lượng Ethernet và làm cách nào để tạo một vài kịch bản đơn giản bằng Python. Phần hai chúng tôi sẽ giới thiệu sâu hơn về cách sử dụng Scapy trong việc test máy chủ web để tìm ra các lỗ hổng có thể, tiếp đó là cách tìm ra các máy chủ DNS giả mạo cũng như việc quét mạng không dây để tìm ra các lỗ hổng bảo mật tiềm ẩn.

<i>figure 1</i>
Hình 1

Cài đặt

Việc cài đặt Scapy rất đơn giản và nhanh chóng, chỉ mất một vài phút trên một desktop Ubuntu. Tất cả những gì bạn cần thực hiện ở đây là mở Ubuntu Software Center và tìm kiếm SCAPY. Tên thực mà bạn sẽ tìm được là python-Scapy, đây là một bộ công cụ được viết bằng ngôn ngữ Python. Ngoài ra bạn cũng cần cài đặt một vài phần mềm khác nếu muốn khai thác hết các điểm mạnh của SCAPY. Danh sách các phần mềm cần cài đặt thêm này gồm có python-crypto, python-gnuplot, python-pyx, graphviz imagemagick.

Nếu muốn có được phiên bản mới nhất của Scapy, bạn cần download nguồn và thực thi một vài lệnh để cài đặt nó. Các lệnh đều có sẵn trên Scapy wiki tuy nhiên về cơ bản những gì bạn cần làm là download file scapy-latest.zip, bung file này ra một thư mục nào đó và thực thi lệnh setup.py như sau:

$ sudo python setup.py install

Có rất nhiều nơi bạn có thể tìm hiểu thêm về Scapy, chẳng hạn như online HTML documentation, Scapy Wiki và một số bài viết khác trên Scapy website. Để phát huy tối đa được Scapy, bạn cần biết về giao thức mạng TCP/IP và một chút về ngôn ngữ Python. Python website chính là nơi bạn có thể tìm hiểu thêm về ngôn ngữ này. Ngoài ra cũng có khá nhiều hướng dẫn khác có thể tìm kiếm trên Google. Dive Into Python cũng là một địa điểm nữa mà bạn có thể sử dụng để tìm hiểu thêm về ngôn ngữ này.

Các hoạt động cơ bản

Có khá nhiều hoạt động cơ bản bạn có thể thực hiện bởi Scapy. Nó gần tương tự như Wireshark trong việc capture lưu lượng dữ liệu và đánh hơi các thiết bị Ethernet. Có rất nhiều tùy chọn lệnh khi bạn khởi chạy Scapy. Bạn cũng phải khởi chạy Scapy với đặc quyền quản trị viên của mình nếu muốn capture lưu lượng Ethernet trực tiếp từ bất cứ thiết bị mạng nào. Lệnh để thực hiện điều đó là:

$ sudo scapy

Khi Scapy chạy, bạn sẽ thấy nhắc lệnh với ba mũi tên >>>. Tại đây bạn có thể nhập vào các lệnh hay sử dụng mã Python. Một lệnh đơn giản nhưng hữu dụng mà chúng tôi thể hiện đây thể hiện cách thực thi một hành động ICMP Ping cho một dải đại chỉ:

>>> ans,unans=sr(IP(dst="192.168.1.1-254")/ICMP())

Lệnh sniff cho phép bạn capture các gói dữ liệu Ethernet để phân tích sâu hơn. Bạn có thể chỉ định một giao diện nào đó để sử dụng với tùy chọn iface=, hoặc để trống nhằm capture tất cả các thiết bị. Các tùy chọn khác gồm: filter để thiết lập điều kiện lọc cho các gói capture, count để chỉ định cụ thể số gói được capture, prn để tạo chức năng in định dạng đầu ra của bạn. Các hàm ls() lsc() sẽ hiển thị danh sách các lớp và các hàm có sẵn. (Tìm kiếm một tài liệu chi tiết nào đó sẽ giúp bạn hiểu sâu hơn về các lệnh và cách sử dụng chúng).

Một trong những tính năng chính của Scapy là nó được viết bằng ngôn ngữ Python. Điều này cho phép bạn có thể viết các kịch bản để tự động hóa việc test và các phân tích bạn muốn thực hiện. Khi cài đặt Scapy, bạn có thể truy cập trực tiếp đến tất cả các tính năng từ nhắc lệnh Python. Scapy cũng có khả năng tương tác của riêng nó, đây là thứ bạn sẽ thấy nếu đánh scapy vào cửa sổ terminal. Nếu xem file /usr/local/bin/scapy, bạn sẽ thấy nhiều dòng comment và hai lệnh Python:

from scapy.main import interact

<i>figure 2</i>
Hình 2

interact()

Python sẽ giúp đơn giản hóa quá trình tạo kịch bản gửi các request và sau đó định dạng các thông tin trở về nhằm tạo đầu ra thân thiện dễ hiểu. Để tạo sự dễ hiểu cho đầu ra của ICMP request, bạn có thể sử dụng dòng mã như sau:

>>> ans.summary( lambda(s,r) : r.sprintf("%IP.src% is alive"))

Các hàm lambda được sử dụng với lệnh sniff:

>>> sniff(iface="eth1", prn=lambda x: x.show())

Nếu chạy lệnh này trong một cửa sổ terminal, bạn sẽ thấy một danh sách đầy đủ tất cả lưu lượng trên eth1 cho tới khi bạn stop nó bằng phím control-D.

<i>figure 3</i>
Hình 3

Kết luận

Có thể nói Scapy là một công cụ đặc biệt hữu dụng cho các quản trị viên với một chút kinh nghiệm với Python. Trong phần tiếp theo của loạt bài này, chúng tôi sẽ giới thiệu cho các bạn cách sử dụng Scapy trong một số chế độ khác để bảo vệ mạng.

(Theo Quantrimang)