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.
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 và
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() và 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
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.
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.