Φύλλο Ομαδικής Εργασίας (Εργαστήριο 2-3 Ατόμων)

ΠΡΟΣ: Μαθητές Β' ΕΠΑΛ, Τομέας Πληροφορικής (Ομάδες 2-3 ατόμων)
ΜΑΘΗΜΑ: Λειτουργικά Συστήματα και Ασφάλεια Υπολογιστικών Συστημάτων
ΘΕΜΑ: Διείσδυση & Έλεγχος Ρομποτικού Οχήματος (LEGO EV3)
Υποδομή: Λ.Σ. ev3dev (σε SD card) | Βιβλιοθήκη Python: Pybricks (MicroPython v2)

1. Σενάριο

Κάθε ομάδα έχει οπτική επαφή με ένα ρομποτικό όχημα EV3, αλλά απαγορεύεται να το αγγίξει. Το ρομπότ εκτελεί το λειτουργικό σύστημα ev3dev από κάρτα SD και χρησιμοποιεί μια ασύρματη κάρτα δικτύου (USB Wi-Fi) για να συνδεθεί σε ένα τοπικό Access Point.

Τόσο το ρομπότ όσο και οι υπολογιστές του εργαστηρίου βρίσκονται στο ίδιο τμήμα δικτύου (10.142.62.xxx), επιτρέποντας την απευθείας επικοινωνία. Στόχος σας ως ομάδα είναι να εντοπίσετε την IP του, να εκμεταλλευτείτε μια βασική ευπάθεια ασφαλείας για να συνδεθείτε, και να γράψετε κώδικα (με τη βιβλιοθήκη ev3dev2) για να το ελέγξετε.

Προτεινόμενοι Ρόλοι Ομάδας (2-3 άτομα)

2. Απαιτούμενα Βήματα (Η Πρόκληση)

Βήμα 1: Ανακάλυψη Διεύθυνσης (IP Address)

Κάθε ομάδα θα ακολουθήσει μία από τις παρακάτω δύο μεθόδους, ανάλογα με την πρόκληση που θα της ανατεθεί.

Επιλογή Α: Άμεση Ταυτοποίηση (Με Οπτική Επαφή)

Μέθοδος: "Physical Access"

  1. Ενέργεια: Η ομάδα παρατηρεί την οθόνη του EV3 από απόσταση.
  2. Αποτέλεσμα: Το ev3dev εμφανίζει την IP του (π.χ. 10.142.62.112) στην οθόνη του.
  3. Συμπέρασμα: Γνωρίζετε τον στόχο με 100% βεβαιότητα. Προχωρήστε απευθείας στο Βήμα 2.

Επιλογή Β: Διευρευνητική Ανίχνευση (Χωρίς Οπτική Επαφή)

Μέθοδος: "Black Box / Network Analysis"

  1. Ενέργεια: Χρησιμοποιήστε ένα IP scanner (π.χ. Angry IP Scanner).
    • ΣΗΜΑΝΤΙΚΟ: Στις ρυθμίσεις του (π.χ. Tools -> Preferences -> Ports), βεβαιωθείτε ότι η θύρα 22 είναι στη λίστα σάρωσης (δεν είναι στην προεπιλογή).
    • Σαρώστε το εύρος 10.142.62.1 - 10.142.62.254.
  2. Πρόβλημα: Η σάρωση επιστρέφει πολλούς hosts (π.χ. 5-6) που έχουν ανοιχτή τη Θύρα 22 (SSH), καθώς και άλλοι υπολογιστές στο εργαστήριο τρέχουν SSH.
  3. Λύση (Fingerprinting): Πρέπει να ταυτοποιήσετε τον στόχο. Ρυθμίστε το scanner να αναζητά (fetch) επιπλέον πληροφορίες:
    • Hostname: Αναζητήστε την IP που αντιστοιχεί στο hostname ev3dev.
    • (Εναλλακτικά) MAC Vendor: Αναζητήστε την IP που έχει "ύποπτο" κατασκευαστή (π.χ. "Ralink", "Realtek", "LEGO") αντί για "Dell" ή "HP" των υπολογιστών του εργαστηρίου.
  4. Συμπέρασμα: Μόλις εντοπίσετε την IP του ev3dev, προχωρήστε στο Βήμα 2.

Βήμα 2: Εντοπισμός Ευπάθειας & Πρόσβαση (SSH)

Ενέργεια: Συνδεθείτε στο ρομπότ μέσω SSH από τον υπολογιστή σας.

Οδηγίες: Ανοίξτε ένα Τερματικό (Terminal). (Σε Windows, μπορείτε να χρησιμοποιήσετε PowerShell ή Command Prompt).

Πρόκληση Ασφαλείας (Η Ευπάθεια): Χρήση των προεπιλεγμένων credentials του ev3dev.

Εντολή (Ο "Operator" εκτελεί):

ssh robot@10.142.62.XXX

