1. Trang chủ
  2. » Công Nghệ Thông Tin

Tìm hiểu xây dựng Plugin cho Nessus sử dụng NASL

76 1K 4
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Tìm hiểu xây dựng Plugin cho Nessus sử dụng NASL
Trường học Đại học Bách Khoa Hà Nội
Chuyên ngành An ninh mạng và Phát triển phần mềm
Thể loại Luận văn tốt nghiệp
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 76
Dung lượng 3,63 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

MỤC LỤC TÓM TẮT NỘI DUNG ĐỀ TÀI . 6 LỜI MỞ ĐẦU . 7 CHƢƠNG 1. TỔNG QUAN VỀ NESSUS . .8 1.1 LỊCH SỬ HÌNH THÀNH VÀ PHÁT TRIỂN CỦA NESSUS . .8 1.2 CÁC THÀNH PHẦN CỦA NESSUS . .8 1.2.1 Kiến trúc của Nessus với mô hình Client-Server . 8 1.2.2 Mô hình Nessus Knowledge Base . .9 1.2.3 Mô hình Nessus Plugin . .10 CHƢƠNG 2. TÌM HIỂU VỀ NGÔN NGỮ NASL . .11 2.1 TỔNG QUAN VỀ NGÔN NGỮ NASL . .11 2.1.1 Lịch sử ngôn ngữ NASL . 11 2.1.2 Điểm khác biệt giữa NASL1 và NASL2 . .13 2.1.3 NASL2 ngôn ngữ thông dịch, tựa C . 14 2.2 CẤU TRÚC NGÔN NGỮ NASL2 . .15 2.2.1 Sơ bộ về quy tắc viết chương trình . .15 2.2.2 Cú pháp . .15 2.2.3 Kiểu dữ liệu . .20 2.2.4 Các toán tử . 20 2.2.4.1 Các toán tử thông thường . .20 2.2.4.2 Các phép toán số học . .21 2.2.4.3 Các toán tử tựa C . .21 2.2.4.4 Toán tử xử lý chuỗi . .21 2.2.4.5 Toán tử so sánh . .22 2.2.4.6 Toán tử lôgic . .22 2.2.4.7 Phép toán xử lý bit . .22 2.2.4.8 Các phép xử lý đặc biệt . .23 Tìm hiểu xây dựng Plugin cho Nessus sử dụng NASL Trang 1 2.2.5 Độ ưu tiên các phép toán . .23 2.2.6 Vòng lặp và các câu lệnh điều khiển . .24 2.2.7 Khai báo biến, hàm . .25 2.2.7.1 Khai báo biến . .25 2.2.7.2 Khai báo hàm . .25 2.2.7.3 Lấy đối số của hàm . .25 2.2.7.4 Gọi hàm . .26 2.3 THƢ VIỆN NASL2 . .27 2.3.1 Các hằng số được định nghĩa từ trước . 27 2.3.2 Các hàm tích hợp sẵn . .29 2.3.2.1 Các hàm cơ bản (Knowledge base functions) . .29 2.3.2.2 Các hàm báo cáo . .30 2.3.2.3 Các hàm chỉ dẫn . 31 2.3.2.4 Các hàm gắn kết . 33 2.3.2.5 Các hàm về mạng . .34 2.3.2.6 Các hàm xử lý chuỗi . .37 2.3.2.7 Các hàm HTTP . .40 2.3.2.8 Các hàm Raw IP . 41 2.3.2.9 Các hàm mật mã . 44 2.3.2.10 Các hàm không an toàn . 44 2.3.3 Các file thư viện NASL . .45 2.3.3.1 dump.inc . 47 2.3.3.2 ftp_func.inc . .47 2.3.3.3 http_func.inc . .47 2.3.3.4 http_keepalive.inc . 48 2.3.3.5 nfs_func.inc . .49 2.3.3.6 smb_nt.inc . 49 2.3.3.7 smtp_func.inc . .51 2.3.3.8 Các hàm thư viện khác . .51 2.4 XÂY DỰNG PLUGIN CHO NESSUS . .53 2.4.1 Thông dịch script tự xây dựng . 53 2.4.2 Thử nghiệm script . .54 Trang 2 KẾT LUẬN . .56 TÀI LIỆU THAM KHẢO . .57 PHỤ LỤC . .58 TÓM TẮT NỘI DUNG ĐỀ TÀI Đề tài thực hiện 2 nhiệm vụ chính: Tìm hiểu về hoạt động của Nessus: cách cài đặt, chạy Nessus. Tìm hiểu về các thành phần cơ bản của Nessus: Nessus Engine, Nessus Plugin, Nessus Knowledge Base. Tìm hiểu về ngôn ngữ script NASL của Nessus: cấu trúc ngôn ngữ, các hàm cơ bản của NASL, các file định nghĩa (.inc), các file script (.nasl), cách viết và thực thi script nasl. Tiến tới tự xây dựng một plugin mới để quét lỗ hổng. LỜI MỞ ĐẦU Trong quá trình bảo mật hệ thống mạng cho một công ty hay tổ chức việc sử dụng các công cụ mạnh để kiểm tra hay phát hiện các lỗi bảo mật nhằm nâng cao tính an toàn của hệ thống và toàn mạng là rất quan trọng. Trong đó Nessus và GFI LanGuard là hai trong số các chương trình rà soát lỗ hổng bảo mật mạng hàng đầu hiện nay. Nhưng GFI LanGuard là một phần mềm thương mại, trong khi đó Nessus lại là một phần mềm miễn phí hoàn toàn cho người dùng cá nhân, với cơ sở dữ liệu về các lỗ hổng có thể được rất phong phú cho cả hệ thống chạy Window hay Linux và được cập nhật thường xuyên. Theo thống kê của trang sectools.org, Nessus là phần mềm quét lỗ hổng bảo mật phổ biến nhất trong các năm 2000, 2003 và 2006. Hãng Tenable ước tính rằng nó được sử dụng rộng rãi bởi hơn 75000 tổ chức trên toàn thế giới. Việc dò tìm các lỗ hổng bảo mật đóng một vai trò rất quan trọng với các quản trị viên hệ thống, các chuyên gia bảo mật v.v nhằm tìm ra các biện pháp tăng cường bảo mật cho hệ thống, và cả những kẻ muốn tấn công thực sự. Tuy nhiên việc tìm thêm các lỗ hổng mới tương đối khó khăn, một phần do các lỗ hổng cũ sau khi công bố một thời gian, các nhà sản xuất sẽ tìm cách “vá” lại những lổ hổng đó, một phần do những người tìm ra những lỗ hổng mới đó không muốn công khai rộng rãi. Việc dò quét các lỗ hổng của Nessus được thực hiện dựa trên hai thành phần chính là Nessus Engine và Nessus Plugin. Nessus Engine đóng vai trò như một trình biên dịch để thực hiện các câu lệnh của Nessus Plugin. Công cụ để xây dựng các plugin đó chính là ngôn ngữ kịch bản NASL (Nessus Attrack Scripting Language). Nội dung của báo cáo được chia làm 2 phần: Chương 1: Tìm hiểu về các thành phần, cách cài đặt và sử dụng Nessus. Chương 2: Tìm hiểu ngôn ngữ NASL, tiến tới tự xây dựng plugin cho Nessus. Do thời gian tìm hiểu ngắn và kiến thức còn hạn chế, nên một số nội dung như Nessus Engine, nhóm sẽ không đi sâu vào nghiên cứu.

