Source code Review / SAST Tools
Κατευθύνσεις και Λίστες εργαλείων
Πολυγλωσσικά Εργαλεία
Υπάρχει ένα δωρεάν πακέτο για ανασκόπηση 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 σε έργα Ανοιχτού Κώδικα.
Εγκατάσταση
Quick Start - Ετοιμάστε τη βάση δεδομένων
Το πρώτο πράγμα που πρέπει να κάνετε είναι να ετοιμάσετε τη βάση δεδομένων (δημιουργήστε το δέντρο κώδικα) ώστε αργότερα οι ερωτήσεις να εκτελούνται πάνω σε αυτήν.
Μπορείτε να επιτρέψετε στο 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).
Γρήγορη Εκκίνηση
Δωρεάν για δημόσια αποθετήρια.
NodeJS
yarn
pnpm
nodejsscan: Στατικός σαρωτής ασφαλείας κώδικα (SAST) για εφαρμογές Node.js που υποστηρίζεται από libsast και semgrep.
RetireJS: Ο στόχος του Retire.js είναι να σας βοηθήσει να ανιχνεύσετε τη χρήση εκδόσεων βιβλιοθηκών JS με γνωστές ευπάθειες.
Electron
electronegativity: Είναι ένα εργαλείο για την αναγνώριση κακών ρυθμίσεων και προτύπων ασφαλείας σε εφαρμογές βασισμένες σε Electron.
Python
Bandit: Ο Bandit είναι ένα εργαλείο σχεδιασμένο για να βρίσκει κοινά ζητήματα ασφαλείας στον κώδικα Python. Για να το κάνει αυτό, ο Bandit επεξεργάζεται κάθε αρχείο, δημιουργεί ένα AST από αυτό και εκτελεί κατάλληλα πρόσθετα στους κόμβους του AST. Μόλις ο Bandit ολοκληρώσει τη σάρωση όλων των αρχείων, δημιουργεί μια αναφορά.
safety: Το Safety ελέγχει τις εξαρτήσεις Python για γνωστές ευπάθειες ασφαλείας και προτείνει τις κατάλληλες διορθώσεις για τις ευπάθειες που ανιχνεύονται. Το Safety μπορεί να εκτελείται σε μηχανές προγραμματιστών, σε CI/CD pipelines και σε παραγωγικά συστήματα.
Pyt: Μη συντηρούμενο.
.NET
RUST
Java
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] |
Πηγαίνετε
PHP
Wordpress Plugins
https://www.pluginvulnerabilities.com/plugin-security-checker/
Solidity
JavaScript
Discovery
Burp:
Spider και ανακάλυψη περιεχομένου
Sitemap > φίλτρο
Sitemap > δεξί κλικ στο domain > Engagement tools > Βρείτε scripts
waybackurls <domain> |grep -i "\.js" |sort -u
Static Analysis
Unminimize/Beautify/Prettify
Δείτε μερικά από τα εργαλεία που αναφέρονται στο 'Deobfuscate/Unpack' παρακάτω.
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 να εκτυπώνεται αντί να εκτελείται.Στη συνέχεια, επικολλήστε τον τροποποιημένο (και ακόμα αποσυμπιεσμένο) js στο https://jsconsole.com/ για να δείτε τον αποσυμπιεσμένο js να καταγράφεται στην κονσόλα.
Τέλος, επικολλήστε την αποσυμπιεσμένη έξοδο στο https://prettier.io/playground/ για να την ομορφύνετε για ανάλυση.
Σημείωση: Αν εξακολουθείτε να βλέπετε συσκευασμένο (αλλά διαφορετικό) js, μπορεί να είναι αναδρομικά συσκευασμένο. Επαναλάβετε τη διαδικασία.
References
Tools
Less Used References
Last updated