Kiến Thức Căn Bản Về Nmap

Chương 1: Giới thiệu về Nmap

Trước khi bắt đầu, chúng ta sẽ tìm hiểu nền tảng kỹ thuật của Nmap, cách Nmap bắt đầu và phát triển như một dự án. Đây là một công cụ tốt đã tồn tại hơn hai mươi năm, và là một thành phần được ưa chuộng và sử dụng rộng rãi trong nhiều ngành công nghiệp kỹ thuật.

Trong chương này, chúng ta sẽ đề cập đến:

  • Nmap Project bắt đầu như thế nào
  • Nhiều công dụng của Nmap
  • Cài đặt Nmap trên Windows, OS X, và Linux (có thể bỏ bớt phần cài trên OS X)

Khởi đầu khiêm tốn của Nmap

Nmap bắt nguồn từ những khởi đầu khiêm tốn trong thế giới bảo mật thương mại. Được phát hành lần đầu tiên vào tháng 9 năm 1997, phiên bản Nmap đầu tiên chỉ có khoảng 2.000 dòng code và chỉ chạy trên Linux. Mốc thời gian phát triển của Nmap thật đáng kinh ngạc và sự phát triển của nó thật phi thường. Dưới đây là một lịch sử tổng quát về sự phát triển của Nmap:

  • Thời điểm phát hành, Nmap chỉ có rất ít tính năng. Nó rất cơ bản. Không có kế hoạch phát hành phiên bản tiếp theo với phiên bản này, bởi vì các nhà phát triển không chắc chắn về tương lai của nó, và Nmap chỉ hoạt động trên một hệ điều hành Linux được biên dịch cụ thể.
  • Chỉ bốn ngày sau khi phát hành Nmap ban đầu, mặc dù được cải thiện đáng kể, phiên bản Nmap 1.5 vẫn còn rất nhiều việc phải làm để trở thành một máy quét cổng hiệu suất cao. Mặc dù trước đó đã có nhiều công cụ để phát hiện các cổng đang mở, nhưng đã có nhu cầu rất lớn về một máy quét cổng hoạt động mạnh mẽ. Nmap đã lấp đầy khoảng trống đó.
  • Vào tháng 3 năm 1998, chỉ sáu tháng sau khi phát hành ban đầu, Renaud Deraison đã công bố Nmap cho cộng đồng bảo mật rộng lớn hơn. Cuối cùng, Nmap đã trở thành một phần thiết yếu của ngành công nghiệp bảo mật thông tin và cộng đồng bảo mật ngầm bắt đầu phát triển.
  • Vào tháng 9 năm 2003, phiên bản Nmap 3.45 đã được phát hành. Đã có nhiều thay đổi so với dự án ban đầu, bao gồm nhiều tính năng và tối ưu hóa mới – chẳng hạn như duy trì dự án toàn thời gian. Chủ yếu, Nmap Scripting Engine (NSE) được tích hợp đầy đủ vào bản dựng chính của Nmap vào năm 2006.
  • Vào tháng 12 năm 2009, tất cả các khía cạnh chính của dự án đã được tích hợp vào một bản dựng chính thức của Nmap. NSE cho phép người dùng Nmap viết các mô-đun bằng Lua (một ngôn ngữ lập trình được thông dịch), kiểm tra các dịch vụ cụ thể bằng Nmap theo nhiều cách khác nhau và cho phép một bản phát hành có thể tùy chỉnh và một công cụ đánh giá lỗ hổng mạnh mẽ cho nhiều loại tác vụ khác nhau.

Nhiều công dụng của Nmap

Mặc dù quét cổng là công dụng chính của Nmap — việc hiểu hệ thống mạng rất quan trọng đối với các chuyên gia bảo mật — nhưng nó cũng có thể rất hữu ích cho các chuyên gia khác, chẳng hạn như kiểm tra tính bảo mật của hệ thống mạng.

  • Quản trị viên hệ thống: Quản trị viên hệ thống sử dụng Nmap để xác định các hệ thống nào trong hệ thống của họ đang trực tuyến, cũng như để dễ dàng xác minh tất cả các hệ thống có đang chạy cùng một phiên bản (hi vọng là hiện tại) của hệ điều hành và mạng hay không.
  • Kỹ sư mạng: Do khả năng thay đổi thời gian, cũng như các flag cụ thể trên các gói khác nhau (ví dụ: Xmas Tree Scan), các nhà phát triển có thể sử dụng Nmap để trợ giúp kỹ thuật mạng và hiểu rõ hơn về cách thức hệ thống hoạt động. Giao thông mạng là một phần quan trọng trong công việc của kỹ sư hệ thống và kỹ sư mạng, và họ phải hiểu cách thức hoạt động của các hệ thống và mạng trên quy mô lớn.
  • Người dùng gia đình: Cuối cùng, ngay cả những người dùng tại nhà cũng có thể có được và chạy Nmap trên hệ thống tại nhà của họ. Có một lượng lớn thông tin về cách người dùng tại nhà có thể nhận Nmap và học cách quét mạng gia đình của họ. Mặc dù việc sử dụng Nmap cho các mục đích bất hợp pháp là không được khuyến khích, nhưng việc giới thiệu một công cụ (tương đối) dễ sử dụng và nâng cao trên dòng lệnh Linux sẽ giúp cho nhiều người dùng có động lực hơn.

Cài đặt Nmap

Trên OS X, cài đặt Nmap cực kỳ đơn giản. Việc cài đặt Nmap cho Windows và MacOSX cũng đơn giản như tải xuống các gói cài đặt từ trang web chính thức của Nmap và chạy chúng.

Đối với Mac OS X, có một số tùy chọn. Tùy chọn phổ biến nhất là tải xuống gói cài đặt .dmg từ trang web Nmap. Ngoài ra còn có các bản dựng RPM có sẵn mà bạn có thể tải xuống từ các nguồn khác nhau.

(Hình ảnh)

Để cài đặt Nmap trên Linux, tải xuống, giải nén và cài đặt nó cũng đơn giản như các bước từ 1 đến 3. Vì các bản phân phối của Linux luôn cập nhật, nên Nmap cũng vậy!

Build Nmap từ mã nguồn

Để cài đặt Nmap từ mã nguồn, ba bước sau phải được thực hiện:

  1. Tải xuống mã nguồn.
  2. Biên dịch mã nguồn.
  3. Cài đặt công cụ đã biên dịch.