Trang 1

MỤC LỤC

TÓM TẮT NỘI DUNG ĐỀ TÀI 6

LỜI MỞ ĐẦU 7

CHƯƠNG 1 TỔNG QUAN VỀ NESSUS 8

1.1 LỊCH SỬ HÌNH THÀNH VÀ PHÁT TRIỂN CỦA NESSUS 8

1.2 CÁC THÀNH PHẦN CỦA NESSUS 8

1.2.1 Kiến trúc của Nessus với mô hình Client-Server 8

1.2.2 Mô hình Nessus Knowledge Base 9

1.2.3 Mô hình Nessus Plugin 10

CHƯƠNG 2 TÌM HIỂU VỀ NGÔN NGỮ NASL 11

2.1 TỔNG QUAN VỀ NGÔN NGỮ NASL 11

2.1.1 Lịch sử ngôn ngữ NASL 11

2.1.2 Điểm khác biệt giữa NASL1 và NASL2 13

2.1.3 NASL2 ngôn ngữ thông dịch, tựa C 14

2.2 CẤU TRÚC NGÔN NGỮ NASL2 15

2.2.1 Sơ bộ về quy tắc viết chương trình 15

2.2.2 Cú pháp 15

2.2.3 Kiểu dữ liệu 20

2.2.4 Các toán tử 20

2.2.4.1 Các toán tử thông thường 20

2.2.4.2 Các phép toán số học 21

2.2.4.3 Các toán tử tựa C 21

2.2.4.4 Toán tử xử lý chuỗi 21

2.2.4.5 Toán tử so sánh 22

2.2.4.6 Toán tử lôgic 22

2.2.4.7 Phép toán xử lý bit 22

2.2.4.8 Các phép xử lý đặc biệt 23

Trang 2

2.2.5 Độ ưu tiên các phép toán 23

2.2.6 Vòng lặp và các câu lệnh điều khiển 24

2.2.7 Khai báo biến, hàm 25

2.2.7.1 Khai báo biến 25

2.2.7.2 Khai báo hàm 25

2.2.7.3 Lấy đối số của hàm 25

2.2.7.4 Gọi hàm 26

2.3 THƢ VIỆN NASL2 27

2.3.1 Các hằng số được định nghĩa từ trước 27

2.3.2 Các hàm tích hợp sẵn 29

2.3.2.1 Các hàm cơ bản (Knowledge base functions) 29

2.3.2.2 Các hàm báo cáo 30

2.3.2.3 Các hàm chỉ dẫn 31

2.3.2.4 Các hàm gắn kết 33

2.3.2.5 Các hàm về mạng 34

2.3.2.6 Các hàm xử lý chuỗi 37

2.3.2.7 Các hàm HTTP 40

2.3.2.8 Các hàm Raw IP 41

2.3.2.9 Các hàm mật mã 44

2.3.2.10 Các hàm không an toàn 44

2.3.3 Các file thư viện NASL 45

2.3.3.1 dump.inc 47

2.3.3.2 ftp_func.inc 47

2.3.3.3 http_func.inc 47

2.3.3.4 http_keepalive.inc 48

2.3.3.5 nfs_func.inc 49

2.3.3.6 smb_nt.inc 49

2.3.3.7 smtp_func.inc 51

2.3.3.8 Các hàm thư viện khác 51

2.4 XÂY DỰNG PLUGIN CHO NESSUS 53

2.4.1 Thông dịch script tự xây dựng 53

2.4.2 Thử nghiệm script 54

Trang 3

KẾT LUẬN 56 TÀI LIỆU THAM KHẢO 57 PHỤ LỤC 58

Trang 4

DANH MỤC CÁC BẢNG

Bảng 2.1 Độ ưu tiên của các phép toán .23Bảng 2.2 Một số hàm thư viện của Nessus .51

Trang 5

DANH MỤC CÁC HÌNH

Hình 1.1 Mô hình kiến trúc Nessus dạng Client-Server 9

Hình 1.2 Mô hình hoạt động của Nessus Plugin .10

Hình 2.1 Địa chỉ host FTP của kmasecurity.net 55

Hình 2.2 Kết quả banner trả về của host FTP kmasecurity.net 55

Trang 6

TÓM TẮT NỘI DUNG ĐỀ TÀI

Đề tài thực hiện 2 nhiệm vụ chính:

Tìm hiểu về hoạt động của Nessus: cách cài đặt, chạy Nessus Tìm hiểu về

các thành phần cơ bản của Nessus: Nessus Engine, Nessus Plugin, Nessus

Knowledge Base

Tìm hiểu về ngôn ngữ script NASL của Nessus: cấu trúc ngôn ngữ, các hàm

cơ bản của NASL, các file định nghĩa (.inc), các file script (.nasl), cách viết

và thực thi script nasl Tiến tới tự xây dựng một plugin mới để quét lỗ hổng

Trang 7

LỜI MỞ ĐẦU

Trong quá trình bảo mật hệ thống mạng cho một công ty hay tổ chức việc sử dụng các công cụ mạnh để kiểm tra hay phát hiện các lỗi bảo mật nhằm nâng cao tính an toàn của hệ thống và toàn mạng là rất quan trọng Trong đó Nessus và GFI LanGuard là hai trong số các chương trình rà soát lỗ hổng bảo mật mạng hàng đầu hiện nay Nhưng GFI LanGuard là một phần mềm thương mại, trong khi đó Nessus lại là một phần mềm miễn phí hoàn toàn cho người dùng cá nhân, với cơ sở dữ liệu

về các lỗ hổng có thể được rất phong phú cho cả hệ thống chạy Window hay Linux

