Жаңа W^X қауіпсіздік мүмкіндігі – операциялық жүйеде жадты қорғау. Жазба мен орындалу қабілетін бөледі, қауіпті кодтан сақтайды. Бұл жадтың қауіпсіздігі!
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Кіріспе
Операциялық жүйе жадының қауіпсіздік мүмкіндігі
Operating system memory security feature
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-дың осалдықтарын азайтуға көмектеседі, олар компьютердегі қолданыстағы код арқылы ашылмаған. Азғырушылық емес тәсіл – файлды орындалатын жадқа бейімделген кезде құлыптап қою, бұл тексеруден кейін айналып өтудің алдын алуға жеткілікті.
W^X ("write xor execute", pronounced W xor X) is a security feature in operating systems and virtual machines. It is a memory protection policy whereby every page in a process's or kernel's address space may be either writable or executable, but not both. Without such protection, a program can write (as data "W") CPU instructions in an area of memory intended for data and then run (as executable "X"; or read execute "RX") those instructions. This can be dangerous if the writer of the memory is malicious. W^X is the Unix like terminology for a strict use of the general concept of executable space protection, controlled via the system call. W^X is relatively simple on processor architectures that support fine grained page permissions, such as Sun's SPARC and SPARC64, AMD's x86 64, Hewlett Packard's PA RISC, HP's (originally Digital Equipment Corporation's) Alpha, and ARM. The term W^X has also been applied to file system write/execute permissions to mitigate file write vulnerabilities (as with in memory) and attacker persistence. Enforcing restrictions on file permissions can also close gaps in W^X enforcement caused by memory mapped files. Outright forbidding the usage of arbitrary native code can also mitigate kernel and CPU vulnerabilities not exposed via the existing code on the computer. A less intrusive approach is to lock a file for the duration of any mapping into executable memory, which suffices to prevent post inspection bypasses.
Бір-біріне үйлесімділік
Кейбір Intel 64 процессорларында W^X үшін қажетті NX биті болмады, бірақ бұл кейінгі чиптерде пайда болды. Intel i386 сияқты шектеулі процессорларда W^X CS код сегментінің шегін "құмдағы сызық" ретінде пайдалануды қажет етеді, яғни адрестік кеңістікте орындалуға рұқсат етілмеген және деректер орналасқан нүкте, ал одан төмен орындалуға рұқсат етіледі және орындалатын беттер орналастырылады. Бұл схема Exec Shield-те қолданылды. Сілтеуге қатысты өзгерістер әдетте кодтан деректерді бөлу үшін қажет (мысалы, сілтеу және кітапхана орындалу уақытында қажетті трамплиндер). Араластыруға мүмкіндік беретін опцияны Unix сияқты жүйелерде әдетте execstack деп атайды.
Some early Intel 64 processors lacked the NX bit required for W^X, but this appeared in later chips. On more limited processors such as the Intel i386, W^X requires using the CS code segment limit as a "line in the sand", a point in the address space above which execution is not permitted and data is located, and below which it is allowed and executable pages are placed. This scheme was used in Exec Shield. Linker changes are generally required to separate data from code (such as trampolines that are needed for linker and library runtime functions). The switch allowing mixing is usually called execstack on Unix like systems
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 қолданады.
W^X can also pose a minor problem for just in time compilation, which involves an interpreter generating machine code on the fly and then running it. The simple solution used by most, including Firefox, involves just making the page executable after the interpreter is done writing machine code, using on Windows or on Unix like operating systems. The other solution involves mapping the same region of memory to two pages, one with RW and the other with RX. In late 2014 and early 2015, W^X was added in the OpenBSD kernel on the AMD64 architecture. In early 2016, W^X was fully implemented on NetBSD's AMD64 kernel and partially on the i386 kernel. macOS computers running on Apple silicon processors enforce W^X for all programs. Intel based Macs enforce the policy only for programs that use the OS's Hardened Runtime mode. Starting with Firefox 46 in 2016, Firefox's virtual machine for JavaScript also implements the W^X policy. Starting with NET 6.0 in 2021, NET now uses W^X.