Việc tải xuống mã nguồn với một công cụ như wget rất đơn giản (chúng ta chỉ cần thực hiện wget http://nmap.org/dist/nmap- bản>.tar.gz, trong đó là phiên bản hiện tại của Nmap).

Sau khi mã nguồn đã được tải xuống, nó phải được giải nén bằng tar xvfz nmap-.tar.gz hoặc tương tự.

Ở giai đoạn này, chúng ta đã có một thư mục mới chứa đầy mã nguồn Nmap. Đối với những người dùng đã quen thuộc với các công cụ dòng lệnh của Linux, chúng ta sẽ sử dụng ./configure, make và make install để cài đặt Nmap trên hệ thống của chúng ta.

(Hình ảnh)

“Nmap dragon” là một tác phẩm ASCII art nổi tiếng được hiển thị trong bước ./configure của quá trình biên dịch mã nguồn Nmap.

Sau khi Nmap được cài đặt thành công, bạn có thể xác minh xem nó có hoạt động hay không bằng cách gõ nmap –version. Nó sẽ hiển thị phiên bản và cờ khác nhau mà nó hỗ trợ trong các chương tiếp theo.

(Hình ảnh)

Tóm tắt

Sau khi đọc chương này, bạn sẽ hiểu rõ về thế giới tuyệt vời của Nmap. Bắt đầu như một dự án nhỏ, Nmap giờ đây là một phần của nhiều ngành công nghiệp. Nếu bạn đã làm theo hướng dẫn cài đặt Nmap, bạn sẽ có một phiên bản Nmap đầy đủ chức năng.

Trong chương tiếp theo, chúng ta sẽ tìm hiểu các kiến thức cơ bản về mạng để hiểu được sự khác biệt giữa TCP và UDP, cách thức hoạt động của internet như một mạng lớn và cách thức hoạt động của quét cổng, cũng như cách phát hiện phiên bản dịch vụ và banner grabbing.

 

Chương 2: Kiến thức cơ bản về mạng

Trước khi có thể sử dụng Nmap như một công cụ, trước tiên chúng ta cần hiểu những điều cơ bản về cách thức hoạt động của nó. Để quét mạng (bao gồm cả Internet), chúng ta phải hiểu các khái niệm mà tất cả các mạng được xây dựng dựa trên đó. Mặc dù cuốn sách này sẽ không mô tả chi tiết các khái niệm về mạng – bạn sẽ không trở thành một ninja packet chỉ bằng cách học sử dụng Nmap – nhưng chúng ta cần đảm bảo rằng mình có thể diễn giải kết quả quét từ các bản quét Nmap tiêu chuẩn và nâng cao. Nếu không có kiến thức cơ bản về mạng, chúng ta sẽ không thể quét được!

Các chủ đề sau đây sẽ được đề cập trong chương này:

  • Mạng hoạt động như thế nào
  • Sự khác biệt giữa TCP và UDP
  • Giới thiệu về cổng
  • Quét cổng hoạt động như thế nào
  • Phát hiện phiên bản dịch vụ và banner grabbing hoạt động như thế nào

Cấu trúc của Internet

Trước khi đi sâu vào một số phức tạp của phần mềm mạng, điều quan trọng là phải hiểu cách thức thiết kế của Internet. Internet hoạt động giống như một mạng lớn mà bạn có thể có ở nhà hoặc văn phòng của mình – tất nhiên, sự khác biệt là thay vì các máy trạm, Internet có các dịch vụ hướng Internet. Ví dụ, hầu hết các gia đình có nhiều máy tính trên cùng một Mạng cục bộ (LAN), nhưng chỉ có một địa chỉ IP trên Internet. Nếu ai đó quét mạng này từ thiết bị được kết nối Internet của họ, họ sẽ chỉ thấy các dịch vụ hướng Internet – không phải máy tính cá nhân của từng thành viên trong gia đình. Điều này rất quan trọng cần lưu ý vì trên Internet, chỉ các cổng được chuyển tiếp đến một máy mới có thể truy cập được trên một địa chỉ IP nhất định. Có một số ngoại lệ đối với quy tắc này mà chúng ta sẽ xem xét sau.

Khi quét máy tính trên LAN của bạn, tuy nhiên, bạn thường sẽ có thể thấy tất cả các cổng đang mở. Điều này là do khi các gói tin đang di chuyển trên mạng cục bộ, thay vì qua Internet, bạn có quyền truy cập trực tiếp vào máy mục tiêu – bạn không phải đi qua bộ định tuyến hoặc chuyển mạch sẽ chặn tất cả các cổng này qua Internet. Đây là lý do tại sao, ví dụ, khi lưu trữ máy chủ tại một bữa tiệc LAN, không ai phải chuyển tiếp bất kỳ cổng nào trong thiết bị của bên thứ ba.

Khi thực hiện quét trong suốt phần còn lại của cuốn sách này, hãy nhớ rằng có một số yếu tố khác nhau có thể giúp hoặc ngăn chặn việc quét phát hiện mọi dịch vụ đang lắng nghe. Chúng ta sẽ xem xét một số cạm bẫy trong các chương sau và đưa ra các giải pháp hữu ích bất cứ khi nào có thể.

Mô hình OSI

Để hiểu cách các gói tin – là các bit thông tin di chuyển từ máy này sang máy khác – chạy mạng, bạn nên có ý tưởng cơ bản về mô hình Kết nối Hệ thống Mở (OSI). Đây là một cách khái niệm để suy nghĩ về cách thức hoạt động của mạng trên các lớp khác nhau. Thật dễ hiểu rằng về mặt vật lý, mạng chỉ là các phần cứng có tín hiệu điện chạy qua chúng; thực sự khó khăn hơn nhiều để khái niệm hóa các mạng logic mà các nhà phát triển và nhân viên vận hành mạng (cũng như máy tính) làm việc cùng.

Lời giải thích đơn giản nhất là các giao thức và bit thông tin khác nhau hoạt động trên các lớp khác nhau của mô hình và hoạt động dựa trên nhau. Sơ đồ sau đây giải thích ngắn gọn lớp nào thực hiện vai trò nào, để chúng ta có thể hiểu cách thức hoạt động của banner dịch vụ và cổng sau trong chương này.

(Hình ảnh)

Không cần phải hiểu tất cả các chi tiết phức tạp của mô hình OSI hoặc mạng cấp thấp để sử dụng Nmap hiệu quả và diễn giải kết quả quét chính xác. Tuy nhiên, cần phải nhận ra rằng không phải tất cả thông tin mạng đều được tạo ra như nhau – một số thông tin dễ dàng truy cập vào những thời điểm nhất định, trong khi khó truy cập dữ liệu nhất định vào những thời điểm khác. Nếu bạn quan tâm đến việc tìm hiểu thêm về mạng từ góc độ chuyên sâu, bạn nên xem các công cụ như Wireshark có thể chụp các gói tin hoặc xem chúng khi đang truyền.

Quét cổng

Nmap là một máy quét cổng, nhưng chúng ta vẫn chưa đề cập đến cổng thực sự là gì. Như tên gọi của nó, cổng là một cách để truy cập dịch vụ mạng trên máy tính. Mỗi máy tính có 65.535 cổng có thể được mở hoặc đóng bất cứ lúc nào. Một số dịch vụ như HTTP (phục vụ các trang web) hoặc FTP (cho phép truyền tệp) có các cổng được liên kết với chúng theo mặc định. HTTP chạy trên cổng 80, FTP chạy trên cổng 21, v.v. Có rất nhiều danh sách các cổng thường được sử dụng mà chúng ta có thể tham khảo sau – may mắn thay, Nmap có các danh sách này được bao gồm trong gói phân phối của nó.

Một cách để khái niệm hóa cổng là nghĩ về một tòa nhà chung cư. Trong phép loại suy này, một tòa nhà chung cư sẽ là một địa chỉ IP – mỗi căn hộ trong tòa nhà sẽ là một cổng khác nhau. Trong trường hợp này, tòa nhà sẽ phải có 65.535 căn hộ – một tài sản khá lớn!

Khi bạn truy cập địa chỉ IP, nó giống như giao pizza đến tòa nhà chung cư; bạn biết nó ở đâu trên thế giới, nhưng bạn không biết chính xác bạn cần đến đâu. Đó là lúc các cổng xuất hiện! Một cổng tương tự như số căn hộ; sử dụng số cổng, chúng ta sẽ biết rằng chúng ta sẽ đến 5505 Internet St, Căn hộ 443, để gửi lưu lượng HTTPS!

Các cổng thường được xác định bằng cách đặt dấu hai chấm sau địa chỉ IP. Nếu bạn thấy một địa chỉ trông giống như 127.0.0.1:22, thì bạn có thể giả định một cách an toàn rằng bạn đang được trỏ đến địa chỉ IP 127.0.0.1 và cổng 22.

TCP và UDP

Một lĩnh vực quan trọng cần hiểu về mạng là hai giao thức chính mà các dịch vụ mạng có thể sử dụng: TCP và UDP. Các dịch vụ có thể lắng nghe trên các cổng này bằng một trong hai giao thức – và nhiều lần làm như vậy. TCP (thường được hiển thị là TCP/IP) được sử dụng cho các kết nối cần mọi thứ được sắp xếp theo thứ tự cụ thể – ví dụ: tải trang web. Tuy nhiên, UDP là một giao thức không kết nối; không kết nối có nghĩa là các kết nối UDP hoạt động giống như một vòi phun nước dữ liệu di chuyển từ một địa chỉ IP (địa chỉ nguồn) đến địa chỉ khác (địa chỉ đích).

Do cách thức hoạt động của Internet, mặc dù – đó là một mạng chuyển mạch gói lớn – các gói tin này không phải lúc nào cũng đến theo thứ tự. Đối với một thứ gì đó như tải trang web, đây sẽ là một vấn đề rất lớn. Tuy nhiên, đối với các mục đích sử dụng khác, việc dữ liệu đến theo bất kỳ thứ tự nào là điều hoàn toàn hợp lý.

Ví dụ: các cuộc gọi Thoại qua IP (VoIP) thường sử dụng giao thức UDP. Quan trọng hơn là dữ liệu đến được nguồn của nó, ngay cả khi một gói tin bị bỏ lỡ hoặc không theo thứ tự. Bằng cách này, mặc dù có thể có một chút trục trặc nhỏ trong kết nối, nó sẽ không bị lag trong khi chờ dữ liệu tải. Hầu hết các dịch vụ mà chúng ta sẽ kiểm tra trong cuốn sách này đều dựa trên TCP, nhưng chắc chắn có thể sử dụng Nmap để quét các dịch vụ UDP (sử dụng cờ -sU). UDP không nhận được phản hồi khi truyền gói tin thành công; vì vậy, có thể mất rất nhiều thời gian để tìm hiểu xem một dịch vụ có thực sự đang lắng nghe trên một cổng UDP nhất định hay đơn giản là không trả lời.

Banner dịch vụ

Bây giờ chúng ta đã hiểu những điều cơ bản về cách thức hoạt động của mạng, cổng, TCP và UDP, chúng ta có thể bắt đầu tìm hiểu chi tiết về Nmap – một công cụ mạnh mẽ tận dụng các yếu tố khác nhau về cách máy tính và mạng giao tiếp để cung cấp cho chúng ta thông tin hữu ích về những dịch vụ mà các máy tính khác nhau đang chạy.

Công dụng phổ biến nhất của Nmap – và thiết kế ban đầu của nó – là một máy quét cổng đơn giản. Máy quét cổng chỉ đơn giản là một phần mềm cố gắng kết nối với từng cổng mục tiêu cụ thể và xem liệu cổng đó có mở hay không – xác định xem liệu có thể thiết lập bắt tay ba chiều TCP hay không.

Bắt tay ba chiều TCP là một cách đơn giản để thiết lập kết nối dựa trên mạng trước khi các ứng dụng bắt đầu giao tiếp với nhau. Cấu trúc rất đơn giản – và đừng lo lắng nếu những cờ này không có ý nghĩa gì nhiều đối với bạn ngay bây giờ. Như bạn mong đợi, bắt tay ba chiều bao gồm ba bước giữa hai người nói (hãy gọi họ là Alice và Bob). Bắt tay hoạt động như sau:

  • Alice đang yêu cầu kết nối với Bob. Alice gửi SYN đến Bob tại cổng được chỉ định.
  • Nếu Bob muốn thiết lập kết nối này, Bob sẽ gửi phản hồi SYN/ACK đến Alice.
  • Alice nhận được SYN/ACK và xác minh rằng kết nối được thiết lập bằng cách gửi ACK cho Bob.

(Hình ảnh)

Khi bạn đã hiểu cách thức thiết lập kết nối trên một cổng nhất định, thì việc hiểu cách thức hoạt động của bản quét cổng Nmap cơ bản nhất – bản quét SYN – sẽ tương đối dễ dàng. Nmap gửi yêu cầu SYN đến mọi cổng trong phạm vi (thường là 1.000 cổng phổ biến nhất hoặc toàn bộ 65.535 cổng trên máy chủ) và chờ phản hồi SYN/ACK. Nếu nhận được phản hồi SYN/ACK, thì có một dịch vụ đang lắng nghe trên cổng đang mở đó. Xin chúc mừng! Bây giờ chúng ta đã biết cách thức hoạt động của quét cổng cơ bản. Có nhiều loại quét khác nhau – không chỉ quét SYN – nhưng ý tưởng cơ bản của mô hình yêu cầu/phản hồi bây giờ đã khá rõ ràng.

Tuy nhiên, khi quét cổng, chúng ta thường quan tâm đến nhiều hơn là chỉ việc cổng có trực tuyến hay không. Mặc dù hầu hết các máy chủ web đều lắng nghe trên cổng 80 (là cổng được gán HTTP), ai đó cũng có thể dễ dàng đặt máy chủ web trên cổng 12345 hoặc 1337. Hơn cả việc chỉ hiểu liệu cổng có mở hay không, điều quan trọng là phải hiểu dịch vụ nào thực sự đang lắng nghe.

May mắn thay, Nmap đi kèm với một mô-đun phát hiện phiên bản dịch vụ được tích hợp sẵn. Chức năng này hoạt động bằng cách tạo kết nối với dịch vụ thực sự đang lắng nghe và tìm kiếm banner dịch vụ. Gần như mọi dịch vụ dựa trên mạng đều có thể nhận dạng được bằng banner dịch vụ ban đầu của nó; ngay cả khi không, mặc dù vậy, phát hiện giao thức cho phép Nmap xác định giao thức, nếu không phải là phiên bản máy chủ chính xác đang chạy. Chúng ta sẽ tìm hiểu cách thực hiện quét cơ bản – bao gồm phát hiện phiên bản dịch vụ – trong chương tiếp theo.

Tóm tắt

Sau khi đọc chương này, bạn sẽ hiểu cơ bản về cách thức hoạt động của mạng máy tính. Cụ thể, điều quan trọng là phải hiểu TCP và UDP khác nhau như thế nào và bản thân quét cổng hoạt động như thế nào. Bây giờ bạn đã biết Internet hoạt động như một mạng máy tính rất lớn – và bạn cũng có thể quét các máy cục bộ trên LAN của mình – bạn nên có một nền tảng vững chắc để tiếp tục tìm hiểu cách thức hoạt động của Nmap và các tính năng nâng cao mà bạn có thể sử dụng trong rất nhiều tình huống.

Trong chương tiếp theo, chúng ta sẽ tìm hiểu cách thực hiện quét Nmap cơ bản để có được kết quả trong các tình huống phổ biến nhất. Chương tiếp theo này sẽ giúp bạn bắt đầu và quét các loại cổng và dịch vụ khác nhau!


Chương 3: Nmap Cơ bản

Bây giờ chúng ta đã hiểu cách thức hoạt động của mạng, đã đến lúc thực sự sử dụng Nmap để quét máy tính và mạng. Chương này nhằm mục đích đề cập đến một số chủ đề sẽ giúp bạn bắt đầu và chạy để thực sự quét một số thứ này.

Trong chương này, chúng ta sẽ đề cập đến:

  • Cách chọn mục tiêu
  • Cách chạy quét mặc định
  • Cách kiểm tra phiên bản dịch vụ
  • Cách ghi lại quét (và ý nghĩa của các loại nhật ký khác nhau)
  • Cách chỉ định phạm vi quét đặc biệt
  • Cách tìm hiểu lý do cho kết quả Nmap

Cách chọn mục tiêu

Mặc dù việc quét máy tính qua Internet nhìn chung được chấp nhận là không phải là tội phạm, nhưng nó cũng không được đánh giá cao bởi các quản trị viên hệ thống. Có hàng nghìn lượt quét mỗi giây, trên tất cả các khu vực của Internet – nhưng điều đó không có nghĩa là bạn sẽ không nhận được khiếu nại lạm dụng (hoặc tệ hơn) nếu bạn quét nhầm máy. Hãy đảm bảo rằng bất kỳ mục tiêu nào bạn chọn đều biết (và đồng ý) với bất kỳ bản quét nào bạn có thể quyết định thực hiện. Có một vài cách mà bạn có thể tạo mục tiêu của riêng mình – mà một số độc giả có thể thấy dễ dàng hơn là sử dụng miễn phí trực tuyến.

Mục tiêu đơn giản nhất và dễ thiết lập nhất là chỉ sử dụng một máy tính khác trên mạng cục bộ của bạn. Bạn có thể sử dụng bộ định tuyến của mình (thường nằm ở 192.168.1.1 đối với bộ định tuyến gia đình), một máy khác trên mạng của bạn (mà chúng ta sẽ nói về việc tìm kiếm), hoặc thậm chí mua một máy tính xách tay giá rẻ để sử dụng làm phòng thí nghiệm thử nghiệm.

Nếu bạn không có quyền truy cập vào một máy khác để quét hoặc không cảm thấy thoải mái (hoặc được ủy quyền) để quét máy khác, bạn có thể tạo máy của riêng mình bằng cách ảo hóa máy. Mặc dù bạn sẽ cần phần nào quen thuộc với việc cài đặt Linux để thực hiện việc này, nhưng có các giải pháp phần mềm miễn phí (chẳng hạn như VirtualBox) và các giải pháp phần mềm thương mại (chẳng hạn như VMWare hoặc Parallels) để ảo hóa máy cho bạn. Nếu bạn quyết định đi theo con đường này để quét mục tiêu trong cuốn sách này, tôi khuyên bạn nên cài đặt Ubuntu hoặc Debian – bạn cũng có thể quét từ các máy này! Ngoài việc tạo máy chủ ảo của riêng bạn, bạn có thể mua Máy chủ Riêng Ảo (VPS) từ các nhà cung cấp dịch vụ lưu trữ đám mây mà không cần tốn nhiều tiền. Các nhà cung cấp phổ biến bao gồm Linode, DigitalOcean (tại thời điểm viết bài, có VPS chỉ với 5 đô la mỗi tháng), Amazon Web Services (AWS), Rackspace, v.v. Ưu điểm của việc chạy một trong những máy chủ dựa trên đám mây này là bạn cũng có thể có kinh nghiệm trong việc chạy một máy chủ Linux đầy đủ chức năng. Nếu bạn muốn, bạn thậm chí có thể lưu trữ web, email, FTP hoặc bất kỳ dịch vụ nào khác trên máy chủ này!

Cuối cùng, nếu bạn không muốn lưu trữ máy ảo của riêng mình, không có bất kỳ máy nào khác trên mạng của bạn và không muốn trả tiền cho máy chủ riêng ảo; bạn có thể quét máy của riêng mình (điều này không thú vị lắm) hoặc sử dụng dịch vụ miễn phí do nhóm Nmap cung cấp tại http://scanme.nmap.org/.

Trang web này cho phép bạn toàn quyền quét, vì vậy bạn không phải lo lắng về việc thô lỗ hoặc gây phiền nhiễu cho bất kỳ quản trị viên mạng nào. Mặt khác, không thể thực sự thay đổi bất kỳ dịch vụ nào đang nghe trên máy chủ này, vì vậy bạn không bao giờ thực sự có thể thay đổi kết quả bạn đang nhận được. Sử dụng máy tính của riêng bạn (“localhost” hoặc 127.0.0.1) đôi khi có thể là lựa chọn tốt hơn, vì bạn sẽ có thể chạy các dịch vụ và xem các cổng khác nhau được phát hiện.

Đối với mục đích của các ví dụ quét trong cuốn sách này, chúng tôi sẽ sử dụng http://scanme.nmap.org/ và các máy ảo bổ sung khác nhau được thiết lập cho mục đích rõ ràng là được quét. Hãy nhớ: đừng quét mà không được phép!

Chạy quét mặc định

Sau khi Nmap được cài đặt và bạn đã chọn mục tiêu, việc chạy quét với cài đặt mặc định tương đối đơn giản. Lệnh đơn giản như nmap scanme.nmap.org (giả sử http://scanme.nmap.org/ là mục tiêu của lần quét cụ thể này).

(Hình ảnh)

Như bạn có thể thấy trong ảnh chụp màn hình trước đó, việc chạy quét mặc định rất dễ dàng. Thông thường, Nmap sử dụng quét SYN làm loại quét mặc định; nhưng vì chúng tôi không chạy quét với quyền root thông qua sudo, Nmap chuyển sang quét “connect”. Chúng tôi sẽ đi sâu vào sự khác biệt của các loại quét cụ thể trong Chương 4, Quét Nmap Nâng cao. Hiện tại, bạn có thể thấy rằng chúng tôi đã phát hiện ba dịch vụ đang mở. Cột ngoài cùng bên trái hiển thị số cổng và giao thức (trong trường hợp này là 22/tcp, 80/tcp và 9929/tcp) mà cổng đang mở và dịch vụ là gì. Khi chúng tôi chạy Nmap mà không chỉ định bất kỳ điều gì bổ sung (chẳng hạn như bản quét chúng tôi vừa chạy), cột SERVICE được điền dựa trên đặc tả cổng trong /etc/services (trên Linux), thay vì thực sự phân tích giao thức. Nếu chúng tôi muốn kiểm tra phiên bản dịch vụ thực tế (bằng cách kiểm tra banner), chúng tôi cần chỉ định một loại quét khác: quét phiên bản dịch vụ.

Bạn cũng có thể nhận thấy rằng ở đầu bản quét, trước kết quả, văn bản Not shown: 997 filtered ports được hiển thị. Nmap không hiển thị tất cả các cổng đóng trong quét, vì điều đó sẽ làm lộn xộn kết quả quét. Có thể xem những cổng này (và xem liệu chúng được liệt kê là đã đóng hay đã lọc) bằng cách tăng độ chi tiết của bản quét – điều mà chúng tôi sẽ đề cập đến trong Chương 4, Quét Nmap Nâng cao. Tuy nhiên, quan trọng hơn, bạn nên nhớ rằng có 65.535 cổng có thể được mở hoặc đóng trên mỗi máy. Nếu chúng tôi thêm 997 vào ba cổng mà chúng tôi đã thấy đang mở, chúng tôi chỉ nhận được 1.000 – chỉ một phần nhỏ trong tổng số cổng!

Theo mặc định, Nmap sẽ chỉ quét 1.000 cổng hàng đầu thường mở. Điều này không tương ứng với 1.000 cổng đầu tiên, mà là những cổng thường mở nhất. Bạn có thể nhận được kết quả tương tự bằng cách sử dụng cờ –top-ports 1000 hoặc chỉ định một số khác (chẳng hạn như –top-ports 200, ví dụ).

Quét phiên bản dịch vụ

Chạy quét phiên bản dịch vụ rất đơn giản; tất cả những gì chúng ta cần làm là thêm một cờ, -sV. Điều này có nghĩa là chúng ta đang tiến hành quét phiên bản dịch vụ, có thể cho thấy phiên bản nào của mỗi phần mềm đang chạy. Điều này đặc biệt hữu ích nếu ai đó đang chạy dịch vụ trên cổng không mặc định (không khớp với /etc/services) – trong những trường hợp như vậy, điều quan trọng hơn nữa là phải tìm ra chính xác những gì đang chạy.

(Hình ảnh)

Khi chúng tôi chạy quét tiếp theo này, bạn sẽ thấy kết quả hơi khác một chút:

Bạn có thể thấy trong ảnh chụp màn hình trước đó rằng bây giờ có nhiều thông tin hơn đáng kể được đưa vào kết quả quét; trong trường hợp này, chúng ta có thể thấy các phiên bản vá lỗi thực tế của các dịch vụ OpenSSH, HTTP và Nping echo.

Trong bối cảnh đánh giá bảo mật, bạn có thể thấy điều này hữu ích như thế nào! Nếu bạn đang tìm kiếm lỗ hổng trong các phiên bản phần mềm nhất định, điều quan trọng là phải có thể biết chính xác phiên bản nào đang chạy. Lỗ hổng thường chỉ được tìm thấy trong các phiên bản phần mềm cụ thể (chẳng hạn như từ 1.0.1 đến 1.0.4), vì vậy mức độ chi tiết của những gì chúng ta thấy ở đây rất quan trọng. Tuy nhiên, điều quan trọng cần lưu ý là nếu quản trị viên hệ thống hạn chế phiên bản dịch vụ, thì không thể biết chính xác những gì đang chạy. Từ góc độ phòng thủ, điều đó rất quan trọng!

Ghi lại quét

Mặc dù việc xem kết quả quét trên cơ sở từng trường hợp rất hữu ích trong ngắn hạn; đối với thời gian đánh giá dài hơn (hoặc đối với các bản quét lớn hơn sẽ cuộn ra khỏi màn hình), nên ghi lại quét vào tệp.

Nmap hỗ trợ ba loại ghi nhật ký khác nhau. Mỗi loại có một cờ khác nhau để ghi lại loại nhật ký cụ thể đó và các mục đích khác nhau. May mắn thay, nhóm phát triển Nmap đã đủ thông minh để nghĩ đến trước; sử dụng cờ -oA (xuất ra tất cả), có thể xuất ra cả ba tệp nhật ký. Tham số thứ hai cho cờ này chỉ đơn giản là tên cơ sở của nhật ký. Chúng sẽ tự động có phần mở rộng tệp duy nhất của riêng chúng.

(Hình ảnh)

Như bạn có thể thấy trong ảnh chụp màn hình trước đó, Nmap tự động lưu tất cả ba phần mở rộng tệp nhật ký (.xml, .nmap và .gnmap) với tên tệp cơ sở được chỉ định trong cờ -oA.

Như bạn có thể thấy, sau khi chạy quét với cờ -oA logbase, hiện có ba tệp trong thư mục hiện tại. Bây giờ chúng ta có tệp .xml, chứa kết quả của bản quét (cũng như chi tiết thời gian) ở định dạng XML và tệp .nmap, là đầu ra có thể đọc được của bản quét. Nói cách khác, về cơ bản là cùng một đầu ra mà bạn thấy trên màn hình khi chạy quét – và cũng có lẽ thú vị nhất là tệp .gnmap. Tệp .gnmap là viết tắt của đầu ra nmap có thể grep, được thiết kế để dễ dàng sử dụng bởi công cụ dòng lệnh Linux grep. Nói cách khác, rất dễ tìm kiếm.

(Hình ảnh)

Bạn có thể dễ dàng thấy trong ví dụ trước đó rằng khi grep “open”, chúng tôi đã được cung cấp dòng của tệp .gnmap có các cổng mở. Vì chúng tôi chỉ quét một máy chủ, máy chủ được trả về phải là máy chủ chúng tôi đã quét – scanme.nmap.org – nhưng trong các bản quét lớn hơn, có thể cực kỳ hữu ích khi tìm ra máy chủ nào có bất kỳ cổng mở nào (và máy chủ nào chúng tôi có thể an toàn bỏ qua).

Thứ hai, chúng tôi đã thực hiện grep cho 443/open. Grep này không trả về bất cứ điều gì (vì cổng 443 không mở trong bản quét này), nhưng bạn có thể thấy cách sử dụng đầu ra có thể grep như thế này có thể nhanh chóng và hiệu quả xác định máy chủ nào có các cổng nhất định trực tuyến. Khi chúng tôi nói về khai thác tích cực thông qua Nmap, chúng tôi sẽ có thể hiểu rõ hơn thông tin như thế này có thể có giá trị như thế nào.

Phạm vi quét được chỉ định

Chúng ta đã học trước đó rằng theo mặc định, Nmap chỉ quét 1000 cổng hàng đầu. Tuy nhiên, các dịch vụ có thể được đặt trực tuyến trên bất kỳ cổng nào trong số 65.535 cổng tồn tại – không chỉ các cổng phổ biến nhất. Nhiều quản trị viên hệ thống và kỹ sư mạng chạy các dịch vụ trên các cổng rất cao như 65001, để chúng không bị phát hiện bởi các bản quét thông thường. Tuy nhiên, bảo mật thông qua sự che khuất không bao giờ thực sự hiệu quả!

Có thể chỉ định một phạm vi cổng cụ thể bằng cách sử dụng cờ -p. Vì vậy, nếu bạn chỉ muốn quét cổng 80 trên scanme.nmap.org, bạn có thể nhập nmap -p 80 scanme.nmap.org. Cờ đặc tả cổng cũng hoạt động cho các phạm vi – vì vậy, trong một ví dụ khác, nmap -p 1-1024 scanme.nmap.org sẽ quét các cổng từ 1 đến 1024 (tất cả các cổng đặc quyền) trên máy chủ mục tiêu.

Ngoài ra còn có một mẹo hữu ích để quét tất cả 65.535 cổng trên máy: thay vì nhập -p 1-65535, bạn có thể chỉ cần sử dụng phím tắt -p-. Các nhà phát triển Nmap đã tốt bụng và sâu sắc khi nhận ra rằng việc gõ số “65.535” rất nhiều lần sẽ khá mệt mỏi!

Mặc dù hiện tại chúng tôi chỉ quét một máy chủ, nhưng cũng cần lưu ý rằng có một số cách để chỉ định nhiều địa chỉ IP hoặc tên máy chủ. Ký hiệu CIDR (192.168.1.0/24), danh sách địa chỉ IP (1.2.3.4,1.2.3.5,1.2.3.6) và tệp mục tiêu (-iL targets.txt) đều là những cách hợp lệ để chỉ định máy chủ cần quét. Tất cả chúng sẽ được quét với cùng một loại quét và thời gian liên quan được Nmap tự động tối ưu hóa. Chúng ta sẽ nói thêm về việc tối ưu hóa quy trình này trong Chương 5, Tối ưu hóa Hiệu suất.

Hiểu cờ lý do

Vì chúng ta đã đề cập đến mạng cơ bản – bao gồm bắt tay ba chiều TCP – trong Chương 2, Kiến thức cơ bản về mạng, bạn đã biết ý nghĩa của việc một cổng được mở và cách xác định điều đó như thế nào. Tuy nhiên, trong một số trường hợp nhất định (và đặc biệt là đối với các cổng đã lọc), việc hiểu logic của Nmap đằng sau các cổng mở, đóng và đã lọc có thể cực kỳ hữu ích để hiểu.

Bạn có thể xác định cách Nmap đưa ra kết luận bằng cách sử dụng cờ –reason.

(Hình ảnh)

Như được chứng minh trong ảnh chụp màn hình trước đó, một cột thứ tư hiện được thêm vào bản quét sau khi cờ –reason được gọi. Trong trường hợp này, chúng ta có thể thấy rõ ràng rằng ba dịch vụ được xác định là trực tuyến đã được thực hiện như vậy vì syn-ack, cho biết phản hồi SYN/ACK cho yêu cầu SYN – khi chúng ta thấy rằng một dịch vụ trên một cổng nhất định đang cố gắng hoàn thành bắt tay ba chiều TCP, chúng ta biết rằng có một thứ gì đó đang lắng nghe.

Tóm tắt

Sau khi đọc chương này, bạn sẽ có thể thực hiện nhiều loại quét khác nhau và thú vị. Bạn cũng nên biết cách thay đổi cổng bạn đang quét và cách quét nhiều máy chủ cùng một lúc. Bạn đã học được rằng việc lấy banner dịch vụ có thể giúp bạn xem phiên bản phần mềm nào đang chạy và cách xuất ra các loại tệp nhật ký khác nhau. Cuối cùng, bây giờ bạn sẽ có thể hiểu lý do dựa trên mạng tại sao Nmap gắn cờ kết quả theo những cách nhất định. Còn một chặng đường dài để trở thành bậc thầy Nmap thực thụ, nhưng bạn đã chinh phục được những điều cơ bản để bắt đầu quét. Trong chương tiếp theo, chúng ta sẽ tìm hiểu cách thực hiện quét Nmap nâng cao để có được kết quả trong các tình huống phức tạp hơn. Chương tiếp theo này sẽ cho phép bạn quét trong những môi trường lạ hoặc thù địch, mà các chuyên gia bảo mật thường gặp phải trong quá trình tham gia.


Chương 4: Quét Nmap Nâng cao

Bây giờ bạn sẽ có thể hoàn toàn chạy quét Nmap đối với nhiều máy chủ khác nhau. Thật tuyệt vời! Biết cách chạy quét cơ bản sẽ giúp bạn vượt qua nhiều tình huống, nhưng có một vài ngoại lệ đáng chú ý – và các loại quét khác nhau – rất quan trọng để trở thành người dùng thành thạo.

Bây giờ chúng ta sẽ đề cập cụ thể đến các phương pháp khác nhau để phát hiện máy chủ (để bạn biết phải quét cái gì), cách chạy quét đối với các thiết bị đang cố gắng ẩn mình, quét UDP, các tùy chọn độ chi tiết khác nhau, v.v.

Trong chương này, chúng ta sẽ đề cập đến:

  • Chạy quét ping
  • Chạy quét ping agnostic
  • Quét dịch vụ UDP
  • Chạy các cờ TCP khác nhau trên quét – chẳng hạn như quét Xmas Tree
  • Phát hiện hệ điều hành
  • Tăng độ chi tiết trong đầu ra Nmap
  • Hiển thị theo dõi gói tin trong quét

Phương pháp phát hiện máy chủ

Để quét máy chủ một cách hiệu quả, điều quan trọng trước tiên là phải hiểu cách phát hiện máy chủ “còn sống” hoặc trực tuyến. Vì nhiều quản trị viên hệ thống cố gắng ẩn hệ thống của họ khỏi Internet, một số máy chủ sẽ xuất hiện ngoại tuyến cho đến khi được thăm dò thêm. May mắn thay, Nmap có một số cách để phát hiện máy chủ nào đang trực tuyến.

Cách đơn giản nhất để phát hiện máy chủ là chạy quét ping. Ping – hoặc yêu cầu echo ICMP mà máy được thiết kế để phản hồi – là một cuộc trò chuyện hỏi đáp đơn giản “bạn có ở đó không?”.

Ping được đặt tên theo sonar – “ping” dưới nước mà tàu ngầm gửi để phát hiện các tàu và tàu lặn khác trong khu vực – và hoạt động tương tự đối với máy tính. Mặc dù bạn có thể dễ dàng kiểm tra lệnh ping chỉ bằng cách nhập ping google.com, nhưng việc sử dụng Nmap cho quét ping có thể cho phép tăng hiệu quả đáng kể trên các phạm vi mạng mục tiêu lớn hơn.

Thật dễ dàng để chạy quét chỉ ping với Nmap bằng cờ -sn. Điều này đảm bảo chỉ chạy quét ping, thay vì quét cổng đầy đủ – rất tốt để tìm ra máy chủ nào đang trực tuyến.

(Hình ảnh)

Trong ảnh chụp màn hình trước đó, được chạy dưới dạng quét -sn (quét ping), bạn có thể thấy rõ ràng rằng trong số 256 địa chỉ IP được quét, 18 địa chỉ “đang hoạt động” hoặc đang phản hồi ping.

Tuy nhiên, đôi khi bạn cần thực hiện phương pháp quét này thêm một bước nữa. Để “ẩn” khỏi quét, quản trị viên hệ thống thường sẽ làm cho hệ thống của họ bỏ qua các yêu cầu ping. Đây thường là một cách hiệu quả để ẩn khỏi quét mạng!

Chạy quét ping agnostic

Khi hệ thống đang ẩn khỏi quét ping, có thể khó biết điều gì đang trực tuyến. May mắn thay, Nmap cung cấp phương pháp ping agnostic để quét có thể rất hữu ích để tìm ra một số vấn đề này.

Khi Nmap chạy quét “bình thường”, trước tiên nó sẽ chạy quét ping và sau đó tiếp tục với quét cổng thực tế (của bất kỳ phạm vi cổng nào được chỉ định). Nếu máy chủ không phản hồi ping, chúng sẽ không được quét đầy đủ – điều này có nghĩa là ngay cả khi chúng có dịch vụ trực tuyến, các dịch vụ đó sẽ không bị phát hiện. Khi chạy quét cổng, việc thiếu dịch vụ hoặc máy chủ là một vấn đề rất nghiêm trọng!

Bằng cách chạy quét với cờ -Pn, Nmap sẽ hoàn toàn bỏ qua việc chạy quét ping ban đầu và sẽ quét tất cả các máy chủ trong phạm vi mục tiêu được chỉ định. Mặc dù điều này thường mất nhiều thời gian hơn để chạy – vì quét các máy chủ thực sự ngoại tuyến là lãng phí thời gian – nhưng nó cực kỳ hữu ích để tìm các máy chủ mà nếu không có thể đã bị bỏ lỡ.

(Hình ảnh)

Bạn có thể dễ dàng thấy trong ảnh chụp màn hình trước đó rằng dshaw.net – trang web cá nhân của tôi, mà vì mục đích của lần quét này đã được cấu hình để không phản hồi ping. vẫn được quét trong lần quét ping agnostic này. Khi quét các phạm vi lớn – chẳng hạn như mạng Class B – việc có thể phát hiện các máy chủ đang cố gắng xuất hiện ngoại tuyến có thể là vô giá đối với chuyên gia bảo mật.

Mặc dù nó không phải là một loại quét cụ thể, nhưng cũng có thể hữu ích khi sử dụng cờ -sL của Nmap – hoặc khả năng thực hiện quét danh sách đơn giản – để ping hoặc quét phạm vi mục tiêu. Điều này hữu ích để nhận tra cứu DNS ngược và để hiểu có bao nhiêu máy chủ trực tuyến trong một phạm vi được chỉ định.

(Hình ảnh)

Bằng cách quét – hoặc đúng hơn là không quét – theo cách này, có thể đạt được kết quả tuyệt vời.

Quét dịch vụ UDP

Cho đến nay chúng tôi đã đề cập đến các dịch vụ UDP, nhưng chưa nói về cách thực sự quét chúng. Dịch vụ UDP không kết nối, điều này làm cho việc quét chúng khó hơn so với quét cổng truyền thống – đôi khi kết nối cần dựa trên giao thức để nhận được bất kỳ phản hồi nào và ngay cả khi hầu hết các dịch vụ nhận được phản hồi thực tế, có thể mất một khoảng thời gian dài – nói cách khác, quét dịch vụ UDP thường chậm hơn và kém tin cậy hơn so với các đối tác TCP của chúng.

Điều đó nói rằng, mặc dù vậy, điều rất quan trọng là phải có thể quét các dịch vụ chỉ nghe trên UDP. Ví dụ, nhiều VPN chỉ có cổng nghe là UDP. Tương tự, NTP và DNS thường nghe độc quyền trên các cổng UDP. Vì lý do này, điều quan trọng là phải hiểu cách quét chúng.

Lưu ý ở đây là nói chung tốt nhất là thực hiện “vòng” quét đầu tiên là TCP only và lần quét thứ hai là UDP. Điều này rất quan trọng vì việc buộc toàn bộ quét phải chờ phản hồi UDP có thể khiến quét mất hơn năm giờ, khi nó đáng lẽ chỉ mất năm phút!

Cờ để quét dịch vụ UDP chỉ đơn giản là gọi -sU. Hãy chắc chắn rằng bạn làm như vậy một cách thận trọng và khi bạn có nhiều thời gian rảnh rỗi trong khi chờ quét!

[Lưu ý bổ sung, quét UDP yêu cầu quyền root để chạy.]

(Hình ảnh)

Bản quét tick.ucla.edu, một máy chủ NTP công cộng, cho thấy cổng 123 – Giao thức Thời gian Mạng (NTP) – đang chấp nhận kết nối từ bất kỳ đâu trên Internet.

Quét TCP đặc biệt

Chúng ta đã đề cập đến hai loại quét cơ bản mà Nmap đề xuất – quét kết nối TCP (-sT) và quét ẩn SYN (-sS). Các quét kết nối “đầy đủ” và “một nửa” này sẽ giúp bạn vượt qua hầu hết mọi tình huống và chắc chắn là các loại quét “thường xuyên” đối với hầu hết mọi chuyên gia bảo mật, quản trị viên hệ thống, kỹ sư mạng và người dùng nghiệp dư.

Tuy nhiên, mặc dù tính linh hoạt mà các loại quét này có thể tạo ra, nhưng có những lý do không thường xuyên để thử các cờ khác nhau trên các gói tin. Đối với những lần quét này, chúng tôi sẽ giới thiệu ba loại quét mới: quét FIN, Xmas Tree và Null.

Khái niệm đằng sau việc chạy các quét này là một cổng đóng sẽ cố gắng đặt lại kết nối bằng cách phát ra gói RST (đặt lại), trong khi một cổng mở sẽ chỉ bỏ kết nối hoàn toàn. Điều này rất hữu ích vì nhiều Hệ thống Phát hiện Xâm nhập (IDS) đang tìm kiếm các quét SYN – và người kiểm tra thâm nhập lén lút không bao giờ muốn bị bắt!

(Hình ảnh)

Như bạn có thể thấy trong ví dụ quét trước đó, khi chạy quét FIN (-sF) trên máy chủ web của riêng tôi, không có phản hồi nào cho yêu cầu FIN – điều này có lý vì có một dịch vụ đang hoạt động trên cổng 80 của dshaw.net.

Loại quét tiếp theo được gọi là quét Xmas Tree – được gọi như vậy vì nó giống như một gói tin được thắp sáng như cây thông Noel! Quét Xmas Tree (-sX) hoạt động bằng cách gắn cờ FIN, URG và PUSH trên tiêu đề gói tin.

Cuối cùng trong ba loại quét này là quét null, không đặt cờ nào trên tiêu đề gói tin được gửi đến cổng mục tiêu. Quét này có thể được khởi chạy bằng cách sử dụng tùy chọn -sN. Hãy chắc chắn rằng nếu bạn đang khởi chạy quét null, bạn viết hoa N – nếu không, bạn sẽ vô tình chạy quét ping (mà chúng ta đã đề cập trong phần Phương pháp phát hiện máy chủ).

Mặc dù các loại quét này thường có thể rất hữu ích, nhưng cần lưu ý rằng quét FIN, Xmas và NULL được biết là không hoạt động đối với các máy chủ Microsoft Windows.

Phát hiện hệ điều hành

Mặc dù việc có thể quét cổng rất hữu ích – và sử dụng các tiêu đề gói tin khác nhau để tạo ra kết quả tốt nhất, chính xác nhất – có một số điều mà quét cổng đơn giản không phải lúc nào cũng có thể đạt được một cách đáng tin cậy. Một trong những yếu tố quan trọng nhất trong số này là phát hiện hệ điều hành.

Khi cố gắng xác định và tấn công mục tiêu, một trong những thông tin hữu ích nhất là hệ điều hành mà máy đó đang chạy. Vì nhiều phần mềm có thể chạy trên nhiều hệ điều hành, nên theo truyền thống, đây là một điều “khó” để giải quyết. Tuy nhiên, các nhà phát triển tại Nmap – với sự trợ giúp của cộng đồng bảo mật thông tin nói chung – đã có thể biên soạn cơ sở dữ liệu về dấu vân tay hệ điều hành phổ biến nhất (và thậm chí một số rất hiếm), có thể liên tục giúp xác định hệ điều hành nào đang chạy mục tiêu. Đây là một cờ dễ nhớ – bạn chỉ cần gọi quét với cờ -O.

(Hình ảnh)

Như bạn có thể thấy, quét thiết bị bảo mật Cisco này đã dễ dàng xác định một số phần thông tin quan trọng. Đầu tiên, chúng ta có thể thấy địa chỉ MAC – và ai tạo ra thiết bị đó. Tuy nhiên, hãy nhớ rằng, như chúng ta đã học trong Chương 2, Kiến thức cơ bản về mạng, chúng ta chỉ có thể thấy địa chỉ MAC nếu chúng ta đang quét trên mạng cục bộ – không phải qua Internet. Thứ hai, chúng ta có thể thấy CPE của hệ điều hành – và thậm chí cả chi tiết hệ điều hành: tường lửa Cisco SA520, chạy kernel Linux 2.6. Đây chắc chắn là một trong những thông tin có giá trị nhất mà chúng ta có thể lấy ra từ quét cổng.

Mặc dù sẽ rất tuyệt vời nếu việc phát hiện hệ điều hành luôn đơn giản và súc tích như trong ví dụ này, nhưng không phải vậy. Tuy nhiên, tin tốt là khi bạn bắt đầu quét hệ điều hành, Nmap sẽ cố gắng đánh giá mức độ tin cậy của nó đối với kết quả mà nó đưa ra. Trong ví dụ sau, bạn có thể thấy rằng mặc dù Nmap không hoàn toàn chắc chắn máy của tôi đang chạy hệ điều hành nào (điều này có lý khi bạn xem xét tần suất các bản vá thay đổi cách thức hoạt động của hệ điều hành bên dưới), nó vẫn có thể cung cấp cho chúng ta một ý tưởng khá tốt!

(Hình ảnh)

Tăng độ chi tiết trong quét

Như bạn có thể đã nhận thấy trong suốt cuốn sách, nhiều thông tin hơn hầu như luôn luôn tốt hơn khi chạy quét. May mắn thay, các nhà phát triển Nmap cho phép chúng tôi nhanh chóng và dễ dàng lấy thông tin về quét trong khi nó đang chạy bằng cách bắt đầu quét với độ chi tiết tăng lên.

Độ chi tiết cho phép thời gian, song song và thông tin gỡ lỗi nội bộ hiển thị trực tiếp trên bảng điều khiển trong khi quét chạy. Điều này có thể rất tốt để tìm ra khi nào chúng ta cần cố gắng tối ưu hóa quét theo một trong một số cách (mà chúng ta sẽ tìm hiểu trong chương tiếp theo). Khi chạy quét ở độ chi tiết tăng lên, bạn cũng có thể nhấn Enter để xem quét đã tiến triển đến đâu và còn bao xa trước khi hoàn thành tệp mục tiêu hiện tại. Có một số mức độ chi tiết khác nhau, nhưng tôi thường sử dụng mức thứ ba.

Mức độ chi tiết đầu tiên cung cấp thông tin rất cơ bản về tiến trình của quét và có thể được gọi bằng cách sử dụng cờ -v. Mức độ chi tiết thứ hai cung cấp thêm thông tin, bao gồm một số thông tin về mạng và gói tin, và có thể được gọi bằng cách sử dụng -vv làm cờ. Cuối cùng, độ chi tiết gấp ba – cung cấp thông tin nhiều nhất về quét – có thể được gọi bằng cờ -vvv. Nếu bạn muốn làm cho Nmap ít chi tiết hơn bình thường, bạn cũng có thể sử dụng cờ –reduce-verbosity.

(Hình ảnh)

Bạn có thể thấy trong ảnh chụp màn hình trước đó rằng trên quét một cổng này, có nhiều thông tin về thời gian và gói tin hơn đáng kể được hiển thị. Điều này có thể cực kỳ hữu ích, đặc biệt là trong các bản quét dài – chẳng hạn như những bản quét bao gồm hơn 1.000 máy chủ – để hiểu rõ hơn về những gì Nmap đang làm tại thời điểm đó. Quan trọng hơn, thông tin này có thể được sử dụng để xác định xem liệu thời gian, song song hoặc các điều chỉnh hiệu suất khác có cần được thực hiện hay không. Ví dụ: nếu quét đang tiến triển bình thường, nhưng chỉ có một vài máy chủ được hoàn thành tại một thời điểm, chúng ta biết tăng song song để làm cho toàn bộ quét diễn ra nhanh hơn. Tuy nhiên, nếu chúng ta nhận được lỗi hết thời gian mạng, chúng ta biết rằng chúng ta đang quét quá nhanh – trong trường hợp đó, chúng ta muốn sử dụng cờ thời gian chậm hơn.

Theo dõi gói tin

Tương tự như việc tăng độ chi tiết của quét, việc hiểu các bước nhảy mạng xảy ra giữa các máy chủ là vô giá – và để xem lưu lượng mạng thực tế đi qua. Mặc dù có thể sử dụng các công cụ hệ thống như traceroute và tcpdump để tìm ra vị trí của máy chủ mục tiêu trên mạng, nhưng có thể là một quá trình khó khăn (và tốn thời gian) để làm điều này đối với nhiều máy chủ cùng một lúc.

Thay vì sử dụng các công cụ bên ngoài, Nmap cho phép theo dõi gói tin cho mỗi lần quét – hiển thị chính xác thông tin chúng ta cần. Thay vì coi đây là một tính năng bảo mật (mặc dù nó chắc chắn có các mục đích sử dụng liên quan đến bảo mật), tốt nhất nên coi đây là một công cụ dành cho quản trị viên hệ thống và kỹ sư mạng.

(Hình ảnh)

Ví dụ theo dõi gói tin này hiển thị đầu ra kiểu tcpdump từ Nmap đến các máy mục tiêu. Mặc dù nó không cung cấp giá trị quá mức trong quét một cổng đơn giản này, nhưng thông tin có thể rất tốt để hiểu tắc nghẽn mạng, mất gói tin, v.v., trên các bản quét lớn hơn.

Tóm tắt

Trong chương này, chúng ta đã đề cập đến cách chọn mục tiêu, chạy quét mặc định, kiểm tra phiên bản dịch vụ, ghi lại quét (và ý nghĩa của các loại nhật ký khác nhau), chỉ định phạm vi quét đặc biệt và tìm hiểu lý do cho kết quả Nmap.

Trong chương tiếp theo, chúng ta sẽ nói về cách đảm bảo quét của bạn đang chạy ở hiệu suất cao nhất. Nmap có một số tính năng có thể giúp quét chạy nhanh chóng và cung cấp kết quả chính xác nhất có thể. Mỗi cải tiến về thời gian, song song và hiệu suất này sẽ được phân loại và giải thích trong chương tiếp theo.


Chương 5: Tối ưu hóa Hiệu suất Nmap

Bây giờ chúng ta đã hoàn toàn có thể quét nhiều loại máy chủ khác nhau và vượt qua rất nhiều phương pháp mà quản trị viên hệ thống và kỹ sư mạng sử dụng để bảo vệ hoặc che giấu máy của họ. Tuyệt vời! Tại thời điểm này, chúng ta sẽ bắt đầu xem xét một số nét vẽ rộng hơn mà Nmap có thể giải quyết: cụ thể là khó khăn mà chúng ta có thể gặp phải nếu chúng ta cố gắng quét một lượng lớn địa chỉ IP có thể tạo ra gián đoạn hiệu suất.

Thật không may, việc sử dụng các tùy chọn Nmap nâng cao, mà chúng ta đã tìm hiểu trong chương trước, có thể khiến quét mất nhiều thời gian hơn đáng kể so với chúng ta có thể có. Các kỹ thuật tối ưu hóa hiệu suất là một số cờ Nmap ít được sử dụng nhất nhưng hữu ích nhất, vì vậy bạn nên tìm hiểu chúng thật kỹ – và sử dụng chúng khi cần thiết.

Trong chương này, chúng ta sẽ đề cập đến:

  • Tối ưu hóa thời gian Nmap cơ bản
  • Kích thước nhóm máy chủ tùy chỉnh
  • Cách tăng hoặc giảm song song của Nmap
  • Cách xử lý máy chủ bị kẹt
  • Cách trì hoãn (hoặc tăng tốc độ) các gói tin riêng lẻ

Tối ưu hóa thời gian Nmap

Cách dễ nhất để làm cho quét chạy nhanh hơn là sử dụng các cờ thời gian tích hợp. Các cờ này được gọi bằng cách sử dụng -T và một số từ 0 (chậm nhất) đến 5 (nhanh nhất). Tốc độ quét mặc định là -T3, ngay ở giữa.

(Hình ảnh)

Có một số rủi ro khi sử dụng quét nhanh hơn đáng kể, vì nó tạo ra một số khía cạnh không đáng tin cậy trong quét. Đặc biệt, nếu giao diện mạng của bạn được biết là đáng tin cậy, thì nên sử dụng các tùy chọn này một cách thận trọng!

Các cờ thời gian mặc định thay đổi sáu yếu tố khác nhau – nhiều yếu tố trong số đó chúng ta sẽ đi sâu vào chi tiết cụ thể, sau này trong chương này. Cụ thể, các cờ thời gian thay đổi các giá trị riêng lẻ của initial_rtt_timeout, min_rtt_timeout, max_rtt_timeout, max_parallelism, scan_delay và max_scan_delay. Đừng lo lắng nếu những cờ này nghe có vẻ lạ đối với bạn – chúng ta sẽ đề cập đến những cờ khác nhau mà bạn cần biết đủ chi tiết để bạn có thể gỡ lỗi nhiều loại sự cố về mạng và hiệu suất khác nhau.

Quản trị viên hệ thống cũng làm cho mục tiêu ít bị tổn thương hơn bằng cách tăng thời gian phản hồi, vì phần lớn thời gian thông tin máy chủ có thể được đọc từ các giá trị TTL. Chạy quét “insane” rõ ràng có thể làm cho một khối mạng lớn chạy nhanh hơn, nhưng điều thú vị cần lưu ý là ở phía bên kia của phổ, quét “lén lút” và “hoang tưởng” (-T1 và -T0) có thể rất hiệu quả trong việc “ẩn” quét cổng.

(Hình ảnh)

Như bạn có thể thấy trong ảnh chụp màn hình trước đó, quét -T5 đối với scanme.nmap.org (bao gồm tất cả các cổng) chỉ mất một phút (và một giây), như có thể thấy trong đầu ra từ lệnh time và máy tính thời gian của riêng Nmap. Mặt khác, chạy quét -T1 – còn được gọi là “lén lút” – mất nhiều thời gian hơn đáng kể.

(Hình ảnh)

Để hiển thị hiệu ứng thực sự của quét chậm dài hạn, chúng tôi đã chạy quét -T1 đối với cùng một máy chủ – bạn có thể thấy ở đây rằng sau mười sáu giờ, quét vẫn chỉ hoàn thành 2,75% – đó là một quét rất chậm! Thật dễ dàng để thấy cách chúng tôi không muốn các tùy chọn quét này đi qua một khối địa chỉ IP lớn, nhưng để cực kỳ lén lút khi tham gia với khách hàng (chẳng hạn như chạy IDS hoặc IPS), nó có thể là vô giá.

Kích thước nhóm máy chủ tùy chỉnh

Để quét máy chủ một cách hiệu quả, Nmap sử dụng các nhóm máy chủ mà nó quét cùng một lúc. Giả sử kết nối Internet của bạn (và sức mạnh xử lý máy tính) là đủ, nói chung tốt hơn là tăng kích thước nhóm máy chủ để hoàn thành quét lớn nhanh chóng. Ví dụ: nếu bạn đang quét 1.000 máy chủ với kích thước nhóm máy chủ là 250, sẽ chỉ mất bốn “lần quét” để hoàn thành toàn bộ quét song song.

Tuy nhiên, người ta nên cân nhắc cẩn thận những gì họ đang tìm cách đạt được bằng cách thay đổi kích thước nhóm máy chủ. Lợi ích của việc quét nhiều máy chủ cùng một lúc là rõ ràng, nhưng nhược điểm có thể không phải là – nếu bạn đang quét một nhóm lớn, bạn phải đợi toàn bộ nhóm máy chủ hoàn thành quét trước khi xem bất kỳ kết quả nào và chuyển sang nhóm khác. Nếu bạn đang cố gắng xem kết quả nhanh chóng, một nhóm máy chủ nhỏ hơn sẽ tốt hơn cho quét cụ thể của bạn.

Theo mặc định, Nmap cố gắng thực hiện phương pháp tiếp cận trung gian động đối với kích thước nhóm máy chủ: nó thay đổi động các nhóm máy chủ để phù hợp với quét chi tiết (để chúng ta có thể thấy những gì đang xảy ra) và hiệu quả (để toàn bộ quét kết thúc nhanh chóng). Nmap bắt đầu nhóm máy chủ ở mức thấp là 4 hoặc 5 và tăng chúng lên đến 1024 – tất cả tự động.

Tuy nhiên, nếu bạn đang tìm kiếm khả năng kiểm soát tinh chỉnh, có hai cờ nhóm máy chủ mà bạn nên ghi nhớ: –min-hostgroup và –max-hostgroup. Ví dụ: nếu bạn định quét toàn bộ mạng lớp C, việc chỉ định kích thước nhóm là 256 sẽ kết thúc quá trình chạy này trong một lần chuyển song song lớn – làm tăng đáng kể hiệu quả của công cụ quét.

Cần lưu ý rằng đặc tả nhóm máy chủ không hoạt động đối với quét khám phá máy chủ, bao gồm quét ping – Nmap sẽ tự động sử dụng các nhóm máy chủ rất lớn (thường là 4096) để làm cho chúng chạy hiệu quả.

Tăng và giảm song song

Mặc dù tùy chỉnh kích thước nhóm máy chủ mà chúng ta vừa tìm hiểu có thể giúp tăng hoặc giảm song song trong quét đầy đủ, nhưng nó không xử lý số lượng đầu dò đang được gửi ra tại một thời điểm. Tuy nhiên, các cờ song song thực tế có thể giúp chúng ta xử lý điều đó!

Như với nhiều thứ, Nmap sẽ cố gắng tự động tạo các nhóm quét hiệu quả nhất, điều này rất tốt cho hầu hết mọi trường hợp. Theo kinh nghiệm của tôi, việc thay đổi số lượng đầu dò được gửi đồng thời mà không được đào tạo bài bản về mạng có thể dẫn đến thảm họa – nhưng không phải lúc nào cũng vậy.

Bằng cách tăng giá trị của –min-parallelism – giả sử lên đến 10 hoặc 12 – bạn có thể buộc Nmap quét ít nhất là nhanh như vậy. Nmap vẫn sẽ làm cho quét chạy nhanh hơn nếu cần, điều này làm giảm một số rủi ro.

Mặt khác, có thể đặt giá trị của –max-parallelism xuống thấp đến 1. Điều này rất hữu ích theo nghĩa là bạn có thể buộc Nmap chỉ gửi một đầu dò tại một thời điểm, nhưng cũng buộc công cụ chạy cực kỳ chậm (như bạn có thể tưởng tượng). Chúng ta có thể sử dụng các thủ thuật như thế này để đánh lừa các hệ thống bảo mật hoặc để đảm bảo rằng độ tin cậy của quét của chúng ta không bao giờ bị ảnh hưởng bởi các sự cố liên quan đến mạng.

Nếu bạn thấy các máy chủ dường như không kết thúc hoặc bạn rất quan tâm đến số lượng máy chủ được quét trong một nhóm hiện tại, việc điều chỉnh song song có thể rất hữu ích.

Xử lý máy chủ bị kẹt

Thật không may, khi xử lý các khối địa chỉ IP lớn – điều này rất thường xuyên xảy ra nếu bạn đang quét một doanh nghiệp lớn, cho dù vì mục đích bảo mật nội bộ hay tham gia với khách hàng – thì việc xử lý các máy chủ bị kẹt không phải là hiếm.

Khi máy chủ bị kẹt, có nghĩa là có điều gì đó đang ngăn quét hoàn thành với tốc độ bình thường. Điều này có thể do một điều gì đó lành tính như trục trặc mạng ở một trong hai đầu của kết nối hoặc một điều gì đó cố ý hơn chẳng hạn như phần mềm bảo mật đang cố tình làm cho máy chủ mục tiêu phản hồi rất chậm hoặc không nhất quán – thực sự phá vỡ quét.

(Hình ảnh)

Để minh họa, tôi sẽ bắt đầu quét ping agnostic (-Pn) đối với máy chủ không tồn tại trên mạng của tôi. Không có cách nào bạn có thể nhận được kết quả từ nó, nhưng nó vẫn có thể mất rất nhiều thời gian để quét.

(Hình ảnh)

Bạn có thể thấy trong ảnh chụp màn hình trước đó rằng phải mất 1.051 giây hoặc mười bảy phút để quét máy chủ không tồn tại này. Nmap đã cố gắng hết sức để thay đổi các biến RTT để bù đắp cho bất kỳ sự cố mạng nào, nhưng cuối cùng, nó mất rất nhiều thời gian để nhận ra rằng không có gì ở đó. Hãy nghĩ xem điều gì sẽ xảy ra nếu bạn đang quét mạng Class B! Chúng ta sẽ phải đợi hàng ngày, hàng tuần hoặc hàng năm để quét hoàn thành. Không ai muốn xem màn hình Nmap không phản hồi!

(Hình ảnh)

Trong lần quét thứ hai này đối với máy chủ không tồn tại, chúng tôi đã giữ nguyên các cờ, nhưng đã thay đổi –host-timeout thành 1 phút. Như bạn có thể thấy, sau 60 giây, Nmap đã từ bỏ máy chủ và kết thúc quét – một phần mười bảy thời gian cần thiết để hoàn thành!

Cờ –host-timeout rất hữu ích, đặc biệt là trong các bản quét lớn, nhưng hãy đảm bảo rằng bạn không đặt thời gian quá thấp – hoặc Nmap sẽ từ bỏ các máy chủ mà nó vẫn đang tích cực quét! Trong nhiều lần đánh giá, nhóm của tôi sẽ đặt –host-timeout thành 10 phút, thường là đủ thời gian để nhiều lần quét cổng hoàn thành mà không có lỗi cho mỗi máy chủ. Kết hợp với song song và tùy chỉnh nhóm máy chủ, việc đặt cờ thời gian chờ máy chủ có thể tiết kiệm một lượng thời gian đáng kể trên các máy chủ mục tiêu lớn hơn.

Trì hoãn và tăng tốc độ thăm dò

Cờ cải thiện thời gian quan trọng cuối cùng cần hiểu là trì hoãn và tăng tốc độ trực tiếp. Đây có lẽ là cờ tối ưu hóa hiệu suất được tinh chỉnh nhất và nói chung chỉ nên được sử dụng nếu có một vấn đề cụ thể mà bạn đang cố gắng giải quyết hoặc một tình huống mà bạn đang cố gắng tạo ra.

Cờ đầu tiên trong số này, –scan-delay, chỉ định khoảng thời gian mà Nmap nên đợi, không làm gì cả, giữa các lần thăm dò. Điều này có thể cực kỳ hữu ích trong việc làm chậm quét (và đôi khi tăng tốc chúng, với độ trễ quét thấp). Một lần nữa, cách sử dụng phổ biến nhất của việc làm chậm quét là để tránh bị quản trị viên mục tiêu hoặc hệ thống bảo mật phát hiện hoặc cố gắng tránh các sự cố nghẽn mạng. Vì nhiều hệ thống sử dụng tốc độ mà các yêu cầu đang được thực hiện để xác định xem máy có đang bị tấn công hay không, nên đây có thể là một kỹ thuật rất lén lút mà không cần nỗ lực nhiều từ phía người kiểm tra. Cũng cần lưu ý rằng –max-scan-delay có thể được sử dụng cùng với các cờ thời gian khác để thay thế chúng và đảm bảo rằng độ trễ quét không bao giờ chậm hơn một khoảng thời gian nhất định.

(Hình ảnh)

Bạn có thể thấy trong ảnh chụp màn hình trước đó rằng việc tăng –scan-delay lên 5 giây đã khiến quét bốn cổng (cộng với quét ping) mất 41 giây. Không tốt cho hiệu quả, nhưng hoàn hảo để che giấu những gì đang xảy ra!

Cuối cùng, việc kiểm soát trực tiếp tốc độ của Nmap cũng có thể được đặt bằng cách sử dụng kết hợp –min-rate và –max-rate, kiểm soát các gói tin mỗi giây được gửi qua mạng. Cần lưu ý rằng các điều khiển nội bộ của Nmap đối với các cài đặt này rất tốt, nhưng đôi khi cần phải kiểm soát tinh chỉnh hơn. Bằng cách đặt các cờ như –min-rate 1 và –max-rate 100, chúng ta có thể cho phép công cụ thời gian tích hợp của Nmap kiểm soát hiệu quả – nhưng không bao giờ gửi quá 100 gói tin mỗi giây hoặc ít hơn 1 gói tin mỗi giây. Như với nhiều cờ này, điều quan trọng là không bao giờ đặt giá trị tối thiểu quá cao hoặc giá trị tối đa quá thấp!

Tóm tắt

Chương này đã dạy cho chúng ta một số cờ thời gian rất có giá trị – Nmap đủ linh hoạt để bao gồm nhiều tùy chọn có thể giúp chúng ta đảm bảo rằng chúng ta có toàn quyền kiểm soát thời gian, để tối đa hóa hiệu quả và khắc phục các cạm bẫy tiềm ẩn.

Trong chương này, chúng ta đã đề cập đến tối ưu hóa thời gian Nmap cơ bản, kích thước nhóm máy chủ tùy chỉnh, cách tăng hoặc giảm song song của Nmap, cách xử lý máy chủ bị kẹt và cách trì hoãn (hoặc tăng tốc độ) các gói tin riêng lẻ.

Trong chương tiếp theo, chúng ta sẽ nói về một trong những tính năng thú vị và mạnh mẽ nhất của Nmap: Nmap Scripting Engine (NSE). Chúng ta sẽ nói về NSE là gì, nó có thể làm gì và cách gọi các tập lệnh thú vị bằng cách sử dụng nó.


Chương 6: Giới thiệu về Nmap Scripting Engine

Mặc dù việc có thể thực hiện quét cổng là một phần không thể thiếu trong việc sử dụng bộ công cụ Nmap, nhưng các nhà phát triển của Nmap đã tạo ra một công cụ rất mạnh mẽ được tích hợp trong công cụ: Nmap Scripting Engine (NSE). Chương này giới thiệu NSE và bao gồm tất cả các chủ đề cần thiết để sử dụng các tập lệnh được viết đáng tin cậy trong kho tập lệnh Nmap, để thực hiện quét trinh sát bao gồm nhiều hơn những gì các cổng đang mở và dịch vụ nào đang nghe.

Trong chương này, chúng ta sẽ đề cập đến:

  • Lịch sử của NSE
  • Cách NSE hoạt động
  • Cách tìm tập lệnh hiện có để sử dụng
  • Cách chạy tập lệnh bằng NSE

Lịch sử của NSE

Vào giữa những năm 2000, Nmap đã tự khẳng định mình là công cụ hàng đầu trong các công cụ quét cổng – và các công cụ bảo mật nói chung – cho dù là nguồn mở hay không. Mặc dù đó là một cuộc chiến liên tục để liên tục đổi mới và tối ưu hóa, Nmap chỉ có thể được coi là một dự án cực kỳ thành công.

Do sự phổ biến của nó, và thực tế là nó là một dự án nguồn mở có hồ sơ tương đối cao, Nmap đã được chọn tham gia Google Summer of Code nhiều lần. Google Summer of Code là một dự án thực tập / liên kết phát triển phần mềm, trong đó sinh viên được chọn và đưa vào các nhóm phần mềm nguồn mở để xây dựng các tính năng mới vào các dự án hiện có.

Vào tháng 5 năm 2006 – khi phiên bản Nmap được phát hành hiện tại chỉ là 4.0 – Nmap đã được chọn cho mùa Google Summer of Code thứ hai. Năm trước, năm 2005, một số cải tiến đã được thực hiện thông qua việc viết mã của sinh viên cho dự án Nmap: sinh viên đã viết một triển khai đương đại của Netcat (được gọi là Ncat), nâng cấp phát hiện hệ điều hành cho Nmap lên thế hệ thứ hai (và tốt hơn nhiều) và tạo ra một GUI nhỏ, đơn giản hóa sẽ sau này trở thành Zenmap.

Đối với lần chạy thứ hai này, sau một mùa hè đầu tiên cực kỳ thành công, các nhà phát triển tham gia thậm chí còn tham vọng hơn. Vì Nmap rõ ràng có một bộ tính năng tuyệt vời, tại sao không làm cho các tính năng đó có thể mở rộng bởi cộng đồng lớn hơn? Các lỗ hổng và kỹ thuật quét mới đang được tiên phong trên cơ sở rất thường xuyên và các bản phát hành Nmap đầy đủ không thể theo kịp những thứ mà các chuyên gia bảo mật cần đánh giá. Mỗi khi có một lỗ hổng mới xuất hiện, các chuyên gia bảo mật (và cả tin tặc!) sẽ quét các dịch vụ dễ bị tấn công bằng Nmap, nhưng chỉ có thể kiểm tra xem các phiên bản phần mềm có dễ bị tấn công hay không bằng cách sử dụng phân tích thủ công: rõ ràng, đây không phải là cách sử dụng thời gian hiệu quả.

Do các tài nguyên mới do các nhà phát triển Google Summer of Code cấp, một khuôn khổ tập lệnh tùy ý đã được tạo ra cho phép người dùng kích hoạt các kiểm tra bổ sung dựa trên một số cổng hoặc dịch vụ đang mở nhất định. Điều này có nghĩa là, ví dụ: nếu bạn đang tìm kiếm một tệp cụ thể trên tất cả các máy chủ web – ví dụ: robots.txt – bạn có thể dễ dàng tạo một tập lệnh có thể kiểm tra nó trên tất cả các dịch vụ HTTP và HTTPS. NSE (và việc bao gồm các tập lệnh Nmap trong cài đặt mặc định của Nmap) đã thực sự cách mạng hóa tính linh hoạt của bộ công cụ.

Sau nhiều tháng làm việc chăm chỉ, NSE đã được phát hành vào tháng 12 năm 2006, được đóng gói với bản phát hành Nmap 4.21ALPHA1. Các tập lệnh đi kèm với NSE đã tiếp tục phát triển về độ phức tạp và khả năng sử dụng và là tài nguyên tuyệt vời để biến Nmap thành bộ công cụ bảo mật đầy đủ tính năng.

Hoạt động bên trong của NSE

NSE là một framework chạy mã được viết bằng ngôn ngữ lập trình Lua với các cờ cụ thể mà công cụ có thể phân tích cú pháp. Lua là một ngôn ngữ lập trình nhẹ, nhanh và được thông dịch – một ngôn ngữ nổi tiếng nhất với việc viết kịch bản giao diện người dùng cho các trò chơi máy tính như World of Warcraft – có cú pháp tương tự như các ngôn ngữ thông dịch đương đại khác.

(Hình ảnh)

Nếu bạn đã từng thấy mã được viết bằng Python hoặc Ruby, Lua sẽ không quá xa lạ đối với bạn.

Ảnh chụp màn hình trước đó hiển thị tập lệnh Nmap xác định thông tin về Bitcoin (được viết bởi Patrik Karlsson). Đừng lo lắng nếu bạn chưa hiểu nó – đó là điều chúng ta sẽ đề cập trong Chương 7, Viết tập lệnh Nmap – nhưng bạn có thể thấy rằng mã được sử dụng để tạo một tập lệnh Nmap tương đối phức tạp trông rất đơn giản. Đây là toàn bộ điểm của NSE! Trước đây, các kỹ sư bảo mật và quản trị viên hệ thống phải xuất kết quả Nmap, tìm thông tin họ đang tìm kiếm và sau đó sử dụng các công cụ của bên thứ ba để hỗ trợ họ; bây giờ họ có thể tìm một tập lệnh phục vụ mục đích của họ hoặc tự viết một tập lệnh đơn giản. Nhiều người kiểm tra thâm nhập có thể tận dụng ngôn ngữ tập lệnh Nmap để thậm chí vũ khí hóa công cụ cho các khai thác bảo mật – điều mà chúng ta sẽ đề cập chi tiết hơn trong Chương 10, Kiểm tra thâm nhập với Metasploit.

Tìm tập lệnh Nmap

Nhiều tập lệnh Nmap đi kèm với Nmap và đã được đóng gói sẵn trên hệ thống của bạn. Tuy nhiên, có thể khó xác định tập lệnh nào bạn muốn chạy cho mỗi lần quét cụ thể – hoặc đánh giá – mà bạn có thể đang thực hiện. May mắn thay, cổng thông tin tài liệu NSE là một trong những khía cạnh chuyên sâu và được ghi chép đầy đủ nhất của toàn bộ dự án Nmap.

[Lưu ý: Bằng cách truy cập http://nmap.org/nsedoc/, bạn có thể xem tất cả các tập lệnh là một phần của kho tập lệnh Nmap chính thức.]

(Hình ảnh)

Ảnh chụp màn hình trước đó hiển thị trang web cổng thông tin tham khảo Tài liệu Nmap Scripting Engine (NSEDoc), cũng như tất cả các tập lệnh Nmap chính thức tại thời điểm viết cuốn sách này. Mỗi tập lệnh có một đoạn nhỏ bên cạnh tên của nó, cung cấp mô tả ngắn gọn về những gì nó được thiết kế để làm. Tại thời điểm viết bài, có 490 và 113 tập lệnh Nmap là một phần của tài liệu chính thức – đó là rất nhiều thứ bạn có thể làm với NSE!

Các tập lệnh này được chia thành một số danh mục, mỗi danh mục có trường hợp sử dụng cụ thể của riêng nó. Cần lưu ý rằng đôi khi các tập lệnh này có thể nằm trong một số danh mục, tùy thuộc vào chức năng đầy đủ của tập lệnh. Các danh mục và định nghĩa của chúng như sau:

  • Auth: Các tập lệnh này cố gắng xác thực với các dịch vụ và có thể xác minh thông tin đăng nhập đã tìm thấy
  • Broadcast: Các tập lệnh này phát một số giao thức nhất định để tìm ra xem chúng có đang nghe hay không
  • Brute: Các tập lệnh này cố gắng tấn công brute force hoặc dựa trên từ điển đối với các dịch vụ mạng
  • Default: Đây là danh mục mặc định của các tập lệnh có thể chạy khi quét được bắt đầu
  • Discovery: Các tập lệnh này cố gắng liệt kê thông tin nhạy cảm từ máy chủ và dịch vụ mạng
  • Denial of Service (DoS): Các tập lệnh này có thể gây gián đoạn dịch vụ đang được quét
  • Exploit: Các tập lệnh này cố gắng thực thi một khai thác khai thác lỗ hổng nhất định
  • External: Các tập lệnh này truy vấn cơ sở dữ liệu của bên thứ ba, chẳng hạn như danh sách đen DNS, để thu thập thêm thông tin về mục tiêu
  • Fuzzer: Các tập lệnh này gửi thông tin “rác” ngẫu nhiên đến các dịch vụ để cố gắng tìm ra lỗ hổng trong phần mềm
  • Intrusive: Các tập lệnh này là một danh mục chung cho bất kỳ tập lệnh nào có thể gây hại hoặc xâm nhập vào chính dịch vụ
  • Malware: Các tập lệnh này cố gắng tìm các trường hợp phần mềm độc hại đã biết.
  • Safe: Các tập lệnh này được xác minh là không gây hại cho máy chủ
  • Version: Các tập lệnh này cố gắng xác định các phiên bản cụ thể – cũng như tiết lộ thông tin – từ các dịch vụ cụ thể theo cách chuyên sâu hơn so với phát hiện phiên bản dịch vụ thông thường
  • Vuln: Các tập lệnh này xác định các lỗ hổng đã biết trong các dịch vụ

Điều quan trọng là phải biết bạn muốn chạy danh mục nào, vì một số danh mục này – đặc biệt là DoS, khai thác và xâm nhập – có thể nguy hiểm khi chạy đối với các hệ thống yếu hoặc sản xuất. Việc bao gồm các tập lệnh Nmap này trong đánh giá bảo mật có thể dễ dàng làm tăng tiện ích của Nmap một cách rất đáng kể.

Chạy tập lệnh Nmap

Chạy tập lệnh Nmap rất dễ dàng – và một số, danh mục “mặc định”, thậm chí sẽ tự chạy như một phần của quét bình thường. Một số tập lệnh được thiết kế để chỉ cung cấp thêm thông tin về mục tiêu, trong khi những tập lệnh khác sẽ đi xa đến mức tích cực khai thác nó (danh mục “khai thác”) hoặc thậm chí đưa nó ngoại tuyến (danh mục “DoS”).

Bước đầu tiên để chạy tập lệnh Nmap là một phần của kho lưu trữ NSEDoc thực tế là xác minh rằng tập lệnh được lưu trữ cục bộ. Không giống như bản thân công cụ Nmap, kho lưu trữ tập lệnh Nmap thường xuyên được cập nhật – vì vậy bạn nên luôn xác minh rằng bạn có phiên bản cập nhật nhất. Bạn có thể cập nhật tập lệnh NSE bằng cách chạy Nmap với cờ –script-updatedb, cập nhật cơ sở dữ liệu tập lệnh.

(Hình ảnh)

Khi cơ sở dữ liệu tập lệnh được cập nhật, bạn có thể chọn tập lệnh bằng cách sử dụng thẻ –script. Bạn có thể chọn các tập lệnh cụ thể cho một mục đích nhất định hoặc bạn có thể chọn các danh mục tập lệnh rộng. May mắn thay, các nhà phát triển Nmap cho phép chọn các danh mục tập lệnh cùng một lúc. Ví dụ: giả sử chúng ta muốn chạy tất cả các tập lệnh mặc định, nhưng cũng tất cả các tập lệnh xâm nhập; chúng ta có thể chạy quét bằng cờ –script default or intrusive:

(Hình ảnh)

Bạn có thể thấy trong ảnh chụp màn hình trước đó rằng việc chạy các tập lệnh mặc định ở đây rõ ràng đã gắn cờ một số phát hiện ngay lập tức. Nếu bạn chạy cùng một quét với -vv để bật chế độ chi tiết kép trên quét, bạn cũng có thể thấy số lượng tập lệnh được tải đối với mục tiêu đã cho (trong trường hợp này là 93). Trong trường hợp cụ thể này, tập lệnh http-title đã hiển thị tiêu đề HTML (Go ahead and ScanMe!) trong chính kết quả quét.

Nếu việc chọn quét theo danh mục hoặc danh mục là quá nhiều, bạn cũng có thể chọn quét theo tên cụ thể của chúng hoặc sử dụng ký tự đại diện. Ví dụ: nếu tôi muốn quét máy chủ web và tải tất cả các mô-đun HTTP trong kho lưu trữ quét mặc định, tôi sẽ quét với cờ –script “http-*”:

(Hình ảnh)

Bạn có thể thấy rằng việc khởi chạy quét với tên tập lệnh ký tự đại diện “http-*” hoạt động trong việc tải mọi tập lệnh, nhưng có một vài lỗi xuất hiện. Một số tập lệnh nhất định nhận các tham số, vì vậy nếu tải nhiều tập lệnh, điều quan trọng là phải hiểu tập lệnh nào đang được tải. Các tập lệnh có thể kích hoạt chính xác tại các cổng HTTP sẽ vẫn khởi chạy, nhưng những tập lệnh yêu cầu thông tin bổ sung sẽ không thành công (và không trả về bất kỳ thông tin hữu ích nào). Để cung cấp thêm thông tin cho các tập lệnh Nmap, bạn có thể cung cấp các đối số với cờ –script-args.

Cuối cùng, có thể kết hợp các tùy chọn khác nhau để khởi chạy tập lệnh bằng cách bao gồm các thẻ khác nhau trong ngoặc đơn. Ví dụ: nếu bạn muốn khởi chạy các tập lệnh phù hợp với các danh mục mặc định, an toàn hoặc xâm nhập – nhưng đặc biệt không muốn khởi chạy bất kỳ tập lệnh nào khởi chạy đối với máy chủ web – bạn có thể bắt đầu quét với cờ –script (default or safe or intrusive) và không phải “http-*”. Luôn nhớ rằng cờ or không phải là loại trừ lẫn nhau – nghĩa là các tập lệnh trong cả hai danh mục sẽ vẫn chạy – nhưng and phải ở cả hai phần.

Mặc dù kho lưu trữ tập lệnh Nmap rất kỹ lưỡng, nhưng luôn đáng để tìm kiếm ở nơi khác trên Internet nếu một tập lệnh cụ thể mà bạn nghĩ sẽ hữu ích không được xuất bản. Nhiều blog từ các nhà nghiên cứu bảo mật sẽ có tập lệnh NSE cho một mục đích cụ thể và trước khi cố gắng tự viết, bạn nên kiểm tra công cụ tìm kiếm trước!

Tóm tắt

Chương này đã giới thiệu NSE, có thể là một trong những tính năng hữu ích, linh hoạt và hấp dẫn nhất của bộ công cụ Nmap. Bây giờ chúng ta sẽ có thể khởi chạy quét không chỉ cổng và phiên bản dịch vụ – tập lệnh Nmap thực sự có thể tương tác với các dịch vụ đang nghe và trong một số trường hợp thậm chí có thể khai thác lỗ hổng!

Trong chương này, chúng ta đã đề cập đến lịch sử của NSE, cách NSE hoạt động, cách tìm tập lệnh hiện có để sử dụng và cách chạy tập lệnh bằng NSE.

Trong chương tiếp theo, chúng ta sẽ tìm hiểu cách viết tập lệnh Nmap cơ bản bằng Lua. Mặc dù nhiều, rất nhiều tập lệnh đã tồn tại cho rất nhiều tác vụ, nhưng việc sử dụng nội bộ tùy chỉnh có thể yêu cầu viết một tập lệnh của riêng bạn.

Bài viết cùng danh mục