کلیه حقوق مطالب متعلق به Vulnerlab است. بازنشر با ذکر منبع مجاز است.

دسته‌بندی

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

The general workflow of SCGF.

زمان‌بندی چندمرحله‌ای بذرهای مبتنی بر یادگیری تقویتی برای فازینگ پروتکل‌های شبکه

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

مطالعه مقاله
Detecting Software Vulnerability with Symbolic Execution and Fuzzing

شناسایی آسیب پذیری‌های نرم افزاری توسط فازینگ و اجرای نمادین

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

مطالعه مقاله
Symbolic Execution - اجرای نمادین - KLEE

راه اندازی آزمایشگاه Symbolic Exection توسط klee

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

مطالعه مقاله
Symbolic Execution and Program Testing

اجرای نمادین و آزمون برنامه‌ها

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

مطالعه مقاله
فازینگ

راه اندازی آزمایشگاه فازینگ libfuzzer

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

مطالعه مقاله
Sanitizer - سنی تایزر

بررسی سنی‌تایزرهای LLVM – بخش سوم

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

مطالعه مقاله
Sanitizer - سنی تایزر

بررسی سنی‌تایزرهای LLVM – بخش دوم

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

مطالعه مقاله
Sanitizer - سنی تایزر

بررسی سنی‌تایزرهای LLVM – بخش اول

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

مطالعه مقاله
AFL - فازینگ - Fuzzing

فازر ++AFL

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

مطالعه مقاله
vulnerlab - والنرلب - فازینگ جامع و مقرون‌به‌صرفه آگاه از دستور زبان

تسهیل فازینگ جامع و مقرون‌به‌صرفه آگاه از دستور زبان با بهره‌گیری از مدل‌های زبانی بزرگ

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

مطالعه مقاله
The general workflow of SCGF.

زمان‌بندی چندمرحله‌ای بذرهای مبتنی بر یادگیری تقویتی برای فازینگ پروتکل‌های شبکه

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

مطالعه مقاله
Detecting Software Vulnerability with Symbolic Execution and Fuzzing

شناسایی آسیب پذیری‌های نرم افزاری توسط فازینگ و اجرای نمادین

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

مطالعه مقاله
Symbolic Execution - اجرای نمادین - KLEE

راه اندازی آزمایشگاه Symbolic Exection توسط klee

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

مطالعه مقاله
Symbolic Execution and Program Testing

اجرای نمادین و آزمون برنامه‌ها

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

مطالعه مقاله
فازینگ

راه اندازی آزمایشگاه فازینگ libfuzzer

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

مطالعه مقاله
Sanitizer - سنی تایزر

بررسی سنی‌تایزرهای LLVM – بخش سوم

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

مطالعه مقاله
Sanitizer - سنی تایزر

بررسی سنی‌تایزرهای LLVM – بخش دوم

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

مطالعه مقاله
Sanitizer - سنی تایزر

بررسی سنی‌تایزرهای LLVM – بخش اول

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

مطالعه مقاله
AFL - فازینگ - Fuzzing

فازر ++AFL

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

مطالعه مقاله
vulnerlab - والنرلب - فازینگ جامع و مقرون‌به‌صرفه آگاه از دستور زبان

تسهیل فازینگ جامع و مقرون‌به‌صرفه آگاه از دستور زبان با بهره‌گیری از مدل‌های زبانی بزرگ

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

مطالعه مقاله
wpChatIcon
wpChatIcon