Source code Review / SAST Tools
Last updated
Last updated
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Υπάρχει ένα δωρεάν πακέτο για ανασκόπηση PRs.
Είναι ένα εργαλείο Ανοιχτού Κώδικα.
Κατηγορία | Γλώσσες |
---|---|
GA | C# · Go · Java · JavaScript · JSX · JSON · PHP · Python · Ruby · Scala · Terraform · TypeScript · TSX |
Beta | Kotlin · Rust |
Πειραματική | Bash · C · C++ · Clojure · Dart · Dockerfile · Elixir · HTML · Julia · Jsonnet · Lisp · |
Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση semgrep για VSCode για να αποκτήσετε τα ευρήματα μέσα στο VSCode.
Υπάρχει μια εγκαταστάσιμη δωρεάν έκδοση.
Υπάρχει μια εγκαταστάσιμη δωρεάν έκδοση αλλά σύμφωνα με την άδεια μπορείτε να χρησιμοποιείτε μόνο την δωρεάν έκδοση codeQL σε έργα Ανοιχτού Κώδικα.
Το πρώτο πράγμα που πρέπει να κάνετε είναι να προετοιμάσετε τη βάση δεδομένων (δημιουργήστε το δέντρο κώδικα) ώστε αργότερα οι ερωτήσεις να εκτελούνται πάνω σε αυτήν.
Μπορείτε να επιτρέψετε στο codeql να αναγνωρίσει αυτόματα τη γλώσσα του repo και να δημιουργήσει τη βάση δεδομένων
Αυτό συνήθως θα προκαλέσει ένα σφάλμα που λέει ότι έχει καθοριστεί περισσότερη από μία γλώσσα (ή ανιχνεύθηκε αυτόματα). Ελέγξτε τις επόμενες επιλογές για να το διορθώσετε!
Μπορείτε να το κάνετε αυτό χειροκίνητα υποδεικνύοντας το repo και τη γλώσσα (λίστα γλωσσών)
Αν το repo σας χρησιμοποιεί περισσότερες από 1 γλώσσα, μπορείτε επίσης να δημιουργήσετε 1 DB ανά γλώσσα υποδεικνύοντας κάθε γλώσσα.
Μπορείτε επίσης να επιτρέψετε στο codeql
να εντοπίσει όλες τις γλώσσες για εσάς και να δημιουργήσει μια βάση δεδομένων ανά γλώσσα. Πρέπει να του δώσετε ένα GITHUB_TOKEN.
Τώρα είναι επιτέλους η ώρα να αναλύσετε τον κώδικα
Θυμηθείτε ότι αν χρησιμοποιήσατε πολλές γλώσσες, μια βάση δεδομένων ανά γλώσσα θα έχει δημιουργηθεί στη διαδρομή που καθορίσατε.
Μπορείτε να οπτικοποιήσετε τα ευρήματα στο https://microsoft.github.io/sarif-web-component/ ή χρησιμοποιώντας την επέκταση VSCode SARIF viewer.
Μπορείτε επίσης να χρησιμοποιήσετε την επέκταση VSCode για να αποκτήσετε τα ευρήματα μέσα στο VSCode. Θα χρειαστεί να δημιουργήσετε μια βάση δεδομένων χειροκίνητα, αλλά στη συνέχεια μπορείτε να επιλέξετε οποιαδήποτε αρχεία και να κάνετε κλικ στο Δεξί Κλικ
-> CodeQL: Run Queries in Selected Files
Υπάρχει μια εγκαταστάσιμη δωρεάν έκδοση.
Μπορείτε επίσης να χρησιμοποιήσετε την snyk VSCode Extension για να αποκτήσετε ευρήματα μέσα στο VSCode.
Είναι Ανοιχτού Κώδικα, αλλά φαίνεται μη συντηρούμενο.
Java (Maven και Android), Kotlin (Android), Swift (iOS), .NET Full Framework, C#, και Javascript (Node.js).
Δωρεάν για δημόσια αποθετήρια.
yarn
pnpm
nodejsscan: Στατικός σαρωτής ασφαλείας κώδικα (SAST) για εφαρμογές Node.js που υποστηρίζεται από libsast και semgrep.
RetireJS: Ο στόχος του Retire.js είναι να σας βοηθήσει να ανιχνεύσετε τη χρήση εκδόσεων βιβλιοθηκών JS με γνωστές ευπάθειες.
electronegativity: Είναι ένα εργαλείο για την αναγνώριση κακών ρυθμίσεων και προτύπων ασφαλείας σε εφαρμογές βασισμένες σε Electron.
Bandit: Ο Bandit είναι ένα εργαλείο σχεδιασμένο για να βρίσκει κοινά ζητήματα ασφαλείας στον κώδικα Python. Για να το κάνει αυτό, ο Bandit επεξεργάζεται κάθε αρχείο, δημιουργεί ένα AST από αυτό και εκτελεί κατάλληλα πρόσθετα στους κόμβους του AST. Μόλις ο Bandit ολοκληρώσει τη σάρωση όλων των αρχείων, δημιουργεί μια αναφορά.
safety: Το Safety ελέγχει τις εξαρτήσεις Python για γνωστές ευπάθειες ασφαλείας και προτείνει τις κατάλληλες διορθώσεις για τις ευπάθειες που ανιχνεύονται. Το Safety μπορεί να εκτελείται σε μηχανές προγραμματιστών, σε CI/CD pipelines και σε παραγωγικά συστήματα.
Pyt: Μη συντηρούμενο.
Task | Command |
---|---|
Execute Jar | java -jar [jar] |
Unzip Jar | unzip -d [output directory] [jar] |
Create Jar | jar -cmf META-INF/MANIFEST.MF [output jar] * |
Base64 SHA256 | sha256sum [file] | cut -d' ' -f1 | xxd -r -p | base64 |
Remove Signing | rm META-INF/.SF META-INF/.RSA META-INF/*.DSA |
Delete from Jar | zip -d [jar] [file to remove] |
Decompile class | procyon -o . [path to class] |
Decompile Jar | procyon -jar [jar] -o [output directory] |
Compile class | javac [path to .java file] |
https://www.pluginvulnerabilities.com/plugin-security-checker/
Burp:
Spider και ανακάλυψη περιεχομένου
Sitemap > φίλτρο
Sitemap > δεξί κλικ στο domain > Engagement tools > Βρείτε scripts
waybackurls <domain> |grep -i "\.js" |sort -u
Δείτε μερικά από τα εργαλεία που αναφέρονται στο 'Deobfuscate/Unpack' παρακάτω.
Σημείωση: Ίσως να μην είναι δυνατόν να γίνει πλήρης αποσυμπίεση.
Βρείτε και χρησιμοποιήστε αρχεία .map:
Αν τα αρχεία .map είναι εκτεθειμένα, μπορούν να χρησιμοποιηθούν για εύκολη αποσυμπίεση.
Συνήθως, foo.js.map αντιστοιχεί σε foo.js. Αναζητήστε τα χειροκίνητα.
Χρησιμοποιήστε JS Miner για να τα αναζητήσετε.
Βεβαιωθείτε ότι διεξάγεται ενεργή σάρωση.
Διαβάστε 'Tips/Notes'
Αν βρεθούν, χρησιμοποιήστε Maximize για να αποσυμπιέσετε.
Χωρίς αρχεία .map, δοκιμάστε το JSnice:
Συμβουλές:
Αν χρησιμοποιείτε το jsnice.org, κάντε κλικ στο κουμπί επιλογών δίπλα στο κουμπί "Nicify JavaScript" και αποεπιλέξτε "Infer types" για να μειώσετε την ακαταστασία στον κώδικα με σχόλια.
Βεβαιωθείτε ότι δεν αφήνετε κενές γραμμές πριν από το script, καθώς μπορεί να επηρεάσει τη διαδικασία αποσυμπίεσης και να δώσει ανακριβή αποτελέσματα.
Για μερικές πιο σύγχρονες εναλλακτικές στο JSNice, μπορείτε να δείτε τα εξής:
Javascript decompiler, unpacker και unminify toolkit Wakaru είναι ο Javascript decompiler για σύγχρονα frontend. Επαναφέρει τον αρχικό κώδικα από μια συσκευασμένη και μεταγλωττισμένη πηγή.
Deobfuscate obfuscator.io, unminify και unpack bundled javascript
Un-minify Javascript code χρησιμοποιώντας ChatGPT Αυτό το εργαλείο χρησιμοποιεί μεγάλα γλωσσικά μοντέλα (όπως ChatGPT & llama2) και άλλα εργαλεία για να αποσυμπιέσει τον κώδικα Javascript. Σημειώστε ότι τα LLMs δεν εκτελούν καμία δομική αλλαγή – παρέχουν μόνο υποδείξεις για την μετονομασία μεταβλητών και συναρτήσεων. Η βαριά εργασία γίνεται από το Babel σε επίπεδο AST για να διασφαλιστεί ότι ο κώδικας παραμένει 1-1 ισοδύναμος.
Χρησιμοποιώντας LLMs για να αντιστρέψετε την ελαχιστοποίηση ονομάτων μεταβλητών JavaScript
Χρησιμοποιήστε console.log()
;
Βρείτε την τιμή επιστροφής στο τέλος και αλλάξτε την σε console.log(<packerReturnVariable>);
ώστε ο αποσυμπιεσμένος js να εκτυπώνεται αντί να εκτελείται.
Στη συνέχεια, επικολλήστε τον τροποποιημένο (και ακόμα obfuscated) js στο https://jsconsole.com/ για να δείτε τον αποσυμπιεσμένο js να καταγράφεται στην κονσόλα.
Τέλος, επικολλήστε την αποσυμπιεσμένη έξοδο στο https://prettier.io/playground/ για να την ομορφύνετε για ανάλυση.
Σημείωση: Αν εξακολουθείτε να βλέπετε packed (αλλά διαφορετικό) js, μπορεί να είναι αναδρομικά packed. Επαναλάβετε τη διαδικασία.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)