CHƯƠNG 2: GIỚI THIỆU CHUNG VỀ CÔNG CỤ NESSUS
2.1 Tổng quan về ngơn ngữ NASL
2.1.1 Lịch sử hình thành
Vào năm 1998, phiên bản đầu tiên của Nessus được phát hành với khả năng kiểm tra khoảng 50 lỗi bảo mật, nó cịn được biết như các plugin. Những plugin này được cài đặt như các thư viện dùng chung, được viết bằng ngơn ngữ lập trình C, với phần mở rộng .nes. Mục đích của phương pháp này nhằm phân tách riêng module đảm nhận việc quét (engine scanning) với các module hướng dẫn, chỉ thị quét. Điều này giúp cho Nessus có kiến trúc module và dễ dàng mở rộng. Vào thời điểm đó, việc dùng các thư viện dùng chung để viết các plugin có rất nhiều ý nghĩa, giúp nhanh chóng tạo các plugin dựa trên những chương trình C sẵn có.
Tác giả đã viết một script nhỏ gọi là "plugin-factory" giúp biên dịch các plugin viết bằng C sang các thư viện dùng chung (.nes). Ý tưởng là khi người dùng muốn update các plugin, họ sẽ download các plugin viết bằng C mới nhất trên web, sau đó biên dịch và cài đặt chúng. Quá trình này mang lại nhiều nguy cơ khơng an tồn về bảo mật, vì thế ý tưởng khơng được phát triển.
Sau khi tìm kiếm các ngơn ngữ script hiện tại, Perl có lẽ là ngơn ngữ tốt nhất để viết các plugin cho Nessus, tuy nhiên vào thời điểm đó Perl có một số hạn chế:
- Chiếm dung lượng bộ nhớ lớn.
- Khơng hỗ trợ tốt q trình gửi/nhận các gói tin thơ (raw packet).
- Khơng có cách nào đáng tin cậy để kiểm tra dưới các máy ảo cơ bản.
Điểm cuối cùng là quan trọng nhất. Từ một góc nhìn mức cao, mỗi một q trình qt đều giống nhau: nó kết nối đến một số cổng trên máy khách từ xa, thực hiện một số tác vụ, sau đó suy ra máy khách từ xa có dễ bị tổn thương với một số luật đã cho trước hay không. Cách tốt nhất là điều chỉnh tất cả các tác vụ quét, để không phải điều chỉnh chúng một cách riêng rẽ, chuyển cho máy ảo thực hiện. Ví dụ, khi ta thêm khả năng hỗ trợ SSL vào trong Nessus, ta không phải sửa từng plugin, ta chỉ cần chỉnh sửa hàm socket thực hiện kết nối. Một mối quan tâm khác tới việc dùng Perl làm ngôn ngữ để viết các Plugin là các hàm bổ sung chỉ tồn qua các plugin bên ngoài. Những module này lại yêu cầu những gói và hàm thư viện hệ thống riêng. Tác giả đã quyết định viết
một ngôn ngữ Script mới gọi là NASL dùng riêng cho Nessus (Nessus Attrack Scripting Language), với các mục tiêu hướng đến:
- Mỗi script được chứa trong một file.
- Dễ cài đặt với người dùng cuối.
- Dễ tìm hiểu cho các nhà phân phối, phát triển.
- Chiếm ít dung lượng bộ nhớ.
- Thiết kế riêng cho quét lỗ hổng an ninh mạng.
- Độ bảo mật cao.
- Dễ chỉnh sửa và mở rộng.
- Hỗ trợ đa ngôn ngữ.
Kết quả là ngôn ngữ NASL1 được ra đời, trong đó có một số điểm chưa được hồn thiện: nó rất chậm và q lỏng lẻo về các lỗi cú pháp, nhưng tổng thể nó đã làm tốt nhiệm vụ của mình. Hơn 1000 lỗi kiểm tra bảo mật được viết bởi NASL1. Ban đầu tốc độ không phải là điều đáng quan tâm nhất, bởi thời gian để thiết lập một phiên kết nối TCP luôn mất nhiều hơn là thời gian trình thơng dịch NASL xử lý, phân tích cú pháp mã plugin.
Tuy nhiên, khi số lượng plugin tăng lên, người dùng bắt đầu sử dụng Nessus quét nhiều host hơn, NASL1 thực sự trở nên chậm cho những tác vụ này. Mã nguồn gốc khó mở rộng, và quyết định đơn giản là viết lại NASL.
Vào năm 2001, thư viện libnasl được viết lại bởi Michel Arboi để mở rộng ngôn ngữ, và sửa chữa những khuyết điểm của NASL1. Thư viện viết lại này, được gọi với tên NASL2, trở thành thành phần lớn nhất trong Nessus 2.0. Kể từ phiên bản 3.0, ngơn ngữ NASL2 được tích hợp vào trong engine. Những ưu điểm của NASL2:
- Script được gói gọn: mỗi script NASL chứa cả code để kiểm tra các luật và các chỉ dẫn cho plugin của chính nó. Các file script có phần mở rộng đơn giản là .nasl.
- Dễ cài đặt với người dùng cuối: NASL có dạng tự đóng gói, có thể cấu hình sử dụng với thư viện OpenSSL. Người dùng có thể dùng trình biên dịch GCC và GNI Bison (bison) dễ dàng xây dựng và cài đặt trình thơng dịch NASL.
- Dễ dàng tìm hiểu với các nhà phân phối, phát triển: NASL trông rất giống C, với một vài điểm của Perl. Nếu chúng ta đã từng lập trình với những ngơn ngữ trên, thì việc học NASL khá dễ. Điểm khác biệt lớn nhất giữa NASL và C là nó khơng có phần con trỏ và quản lý bộ nhớ.
- Chiếm ít dung lượng bộ nhớ: Thơng thường, Nessus chỉ yêu cầu vài trăm KB bộ nhớ, nó có thể load được nhiều plugin đồng thời.
- Thiết kế dành riêng cho kiểm tra bảo mật mạng: NASL được thiết kế để thiết lập kết nối, gửi nhận dữ liệu, xử lý kết quả. Nó có số lượng lớn các hàm thư viện cài đặt chcác giao thức mức cao. Ví dụ như các giao thức SMB, NFS, RPC, SMTP, HTTP, v.v… Tất cả những thư viện này đều được viết bằng NASL.
- Độ bảo mật cao: NASL không thể truy cập vào hệ thống file cục bộ, thực hiện các câu lệnh hệ thống, hoặc kết nối tới một máy khách bên thứ 3 (nó chỉ có thể kết nối tới host đang thực hiện kiểm tra). Việc khơng có con trỏ và quản lý bộ nhớ, giúp nó tránh được các lỗi như tràn bộ đệm. Điều này làm cho NASL trở thành một ngôn ngữ rất an toàn và giảm thời gian thiết kế những plugin mới.
- Dễ chỉnh sửa và mở rộng: Phiên bản của trình thơng dịch NASL có ngơn ngữ rất trong sáng, giúp việc thêm các toán tử và hàm mới rất dễ, có khả năng tương thích ngược với các thư viện cũ.
- Hỗ trợ đa ngôn ngữ: NASL hỗ trợ đa ngôn ngữ, nhưng giới hạn ở các ngơn ngữ có thể mã hóa với bảng ký tự ASCII. Có nhiều ngơn ngữ như Nhật Bản, khơng thể biểu diễn bằng bảng mã ASCII mở rộng.
2.1.2 Điểm khác biệt giữa NASL1 và NASL2
- NASL2 sử dụng trình phân tích cú pháp Bison, nó chặt chẽ hơn và có thể xử lý những kiểu diễn đạt phức tạp.
- NASL2 có nhiều hàm xây dựng sẵn (mặc dù hầu hết những hàm này đều có thể chuyển tương thích với NASL1).
- NASL2 có nhiều tốn tử được tích hợp.
- NASL2 nhanh hơn (khoản tầm 16 lần).
- Hầu hết script NASL2 không thể chạy với NASL1.
- Một vài script NASL1 không thể chạy với NASL2 (nhưng việc sửa tương đối dễ dàng).
- NASL2 có hàm chức năng xử lý mảng.
2.1.3 NASL2 ngôn ngữ thông dịch, tựa C
“Thông dịch” là đặc điểm chung các ngơn ngữ script. Nhưng NASL2 có một thuận lợi lớn cho những người muốn tìm hiểu, đó là cú pháp của nó gần giống ngơn ngữ lập trình C (từ cách khai báo biến, các tốn tử, vịng lặp, v.v…). Nó khơng có các
thành phần phức tạp như trong C (biến con trỏ, quản lý vòng lặp), khiến cho ngữ pháp của NASL2 trở nên đơn giản, dễ hiểu hơn.
2.1.4 Cấu trúc ngôn ngữ NASL2
Sơ lược về quy tắc viết chương trình
- Chú thích bắt đầu tính từ dấu “#” ở đầu dịng, khi đó nó sẽ được trình thơng dịch bỏ qua.
- Có thể thêm các khoảng trắng tùy ý giữa 2 từ, toán tử. Khoảng trắng ở đây có thể là dấu cách, tab.
- Chuỗi được phân tích bởi bộ phân tích từ vựng, sau đó trả lại kết quả phân tích ngữ pháp.
o Bộ phân tích sẽ trả lại thơng báo q dài, nếu nó gặp kiểu diễn tả như a+ ++++b, khi đó nó sẽ hiểu thành a++ ++ + b hoặc (a++ ++) + b. Khi đó ta nên viết a++ + ++b
Không thể thêm khoảng trắng vào giữa chuỗi đa ký tự. Ví dụ x = a + +; sẽ khơng được chấp nhận, nên viết x = a ++;
2.2 Xây dựng Plugin cho Nessus
2.2.1 Thông dịch script tự xây dựng
Khi tự viết script NASL, thông thường để kiểm tra ta dùng trình thơng dịch command-line nasl. Tiện ích nasl được cài đặt sẵn trong quá trình cài Nessus, nó nhận các tham số sau:
nasl [options] script1.nasl [script2.nasl …] Các tùy chọn của trình thơng dịch gồm có:
- Bảo mật :
o -S: Tạo chữ ký cho file script .nasl đang chạy. Q trình tạo chữ ký này cho phép script có thể có được nhiều quyền truy cập vào Nessus Engine. Khi ký u cầu phải có cặp khóa cơng khai/bí mật RSA.
o -X: Chạy script ở chế độ đã được xác thực, cho phép các script đã được ký được nhiều quyền truy cập vào tài nguyên của Nessus Engine.
o -L: Thực hiện kiểm tra bổ sung cho lỗi ngữ pháp và phân tích cú pháp. Nó sẽ kiểm tra mọi thành phần của script. Trước khi phát hành một plugin, ta nên kiểm tra với tùy chọn này.
o -V: Hiển thị thông tin về script như script ID, script name, …
o -T <tracefile>: Lần vết thực hiện của script. Tùy chọn này u cầu trình thơng dịch ghi các thơng tin gỡ rối ra một file cụ thể.
- Môi trường thực thi:
o -t target: Thực hiện script lại một lần nữa với máy đích. Địa chỉ máy đích ở đây có thể là địa chỉ IP, tên máy mà ta muốn kiểm tra script. Các hàm thư viện mạng NASL không cho phép chỉ định địa chỉ đích khác khi đang thực hiện kết nối hoặc gửi các gói “raw packet”. Nếu tùy chọn này khơng được chỉ định cụ thể, tất cả kết nối sẽ được thực hiện trên địa chỉ loopback 127.0.0.1 (localhost).
o -k <file>: tải KB file từ file chỉ định
o -D: Chỉ chạy phần chỉ dẫn của plugin.
o -s: chỉ định script chạy ở chế độ kiểm tra an toàn. Tất cả các plugin được đánh dấu ACT_DESTRUCTIVE_ATTACK, ACT_KILL_HOST,
ACT_DENIAL, hoặc ACT_FLOOD sẽ không được thực thi.
- Tùy chọn khác:
o -h: Hiển thị trợ giúp.
o -v: Hiển thị tên phiên bản của trình thơng dịch nasl
2.2.2 Thử nghiệm script
Ví dụ một script đơn giản, thực hiện kết nối đến cổng FTP (21), đọc banner, sau đó hiển thị lên màn hình. Đoạn script sau thực hiện tác vụ trên:
soc = open_sock_tcp(21); if ( ! soc ) exit(0);
banner = recv_line(socket:soc, length:4096); display(banner);
Lưu script với tên “test.nasl” chẳng hạn, sau đó thực hiện từ dịng lệnh. Nếu trên Linux, nasl có đường dẫn đầy đủ là “/usr/local/bin/nasl”, cịn trên Windows, nó nằm trong thư mục “C:\Program Files\Tenable\Nessus\nasl.exe”:
** WARNING : packet forgery will not work ** as NASL is not running as root
220 ftp.nessus.org Ready
Để tránh bị lỗi, ta nên chạy nasl với quyền quản trị, trên Linux là root (hoặc tài khoản có quyền sudo), trên Windows là Administrator.
- Nhóm thử dùng đoạn script trên để lấy banner host FTP của trang https://tuyensinhvietnam.vn:
- Tìm địa chỉ host FTP của trang web: Ta có thể sử dụng cơng cụ như http://www.whoishostingthis.com
Hình 2-13: Địa chỉ host FTP của tuyensinhvietnam.vn
2.3 Giới thiệu chung về cơng cụ Nessus
2.3.1 Lịch sử hình thành
Vào năm 1998, danh sách các lỗ hổng vẫn chưa phát triển thành một cơ sở dữ liệu đầy đủ và việc nghiên cứu được thực hiện kín trên ngân sách eo hẹp. Các máy qt lỗ hổng thương mại thì có chi phí đắt đỏ. Còn máy quét lỗ hổng mã nguồn mở mới nhất, the Security Administrator Tool for Analyzing Networks(SATAN), thì khơng thể vượt qua được máy quét thương mại. Internet thì phát triển tăng vọt dẫn đến sự gia tăng các thử nghiệm để kiểm tra tính an tồn của nó. Từ đó, Renaud Deraison đã tạo ra dự án mã nguồn mở được gọi là Nessus. Đó là câu trả lời cho việc giá của máy quét thương mại ngày càng tăng và sự trì trệ của dự án SATAN. Ngay lập tức, cộng đồng sử dụng Nessus đã phát triển nhanh chóng.
Ngày 5 tháng 10 năm 2005, Tenable Network Security, một công ty do Renaud Deraison đồng sáng lập, thông báo rằng phiên bản tiếp theo của Nessus, Nessus 3, sẽ khơng cịn mã nguồn mở nữa. Cơ cấu( engine) của Nessus 3 thì vẫn miễn phí cho phép cộng đồng phát hành các bản cập nhật plugin nhưng chi phí cho dịch vụ và rà sốt lỗ hổng mới nhất thì được tính. Một vài nhà phát triển đã chia thành 2 hướng phát triển độc lập dựa trên Nessus như OpenVAS và Porz-Wahn. Nessus 2 vẫn được cập nhật khi Nessus 3 đã phát hành được một thời gian.
Nessus có thể chạy trên nhiều nền tảng hệ điều hành khác nhau, bao gồm cả UNIX, LINUX, Mac OS X, Windows. Nessus cho phép bạn quét từ xa để xác định mạng của mình có bị xâm nhập hay khơng và nó cũng cung cấp các tính năng để qt cục bộ trên một máy tính cụ thể.
Dowload phiên bản mới nhất về cài đặt tại: https://www.tenable.com/downloads/nessus
2.3.2 Giới thiệu về công cụ Nessus
Nessus là một công cụ quét lỗ hổng bảo mật độc quyền được phát triển bởi Công ty An ninh mạng Tenable, được phát hành miễn phí cho việc sử dụng phi thương mại.
Ban đầu Nessus là một dự án nguồn mở “Nessus Project” được đề xuất bởi Renaud Derasion vào năm 1998, mã nguồn của các thành phần được công bố cơng khai
Nessus cịn là một trong những sản phẩm được đánh giá cao trên tồn thế giới, với tính năng đa dạng, thống kê toàn diện về hệ thống đầy đủ, phát hiện những dữ liệu nhạy cảm và phân tích lỗ hổng, đáp ứng cao về nhu cầu bảo mật
Nessus có thể chạy trên nhiều nền tảng khác nhau như: UNIX, LINUX, Mac OS, Windows
Nessus cho phép:
- Lỗ hổng cho phép một hacker từ xa kiểm soát hoặc truy cập dữ liệu nhạy cảm trên hệ thống.
- Cấu hình sai (ví dụ như chuyển tiếp thư mở, các bản vá lỗi bị thiếu,...).
- Mật khẩu mặc định, một vài mật khẩu thường được sử dụng, và mật khẩu trống trên các tài khoản hệ thống. Nessus cũng có thể dùng Hydra (một cơng cụ bên thứ ba) để thực hiện một cuộc tấn công từ điển
- Tấn công từ chối dịch vụ bộ nhớ stack TCP/IP bằng gói tin độc hại
- Chuẩn bị cho việc kiểm tra bảo mật (PSI DSS).
2.4 Các tính năng của cơng cụ Nessus
- Quét các lỗ hổng bảo mật và đưa ra các biện pháp khắc phục trên hệ thống các nền tảng Windows, Linux, Mac.
- Kiểm tra các bản vá hệ điều hành Windows, Linux và các ứng dụng như trình duyệt web, phần mềm, …
- Đánh giá các lỗ hổng trên các loại thiết bị:
Điện thoại chạy nền tảng Android, IOS, Windows Phone. Các thiết bị mạng khác: switch, router, access points, máy in,…
- Hỗ trợ phân tích cả trên các thiết bị ảo hóa.
- Cho phép cấu hình tự động quét theo một lịch trình nhất định.
- Phát hiện các phần mềm độc hại chạy trên hệ thống.
- Quét các lỗ hổng ứng dụng web dựa trên OWASP.
- Audit file cấu hình thiết bị.
- Hỗ trợ Cloud: Audit cấu hình của các cloud public như: Amazon Web Services, Microsoft Azure and Rackspace.
2.5 Các thành phần và mơ hình của Nessus
2.5.1 Các thành phần của Nessus:
o Nessus Engine: nhận, thực thi và trả lời lại các câu yêu cầu quét của
người dùng. Việc quét các lỗ hổng được thực hiện theo các chỉ dẫn của các plugin
o Nessus Plugin: hệ thống file của ngôn ngữ kịch bản NASL, gồm các file
định nghĩa .inc và file kịch bản .nasl.
o Nessus Server: thực hiện các u cầu qt của người dùng, sau đó phân
tích, tổng hợp, trả lại kết quả cho Nessus client
o Nessus Client: hiện thị kết quả quét cho người dùng thơng qua trình
duyệt web
o Nessus Knowledge Base: “Cơ sở dữ liệu đã biết” của Nessus cho phép