Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Қатты кодталған іздеу жолы – бағдарламалау термині.
Hard coded search path
the programming term
Компьютерлік жүйеде rpath – орындалатын файлда немесе кітапханада қатты кодталған орындау кезіндегі іздеу жолын білдіреді. Динамикалық байланыс жүктегіштері rpath-ті қажетті кітапханаларды табу үшін пайдаланады. Нақтырақ айтқанда, ол орындалатын файлдың (немесе тағы бір ортақ кітапхананың) қанатында ортақ кітапханаларға жолды енгізеді. Бұл RPATH қанатындағы мән (орындалатын және байланыстырылатын формат стандарттарында осылай аталады) жүйелік әдепкі динамикалық байланыс іздеу жолдарын алмастыра немесе толықтыра алады. Орындалатын файлдың немесе ортақ кітапхананың rpath – ELF орындалатын файлының немесе ортақ кітапханалардың динамикалық бөліміндегі DT RPATH түріндегі, DT RPATH атрибуты деп аталатын қосымша жазба. Оны сілтемелеуші құрал осы жерде сақтай алады. chrpath және patchelf сияқты құралдар бұл жазбаны кейіннен жасауға немесе өзгертуге мүмкіндік береді.
In computing, rpath designates the run time search path hard coded in an executable file or library. Dynamic linking loaders use the rpath to find required libraries. Specifically, it encodes a path to shared libraries into the header of an executable (or another shared library). This RPATH header value (so named in the Executable and Linkable Format header standards) may either override or supplement the system default dynamic linking search paths. The rpath of an executable or shared library is an optional entry in the dynamic section of the ELF executable or shared libraries, with the type DT RPATH, called the DT RPATH attribute. It can be stored there at link time by the linker. Tools such as chrpath and patchelf can create or modify the entry later.
ELF үшін әр түрлі динамикалық байланыстырғыштар DT RPATH атрибутын әртүрлі тәсілдермен іске асырады.
The different dynamic linkers for ELF implement the use of the DT RPATH attribute in different ways.
GNU-ның рөлі
GNU Linker (GNU ld) "жаңа dtags" деп аталатын мүмкіндікті іске асырады, оны LD LIBRARY PATH ортасының айнымалысынан төмен басымдыққа ие rpath енгізу үшін пайдалануға болады. Егер сілтегіште жаңа dtags мүмкіндігі қосылса (жаңа dtags қосу), GNU ld, DT RPATH атрибутын орнатудан басқа, DT RUNPATH атрибутын да сол мәнді қояды. Орындалу кезінде, егер динамикалық жүктегіш DT RUNPATH атрибутын тапса, ол DT RPATH атрибутының мәнін назарға алмайды, нәтижесінде LD LIBRARY PATH бірінші болып тексеріледі және DT RUNPATH атрибутындағы жолдар тек содан кейін ізделеді. ld динамикалық жүктегіш DT RPATH сияқты, DT RUNPATH орналасқан жерлерде өтпелі тәуелділіктерді іздемейді. rpath-ті сілтегішке көрсетудің орнына, LD RUN PATH ортасының айнымалысын сол мақсатта орнатуға болады.
The GNU Linker (GNU ld) implements a feature which it calls "new dtags", which can be used to insert an rpath that has lower precedence than the LD LIBRARY PATH environment variable. If the new dtags feature is enabled in the linker ( enable new dtags), GNU ld, besides setting the DT RPATH attribute, also sets the DT RUNPATH attribute to the same string. At run time, if the dynamic linker finds a DT RUNPATH attribute, it ignores the value of the DT RPATH attribute, with the effect that LD LIBRARY PATH is checked first and the paths in the DT RUNPATH attribute are only searched afterwards. The ld dynamic linker does not search DT RUNPATH locations for transitive dependencies, unlike DT RPATH. Instead of specifying the rpath to the linker, the environment variable LD RUN PATH can be set to the same effect.
Solaris ld.so
Solaris жүйесінің динамикалық байланыстырғышы, атап айтқанда SunOS 5.8 және оған ұқсас жүйелердегі /lib/ld.so, DT_RPATH атрибутын қараудан бұрын LD_LIBRARY_PATH айнымалысында көрсетілген каталогтарда кітапханаларды іздейді. Sun Microsystems динамикалық кітапханаларды жүктеуді алғаш рет енгізді. Кейіннен Sun, ld құралына rpath опциясын қосты және оны маңызды кітапханаларда қосымша қауіпсіздік мүмкіндігі ретінде пайдаланды. GNU ld да Sun стиліндегі динамикалық кітапханаларды қолдау үшін солай жасады.
The dynamic linker of Solaris, specifically /lib/ld. so of SunOS 5.8 and similar systems looks for libraries in the directories specified in the LD LIBRARY PATH variable before looking at the DT RPATH attribute. Sun Microsystems was the first to introduce dynamic library loading. Sun later added the rpath option to ld and used it in essential libraries as an added security feature. GNU ld did the same to support Sun style dynamic libraries.
Қауіпсіздік мәселелері
rpath және runpath қолданылуы, егер қолданылатын мән шабуылшының бақылауындағы каталогтарды қамтитын болса, қауіпсіздік тәуекелдерін тудыруы мүмкін. Бұл, шабуылшыға жазу мүмкіндігі бар жерді тікелей көрсетумен қатар, $ORIGIN сияқты айнымалылар арқылы немесе каталогты толтырмау арқылы салыстырмалы жол қолданылатын жағдайларды да қамтиды. Атап айтқанда, бұл қауіпсіз емес жол қолданылғанда setUID бинарлық файлдарын қауіпті пайдалануға мүмкіндік береді. Бұл бинарлық файлды шабуылшының бақылауындағы каталогтардың бірінен зиянды кітапханаларды жүктеуге итермелеу үшін қолданылуы мүмкін.
The use of rpath and also runpath can present security risks where the value applied includes directories under an attacker's control. This can include cases where the value defined explicitly references an attacker writable location but also instances where a relative path is used, either through the presence of or , via $ORIGIN etc or where a directory statement is left unpopulated. In particular, this can allow for setUID binaries to be exploited, where an insecure path is used. This can be leveraged to trick the binary into loading malicious libraries from one or other of the directories under an attacker's control.