I. Principle of Least Privilige
a. SimpleWebServer Παράδειγμα
- Αν ο server τρέχει στο root account, οι clients θα μπορούν να έχουν πρόσβαση σε όλα τα αρχεία του συστήματος.
- serveFile() method δημιουργεί το FileReader αντικείμενο για arbitrary pathname από τον user
- Least Privilige: να μην τρέχει ο server στο root
b. Canonicalizing Pathnames
- checkPath() method εξασφαλίζει ότι το target path είναι κάτω από το current path κι όχι απλά στο pathname
String checkPath(String pathname) throws Exception {
File target = new File(pathname)
File cwd = new File(System.getProperty(“user.dir”));
/*User’s current working directory stored in cwd */
String targetStr = target.getCanonicalPath();
String cdwStr = cwd.getCanonicalPath();
If (!targetStr.startsWidth(cwdStr)
Throw new Exception(“File not Found”);
else return targetStr;
}
fr = new FileReader (checkPath(pathname));
II. Defense-in-Depth
a. Redundancy
b. Diversity
c. Layers of defense
d. Prevent, Detect, Contain and Recover
- Πρέπει να υπάρχουν μηχανισμοί για αποτροπή επιθέσεων, ανίχνευση παραβάσεων, επιθέσεις σε εξέλιξη και επαναφορά του συστήματος
- Η ανίχνευση είναι ιδιαίτερα σημαντική, αφού η ασφάλεια δικτύου δεν είναι απόλυτα functional κατά τη διάρκεια μίας επίθεσης
e. Password Security Παράδειγμα
- Ο Sys Admin προτείνει στους χρήστες να γίνει χρήση περίπλοκων passwords
- H ανίχνευση μπορεί να γίνει από τα server logs όπου είναι ορατά πολλπλά failed logins από συγκεκριμένη IP
- Αποτροπή login από ύποπτη IP ή επιπλέον checks (όπως cookies)
- Επαναφορά λογαριασμών όπου έχουν δεχθεί επίθεση, παύση ύποπτων transactions
III. Securing the Weakest Link
a. Unsecured Dial-In Hosts: War Dialers (historical)
b. Weak Passwords: easy to crack
- Το ένα τρίτο των χρηστών χρησιμοποιεί κωδικούς που μπορούν να βρεθούν σε ένα λεξικό
- Ο hacker με μία dictionary attack μπορεί να βρει με επιτυχία τον κωδικό
- Με την χρήση του Least Privilige μπορεί να γίνει μετρίαση της ζημιάς σε εκτιθεμένους λογαριασμούς
c. People Social Engineering Attacks
- Πολλοί χρήστες μπορούν να γίνουν θύματα κάποια phishing attack
- Ύπαρξη backdoors σε προγράμματα (απαραίτητο το code review)
- Ικανοποιημένοι χρήστες, δεν έχουν κίνητρα να εξαπατήσουν τον οργανισμό στον οποίο ανήκουν.
d. Buffer Overflows from garbage Input
e. Implementation Vulnerabilities
- Ένα σωστό design μπορεί να έχει bugs στην υλοποίηση
- Λανθασμένη χρήση της κρυπτογράφησης μπορεί να οδηγήσει ένα hacker στο να την παρακάμψει και να έχει πρόσβαση στα προστατευμένα δεδομένα
- Ακούσια μίξη ελέγχου και data
IV. Fail-Safe Stance
a. Πρόληψη και σχεδιασμός για ένα System Failure
b. SWS Fail-Safe Παράδειγμα
Public void serveFile (Output StreamWriter osw, String pathname) throws Exception {
Filereader fr = null;
Int c = -1;
StringBuffer sb = new StringBuffer();
/* … code excluded …*/
while (c != -1) {
sb.append ((char)c); // if memory run out, crashes!
c = fr.read();
}
osw.write (sb.toString());
c. Έλεγχος του File Length
- Serve file μόνο όταν υπάρχει απαιτούμενη διαθέσιμη μνήμη
pathname = checkPath(pathname); //canonicalize
File f = new File(pathname);
/* …*/
If (f.length() > Runtime.getRuntime().freeMemory()) {
throw new Exception();
}
d. Secure By Default
e. Simplicity
f. Usability for Security
- Whitten-Tygar definition: Security Software είναι χρηστική όταν οι χρήστες που θα κάνουν χρήση αυτής:
a. SimpleWebServer Παράδειγμα
- Αν ο server τρέχει στο root account, οι clients θα μπορούν να έχουν πρόσβαση σε όλα τα αρχεία του συστήματος.
- serveFile() method δημιουργεί το FileReader αντικείμενο για arbitrary pathname από τον user
- GET ../../../../etc/shadow HTTP/1.0
- η προσπέλαση στο UNIX, μέχρι το root θα περιλαμβάνει λίστα από usernames & encrypted passwords
- o hacker μπορεί χρησιμοποιήσει αυτές τις πληροφορίες για να εκτελέσει dictionary attack
- απαιτείται να γίνει canonicalize και validate του pathname
- Least Privilige: να μην τρέχει ο server στο root
b. Canonicalizing Pathnames
- checkPath() method εξασφαλίζει ότι το target path είναι κάτω από το current path κι όχι απλά στο pathname
String checkPath(String pathname) throws Exception {
File target = new File(pathname)
File cwd = new File(System.getProperty(“user.dir”));
/*User’s current working directory stored in cwd */
String targetStr = target.getCanonicalPath();
String cdwStr = cwd.getCanonicalPath();
If (!targetStr.startsWidth(cwdStr)
Throw new Exception(“File not Found”);
else return targetStr;
}
fr = new FileReader (checkPath(pathname));
II. Defense-in-Depth
a. Redundancy
b. Diversity
c. Layers of defense
d. Prevent, Detect, Contain and Recover
- Πρέπει να υπάρχουν μηχανισμοί για αποτροπή επιθέσεων, ανίχνευση παραβάσεων, επιθέσεις σε εξέλιξη και επαναφορά του συστήματος
- Η ανίχνευση είναι ιδιαίτερα σημαντική, αφού η ασφάλεια δικτύου δεν είναι απόλυτα functional κατά τη διάρκεια μίας επίθεσης
e. Password Security Παράδειγμα
- Ο Sys Admin προτείνει στους χρήστες να γίνει χρήση περίπλοκων passwords
- H ανίχνευση μπορεί να γίνει από τα server logs όπου είναι ορατά πολλπλά failed logins από συγκεκριμένη IP
- Αποτροπή login από ύποπτη IP ή επιπλέον checks (όπως cookies)
- Επαναφορά λογαριασμών όπου έχουν δεχθεί επίθεση, παύση ύποπτων transactions
III. Securing the Weakest Link
a. Unsecured Dial-In Hosts: War Dialers (historical)
b. Weak Passwords: easy to crack
- Το ένα τρίτο των χρηστών χρησιμοποιεί κωδικούς που μπορούν να βρεθούν σε ένα λεξικό
- Ο hacker με μία dictionary attack μπορεί να βρει με επιτυχία τον κωδικό
- Με την χρήση του Least Privilige μπορεί να γίνει μετρίαση της ζημιάς σε εκτιθεμένους λογαριασμούς
c. People Social Engineering Attacks
- Πολλοί χρήστες μπορούν να γίνουν θύματα κάποια phishing attack
- Ύπαρξη backdoors σε προγράμματα (απαραίτητο το code review)
- Ικανοποιημένοι χρήστες, δεν έχουν κίνητρα να εξαπατήσουν τον οργανισμό στον οποίο ανήκουν.
d. Buffer Overflows from garbage Input
e. Implementation Vulnerabilities
- Ένα σωστό design μπορεί να έχει bugs στην υλοποίηση
- Λανθασμένη χρήση της κρυπτογράφησης μπορεί να οδηγήσει ένα hacker στο να την παρακάμψει και να έχει πρόσβαση στα προστατευμένα δεδομένα
- Ακούσια μίξη ελέγχου και data
IV. Fail-Safe Stance
a. Πρόληψη και σχεδιασμός για ένα System Failure
b. SWS Fail-Safe Παράδειγμα
Public void serveFile (Output StreamWriter osw, String pathname) throws Exception {
Filereader fr = null;
Int c = -1;
StringBuffer sb = new StringBuffer();
/* … code excluded …*/
while (c != -1) {
sb.append ((char)c); // if memory run out, crashes!
c = fr.read();
}
osw.write (sb.toString());
c. Έλεγχος του File Length
- Serve file μόνο όταν υπάρχει απαιτούμενη διαθέσιμη μνήμη
pathname = checkPath(pathname); //canonicalize
File f = new File(pathname);
/* …*/
If (f.length() > Runtime.getRuntime().freeMemory()) {
throw new Exception();
}
d. Secure By Default
e. Simplicity
f. Usability for Security
- Whitten-Tygar definition: Security Software είναι χρηστική όταν οι χρήστες που θα κάνουν χρήση αυτής:
- Έχουν γνώση των security tasks τα οποία πρέπει να πραγματοποιήσουν
- Είναι ικανοί να ορίσουν πότε τα task εκτελέστηκαν με επιτυχία
- Δεν κάνουν σοβαρά λάθη
- Είναι ιδιαίτερα άνετοι με το περιβάλλον χρήσης
Δεν υπάρχουν σχόλια:
Δημοσίευση σχολίου