72 SPECIAL DELIVERY ÑÏÅÖ 02-07S P E I A L Î Ï Ð Î ÑÀËÅÊÑÀÍÄÐÀÍÒÈÏÎÂÐóêîâîäèòåëü ïðîåêòà,àâòîð/ñîàâòîð/ðåäàêòîðìíîãî÷èñëåííûõ ñòàòåéâåäóùåãî îòå÷åñòâåííîãîïîðòàëà, ïîñâÿùåííîãîèíôîðìàöèîííîéáåçîïàñíîñòèSecurityLab.ruÂÀËÅÐÈßÊÎÌÈÑÑÀÐÎÂÀÈìååò ñòàòóñ MicrosoftStudent Partnerè ñåðòèôèêàòûñïåöèàëèñòà Microsoftè ðàçðàáîò÷èêà ðåøåíèéíà C# ïîä .NETÏÐÎÁËÅÌÛ Ñ SQL INJECTIONÏÎËÓ×ÈËÈ ØÈÐÎÊÓÞ ÎÃËÀÑÊÓÁËÀÃÎÄÀÐß ÓßÇÂÈÌÎÑÒÈ ÑÀÉÒÎÂ,ÒÀÊ ÊÀÊ WEB — ÌÀÑÑÎÂÛÉÏÐÎÄÓÊÒ. ÍÎ ÃÄÅ ÅÙÅ ÌÎÆÍÎÂÑÒÐÅÒÈÒÜ SQL INJECTION?ÌÈÕÀÈËÔËÅÍÎÂÑîçäàòåëü ñàéòàwww.vr-online.ru, àâòîð11 êíèã íà ðóññêîìè 4 íà àíãëèéñêîì ÿçûêåÀÍÒÎÍÊÀÐÏÎÂÑïåöèàëèñò â îáëàñòèèíôîðìàöèîííîéáåçîïàñíîñòè. Êðóãïðîôåññèîíàëüíûõèíòåðåñîâ: ñåòåâûå àòàêè,áåçîïàñíîñòü UNIXñèñòåì,áåçîïàñíîñòüáåñïðîâîäíûõ ñåòåéÊÐÈÑÊÀÑÏÅÐÑÊÈÊîìïüþòåðû ãðûçåò åùåñ òåõ äàâíèõ âðåìåí,êîãäà Ïðàâåö-8Äñ÷èòàëñÿ êðóòîé ìàøèíîé,à äèñêîâîä ñ ìîíèòîðîìáûëè âåðõîì ìå÷òàíèé.Îñâîèë êó÷ó ÿçûêîâè îïåðàöèîííûõ ñèñòåì,èç êîòîðûõ ðåàëüíîèñïîëüçóåò W2K, à ëþáèòFreeBSD 4.5ÂÀËÅÐÈß ÊÎÌÈÑÑÀÐÎÂÀ: Ãëàâíîå â SQL Injection íå òî, ÷òî ýòà óÿçâèìîñòüàêòèâíî ýêñïëóàòèðóåòñÿ â web-ïðèëîæåíèÿõ, à òî, ÷òî îíà ìîæåò áûòüèñïîëüçîâàíà àáñîëþòíî âî âñåõ ïðèëîæåíèÿõ, íàïèñàííûõ íà ëþáûõ ÿçûêàõïðîãðàììèðîâàíèÿ, â êîòîðûõ èñïîëüçîâàíû SQL-çàïðîñû (âåäü ïðàêòè÷åñêèâ êàæäûé èç íèõ ìîæíî âíåäðèòü îïàñíûå SQL-èíúåêöèè).ÀÍÒÎÍ ÊÀÐÏÎÂ: Î÷åâèäíî, âåçäå, ãäå òðåáóåòñÿ ââîä äàííûõ îò ïîëüçîâàòåëÿ,à áàçû äàííûõ èñïîëüçóþòñÿ â êà÷åñòâå backend'à äëÿ õðàíåíèÿ èíôîðìàöèè.Ýòî ìîæåò áûòü íå òîëüêî îíëàéí-ìàãàçèí èëè âåá-ôîðóì (õîòÿ ïîíÿòíî,÷òî www ÿâëÿåòñÿ íàèáîëåå øèðîêîé îáëàñòüþ ïðèìåíåíèÿ SQL Injection).Ýòî ìîæåò áûòü ëþáîå ïðèëîæåíèå, êîòîðîå õðàíèò èíôîðìàöèþ â áàçåäàííûõ è ïðåäîñòàâëÿåò èíòåðôåéñ äëÿ äîñòóïà ê íåé.ÊÐÈÑ ÊÀÑÏÅÐÑÊÈ: Íàâåðíîå, âåçäå, ãäå ñòîèò SQL, îáðàáàòûâàþùèéíå îòôèëüòðîâàííûå ïîëüçîâàòåëüñêèå çàïðîñû. Ìíîãèå ïðîãðàììû, ðàáîòàþùèåñ áàçàìè äàííûõ, èñïîëüçóþò SQL. Êëèåíòñêîå ïðèëîæåíèå âçàèìîäåéñòâóåòñ ïîëüçîâàòåëåì è ãåíåðèðóåò sql-çàïðîñû, ïîñûëàÿ èõ ñåðâåðó. Âïðàâèëüíî ñïðîåêòèðîâàííîé ñèñòåìå ðàçãðàíè÷åíèå äîñòóïà ê äàííûì îñóùåñòâëÿåòñÿíà ñåðâåðå. Êëèåíòà ýòî âîîáùå íå êàñàåòñÿ, — îí âïðàâå ñëàòüëþáûå çàïðîñû. Íî äàëåêî íå âñå ðàçðàáîò÷èêè ýòî ïîíèìàþò (èëè ðåàëèçóþòäîëæíûì îáðàçîì).  ðåçóëüòàòå ÷àñòü (èëè âñå) ïðîâåðêè íà íàëè÷èå ó ïîëüçîâàòåëÿïðàâ âûïîëíÿòü äàííóþ sql-îïåðàöèþ îñóùåñòâëÿþòñÿ íà êëèåíòñêîéñòîðîíå, âíóòðè ïðîãðàììû. Îáû÷íûé ïîëüçîâàòåëü, äåéñòâèòåëüíî, íåìîæåò îáîéòè çàùèòó, òàê êàê íàòàëêèâàåòñÿ íà èíòåðôåéñ, íî õàêåð ëåãêî íàïðàâèòçàïðîñ ê sql-ñåðâåðó ïî Ñåòè è òîò ïîñëóøíî âûïîëíèò åãî ñî âñåìèâûòåêàþùèìè îòñþäà ïîñëåäñòâèÿìè (à èíîãäà íèêàêîé Ñåòè âîîáùå íåò,«sql-ñåðâåð» ïðåäñòàâëÿåò ñîáîé ëîêàëüíóþ ïðîãðàììó). Òåì íå ìåíåå, webèíòåðôåéñÿâëÿåòñÿ îäíèì èç ñàìûõ ïîïóëÿðíûõ ñïîñîáîâ âçàèìîäåéñòâèÿ ñáàçàìè äàííûõ (îñîáåííî óäàëåííûìè), è àêòóàëüíîñòü àòàê òèïà SQL Injectionâ îáîçðèìîì áóäóùåì ñíèæàòüñÿ íå áóäåò.
73ÊÀÊÈÅ ÑÏÎÑÎÁÛ ÁÎÐÜÁÛ Ñ SQLINJECTION ÍÀÈÁÎËÅÅ ÝÔÔÅÊÒÈÂÍÛ?XSS — ÐÅÀËÜÍÀß ÓÃÐÎÇÀ ÈËÈ ÑËÀÁÎÅÌÅÑÒÎ ÏÎÔÈÃÈÑÒÎÂ?ÂÀËÅÐÈß ÊÎÌÈÑÑÀÐÎÂÀ: Ñóùåñòâóåò íåñêîëüêî ìåòîäîâ áîðüáûñ SQL-èíúåêöèÿìè: èñïîëüçîâàíèå ðàçëè÷íûõ ôóíêöèé (êàê âñòðîåííûõ ñèñòåìíûõ/ÿçûêàïðîãðàììèðîâàíèÿ, òàê è ñîçäàííûõ ïðîãðàììèñòîì) äëÿýêðàíèðîâàíèÿ ðàçëè÷íûõ «íåäîáðîêà÷åñòâåííûõ» ñèìâîëîâ â çàïðîñå; èñïîëüçîâàíèåìåòîäà ïåðåáîðà, êîòîðûé ïîçâîëÿåò êðîìå ñèìâîëîâ óäàëÿòü èðàçíûå óïðàâëÿþùèå ñëîâà è ïîñëåäîâàòåëüíîñòè; èñïîëüçîâàíèå ñïåöèàëüíûõôóíêöèîíàëüíûõ «îáåðòîê», áåðóùèõ íà ñåáÿ âñþ «ãðÿçíóþ» ðàáîòó; èñïîëüçîâàíèåòèïèçèðîâàííûõ ïàðàìåòðîâ.ÇÀÐÀÇÀ: Îñíîâíûå ìåòîäû áîðüáû ïðèìåðíî ñëåäóþùèå: èçáåãàòü èñïîëüçîâàíèÿsql-çàïðîñîâ, èñïîëüçîâàòü âìåñòî íèõ õðàíèìûå ïðîöåäóðû è ïðåäñòàâëåíèÿ;êîíòðîëèðîâàòü ëþáîé çàïðîñ ïîëüçîâàòåëÿ íà óðîâíå ïðîöåäóðïîëó÷åíèÿ äàííûõ (íàïðèìåð, ïðîöåäóðà ïîëó÷åíèÿ ïåðåìåííîé èç query_string);cîçäàâàòü ðîëè â áàçå äàííûõ, íàäåëåííûå ìèíèìàëüíûì íàáîðîìïîëíîìî÷èé, ÷òîáû äàæå èìåÿ ïîëíûé äîñòóï ê áàçå äàííûõ, ïîëüçîâàòåëüíå ìîã ïðîèçâåñòè «âðåäíûõ» äåéñòâèé; ìîæíî íàçâàòü åùå è ñðåäñòâàôèëüòðàöèè çàïðîñîâ, ôàéðâîëû íà óðîâíå ïðèëîæåíèé (áàç äàííûõ), íî âñåýòî — «íåïðàâèëüíûå» ñðåäñòâà.ÌÈÕÀÈË ÔËÅÍÎÂ: Ïðîâåðêà âñåõ ïàðàìåòðîâ, ÷åòêîå ðàçäåëåíèå ïðàâ äîñòóïàè, æåëàòåëüíî, íåñêîëüêî óðîâíåé çàùèòû (íàïðèìåð, ìîäóëè áåçîïàñíîñòè).Äîëæíî áûòü ðàçðåøåíî òîëüêî òî, ÷òî íåîáõîäèìî, à âñå îñòàëüíîåíóæíî çàïðåùàòü. Íàïðèìåð, åñëè ïîëüçîâàòåëü íå äîëæåí âèäåòü îïðåäåëåííûåòàáëèöû â áàçå äàííûõ, òî ó÷åòíàÿ çàïèñü, ïîä êîòîðîé âûïîëíÿþòñÿçàïðîñû äàííîãî ïîëüçîâàòåëÿ, íå äîëæíà èìåòü ïðàâ íà ýòè òàáëèöû. Îäíóåäèíñòâåííóþ çàùèòó îáîéòè äîñòàòî÷íî ïðîñòî, à åñëè èñïîëüçóåòñÿ ñðàçóíåñêîëüêî ìåòîäîâ, òî ñðàáîòàåò äðóãîé óðîâåíü áåçîïàñíîñòè.ÊÐÈÑ ÊÀÑÏÅÐÑÊÈ: Ðàçãðàíè÷åíèå äîñòóïà ê äàííûì íà óðîâíå SQL-ñåðâåðà.Íî ïðîáëåìà çäåñü â òîì, ÷òî ñ òî÷êè çðåíèÿ SQL-ñåðâåðà, îáðàáàòûâàþùåãîçàïðîñû web-ñåðâåðà, ïîä êîòîðûì «âðàùàåòñÿ» ñàéò, íàïèñàííûé íàPHP èëè Perl'å, âñå çàïðîñû ðàâíîçíà÷íû, ïîñêîëüêó àâòîðèçàöèÿ ïîëüçîâàòåëåé(äàæå åñëè îíà è ïðåäóñìîòðåíà), êàê ïðàâèëî, îñóùåñòâëÿåòñÿ íàPHP. Ïðîñòî â SQL-áàçå õðàíÿòñÿ ïîëüçîâàòåëè ñ ïàðîëÿìè, ïðîâåðÿåìûìèPHP-ñêðèïòîì, à äëÿ SQL åñòü òîëüêî îäèí ïîëüçîâàòåëü — ñàì PHP-ñêðèïò.Ïðè÷åì PHP — íå ñàìûé áåçîïàñíûé ÿçûê ïðîãðàììèðîâàíèÿ (êàê, âïðî÷åì,è Perl). Îí äîïóñêàåò èíòåðïîëÿöèþ ñòðîê è âîîáùå ëþáèò ðàçâîäèòü ñàìîäåÿòåëüíîñòü.Íà Ñè íàïèñàòü áåçîïàñíûé ñàéò íàìíîãî ïðîùå, íî òóò óæåâîçíèêàþò ïðîáëåìû èíîãî ðîäà: ïåðåíîñèìîñòü, ïåðåïîëíåíèå áóôåðîâ(ôóíäàìåíòàëüíàÿ ïðîáëåìà Ñè) è ò.ï. Òàê ÷òî îñòàåòñÿ íàíèìàòü ãðàìîòíûõïðîãðàììèñòîâ, èìåþùèõ ðåàëüíûé îïûò, è äàâàòü èì ðåàëüíûå ñðîêè äëÿâûïîëíåíèÿ çàêàçà, ïîñêîëüêó ïîäàâëÿþùåå áîëüøèíñòâî îøèáîê ñîâåðøàåòñÿèç-çà íåâíèìàòåëüíîñòè, èçëèøíåé ñóåòëèâîñòè è íåðâîçíîñòè, âûçâàííîéíàâèñàþùèì äåäëàéíîì.ÀËÅÊÑÀÍÄÐ ÀÍÒÈÏÎÂ: Çàùèòà! Êàê íà óðîâíå êîäà, òàê è íà óðîâíå ñåðâåðà.Ê ñîæàëåíèþ, ñïîñîáîâ ýêñïëóàòàöèè SQL-èíúåêöèè — îãðîìíîå ìíîæåñòâîè îøèáàþòñÿ äàæå îïûòíûå ïðîãðàììèñòû. Ïîýòîìó âñåãäà íåîáõîäèìîèñïîëüçîâàòü äîïîëíèòåëüíûå ñðåäñòâà çàùèòû íà ñåðâåðå — ìèíèìèçàöèÿïðèâèëåãèé, web-IDS-ñèñòåìû (òèïà mod_security èëè secureIIS).ÂÀËÅÐÈß ÊÎÌÈÑÑÀÐÎÂÀ: Íà ìîé âçãëÿä, ïðîáëåìà XSS äîñòàòî÷íîñåðüåçíà è ðàñïðîñòðàíåíà, ÷òîáû íå ïðèíèìàòü åå âî âíèìàíèå. È ìàñøòàáûýòîé «ýïèäåìèè» çàñòàâëÿþò ãîâîðèòü îá XSS êàê î çíà÷èòåëüíîé óãðîçå, à íåêàê îá î÷åðåäíîé PR-ïðèäóìêå.ÇÀÐÀÇÀ: Îäíà èç ìîèõ ïåðâûõ ñòàòåé, ïîñâÿùåííûõ ïðîáëåìàì áåçîïàñíîñòè,íàçûâàëàñü «Åùå ðàç î âçëîìàõ HTML-÷àòîâ» (www.security.nnov.ru/articles/3APA3Ahtml.asp).Áûëà íàïèñàíà, åñëè íå îøèáàþñü, â 1998 ãîäó è ñîäåðæàëàðåàëüíûå ïðèìåðû ìåæñàéòîâîãî ñêðèïòèíãà. Òåðìèíà òàêîãî â òî âðåìÿåùå íå ñóùåñòâîâàëî, è âîîáùå, ýòà ïðîáëåìà äîñòàòî÷íî äîëãî íå ñ÷èòàëàñüïðîáëåìîé áåçîïàñíîñòè. ß ïîìíþ ïðîäîëæèòåëüíûé äèàëîã ñ AlephOne (îñíîâàòåëü è ïåðâûé ìîäåðàòîð Bugtraq) íà ýòó òåìó, íî óáåäèòü åãî âðåàëüíîñòè óãðîçû ìíå òîãäà òàê è íå óäàëîñü. Òîëüêî â 2001 ãîäó îøèáêèCSS/XSS íà÷àëè âîñïðèíèìàòüñÿ êàê ïðîáëåìû áåçîïàñíîñòè, è ïîÿâèëñÿñàì òåðìèí «Cross-Site Scripting».ÇÀÐÀÇÀÐóêîâîäèòåëü ñëóæáûïîääåðæêèïîëüçîâàòåëåé äîâîëüíîêðóïíîãî ISP. Õîááè —ðàçðàáîòêà ïðîãðàììíîãîîáåñïå÷åíèÿ, â ÷àñòíîñòè,ïðîåêò 3proxy (www.security.nnov.ru/soft/3proxy/)