Соқыр қайтаруға бағытталған бағдарламалау - Blind return oriented programming

Соқыр қайтаруға бағытталған бағдарламалау (BROP) бұл эксплуатация әдісі, ол шабуылдаушы мақсатты екілік жүйеге ие болмаса да, эксплуатацияны сәтті жасай алады. Биттау және басқалар көрсеткен BROP шабуылдары. жеңілді мекен-жай кеңістігінің рандомизациясы (ASLR) және стек канариялары 64 биттік жүйелерде.

ROP тарихы

ОЖ қауіпсіздігі мен аппараттық құралдарының жетілдірілуімен, Linux сияқты қауіпсіздік мүмкіндіктері PAX жоба, кодты енгізу мүмкін емес. Содан кейін қауіпсіздік зерттеушілері өздері атаған жаңа шабуыл ойластырды қайтаруға бағытталған бағдарламалау жеңілу NX (орындалмайтын) жад. Бұл шабуыл стекті, әсіресе қайтарылатын мекен-жайларды басқару арқылы бағдарлама ағынына әсер етеді. Гаджеттер - бұл шабуылдың негізгі бөлімдері. Гаджеттер - бұл стектің белгілі бір күйімен бірге қайтарылатын нұсқаумен аяқталатын командалар тізбегінің тобы. Гаджет сөзді жадтан регистрге жүктеу немесе шартты секіру сияқты күрделі әрекетті орындау сияқты әрекеттерді орындай алады. Жеткілікті үлкен екіліктің көмегімен а Тюринг-аяқталған гаджеттер жиынтығын жасауға болады, бұл снаряд кодын орындау үшін жеткілікті. ROP-тің болжамына сәйкес, шабуылдаушы мақсатты екілік файлдарды иемденеді және сондықтан гаджеттердің мекен-жайларын алдын-ала біледі.

BROP сценарийлері

BROP үш жаңа сценарий бар [1] үшін маңызды болуы мүмкін. Олар:
(i) жабық екілік қызметтер болған жағдайда, фуз және енуді тестілеу сияқты тәсілдерді қолдану қажет осалдықтарды анықтау.
(ii) ашық қайнар көздер кітапханасындағы осалдықты пайдалану мүмкін болса да, оны пайдаланатын меншікті екілік жабық көз болып табылады.
(iii) Сондай-ақ, оны екілік белгісіз болып табылатын ашық көзі бар серверді бұзу үшін пайдалануға болады.
Шабуыл серверде белгілі стек осалдығы бар сервис бар деп есептейді, сонымен қатар қызмет апатқа қайта оралуы керек.

Шабуыл кезеңдері

Стек оқу

Қайтару нұсқауларының көрсеткіштері әдетте стек канарияларымен қорғалған. Стек канареясы бағдарламаның бұзылуына әкеледі, егер оның мәні буферден асып кетсе өзгертіледі. Шабуылдың BROP моделінде буферден асып түсу байт-байт арқылы жүзеге асырылады. Бағдарламаның бұзылуына немесе одан әрі орындалуына әкеліп соқтыратын артық нәтижелер. Бағдарламаның бұзылуы стек мәнінің дұрыс емес болжанғанын білдіреді, сондықтан 256 әрекетте (орташа жағдай 128 рет) стек мәнін бағалауға болады. 64 биттік машиналарда канарияның ағып кетуі үшін осындай 4 стек оқуы қажет болады. Канария ағып кеткеннен кейін, қайтару нұсқаулығы дәл осылай бұзылуы мүмкін. Алайда, стек канариясының бағасы дәл болғанымен, қайтару нұсқауының мекен-жайы туралы дәл осылай айтуға болмайтынын атап өтуге болады. Шабуылдаушы адрес кеңістігінің кез-келген адресін жібере алатынына қанағаттанар еді.

Соқыр ROP

Бұл кезең шабуылдың жүрегі болып табылады. Бұл кезеңдегі мақсат - шабуылдаушыға екілік екпінді жіберіп, жазба жүйелік шақыруын бастау. Жазу жүйесінің шақыруында үш параметр бар: ұяшық, буфер және ұзындық. X86-64 шақыру конвенциялары параметрлерді регистрлер арқылы өткізуді талап ететіндіктен, rsi, rdi және rdx ішіне тиісті поп-нұсқаулар жазу жүйесін шақырудың аргументтерін орнату үшін қажет болады. Pop rdi, ret және басқалары сияқты нұсқаулықтар бұл тұрғыда пайдалы болар еді. Жазу жүйесінің қоңырауының қарапайым ROP нұсқасы:
(1) поп рди; рет (розетка)
(2) поп rsi; рет (буфер)
(3) pop rdx; рет (ұзындық)
(4) поп-ракс; ret (сискал нөмірін жазу)
(5) скисал

