PUDA توضیح داده شده: درک باگهای Use-After-Free
تفکیک روشن از باگهای حافظه سبک PUDA (استفاده زودرس / دسترسی معلق)، چگونگی بروز آنها، و نحوه تشخیص و جلوگیری آنها توسط مدافعان.
باگهای فساد حافظه همچنان یکی از پایدارترین ردههای آسیبپذیریها در نرمافزار سیستم باقی ماندهاند، و درک مکانیزمهای پشت سر آنها برای هرکسی که در تحقیقات آسیبپذیری، کدگذاری امن، یا کاهش استفاده از بهرهبرداری کار میکند ضروری است. "PUDA" اصطلاحی است که بهطور غیررسمی در برخی جوامع امنیتی برای توصیف Premature Use of Dangling Access — دستهای از باگهایی که برنامه از حافظه (یک pointer، handle، یا مرجع شیء) پس از آنکه آن حافظه آزاد شده، دوباره اختصاص داده شده، یا بهطریقی دیگر نامعتبر شده است، استفاده میکند — استفاده میشود. این بهطور نزدیک به مسائل use-after-free (UAF) و dangling pointer مرتبط است و اغلب بهطور متقابل با آنها استفاده میشود. چه اصطلاح PUDA را در یک نوشتة CTF، مقاله تحقیقی، یا ردیاب باگ داخلی مواجه شوید، مفهوم بنیادی یکی است: یک مرجع کهنه که انگار هنوز معتبر باشد استفاده میشود.
چه چیزی شرایط PUDA را ایجاد میکند
در هسته خود، باگ PUDA از عدم تطابق بین عمر واقعی یک شیء و عمری که کد ارجاعدهنده فرض میکند ناشی میشود. علل ریشهای معمول عبارتاند از:
- بیاثر کردن null بعد از آزادسازی: یک pointer آزاد میشود اما به
NULLتنظیم نمیشود، و آن را معلق و قابل استفاده غلط میگذارد. - شرایط مسابقه: در کد چندنخی، یک نخ یک شیء را آزاد میکند در حالی که نخ دیگری هنوز یک مرجع را نگهداری و استفاده میکند (سناریوی مشابه TOCTOU کلاسیک).
- منطق callback و رویدادمحور: یک شیء در حین callback نابود میشود، اما کد فراخواننده پس از بازگشت callback ادامه به کار روی آن میدهد.
- خطاهای شمارش مرجع: شمار مرجع یک شیء بهطور نادرست کاهش مییابد و باعث آزادسازی آن میشود در حالی که هنوز
با کمک هوش مصنوعی نوشتهشده، بازبینی و منتشرشده توسط Michal Pilch (CISSP)، Korra Studio.
این یکی از یادداشتهای پایگاه دانش Korra Studio است — پلتفرم هر موضوع را با مربی یکبهیک جفت میکند.
شروع رایگانarrow_forward