
بخش بررسی کد (Code Review) از کتاب From day zero To ZeroDay به اهمیت بررسی کدهای منبع برای کشف آسیبپذیریها و درک نحوه عملکرد نرمافزار اشاره میکند. این فرآیند به محققان امنیتی کمک میکند که آسیبپذیریها را قبل از اینکه مهاجمان از آنها سوءاستفاده کنند، کشف و برطرف نمایند. در ادامه، این بخش را با جزئیات بیشتری توضیح میدهم و با ذکر مثالهایی آن را روشنتر میکنم.
بررسی کد به فرآیند تجزیهوتحلیل کد منبع برای شناسایی آسیبپذیریهای امنیتی و نقصهای منطقی گفته میشود. این روش یکی از اصلیترین ابزارهای محققان امنیتی برای کشف ضعفهای امنیتی است. برخلاف مهندسی معکوس یا فازینگ که روی فایلهای باینری تمرکز دارند، بررسی کد از همان ابتدا به منبع اصلی مشکل نگاه میکند.
چرا بررسی کد اهمیت دارد؟
بسیاری از نرمافزارهای امروزی از کتابخانهها و قطعات کد منبع باز استفاده میکنند.
ممکن است در این کتابخانهها آسیبپذیریهای قدیمی وجود داشته باشد که هنوز رفع نشدهاند.
برخی از آسیبپذیریها ممکن است در پروژههای فورک شده (انشعاب یافته) اصلاح شده باشند، اما در نسخههای دیگر باقیمانده باشند.
در سال ۲۰۲۱، یک آسیبپذیری بحرانی در Apache Log4j کشف شد. این کتابخانه که برای لاگگیری در زبان جاوا استفاده میشود، به مهاجمان اجازه میداد اجرای کد از راه دور (RCE) را تنها با ارسال یک رشته متنی خاص فعال کنند.
این آسیبپذیری ناشی از قابلیت ناامن JNDI Lookup در لاگگیری بود. این قابلیت از سال ۲۰۱۳ در کد منبع Log4j وجود داشت، اما هیچکس متوجه آن نشده بود تا زمانی که مهاجمان از آن سوءاستفاده کردند.
چرا این آسیبپذیری اینقدر خطرناک بود؟
این کتابخانه در هزاران پروژه ازجمله Apache Struts، Elasticsearch، Minecraft و غیره استفاده میشد.
سازمانها و شرکتهای بزرگی بهسرعت مجبور به بهروزرسانی شدند، چراکه این آسیبپذیری به مهاجمان اجازه میداد که کنترل کامل سیستمها را به دست بگیرند.
اگر بررسی کد زودتر انجام میشد، این آسیبپذیری زودتر کشف و رفع میشد!
یک محقق امنیتی در سال ۲۰۲۱ متوجه شد که Apache OpenOffice حاوی یک آسیبپذیری اجرای کد از راه دور است که قبلاً در LibreOffice (یک پروژه منشعب شده از OpenOffice) اصلاح شده بود.
مشکل در فرآیند پردازش فایلهای dBASE بود.
این آسیبپذیری باعث میشد که یک فایل مخرب بتواند کد دلخواه را اجرا کند.
مشکل اصلی:
اگر محققان کد OpenOffice را بررسی کرده بودند، متوجه میشدند که این مشکل در LibreOffice اصلاح شده اما در OpenOffice باقیمانده است.
این نشان میدهد که آسیبپذیریهای یک پروژه میتوانند روی پروژههای دیگر نیز تأثیر بگذارند.
در سال ۲۰۲۴، یک درب پشتی خطرناک در کتابخانه liblzma کشف شد که به مهاجمان اجازه میداد به سرورهای دارای SSH دسترسی بگیرند.
کتابخانه liblzma بخشی از توزیعهای اصلی لینوکس مانند Debian و Fedora است.
این آسیبپذیری به مهاجمان اجازه میداد بدون نیاز به رمز عبور، به سیستمهای قربانیان نفوذ کنند.
بررسی کد منبع نشان داد که این درب پشتی توسط یک شخص خاص بهصورت عمدی اضافهشده است.
اهمیت بررسی کد:
بسیاری از سازمانها و کاربران تصور میکنند که کتابخانههای متنباز امن هستند، اما بررسی کد نشان میدهد که حتی در پروژههای معتبر هم ممکن است کدهای مخرب اضافه شوند.
نرمافزارهای امروزی بهشدت به کتابخانههای متنباز متکی هستند. این وابستگیها میتوانند باعث شوند که یک آسیبپذیری ساده، کل اکوسیستم را تحت تأثیر قرار دهد.
بسیاری از برنامههای جاوا از کتابخانه js-yaml برای پردازش فایلهای YAML استفاده میکنند. این کتابخانه تنها ۳۳ فایل دارد، اما به دلیل استفاده گسترده در پروژههای دیگر، هرماه ۳۲ میلیون بار دانلود میشود!
نتیجه: اگر یک آسیبپذیری در js-yaml کشف شود، هزاران پروژه دیگر نیز تحت تأثیر قرار میگیرند.
محققان امنیتی بهجای نفوذ مستقیم به نرمافزارهای پیچیده، میتوانند وابستگیهای آنها را هدف قرار دهند.
یک محقق توانست از طریق آسیبپذیری در Netatalk، کنترل چندین دستگاه NAS را در اختیار بگیرد.
کتابخانه Netatalk یک سرور متنباز Apple Filing Protocol (AFP) است.
این محقق بهجای حمله مستقیم به نرمافزار NAS، به یکی از کتابخانههای وابسته آن حمله کرد.
نتیجه: بررسی کد کتابخانههای متنباز میتواند راهی سادهتر و مؤثرتر برای کشف آسیبپذیریها باشد.
با اینکه امروزه ابزارهای خودکار مانند CodeQL برای تحلیل کد استفاده میشوند، بررسی دستی کد همچنان ضروری است.
بسیاری از آسیبپذیریها از طریق ابزارهای خودکار کشف نمیشوند.
برخی از مشکلات امنیتی به دلیل پیچیدگی کد یا شرایط خاص اجرای برنامه از چشم تحلیلگرهای خودکار پنهان میمانند.
حملات مهندسی اجتماعی ممکن است باعث اضافه شدن کدهای مخرب به پروژههای متنباز شوند.
برای انتخاب یک پروژه مناسب جهت بررسی کد، میتوان از سه معیار زیر استفاده کرد:
پروژههایی را انتخاب کنید که زبان برنامهنویسی آنها را بلد هستید.
بهتر است پروژههایی را بررسی کنید که قبلاً درباره آنها مطالعه کردهاید.
آیا سورس کد در GitHub یا SourceForge موجود است؟
آیا میتوان پروژه را بهراحتی روی یک سیستم تست اجرا کرد؟
آیا این پروژه در محصولات و سرویسهای مهم استفاده میشود؟
آیا این آسیبپذیری میتواند میلیونها کاربر را تحت تأثیر قرار دهد؟
بخش بررسی کد (Code Review) تأکید دارد که برای کشف آسیبپذیریهای امنیتی:
✅ باید به بررسی کدهای منبع باز و وابستگیهای نرمافزاری توجه شود.
✅ بررسی کد میتواند آسیبپذیریهایی را کشف کند که سالها بدون توجه باقیماندهاند.
✅ حمله به کتابخانههای وابسته گاهی از حمله مستقیم به نرمافزارها آسانتر است.
✅ ابزارهای خودکار نمیتوانند جایگزین بررسی دستی کد شوند.
با استفاده از این روشها، محققان امنیتی میتوانند قبل از اینکه مهاجمان از آسیبپذیریها سوءاستفاده کنند، آنها را شناسایی و اصلاح کنند. 🚀