
دستهبندی
مجموعه مقالات و مطالب تخصصی در خصوص تحلیل و بررسی فایلهای باینری برای شناسایی آسیبپذیریها و ضعفهای امنیتی.
آسیب پذیریهای تحلیل شده





جدیدترین آزمایشگاه





آخرین مسابقات


آخرین مقالات

زمانبندی مؤثر بذر (Seed)، در فازینگ پروتکل شبکه، نقش مهمی در بهبود کارایی آزمایش ایفا میکند. روشهای سنتی زمانبندی بذر مبتنی بر حالت (وضعیت) در فازینگ پروتکل شبکه اغلب با انتخاب بذر نامتوازن، استراتژیهای زمانبندی یکپارچه و تخصیص توان ناکارآمد محدود میشوند. برای غلبه بر این محدودیتها، ما SCFuzz را پیشنهاد میکنیم، به طور خاص با استفاده از یک مدل باندیت چنداهرمـی (Multi-Armed Bandit Model) برای ایجاد تعادل پویا بین

این مقاله به بررسی ادغام تکنیکهای اجرای نمادین (Symbolic Execution) و فازینگ (Fuzzing) برای افزایش تشخیص آسیبپذیریهای نرمافزاری میپردازد. با افزایش پیچیدگی سیستمهای نرمافزاری و تهدیدات امنیتی مرتبط، روشهای سنتی اغلب در کشف آسیبپذیریهای عمیق، ناکارآمد هستند. این مطالعه با ترکیب دامنه وسیع آزمایش فازینگ توسط ابزارهایی مانند LibFuzzer، با تحلیل مسیر دقیق اجرای نمادین از طریق ابزارهایی مانند KLEE، قصد دارد رویکردی قویتر برای تشخیص آسیبپذیری ایجاد کند. این

ماشین مجازی نمادین[1] KLEE بر فراز زیرساخت گردآورنده LLVM ساخته شده[2] است و در حال حاضر دو بخش اصلی وجود دارد: هسته موتور ماشین مجازی نمادین که مسئول اجرای ماژول های بیتکد[3] LLVM با پشتیبانی از مقدارهای نمادین است. این بخش از کدهای موجود در مسیر lib تشکیل شده است. لایه شبیه سازی[4] POSIX و لینوکس که برای پشتیبانی از uClibc ساماندهی شده است و پشتیبانی بیشتری برای نمادین کردن

این مقاله به اجرای نمادین (Symbolic Execution) برنامهها می پردازد. به جای آنکه ورودی های معمولی یک برنامه (مانند اعداد) ارائه شود، از نمادهایی استفاده می شود که مقادیر دلخواه را نمایندگی می کنند. اجرای برنامه همانند اجرای معمولی ادامه می یابد، با این تفاوت که مقادیر می توانند فرمولهای نمادین بر پایه این نمادها باشند. مسائل پیچیده و در عین حال جالب، عمدتاً در هنگام اجرای نمادین دستورات شرطی و انشعابی به وجود می آیند.

LibFuzzer یک موتور فازینگ (Fuzzing) درونفرآیندی مبتنی بر پوشش کد (Code coverage) و با رویکرد تکاملی است. LibFuzzer همراه با کتابخانهای که قرار است مورد آزمایش قرار گیرد، لینک میشود و ورودیهای فازشده (fuzzed inputs) را از طریق یک نقطهی ورود مشخص برای فازینگ (که به آن «تابع هدف» یا target function نیز گفته میشود) به کتابخانه ارسال میکند. فازر سپس مسیرهای طیشده در کد را ردیابی کرده و با

17. آشنایی با SanitizerStats سنیتایزرها (sanitizer) از يك مكانيزم ساده براي جمعآوري آمار پروفايلينگ (profiling statistics) پشتيباني ميكنند تا درک هزينهها و سربار (overhead) مرتبط با استفاده از سنیتایزرها (sanitizer) را تسهيل كنند. 17.1 نحوه ساخت و اجرا (How to build and run) در حال حاضر SanitizerStats تنها با Control Flow Integrity (CFI)[1] قابل استفاده است. علاوه بر -fsanitize=cfi*، بايد -fsanitize-stats نيز اضافه شود. اين كار باعث ميشود برنامه

