ҚҰрастырушылар: Шайхин Б. М., Байжанова Д. О. Ақпарат қауіпсіздігінің негіздері: 5В070400 Есептеу техникасы және бағдарламалық қамтамасыз ету мамандығының студенттері үшін дәрістер жинағы. Алматы: аэжБУ, 2013. 52 б



бет8/19
Дата02.02.2023
өлшемі329.01 Kb.
#469066
1   ...   4   5   6   7   8   9   10   11   ...   19
Жүйелік қауіпсіздік

Дәріс мақсаты: құпия сөз жүйелерінің құрылуын; криптографиялық әдістерді қолданудың ерекшеліктерін қарастыру.
Зерттеуден бағдарламаларды қорғау
Бағдарламаларды қорғаудағы ең сапалы әдістердің бірі болып ақпаратты криптографиялық түрлендіру болып табылады. Алайда шифрлау жүйенi жөндеуiш басқаруында немесе дизассемблер көмегiмен зерттеу бұзушыға криптографиялық қорғау алгоритмiн түсiнуге және оны қайталауға мүмкiндiк бередi. Сондықтан шифрлауды бағдарламаның кодын статикалық және динамикалық талдаудан қорғаумен бiрге қолдану қажет. Статикалық зерттеу – дизассемблер пайдаланумен, ал динамикалық зерттеу – жөндеуiш қолданумен орындалады. Дизассемблер – түсiнiксiз машиналық кодын жеңiл оқылатын Ассемблер тiлiнде мәтiнге түрлендiредi. Жөндеуiш – бағдарламаның әрбiр кодасы немесе бөлек кескiнi орындалған соң компьютерде барлық өтетiн процестер туралы хабарлайды. Бағдарламалық кодтың құпиялығын қамтамасыз ету үшiн барлық статикалық және динамикалық құралдардың жұмысының берекесiн қашыру (парализовать) немесе жұмысын терiс iстеуiн мәжбүр ету керек. Жалпы қабылданған «көрнекілік» пен «құрылымдықтан» өзге механизмдерді қорғауда «көрнекілікті» қолданған дұрыс, яғни бұл стиль күрделі және шатастыратын орындалу модулін алуға мүмкіндік береді.
Соңғы уақытта бұзуға қарсы қолданылатын құралдар ескірді деген ұғым жиі айтылады, хакерлік құралдар бағдарламалық кодты зерттеуден қорғайтын қорғаныстардың кез келгенінен өтуге мүмкіндігі бар.
Шынында да, кез келген қорғаныс құралын ашуға болады, себебі оның коды процессор арқылы қойылады. Бұзушы бағдарламаны жан-жақты виртуалды жүйеде зерттей алады, онда процессор, жады, сыртқы құрылғылар, операциялық орта эмулирленеді. Бұл жағдайда көптеген қарсы тұру тәсілдері тиімсіз болып саналады. Қандай да ортаның эмуляциясы сапалы болғанымен соңғысы болмыстан ерекше болады. Мысалы, аппаратураның мерзімдік сипаттамасының дәл эмуляциясының болмауынан және қорғалған бағдарлама осыдан шығатын барлық ақпаратты тани білетіндей.
Қорғаныс жүйесінің жасаушылардың барлығына ортақ мынадай қателіктерін көрсетуге болады:
- бағдарлама тек қана статистикалық анализ құралдарынан қорғалады да, нәтижесінде ол динамикалық түрде оңай зерттеледі және керісінше;
- аналогиялық жағдай мынадай орынды иеленеді, ағымдағы ақпаратты қайтаратын функция жұмысының нәтижесі эталондық (күтімдік) мәнге ауыстырылған жағдайда;
- жүйелік қорғаныс ашылғаннан кейін код барлығына бірдей ашық болады және басқа жүйенің ойында сақталады немесе дискіде сол мезетте не жедел түрде басқаруға беруге болады.
Сонымен, бұзылмайтын қорғаныс жүйесі жоқ және болуы да мүмкін емес, бірақ кез келген бұзушыдан сақтайтын қорғанысты қою ешкім және ешқашан мақсат етіп қойған жоқ. Қорғанысты қоюшылардың негізгі мақсаты:
- қарсыластардың қорғанысты бұзуға уақытын алу, осы уақытта контрмер қолдануға уақыт ұту;
- қорғанысты бұзуға кеткен құралды, жаңадан қорғаныс бағдарламасын жазу;
- бір-бірімен сәйкестендірілген кепілдендіру.
Тағы бір топ DOS-қа қорғаныс керек жоқ, себебі DOS ескірді деген пікір айтып жүр. Бірақ бұл кеңселік бағдарламашының логикасы! Шынымен, бір де бір кеңсе DOS-пен жұмыс істемейді. Алайда жауапкершілікті толық тағайындалған компьютерлік жүйедегі Бағдарламалардың барлығы дерлік соның қарамағында жұмыс істейді. Дәл осылар зерттеуден қорғанысты керек етеді. Кеңселік бағдарламаны бұзғаннан тек интеллектуалдық жеке меншік азап шегеді, ол тек үстінен түсетін пайдадан ғана айырылады. Ал жауапкершілік тағайындалған бағдарламаны бұзуды диверсанттар немесе террористер пайдалануы мүмкін, ол апатқа әкелуі мүмкін.
Сонымен, біз толық жауапкершілікті қолданыс үшін бағдарлама жазамыз. Сәйкесінше, біз ықтимал қарсылас барын ескеруіміз керек, ол біздің кодты зерттей отырып, өзінің мақсатына жету үшін бағдарлама алгоритмін өзгертуі керек.
Автоматикалық және интерактивті дизассемблермен күрес
Автоматикалық дизассемблер атқарылатын файлдың кодын талқылайды және листингті немесе соған тиісті қорытынды мәтіні қалыптастырады. Статистикалық кодтың анализі противотрассирлық жүйенің жасалу мүмкіншілігін жоққа шығарады. Дизассемблерленген мәтіннің бағдарламасын қарап шығып қорғау механизмін табуға және айналып кетуге болады. Сондықтан дизассемблерлеуден бағдарламаны қорғайтын жүйеастын реализациялау қажет.
Бағдарламаны статистикалық зерттеуден қорғау үшін бағдарламаның өзінің кодын модификациялау, кодты шифрлау, кодты қаптау немесе түрлі ассемблерлік трюктар арқылы, дизассемблердің шығу кодын бұрмалауға бағытталған:
- жасырынды командалармен басқаруды беру (динамикалық түрде өзгеретін адрес бойынша өту, JMP-дан RET арқылы, RET және CALL JMР арқылы), дизассемблермен құруда басқаруды беретін графты күрделендіреді;
- жасыратын код;
- жүктелетін модульдың стандартты емес форматын, мысалы, сегменттер кодында стекті анықтау т.с.с.
Сонымен қатар, бұл тәсілдердің түрлі комбинациялары мүмкін.
Кодты шатастырудың қарапайым тәсілі оның шартсыз өтулермен шатасуы болып табылады. Өту командасынан кейін жасыратын командаға бірнеше мағынасыз командалар және операция коды не/және байттарда үлкен өлшемді команда префиксі қойылады. Әрбір нақты жағдайда ұзындық мынадай есеппен алынады: бұл фиктивті команданың соңы шын команданың біреуінің ортасына түссін. Бұл дизассемблер осы командадан бастап бұрыс реттіліктегі командаларды шығаруға әкеледі. Ал кейде ештеңені қайтадан кодтамай, тек мәліметтерді хабарландыратын директивалар реттілігін жазады (DB, DW,…).
Бұл тәсілдің оңай және қысқа жолы – қорғалатын команданы ашуда шартты өту қолданылады. Алайда, бұл шарттың шындығы компилятор әсіресе дизассемблер үшін «түсінікті» болмау керек. Бұл тәсілдің артықшылығы – бағдарлама мәтініне қосымша, ешқашан орындалмайтын командаларды енгізуді талап етпейді. Бұл тәсіл бұзуға қарсы жақсы әдіс болуы мүмкін – бір уақытта дизассемблерді де, бұзушыны да адастырады.
Интерактивті дизассемблерлер шығатын мәтін/листингті бағдарламаның орындалатын кодын автоматикалық дизассемблерлер сияқты реттейді. Бірақ интерактивті дизассемблерлер автоматикалықтан мықты қолданбалы интерфейсімен (дизассемблерленген бағдарлама анализін жақсы жеңілдетеді) ерекшеленеді.
Интерактивті дизассемблерлер мынаған жол береді:
- айнымалылардың, таңбалардың, қысқа бағдарламалардың, т.с.с. атын өзгертуге, жаңа адрестер үшін атын енгізу, бар таңба/аттарды жоюға;
- нәтижелі мәтіндегі символдар реттілігін және орындалатын кодтағы байт реттілігін іздеуге;
- код учаскелерін ассемблерлік командалар немесе DB директивалар реттілігіне қайта дизассемблерлеуге;
- барлық сәйкес шақыруларға автоматты түрде қойылатын үзулерге, қысқа ағдарламаларға, т.с.с. түсініктеме (комментарий) беруге;
- бағдарлама сегменттерінің тізімін көруге;
- дизассемблерлік мәтінді орындалатын кодтың автоматты модификациясымен немесе онсыз өңдеуге/жөндеуге.
Түрлі интерактивті дизассемблерлер сонымен қатар басқа да мүмкіншіліктерді береді. Ең соңғы интерактивті дизассемблерлер (IDA) дизассемблерленген кодты тек ауыстыруға ғана емес, сонымен қатар дизассемблерлеу процесінің өзіне араласуына мүмкіндік береді.
Жоғарыда айтылған тәсілдер автоматты дизассемблерлерге қарсы қолдануда жақсы. Бірақ IDA-ны шатастыру (немесе басқа интерактивті дизассемблер) олардың қолынан келмейді. Дәлірек айтсақ, шатастыра алады, бірақ біздің қарсылас қоқыстанатын байтты ‘Undefined’ ретінде, ал одан соң код ретінде көрсету керектігін түсінген уақытқа шейін. Бұдан кейін ол дизассемблер ортасында қорғалатын Бағдарлама анализін алады.
Хакерлік ортада «динамикалық фуфель» деген атақ алған эффекті әрі күрделі тәсіл бар. Тәсілдің мағынасы мынада: қоқыстанатын байттар басқаруды беру командаларынсыз еш айналып кетпейді. Олар бағдарламаның орындалу барысында еш зияны жоқ командалармен (NOP, STI ,...) алмасады. Басқаша айтқанда, дизассемблерлеуден қроғалатын бағдарлама фрагменті, шынында да, дискідегі бағдарлама түрінде жіберілмейді, ол компьютердің дұрыс жұмыс істемеуіне әкеледі. Алайда, жіберілген бағдарлама белгісіз жерден қоқыстанатын байттарды алу үшін мәліметтерді есептейді де, оларды бағдарламаның орындалуына еш әсерін тигізбейтін командаларға алмастырады.
Мұндай тәсілде қорғалған бағдарламаны бұзу өте ұзақ әрі күрделі процесс.


Достарыңызбен бөлісу:
1   ...   4   5   6   7   8   9   10   11   ...   19




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет