Chromium жүйесіндегі қауіпсіздік мәселелерінің 70%-ы жад қателерінен туындайды

Chromium жобасын әзірлеушілер талдады 912 жылдан бері Chrome тұрақты шығарылымдарында 2015 жоғары қауіпті және маңызды осалдықтар анықталды және олардың 70% жадтың қауіпсіздігінен (C/C++ кодындағы көрсеткіштермен жұмыс істеу кезіндегі қателер) туындаған деген қорытындыға келді. Осы ақаулардың жартысы (36.1%) онымен байланысты жадты босатқаннан кейін буферге кіруден туындайды (бос пайдаланғаннан кейін).

Chromium жүйесіндегі қауіпсіздік мәселелерінің 70%-ы жад қателерінен туындайды

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

Кодтық базаның қауіпсіздігін сақтау үшін Google сонымен қатар "екінің ережесі«, оған сәйкес кез келген қосылған код үш шарттың екеуінен аспауы керек: расталмаған кіріс деректерімен жұмыс істеу, қауіпті бағдарламалау тілін (C/C++) пайдалану және жоғары артықшылықтармен жұмыс істеу. Бұл ереже сыртқы деректерді өңдеуге арналған кодты ең аз артықшылықтарға дейін азайту (оқшауланған) немесе қауіпсіз бағдарламалау тілінде жазылу керектігін білдіреді.

Кодтық базаның қауіпсіздігін одан әрі арттыру үшін код базасында жад қателерінің пайда болуына жол бермеу жобасы іске қосылды. Үш негізгі тәсіл бар: жадтың қауіпсіз жұмыс істеу функциялары бар C++ кітапханаларын құру және аппараттық қорғаныс механизмдерін пайдалана отырып, қоқыс жинағыштың ауқымын кеңейту. MTE (Memory Tagging Extension) және жадпен қауіпсіз жұмыс істеуді қамтамасыз ететін тілдерде жазу компоненттері (Java, Kotlin, JavaScript, Rust, Swift).

Жұмыс екі бағытқа бағытталады деп күтілуде:

  • C++ әзірлеу процесіне елеулі өзгеріс, ол өнімділікке теріс әсер етуді жоққа шығармайды (қосымша шектеулерді тексеру және қоқыс жинау). Шикі көрсеткіштердің орнына түрін пайдалану ұсынылады MiraclePtr, бұл өнімділікке, жадты тұтынуға және тұрақтылыққа елеулі теріс әсер етпей, қауіпсіздікке қатер төндірмейтін апаттарға дейін пайдаланудан кейінгі бос қателерді азайтуға мүмкіндік береді.
  • Компиляция уақытында жад қауіпсіздігін тексеруге арналған тілдерді пайдалану (кодты орындау кезінде мұндай тексерулерге тән өнімділікке теріс әсерді жояды, бірақ жаңа тілдегі кодтың кодпен әрекеттесуін ұйымдастыруға қосымша шығындарға әкеледі. C++).

Жадты сақтайтын кітапханаларды пайдалану - ең қарапайым, бірақ сонымен бірге тиімділігі аз әдіс. Rust-та кодты қайта жазу ең тиімді, бірақ сонымен бірге өте қымбат әдіс ретінде бағаланады.

Chromium жүйесіндегі қауіпсіздік мәселелерінің 70%-ы жад қателерінен туындайды

Ақпарат көзі: opennet.ru

пікір қалдыру