Кіріспе

Бағдарламалық қамтамасыз ету қауіпсіздігі

Символдық сілтеме жарысы – бағдарламалық қамтамасыз етудегі қауіпсіздік осалдығының бір түрі, ол бағдарламаның қауіпсіз емес тәсілмен файлдарды жасауынан туындайды. Зыянды пайдаланушы оларға басқаша қолжетімді емес файлға символдық сілтеме жасауға мүмкіндік алады. Егер артықшылықтары бар бағдарлама символдық сілтемемен бірдей атаумен файл жасаса, ол шын мәнінде сілтеме жасалған файлды жасайды, бұл зыянды пайдаланушының қалаған мазмұнын қосуына (төмендегі мысалға қараңыз) немесе тіпті зыянды пайдаланушы ұсынған мазмұнды (бағдарламаға енгізілім ретінде) мүмкіндік береді. Бұл "жарыс" деп аталады, себебі оның типік жағдайында бағдарлама сол аттас файлдің бар-жоғын тексереді; егер файл болмаса, бағдарлама оны жасайды. Шабуылшы осы тексеру мен файл жасалу аралығында сілтемені жасауы тиіс. Символдық сілтеме жарысы антивирустық өнімдерде де кездесуі мүмкін, олар күдікті файлды карантинге алуға немесе жоюға шешім қабылдап, содан кейін оны іске асырады. Шешім мен іс-қимыл аралығында зыянды бағдарламалық қамтамасыз ету күдікті файлды жүйелік немесе антивирустық файлмен алмастыруы мүмкін, осылайша зыянды бағдарламалық қамтамасыз етудің оны жабуын қадағалайды.

Мысал

Бұл қарапайым мысалда 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 стандартында бекітілген.

Айналадағы амал

POSIX C стандартты кітапханасының mkstemp функциясы уақытша файлдарды қауіпсіз жасау үшін қолданылуы мүмкін. Shell сценарийлері үшін жүйелік утилита да осылай жұмыс істейді.