Бұл әдіснаманың бір проблемасы, егер олар мекен-жайларды стекке қайтарғаннан кейін мекен-жай кеңістігінде пайдалы гаджеттер табылса да, орындалмайтын стекке үлкен ықтималдықпен әкелуі мүмкін. Осыны жою үшін BROP ұсынушылары тоқтату гаджеттерін ойластырды. Стоп-гаджет - бұл бағдарламаның блокталуына әкелетін кез келген нәрсе, мысалы, шексіз цикл немесе жүйенің блоктауы (ұйқы сияқты). Бұл сонымен қатар шабуылда зардап шеккен процессорлар шексіз циклда қалып, шабуылдаушыға шабуылды жалғастыруға мүмкіндік береді.

Жоғарыда айтылғандар шабуылдың жалаңаш әдіснамасы. Шындығында, бірнеше оңтайландыру жүргізуге болады, олар шабуылды тиімді жүргізуге көмектеседі. Олардың ішіндегі негізгісі - жүйелік қоңырау нөмірін syscall функциясына жіберудің орнына, жүйенің шақыруын жазу үшін процедураны байланыстыратын кестелерді (PLT) қолдану. Басқаларына RDX регистрін толтыру үшін strcmp пайдалануды жатқызуға болады, өйткені поп RDX, рет-рет командалары өте сирек кездеседі.

Эксплуатацияны құрыңыз

Жазу PLT-де табылғаннан кейін, қаскүнем көбірек гаджеттерді табу үшін мақсатты екілік файлдың мазмұнын тастай алады. Шабуылдаушы әдеттегі ROP гаджетін іздеу әдістерін қолдана алады және жеткілікті мөлшерде жинақталып, снаряд кодын жасай алады. Оларда қабықшасы болғаннан кейін, эксплуатацияланған жүйені түбірлік қол жетімділікпен толық бақылауға алуға болады.

BROP алдын-алу

BROP шабуылындағы үлкен болжам - сервер әр бұзылғаннан кейін қайта қосылады және қайта іске қосқан кезде мекен-жай кеңістігін рандомизацияламайды. Сонымен, іске қосу кезінде мекен-жай кеңістігін рандомизациялауға мүмкіндік беру BROP-тен толықтай дерлік қорғанысты қамтамасыз ете алады. NetBSD және Linux қолданатын тағы бір әдіс - бұл апат кезінде ұйқы. Бұл шабуылды айтарлықтай баяулатады және жүйелік әкімшіге кез-келген күдікті әрекетті қарауға мүмкіндік береді. Бұған қоса, ROP стилін басқаратын ағынды ұрлауға қарсы әдеттегі қорғаныс, Басқару ағынының тұтастығы алдын-алуды қамтамасыз ете алады, бірақ айтарлықтай жұмыс үстінде.

Ұқсас шабуылдар

Табиғаты бойынша BROP-қа ұқсас тағы бір шабуыл - бұл JIT (Just-In-Time) -ROP немесе JIT-ROP. Бұл ақпараттарды ашуға негізделген және оны жеңе алатын тағы бір шабуыл Мекен-жай кеңістігінің рандомизациясы. BROP және JIT-ROP екеуі де деректердің ағып кетуінің қандай-да бір түрін пайдалану мақсатымен ROP шабуылын бастау үшін екілік жүйеге гаджеттерді орналастыруға тырысады. Алайда, BROP-тен айырмашылығы, JIT-ROP интерактивті емес және апатқа ұшырамайтын / бұзылмаған жағдайларға бейімделуге тырысатын шабуыл емес, шабуылдаушы гаджеттерді ашатын сценарий жібереді, содан кейін жеткізу үшін шабуыл жасайды. . Сондай-ақ, JIT-ROP шабуылдың алдында белгілі болатын екі түрлі осалдыққа ие болуы керек (үйме де, үйінді де), ал BROP тек стек осалдығын білуді талап етеді.[2]

Әдебиеттер тізімі

  1. ^ «Соқыр қайтаруға бағытталған бағдарламалау (BROP)». Stanford Secure Computer Systems тобы. Алынған 2016-02-24.
  2. ^ Кинер, Лоуренс (желтоқсан 2015). «Соқыр қайтаруға бағытталған бағдарламалау шабуылдарының жалпы және шектеулерін бағалау» (PDF). Calhoun: NPS институционалдық мұрағаты: 26. Алынған 28 ақпан 2016.