مقدمه

Radamsa معمولا برای تست اینکه برنامه ها با ورودیهای مخرب چگونه کار می کنند استفاده می شود. این کار را با ورودیهای معتبر و خروجی آنها انجام می‌دهد و باگ‌های برنامه را پیدا می‌کند.

Fuzzing چیست؟

برنامه ریزی سخت است همه برنامه ها دارای اشکالاتی در آنها هستند. علاوه بر این، حتی ساده ترین اشتباهات معمول در بعضی از زبان های برنامه نویسی برای attacker ها کافی است تا به قدرت دست یابند.

Fuzzing یکی از تکنیک های برای پیدا کردن چنین رفتار غیر منتظره از برنامه است. این یک ایده ساده است که برنامه را به انواع مختلف ورودی ها بسپارد و ببینید چه اتفاقی می افتد. در این فرایند دو بخش وجود دارد: گرفتن انواع ورودی ها و چگونگی دیدن آنچه اتفاق می افتد. Radamsa یک راه حل است.

آنچه که لازم است:

Supported operating systems:

GNU/Linux
OpenBSD
FreeBSD
Mac OS X
Windows (using Cygwin)
Software requirements for building from sources:

gcc / clang
make
git

برای نصب git :

Sudo apt-get install git

و برای نصب gcc :

Sudo apt-get install gcc make git wget

و برای نصب radamsa :

Git clone https://github .com/aoh/radamsa.git

وارد دایرکتوری radamsa میشویم:

Cd radamsa

و سپس:

Sudo make

نصب:

Sudo make install

نکته: رادامسا فقط یک فایل باینری است که هیچ وابستگی خارجی ندارد. شما می توانید آن را به جایی که می خواهید ببرید و بقیه را حذف کنید.
حالا اگر به home مراجعه کنید فایل رادامسا را خواهید دید.

Fuzzing با Radamsa

برای تولید بیش از یک خروجی در یک زمان استفاده می شود و به عنوان یک سرور یا سرویس گیرنده TCP عمل می کند، در صورتی که چنین مواردی مورد نیاز است.
برای مثال :

Echo “aaa” | radamsa
aaaa

دراینجا رادامسا انتخاب کرد که یک a به ورودی اضافه کند.
اگرهربار همین ورودی را انتخاب کنیم نتایج مختلفی خواهیم دید:
مثلا

:aaa

یک راه ساده برای پیدا کردن این است که آیا چیزی بد برای یک برنامه (ساده یک رشته) اتفاق افتاده است تا بررسی کنید آیا مقدار خروج از ۱۲۷ بیشتر است یا خیر. این را می توان به عنوان مثال به شرح زیر انجام می شود:

$ gzip -c /bin/bash > sample.gz
$ while true
do
radamsa sample.gz > fuzzed.gz
gzip -dc fuzzed.gz > /dev/null
test $? -gt 127 && break
done

این کار تا زمانی طول می کشد کهgzip crash شود که خوشبختانه معمولا اتفاق نمی افتد. و Fuzzed.gzمی‌تواند برا چک کردن متوقف شدن ایسکریپت استفاده شود.
ازدیگر کاربردهای Radamsa در فایلهای Html است که فرمان زیر فایلهای Html را به عنوان ورودی می گیرد و بی نهایت فایلهای html بدریخت تولید می‌کند.

$radamsa -o gen_htmls/test_browser_%n.html -n inf -r ../poc_html_files/*.html -M –

-o specify where to write the modified data.
%n represents test case number
-n how many outputs to generate based on the sample(s). -1 or inf generates infinite output
-M – write metadata about generated data to given path, – indicates stdout

دستورالعمل زیر، پورت ۸۰۸۰ را باز می کند و در صورتی که دستگاه چنداتصالی باشد، به تمام آدرس های آی پی می رسد.
هنگامی که یک سرویس دهنده به ۸۰۸۰ متصل می شود، radamsa فایل های مخرب را فراهم می کند.

$radamsa -o :8080 -r gen_htmls/

هم چنین می توانیم از NodeFuzz برای سرورهای مخرب html استفاده کنیم اما فقط اجازه ذکر یک فایل راداریم. پس مطمئن نیستیم که هنگامی که به یک کلاینت وصل میشویم با تمام فایلهای مخرب یکی پس از دیگری پاسخ دهیم:

$ node nodefuzz.js

تست کردن روی یک برنامه

برای تست روی یک apk می توان از سایتی مانند www.apkmirror.com apk برنامه مورد نظررا دانلود کنید.
دراینجا از برنامه تلگرام استفاده شده است.
پس از دانلود apk راداخل پوشه‌ای به نام تست قرارده‌ایم:

وارد دایرکتوری رادامسا شده و بااستفاده از دستورات زیر fuzz را انجام میدهیم:

Cd radamsa

وارد دایرکتوری Test می‌شویم:

Cd test

سپس:

Radamsa -o fuzzed_telegram.apk %n -n 50 telegram.apk

نتیجه: ۵۰ فایل به صورت زیر داریم:

که محتوای هر کدام به صورت زیر است:

و یا با استفاده از دستور زیر:

Radamsa -o fuzzed_telegram_2.apk telegram.apk

یک فایل فاز شده به صورت رندوم با نام telegram_2.apk ایجاد می شود:


دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

14 − 5 =