và được cập nhật thường xuyên Theo thống kê của trang sectools.org, Nessus là phần mềm quét lỗ hổng bảo mật phổ biến nhất trong các năm 2000, 2003 và 2006 Hãng Tenable ước tính rằng nó được sử dụng rộng rãi bởi hơn 75000 tổ chức trên toàn thế giới

Việc dò tìm các lỗ hổng bảo mật đóng một vai trò rất quan trọng với các quản trị viên hệ thống, các chuyên gia bảo mật v.v… nhằm tìm ra các biện pháp tăng cường bảo mật cho hệ thống, và cả những kẻ muốn tấn công thực sự Tuy nhiên việc tìm thêm các lỗ hổng mới tương đối khó khăn, một phần do các lỗ hổng cũ sau khi công bố một thời gian, các nhà sản xuất sẽ tìm cách “vá” lại những lổ hổng đó, một phần do những người tìm ra những lỗ hổng mới đó không muốn công khai rộng rãi Việc dò quét các lỗ hổng của Nessus được thực hiện dựa trên hai thành phần chính là Nessus Engine và Nessus Plugin Nessus Engine đóng vai trò như một trình biên dịch để thực hiện các câu lệnh của Nessus Plugin Công cụ để xây dựng các plugin đó chính là ngôn ngữ kịch bản NASL (Nessus Attrack Scripting Language)

Nội dung của báo cáo được chia làm 2 phần:

Chương 1: Tìm hiểu về các thành phần, cách cài đặt và sử dụng Nessus Chương 2: Tìm hiểu ngôn ngữ NASL, tiến tới tự xây dựng plugin cho Nessus

Do thời gian tìm hiểu ngắn và kiến thức còn hạn chế, nên một số nội dung như Nessus Engine, nhóm sẽ không đi sâu vào nghiên cứu

Trang 8

CHƯƠNG 1 TỔNG QUAN VỀ NESSUS

1.1 LỊCH SỬ HÌNH THÀNH VÀ PHÁT TRIỂN CỦA NESSUS

Ban đầu, Nessus là một dựa án nguồn mở “Nessus Project”, được đề xuất bởi Renaud Deraison vào năm 1998, mã nguồn của các thành phần đều được công bố công khai (các phiên bản Nessus 2 trở về trước) Từ tháng 10 năm 2005, Tenable Network Security, một công ty do Renaud Deraison đồng sáng lập, đã phát hành Nessus 3 dưới dạng mã nguồn đóng Tháng 8 năm 2008, hãng Tenable đưa ra phiên bản cho phép người dùng cá nhân được sử dụng đầy đủ các plugin Tháng 4 năm 2009, hãng phát hành Nessus 4.0.0, đến tháng 2 năm 2012 phát hành Nessus 5.0

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 Hiện tại phiên bản Nessus 5.0 chạy trên giao diện web, do đó có thể dễ dàng truy cập, sử dụng trên mọi hệ điều hành

1.2 CÁC THÀNH PHẦN CỦA NESSUS

Nessus có các thành phần chính:

- Nessus Engine: nhận, thực thi và trả lời lại các 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 (một tập các câu lệnh script của ngôn ngữ kịch bản NASL)

- 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

- Nessus Server (nessusd): thực hiện nhận các yêu cầu quét của người dùng, sau đó phân tích, tổng hợp, trả lại kết quả cho Nessus client

- Nessus Client: hiển thị kết quả quét lại cho người dùng thông qua trình

duyệt web

- Nessus Knowledge Base: “Cơ sở dữ liệu đã biết” của Nessus cho phép các

plugin sau tận dụng dữ liệu kết quả của Plugin trước đó Điều này giúp

Nessus dễ dàng mở rộng và tăng tốc độ thực thi

1.2.1 Kiến trúc của Nessus với mô hình Client-Server

Ban đầu, Server sẽ tổng hợp tất cả các lỗi bảo mật hiện nay Khi một máy tính Client yều cầu được kiểm tra các lỗi có tồn tại trên máy tính của mình hay không,

Trang 9

đầu tiên chúng phải được kiểm tra xem có kết nối tới server hay không, sau khi đã kiểm tra kết nối chúng sẽ được quét tùy thuộc vào các mức độ yêu cầu khi quét

Mô hình này sẽ dựa vào kết quả sau khi máy Client yêu cầu kiểm tra, và dựa vào những lỗi đã được xác định có thể đưa ra những những hướng giải quyết một cách nhanh nhất

Database

Nessus Server Firewall

Internet

Clents User và thiết bị yêu cầu kiểm tra

Hình 1.1 Mô hình kiến trúc Nessus dạng Client-Server

1.2.2 Mô hình Nessus Knowledge Base

Mô hình Nessus Knowledge Base là gì?

- Mô hình này khá đơn giản nó thu thập danh sách các lỗi bảo mật khác đang được thử nghiệm Nó cho phép bổ sung, hoặc chia sẻ những thông tin về hệ thống đang được kiểm tra

Phương thức hoạt động của Nessus Knowledge Base:

Giả sử chúng ta thực hiện quét kiểm tra lỗi bảo mật trên trang Server at5akma.com, quá trình kiểm tra hoàn tất và không thấy một lỗi bảo mật nào có trên đó Lúc này Nessus Knowledge Base được tạo ra cho máy chủ này (/usr/local/var/nessus/users/mh/ kbs/at5a.com) cho thấy khoảng 1800 lỗi, Người ta phải nhớ rằng Nessus Knowledge Base cũng chỉ có khoảng 1725 lỗi đã được trusted Và những thông số đó được sử dụng cho những nghiên cứu sau này để đảm bảo rằng liên tục cập nhật những lỗi bảo mật mới nhất

Trang 10

1.2.3 Mô hình Nessus Plugin

Nessus Plugin là gì?

- Là một chương trình dùng để kiểm tra tính bảo mật của một trang web từ xa, máy tính cục bộ hay những thiết bị bảo vệ thông tin

Hoạt động của Nessus Plugin:

Mô hình hoạt động của Nessus Plugin khá đơn giản, ta có thể dùng gia diện hoặc dùng command line để quét Bằng việc sử dụng Plugin đã có sẵn sau khi cài

để kiểm tra tính bảo mật

requestresult

requestresult

Kiểm qua 1 trang web qua mạng

Nessus Plugin

Web Server

Hình 1.2 Mô hình hoạt động của Nessus Plugin

Trang 11

CHƯƠNG 2 TÌM HIỂU VỀ NGÔN NGỮ NASL

2.1 TỔNG QUAN VỀ NGÔN NGỮ NASL

