Τι είναι η κωδικοποίηση κώδικα; Πώς να αποκρύψετε τον κωδικό σας για να τον κάνετε πιο ασφαλή

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

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

Στη συνέχεια, το Διαδίκτυο ήρθε και άλλαξε τα πάντα.

Σχεδόν μια νύχτα, τα δίκτυα υπολογιστών διασυνδέθηκαν. Και καθώς η πολυπλοκότητα μεγάλωνε, το ίδιο έκανε και οι πιθανότητες κάποιος να βρει το δρόμο του σε εκείνα τα δίκτυα που δεν ανήκαν εκεί.

Και τις περισσότερες φορές, αυτοί οι άνθρωποι θα έχουν τις δεξιότητες που απαιτούνται για την εκμετάλλευση ελαττωματικού κώδικα.

Και αυτό μας φέρνει στο σήμερα. Είναι μια εποχή χωρίς προηγούμενο απειλές για την ασφάλεια στον κυβερνοχώρο. Και τα νέα των επιθέσεων στον κυβερνοχώρο φαίνεται να έρχονται καθημερινά.

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

Και όμως, η σκλήρυνση του κώδικα του υπολογιστή δεν διδάσκεται ακόμα σε σχολεία κωδικοποίησης. Αλλά γίνεται απαραίτητο στη σύγχρονη ανάπτυξη εφαρμογών.

Για να το διορθώσω αυτό, σε αυτό το άρθρο θα εξηγήσω τι είναι η απόκρυψη κώδικα. Και θα σας δώσω επίσης μια επισκόπηση των έξι πιο κρίσιμων τεχνικών αποκάλυψης κώδικα που χρησιμοποιούνται σήμερα για να ξεκινήσετε να γράφετε πιο ασφαλές λογισμικό.

Τι είναι η κωδικοποίηση κώδικα;

Όπως υποδηλώνει το όνομά του, η απόκρυψη κώδικα αναφέρεται σε μια σειρά τεχνικών προγραμματισμού που έχουν σχεδιαστεί για να συγκαλύπτουν στοιχεία του κώδικα ενός προγράμματος. Είναι ο πρωταρχικός τρόπος που οι προγραμματιστές μπορούν να υπερασπιστούν το έργο τους ενάντια σε μη εξουσιοδοτημένη πρόσβαση ή αλλοίωση από χάκερ ή κλέφτες πνευματικής ιδιοκτησίας.

Και το πιο σημαντικό, οι τεχνικές αποκάλυψης κώδικα μπορεί να αλλάξουν τη δομή και τις μεθόδους που χρησιμοποιεί ένα πρόγραμμα για να λειτουργήσει, αλλά δεν αλλάζουν ποτέ την παραγωγή ενός προγράμματος.

Το πρόβλημα είναι ότι πολλές τεχνικές αποκάλυψης κώδικα μπορούν να προσθέσουν στην επιβάρυνση ενός προγράμματος και να αυξήσουν τον χρόνο εκτέλεσης.

Για αυτόν τον λόγο, είναι σημαντικό να κατανοήσετε ποιες τεχνικές είναι σχετικά χωρίς ποινές και ποιες μπορούν να προκαλέσουν προβλήματα απόδοσης. Μόλις γνωρίζετε το κόστος, μπορείτε να εξισορροπήσετε την προστασία και την απόδοση σε μια πραγματική εφαρμογή.

Εδώ είναι οι έξι πιο συχνά χρησιμοποιούμενες τεχνικές αποκάλυψης κώδικα που χρησιμοποιούνται σήμερα.

1. Κατάργηση περιττών δεδομένων

Η πρώτη τεχνική σκλήρυνσης κώδικα που πρέπει να εφαρμοστεί σε κάθε περίπτωση είναι να απαλλαγούμε από ό, τι στον κώδικα σας που δεν είναι απαραίτητο.

Κάτι τέτοιο θα βελτιώσει τη βάση κώδικα και θα μειώσει την επιφάνεια επίθεσης που υπερασπίζεστε.

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

2. Μεταμορφώστε τα δεδομένα

Το επόμενο πράγμα που πρέπει να κάνετε είναι να μετατρέψετε τα δεδομένα που επεξεργάζεται ο κώδικάς σας για να τα καταστήσετε μη αναγνωρίσιμα.

Τακτικές όπως η αντικατάσταση τιμών με εκφράσεις, η αλλαγή της μορφής της αποθήκευσης δεδομένων που χρησιμοποιείτε ή ακόμη και η χρήση δυαδικών εκδόσεων των αριθμών του κωδικού σας προσθέτουν όλες την πολυπλοκότητα. Και αυτή η πολυπλοκότητα θα κάνει δύσκολο για οποιονδήποτε να αναστρέψει τον κώδικά σας για να πάρει οτιδήποτε χρήσιμο από αυτόν.

Για παράδειγμα, ενδέχεται να χρησιμοποιήσετε κρυπτογράφηση συμβολοσειρών για να κάνετε δυσανάγνωστες τις συμβολοσειρές απλού κειμένου στον κώδικά σας. Η κρυπτογράφηση συμβολοσειρών μπορεί να χρησιμοποιεί απλή κωδικοποίηση base64, η οποία θα μετατρέψει αυτόν τον κωδικό:

String s = "Hello World"; Into: String s = new String(decryptString("SGVsbG8gV29ybGQ="));

Παρόλο που δεν είναι δύσκολο για έναν έμπειρο προγραμματιστή να εντοπίσει τι συμβαίνει εδώ, η αντιμετώπιση της αποκρυπτογράφησης πολλών χορδών είναι χρονοβόρα και απογοητευτική.

