Δευτέρα 24 Φεβρουαρίου 2014

Secure Design Principles

I. Principle of Least Privilige

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 εκτελέστηκαν με επιτυχία
  • Δεν κάνουν σοβαρά λάθη
  • Είναι ιδιαίτερα άνετοι με το περιβάλλον χρήσης

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου