Υγιεινή της αλυσίδας εφοδιασμού
Ένας Mac ανάπτυξης μαζεύει λογισμικό όπως ένα γκαράζ μαζεύει εργαλεία. Τα περισσότερα εγκαταστάθηκαν για μια δουλειά, πριν από χρόνια, και έκτοτε κανείς δεν τα ξανακοίταξε. Το Homebrew είναι πολύ καλό στο να βάζει αυτό το λογισμικό στο μηχάνημά σας. Για το τι του συμβαίνει μετά δεν έχει τίποτα να πει — και για κάποια από αυτά υπάρχουν πλέον δημοσιευμένα CVE.
Το brew outdated σας λέει τι έχει νεότερη έκδοση. Το brew doctor σας λέει πότε η ίδια η εγκατάστασή σας δεν είναι υγιής. Και τα δύο είναι πραγματικά χρήσιμα, και κανένα δεν είναι έλεγχος ασφάλειας — το «υπάρχει κάτι νεότερο» και το «αυτό που έχετε είναι ευάλωτο» είναι διαφορετικά ερωτήματα με διαφορετική επείγουσα φύση.
Το brew audit είναι η εντολή στην οποία καταφεύγουν όλοι και αυτή που παραπλανά περισσότερο: ελέγχει αν μια φόρμουλα είναι σωστά διαμορφωμένη για υποβολή στο Homebrew. Είναι έλεγχος της συνταγής, όχι του λογισμικού που κάθεται στον δίσκο σας. Τίποτα στα προεπιλεγμένα εργαλεία δεν συγκρίνει τις εγκατεστημένες εκδόσεις σας με μια βάση ανακοινώσεων ασφαλείας.
Πώς λειτουργεί
Κάθε εγκατεστημένη φόρμουλα και κάθε cask συγκεντρώνονται μαζί με την έκδοσή τους — η ίδια λίστα που θα σας έδινε το brew list --versions, χωρίς την αντιγραφή.
Τα πακέτα αυτά αναζητούνται ομαδικά στο OSV. Η αναζήτηση γίνεται ζωντανά, οπότε ένας έλεγχος αποτυπώνει τις ανακοινώσεις μέχρι τη στιγμή που τον τρέχετε.
Κάθε εύρημα φέρει τη σοβαρότητα που δίνει η ίδια η ανακοίνωση, όπου δημοσιεύεται, αλλιώς τη βαθμολογία CVSS. Στη γραμμή του πακέτου εμφανίζεται το χειρότερο εύρημα.
Κάθε εύρημα οδηγεί στην επίσημη ανακοίνωση, και η λίστα των ξεπερασμένων πακέτων απέχει ένα κλικ — σχεδόν πάντα η λύση είναι απλώς η διορθωμένη έκδοση.
Τα ευρήματα προέρχονται από το OSV, την ανοιχτού κώδικα βάση ευπαθειών που συντηρεί η Google, με ζωντανή αναζήτηση αντί για ένα στιγμιότυπο μέσα στην εφαρμογή. Αυτό ακριβώς είναι το θέμα αυτής της σελίδας: μια βάση παγωμένη τη μέρα της κυκλοφορίας είναι ήδη παλιά όταν εγκαθιστάτε την εφαρμογή, και αυτή η παλαιότητα είναι όλο το πρόβλημα που λύνεται εδώ.
Διαβάζοντας ένα εύρημα
Εκμεταλλεύσιμη εξ αποστάσεως, ή σχεδόν χωρίς κόπο. Αξίζει να το δείτε σήμερα.
Σοβαρή, συνήθως υπό προϋποθέσεις. Αξίζει να το δείτε αυτή την εβδομάδα.
Υπαρκτή αλλά στενή — συχνά απαιτεί τοπική πρόσβαση ή ασυνήθιστη ρύθμιση.
Η σοβαρότητα προέρχεται από την ίδια την ανακοίνωση όπου ο εκδότης δίνει μία, αλλιώς από τη βαθμολογία CVSS της. Ένα πακέτο με πολλά ευρήματα κατατάσσεται με βάση το χειρότερο, οπότε η γραμμή που βλέπετε στη λίστα είναι η γραμμή με την οποία πρέπει να το κρίνετε.
Το Brew Doctor καλύπτει το άλλο μισό της υγιεινής του μηχανήματος — την κατάσταση του Homebrew αντί για τα πακέτα μέσα του. Χωρίζεται σε δύο είδη προειδοποίησης, και η διαφορά είναι σκόπιμη:
Μη συνδεδεμένα kegs, ελλείπουσες εξαρτήσεις, καταργημένες φόρμουλες, άκυρα μεταδεδομένα cask — γι' αυτά το brew προσφέρει εντολή, οπότε το Doctor σας δίνει κουμπί «Διόρθωση» και ξανατρέχει τον έλεγχο μετά.
Μια εντολή sudo, μια αλλαγή στο PATH, μια κλήση xcode-select — αυτά ανήκουν στο κέλυφός σας, όχι σε μια εφαρμογή που εκτελεί εντολές για λογαριασμό σας. Το Doctor τα εμφανίζει ως αντιγράψιμες εντολές και αφήνει σε εσάς την απόφαση.
Εδώ κρίνεται αν όλα τα υπόλοιπα λειτουργούν. Ο έλεγχος κατ' απαίτηση απαντά στο ερώτημα «είμαι εκτεθειμένος αυτή τη στιγμή;» — αλλά οι ανακοινώσεις δημοσιεύονται συνεχώς, και η έκθεση ζει ακριβώς στο κενό ανάμεσα στη δημοσίευση και στην ανακάλυψη. Μια ευπάθεια που τη μαθαίνετε τρεις μήνες αργότερα δεν διαφέρει ουσιαστικά από μία που δεν τη μάθατε ποτέ.
Γι' αυτό ο έλεγχος τρέχει εξ ορισμού στην εκκίνηση, και ένας βοηθός στη γραμμή μενού ξαναελέγχει με το διάστημα που ορίζετε και σημαδεύει τον εαυτό του όταν προκύψει κάτι. Δεν χρειάζεται να θυμάστε τίποτα. Αυτή είναι όλη η σχεδίαση: η ειδοποίηση βρίσκει εσάς, αντί να περιμένει να πάτε εσείς να την ψάξετε.
Απαιτεί macOS 14 (Sonoma) ή νεότερο, Apple Silicon ή Intel.
Ένας έλεγχος σας λέει αν κάτι στον Mac σας έχει γνωστή ευπάθεια — και ο βοηθός της γραμμής μενού συνεχίζει να σας το λέει από εκεί και πέρα. Μία εφάπαξ αγορά 10 €.