Saya sedang mengerjakan skrip bash untuk mengaktifkan deteksi otomatis dan kendali jarak jauh perekam data milik perusahaan saya. Perekam menjalankan versi kustom linux dan pada dasarnya pis atau arduinos kuat.
Port ethernet pada perangkat dikonfigurasikan sehingga ketika dicolokkan ke jaringan, port tersebut akan diberikan sewa dhcp. Untuk mendeteksi perangkat, saya memantau /var/lib/dhcp/dhcpd.leases di komputer lokal saya. Untuk setiap entri unik, saya portcan untuk menguji status server ssh menggunakan nmap
. Untuk mengaktifkan peluncuran skrip ini secara otomatis, skrip ini dipanggil dari /etc/rc3.d/rc.local dan dijalankan oleh root pada saat boot. Di sinilah segalanya menjadi aneh.
Untuk memastikan bahwa kami selalu dapat mendeteksi koneksi baru, file dhcpd.leases diperiksa dalam infinite loop. Kami juga ingin mempertahankan jejak sistem yang rendah sehingga untuk mengurangi waktu setiap iterasi loop, kami memberlakukan batas waktu kecil pada kami nmap
. Inilah baris yang tepat digunakan:
nmap --max-retries=1 -p 22 --host-timeout=50ms $ip_address
Ketika dijalankan sebagai pengguna normal, baris ini bekerja sangat konsisten, tetapi sebagai root, saya harus menambah waktu tunggu hingga 600 ms untuk hasil yang positif secara konsisten. Saya sudah mengujinya menggunakan time
perintah dan ini adalah hasil yang biasa (dilakukan dengan batas waktu 600 ms):
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
Ini adalah output untuk hal yang sama, tetapi login sebagai 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
Adakah ide yang dapat menyebabkan waktu tambahan ini dan bagaimana cara mencegahnya? Dari beberapa penelitian pendahuluan, saya dapat melihat bahwa root berjalan dengan beberapa set default yang tidak dapat diakses oleh pengguna lain. Bagaimana saya bisa meniru kondisi nmap
yang dieksekusi oleh pengguna normal?
Sebagai catatan tambahan, ini sedang dijalankan pada mesin Ubuntu 14.04 LTS.
Jawaban:
Setelah penelitian lebih lanjut, saya menemukan sesuatu yang menarik di bagian MISC di halaman manual. Ada opsi
--unprivileged
yang memaksa operasi sebagai pengguna normal, bahkan sebagai root. Ini melakukan operasi jauh lebih sedikit dan memberikan lebih sedikit info kembali, tetapi jika semua yang Anda lakukan adalah memeriksa ssh pada port 22, ia melakukannya secepat mungkin.sumber
Saya tidak yakin apa yang akan menyebabkan perbedaan dalam dua putaran, tetapi saya memiliki beberapa ide untuk konsistensi dan kecepatan yang dapat membantu. Pertama, inilah perbedaan operasi antara pemindaian root dan non-root dengan opsi yang Anda pilih:
connect()
panggilan TCP untuk menentukan apakah host sudah habis; pindaian root akan mengirim permintaan ARP dan mengendus jaringan untuk tanggapan. Permintaan ARP harus lebih cepat, karena panggilan koneksi memerlukan OS untuk melakukan:connect()
panggilan TCP penuh untuk memindai port 22, dan harus menutup soket setelah selesai; pindaian root akan melakukan setengah jabat tangan, mengandalkan OS untuk menutup koneksi "di latar belakang."Jadi dengan opsi-opsi ini, umumnya pemindaian istimewa akan lebih cepat. Namun, dengan koneksi jaringan latensi sangat rendah, mungkin saja pengaturan berbagai pendengar PCAP akan memperlambat pemindaian root sedikit. Tapi itu mungkin bukan dari mana keterlambatan Anda berasal.
Anda dapat mempercepat pemindaian Anda dengan melewatkan beberapa fase pemindaian yang tidak Anda perlukan. Coba tambahkan
-n
bendera untuk melewati pencarian nama terbalik ( yang tidak dihitung menjelang batas waktu host! ). Atau jika Anda tahu target ada dan hanya ingin memeriksa respons port 22, tambahkan-Pn
opsi untuk melewati fase penemuan host.sumber