12. آشنایی با DataFlowSanitizer (معروف به dfsan) DataFlowSanitizer يک سامانه تحليل پوياي گردش داده (dynamic data flow analysis) به صورت عمومي است. بر خلاف ساير ابزارهاي سنیتایزر (Sanitizer)، اين ابزار براي شناسايي يک رده مشخص از خطاها به صورت مستقل طراحي نشده است. در عوض، يک چارچوب عمومي تحليل پوياي گردش داده فراهم ميکند تا توسط برنامه نويسان به عنوان client مورد استفاده قرار گيرد و به آنان امکان دهد

1. مقدمه (Introduction) واژه «سنیتایزر» (Sanitizer) در زبان انگلیسی به معنای ضدعفونیکننده یا پاککننده است، اما در حوزه علوم کامپیوتر—بهویژه در اکوسیستمهای LLVM و Clang—معنایی کاملاً تخصصی و متفاوت دارد. در این زمینه، سنیتایزر به ابزاری گفته میشود که برای تشخیص خطاهای زمان اجرا از طریق ابزارگذاری (Instrumentation) به کار میرود. به بیان دقیقتر، Code Sanitizer ابزاری است که با تزریق کدهای نظارتی در مرحله کامپایل، رفتار برنامه را در

۱. مقدمهای بر فازینگ (An Introduction to Fuzzing) فازینگ (Fuzzing) یکی از مؤثرترین روشهای خودکار برای شناسایی باگها (Bug) و آسیبپذیریهای نرمافزاری است که با تولید و ارسال ورودیهای تصادفی، نیمهتصادفی یا ساختیافته، رفتار برنامه را در شرایط غیرعادی مورد بررسی قرار میدهد. هدف اصلی این تکنیک، وادار کردن نرمافزار به پردازش دادههای غیرمنتظره و تحلیل واکنش آن در برابر این ورودیها است تا خطاهایی مانند کرش (Crash)، نشت حافظه

چکیده – نرمافزارهای مدرن اغلب ورودیهایی با دستور زبانهای (grammars) بسیار پیچیده را میپذیرند. برای انجام فازینگ جعبه خاکستری (greybox fuzzing) و کشف باگهای امنیتی (security bugs) در چنین نرمافزارهایی، تولید ورودیهایی که با دستور زبان ورودی نرمافزار مطابقت داشته باشند، ضروری است. با این حال، این یک کار چالشبرانگیز شناخته شده است زیرا نیاز به درک عمیقی از گرامر دارد که اغلب در دسترس نیست و استنباط آن دشوار

زمانبندی مؤثر بذر (Seed)، در فازینگ پروتکل شبکه، نقش مهمی در بهبود کارایی آزمایش ایفا میکند. روشهای سنتی زمانبندی بذر مبتنی بر حالت (وضعیت) در فازینگ پروتکل شبکه اغلب با انتخاب بذر نامتوازن، استراتژیهای زمانبندی یکپارچه و تخصیص توان ناکارآمد محدود میشوند. برای غلبه بر این محدودیتها، ما SCFuzz را پیشنهاد میکنیم، به طور خاص با استفاده از یک مدل باندیت چنداهرمـی (Multi-Armed Bandit Model) برای ایجاد تعادل پویا بین

این مقاله به بررسی ادغام تکنیکهای اجرای نمادین (Symbolic Execution) و فازینگ (Fuzzing) برای افزایش تشخیص آسیبپذیریهای نرمافزاری میپردازد. با افزایش پیچیدگی سیستمهای نرمافزاری و تهدیدات امنیتی مرتبط، روشهای سنتی اغلب در کشف آسیبپذیریهای عمیق، ناکارآمد هستند. این مطالعه با ترکیب دامنه وسیع آزمایش فازینگ توسط ابزارهایی مانند LibFuzzer، با تحلیل مسیر دقیق اجرای نمادین از طریق ابزارهایی مانند KLEE، قصد دارد رویکردی قویتر برای تشخیص آسیبپذیری ایجاد کند. این

ماشین مجازی نمادین[1] KLEE بر فراز زیرساخت گردآورنده LLVM ساخته شده[2] است و در حال حاضر دو بخش اصلی وجود دارد: هسته موتور ماشین مجازی نمادین که مسئول اجرای ماژول های بیتکد[3] LLVM با پشتیبانی از مقدارهای نمادین است. این بخش از کدهای موجود در مسیر lib تشکیل شده است. لایه شبیه سازی[4] POSIX و لینوکس که برای پشتیبانی از uClibc ساماندهی شده است و پشتیبانی بیشتری برای نمادین کردن

