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

XÂY DỰNG PLUGIN CHO NESSUS

42 1,3K 6

Đ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

Định dạng
Số trang 42
Dung lượng 333,36 KB

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

Nội dung

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ố

Trang 1

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ảnxuấ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

Trang 2

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.

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

Trang 3

cho phép các plugin sau tận dụng dữ liệu kết quả của Plugin trước đó Điềunà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, Tìm hiểu xây dựng Plugin cho Nessus sử dụng NASL 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ểmtra 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

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

kma.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ó

Trang 4

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/kma.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

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

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

Trang 5

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ấttrê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ớimộ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

Trang 6

ả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 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

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 7

• 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)

• 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

Trang 8

• 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:

Trang 9

Ta có thể chạy thử một script NASL2 bằng câu lệnh đơn giản từ command-line:

nasl –t 192.168.1.100 test-yahoo.nasl

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

- Bộ phân tích sẽ trả lại thông báo quá 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 giống như trong ANSI C 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 ++;

Trang 10

• [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

• [repeat_loop]repeat instr until expr ;

• [foreach_loop]foreach identifier ( array ) instr

Trang 12

• [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

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ố

Trang 13

nguyên, dấu gạch chéo ngược vẫn giữ nguyên là dấu gạch chéo ngược

Có thể chuyển sang chuỗi có thể chuyển đổi bằng các hàm xử lý chuỗi.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

- 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

Trang 14

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 là ( x) hoặc (x )

• += -= *= %= có ý nghĩa tương tự như trong C

• <<= và >>= , có thêm >>>=

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

• + phép cộng chuỗi, tuy nhiên nên sử dụng với các hàm xử lý chuỗi

• - phép trừ chuỗi, nó loại bỏ các chuỗi đầu tiên mà nó tìm thấy trong chuỗicầ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 tích

• s =~ “[ab]*x+” tương đương với ereg(string:s, pattern:"[ab]*x+", icase:1)

• !~ (regex don‟t match) tương tự như trên

Trang 15

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

• && phép “and” lôgic

• 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

Trang 16

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.

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

Trang 17

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.

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:

Trang 18

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 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:

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

Trang 19

2.3 THƯ VIỆN NASL

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

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:

• Hằng lôgic

• ALSE=0

• TRUE=1

• Các loại plugin

ACT_INIT: plugin chỉ thiết lập vài KB các mục (các loại biến

toàn cục cho tất cả các plugin)

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)

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

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

liệu, xử lý banner, v.v…

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

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)

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)

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

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

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

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

Trang 20

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”

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

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

• Nessusd glue

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

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

Trang 21

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 ramộ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ảnmụ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

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)

Ví dụ sử dụng hàm get_kb_list:

replace_kb_item thêm khoản mục mới vào trong KB hoặc thay thế giá

trị cũ

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ũ

Ngày đăng: 30/03/2017, 00:07

TỪ KHÓA LIÊN QUAN

w