Кіріспе

Операциялық жүйе жадының қауіпсіздік мүмкіндігі

W^X ("жазу xor орындау", W xor X деп айтылады) – операциялық жүйелер мен виртуалды машиналардағы қауіпсіздік мүмкіндігі. Бұл жадты қорғау саясаты, онда процесс немесе ядроның адрестік кеңістігіндегі әрбір бет жазуға немесе орындауға болатын, бірақ екеуі бірдей емес. Мұндай қорғаныс болмаса, бағдарлама деректерге арналған жад аймағына CPU нұсқауларын жаза алады ("W" дерек ретінде) және содан кейін оларды орындайды ("X" орындалатын ретінде; немесе "RX" оқып орындалатын ретінде). Егер жадты жазушы зұлым ниетті болса, бұл қауіпті болуы мүмкін. W^X – жүйелік шақыру арқылы басқарылатын орындалатын кеңістікті қорғаудың жалпы түсінігін қатаң пайдалануға қатысты Unix сияқты терминология. W^X процессор архитектураларында салыстырмалы түрде қарапайым, олар нақты беттік рұқсаттарды қолдайды, мысалы, Sun-ның SPARC және SPARC64, AMD-нің x86 64, Hewlett Packard-тың PA RISC, HP-ның (бұрын Digital Equipment Corporation) Alpha және ARM. W^X термині файл жазу/орындау рұқсаттарына да қолданылады, бұл файлға жазудағы осалдықтарды (жадтағыдай) және шабуылдаушының тұрақтылығын азайтуға көмектеседі. Файл рұқсаттарына шектеулер қою W^X-тің қолданылуында жадқа бейімделген файлдардың салдарынан туындаған кемшіліктерді жоюға мүмкіндік береді. Кез келген кодты пайдалануға тыйым салу ядро мен CPU-дың осалдықтарын азайтуға көмектеседі, олар компьютердегі қолданыстағы код арқылы ашылмаған. Азғырушылық емес тәсіл – файлды орындалатын жадқа бейімделген кезде құлыптап қою, бұл тексеруден кейін айналып өтудің алдын алуға жеткілікті.

Бір-біріне үйлесімділік

Кейбір Intel 64 процессорларында W^X үшін қажетті NX биті болмады, бірақ бұл кейінгі чиптерде пайда болды. Intel i386 сияқты шектеулі процессорларда W^X CS код сегментінің шегін "құмдағы сызық" ретінде пайдалануды қажет етеді, яғни адрестік кеңістікте орындалуға рұқсат етілмеген және деректер орналасқан нүкте, ал одан төмен орындалуға рұқсат етіледі және орындалатын беттер орналастырылады. Бұл схема Exec Shield-те қолданылды. Сілтеуге қатысты өзгерістер әдетте кодтан деректерді бөлу үшін қажет (мысалы, сілтеу және кітапхана орындалу уақытында қажетті трамплиндер). Араластыруға мүмкіндік беретін опцияны Unix сияқты жүйелерде әдетте execstack деп атайды.

W^X сонымен қатар дереу компиляциялау үшін шағын проблема тудыруы мүмкін, ол интерпретатордың машиналық кодты динамикалық түрде жасап, оны орындауын қамтиды. Көптеген, соның ішінде Firefox қолданған қарапайым шешім, интерпретатор машиналық кодты жазғаннан кейін ғана бетті орындалатын етуді қамтиды, Windows немесе Unix сияқты операциялық жүйелерде. Басқа шешім - жадтың бір аймағын екі бетке бейімдеу, біреуі RW, екіншісі RX. 2014 жылдың соңы мен 2015 жылдың басында W^X OpenBSD ядросына AMD64 архитектурасында қосылды. 2016 жылдың басында W^X NetBSD-нің AMD64 ядросында толық және i386 ядросында ішінара іске асырылды. Apple кремний процессорларында жұмыс істейтін macOS компьютерлері барлық бағдарламалар үшін W^X-ті күшімен жүзеге асырады. Intel-ге негізделген Mac компьютерлері осы саясатты тек операциялық жүйенің қатаң орындалу режимін пайдаланатын бағдарламалар үшін ғана қолданады. 2016 жылғы Firefox 46 нұсқасынан бастап, Firefox-тың JavaScript үшін виртуалды машинасы да W^X саясатын іске асырады. 2021 жылғы NET 6.0 нұсқасынан бастап, NET енді W^X қолданады.