Тілдік қауіпсіздік - Language-based security - Wikipedia

Жылы Информатика, тілдік қауіпсіздік (LBS) - бұл бағдарламалау тілдерінің қасиеттерін қолдану арқылы қосымшалардың қауіпсіздігін жоғары деңгейде күшейту үшін қолданылатын әдістер жиынтығы. жүйенің қауіпсіздігі жұмыс істей алмайды.

Бағдарламалық жасақтама әдетте нақтыланады және белгілі бірде жүзеге асырылады бағдарламалау тілдері және қосымшаның шабуылдарынан, ақауларынан және қателерінен қорғау үшін бастапқы код осал болуы мүмкін, қолданбалы деңгейдегі қауіпсіздік қажет; бағдарламалау тіліне қатысты қосымшалардың жұмысын бағалау қауіпсіздігі. Бұл аймақ әдетте тілге негізделген қауіпсіздік деп аталады.

Мотивация

Сияқты ірі бағдарламалық жүйелерді қолдану SCADA, бүкіл әлемде болып жатыр[1] және компьютерлік жүйелер көптеген инфрақұрылымдардың негізін құрайды. Қоғам су, энергетика, байланыс және көлік сияқты инфрақұрылымға үлкен сенім артады, олар қайтадан толықтай жұмыс істейтін компьютерлік жүйелерге сүйенеді. Бағдарламалық жасақтамадағы қателіктер мен қателіктерге байланысты сыни жүйелер сәтсіздікке ұшырағанының бірнеше белгілі мысалдары бар компьютер жадының жетіспеушілігі LAX компьютерлерінің бұзылуына және жүздеген рейстердің кешігуіне әкеп соқтырған кезде (30.04.2014).[2][3]

Дәстүрлі түрде бағдарламалық жасақтаманың дұрыс жұмыс істеуін бақылау үшін қолданылатын тетіктер операциялық жүйе деңгейінде жүзеге асырылады. Операциялық жүйе қауіпсіздіктің бірнеше бұзушылықтарын қарастырады, мысалы, жадқа кіруді бұзу, стектердің толып кетуін бұзу, кіруді бақылауды бұзу және басқалары. Бұл компьютерлік жүйелердегі қауіпсіздіктің шешуші бөлігі, дегенмен бағдарламалық қамтамасыз етуді нақты деңгейде қамтамасыз ете отырып, одан да күшті қауіпсіздікке қол жеткізуге болады. Бағдарламалық жасақтаманың көптеген қасиеттері мен мінез-құлқы компиляция кезінде жоғалғандықтан, машиналық кодтағы осалдықтарды анықтау айтарлықтай қиынға соғады. Бастапқы кодты бағалай отырып, компиляцияға дейін бағдарламалау тілінің теориясы мен жүзеге асырылуы туралы да ойлануға болады, және одан да көп осалдықтарды ашуға болады.

«Сонымен, неге әзірлеушілер бірдей қателіктер жібере береді? Бағдарламашылардың жадына сүйенудің орнына, біз қауіпсіздіктің жалпы осал тұстары туралы білетін кодтайтын және оны тікелей даму үдерісіне кіріктіретін құралдар шығаруға тырысуымыз керек.»

- Д.Эванс және Д.Ларошель, 2002 ж

Тілге негізделген қауіпсіздік мақсаты

LBS қолдану арқылы бағдарламалық жасақтаманың қауіпсіздігін қолданылатын әдістерге байланысты бірнеше салада арттыруға болады. Рұқсат беру сияқты кең таралған бағдарламалау қателері буфер толып кетеді және тұтынушы қолданатын бағдарламалық жасақтамада заңсыз ақпарат ағындары анықталуы және оған тыйым салынуы мүмкін. Сондай-ақ, тұтынушыға бағдарламалық жасақтаманың қауіпсіздік қасиеттері туралы кейбір дәлелдемелер ұсынған жөн, тұтынушы бағдарламалық жасақтамаға бастапқы кодты алмай, қателіктерді өзі тексермей-ақ сене алады.

Компилятор бастапқы кодты кіріс ретінде қабылдай отырып, оны машинада оқылатын кодқа айналдыру үшін код бойынша бірнеше тілдік операцияларды орындайды. Лексикалық талдау, алдын-ала өңдеу, талдау, семантикалық талдау, кодты құру, және кодты оңтайландыру барлығы компиляторларда қолданылатын операциялар. Бастапқы кодты талдап, тілдің теориясы мен жүзеге асырылуын қолдана отырып, компилятор бағдарламаның әрекетін сақтай отырып, жоғары деңгейлі кодты төменгі деңгейге дұрыс аударуға тырысады.