Και όταν συνδυάζεται με μερικές από τις άλλες τεχνικές αποκάλυψης κώδικα, οι μετασχηματισμοί δεδομένων είναι μια αποτελεσματική πρώτη γραμμή άμυνας.

3. Χρησιμοποιήστε την παρακμή παραγγελίας διαδικασίας

Μία από τις δύσκολες απαιτήσεις του αποκωδικοποιητικού κώδικα είναι ότι εξακολουθείτε να χρειάζεστε τον κώδικά σας για να λειτουργήσει όπως προβλεπόταν όταν τελειώσετε.

Αλλά δεν υπάρχει τίποτα που να λέει ότι πρέπει να εκτελέσετε τον κωδικό σας με οποιαδήποτε λογική σειρά. Εάν συνδυάσετε τη σειρά των λειτουργιών του κωδικού σας, μπορείτε να επιτύχετε το σωστό αποτέλεσμα - αλλά δυσκολεύεστε πολύ έναν τρίτο να κατανοήσει τι κάνει ο κώδικάς σας.

Η μόνη προειδοποίηση είναι ότι πρέπει να είστε προσεκτικοί για να μην δημιουργήσετε πάρα πολλούς χωρίς νόημα βρόχους και αδιέξοδα, επειδή μπορεί κατά λάθος να επιβραδύνετε τον χρόνο εκτέλεσης του κώδικα.

Για παράδειγμα, ρίξτε μια ματιά στο ακόλουθο απόσπασμα, το οποίο υπολογίζει το άθροισμα και τον μέσο όρο των 100 αριθμών:

int i=1, sum=0, avg=0 while (i = 100) { sum+=i; avg=sum/i; i++; }int i=1, sum=0, avg=0 while (i = 100) { sum+=i; avg=sum/i; i++; }

Με την προσθήκη μιας μεταβλητής υπό όρους, είναι δυνατό να συγκαλυφθεί τι κάνει ο κώδικας. Αυτό συμβαίνει επειδή μια ανάλυση της συνάρτησης θα απαιτούσε γνώση του τι εισάγεται σε αυτήν για να ξεκινήσει.

Στο παρακάτω απόσπασμα, η υπό όρους μεταβλητή «τυχαία» δημιουργεί μια πιο περίπλοκη δομή κώδικα που καθιστά πολύ πιο δύσκολο να αποκρυπτογραφηθεί:

int random = 1; while (random != 0) { switch (random) { Case 1: { i=0; sum=1; avg=1; random = 2; break; } case 2: { if (i = 100) random = 3; else random = 0; break; } case 3: { sum+=i;avg=sum/i ; i++; random = 2; break; } } }

4. Δοκιμάστε το Debug Obfuscation

Μερικές φορές, ένας αποφασισμένος εισβολέας μπορεί να μάθει κάθε είδους χρήσιμες πληροφορίες σχετικά με τον κωδικό σας εξετάζοντας τις πληροφορίες εντοπισμού σφαλμάτων.

Και σε ορισμένες περιπτώσεις, μπορεί να βρουν τα κλειδιά για να ξετυλίξουν μερικές από τις άλλες τεχνικές συσκότισης που χρησιμοποιείτε.

Έτσι, όπου είναι δυνατόν, είναι καλή ιδέα να καταργήσετε την πρόσβαση σε πληροφορίες εντοπισμού σφαλμάτων. Και όταν αυτό δεν είναι επιλογή, η απόκρυψη οποιωνδήποτε πληροφοριών αναγνώρισης στην αναφορά εντοπισμού σφαλμάτων είναι απαραίτητη.

5. Χρησιμοποιήστε την τυχαιοποίηση διευθύνσεων

For almost thirty years, errors related to memory handling have been the most common software vulnerabilities hackers exploit – even though every programmer knows that the problem persists.

And it's not just among beginners. Around 70% of the vulnerabilities in Google's Chrome web browser stem from memory errors.

The reality is, it's all but impossible to prevent all memory programming errors, especially if you're using languages like C and C++. But what you can do is include some memory randomization features in your code that will help.

At execution, if your code and data's virtual addresses get assigned random values, it gets much harder to find and exploit any unpatched vulnerabilities.

Plus, it adds another benefit, too. It makes it so that even a successful hack of your code is difficult – if not impossible – to replicate. That alone makes it much less likely that an attacker will waste their time trying to hack your software.

6. Rotate the Obfuscated Code

As much as the above techniques work to frustrate attackers, they're far from a perfect defense. Anyone with enough time and skills will still find a way to defeat them. But that brings us to one of the most essential obfuscation techniques of all.

Since all obfuscation techniques aim to increase the complexity of an attacker's work, anything you can do to set them back to square one is a great defensive measure. So, to keep your code protected, use the internet to your advantage.

You can issue periodic updates that rotate the nature and specifics of the obfuscation techniques you're using. Every time you do, all the work someone may have been putting into cracking your software becomes a waste of time.

If you rotate your obfuscation tactics often enough, it won't be worth it for anyone to try and keep up an analysis long enough to succeed.

Security Through Obscurity

The bottom line here is that there's no such thing as 'unhackable' code. No matter how hard a programmer tries, there's always going to be a vulnerability somewhere. Not that you shouldn't keep trying, though.

But in the real world, your code doesn't have to be perfect. It just has to be hard enough to crack that nobody in their right mind would bother trying. And for those who aren't in their right mind, it just has to be complicated and time-consuming enough to keep them at bay.

And that's just what the six tactics above can help you accomplish. But remember, no defense comes without a cost. When deploying these options, make sure to weigh the execution-time penalties they may create against the benefits they provide.

If you're working on something especially sensitive, throwing every possible curveball might be worth it. But if you're writing a quote of the day generator – maybe don't worry as much.

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

Προτεινόμενη φωτογραφία από ThisIsEngineering από Pexels.