2.1.1 Lịch sử ngôn ngữ NASL

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 modul 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 toà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 quá 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 quá trình quét đề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 tại

Trang 12

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

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

Trang 13

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 cho cá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)

Trang 14

NASL2 có nhiều toá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 toá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

Ví dụ nội dung của một file script test-yahoo.nasl:

# This script was written by Noam Rathaus <noamr@securiteam.com> #

script_copyright(english:"This script is Copyright (C) 1999 SecuriTeam");

family["english"] = "Denial of Service";

Trang 15

2.2 CẤU TRÚC NGÔN NGỮ NASL2

2.2.1 Sơ bộ 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

- 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 ++;

Trang 16

[if_block]if ( expr ) instr

if ( expr ) instr else instr

[loop]for_loop

while_loop

repeat_loop

foreach_loop

[for_loop]for ( aff_func ; expr ; aff_func ) instr

[while_loop]while ( expr ) instr

Trang 17

[repeat_loop]repeat instr until expr ;

[foreach_loop]foreach identifier ( array ) instr

Trang 19

[INTEGER] số nguyên - là một chuối số thập phân, hoặc bắt đầu bằng 0 cho hệ

cơ số 8, hoặc 0x cho hệ cơ số 16

[IDENTIFIER] định danh - là một chuỗi ký tự (chữ hoa, chữ thường, số, dấu

gạch dưới)

[STRING1] là một chuỗi ký tự giữa 2 dấu nháy đơn

[STRING2] là một chuỗi ký tự giữa 2 dấu nháy kép

Trang 20

2.2.3 Kiểu dữ liệu

NASL2 có các kiểu dữ liệu sau:

1 Kiểu số nguyên: mọi chuỗi bao gồm các chữ số, có thể có thêm dấu ở đầu (+,-) để phân biệt số dương, số âm NASL2 sử dụng cú pháp của C, hệ cơ số

b) Chuỗi có thể chuyển đổi: là chuỗi được nhập vào giữa 2 dấu nháy đơn, ví dụ „abcd\n‟, khi đó một vài ký tự của chuỗi sẽ được tự động chuyển đổi

3 Mảng: Hỗ trợ mảng một chiều, phần tử đầu tiên được đánh thứ tự là [0], có thể dùng mảng để chứa dữ liệu kiểu số nguyên hoặc kiểu chuỗi

4 Kiểu NULL: được gán cho các biến chưa khởi tạo giá trị

5 Kiểu Boolean (kiểu lôgic): cho giá trị 0 – FALSE, 1- TRUE Một vài giá trị được tự động gán:

Giá trị không được định nghĩa hoặc Null là FALSE

Số nguyên là TRUE nếu không rỗng, 0 là FALSE

Chuỗi là TRUE nếu không rỗng và khác “0”

Mảng luôn mang giá trị TRUE, cho dù có rỗng hay không

Trang 21

- Một biến không thể vừa mang giá trị kiểu “nguyên tử” (như integer, string, null) vừa mang giá trị kiểu mảng ở cùng một thời điểm Nếu ta chuyển đổi kiểu, giá trị trước đó sẽ bị mất

- Có thể dùng để tách giá trị của một chuỗi Ví dụ:

s = “abcde” , khi đó s[2] = “c”

- y[1]=42; tạo một mảng y, và gán giá trị 42 cho phần tử thứ hai của mảng Nếu y không phải là một mảng, đó là giá trị đàu tiên không được định nghĩa

2.2.4.2 Các phép toán số học

NASL2 không có quy định chặt chẽ về kiểu số nguyên Trình thông dịch cài đặt với kiểu “int” nguyên mẫu của C, là kiểu 32 bit trên hầu hết các hệ thống, hoặc 64 bit trên một số hệ thống khác Không có cơ chế bảo vệ chống tràn số

NASL2 cài đặt một số phép toán giống C

++ phép tăng giá trị biến lên 1 đơn vị, ví dụ: (++x) hoặc (x++) Ý nghĩa

tương tự như trong C

- giảm giá trị biến đi 1 đơn vị, ví dụ: (-x) hoặc (x-) Trong C phép toán này

Trang 22

- phép trừ chuỗi, nó loại bỏ các chuỗi đầu tiên mà nó tìm thấy trong chuỗi

cần trừ Ví dụ: ‘abcd’ – ‘bc’ sẽ được ‘ad’

[] dùng tách ký tự từ chuỗi Ví dụ s = ‘abcde’, khi đó s[2] = ‘c’

>< so sánh chuỗi trùng khớp, nếu một trong 2 chuỗi có chứa chuỗi còn lại sẽ cho kết quả là TRUE, ngược lại là FALSE

„abcde‟ >< „bc‟ là TRUE, „abcde‟ >< „xxxx‟ là FALSE

>!< so sánh chuỗi không trùng khớp, nó sẽ trả về kết quả TRUE nếu chuỗi này không chứa chuỗi kia, ngược lại là FALSE

„abcde‟ >!< „xxxx‟ là TRUE, „abcde‟ >!< „bc‟ là FALSE

=~ (regex match) tương tự như khi gọi hàm trong ereg nhưng nhanh hơn, bởi

vì kiểu diễn đạt thông thường được biên dịch một lần khi script được phân

! phép “not” lôgic Ví dụ: !x=TRUE, nếu x=FALSE

&& phép “and” lôgic

Trang 23

Nếu các đối số khác kiểu, phép + sẽ tiến hành chuyển đổi kiểu tự động

- Với chuỗi có thể chuyển đổi:

“AB\n” + „de‟ sẽ được „AB\\nde‟ (trong đó “AB\n” là chuỗi không chuyển đổi, „de‟ là chuỗi có thể chuyển đổi)

- Nếu một trong 2 đối số là kiểu chuỗi không chuyển đổi, đối số còn lại

sẽ được tự động chuyển thành kiểu chuỗi không chuyển đổi:

“ABC” + 2 sẽ được “ABC2”

- Nếu một trong các đối số là kiểu nguyên, đối số còn lại sẽ được

chuyển sang kiểu nguyên, kết quả cuối cùng là kiểu nguyên

- Trong các trường hợp khác, giá trị NULL được trả về

Phép trừ có cùng kiểu chuyển đổi như đối với phép cộng

Không nên sử dụng các biến chưa được khởi tạo Tuy nhiên để các script cũ

có thể hoạt động, giá trị NULL được định nghĩa thành 0 hoặc “” (kiểu

integer hoặc chuỗi) Đó là lý do tại sao ta nên sử dụng isnull để kiểm tra