Сертификат беретін компиляторды иллюстрациялау

А жазылған бағдарламаларды құрастыру кезінде қауіпсіз тип сияқты тіл Java, бастапқы код компиляция алдында сәтті теріп тексеруі керек. Егер типті тексеру сәтсіз болса, компиляция орындалмайды және бастапқы кодты өзгерту қажет. Бұл дегеніміз, дұрыс компилятор берілген, сәтті типтегі тексерілген бастапқы бағдарламадан құрастырылған кез-келген код жарамсыз тағайындау қателерінен таза болуы керек. Бұл кодты тұтынушы үшін маңызды болуы мүмкін ақпарат, өйткені ол белгілі бір қателіктерге байланысты бағдарламаның істен шығуына кепілдік береді.

LBS мақсаты - бағдарламалық жасақтаманың қауіпсіздік саясатына сәйкес келетін бастапқы кодта белгілі бір қасиеттердің болуын қамтамасыз ету. Компиляция кезінде жиналған ақпарат тұтынушыға берілген бағдарламада қауіпсіздіктің дәлелі ретінде ұсынылатын сертификат жасауға пайдаланылуы мүмкін. Мұндай дәлел тұтынушының жеткізуші пайдаланатын компиляторға сенім арта алатындығын және сертификаттың, бастапқы код туралы ақпараттың тексерілуі мүмкін екенін білдіреді.

Суретте сертификаттау мен компиляторды қолдану арқылы төменгі деңгейдегі кодты қалай тексеруге болатындығын көрсетеді. Бағдарламалық жасақтама жеткізушісі бастапқы кодты ашпаудың артықшылығына ие болады, ал тұтынушыға сертификатты тексеру міндеті қалады, бұл бастапқы кодты бағалау мен құрастырумен салыстырғанда оңай мәселе. Сертификатты тексеру үшін компилятор мен тексеруші бар шектеулі сенімді код базасы қажет.

Техника

Бағдарламаны талдау

Негізгі қолданбалары бағдарламалық талдау болып табылады бағдарламаны оңтайландыру (жұмыс уақыты, кеңістіктегі қажеттіліктер, электр қуатын тұтыну және т.б.) және бағдарламаның дұрыстығы (қателер, қауіпсіздік осалдықтары және т.б.). Бағдарламалық талдауды компиляцияға қолдануға болады (статикалық талдау ), жұмыс уақыты (динамикалық талдау ) немесе екеуі де. Тілдік қауіпсіздікте бағдарламалық талдау бірнеше пайдалы функцияларды ұсына алады, мысалы: типті тексеру (статикалық және динамикалық), бақылау, ластануды тексеру және ағынды басқару.

Ақпараттық ағынды талдау

Ақпараттық ағынды талдауды талдау үшін қолданылатын құралдар жиынтығы ретінде сипаттауға болады ақпарат ағынын басқару сақтау үшін бағдарламада құпиялылық және тұтастық қайда тұрақты қатынасты басқару механизмдер қысқа.

«Ақпаратқа қол жеткізу құқығын оны тарату құқығынан ажырату арқылы ағындық модель қауіпсіз ақпарат ағынын көрсете отырып, қол жеткізу матрицасының моделінен асып түседі. Практикалық жүйеге барлық қауіпсіздік талаптарын қанағаттандыру үшін қол жетімділікті де, бақылауды да қажет етеді.»

- Д.Деннинг, 1976 ж

Қатынауды бақылау тексеруді күшейтеді кіру ақпаратқа жүгінеді, бірақ содан кейін не болатындығы туралы алаңдамайды. Мысал: Жүйенің екі қолданушысы бар, Алиса және Боб. Алисте файл бар құпия.txt, оны тек оқуға және редакциялауға рұқсат етілген, және ол бұл ақпаратты өзіне қалдырғанды ​​жөн көреді. Жүйеде файл да бар public.txt, бұл жүйенің барлық пайдаланушылары үшін оқуға және өңдеуге тегін. Енді Алиса кездейсоқ зиянды бағдарламаны жүктеп алды делік. Бұл бағдарлама қол жетімділікті тексеруді айналып өтіп, жүйеге Элис ретінде кіре алады құпия.txt. Зиянды бағдарлама содан кейін мазмұнын көшіреді құпия.txt және оны орналастырады public.txt, Бобқа және барлық басқа қолданушыларға оны оқуға мүмкіндік береді. Бұл жүйенің көзделген құпиялылық саясатының бұзылуын білдіреді.