(Αντικαταστήστε το XXX με την IP που εντοπίσατε στο Βήμα 1).

Βήμα 3: Συγγραφή Κώδικα (Python / ev3dev2)

Ενέργεια: Δημιουργήστε το αρχείο bpxx.py (όπου xx ο αριθμός μητρώου του "Developer").

Οδηγίες: Χρησιμοποιήστε τον επεξεργαστή κειμένου pico.

Εντολή: pico bpxx.py

Κώδικας (Ο "Developer" υπαγορεύει):

#!/usr/bin/env python3

# Import ev3dev2 library
from ev3dev2.motor import MoveTank, OUTPUT_A, OUTPUT_B, SpeedPercent
from time import sleep
import sys

print("Starting ev3dev2 script...")

# Define Tank (Motors on OUTPUT_A and OUTPUT_B)
try:
    tank = MoveTank(OUTPUT_A, OUTPUT_B)
except Exception as e:
    print("ERROR: Check motors on A/B.", file=sys.stderr)
    sys.exit(1) # Exit with error

print("Running movement: 5 loops (Fwd/Rev)")

rotations = 1
speed = SpeedPercent(40)

for i in range(5):
    # Print loop number (No f-string)
    print("Loop " + str(i+1) + "/5")
    
    # Move Forward (approx 10cm)
    tank.on_for_rotations(speed, speed, rotations)
    sleep(0.5)
    
    # Move Reverse
    tank.on_for_rotations(-speed, -speed, rotations)
    sleep(0.5)

print("Completed.")

Αποθήκευση στο pico: Πατήστε Ctrl+O (WriteOut) -> Enter.

Έξοδος από το pico: Πατήστε Ctrl+X.

Βήμα 4: Αλλαγή Δικαιωμάτων

Ενέργεια: Κάντε το αρχείο Python εκτελέσιμο (executable).

Οδηγίες: Δίνουμε στο Linux το "δικαίωμα" να τρέξει το αρχείο.

Εντολή (Ο "Operator" εκτελεί):

chmod +x bpxx.py

Βήμα 5: Εκτέλεση Κώδικα

Ενέργεια: Εκτελέστε το script χρησιμοποιώντας το brickrun.

Οδηγίες: Το brickrun είναι απαραίτητο για να αλληλεπιδράσει ο κώδικας με το υλικό (hardware) του EV3.

Εντολή (Ο "Operator" εκτελεί):

brickrun ./bpxx.py

Επεξήγηση: Γιατί chmod +x και ./;

1. chmod +x (Η "Άδεια" Εκτέλεσης)

Στο Linux (όπως το ev3dev), όταν δημιουργείτε ένα νέο αρχείο με το pico, το σύστημα το βλέπει ως απλό κείμενο. Για λόγους ασφαλείας, το Linux δεν επιτρέπει την εκτέλεση αρχείων κειμένου. Η εντολή chmod +x bpxx.py δίνει στο αρχείο την άδεια («x») να εκτελεστεί.

2. ./ (Ο "Χάρτης" Εκτέλεσης)

Όταν πληκτρολογείτε μια εντολή (π.χ. pico), το Linux ψάχνει μόνο σε «επίσημους» φακέλους συστήματος (το $PATH). Το αρχείο σας bpxx.py δεν είναι εκεί. Το ./ είναι ο «χάρτης» που λέει στο σύστημα: "Μην ψάχνεις στο $PATH. Εκτέλεσε το αρχείο bpxx.py που βρίσκεται ακριβώς εδώ (.)."


Σύνοψη: (1) Το chmod +x «ξεκλειδώνει» το αρχείο και (2) το ./ λέει στο τερματικό πού ακριβώς βρίσκεται.

Σημείωση Ασφαλείας: Η χρήση προεπιλεγμένων συνθηματικών (robot / maker) είναι μια κρίσιμη ευπάθεια. Σε ένα πραγματικό σενάριο, η πρώτη ενέργεια μετά τη σύνδεση θα ήταν η αλλαγή του συνθηματικού με την εντολή passwd.

3. Πηγές για Περεταίρω Μελέτη

Για την εμβάθυνση στις τεχνολογίες που χρησιμοποιήσατε:

Προτεινόμενο Εικονικό Περιβάλλον (Emulator)
Για δοκιμές προγραμματισμού εκτός του φυσικού EV3, μπορείτε να χρησιμοποιήσετε αυτόν τον εξομοιωτή: https://gears.aposteriori.com.sg/index.html?worldScripts=world_challenges

4. Παραδοτέα Ομάδας

  1. Επιτυχής σύνδεση μέσω SSH (απόδειξη της σωστής μεθόδου εντοπισμού IP).
  2. Το αρχείο bpxx.py (με τον συμβατό κώδικα ev3dev2) να υπάρχει στον φάκελο home του robot.
  3. Επιτυχής επίδειξη της κίνησης του οχήματος (5 επαναλήψεις) μετά την εκτέλεση της τελικής εντολής.