stateful firewall issues (Was Re: Think Simple!)

Nikolaos Korkakakis korkakak at gmail.com
Sat Sep 9 16:14:40 EEST 2006


On 9/9/06, george <zakinthinos at freemail.gr> wrote:

> δηλαδη το σεναριο καποιος να πειραξει τον apache του
> σε επιπεδο κωδικα ωστε σε συγκεκριμενη χρονικη
> στιγμη να κανει inject ενα πακετακι με καλο
> "payload" (κατι σαν το hangup string ενος modem)
> που θα κανει τα iptables σενια δεν παιζει ?
>
> το πακετο αυτο εφοσον θα ειναι μεσα στο stream δεν
> θα εχει σωστο sequence number ?
>
> γιωργος

Αγαπητέ Γιώργο.

Έχω την ισχυρή εντύπωση ότι δεν έχεις καταλάβει πολλά πράγματα (έκανες
κοπάνες στο μάθημα των δικτύων ?) Με αποτέλεσμα αυτά που γράφεις αν
και σου φαίνονται σωστά σε ένα διαστρεβλωμένο κόσμο που έχεις
κατασκευάσει που όμως εν πολλοίς οφείλεται στην άγνοια.

Μερικά βασικά πραγματάκια.
Όλες οι συνδέσεις στον κόσμο του internet βασίζονται, ανάγονται ή
μπορούν να περιγραφούν με το μοντέλο που έχει θεσπίσει ο οργανισμός
ISO το μοντέλο OSI. Αυτό που γράφω ανήκει στο network 012 class κάθε
ΤΕΕ, ΙΕΚ, ΤΕΙ, Πανεπιστημίου και δεν είναι νέα για κανένα.

Όταν θες να συνδεθείς στο www.ceid.upatras.gr και ο δικτυακός σου
εξοπλισμός είναι ένα ταπεινό (px) PSTN MODEM αυτό που γίνεται είναι το
εξής: Ο Υπολογιστής σου θεωρεί με κάποιον τρόπο(λέγε με drivers) το
modem ως μια δικτυακή συσκευή επιπέδου 2 ή 3 και συνδέεται πάνω της
μέσω καλωδίωσης πχ σειριακό interface, PCI bus, κτλ. Δικτυακά το πώς
επικοινωνεί ο υπολογιστής με την συσκευή το θεωρούμε ως μαύρο κουτί
(πχ δεν μας ενδιαφέρει αν στείλει HUP ο πυρήνας στο modem η όχι). Έτσι
λοιπόν όταν θες να συνδεθείς στον παραπάνω web server αυτό που γίνεται
είναι το εξής: Με κάποιο «μαγικό» τρόπο ο υπολογιστής ειδοποιεί το
modem για το τι θέλει και στην συνέχεια το modem διαμορφώνει αυτή την
αίτηση. Ας δούμε τι γίνεται ακριβώς: Εσύ (ο browser σου) θες να κάνεις
HTTP GET τα περιεχόμενα της σελίδας (επίπεδο εφαρμογής). Αυτό
μεταφράζεται αυτόματα σαν ένα socket connection (ο browser από την
μεριά του ζητάει να δημιουργηθεί ένα TCP connection στο
www.ceid.upatras.gr στο port 80 (επίπεδο μεταφοράς). Το TCP connection
μεταφέρει την αίτησή σου σε κομμάτια (segments) στο επίπεδο δικτύου
που δεν είναι άλλο από το IP δίκτυο. Και εδώ κάθε TCP segment σπάει σε
άλλα μικρότερα κομμάτια που φτιάχνουν την IP κίνηση. Στην συνέχεια τα
IP πακέτα από το modem σου μετατρέπονται σε ηλεκτρικά σήματα που
αποστέλλονται μέσω της τηλεφωνικής γραμμής στον ISP σου. Αυτός
μεταφράζει τα ηλεκτρικά σήματα σε ip datagrams και τα προωθεί προς τον
κατάλληλο κόμβο (με την βοήθεια κάποιου πρωτοκόλλου δρομολόγησης) σε
κάποιο κόμβο που βρίσκεται λίγο ποιο κοντά στον κόμβο προορισμό. Αυτή
η διαδικασία συνεχίζεται (ηλεκτρικά σήματα, ip πακέτα) μέχρι να φτάσει
το κάθε πακέτο στον προορισμό του. Εκεί αναλαμβάνει ο κόμβος
παραλήπτης να συνενώσει το μήνυμα και να παράγει το σταλθέν TCP
segment. Στην συνέχεια ανάλογα με την πόρτα για την οποία προορίζεται
το πακέτο το προωθεί κατάλληλα. (Δες και το
http://www.ussg.iu.edu/usail/network/nfs/network_layers.html για
περισσότερες πληροφορίες)

Τα sequence numbers που αναφέρεις και για τα οποία στεναχωριέσαι στην
ουσία αποτελούν ένα μηχανισμό που παρέχει το επίπεδο μετάδοσης
δεδομένων για flow control και end to end reliability. Αν σου
απαντήσει ο apache
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
                    <HTML><HEAD><TITLE>400 Bad Request</TITLE>

</HEAD><BODY>
                                              <H1>Bad Request</H1>Your
browser sent a request that this server could not understand.<P><HR>

                     <ADDRESS>Apache/1.3.29 Server at
www.ceid.upatras.gr Port 80</ADDRESS></BODY></HTML>

Και στο τέλος σου στείλει και ένα FUCK OFF ή οποιαδήποτε άλλη
πληροφορία σε ένα TCP Segment μετά πριν ή οπουδήποτε πάνω στο ίδιο TCP
session τότε απλά το σύστημά σου θα (προσπαθήσει να) το μεταφράσει σε
κάτι που έχει νόημα για την ίδια την εφαρμογή (Δεν το δήλωσα ρητά ότι
ότι έρχεται μέσω TCP το αντιλαμβάνεται μονάχα η ίδια η εφαρμογή σαν
έννοια με νόημα εε? Ας το κάνω τώρα!) και έτσι το παραπάνω θα έχει ένα
FUCK OFF μετά το html tag.

Η υπερβολική κατά την άποψη μου διατύπωση ότι ένα well crafted TCP
segment μπορεί να ρίξει το modem/router να ανάψει τον θερμοσίφωνα ή να
κλείσει το αιρ condition του σπιτιού σου πιστεύω ότι κινείται στην
σφαίρα της επιστημονικής φαντασίας (Λες να διαβάζει κανείς από την
Microsoft την λίστα και να του μπαίνουν ιδέες??? :-P ))

