TL;DR
- اسکن کد GitHub اکنون از یادگیری ماشینی (ML) برای هشدار به توسعه دهندگان در مورد آسیب پذیریهای.
- امنیتی احتمالی در کدشان استفاده میکند.
- اگر میخواهید مخازن خود را راهاندازی کنید تا هشدارهای بیشتری را با استفاده از فناوری جدید ML ما.
چه اتفاقی افتاد
اسکن کد GitHub اکنون از یادگیری ماشینی (ML) برای هشدار به توسعه دهندگان در مورد آسیب پذیریهای. امنیتی احتمالی در کدشان استفاده میکند.
اگر میخواهید مخازن خود را راهاندازی کنید تا هشدارهای بیشتری را با استفاده از فناوری جدید ML ما. ارائه دهند،.
از اینجا شروع کنید. برای نگاهی به پشت صحنه چارچوب ML که این فناوری جدید را تقویت میکند، در ادامه بخوانید!
شناسایی کدهای آسیبپذیر آسیبپذیریهای امنیتی کد میتواند به عوامل مخرب اجازه دهد تا نرمافزار را دستکاری کنند تا. به روشهای ناخواسته و مضر رفتار کنند.
بهترین راه برای جلوگیری از چنین حملاتی این است که کدهای آسیب پذیر را قبل از سوء استفاده. شناسایی و اصلاح کنید.
قابلیتهای اسکن کد GitHub از موتور تحلیل CodeQL برای یافتن آسیبپذیریهای امنیتی در کد منبع و هشدارهای سطحی. در درخواستهای کشش استفاده میکند - قبل از اینکه کد آسیبپذیر ادغام و منتشر شود.
برای شناسایی آسیبپذیریها در یک مخزن،. موتور CodeQL ابتدا پایگاه دادهای ایجاد میکند که یک کد ویژه را کدگذاری میکند.
نمایش رابطهای کد سپس در آن پایگاه داده میتوانیم یک سری کوئریهای CodeQL را اجرا. کنیم که هر کدام برای یافتن نوع خاصی از مشکل امنیتی طراحی شده اند.
بسیاری از آسیبپذیریها توسط یک الگوی تکراری ایجاد میشوند:. دادههای کاربر نامعتبر پاکسازی نمیشوند و متعاقباً بهطور تصادفی به روشی ناامن استفاده میشوند.
بهعنوان مثال،. تزریق SQL با استفاده از دادههای کاربر نامعتبر در یک پرس و جوی SQL ایجاد میشود.
و اسکریپت نویسی بین سایتی در نتیجه نوشتن دادههای کاربر نامعتبر در یک صفحه وب رخ می. دهد.
برای شناسایی موقعیتهایی که در آن دادههای کاربر ناامن به مکانی خطرناک ختم میشوند،. کوئریهای CodeQL دانش تعداد زیادی از منابع بالقوه دادههای کاربر (بهعنوان مثال،.
چارچوبهای وب)،. و همچنین مخزنهای بالقوه خطرناک (مانند کتابخانههایی برای اجرای پرسوجوهای SQL) را در بر میگیرد.
اعضای جامعه امنیتی،. در کنار کارشناسان امنیتی در GitHub،.
بهطور مداوم این موارد را توسعه و بهبود میبخشند پرس و جوهایی برای مدل سازی کتابخانههای. رایج اضافی و الگوهای شناخته شده.
با این حال،. مدلسازی دستی میتواند زمانبر باشد و همیشه مجموعهای از کتابخانههای کمتر رایج و کدهای خصوصی وجود خواهد داشت.
که نمیتوانیم به صورت دستی مدلسازی کنیم. اینجاست که یادگیری ماشین وارد میشود.
ما از نمونههای ارائه شده توسط مدلهای دستی برای آموزش شبکههای عصبی یادگیری عمیق استفاده میکنیم که میتوانند. تعیین کنند آیا یک قطعه کد دارای یک سینک بالقوه خطرناک است یا خیر.
در نتیجه،. میتوانیم آسیبپذیریهای امنیتی را حتی زمانی که ناشی از استفاده از کتابخانهای است که قبلاً ندیده ایم،.
کشف کنیم. بهعنوان مثال،.
ما میتوانیم آسیب پذیریهای تزریق SQL را در زمینه کتابخانههای انتزاعی پایگاه داده کمتر شناخته. شده یا منبع بسته شناسایی کنیم.
پرس و جوهای مبتنی بر ML هشدارهایی را تولید میکنند که با برچسب "تجربی" مشخص شده اند. ساخت مجموعه آموزشی ما باید مدلهای ML را آموزش دهیم تا کدهای آسیب پذیر را تشخیص دهند.
در حالی که ما برخی از آنها را آزمایش کرده ایم یادگیری بدون نظارت،. جای تعجب نیست که ما دریافتیم که یادگیری تحت نظارت بهتر عمل میکند.
اما هزینه دارد! درخواست از کارشناسان امنیت کد برای برچسبگذاری دستی میلیونها قطعه کد بهعنوان ایمن یا آسیبپذیر به وضوح غیرقابل.
دفاع است. پس دادهها را از کجا بیاوریم؟
پرس و جوهای CodeQL که به صورت دستی نوشته شده اند،. قبلاً تخصص بسیاری از کارشناسان امنیتی را که آنها را نوشته و اصلاح کرده اند،.
تجسم میدهند. ما از این پرس و جوهای دستی بهعنوان اوراکلهای حقیقت پایه استفاده میکنیم تا نمونههایی.
را که سپس برای آموزش مدلهای خود استفاده میکنیم،. برچسب گذاری کنیم.
هر سینک شناسایی شده توسط چنین پرسشی بهعنوان یک مثال مثبت در مجموعه آموزشی عمل میکند. از آنجایی که اکثریت قریب به اتفاق کدها حاوی آسیبپذیری نیستند،.
قطعههایی که توسط مدلهای دستی شناسایی نشدهاند،. میتوانند بهعنوان نمونههای منفی در نظر گرفته شوند.
ما صدای ذاتی در این برچسبگذاری استنباط شده را با حجم جبران میکنیم. ما دهها میلیون قطعه را از بیش از صد هزار مخزن عمومیاستخراج میکنیم،.
آن را اجرا میکنیم CodeQL روی آنها پرس و جو میکند و هر کدام را بهعنوان مثال. مثبت یا منفی برای هر پرس و جو برچسب گذاری کنید.
این مجموعه آموزشی برای یک مدل یادگیری ماشینی میشود که میتواند قطعه کد را بهعنوان آسیب. پذیر یا غیر آسیب پذیر طبقه بندی کند.
البته، ما نمیخواهیم مدلی را آموزش دهیم که به سادگی مدل سازی دستی را بازتولید کند. ما میخواهیم مدلی را آموزش دهیم که آسیبپذیریهای جدیدی را که با مدلسازی دستی کشف نشدهاند، پیشبینی کند.
در واقع،. ما میخواهیم الگوریتم ML در نسخه فعلی پرس و جو دستی به همان روشی که نسخه فعلی.
در نسخههای قدیمیتر و کمتر جامع بهبود مییابد،. بهبود یابد.
برای اینکه ببینیم آیا میتوانیم این کار را انجام دهیم،. در واقع تمام دادههای آموزشی خود را از یک نسخه قدیمیتر کوئری میسازیم که آسیبپذیریهای کمتری را شناسایی.
میکند. سپس مدل آموزش دیده را در مخازن جدیدی که روی آن آموزش ندیده اعمال میکنیم.
ما اندازهگیری میکنیم که چگونه هشدارهایی را که توسط آخرین جستار دستی شناسایی شده،. اما قدیمیتر از دست دادهاند،.
بازیابی میکنیم نسخه پرس و جو این به ما امکان میدهد توانایی یک مدل آموزش دیده با. نسخه فعلی پرس و جو را برای بازیابی هشدارهای از دست رفته توسط این مدل دستی فعلی شبیه.
سازی کنیم. ویژگیها و مدلسازی با توجه به مجموعه آموزشی بزرگی از تکههای کد که بهعنوان مثالهای مثبت یا منفی.
برای هر پرس و جو برچسبگذاری شدهاند،. ویژگیهایی را برای هر قطعه استخراج میکنیم و یک مدل یادگیری عمیق را برای طبقهبندی نمونههای جدید آموزش.
میدهیم. بهجای اینکه هر قطعه کد را صرفاً بهعنوان رشتهای از کلمات یا کاراکترها در نظر بگیریم و از.
تکنیکهای پردازش زبان طبیعی استاندارد (NLP) سادهلوحانه برای طبقهبندی این رشتهها استفاده کنیم،. از قدرت CodeQL برای دسترسی به انبوهی از اطلاعات در مورد کد منبع اصلی استفاده میکنیم.
ما از این اطلاعات برای تولید مجموعهای غنی از ویژگیهای بسیار آموزنده برای هر قطعه کد. استفاده میکنیم.
یکی از مزیتهای اصلی مدلهای یادگیری عمیق،. توانایی آنها در ترکیب اطلاعات از مجموعه بزرگی از ویژگیها برای ایجاد ویژگیهای سطح بالاتر و کشف الگوهایی.
است که برای انسانها آشکار نیست. در همکاری با کارشناسان امنیت و زبان برنامهنویسی در GitHub،.
ما از CodeQL استفاده میکنیم اطلاعاتی را که متخصص ممکن است برای تصمیمگیری بررسی کند،. استخراج کنید،.
مانند کل بدنه تابع محصور برای قطعهای که در داخل یک تابع قرار دارد،. یا مسیر دسترسی و نام API.
با این حال،. ما مجبور نیستیم خود را به ویژگیهایی محدود کنیم که یک انسان آموزنده مییابد.
میتوانیم ویژگیهایی را که سودمندی آنها ناشناخته است،. یا ویژگیهایی که میتوانند در برخی موارد مفید باشند،.
اما نه همه،. اضافه کنیم،.
مانند نمایه آرگومان برای یک قطعه کد که آرگومان یک تابع است. چنین ویژگیهایی ممکن است حاوی الگوهایی باشد که برای انسان آشکار نیست،.
اما شبکه عصبی میتواند آنها را تشخیص دهد. بنابراین،.
ما به مدل یادگیری ماشین اجازه میدهیم تصمیم بگیرد که آیا یا چگونه از همه این ویژگی. ها استفاده کند و چگونه آنها را برای گرفتن بهترین تصمیم برای هر قطعه ترکیب کند.
هنگامیکه مجموعهای غنی از ویژگیهای بالقوه جالب را برای هر مثال استخراج کردیم،. آنها را همانطور که معمولاً در برنامههای NLP انجام میشود،.
توکنسازی و زیرتوکنسازی میکنیم،. با برخی تغییرات برای گرفتن ویژگیهای مختص به نحو کد.
ما واژگانی را از دادههای آموزشی ایجاد میکنیم و فهرستهای شاخصها را به واژگان به یک طبقهبندی یادگیری. عمیق نسبتاً ساده وارد میکنیم،.
با چند لایه پردازش ویژگی به ویژگی و به دنبال آن الحاق بین ویژگیها و چند لایه پردازش. ترکیبی.
خروجی احتمال این است که نمونه فعلی یک آسیب پذیری برای هر نوع پرس و جو باشد. با توجه به مقیاس برچسبگذاری دادههای آفلاین،.
استخراج ویژگی و خطوط لوله آموزشی،. ما از محاسبات ابری،.
از جمله پردازندههای گرافیکی برای آموزش مدل استفاده میکنیم. با این حال، در زمان استنتاج، نیازی به GPU نیست.
استنتاج در یک مخزن هنگامیکه مدل یادگیری ماشینی آموزش دیده خود را داشته باشیم،. از آن استفاده میکنیم قطعات کد جدید را طبقه بندی کرده و آسیب پذیریهای احتمالی را.
برای هر پرس و جو شناسایی کنید. هنگامیکه هشدارهای تولید شده توسط ML توسط صاحبان مخزن فعال میشوند،.
CodeQL ویژگیهای کد منبع را برای تکههای کد در آن پایگاه کد محاسبه میکند و. آنها را به مدل طبقه بندی کننده تغذیه میکند.
این فریم ورک این احتمال را که یک قطعه کد معین نشان دهنده یک آسیبپذیری است،. برمیگرداند و از این احتمال برای نمایش هشدارهای احتمالی جدید استفاده میکند.
فرآیند کامل روی همان اجراکنندههای استاندارد GitHub Action اجرا میشود که بهطور کلی با اسکن کد مورد استفاده. قرار میگیرند،.
و غیر از افزایش زمان اجرا در مخازن بزرگ،. برای کاربر شفاف است.
هنگامیکه اسکن کد کامل شد،. کاربران میتوانند هشدارهای تولید شده توسط ML را به همراه هشدارهای نمایش داده شده توسط جستجوهای دستی مشاهده.
کنند،. با برچسب "تجربی" به آنها اجازه میدهد تا هشدارهای تولید شده توسط ML را در داخل یا خارج.
فیلتر کنند. آیا کار میکند؟
هنگام ارزیابی هشدارهای تولید شده توسط ML،. فقط هشدارهای جدیدی را در نظر میگیریم که توسط جستارهای دستی علامت گذاری نشده اند.
نکات مثبت واقعی، هشدارهای صحیحی هستند که در جستارهای دستی از دست رفته اند. موارد مثبت کاذب، هشدارهای جدید نادرست تولید شده توسط مدل ML هستند.
برای اندازهگیری معیارها در مقیاس،. از تنظیمات آزمایشی شرح داده شده در بالا استفاده میکنیم،.
که در آن ی مجموعه آموزشی با استفاده از نسخه قدیمیتر هر پرسش دستی تعیین میشوند. سپس مدل را روی آن تست میکنیم مخازنی که در مجموعه آموزشی گنجانده نشده اند،.
و ما توانایی آن را برای بازیابی هشدارهایی که توسط جستار دستی فعلی شناسایی شده اما توسط پرسش. قدیمیاز دست رفته است،.
اندازهگیری میکنیم. معیارهای ما بر اساس پرس و جو متفاوت است،.
اما بهطور متوسط ما یک فراخوان تقریباً 80 ٪ با دقت تقریباً 60 ٪ اندازهگیری میکنیم. ما در حال حاضر هشدارهای تولید شده توسط ML را به جستارهای امنیتی جاوا اسکریپت و تایپ اسکریپت.
بیشتری تعمیم میدهیم و همچنین برای بهبود عملکرد و زمان اجرا آنها تلاش میکنیم. برنامههای آتی ما شامل گسترش به زبانهای برنامهنویسی بیشتر و همچنین تعمیمهایی است که.
به ما امکان میدهد حتی آسیب پذیریهای بیشتری را ضبط کنیم. اگر میخواهید آسیبپذیریهای امنیتی بالقوه بیشتری را در پایگاه کد خود کشف کنید، عبارت «تجربی» را اجرا کنید.
هرچه جامعه بیشتر با هشدارهای ما درگیر شود و بازخورد ارائه کند،. بهتر میتوانیم الگوریتمهای خود را بسازیم،.
بنابراین لطفاً آنها را امتحان کنید! نوشته شده توسط Tiferet Gazit یک مهندس اصلی یادگیری ماشین در GitHub است که برای امنیت کد،.
کیفیت کد و بهرهوری توسعهدهندگان،. عوامل هوش مصنوعی را میسازد.
او با پیشینهای در بینایی کامپیوتر پزشکی و یادگیری عمیق،. مشتاق توسعه محصولات هوشمندی است که بر زندگی مردم تأثیر میگذارد.
از GitHub بیشتر کاوش کنید اسناد همه چیزهایی که برای تسلط بر GitHub نیاز دارید،. همه در یک مکان.
به Docs بروید GitHub در GitHub آنچه در آینده است بسازید،. مکانی برای هر کسی از هر کجا که بتواند هر چیزی بسازد.
شروع به ساختن کنید داستانهای مشتری با شرکتها و تیمهای مهندسی که با GitHub می. سازند آشنا شوید.
بیشتر بدانید پادکست GitHub پادکست GitHub را دنبال کنید،. نمایشی که به،.
روندها،. داستانها و فرهنگ در داخل و اطراف جامعه توسعه دهندگان منبعباز در GitHub اختصاص دارد.
حالا گوش کن.
چرا مهم است
اهمیت این خبر در این است که روی استفاده واقعی از AI و تصمیمگیری سازمانی اثر میگذارد.
منبع
لینک منبع اصلی در کارت و صفحه مقاله نمایش داده میشود.
