Қауіпсіздік: Символдық сілтеме жарысы осалдығы қалай пайда болады? Бағдарлама файлды қауіпсізсіз жасайды, шабуылшы сілтеме арқылы мазмұнды өзгерте алады.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Бағдарламалық қамтамасыз ету қауіпсіздігі
Software Security
Символдық сілтеме жарысы – бағдарламалық қамтамасыз етудегі қауіпсіздік осалдығының бір түрі, ол бағдарламаның қауіпсіз емес тәсілмен файлдарды жасауынан туындайды. Зыянды пайдаланушы оларға басқаша қолжетімді емес файлға символдық сілтеме жасауға мүмкіндік алады. Егер артықшылықтары бар бағдарлама символдық сілтемемен бірдей атаумен файл жасаса, ол шын мәнінде сілтеме жасалған файлды жасайды, бұл зыянды пайдаланушының қалаған мазмұнын қосуына (төмендегі мысалға қараңыз) немесе тіпті зыянды пайдаланушы ұсынған мазмұнды (бағдарламаға енгізілім ретінде) мүмкіндік береді. Бұл "жарыс" деп аталады, себебі оның типік жағдайында бағдарлама сол аттас файлдің бар-жоғын тексереді; егер файл болмаса, бағдарлама оны жасайды. Шабуылшы осы тексеру мен файл жасалу аралығында сілтемені жасауы тиіс. Символдық сілтеме жарысы антивирустық өнімдерде де кездесуі мүмкін, олар күдікті файлды карантинге алуға немесе жоюға шешім қабылдап, содан кейін оны іске асырады. Шешім мен іс-қимыл аралығында зыянды бағдарламалық қамтамасыз ету күдікті файлды жүйелік немесе антивирустық файлмен алмастыруы мүмкін, осылайша зыянды бағдарламалық қамтамасыз етудің оны жабуын қадағалайды.
A symlink race is a kind of software security vulnerability that results from a program creating files in an insecure manner. A malicious user can create a symbolic link to a file not otherwise accessible to them. When the privileged program creates a file of the same name as the symbolic link, it actually creates the linked to file instead, possibly inserting content desired by the malicious user (see example below), or even provided by the malicious user (as input to the program). It is called a "race" because in its typical manifestation, the program checks to see if a file by that name already exists; if it does not exist, the program then creates the file. An attacker must create the link in the interval between the check and when the file is created. A symlink race can happen with antivirus products that decide they will quarantine or delete a suspicious file, and then go ahead and do that. During the interval between decision and action, malicious software can replace the suspicious file with a system or antivirus file that the malicious software wants overwritten.
Мысал
Бұл қарапайым мысалда Unix бағдарламасы foo setuid болып белгіленген. Оның функциясы – пайдаланушы көрсеткен тіркелгілер туралы ақпаратты алу. «Тиімділік» үшін, сұралған тіркелгілерді сұрау жасамас бұрын уақытша файлға (/tmp/foo, әдетте) сұрыптайды. /tmp каталогына кез келген пайдаланушы жазуға рұқсат етілген. Зардапты пайдаланушы Mallory /root/.rhosts файлына /tmp/foo деп аталатын символдық сілтеме жасайды. Содан кейін Mallory, сұралған тіркелгі ретінде user-ді көрсетіп, foo бағдарламасын шақырады. Бағдарлама /tmp/foo (уақытша) файлын жасайды (іс жүзінде /root/.rhosts файлын жасайды) және сұралған тіркелгі туралы ақпаратты (мысалы, пайдаланушының паролін) оған сақтайды. Содан кейін ол уақытша файлды (тек символдық сілтемені) жояды. Енді /root/.rhosts пароль туралы ақпаратты қамтиды, бұл (егер ол дұрыс форматта болса) кез келген адамға rlogin арқылы компьютерге супер пайдаланушы ретінде кіруге қажетті құрал болып табылады. Сондай-ақ, кейбір Unix жүйелерінде файлды символдық сілтеме арқылы (бұзуылған немесе басқаша) ашуды болдырмау үшін O_NOFOLLOW деген арнайы флаг бар. Ол POSIX.1 2008 стандартында бекітілген.
In this naive example, the Unix program foo is setuid. Its function is to retrieve information for the accounts specified by the user. For "efficiency", it sorts the requested accounts into a temporary file (/tmp/foo naturally) before making the queries. The directory /tmp is world writable. Malicious user Mallory creates a symbolic link to the file /root/. rhosts named /tmp/foo. Then, Mallory invokes foo with user as the requested account. The program creates the (temporary) file /tmp/foo (really creating /root/. rhosts) and puts information about the requested account (e. g. user password) in it. It removes the temporary file (merely removing the symbolic link). Now the /root/. rhosts contains password information, which (if it even happens to be in the proper format) is the incantation necessary to allow anyone to use rlogin to log into the computer as the superuser. Also in some Unix systems there is a special flag O NOFOLLOW for open(2) to prevent opening a file via a symbolic link (dangling or otherwise). It's become standardized in POSIX.1 2008.
Айналадағы амал
POSIX C стандартты кітапханасының mkstemp функциясы уақытша файлдарды қауіпсіз жасау үшін қолданылуы мүмкін. Shell сценарийлері үшін жүйелік утилита да осылай жұмыс істейді.
The POSIX C standard library function mkstemp can be used to safely create temporary files. For shell scripts, the system utility does the same thing.