xem biến đã được định nghĩa và khởi tạo hay chưa

2.2.5 Độ ƣu tiên các phép toán

Độ ưu tiên từ cao xuống thấp:

Bảng 2.1 Độ ưu tiên của các phép toán

Trang 24

5 * / % Trái qua phải

7 << >> >>> Trái qua phải

11 < <= > >= == != <> =~ !~

>!< ><

Không

14 = += -= *= /= %= <<= >>=

>>>=

Phải qua trái

2.2.6 Vòng lặp và các câu lệnh điều khiển

for (expr1; cond; expr2) block;tương tự như trong C, tương đương với expr1; while(condition) block; expr2;

Ví dụ in các giá trị từ 1 đến 10:

for(i=1;i<=10;i++) display(i,'{\n');

foreach var (array) block;lặp với tất cả các phần tử trong mảng Chú ý biến vòng lặp var có giá trị được lưu trữ trong mảng, không phải chỉ số của mảng Nếu ta muốn dùng chỉ số, dùng lệnh: foreach var (keys(array)) block;

while(cond) block; thực hiện khối lệnh khi điều kiện kiểm tra là TRUE, dừng việc thực hiện nếu điều kiện kiểm tra là FALSE

repeat block; until (cond); thực hiện khối lệnh cho đến khi điều kiện kiểm tra là TRUE Khối lệnh được thực hiện ít nhất một lần (khác với while,

có thể khối lệnh chưa được thực hiện lần nào)

break dùng để thoát khỏi vòng lặp hiện tại, nếu ta không ở trong vòng lặp, kết quả là không xác định

continue bỏ qua điều kiện kiểm tra, nhảy đến vòng lặp tiếp theo Nếu không ở trong vòng lặp, kết quả là không xác định

return trả về kết quả của hàm hiện tại

Trang 25

2.2.7 Khai báo biến, hàm

2.2.7.1 Khai báo biến

NASL1 chỉ có biến toàn cục NASL2 sử dụng biến toàn cục và biến cục bộ Biến cục bộ được tạo bên trong hàm, và được giải phóng khi hàm trả về kết quả Khi trình thông dịch kiểm tra biến nào đó, nó sẽ kiểm tra trong hàm hiện tại trước, sau

đó kiểm tra các hàm bao trùm bên ngoài khác, cho tới khi đến hàm chứa biến toàn cục

Thông thường ta không cần phải khai báo biến: hoặc là do nó đã tồn tại, hoặc ta đã sử dụng nó trong hàm hiện tại, hoặc nó đang được gọi bởi một hàm khác Tuy nhiên, điều này trở nên nguy hiểm trong một vài trường hợp:

Nếu bạn muốn thay đổi tới biến cục bộ từ bên trong một hàm mà không thể chắc chắn biến được tạo ở hàm ngoài cùng, hoặc được tạo như biến cục bộ trong hàm gọi đến

Nếu bạn muốn chắc chắc rằng mình đang tạo một biến cục bộ mà không ghi

đè lên biến toàn cục trùng tên

Để thực hiện, ta có thể khai báo biến như sau:

function_name (argname1, argname2) block;

Chú ý danh sách đối số có thể trống, nhưng phải có tên hàm Các đối số có thể dùng trực tiếp mà không cần phải khai báo

2.2.7.3 Lấy đối số của hàm

Trong một hàm NASL, các đối số được định tên, có thể truy cập bởi mọi biến cục

bộ Các đối số không được định tên, được cài đặt thông qua mảng đặc biệt _FCT_ANON_ARGS Những biến này sẽ mang giá trị NULL với các trình thông

Trang 26

dịch dưới NASL_LEVEL 2190 Ta nên khai báo ở đầu script nếu cần dùng hàm này:

if (NASL_LEVEL < 2190) exit(0); # _FCT_ANON_ARGS is not implemented

1 Thiết lập tới giá trị _FCT_ANON_ARGS chưa được định nghĩa Lúc này,

bộ nhớ bị lãng phí, mà không thể đọc lại giá trị

2 Sử dụng _FCT_ANON_ARGS để đọc các đối số được định tên cũng không tốt Lúc này, có sự bảo vệ, giá trị NULL được trả lại

2.2.7.4 Gọi hàm

Sau đây là ví dụ về hàm có đối số được định tên:

function fact(x) # x đóng vai trò làm đối số

Ví dụ về hàm có đối số không được định tên:

function fact() #hàm không có đối số

Trang 27

Hằng thực ra là các biến, ta có thể chỉnh sửa lại giá trị trong script Sau đây là một

số hằng được định nghĩa trước:

o ACT_SCANNER: plugin này làm nhiệm vụ quét cổng hoặc một vài

tác vụ tương tự (như ping)

o ACT_SETTINGS: giống ACT_INIT nhưng chạy sau khi bộ quét

thực hiện, khi chúng ta chắc chắn rằng máy host vẫn đang hoạt động

o ACT_GATHER_INFO: plugin định danh dịch vụ, thu thập dữ liệu,

xử lý banner, v.v…

o ACT_ATTACK: plugin khởi động phần mềm tấn công, ví dụ phần

mềm quét các thư mục web

o ACT_MIXED_ATTACK: plugin khởi động tấn công mà có thể gây

ra các tác dụng nguy hiểm khác (gây ra hỏng hầu hết các dịch vụ thời gian)

Trang 28

o ACT_DESTRUCTIVE_ATTACK: plugin cố gắng tiêu hủy dữ liệu

hoặc khởi động tấn công nguy hiểm (ví dụ việc kiểm tra lỗi tràn bộ đệm có thể gây ra hỏng hóc với các dịch vụ dễ bị tổn thương)

o ACT_DENIAL: plugin cố gắng gây ra hỏng hóc dịch vụ

o ACT_KILL_HOST: plugin cố gắng gây ra hỏng hóc cho máy đích,

hoặc vô hiệu một vài dịch vụ quan trọng

o ACT_FLOOD: plugin cố gắng gây ra hỏng hóc cho máy đích, hoặc

vô hiệu hóa bằng cách gây ngập lụt với các gói tin hoặc request không xác định Nó có thể ảnh hưởng tới mạng, gây hỏng hóc cho thiết bị định tuyến, chuyển mạch hoặc lọc gói trên đường đi

Hằng Network

o Nessus “encapsulation” (đóng gói)

 ENCAPS_IP = 1; đây là giá trị “transport” cho TCP socket

 ENCAPS_SSLv23 = 2; đây là giá trị “transport” cho kết nối SSL trong chế độ tương thích Chú ý plugin find_service sẽ

