Шта је замућење кода? Како прикрити свој код да би био сигурнији

У најранијим данима рачунарства програмери нису морали да брину о мрежама. Могли су се само усредсредити на то да осигурају да њихов софтвер служи својој намени и да не пречесто пада.

А просечна особа која је дошла у контакт са тим софтвером није била претња. Већина корисника се не би трудила ни читати корисничке приручнике испоручене у кутији софтвера, а камоли претражити код због рањивости.

Тада се појавио интернет и све променио.

Скоро преко ноћи рачунарске мреже постале су међусобно повезане. А како је сложеност расла, тако су расле и шансе да се неко нађе у тим мрежама којима тамо није место.

И чешће него не, ти људи би имали вештине потребне за искоришћавање погрешног кода.

И то нас доводи до данас. Време је невиђених претњи за кибернетску сигурност. А чини се да вести о сајбер нападима долазе свакодневно.

Као одговор на то, мрежни менаџери примењују све софистицираније одбрамбене системе како би ојачали своје мреже од уљеза. И они сада очекују да програмери софтвера уложе додатне кораке како би осигурали свој код како би спречили неовлашћени приступ.

Па ипак, очвршћавање рачунарског кода се још увек не учи много у школама за кодирање. Али то постаје неопходно у савременом развоју апликација.

Да бих то поправио, у овом чланку ћу објаснити шта је замућење кода. Такође ћу вам дати преглед шест најважнијих техника замагљивања кода које се данас користе да бисте започели пут ка писању сигурнијег софтвера.

Шта је замућење кода?

Као што му само име говори, замагљивање кода односи се на низ програмских техника дизајнираних за прикривање елемената програмског кода. То је примарни начин на који програмери могу да одбране свој рад од неовлашћеног приступа или промене од стране хакера или лопова интелектуалне својине.

И што је најважније, технике замагљивања кода могу променити структуру и методе које програм користи да би функционисале, али никада не мењају излаз програма.

Проблем је у томе што многе технике замагљивања кода могу додати опсег програма и повећати време извршавања.

Из тог разлога је пресудно разумети које су технике релативно бесплатне и које могу проузроковати проблеме у перформансама. Када сазнате трошкове, могуће је уравнотежити заштиту и перформансе у стварној апликацији.

Ево шест најчешће коришћених техника замућења кодова које се данас користе.

1. Уклоните сувишне податке

Прва техника учвршћивања кода коју треба применити у сваком случају је уклањање свега што је у вашем коду непотребно.

То ће усмјерити вашу базу кода и смањити површину напада коју браните.

То значи уклањање сувишних функција, уклањање грешака у информацијама и што више метаподатака. Укратко - све што нападачу може дати путоказ који би га могао довести до рањивости.

2. Трансформишите податке

Следеће што треба да урадите је да трансформишете податке које ваш код обрађује како би их учинили непрепознатљивим.

Тактике попут замене вредности изразима, промене формата складишта података које користите или чак употребе бинарних верзија бројева вашег кода додају сложеност. А та сложеност ће отежати било коме да изврши реверзни инжењеринг вашег кода да из њега добије било шта корисно.

На пример, можете користити шифровање низа да бисте учинили низове обичног текста у коду нечитким. Шифровање низа може користити једноставно кодирање басе64, што би претворило овај код:

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. Покушајте са уклањањем грешака

Понекад одлучни нападач може научити све врсте корисних информација о вашем коду испитивањем његових информација о отклањању грешака.

А у неким случајевима могу пронаћи кључеве за разоткривање неких других техника замагљивања које користите.

Дакле, где год је то могуће, добра идеја је уклонити приступ информацијама за отклањање грешака. А када то није опција, неопходно је прикрити било коју идентификациону информацију у извештају о отклањању грешака.

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.

Међутим, ипак одлучите да наставите, не заборавите да одвојите време да учврстите свој код на овај или онај начин. То је само прави начин да се ствари раде у свету препуном претњи сајбер безбедности иза сваког угла.

Истакнута фотографија компаније ТхисИсЕнгинееринг из компаније Пекелс.