TP-Link sakelar pintar yang mudah adalah keluarga sakelar yang dikelola yang mampu mendukung QoS, VLAN, dan Grup Agregasi Tautan (LAGs). Mereka dikelola melalui antarmuka berbasis web, memberikan akses sejumlah fungsi, termasuk penghitung paket dasar per port. Sayangnya, sakelar ini tidak mengimplementasikan SNMP untuk akses ke penghitung ini, juga tidak tampaknya menerapkan URL diskrit untuk akses langsung ke informasi ini. Proyek ini membahas masalah ini untuk menghasilkan statistik per-port dari doa baris perintah tunggal dengan output yang dapat diuraikan secara sepele untuk output yang diformat, atau dimasukkan ke dalam sistem pemantauan seperti Zabbix.
Proyek ini telah diuji terhadap model sakelar TP-Link TL-SG1016DE dan TL-SG108E. Ini juga harus kompatibel dengan anggota lain dari keluarga ini, termasuk TL-SG105E dan TL-SG1024DE.
*** PERINGATAN ***
Keluarga Smart Switch yang mudah memiliki sejumlah kerentanan yang belum terselesaikan, termasuk CVE-2017-17746. Seperti yang dijelaskan dalam https://seclists.org/fulldisclosure/2017/dec/67, setelah pengguna dari alamat IP sumber yang diberikan mengotentikasi ke antarmuka manajemen berbasis web dari sakelar, pengguna lain dari alamat IP sumber yang sama diperlakukan seperti yang diautentikasi.
Script Python dalam proyek ini harus digunakan hanya dari host yang tidak memiliki akses pengguna umum.
Essstat.py adalah utilitas ringan digunakan untuk menarik statistik port dari sakelar dan output dalam format yang mudah diisi. Kode tambahan akan ditambahkan ke Parse dan output atau menyimpan statistik ini.
Aplikasi Python yang ringan ini melakukan login cepat melalui antarmuka administrasi berbasis web Switch, dan kemudian menanyakan unit untuk statistik port saat ini. Kredensial untuk mengakses unit dilewatkan pada baris perintah. Utilitas ini diberi kode dengan Python 3.6 dan menggunakan perpustakaan sup yang indah.
essstat.py [-h] [-1] [-d] -p TPpswd [-s] [-u TPuser] TPhost
TPhost IP address or hostname of switch
-h, --help show this help message and exit
-1, --1line output in a single line
-d, --debug activate debugging output
-j, --json output in JSON format
-p TPpswd, --password TPpswd
password for switch access
-s, --statsonly output post statistics only
-u TPuser, --username TPuser
username for switch access
$ essstat.py myswitch -p ChangeMe
2020-03-28 11:25:15
max_port_num=8
1;Enabled;Link Down;0,0,0,0
2;Enabled;10M Full;3568644976,0,3144940915,0
3;Enabled;1000M Full;237232286,0,66662515,0
4;Enabled;1000M Full;4019260430,0,3721138807,0
5;Enabled;1000M Full;1300360968,0,355032522,0
6;Enabled;Link Down;0,0,0,0
7;Enabled;1000M Full;2903398648,0,4293632425,5
8;Enabled;Link Down;0,0,0,0
Cara paling sederhana untuk mengakumulasi data dari sakelar adalah dengan memiliki Essstat.py dieksekusi dengan opsi --1line dan menambahkan output ke file CSV. Anda kemudian dapat menarik salinan file CSV dan memproses data mentah melalui Buku Kerja Excel ini untuk menghasilkan grafik dinamis yang secara otomatis akan menghidupkan kembali ke data yang tersedia.
Langkah pertama adalah menyiapkan direktori di mana file CSV akan mengumpulkan data. Saya memilih untuk menjalankan semua ini di bawah pengguna Zabbix yang mendukung aplikasi pemantauan pada host ini. Anda dapat memilih pengguna yang berbeda, tetapi pastikan bahwa grup direktori cocok dengan grup pengguna yang akan Anda gunakan.
$ ls -ald /var/log/essstat
drwxrwxr-x. 2 root zabbix 68 Mar 30 10:56 /var/log/essstat
Selanjutnya, buat pekerjaan cron untuk pengumpulan data berkala. Untuk melakukan ini, buat file /etc/cron.d/essstat dan tambahkan satu jadwal untuk setiap sakelar yang akan Anda pantau. Untuk membuat ini cukup meresap sendiri, sertakan tahun berjalan sebagai bagian dari spesifikasi file CSV.
*/10 * * * * zabbix /usr/local/bin/essstat.py -1 -p ChangeMe1 orange >> /var/log/essstat/essstat-orange-`date +%G`.csv
*/10 * * * * zabbix /usr/local/bin/essstat.py -1 -p ChangeMe2 black >> /var/log/essstat/essstat-black-`date +%G`.csv
Dalam contoh di atas, ada dua sakelar yang dipantau, bernama orange dan black . Untuk setiap sakelar, pengumpulan data akan berjalan setiap 10 menit mulai dari setiap jam. Data untuk orange akan diakumulasikan dalam file /var/log/essstat/essstat-orange-2020.csv selama kalender tahun 2020.
Buku kerja Excel yang diaktifkan makro ini mungkin merupakan cara terbaik untuk membaca dan memetakan statistik port. Buku kerja akan secara otomatis membangun kueri dan menjalankan operasi mendapatkan web terhadap server pemantauan menggunakan skrip essstat2.cgi . Untuk mengonfigurasi buku kerja untuk instalasi lokal Anda, nama yang ditentukan essstatBaseURL harus dimodifikasi untuk menunjuk ke server web yang beroperasi pada host pemantauan Anda dan nama skrip CGI. Untuk membuat pembaruan ini di Excel 2019 di Windows, klik tab Formula Excel, lalu klik tombol Name Manager pada pita. Klik entri untuk essstatBaseURL dan ubah entri yang sesuai. Pastikan untuk mengklik tombol dengan tanda centang hijau untuk menyimpan modifikasi, tutup dialog dan simpan buku kerja yang diperbarui. Ini perlu dilakukan hanya sekali.
Saat menggunakan buku kerja, nama sakelar dan pelaporan dari dan hingga saat ini/waktu ditentukan dalam tabel parameter di kiri atas tab WebData . Klik tombol Update From Web untuk mengambil data ke dalam tabel dan secara dinamis memperbarui plot pada tab PPS Chart . Jika sakelar yang diteliti hanya memiliki delapan port, port tambahan akan disembunyikan secara otomatis.
Nama sakelar dan metrik yang diplot muncul di judul bagan. Setelah metrik telah dimuat ke dalam tabel, metrik yang berbeda dapat dimuat ke dalam bagan dengan memilih dari pilihan di sel dropdown di sebelah label. Moving between theses metrics for the same switch does *not* require doing another dari operasi web.
Tabel pada tab * LocalportNames memungkinkan Anda untuk mengganti nama port default yang ditampilkan di bagan. Tabel ini sepenuhnya opsional dan mendefinisikan entri untuk semua port pada sakelar yang diberikan tidak diperlukan (tidak apa -apa untuk mendefinisikan override nama port hanya untuk beberapa port untuk sakelar yang diberikan). Jika Anda memiliki beberapa sakelar, Anda dapat menambahkan entri untuk semuanya dalam satu tabel.
Prototipe Buku Kerja Excel ini dapat digunakan untuk memproses salinan output data --1line RAW dari essstat.py yang telah terakumulasi dalam file CSV. Mulailah dengan menyalin file ke nama baru, menggabungkan nama sakelar yang dipantau. Ini akan menjadi buku catatan pemantauan sakelar. Misalnya:
C:usermeDocuments> copy essstat-TPLhost.xlsx essstat-orange.xlsx
Selanjutnya, unduh salinan data CSV yang telah terakumulasi pada host pemantauan Anda dan buka di Excel, serta buku kerja pemantauan sakelar. Pada tahap ini, Anda perlu menyalin data dari CSV ke tab RawData dari notebook pemantauan sakelar berdasarkan nilai . Untuk melakukan ini, buka file CSV di Excel dan pilih sel kiri atas, A1 . Di Windows, Anda dapat menggunakan urutan kunci Ctrl-Shift-End untuk memilih semua data, lalu tekan Ctrl-Insert untuk menyalin semua itu. Kemudian buka Buku Kerja Pemantauan Switch dan pilih sel data pertama di tab RawData di A2 (sel kiri atas, di bawah judul). Klik kanan dan pilih opsi untuk menempelkan nilai. Dengan data mentah di tempat, Anda harus menggulir ke bawah untuk mencatat baris yang dipadukan terakhir. File CSV asli sekarang dapat ditutup.
Klik pada tab Tabel PPS untuk memperluas tabel analisis dan pilih metrik yang akan dipetakan. Kuncinya adalah memperluas rentang tabel terstruktur agar sesuai dengan RawData yang tersedia. Tekan Ctrl-End untuk menemukan ujung tabel. Tikus di atas kotak kecil di sudut kiri bawah sel sampai penunjuk tikus Anda berubah menjadi crosshair. Klik dan seret ke bawah ke nomor baris yang sama dengan nomor baris populasi terakhir di tab RawData . Semua rumus dan rentang dalam tabel PPS dan bagan PPS akan meluas secara otomatis.
Ada empat metrik yang sedang dilacak untuk setiap port: TX Paket Good, Paket Buruk TX, RX Good PKTS, dan RX Bad PKTS. Dropdown di sel B2 pada tab Tabel PPS digunakan untuk memilih metrik mana yang harus diisi dalam tabel dan dipetakan.
Skrip CGI ini digunakan untuk menanyakan data CSV yang telah terakumulasi pada host pemantauan Anda dan mengembalikan entri yang cocok. CGI mandiri, hanya mengandalkan akses ke AWK untuk dieksekusi skrip inline sederhana. Ada tiga variabel yang ditimpa dalam CGI:
Perhatikan bahwa spesifikasi tanggal/waktu parsial diizinkan, karena entri yang cocok ditentukan oleh perbandingan string sederhana. Tanggal dari dan ke tanggal dibiarkan melintasi batas satu tahun (misalnya dari 2019 hingga 2020).
Untuk menanyakan server pemantauan untuk statistik port untuk sakelar yang dikenal sebagai Orange untuk kisaran waktu mulai 2/23/2020 00:00 hingga 3/7/2020 11:30, URI akan terlihat seperti:
http://monitoring.mydomain.com/cgi-bin/essstat.cgi?esTPLhost=orange&esTo=2020-03-07%2011:30&esFrom=2020-02-23
Skrip CGI ini dirancang untuk mendukung pengoperasian buku kerja essstat.xlsm Excel. Script mendukung parameter kueri yang sama dengan essstat.cgi dan mengembalikan data untuk metrik yang sama. Namun, alih -alih mengembalikan jumlah paket mentah di setiap catatan, essstat2.cgi akan mengembalikan paket rata -rata per tingkat detik sejak catatan sebelumnya. Skrip akan menghitung waktu delta aktual antara catatan saat ini dan sebelumnya untuk memastikan laju akurat. Script juga memiliki penanganan untuk penghitung masing -masing yang mengatur ulang ke nol saat mereka membungkus ukuran integer maksimum untuk penghitung. Dalam kasus seperti itu, paket per detik dari interval sebelumnya akan dikembalikan untuk statistik yang terpengaruh.
TP-Link Easy Smart Switch memiliki lebih banyak kemampuan daripada sakelar yang sama sekali tidak dikelola. Namun, lingkungan manajemen relatif tertutup, dengan hanya klien manajemen eksklusif (Easy Smart Configuration Utility) atau halaman manajemen berbasis web pada sakelar yang tersedia. Selain itu, tidak ada dukungan untuk memantau sakelar dengan SNMP. Ini berarti bahwa satu-satunya entri kami ke sakelar akan melalui protokol yang digunakan oleh klien berpemilik, atau dengan mengikis antarmuka manajemen berbasis web pada sakelar.
Pertama, sedikit latar belakang pada Protokol Konfigurasi Smart Easy-Base-Base (ESCP) yang tidak digunakan proyek ini. Utilitas konfigurasi pintar yang mudah berinteraksi dengan sakelar over UDP dengan siaran. Klien akan mengirim siaran UDP dari port 29809 ke 29808 dari paket penemuan yang dikodekan khusus. Sakelar yang kompatibel pada jaringan akan menyiarkan respons dari port 29808 hingga 29809 daripada termasuk nama, model, dan alamat IP sakelar. Dari titik ini, tergantung pada klien untuk menyandikan urutan login dan menyiarkan ini di jaringan, dengan harapan bahwa sakelar target spesifik akan menerima dan memproses instruksi. Ini mungkin untuk mengirim kembali informasi dalam paket siaran lain, memodifikasi konfigurasi sakelar, atau mengambil beberapa tindakan lain.
Desain dan implementasi ini memiliki sejumlah masalah yang seharusnya menyebabkan beberapa kekhawatiran yang telah disorot oleh peneliti keamanan (@chrisdcmoore dalam kerentanan pengungkapan informasi dalam sakelar Smart TP-Link Easy dan @CHMOD7850 dalam Pengungkapan Kerentanan TP-Link Multiples CVE). Sementara meretas ke ESCP akan cukup mudah, saya benar -benar tidak suka gagasan tentang kredensial penyiaran secara harfiah di seluruh jaringan secara teratur untuk meraih statistik.
Apresi yang digunakan proyek ini, klien berbasis web, juga bermasalah. Menggunakan koneksi unicast TCP lebih baik, tetapi SSL tidak diimplementasikan oleh sakelar. Meskipun dimungkinkan untuk mengkonfigurasi ulang sakelar untuk menggunakan nama pengguna administratif yang berbeda, hanya ada satu nama pengguna untuk mengakses sakelar. Ini menghalangi menggunakan akses berbasis peran dengan nama pengguna khusus hanya untuk membaca statistik. Kredensial yang kami gunakan untuk mengambil statistik juga dapat digunakan untuk mengakses antarmuka manajemen yang memungkinkan pengaturan ulang penghitung, mengkonfigurasi ulang sakelar atau bahkan mengganti firmware.
Lebih buruk lagi adalah kerentanan yang dilaporkan dalam CVE-2017-17746 . Seperti yang dijelaskan dalam https://seclists.org/fulldisclosure/2017/dec/67, setelah pengguna dari alamat IP sumber yang diberikan mengotentikasi ke antarmuka manajemen berbasis web dari sakelar, pengguna lain dari alamat IP sumber yang sama diperlakukan seperti yang diautentikasi. Kondisi ini dibuat oleh pelaksanaan skrip Python dalam proyek ini, di mana pengguna lain masuk atau melakukan tunneling melalui host yang sama kemudian akan memiliki akses yang tidak terau otentikasi ke antarmuka manajemen sakelar. Masalah ini dapat dikurangi dengan menjalankan skrip dari host manajemen khusus. Penggunaan LAN manajemen out-of-band yang berdedikasi dapat menawarkan perlindungan juga, tetapi sakelar ini tidak mungkin digunakan dalam lingkungan yang terstruktur rumit.
Peter Smode
psmode [at] kitsnet.us