PDA

View Full Version : سوال: وادارکردن gcc به کامپایل و لینک اتوماتیک خروجی به صورت position-independent executable



ahmad24shargh
دوشنبه 23 دی 1392, 21:30 عصر
یه اصطلاحی هست در مورد gcc که بهش میگن Hardened GCC که ظاهرا فقط باید فایل spec دستکاری بشه تا خروجی کامپایل و لینک یه باینری امن باشه.قبل از هر تغییری خروجی کامپایلر از نظر گزینه های امنیتی به صورت زیر بود :

COMMAND RELRO STACK CANARY NX/PaX PIE
gpg-agent Partial RELRO Canary found NX enabled No PIE

من spec توکار gcc (ورژن 4.8.2) رو با دستور زیر اکسترکت کردم :


gcc -dumpspecs > /usr/lib/gcc/x86_64-unknown-linux-gnu/4.8.2/

بعد فایل spec رو تو ادیتور باز کردم و به انتهای گزینه ای که با :link* شروع میشه گزینه زیر رو اضافه کردم :


%{!norelro: -z relro} %{relro: } %{!nonow: -z now} %{now: }

با این تغییر partial relro به full relro تغییر وضعیت پیدا کرد.حالا میخوام pie رو هم فعال کنم که ظاهرا باید ۴ تا رکوردهای spec تغییر کنند : startfile, endfile, cc1 and link_command
تو این لینک (https://wiki.gentoo.org/wiki/Hardened/Toolchain#Toolchain_modifications_for_default_RELR O) نحوه اینکار توضیح داده شده اما فقط تغییر در ۲ گزینه cc1 و link_command آورده شده و هر کاری کردم موقع اجرای configure یا طی لینک ارور میده.
استفاده از پرچم fPIE- یا pie- تو make به صورت سرتاسری باعث مشکل میشه چون shared library باید از پرچم fPIC- استفاده کنه و کتابخانه های استاتیک باید از PIE استفاده کنند.فقط تغییر درست فایل spec میتونه مشکلو حل کنه.
کسی راه حل یا ایده ای داره.