không bao giờ khai báo cổng với loại đóng gói này, tuy nhiên ta vẫn có thể dùng nó trong script

 ENCAPS_SSLv2 = 3; phiên bản SSL cũ chỉ hỗ trợ chứng chỉ

phía máy chủ

 ENCAPS_SSLv3 = 4; phiên bản SSL mới, hỗ trợ chứng chỉ

phía máy chủ và máy client, hỗ trợ nhiều phương pháp mã hóa

 ENCAPS_TLSv1 = 5; TLSv1 được định nghĩa trong RFC

2246, đôi khi người ta gọi nó là “SSL v3.1”

Trang 29

 TH_ACK = 0x10; Cờ TCP xác định gói tin hợp lệ

 TH_FIN = 0x01; Cờ TCP xác định gói tin báo kết thúc phiên

kết nối

 TH_PUSH = 0x08

 TH_RST = 0x04; Cờ TCP xác định kết nối bị từ chối hoặc

reset lại

 TH_SYN = 0x02; Khởi tạo quá trình bắt tay 3 bước

 TH_URG = 0x20; Cờ TCP xác định gói tin chứa dữ liệu quan

trọng

Các hằng khác

o NULL giá trị không được định nghĩa

Nessusd glue

o Description được thiết lập thành 1 khi nessusd phân tích script lần

đầu (lấy tên, chỉ dẫn, tóm tắt, v.v…), thành 0 khi nó chạy

o COMMAND_LINE được thiết lập thành 0 khi script được chạy bởi

nessusd hoặc thành 1 khi nó chạy bởi trình thông dịch nasl

2.3.2 Các hàm tích hợp sẵn

Các hàm được tích hợp sẵn bao gồm hàm có đối số và hàm không có đối số Một vài hàm kết hợp cả hai

2.3.2.1 Các hàm cơ bản (Knowledge base functions)

Các hàm này được dùng cho các plugin tương tác

set_kb_item tạo danh mục mới trong KB (Knowledge base)

Nó nhận 2 chuỗi đối số: tên và giá trị

Thực hiện khoản mục vài lần tạo ra một danh sách

get_kb_item nhận khoản mục từ KB

Nó nhận đối số không được định tên (tên của khoản mục KB)

Nếu khoản mục là một danh sách, plugin sẽ chia nhỏ cho các tiến trình con,

và sử dụng giá trị khác Nessus sẽ ghi nhớ tiến trình con nhận giá trị nào: đọc một khoản mục trùng tên, nó sẽ không chia nhỏ lần nữa

Ta không nên sử dụng hàm này khi có vài kết nối đang mở, tránh diễn ra tình trạng có nhiều tiến trình cùng cố gắng đọc ghi vào cùng một socket

Trang 30

get_kb_list nhận nhiều khoản mục từ KB Nó nhận đối số không được định

danh, có thể tên danh mục KB hoặc mặt nạ Giá trị trả về là một kết quả tóm lược, ví dụ một mảng với khả năng có 2 chỉ số, vì vậy ta cần chuyển đổi nó với make_list() hoặc sử dụng foreach để truy cập mỗi phần tử (hàm make_array cho phép tạo ra những bảng băm như vậy)

Nó nhận 2 đối số được định danh: tên và giá trị

Thực hiện khoản mục một vài lần không tạo ra danh sách, nó chỉ ghi đè giá trị cũ

Hàm này không được định nghĩa lại trong mọi phiên bản của Nessus, để an toàn ta cần kiểm tra giá trị đã được định nghĩa trước đó bằng cách gọi đến

hàm này hoặc sử dụng hàm replace_or_set_kb_item của NASL

2.3.2.2 Các hàm báo cáo

Những hàm này gửi lại thông tin cho Nessus deamon

scanner_status báo cáo quá trình quét cổng (nếu plugin là plugin quét

cổng) Nó nhận 2 đối số nguyên:

o current, số cổng đang quét

o total, tổng số cổng cần quét

security_note gửi kết quả các thông tin khác

Nó nhận đối số là một số nguyên (số hiệu cổng), hoặc vài đối số được định danh khác:

o data là dữ liệu báo cáo dạng text

o port là số hiệu cổng TCP hoặc UDP của dịch vụ

Trang 31

o proto (hoặc protocol) tên giao thức (mặc định là “tcp”, giá trị khác là

“udp”)

security_hole báo cáo về các lỗ hổng nghiêm trọng

Nó có thể nhận một đối số không được định danh là một số nguyên (số hiệu cổng), hoặc một vài đối số được định danh khác:

o data là dữ liệu báo cáo dạng text

o port là số hiệu cổng TCP hoặc UDP của dịch vụ

o proto (hoặc protocol) tên giao thức (mặc định là “tcp”, giá trị khác là

“udp”)

security_warning báo cáo về các lỗ hổng nhẹ

o Nó có thể nhận một đối số không được định danh là một số nguyên (số hiệu cổng), hoặc một vài đối số được định danh khác:

o data là dữ liệu báo cáo dạng text

o port là số hiệu cổng TCP hoặc UDP của dịch vụ