Кедергі жасамау

Кедергі жасамау - а-мен ауыспалы ақпаратты ашпайтын немесе ашпайтын бағдарламалардың қасиеті жоғары а бар айнымалылардың енгізілуіне байланысты қауіпсіздік классификациясы төменгі қауіпсіздік классификациясы. Араласуды қанағаттандыратын бағдарлама дәл осылай жасауы керек шығу сәйкес келген сайын енгізу үстінде төменгі айнымалылар қолданылады. Бұл кірістегі барлық мүмкін мәндерге сәйкес келуі керек. Бұл дегеніміз, тіпті егер жоғары бағдарламадағы айнымалылардың бір орындаудан екіншісіне әртүрлі мәндері бар, бұл көрінбеуі керек төменгі айнымалылар.

Шабуыл жасаушы кедергі жасамайтын бағдарламаны бірнеше рет және жүйелі түрде оның мінез-құлқын бейнелеуге тырысады. Бірнеше қайталанулар ақпаратты ашуға әкелуі мүмкін жоғары және шабуылдаушыға жүйенің күйі туралы құпия ақпаратты білуге ​​мүмкіндік беріңіз.

Бағдарламаның кедергісіздікті қанағаттандыратындығын немесе болмайтындығын компиляция кезінде бар деп есептеуге болады қауіпсіздік типіндегі жүйелер.

Қауіпсіздік жүйесі

A қауіпсіздік типіндегі жүйе түрі болып табылады типтік жүйе бағдарламалық жасақтама жасаушылар өздерінің кодтарының қауіпсіздік қасиеттерін тексеру үшін қолдана алады. Қауіпсіздік типтері бар тілде айнымалылар мен өрнектердің түрлері қосымшаның қауіпсіздік саясатына жатады, ал бағдарламашылар қолданбаның қауіпсіздік саясатын тип декларациялары арқылы анықтай алады. Қауіпсіздік саясатының түрлері, соның ішінде авторизациялау саясаты (қол жеткізуді басқару немесе мүмкіндіктер сияқты) және ақпарат ағынының қауіпсіздігі туралы ой қозғау үшін пайдалануға болады. Қауіпсіздік типіндегі жүйелер формальды қауіпсіздік саясатымен байланысты болуы мүмкін, егер типті тексеретін барлық бағдарламалар саясатты мағыналық мағынада қанағаттандыратын болса, қауіпсіздік типіндегі жүйе дұрыс болады. Мысалы, ақпарат ағынына арналған қауіпсіздік типіндегі жүйе кедергі жасамауға мәжбүр етуі мүмкін, яғни типті тексеру бағдарламада құпиялылықтың немесе тұтастықтың бұзылғандығын анықтайды.

Төмен деңгейлі кодты қорғау

Төмен деңгейлі кодтағы осалдықтар - бұл бағдарламаны бағдарламаның одан әрі әрекеті бастапқы бағдарламалау тілінде анықталмаған күйге әкелетін қателер немесе қателер. Төмен деңгейлік бағдарламаның әрекеті компиляторға, жұмыс уақытының жүйесіне немесе амалдық жүйенің бөлшектеріне байланысты болады. Бұл шабуылдаушыға бағдарламаны анықталмаған күйге жеткізіп, жүйенің әрекетін пайдалануға мүмкіндік береді.

Қауіпсіз деңгейдегі кодтың әдеттегі эксплуатациясы шабуылдаушыға рұқсат етілмеген түрде оқуға немесе жад адрестеріне жазуға мүмкіндік береді. Жад адрестері кездейсоқ немесе шабуылдаушы таңдауы мүмкін.

Қауіпсіз тілдерді қолдану

Қауіпсіз төмен деңгейлі кодқа қол жеткізу тәсілі - қауіпсіз деңгейлі тілдерді қолдану. Қауіпсіз тіл бағдарламашылардың нұсқаулығымен толық анықталған деп саналады.[4] Қауіпсіз тілде іске асыруға тәуелді мінез-құлыққа әкелуі мүмкін кез-келген қате компиляция кезінде анықталады немесе жұмыс кезінде дұрыс анықталған қателікке әкеледі. Жылы Java, егер массивке шекарадан тыс қол жетімді болса, ерекшелік шығарылады. Басқа қауіпсіз тілдердің мысалдары C #, Хаскелл және Скала.

Қауіпсіз тілдерді қорғаныспен орындау

