محققان دانشگاه جان هاپکینز اخیراً با استفاده از ابزار تحلیل کد جدیدی که بهطور خاص برای این منظور توسعه دادهاند، به نام ODGen، 180 آسیبپذیری روز صفر را در هزاران کتابخانه Node.js کشف کردند.
هفتاد مورد از این نقصها از آن زمان تاکنون شناسههای آسیبپذیری و قرار گرفتن در معرض رایج (CVE) را دریافت کردهاند. آنها شامل نقصهای تزریق فرمان، آسیبپذیریهای پیمایش مسیر، مشکلات اجرای کد دلخواه، و آسیبپذیریهای اسکریپت بین سایتی هستند - برخی از آنها در برنامههای کاربردی پرکاربرد.
در مقالهای که در اوایل ماه جاری در سمپوزیوم امنیتی یوزنیکس منتشر شد، محققان جانز هاپکینز - سونگ لی، مینگکینگ کانگ، جیانوی هو و یینژی کائو - ODGen را جایگزین بهتری برای تحلیل کد فعلی و به اصطلاح مبتنی بر پرسوجو گراف توصیف کردند. رویکردهایی برای یافتن آسیبپذیریهای Node.js.
روشهای مبتنی بر تحلیل برنامه در کمک به شناسایی انواع آسیبپذیریهای فردی مانند نقصهای تزریق کد در جاوا اسکریپت مفید بودهاند. به گفته محققان، اما نمیتوان آنها را برای شناسایی انواع آسیبپذیریهایی که ممکن است در پلتفرم Node.js وجود داشته باشد، گسترش داد. به طور مشابه، روشهای تحلیل کد مبتنی بر گراف – که در آن کد ابتدا به صورت نمودار نمایش داده میشود و سپس برای خطاهای کدنویسی خاص پرس و جو میشود – در محیطهایی مانند C++ و PHP به خوبی کار میکنند. با این حال، آنها خاطرنشان کردند، رویکردهای مبتنی بر نمودار در استخراج آسیبپذیریهای جاوا اسکریپت به دلیل استفاده گسترده زبان برنامهنویسی از ویژگیهای پویا، کارآمد نیستند.
یک رویکرد جدید برای یافتن آسیبپذیریهای جاوا اسکریپت
بنابراین، محققان در عوض آنچه را که به عنوان توصیف کردند، توسعه دادند یک روش جدید و بهتر به نام نمودار وابستگی شی (ODG) که می تواند برای شناسایی آسیب پذیری های Node.js استفاده شود. آنها گفتند که آنها ODGen را برای تولید "ODG" برای برنامه های Node.js برای شناسایی آسیب پذیری ها پیاده سازی کردند.
کائو، استادیار علوم کامپیوتر در دانشگاه جانز هاپکینز و یکی از نویسندگان گزارش تحقیق، از چند قیاس برای توصیف تحلیل کد مبتنی بر گراف به طور کلی و نمودار وابستگی هدف پیشنهادی آنها استفاده می کند. کائو میگوید: «اگر آسیبپذیری را بهعنوان یک الگوی خاص در نظر بگیریم - مثلاً یک گره سبز که با یک گره قرمز و سپس یک گره سیاه وصل شده است - یک ابزار تحلیل کد مبتنی بر نمودار ابتدا برنامهها را به یک گراف با گرهها و لبههای زیاد تبدیل میکند.» . سپس این ابزار به دنبال چنین الگوهایی در نمودار میگردد تا آسیبپذیری را بیابد.
نمودار وابستگی اشیا که محققان پیشنهاد کردهاند، این رویکرد را با نمایش اشیاء جاوا اسکریپت بهعنوان گرهها و افزودن ویژگیهایی - از جمله وابستگیهای بین اشیا - که مختص زبان برنامهنویسی هستند و سپس پرس و جو برای خطاها، اصلاح میکند. کائو نحوه کار این روش را با استفاده از دانههای موجود در یک مشت برنج توضیح میدهد: اگر همه دانهها قبل از جوشاندن یکسان به نظر میرسند، اما پس از جوشاندن دو سایه متفاوت به خود میگیرند - یکی نشان دهنده دانههای خوب و دیگری دانههای بد است - تشخیص و از بین بردن آن آسانتر میشود. دانه های بد کائو می گوید: «تفسیر انتزاعی به نوعی مانند فرآیند جوشیدن است که برنج - یعنی برنامه ها - را به اشیاء رنگی مختلف تبدیل می کند.» بنابراین تشخیص خطاها آسان تر است.
انواع اشکالات
برای اینکه ببینند آیا رویکرد آنها کار می کند، محققان ابتدا ODGen را در برابر نمونه ای از 330 آسیب پذیری گزارش شده قبلی در بسته های Node.js در مخزن نود بسته منیجر (npm) آزمایش کردند. این آزمایش نشان داد که اسکنر 302 مورد از 330 آسیب پذیری را به درستی شناسایی کرده است. محققان با توجه به نرخ دقت نسبتاً بالا، ODGen را در برابر حدود 300,000 بسته جاوا در npm اجرا کردند. این اسکنر در مجموع 2,964 آسیب پذیری احتمالی را در سراسر بسته ها گزارش کرد. محققان 264 مورد از آنها را بررسی کردند - همه آنها به طور میانگین بیش از 1,000 بارگیری در هفته داشتند - و توانستند 180 مورد را به عنوان آسیب پذیری قانونی تایید کنند. 122 مورد از آنها در سطح برنامه، 15 بسته در بستههایی بودند که توسط اپلیکیشنها یا کدهای دیگر وارد میشوند و XNUMX مورد باقی مانده در بستههای غیرمستقیم موجود بودند.
تعداد زیادی (80) از آسیبپذیریهای تایید شده که ODGen شناسایی کرد، جریانهای تزریق فرمان بودند که به مهاجمان اجازه میدهد کد دلخواه را در سطح سیستم عامل از طریق یک برنامه آسیبپذیر اجرا کنند. 24 نقص در پیمودن مسیر بود. 19 دستکاری کد را فعال کرد و XNUMX شامل نوع خاصی از حمله تزریق فرمان به نام آلودگی نمونه اولیه بود.