Πώς αυτό το Java API — μάλλον η εφαρμογή του θα μπορούσε να έχει καταστροφικές συνέπειες στην ασφάλεια της εφαρμογής σας, και wτι μπορείτε να κάνετε για αυτό;

Οι επιθέσεις που βασίζονται στο JNDI έχουν προκαλέσει όλεθρο σε κρίσιμες για την αποστολή εφαρμογές Java τα τελευταία χρόνια — όχι επειδή κάτι δεν πάει καλά με αυτό το ίδιο το API, αλλά λόγω του αμελούς τρόπου με τον οποίο το χρησιμοποιούν οι προγραμματιστές.

Τι είναι το JNDI; Μια απλή αναζήτηση στο διαδίκτυο αποκαλύπτει:

Η Διεπαφή ονομάτων και καταλόγου Java (JNDI) είναι ένα API Java για μια υπηρεσία καταλόγου που επιτρέπει στους πελάτες λογισμικού Java να ανακαλύπτουν και να αναζητούν δεδομένα και πόρους (στο τη μορφή της Java αντικείμενα) μέσω ονόματος. Όπως όλα τα Java API που διασυνδέονται με συστήματα κεντρικού υπολογιστή, το JNDI είναι ανεξάρτητο από την υποκείμενη υλοποίηση.
- Wikipedia

Η περίφημη παραβίαση του Equifax που θεωρείται «εντελώς αποτρέψιμη» προέκυψε από μια ευάλωτη έκδοση του Apache Struts που εκτελείται στους διακομιστές της εταιρείας. Η πραγματική ευπάθεια (CVE-2015–5638), ωστόσο, σχετίζεται με το JNDI, γι' αυτό είναι συνετό να κατανοήσουμε τις υποκείμενες λεπτομέρειες, καθώς αυτό θα μπορούσε να συμβεί με οποιαδήποτε εφαρμογή. Για παράδειγμα, μόλις τον περασμένο μήνα η Veracode κυκλοφόρησε τη δική της συμβουλευτική δείχνοντας ότι πολλαπλά σημεία Spring Boot ενεργοποιητή είναι ανοιχτά σε εκμετάλλευση, με τις εντολές JNDI να είναι ένα από τα διανύσματα επίθεσης.

Βασικά

Στον πυρήνα του, το JNDI δεν είναι τίποτα άλλο από ένα API που επιτρέπει σε έναν προγραμματιστή να εκτελεί διάφορες λειτουργίες ερωτημάτων και πρόσβασης καταλόγου. Αυτή η ανάρτηση StackOverflow το εξηγεί αρκετά καλά. Ανάλογα με το πλαίσιο της εφαρμογής σας, μπορεί να είναι ο προτιμώμενος τυπικός τρόπος πρόσβασης σε υπηρεσίες όπως το LDAP, για παράδειγμα, σε αντίθεση με την εφαρμογή της δικής σας λύσης από την αρχή.

Ουσιαστικά, ως προγραμματιστής Java, θέλετε η εφαρμογή σας να έχει πρόσβαση σε μια υπηρεσία χωρίς να σας ενδιαφέρει ποια είναι η υποκείμενη υπηρεσία καταλόγου από την οποία ανακτάται. Εκεί είναι χρήσιμο το JNDI.

Μηχανισμοί επίθεσης

Το πρόβλημα προκύπτει λόγω κοινών αμελών λαθών που γίνονται από τους προγραμματιστές και όχι απαραίτητα το ίδιο το API. Για παράδειγμα, η αξιοπιστία της εξωτερικής εισόδου που προέρχεται από κεφαλίδες αιτημάτων HTTP — ουσιαστικά αυτό που παρατηρούμε στην περίπτωση Struts, αρχεία, πεδία εισαγωγής χρήστη, σειριακά αντικείμενα και η απευθείας μετάδοση αυτής της εισόδου σε διάφορες εντολές JNDI που χρησιμοποιούνται από το πρόγραμμά σας είναι κακή πρακτική. , όπως και η ύπαρξη εσφαλμένα ρυθμισμένου διακομιστή.

Πρόληψη

Λοιπόν, πώς αποτρέπετε τα τρωτά σημεία του JNDI στην εφαρμογή Ιστού σας;

Πρώτα πρώτα, το να κάνετε τη δέουσα επιμέλεια ως προγραμματιστής αποδίδει καρπούς. Μην εμπιστεύεστε ποτέ την εξωτερική είσοδο και μην τη χρησιμοποιείτε ως-όπως στην εφαρμογή σας χωρίς την κατάλληλη διαφυγή και απολύμανση. Ακριβώς επειδή η είσοδος είναι σε σωστή μορφή (συντακτικά έγκυρη XML, YAML ή σειριακό αντικείμενο) ή προέρχεται από αξιόπιστη πηγή, δεν σημαίνει ότι δεν είναι κακόβουλη. Οι πιθανότητες είναι εάν η λογική του κώδικά σας εκτελεί εντολές συστήματος, το ίδιο μπορεί να κάνει και ένας έμπειρος εισβολέας.

Ένας από τους λόγους για τους οποίους είμαι περήφανος που συσχετίζομαι με το Sonatype είναι η ταχύτητα με την οποία προσεγγίζουμε τα τρωτά σημεία που κυκλοφόρησαν πρόσφατα — όπως αυτά, σε λογισμικό ανοιχτού κώδικα, συχνά πριν καν τους εκχωρηθούν αναγνωριστικά CVE.
Οι πελάτες Sonatype είναι πιθανό να ανιχνεύσουν και να μετριάσουν τους κινδύνους που σχετίζονται με ευάλωτα στοιχεία ανοιχτού κώδικα πολύ νωρίς και με πολύ μεγαλύτερη ακρίβεια, σε σύγκριση με αυτούς που βασίζονται εξ ολοκλήρου στον δημόσιο ιστότοπο NVD.

Για να μάθετε το ηθικό hacking και να ξεκινήσετε μόνοι σας το κυνήγι ευπάθειας, μη διστάσετε να ανατρέξετε στο The Complete Ethical Hacking Course Bundle.

© 2019. Akshay ‘Ax’ Sharma (Twitter). Ολα τα δικαιώματα διατηρούνται.