Қауіпті тілді құрастыру кезінде бастапқы деңгейдегі анықталмаған әрекетті анықтау үшін төменгі деңгей кодына жұмыс уақыты тексерістері қосылады. Мысал ретінде канариялар Шектік бұзушылықтарды анықтаған кезде бағдарламаны тоқтата алады, мысалы, шекараларды тексеру кезінде жұмыс уақытының чектерін пайдаланудың минусы - бұл олардың жұмысына едәуір қосымша шығындар.

Жадты қорғау мысалы, орындалмайтын стек пен / немесе үйінді пайдалану сияқты, қосымша жұмыс уақыты тексерулері ретінде қарастырылуы мүмкін. Мұны көптеген заманауи операциялық жүйелер қолданады.

Модульдердің оқшауланған орындалуы

Жалпы идея - бастапқы кодты талдау арқылы қолданба деректерінен сезімтал кодты анықтау. Осыдан кейін әртүрлі деректер бөлініп, әртүрлі модульдерге орналастырылады. Әрбір модуль құрамындағы құпия ақпаратты толығымен басқарады деп болжаған кезде, модульден қашан және қалай шығу керектігін көрсетуге болады. Мысал ретінде кілттердің модульдің шифрланбаған күйінде кетуіне жол бермейтін криптографиялық модульді айтуға болады.

Сертификатталған жинақ

Сертификаттау компиляциясы - бағдарламалау тілінің семантикасының жоғары деңгейіндегі ақпараттарды қолдана отырып, бастапқы кодты құрастыру кезінде сертификат шығару идеясы. Бұл сертификат тұтынушыға бастапқы код белгілі бір ережелер жиынтығына сәйкес жасалғанын дәлелдеу формасын ұсыну үшін жинақталған кодпен бірге болуы керек. Сертификат әр түрлі жолмен дайындалуы мүмкін, мысалы. арқылы Дәлелді тасымалдау коды (PCC) немесе Жинақтау тілі терілген (TAL).

Дәлелді тасымалдау коды

PCC негізгі аспектілерін келесі қадамдармен қорытындылауға болады:[5]

  1. Жеткізуші әр түрлі түсіндірмелермен бірге орындалатын бағдарламаны ұсынады сертификаттайтын компилятор.
  2. Тұтынушы a шартына негізделген тексеру шартын ұсынады қауіпсіздік саясаты. Бұл жеткізушіге жіберіледі.
  3. Жеткізуші а-да тексеру шарттарын орындайды теоремалық мақал тұтынушыға бағдарламаның шынымен қауіпсіздік саясатын қанағаттандыратындығына дәлел келтіру.
  4. Содан кейін тұтынушы дәлелдеуді а дәлелдеу тексерушісі дәлелдің жарамдылығын тексеру үшін.

Сертификаттаушы компилятор мысалы болып табылады Touchstone компиляторы, бұл Java-да енгізілген бағдарламалар үшін типтік және жад қауіпсіздігі туралы PCC ресми дәлелдемесін ұсынады.

Жинақтау тілі терілген

TAL а-ны қолданатын бағдарламалау тілдеріне қолданылады типтік жүйе. Жинақтан кейін объект коды кәдімгі тип тексерушісі тексере алатын типтегі аннотацияны алып жүреді. Мұнда жасалған аннотация көп жағдайда PCC ұсынған аннотацияларға ұқсас, кейбір шектеулері бар. Алайда TAL типтік жүйенің шектеулерімен көрінетін кез-келген қауіпсіздік саясатын басқара алады, оған жад қауіпсіздігі мен басқару ағыны және басқалары кіреді.

Семинарлар

Әдебиеттер тізімі

  1. ^ «Біз SCADA қауіпсіздік оқиғаларынан сабақ ала аламыз ба?» (PDF). www.oas.org. enisa.
  2. ^ «Әуе қозғалысын басқару жүйесі істен шықты». www.computerworld.com. Алынған 12 мамыр 2014.
  3. ^ «Бағдарламалық жасақтаманың қателіктері өшіруге ықпал етті». www.securityfocus.com. Алынған 11 ақпан 2004.
  4. ^ Пирс, Бенджамин С. (2002). Бағдарламалау түрлері мен түрлері. MIT Press. ISBN  9780262162098.
  5. ^ Козен, Декстер (1999). «Тілге негізделген қауіпсіздік» (PDF). Корнелл университеті. Журналға сілтеме жасау қажет | журнал = (Көмектесіңдер)

Кітаптар

  • Г.Барте, Б.Грегуар, Т.Резк, Сертификаттар жинақтау, 2008
  • Брайан Шахмат және Гари МакГрав, Қауіпсіздікке арналған статикалық талдау, 2004.

Әрі қарай оқу