Câu hỏi Nmap chạy chậm hơn root so với người dùng thông thường


Tôi đang làm việc trên một kịch bản bash để cho phép phát hiện tự động và điều khiển từ xa các máy ghi dữ liệu độc quyền của công ty tôi. Các máy ghi âm chạy một phiên bản tùy chỉnh của Linux và về cơ bản là pis hoặc arduinos mạnh mẽ.

Cổng ethernet trên các thiết bị được cấu hình để khi được cắm vào mạng, nó sẽ được cho thuê dhcp. Để phát hiện các thiết bị, tôi đang theo dõi /var/lib/dhcp/dhcpd.leases trên máy cục bộ của mình. Đối với mỗi mục duy nhất, tôi portscan để kiểm tra tình trạng máy chủ ssh bằng cách sử dụng nmap. Để cho phép khởi động tự động tập lệnh này, nó đang được gọi từ /etc/rc3.d/rc.local và do đó được chạy bởi root trên thời gian khởi động. Đây là nơi mọi thứ trở nên lạ lẫm.

Để đảm bảo rằng chúng tôi luôn có thể phát hiện các kết nối mới, tệp dhcpd.leases được kiểm tra trong một vòng lặp vô hạn. Chúng tôi cũng muốn giữ một dấu chân hệ thống thấp để giảm thời gian lặp lại mỗi vòng lặp, chúng tôi áp đặt một khoảng thời gian chờ nhỏ trên nmap. Đây là dòng chính xác được sử dụng:

nmap --max-retries=1 -p 22 --host-timeout=50ms $ip_address

Khi chạy như một người dùng bình thường, dòng này hoạt động vô cùng nhất quán, nhưng là gốc, tôi phải tăng thời gian chờ lên 600ms để có kết quả tích cực nhất quán. Tôi đã thử nghiệm nó bằng cách sử dụng time lệnh và đây là kết quả thông thường (được thực hiện với thời gian chờ 600ms):

Starting Nmap 6.40 ( http://nmap.org ) at 2014-12-19 09:41 EST
Nmap scan report for 192.168.53.101
Host is up (0.00039s latency).
PORT    STATE SERVICE
22/tcp  open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

real    0m0.059s
user    0m0.043s
sys     0m0.004s

Đây là đầu ra cho cùng một điều, nhưng đăng nhập dưới dạng root:

Starting Nmap 6.40 ( http://nmap.org ) at 2014-12-19 09:48 EST
Nmap scan report for 192.168.53.101
Host is up (0.00035s latency).
PORT    STATE SERVICE
22/tcp  open  ssh
MAC Address: 00:04:D1:0B:03:EC

Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds

real    0m0.580s
user    0m0.056s
sys     0m0.008s

Bất kỳ ý tưởng gì có thể gây ra thêm thời gian này và làm thế nào để ngăn chặn nó? Từ một số nghiên cứu sơ bộ, tôi có thể thấy rằng root chạy với một số mặc định được thiết lập mà người dùng khác không có quyền truy cập. Làm thế nào tôi có thể đi về việc tái tạo các điều kiện nmap được thực hiện bởi một người dùng bình thường?

Như một lưu ý bổ sung, điều này đang được chạy trên một máy tính Ubuntu 14.04 LTS.


1
2017-12-19 15:37


gốc


sao chép từ stackoverflow stackoverflow.com/q/27568826/7552 - glenn jackman
Bởi tôi. Bởi vì ai đó nói nó có ý nghĩa hơn ở đây. Và tôi đồng ý. - JorganPubshire
Tôi biết. Điều này làm cho các liên kết hiển nhiên đối với những người đọc khác đang tìm kiếm câu trả lời hoặc suy nghĩ về trả lời - glenn jackman


Các câu trả lời:


Sau khi nghiên cứu thêm, tôi đã tìm thấy điều gì đó quan tâm trong phần MISC của trang hướng dẫn. Có một lựa chọn cho --unprivileged mà lực lượng hoạt động như một người dùng bình thường, thậm chí là root. Điều này thực hiện các hoạt động ít hơn đáng kể và cung cấp ít thông tin hơn, nhưng nếu tất cả những gì bạn đang làm là kiểm tra ssh trên cổng 22, nó thực hiện càng nhanh càng tốt.


0
2017-12-19 16:09





Tôi không chắc chắn những gì sẽ gây ra sự khác biệt trong hai chạy, nhưng tôi có một số ý tưởng cho sự nhất quán và tốc độ mà có thể giúp đỡ. Đầu tiên, đây là sự khác biệt trong hoạt động giữa quét root và không root với các tùy chọn bạn đã chọn:

  • Quét không mong muốn (không phải root) sẽ sử dụng một cặp TCP connect() các cuộc gọi để xác định xem máy chủ có đang hoạt động hay không; quét gốc sẽ gửi yêu cầu ARP và đánh hơi mạng cho phản hồi. Yêu cầu ARP sẽ nhanh hơn, vì cuộc gọi kết nối yêu cầu hệ điều hành thực hiện:
    1. yêu cầu ARP hoặc ít nhất là tra cứu bộ nhớ cache ARP
    2. ít nhất một chuyến đi khứ hồi khác để nhận phản hồi từ mục tiêu
  • Quét không phải root sẽ sử dụng TCP đầy đủ connect() gọi để quét cổng 22 và phải đóng ổ cắm khi hoàn tất; quét gốc sẽ thực hiện một nửa bắt tay, dựa trên hệ điều hành để đóng kết nối "trong nền."

Vì vậy, với các tùy chọn này, thông thường việc quét đặc quyền sẽ nhanh hơn. Tuy nhiên, với kết nối mạng có độ trễ rất thấp, có thể việc thiết lập các trình nghe PCAP khác nhau sẽ làm chậm quá trình quét gốc xuống một chút. Nhưng đó có lẽ không phải là nơi mà sự chậm trễ của bạn đến từ đó.

Bạn có thể tăng tốc độ quét của mình bằng cách bỏ qua một số quét giai đoạn mà bạn không cần. Thử thêm -n cờ để bỏ qua tra cứu tên đảo ngược (mà không tính vào thời gian chờ máy chủ, bằng cách này!). Hoặc nếu bạn biết mục tiêu là hiện tại và chỉ muốn kiểm tra phản hồi cổng 22, thêm -Pn tùy chọn bỏ qua giai đoạn khám phá máy chủ.


0
2017-12-19 22:11