Στο διαταύτα να εκφράσω τον ισχυρισμό μου ότι για να φας κουλούρι στο
domain σου θα πρέπει να τρέχεις προβληματικές εφαρμογές (Δες το
OpenBSD: τρέχει μόνο τα βασικά ---> Τον πυρήνα ) και να μην λαμβάνεις
μέτρα να τις προστατέψεις. Αλλά ακόμα και θεωρητικά «καλές» εφαρμογές
να τρέχεις ποιο το νόημα να τις δείχνεις σε ανθρώπους που δεν τους
αφορούν? Οπότε η προσέγγιση που κάνεις για το TCP θα επωφελούνταν
σίγουρα αν κάποια στιγμή καταλάβαινες πως λειτουργεί ο μηχανισμός αλλά
κυρίως καταλάβαινες ότι δεν πρέπει να προστατεύεις την τηλεόραση τον
ηλεκτρικό θερμοστάτη ή την καφετιέρα

Φιλικά
Νίκος
Αγαπητέ Γιώργο.

Έχω την ισχυρή εντύπωση ότι δεν έχεις καταλάβει πολλά πράγματα (έκανες
κοπάνες στο μάθημα των δικτύων ?) Με αποτέλεσμα αυτά που γράφεις αν
και σου φαίνονται σωστά σε ένα διαστρεβλωμένο κόσμο που έχεις
κατασκευάσει που όμως εν πολλοίς οφείλεται στην άγνοια.

Μερικά βασικά πραγματάκια.
Όλες οι συνδέσεις στον κόσμο του internet βασίζονται, ανάγονται ή
μπορούν να περιγραφούν με το μοντέλο που έχει θεσπίσει ο οργανισμός
ISO το μοντέλο OSI. Αυτό που γράφω ανήκει στο network 012 class κάθε
ΤΕΕ, ΙΕΚ, ΤΕΙ, Πανεπιστημίου και δεν είναι νέα για κανένα.