این مقاله به اجرای نمادین (Symbolic Execution) برنامهها می پردازد. به جای آنکه ورودی های معمولی یک برنامه (مانند اعداد) ارائه شود، از نمادهایی استفاده می شود که مقادیر دلخواه را نمایندگی می کنند. اجرای برنامه همانند اجرای معمولی ادامه می یابد، با این تفاوت که مقادیر می توانند فرمولهای نمادین بر پایه این نمادها باشند. مسائل پیچیده و در عین حال جالب، عمدتاً در هنگام اجرای نمادین دستورات شرطی و انشعابی به وجود می آیند.

LibFuzzer یک موتور فازینگ (Fuzzing) درونفرآیندی مبتنی بر پوشش کد (Code coverage) و با رویکرد تکاملی است. LibFuzzer همراه با کتابخانهای که قرار است مورد آزمایش قرار گیرد، لینک میشود و ورودیهای فازشده (fuzzed inputs) را از طریق یک نقطهی ورود مشخص برای فازینگ (که به آن «تابع هدف» یا target function نیز گفته میشود) به کتابخانه ارسال میکند. فازر سپس مسیرهای طیشده در کد را ردیابی کرده و با

17. آشنایی با SanitizerStats سنیتایزرها (sanitizer) از يك مكانيزم ساده براي جمعآوري آمار پروفايلينگ (profiling statistics) پشتيباني ميكنند تا درک هزينهها و سربار (overhead) مرتبط با استفاده از سنیتایزرها (sanitizer) را تسهيل كنند. 17.1 نحوه ساخت و اجرا (How to build and run) در حال حاضر SanitizerStats تنها با Control Flow Integrity (CFI)[1] قابل استفاده است. علاوه بر -fsanitize=cfi*، بايد -fsanitize-stats نيز اضافه شود. اين كار باعث ميشود برنامه

12. آشنایی با DataFlowSanitizer (معروف به dfsan) DataFlowSanitizer يک سامانه تحليل پوياي گردش داده (dynamic data flow analysis) به صورت عمومي است. بر خلاف ساير ابزارهاي سنیتایزر (Sanitizer)، اين ابزار براي شناسايي يک رده مشخص از خطاها به صورت مستقل طراحي نشده است. در عوض، يک چارچوب عمومي تحليل پوياي گردش داده فراهم ميکند تا توسط برنامه نويسان به عنوان client مورد استفاده قرار گيرد و به آنان امکان دهد

1. مقدمه (Introduction) واژه «سنیتایزر» (Sanitizer) در زبان انگلیسی به معنای ضدعفونیکننده یا پاککننده است، اما در حوزه علوم کامپیوتر—بهویژه در اکوسیستمهای LLVM و Clang—معنایی کاملاً تخصصی و متفاوت دارد. در این زمینه، سنیتایزر به ابزاری گفته میشود که برای تشخیص خطاهای زمان اجرا از طریق ابزارگذاری (Instrumentation) به کار میرود. به بیان دقیقتر، Code Sanitizer ابزاری است که با تزریق کدهای نظارتی در مرحله کامپایل، رفتار برنامه را در

۱. مقدمهای بر فازینگ (An Introduction to Fuzzing) فازینگ (Fuzzing) یکی از مؤثرترین روشهای خودکار برای شناسایی باگها (Bug) و آسیبپذیریهای نرمافزاری است که با تولید و ارسال ورودیهای تصادفی، نیمهتصادفی یا ساختیافته، رفتار برنامه را در شرایط غیرعادی مورد بررسی قرار میدهد. هدف اصلی این تکنیک، وادار کردن نرمافزار به پردازش دادههای غیرمنتظره و تحلیل واکنش آن در برابر این ورودیها است تا خطاهایی مانند کرش (Crash)، نشت حافظه

چکیده – نرمافزارهای مدرن اغلب ورودیهایی با دستور زبانهای (grammars) بسیار پیچیده را میپذیرند. برای انجام فازینگ جعبه خاکستری (greybox fuzzing) و کشف باگهای امنیتی (security bugs) در چنین نرمافزارهایی، تولید ورودیهایی که با دستور زبان ورودی نرمافزار مطابقت داشته باشند، ضروری است. با این حال، این یک کار چالشبرانگیز شناخته شده است زیرا نیاز به درک عمیقی از گرامر دارد که اغلب در دسترس نیست و استنباط آن دشوار