o proto (hoặc protocol) tên giao thức (mặc định là “tcp”, giá trị khác là

o name là tên tùy chọn

o type kiểu tùy chọn, có thể là:

 checkbox

 entry

 password

 radio

o value là giá trị mặc định (yes hoặc no cho hộp chọn checkbox, chuỗi

ký tự cho khoản mục hoặc mật khẩu) Ví dụ:

Trang 32

script_add_preference (name:"Reverse traversal", type:"radio", value:"none; Basic;

Long URL");

script_bugtraq_id nó nhận một hoặc nhiều đối số nguyên không được định

danh

script_category thiết lập loại plugin

Thông thường nó nhận đối số nguyên không được định danh là một trong các hằng được định nghĩa trước (ACT_xxx):

script_cve_id thiết lập CVE IDs cho các lỗ hổng kiểm tra bởi script

Nó có thể nhận bất kỳ đối số là số hoặc chuỗi không định danh Nó thường

có dạng như “CVE-2002-042” hoặc “CAN-2003-666”

script_dependencie thiết lập danh sách script cần chạy trước khi chạy script

này Nó có thể nhận bất kỳ đối số là số hoặc chuỗi không định danh

script_dependencies có ý nghĩa giống như script_dependencie

script_description thiết lập chỉ dẫn của plugin

Nó nhận chuỗi bất kỳ làm đối số, hoặc một trong các chuỗi được xác định trước: english, francais, deutsch, portuguese Giá trị mặc định là english

script_exclude_keys thiết lập danh sách “KB item” không được chạy ở

script này trong chế độ tối ưu hóa

script_family thiết lập các plugin cùng họ

Trang 33

script_get_preference đọc các tùy chọn Nó nhận chuỗi bất kỳ làm đối số

Nó có thể trả về kết quả là chuỗi rỗng, nếu ta chỉ chạy script với trình thông dịch nasl

script_get_preference_file_content đọc các tùy chọn về file Nó nhận

chuỗi bất kỳ làm đối số, kết quả trả về là nội dung file đã được chuyển từ máy trạm Nessus tới máy chủ

script_id thiết lập số nguyên để định danh script

script_name thiết lập tên của plugin

script_require_keys thiết lập danh sách trong “KB item” cần phải chạy khi

chạy script này ở chế độ tối ưu

script_require_ports thiết lập danh sách các cổng TCP cần mở khi chạy

script này ở chế độ tối ưu

script_require_udp_ports thiết lập danh sách cổng UDP cần mở khi chạy

script này ở chế độ tối ưu

script_summary thiết lập chỉ dẫn tóm tắt của plugin

script_timeout thiết lập thời gian thoát của plugin Nó nhận số nguyên bất

kỳ làm đối số Nếu giá trị này được thiết lập thành 0 hoặc -1, thời gian

timeout bằng vô cùng

script_version thiết lập phiên bản của plugin Nó nhận chuỗi bất kỳ làm đối

số

2.3.2.4 Các hàm gắn kết

get_preference nhận chuỗi bất kỳ làm đối số, và trả lại giá trị được ưu tiên

Hàm này cần thiết khi cần nhận vài tùy chọn từ server Ví dụ:

p = get_preference('port_range'); # returns something like 1-65535

Trang 34

2.3.2.5 Các hàm về mạng

Chú ý kiểu dữ liệu socket được sử dụng trong các hàm này thực ra là số nguyên Trong trường hợp có lỗi, tất cả các hàm trả về một giá trị có thể thông dịch là FALSE

close đóng socket

end_denial không cần đối số, trả về TRUE nếu máy host vẫn đang hoạt động (alive), FALSE nếu nó chết Ta cần gọi hàm start_denial trước khi

kiểm tra

ftp_get_pasv_port gửi câu lệnh “PASV” tới socket đang mở Phân tích dữ

liệu nhận được, trả lại số hiệu cổng thụ động đã chọn Nó nhận một đối số định danh: socket

get_host_name không cần đối số, trả lại tên máy host đang quét

get_host_ip không cần đối số, trả lại địa chỉ IP máy đích

get_host_open_port không cần đối số, trả lại tên số hiệu các cổng TCP

đang mở trên máy đích

get_port_transport nhận số nguyên bất kỳ (socket) làm đối số, trả lại giá trị

đóng gói (encapsulation)

get_port_state nhận số nguyên bất kỳ (số hiệu cổng TCP), trả lại TRUE nếu

cổng đó đang mở, FALSE ngược lại

Một vài cổng TCP sẽ không biết được trạng thái, do không thể quét được Cách ứng xử của hàm này có thể chỉnh sửa lại, coi các cổng không quét được như đã đóng, với tùy chọn toàn cục Khi tùy chọn này được thiết lập lại (default), hàm sẽ trả về giá trị TRUE với các cổng không biết trạng thái, FALSE khi ta đặt thiết lập như trên

get_source_port nhận số nguyên bất kỳ làm đối số (TCP socket), trả lại số

hiệu cổng nguồn (ví dụ cổng server Nessus)

get_tcp_port_state tương tự như get_port_state

get_udp_port_state trả lại giá trị TRUE nếu cổng UDP đang mở, FALSE

ngược lại Chú ý việc quét cổng UDP có thể không đáng tin cậy

islocalhost không cần đối số, trả lại TRUE nếu máy đích là chính máy local,

ngược lại FALSE

Trang 35

islocalnet không cần đối số, trả lại TRUE nếu máy đích cùng mạng với máy

local, ngược lại FALSE

join_multicast_group nhận chuỗi làm đối số (địa chỉ IP multicast), trả lại

TRUE nếu có thể tham gia vào cùng nhóm địa chỉ multicast, nếu đã ở sẵn trong nhóm, hàm tăng biến đếm số lần tham gia

leave_multicast_group nhận chuỗi làm đối số (địa chỉ IP multicast) Nếu

hàm join_multicast_group được gọi vài lần, mỗi lần gọi hàm leave_multicast_group nó sẽ giảm biến đếm, thoát khỏi nhóm khi biến

đếm bằng 0

open_priv_sock_tcp mở socket TCP đặc quyền tới máy đích Nó nhận 2 đối

số nguyên:

o dport là cổng máy đích

o sport là cổng nguồn, thường nhỏ hơn 1024

open_priv_sock_udp mở socket UDP đặc quyền tới máy đích Nó nhận 2 đối số nguyên:

o dport là cổng máy đích

o sport là cổng nguồn, thường nhỏ hơn 1024

open_sock_tcp mở socket TCP tới máy đích Nó nhận đối số nguyên bất kỳ (số hiệu cổng) và 2 đối số nguyên bổ sung:

o bufsz nếu muốn tùy chỉnh kích cỡ bộ đệm In/Output (mặc định bị vô

hiệu hóa) Tham số này được thêm vào từ sau phiên bản Nessus

2.0.10

o timeout, nếu muốn thay đổi giá trị timeout mặc định

o transport, yêu cầu Nessus chuyển sang chế độ “transport” chỉ định

Các giá trị có thể là:

 ENCAPS_IP

 ENCAPS_SSLv23

 ENCAPS_SSLv2

Trang 36

 ENCAPS_SSLv3

 ENCAPS_TLSv1

open_sock_udp mở socket UDP tới máy đích Nó nhận đối số nguyên bất

kỳ (số hiệu cổng)

recv nhận dữ liệu từ socket TCP hoặc UDP Với socket UDP, nếu không thể

đọc dữ liệu, NASL sẽ giả sử rằng datagram gửi cuối cùng bị mất, nó sẽ gửi lại sau một khoảng thời gian Nó nhận ít nhất 2 đối số trong các đối số sau:

o socket được trả về bởi hàm như open_sock_tcp

o length số byte mà ta muốn nhận

o min là lượng dữ liệu nhỏ nhất phải đọc được, mặc định là 0

o timeout có thể thay đổi khác với giá trị default

recv_line nhận dữ liệu từ socket, và dừng ngay khi nhận được ký hiệu

xuống dòng Độ dài byte dữ liệu và thời gian timeout cần phải định trước

send gửi dữ liệu tới socket Các đối số là:

o socket

o data khối dữ liệu, bắt buộc phải kiểu chuỗi (nằm giữa hai dấu nháy

đơn hoặc nháy kép)

o length tùy chọn độ dài dữ liệu cần gửi, nếu không thiết lập, nó sẽ gửi

toàn bộ

o option cờ khi gọi hàm send(), không nên sử dụng kiểu số, tốt nhất nên dùng hằng MSG_OOB

scanner_add_port khai báo mở cổng với tiến trình chủ nessusd Nó nhận 2

đối số được định danh, và không có dữ liệu trả về:

port là số hiệu cổng

proto là “tcp” hoặc “udp”

scanner_get_port nhận danh sách cổng đang mở bởi nessusd Nó nhận một

đối số nguyên, một chỉ số, trả lại số hiệu cổng hoặc giá trị 0 khi kết thúc danh sách Ví dụ:

i = 0;

while (port = scanner_get_port(i++))

{

do_something_with_port;

Trang 37

}

tcp_ping thực hiện lệnh ping TCP đến máy đích, ví dụ nó thử mở một kết

nối TCP và xem có bất cứ thứ gì phản hồi lại (gói SYNACK hoặc RST) Nhận một đối số nguyên (số hiệu cổng), nếu không chỉ định, nó sẽ sử dụng các cổng thông thường trong danh sách

telnet_init khởi tạo kết nối telnet trên socket đang mở Hàm này nhận đối số

bất kỳ (socket đang mở), trả lại dữ liệu nhận được (nhiều hay ít phụ thuộc vào telnet banner nhận được)

this_host không cần đối số, trả về kết quả địa chỉ IP của máy local

this_host_name không cần đối số, trả về tên máy local

ftp_log_in thực hiện định danh/xác thực FTP trên socket đang mở Trả lại

TRUE nếu có thể login thành công, FALSE ngược lại Nó nhận 3 đối số:

o user là tên username, nếu không có, giá trị mặc định là “anonymous” hoặc “ftp”

o pass là mật khẩu truy cập, nếu không có, giá trị mặc định là email

o socket

start_denial khởi tạo một số cấu trúc dữ liệu nội bộ cho end_denial

2.3.2.6 Các hàm xử lý chuỗi

chomp nhận đối số kiểu chuỗi bất kỳ, loại bỏ mọi khoảng trắng ở cuối

Khoảng trắng ở đây có thể là dấu cách, tab, Enter, xuống dòng

crap trả về bộ đệm chiều dài yêu cầu Hàm này chủ yếu được dùng kiểm tra

lỗi tràn bộ đệm Các đối số của nó:

egrep tìm kiếm một đoạn mẫu trong chuỗi, từng dòng một, trả về kết quả

các dòng chứa mẫu ký tự cần kiểm tra Các đối số:

o icase

o pattern

o string

Trang 38

ereg so sánh chuỗi lặp lại trùng khớp, nó trả về chuỗi đầu tiên tìm được Các

đối số:

o string,

o multiline, mặc định mang giá trị FALSE, có thể thiết lập thành TRUE

để tìm kiếm trên nhiều dòng

o pattern

o icase, mặc định mang giá trị FALSE, sửa lại thành TRUE nếu muốn

tìm kiếm phân biệt chữ hoa/chữ thường

ereg_replace tìm kiếm và thay thế tất cả các mẫu xuất hiện trong chuỗi Trả

về kết quả chuỗi được sửa đổi, hoặc chuỗi gốc nếu không có mẫu trùng Các đối số:

o string, chuỗi gốc ban đầu

o pattern, mẫu cần so khớp

o replace, mẫu cần thay thế

o icase, cờ xác định tìm kiếm phân biệt chữa hoa/chữ thường

eregmatch tìm kiếm mẫu trong chuỗi, trả về NULL nếu không trùng, hoặc

trả về mảng chứa tất cả mẫu con tìm thấy Các đối số:

insstr nhận 3 hoặc 4 đối số: chuỗi thứ nhất, chuỗi thứ 2, chỉ số bắt đầu, chỉ

số kết thúc Chỉ số được bắt đầu từ 0 Hàm này sẽ tiến hành thay thế bắt đầu

từ chỉ số thứ nhất đến chỉ số kết thúc trong chuỗi thứ nhất bằng chuỗi thứ 2

Ví dụ: insstr('abcdefgh','xyz',3,5)sẽ được 'abcxyzgh'

int chuyển đổi chuỗi sang dạng số nguyên, nếu đối số không phải dạng chuỗi, nó sẽ trả về 0

match so sánh chuỗi với mẫu kiểm tra đơn giản, kết quả trả về TRUE hoặc

FALSE Hàm này không mạnh bằng hàm ereg nhưng nhanh hơn do đơn

giản Các đối số:

o icase nếu phân biệt chữ hoa/chữ thường

Ngày đăng: 01/01/2014, 00:41

HÌNH ẢNH LIÊN QUAN

Hình 1.1 Mô hình kiến trúc Nessus dạng Client-Server. - Tìm hiểu xây dựng Plugin cho Nessus sử dụng NASL
Hình 1.1 Mô hình kiến trúc Nessus dạng Client-Server (Trang 9)
Hình 1.2 Mô hình hoạt động của Nessus Plugin. - Tìm hiểu xây dựng Plugin cho Nessus sử dụng NASL
Hình 1.2 Mô hình hoạt động của Nessus Plugin (Trang 10)
Bảng 2.1 Độ ưu tiên của các phép toán. - Tìm hiểu xây dựng Plugin cho Nessus sử dụng NASL
Bảng 2.1 Độ ưu tiên của các phép toán (Trang 23)
Bảng 2.2 Một số hàm thư viện của Nessus. - Tìm hiểu xây dựng Plugin cho Nessus sử dụng NASL
Bảng 2.2 Một số hàm thư viện của Nessus (Trang 51)
Hình 2.2 Kết quả banner trả về của host FTP kmasecurity.net - Tìm hiểu xây dựng Plugin cho Nessus sử dụng NASL
Hình 2.2 Kết quả banner trả về của host FTP kmasecurity.net (Trang 55)
Hình 2.1 Địa chỉ host FTP của kmasecurity.net   Ping và lấy thử banner của host FTP: - Tìm hiểu xây dựng Plugin cho Nessus sử dụng NASL
Hình 2.1 Địa chỉ host FTP của kmasecurity.net Ping và lấy thử banner của host FTP: (Trang 55)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w