Όταν θες να συνδεθείς στο www.ceid.upatras.gr και ο δικτυακός σου
εξοπλισμός είναι ένα ταπεινό (px) PSTN MODEM αυτό που γίνεται είναι το
εξής: Ο Υπολογιστής σου θεωρεί με κάποιον τρόπο(λέγε με drivers) το
modem ως μια δικτυακή συσκευή επιπέδου 2 ή 3 και συνδέεται πάνω της
μέσω καλωδίωσης πχ σειριακό interface, PCI bus, κτλ. Δικτυακά το πώς
επικοινωνεί ο υπολογιστής με την συσκευή το θεωρούμε ως μαύρο κουτί
(πχ δεν μας ενδιαφέρει αν στείλει HUP ο πυρήνας στο modem η όχι). Έτσι
λοιπόν όταν θες να συνδεθείς στον παραπάνω web server αυτό που γίνεται
είναι το εξής: Με κάποιο «μαγικό» τρόπο ο υπολογιστής ειδοποιεί το
modem για το τι θέλει και στην συνέχεια το modem διαμορφώνει αυτή την
αίτηση. Ας δούμε τι γίνεται ακριβώς: Εσύ (ο browser σου) θες να κάνεις
HTTP GET τα περιεχόμενα της σελίδας (επίπεδο εφαρμογής). Αυτό
μεταφράζεται αυτόματα σαν ένα socket connection (ο browser από την
μεριά του ζητάει να δημιουργηθεί ένα TCP connection στο
www.ceid.upatras.gr στο port 80 (επίπεδο μεταφοράς). Το TCP connection
μεταφέρει την αίτησή σου σε κομμάτια (segments) στο επίπεδο δικτύου
που δεν είναι άλλο από το IP δίκτυο. Και εδώ κάθε TCP segment σπάει σε
άλλα μικρότερα κομμάτια που φτιάχνουν την IP κίνηση. Στην συνέχεια τα
IP πακέτα από το modem σου μετατρέπονται σε ηλεκτρικά σήματα που
αποστέλλονται μέσω της τηλεφωνικής γραμμής στον ISP σου. Αυτός
μεταφράζει τα ηλεκτρικά σήματα σε ip datagrams και τα προωθεί προς τον
κατάλληλο κόμβο (με την βοήθεια κάποιου πρωτοκόλλου δρομολόγησης) σε
κάποιο κόμβο που βρίσκεται λίγο ποιο κοντά στον κόμβο προορισμό. Αυτή
η διαδικασία συνεχίζεται (ηλεκτρικά σήματα, ip πακέτα) μέχρι να φτάσει
το κάθε πακέτο στον προορισμό του. Εκεί αναλαμβάνει ο κόμβος
παραλήπτης να συνενώσει το μήνυμα και να παράγει το σταλθέν TCP
segment. Στην συνέχεια ανάλογα με την πόρτα για την οποία προορίζεται
το πακέτο το προωθεί κατάλληλα. (Δες και το
http://www.ussg.iu.edu/usail/network/nfs/network_layers.html για
περισσότερες πληροφορίες)

Τα sequence numbers που αναφέρεις και για τα οποία στεναχωριέσαι στην
ουσία αποτελούν ένα μηχανισμό που παρέχει το επίπεδο μετάδοσης
δεδομένων για flow control και end to end reliability. Αν σου
απαντήσει ο apache
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
                    <HTML><HEAD><TITLE>400 Bad Request</TITLE>

</HEAD><BODY>
                                              <H1>Bad Request</H1>Your
browser sent a request that this server could not understand.<P><HR>

                     <ADDRESS>Apache/1.3.29 Server at
www.ceid.upatras.gr Port 80</ADDRESS></BODY></HTML>

Και στο τέλος σου στείλει και ένα FUCK OFF ή οποιαδήποτε άλλη
πληροφορία σε ένα TCP Segment μετά πριν ή οπουδήποτε πάνω στο ίδιο TCP
session τότε απλά το σύστημά σου θα (προσπαθήσει να) το μεταφράσει σε
κάτι που έχει νόημα για την ίδια την εφαρμογή (Δεν το δήλωσα ρητά ότι
ότι έρχεται μέσω TCP το αντιλαμβάνεται μονάχα η ίδια η εφαρμογή σαν
έννοια με νόημα εε? Ας το κάνω τώρα!) και έτσι το παραπάνω θα έχει ένα
FUCK OFF μετά το html tag.

Η υπερβολική κατά την άποψη μου διατύπωση ότι ένα well crafted TCP
segment μπορεί να ρίξει το modem/router να ανάψει τον θερμοσίφωνα ή να
κλείσει το αιρ condition του σπιτιού σου πιστεύω ότι κινείται στην
σφαίρα της επιστημονικής φαντασίας (Λες να διαβάζει κανείς από την
Microsoft την λίστα και να του μπαίνουν ιδέες??? :-P ))

Στο διαταύτα να εκφράσω τον ισχυρισμό μου ότι για να φας κουλούρι στο
domain σου θα πρέπει να τρέχεις προβληματικές εφαρμογές (Δες το
OpenBSD: τρέχει μόνο τα βασικά ---> Τον πυρήνα ;-) ) και να μην
λαμβάνεις μέτρα να τις προστατέψεις. Αλλά ακόμα και θεωρητικά «καλές»
εφαρμογές να τρέχεις ποιο το νόημα να τις δείχνεις σε ανθρώπους που
δεν τους αφορούν? Οπότε η προσέγγιση που κάνεις για το TCP θα
επωφελούνταν σίγουρα αν κάποια στιγμή καταλάβαινες πως λειτουργεί ο
μηχανισμός αλλά κυρίως καταλάβαινες ότι δεν πρέπει να προστατεύεις την
τηλεόραση τον ηλεκτρικό θερμοστάτη ή την καφετιέρα

Φιλικά
Νίκος


ΥΓ sorry για το size αλλα βαρέθηκα την βαλίτσα που πηγαινε πολυ μακριά.
ΥΓ1. Βρε τι απαίσια γλωσσα που είναι αυτή η perl πωπω... ( :-P )
-- 
-
Undergraduate Student of Department of Computer Engineering and
Informatics ( http://www.ceid.upatras.gr )

   WARNING: posting to or from gmail might disclose sensitive information
   to people you don't entirely trust.  For safe, private communication use
   korkarak (at) ceid (dot) upatras (dot) gr , and my public PGP key from
   http://students.ceid.upatras.gr/~korkakak/mykey




More information about the Linux-greek-users mailing list