All posts by AHA

قطره ای از دریای بیکران IT

آنالیز ساختار ویندوز و روت کیت های سطح هسته-بخش پایانی

اگر کمی با برنامه نویسی کرنل آشنایی داشته باشید، حتما ساختار DRIVER_OBJECT را به خوبی می شناسید. این ساختار دارای فیلدی به نام MajorFunction است که آرایه ای از نوع PDRIVER_DISPATCH که آدرس روتین های مدیریت IRP دریافتی را در خود نگهداری می کند. IRP ها در wdm.h تعریف گردیده اند، نمیخواهیم وارد مبحث برنامه نویسی سطح کرنل شویم پس بیشتر وارد جزییات نمی شویم. اگر بتوانیم به ساختار DRIVER_OBJECT یک درایور دسترسی پیدا کنیم می توانیم عمل هوک را برای IRP های دریافتی آن انجام دهیم و IRP های آن درایور را مشاهده نماییم. ساده ترین راه برای دسترسی به این ساختار استفاده از تابع IoGetDeviceObjectPointer() است. این تابع آدرس Device Object را به عنوان خروجی بر میگرداند و درواقع Driver Object فیلدی از Device Object است.ساختار Device_Object ها را در تصویر زیر میبینیم:

Device_Object

همانگونه که مشاهده می کنیم فیلد NextDevice به دیوایس بعدی اشاره می کند وقتی درایورها به هم متصل شده اند و یک chain تشکیل دهند می توان مقادیر آن را مشاهده نماییم.  هر DeviceObject دارای DriverObject خودش می باشد که در فیلد DriverObject مشخص گردیده است. برای مشاهده درایورها می توانیم از کامند !object \device\ استفاده نماییم که لیستی از کل آبجکت ها را نشان می دهد. سپس برای نمایش استک از کامند  !devstackمی توانیم استفاده نماییم.

اطلاعات بیشتر

آنالیز ساختار ویندوز و روت کیت های سطح هسته-بخش سوم

در ادامه بحث های مطرح شده در آنالیز ساختار ویندوز و روت کیت های سطح هسته-بخش اول  و همچنین آنالیز ساختار ویندوز و روت کیت های سطح هسته-بخش دوم ادامه بحث را دنبال خواهیم کرد.

یکی دیگر از تکنیک های که روت کیت ها استفاده می نمایند درواقع می توان گفت نسل جدیدتر روت کیت ها، استفاده از تکنیک DKOM[1] نام دارد. در این تکنیک ساختار های کرنل را تغییر میدهیم . ساختارهایی مانند لیست پروسه های فعال ، درایورها.

در این روش هیچگونه هوک و یا تغییری در جداولی مانند SSDT,IDT انجام نمیدهیم. روت کیت ها می توانند با Unlink نمودن یک شی EPROCESS از ActiveProcesLinks خود را پنهان نمایند و پروسه ای را از دید تابع ZwQuerySystemInformation() که برای بدست آوردن لیست پروسه های اجراشده در سیستم استفاده می نماییم پنهان نماید. کرنل از ساختاری به نام KPCR[2] استفاده می کند. در این ساختار اطلاعات مهم و اساسی مانند IDT ، GDT و … ذخیره می شود. برای دسترسی راحتتر به KPCR کرنل آدرس آن را در نسخه های x86 ویندوز درون رجیستر fs و همچنین در ویندوزهای x64 در رجیستر gs ذخیره می کند. KPCR شامل ساختاری است به نام KPRCB[3] است. KPCR مستند شده است ولی KPRCB یک ساختار خصوصی است و تنها در ntoskrnl مورد استفاده قرار می گیرد. این ساختار شامل اطلاعات درباره Scheduling پروسه ها می باشد.

Kernel processor control region

در ساختار _KPRCB فیلدی به نا م CurrentThread وجود دارد که برایمان مهم می باشد همانطور در تصویر زیر می بینیم این فیلد از نوع ساختار _KTHREAD است:

kernel processor control block

برای مشاهده محتوای ساختارهای KPCR و KPRCB می توانیم از دستور های !pcr و !prcb استفاده نماییم، مقدار Current  را به یاد داشته باشید.

pcr-command-windbgاطلاعات بیشتر

آنالیز ساختار ویندوز و روت کیت های سطح هسته-بخش دوم

در ادامه بحث های مطرح شده در آنالیز ساختار ویندوز و روت کیت های سطح هسته-بخش اول  ادامه بحث را دنبال خواهیم کرد.

سطح هسته همانند سطح کاربر دارای هوک های خاص خودش است که معروفترین آن ایجاد تغییرات دلخواه در جداولی است که آدرس توابع مورد نیاز سیستم را در خود نگهداری می کنند:

  • System Service Dispatch Table (SSDT)
  • Interrupt Descriptor Table (IDT)

آدرس توابع سطح کرنل درون جدول SSDT نگهداری می شود(توابع nt*). هنگامیکه روند اجرا یک برنامه سطح کاربر میخواهد به سمت کرنل هدایت شود  ID مرتبط با تابع کرنل درون رجیستر EAX قرار می گیرد و رجیستر EDX به لیست پارامترهای که بایستی به تابع ارجاع داده می شود اشاره می کند، سپس با اجرای دستور int 2e و یا sysenter روند اجرا پروسه به سطح کرنل خواهد رفت.  هنگامیکه وقفه ای رخ می دهد سیستم عامل با جستجو در IDT ، روتین مرتبط با مدیریت آن وقفه را بدست میاورد. این جدول تمامی وقفه ها را درون خود نگهداری می کند. روتین هندل کننده وقفه 0x2e  تابع KiSystemService() از ntoskrnl است. برای بازگشت به سطح کاربر از دستور iret استفاده می شود. در صورتی که از دستور sysenter استفاده شود برای بازگشت به سطح کاربر از دستور sysexit استفاده خواهد شد. برای پشتیبانی از دستور sysenter ویندوز در زمان بوت آدرس روتین مرتبط را بجای IDT در رجیستر  MSR[1]  ذخیره می کند. . اسکریپت زیر را می توانید از این آدرس[2] دریافت نمایید. با دستور زیر در windbg میبینیم که handler این وقفه تابع  KiSystemService() است :

اطلاعات بیشتر

آنالیز ساختار ویندوز و روت کیت های سطح هسته-بخش اول

در این پست و چند پست آتی به نحوه آنالیز و تحلیل Rootkit ها خواهیم پرداخت که پیش نیاز آن، آشنایی با ساختار و تکنیک های مورد استفاده در آنها می باشد. Rootkit ها مختص به یک سیستم عامل و پلتفرم خاص نیستند، در واقع یک اصطلاح می باشد که به دسته خاصی از بدافزارها اشاره می شود. روت کیت هایی برای MS Windows ، Linux ، Cisco IOS و … نوشته شده و می توان نوشت. مایکروسافت درباره روت کیت چنین می گوید که نویسندگان بدافزارها برای پنهان کردن بدافزار از روت کیت ها استفاده می کنند، حال روت کیت بدافزار است یا بخشی از بدافزار و تعریف و تعابیر دیگر از این واژه ، خود را درگیر این قبیل مباحث نخواهیم کرد.

rootkit

Rootkit را می توان به دو بخش root و kit تقسیم کرد تا بهتر به مفهوم آن آشنا شد. سیستم عامل ویندوز به طورکلی به دو سطح تقسیم می شود یعنی Ring0 و Ring3 (به هر سطح Ring گوییم). Ring0 دارای بالاترین سطح دسترسی می باشد که به آن Kernel-mode نیز گفته می شود و همچنین Ring3 دارای کمترین سطح دسترسی که به آن نیز User-mode گوییم.

هر سطح دارای ساختار و ویژگی خاص خود می باشد بنابراین در مبحث دیباگینگ نیز تفاوت هایی وجود دارد. WinDBG دیباگر مایکروسافتی است که می توان در هر دوسطح عمل دیباگ را انجام دهیم ولی نکته قابل توجه کارایی آن است که در Ring3 دیباگر هایی مانند OllyDBG ، ImmunityDBG و… کارایی بهتری را دارا هستند. با توجه به ویژگی های WinDBG ، در دیباگ سطح هسته از آن استفاده می کنیم. راه های دیباگ در windbg را می توان در تصویر زیر مشاهده نمود:

windbg-debug-ways

 

برای دیباگ کرنل به دو صورت Remote و یا Local می توانیم عمل نماییم. Local Debug در سطح هسته بدین معنی است که خود سیستم مان را دیباگ نماییم که در این حالت دارای محدودیت هایی خواهیم بود و کارهایی مانند: توقف در اجرا، قرار دادن نقاط توقف در روند اجرا و امثالهم را نمی توان انجام داد. برای این حالت علاوه بر WinDBG ممکن است به ابزار LiveKD [1]  نیاز شود. در حالت Remote که در واقع بحث اصلی مان خواهد بود، علاوه بر روش های مختلف موجود که محبوبترین آن Serial است با استفاده از ابزار Virtual KD [2]  نیز میتوانید دیباگ را انجام دهید. روش Serial دارای سرعت پایین تری نسبت به Virtual KD می باشد. در حالت Serial سرعتی که داریم   bps  115200 است ولی در Virtual KD  حداکثر سرعت در Virtual Box نیز 450 KB/s  و برای VMware حداکثر 150 KB/s  است. بعد از نصب و راه اندازی Virtual KD در ماشین مجازی براحتی میتوان با استفاده از WinDBG و یا IDA به آن متصل شد و دیباگینگ را انجام دهیم.

اطلاعات بیشتر

چگونه یک متغیر مقداردهی نشده، باگ ایجاد می کند؟

سلامی دوباره، بعد از مدتها استراحت و بی حوصلگی در راستای تجزیه نشدن و همچنین جزیی از طبیعت قرار نگرفتن یه پستی توی بلاگ میزارم تا این پست رو همانند پکت های Keep-Alive در نظر بگیرید.  :دایی

خوب، قرار نیست نحوه اکسپلویت کردن و تکنیک هارو توضیح بدیم فقط میخواهیم کمی درباره خطرات مقداردهی نکردن متغیرها در برنامه و نحوه بوجود آمدن باگ صحبت کنیم، واس خیلی ها از جمله خودم پیش اومده که در زبان C/C++ متغیری مانند Integer رو مقداردهی اولیه انجام ندادیم ، یادمون رفته و یا برحسب عادت در زبان های برنامه نویسی دیگر مثل VB6.0 اینکار رو انجام ندادیم. بنظرم تنها دلیلی که بعضی ها هنوزم که هنوزه طرفدار VB6.0 هستند! همین مقداردهی اولیه نکردن متغیرهاست، اگر شما حتی نوع متغیر رو تعریف نکنین بطور خودکار متغیر از نوع Variant در نظر گرفته میشه و هر DATA Type بخواهید میتونید درون متغیر بریزید!!! اینها انسانهای خاص هستند و خاص هم که فحش نیست !؟

خوب از بحث اصلیمون دور نشیم،اگر استاد همون درس برنامه نویسی و یا افراد دیگری که ازشون این سوال “متغییر مقدار دهی نشده ولی دارای مقدار هست و خروجی به ما نشون میده” رو پرسیدین بهمون گفتن که وقتی یک نوع Integer رو مقدار دهی نمیکنیم ، مقداری  Random درون متغیر ریخته میشه؟!؟ و اینم جز خیلی از حرفاس که وارد مغزمون کردن تا بیشتر ندونیم و نپرسیم. (انگاری دلم خیلی پره :دایی) بایک مثال خیلی ساده و راحت میخواهیم به صحت و سقم این دلیل پی ببریم. خوب سورس زیر رو کامپایل و اجرا میکنیم:

بعد از اجرا مقدار این متغیر رو داریم میبینیم که بایستی این یک مقدار تصادفی باشه و در هر بار اجرا مقداری مختلف ببینید، من درون سیستم خودم فقط این مقدار رو میبینیم و نتیجه میگیرم که مقدار Random نیست:

Ouput

حال برنامه را درون یار همیشه همراهمون باز میکنیم تا دلیل این امر رو کشف کنیم.

debuggingاطلاعات بیشتر

نقش کاراکترهای مخرب در پردازش اکسپلویت و نحوه یافت آنها

اگر کمی با اکسپلویت نویسی و نحوه اکسپلویت کردن برنامه آشنایی داشته باشید بدون شک با مفهوم Bad Char آشنا هستید. Bad Char در اکسپلویت کاراکترهایی را می گویند که از وارد شدن کامل اکسپلویت به درون حافظه جلوگیری می کنند. بعنوان مثال در ورودی برنامه های C/C++ اگر دربین رشته ورودی 0x00 وجود داشته باشد به عنوان انتهای ورودی محسوب می شود و بعد از کاراکتر 0x00 نادیده گرفته می شود، بنابراین Bad Char ها یکی از ضروریات است که بایستی متناسب با هدف، آنها را بدانیم.

سوال : چگونه متناسب با هدف Bad Char ها را بدست آوریم؟؟

جواب : بایستی تمامی کاراکتر های که ممکن است بعنوان Bad Char محسوب گردند را لیست نموده  تا بتوانیم توسط سعی و خطا تک،تک آنهارا بدست آوریم. این لیست در واقع از 0x00 تا 0xFF می باشد.

لیست ایجاد شده را بایستی در اکسپلویت مان بعد از Return Address قرار می دهیم بدین دلیل که Bad Char از بازنویسی Return Address جلوگیری نکند تا بتوانیم درون حافظه چک کنیم که لیست مان تا چه مکانی کپی شده اند و Bad Char چه بوده که باعث جلوگیری از کپی کامل اکسپلویت درون حافظه شده است.

در این مقاله برروی vulnserver که توسط Stephen Bradshaw نوشته شده و یک برنامه آسیب پذیر جهت تست و مثال آموزشی مورد استفاده قرار می گیرد، تست خود را انجام می دهیم.

بعد از اضافه نمودن لیست Bad Char به کدهایمان و ارسال آن به پورت vulnserver اولین راهکار این خواهد بود که بصورت دستی حافظه را چک کنیم تا کاراکتر را بدست آوریم ولی اینکار کمی زمانبر و کسل کننده است. راهکار بعدی استفاده از mona خواهد بود که بهتر از حالت قبل است، پس روند کارمان با استفاده از ابزار mona خواهد بود.

 

اطلاعات بیشتر

امنیت و نحوه کار در شبکه TOR و مسیریابی پیازی [بخش دوم]

درمقاله قبلی به عنوان امنیت و نحوه کار در شبکه TOR و مسیریابی پیازی [بخش اول]  با مفاهیم کلی و نحوه کار شبکه های Tor و دلیل نامگذاری مسیریابی پیازی را فهمیدید.

این شبکه TCP-level است و درواقع UDP کارنخواهد کرد و traceroute و … بی فایده خواهند بود. حال سوال پیش می آید اگر UDP کار نمی کند پس DNS چطور عمل می کند؟ بطور کل Exit Node عمل DNS lookup را انجام می دهد. این شبکه را می توان بصورت Mesh از Onion Router ها دانست و هر روتر با استفاده از SSL/TLS با دیگر روترها در ارتباط است. هر OR دو کلید عمومی دارد : identity key   و onion key.

indexدر لیست دایرکتوری ثبت می شود و Onion key برای اتصال end-user به OR ها مورد استفاده قرار می گیرد. دلیل ایجاد دو کلید عمومی محافظت نمودن Identity key در ارتباط های بلند مدت است .

Entry guard چیست؟ بدین معنی که هر کلاینت TOR بصورت تصادفی چند نود را برای نقاط ورودی ارتباط خود انتخاب می کنند و تنها از این نود ها برای Hop اول استفاده می کنند. اگر C تعدا رله باشد که نفوذگر بر آن کنترل دارد و بطور کل فرض می کنیم که N رله داریم، بنابراین احتمال رخ دادن اینکه رله نقاط ورودی یک از رله های نفوذگر باشد  (N-C)/N خواهد بود.اطلاعات بیشتر

امنیت و نحوه کار در شبکه TOR و مسیریابی پیازی [بخش اول]

در دنیای نفوذ وامنیت گمنامی بحث بسیار مهمی می باشد که تکنیک ها و روش های مختلفی ارائه شده اند. یکی از روش گمنامی شبکه های Tor می باشد که امروزه بحثی جالب است. باتوجه به شبکه Tor و امکاناتی که می توان در استفاده از این شبکه داشت بدافزارها ترغیب شده اند تا برای گمنامی خود بدافزارهایشان را برپایه این شبکه ایجاد نمایند. در این مقاله به شبکه های Tor می پردازیم و بررسی بر نحوه کارکرد آن خواهیم داشت.

Tor که مخفف The Onion Router یک نرم افزار و یک شبکه باز است که کاربر را از آنالیزور های ترافیک محافظت می کند. پروژه Tor که در سال 2006 پدید آمد و در واقع نسل دوم از پروژه مسیریابی پیازی از آزمایشگاه تحقیقات نیروی دریایی ایالات متحده محسوب می گردد. هدف اصلی در ابتدا محافظت از ارتباطات دولتی بوده است که امروزه برای اهداف مختلفی توسط افراد مختلفی مورد استفاده قرار می گیرد. همانطور که گفته شد Tor از مسیریابی پیازی استفاده می کند و مبتنی بر لایه های چندگانه امنیتی است، دقیقا همانند پوست پیاز که لایه به لایه است و این لایه های امنیتی یک به یک از پیام های رد وبدل شده در شبکه Tor حذف می گردند.

index

 اما Tor نسبت به بلوکه شدن آسیب پذیر است. بیشتر نودهای Tor در یک دایرکتوری عمومی لیست می‌شوند، بنابراین برای گردانندگان شبکه‌ها ساده است که به لیست دسترسی یافته و آدرسهای IP نودها را به فیلتر خود اضافه کنند. یک راه برای خلاصی از این نوع بلوکه کردن استفاده از یکی از چندین پل Tor است که نودهای Tor هستند، که برای اجتناب از بلوکه کردن، بصورت عمومی لیست نمی‌شوند.

گاها بعضی از برنامه‌هایی که از Tor استفاده می‌کنند امکان دارد گمنام ماندن شما را خدشه دار کنند، همچنین اگر از رمزنگاری اضافه برای حفاظت از ارتباطهای خود استفاده نمی‌کنید، داده‌های شما هنگام رسیدن به آخرین گره Tor در زنجیره (گره خروج) داده‌های شما بصورت بالقوه برای صاحب آخرین گره Tor و ISP بین آن گره و سایت وب مقصد شما آشکار خواهد شد.

اطلاعات بیشتر

بدست آوردن Gateway در Python با scapy

شاید هنگام ‍‍‍‍پیاده سازی یک حمله نیاز داشته باشید که default gateway رو بدست بیارید وجهت اتوماتیک سازی کارها نیاز به ورودی کاربر پیدا نکنید. مثلا برای حمله ARP بطور خودکار gateway آی پی خود را در شبکه بدست بیاورید و حمله را علیه آن انجام دهید و یا حالت های دیگر.

 

در فایل config.py کلاسی به نام conf وجود دارد.این کلاس شامل تنظیمات scapy است. براحتی میتونیم با دستور زیر این تنظیمات رو مشاهده کنیم:

خوب در این کلاس شی به نام route موجود است که این شی با استفاده از فایل route.py که متخص کار با جدول مسیریابی در سیستم نوشته شده است مقداردهی خواهد شد. حال با پایتون سعی میکنیم تا این شی از کلاس را پرینت کنیم و محتوا را مشاهده کنیم. پس مانند زیر دستور ها را می نویسیم :

خوب میبینیم که  routing table درون سیستممان را بطور کامل برایمان نشان داد که default gateway نیز شامل آنهاست و چیزی که میخواهیم بدست آوریم. parse نمودن بدین صورت زیاد جالب نخواهد بود بنابراین بازهم از conf.route به فیلد دیگری مراجع میکنیم تا اطلاعات را بصورت بهتری متناسب با کاری که میخواهیم انجام دهیم به نمایش درآید.بدین صورت:

براحتی میتوان اطلاعات شبکه هایمان را داشته باشیم و براساس هرفیلدی که لازم است داده ها را فیلتر نماییم. خوب جهت راحتی کار  ما تابعی مینویسیم که پارامتر ورودی IP موردنظرمان و خروجی نیز gateway همان IP ورودی خواهد بود:

 

 

TTL Security در پروتکل مسیریابی BGP

چند وقته برروی امنیت پروتکل BGP کار میکردم . خوب با یک مکانیزم امنیتی و کامند در IOS میخواهیم آشنا شویم. دستور زیر

یک مکانیزم امنیتی بسیار سبک و راحت می باشد که session ایجاد شده بین peer های BGP را از حملات CPU-utilization محافظت می کند. درIPv4 از فیلد TTL و در  IPv6 از Hop Limit برای جلوگیری از این دسته حملات استفاده می شود. برای مثال می توان حملات DOS را نام برد که سعی می کند تا بخشی از شبکه را از کار بیندازد با پکت IP که در هدر آن Source,Destination جعلی وجود دارد. این مکانیزم امنیتی بدین صورت عمل می کند که پکت های دریافتی بایستی مقدار TTL آن مساوی و یا بزرگتر از مقدار تعیین شده توسط کانفیگ انجام شده برروی روتر باشد. وقتی پکت از فاصله یک Hop دریافت می شود مقدار TTL برابر 255 و اگر فاصله 2Hop باشد مقدار این فیلد 254 خواهد بود. در واقع در این دستور حداکثر تعداد Hop بین دو peer از eBGP را مشخص می کنیم.

این ویژگی می بایست در هر روتر درون AS کانفیگ گردد. نشست BGP تنها در برابر ترافیک Incoming محافظت می شود و تاثیری در ترافیک خروجی از روتر نخواهد داشت. وقتی این کانفیگ برروی روتر صورت گیرد BGP تنها نشست هایی را آغاز می کند و یا  Alive نگه میدارد که دارای شرایط تعیین شده در کانفیگ باشد.

اطلاعات بیشتر

حمله برروی LSDB ها در پروتکل مسیریابی OSPF همراه سناریو عملی

سلام دوستان.

دلیل اصلی نوشتن این مطلب برمیگرده به پستی که در یکی از سایت های ایرانی خوندم، سایت وتیمی که خود را جزو بهترین و برترین شرکت های امنیت شبکه و رایانه ای کشور می داند. درواقع مطلبی که خوندم  دوست عزیز امنیتی مون اسم تاپیک رو ”  آسیب پذیری موجود بر روی پروتکل OSPF ”  گذاشته بود و اگر بطور صریح حرف بزنیم ترجمه و شرح CVE-2012-0249 بودش!

این باگ مربوط به برنامه Quagga که بیس آن Zebra است. باگ در Daemon OSPF که وظیفه اجرای پروتکل OSPF را برعهده دارد رخ می دهد. در بسته های دریافتی LS Update طول چک نمی شود. طول در LSA Hader قرار میگیرد (فیلد length)  و این باگ باعث ایجاد حملات DOS می شود. حال نمیدونم وظیفه پروتکل آیا واقعا چک کردن طول داده هاست؟ یا این یک خطای برنامه نویسی است؟ که این بشر نوشته کشف آسیب پذیری در پروتکل OSPF ونکته ظریف اینجاست که اگر باگ مرتبط با پروتکل باشد بدون شک بایستی در تمامی دیوایس هایی که این پروتکل را پیاده سازی نموده اند وجود داشته باشد. پروتکل های که نوشته می شوند براساس تفکر و منطق هستند پس باگ هم بایستی logical باشد نه مرتبط با Secure Coding.

امیدوارم که شاهد اینگونه توهمات نباشیم و ازروی هیجان حرف زدن و عمل نمودن را کنار بگذاریم. حیله و حقه بازی واقعا کارزشت و ناپسندی هستش مخصوصا عوام فریبی، کسانی که در این فیلد کاری نیستند.

 

ابتدا مروری بر قواعد OSPF خواهیم داشت تا حمله بهتر درک شود:

  • قواعد براساس وضعیت پیوندهایا همان Link-State است، بنابراین همه روترهایی که در یک ناحیه OSPF قر ار دارند بایستی توپولوژی آن Area رو یادبگیرند.
  • بطورکلی OSPF سه مرحله دارد:
  1. اطلاعات روترهای مجاور، neighbor ها که شرایط برقراری ارتباط و تبادل داده ها را دارد، در جدولی به نام neighbor table ذخیره می شود.
  2. نگهداری و تبادل اطلاعات توپولوزیکی شبکه، بین روترهای همسایه است. این اطلاعات در جدولی به نام LSDB ذخیره می گردد.
  3. انتخاب بهترین مسیر ازروی جدول LSDB که این کارتوسط الگوریتم Dijkstra انجام می شود.

برای ساخت Topology Database از ارسال و دریافت بسته هایی به نام LSA استفاده می شود لذا بنابرموقعیت توپولوژیکی 11نوع LSA داریم که Header تمامی آنها یکسان است. ساختار این هدر را در پایین می توانید مشاهده کنید :

 

اطلاعات بیشتر

حل reverse 200 مسابقات CTF شریف

در چهارمین دوره مسابقات دانشگاه شریف بخش reverse دومین challenge یک فایل PE قرار داده شد که اگر با RDG چک کنیم می بینیم فایل 32بیت است و هیچ لایه محافظتی برروی آن وجود ندارد و همچنین از crypto خاصی استفاده نمی کند.
این چلنج Green نام دارد که در ادامه به مربوط بودن نام با نحوه حل آن مشخص خواهد شد.هرفردی ممکن است برای بدست آوردن فلگ روند خاصی برای خودش داشته باشد ولی ما به روش خود حل خواهیم نمود.

1

این فایل یک برنامه CLI است پس ابتدا بصورت عادی اجرا میکنیم متوجه می شویم که دو پارامتر ورودی نیاز دارد، حال برنامه را پارامتر های HamiD 123456 اجرا میکنیم:

2

اولین سرنخ بدست آمد. حال برنامه را با همین پارامترها در Olly اجرا میکنیم و به تریس میپردازیم. ابتدا به جستجوی اولین سرنخ میپردازیم :
3
میبینیم که توسط LoadImageA عکسی را لود می کند که براساس پیغام در عکس قبلی بایستی Bitmap بصورت سیاه و سفید باشد.اطلاعات بیشتر

ارسال SMS با دلفی XE5 برای Android

خوب در این پست قصد داریم که با نحوه ارسال اس ام اس در برنامه هایمان آشنا شویم.

ارسال اس ام اس برای برنامه های آندرویدی در دلفی XE5 بسیار راحت است. به تکه کد زیر دقت کنید:

تابع ارسال SMS یعنی تابع sendTextMessage بدین صورت است :

اگر پارمتر scAddress را مقدار nil بدهیم برای ارسال sms از sms center پیش فرض استفاده خواهد شد. در انتها نکته قابل ذکر که در برنامه به منوی Project/Options/Permissions رفته و دسترسی ارسال SMS را برای برنامه فعال کنید.

 

لذت ببرید و موفق باشید.

 

 

PEDA مکملی برای GDB

ابزار PEDA که درواقع Python Exploit Development Assistance for GDB است و آن را می توان مکمل خوبی برای GDB درنظر گرفت مانند mona که برای Immunity Debugger نوشته شد.

همانطور که از اسمش پیداست اسکریپتی به زبان پایتون است که کار را برای اکسپلویترها در هنگام کار با GDB آسان می کند. طریقه نصب PEDA به صورت زیر خواهد بود:

 

این ابزار ویژگی های مختلفی را به GDB اضافه میکند که در ابتدای کار بارزترین ویژگی آن رنگی نمودن دستورات و رجبسترها و اطلاعات دیباگ است که در خوانایی کدها کمک بسیاری خواهد نمود. با این ابزار دستوراتی را هم در اختیار خواهیم داشت که در امر اکس‍پلویت کارمان را راحت می کند امکاناتی همچون پیدا نودن gadget ها برای rop و …

اطلاعات بیشتر

حمله برروی Designated Router

برای حملات در OSPF بطور معمول حملاتی که پیشنهاد می شود برروی آسیب پذیری های الگوریتم Network LSA و پروتکل Hello است.  Network LSA ها توسط Designated Router ارسال می شد، که این روتر در میان روترهای مجاور در شبکه توسط الویت هایی که از پیش تنظیم شده است (که گاها هم می توانند بصورت مقدار پیش فرض باشند) .

چه اتفاقی می افتد اگر DR نتواند LSA ها را ارسال کند؟
دونوع کلی و اصلی از شبکه ها بودند، Transit  و Stub ، شبکه های Transit اجازه می دهد تا پکت های خارجی از طریق آنها به مکانهای دیگرانتقال یابد، در حالی که شبکه های Stub همچین عملی را انجام نمی دهند.اطلاعات بیشتر

کاهش حجم فایل های EXE در Lazarus

در اولین برخورد با این IDE مشکلی که شاید موردتوجه واقع گردد، داشتن حجم زیاد فایل های کامپایل شده (exe) هست که شاید دلیلی باشد تا شما منصرف از استفاده این محیط شوید.

در ورژن 1.0.12 که روی سیستمم نصب کرده ام، خروجی یک پروژه که فقط یک فرم خالی دارد نزدیک به 15MB می باشد!!! به دلیل اینکه فایل همراه با اطلاعات اضافی و Debug می باشد که برای کار با gdb نیاز است. برای برطرف نمودن این مشکل یکی از تولزهای خود لازاروس استفاده می کنیم.

ابزار STRIP  تقریبا فایل را به 20 درصد حجم فعلی می رساند و اطلاعات اضافی را از روی فایل کامپایل شده حذف خواهد نمود. حالا می توان از upx هم استفاده نمود و حجم را بیشتر کاهش دهیم. تولز STRIP در مسیر زیر قرار دارد(تمامی تنظیمات را بصورت پیش فرض نصب کردم):

C:\lazarus\fpc\2.6.2\bin\x86_64-win64\strip

و بصورت command-line می توان داده های اضافی (symbol,relocation) را از روی فایل خروجی حذف نماییم تا حجم فایل کاهش یابد.

strip –strip-all  COMPILED_FILE_PATH

حال بدین صورت فایل 15MB به 2MB کاهش خواهد یافت.

اطلاعات بیشتر

حملات و امنیت در پروتکل مسیریابی OSPF

OSPF یا Open Shortest Path First پروتکلی قدرتمند و بسیار پیچیده است که می توان در مقابل پروتکل سیسکو EIGRP دانست. پروتکل‌های مسیریابی مبتنی بر IP، به دو دسته کلی تقسیم می‌گردند:

  1.  Interior Gateway  Protocols (IGPs)
  2. Exterior  Gateway  Protocols  (EGPs)

OSPF بصورت خیلی گسترده ای در بین پروتکل های IGP مورد استفاده قرار گرفته است که شرح کامل پروتکل در RFC2328 پرداخته شده است. در این مقاله قصد بر شرح این پروتکل نداریم و پیش زمینه مقاله آشنایی با مباحث CCNA و CNNP می باشد. بحث برروی حملات متمرکز شده است ولی با این حال نمی توان تمامی حملات و حالت های مختلف آن را شرح داد و بررسی نمود، بنابراین مروری کلی برروی چند حمله خواهیم داشت.

تامین امنیت در پروتکل های مسیریابی شامل Authenticity و Integrity پیام های پروتکل است. Authenticity بدین معنی است که هویت ارسال کننده اطلاعات تضمین شود و Integrity نیز بدین معنی است که اطلاعات ارسال شده و دریافت شده یکسان باشند. برای تایید صحت و درست بودن اطلاعات مسیریابی دریافت شده ما می توانیم تهدید ها را بطور کلی به دو نوع External , Internal تقسیم نماییم. مفهوم Internal/Insider روترهایی خواهند بود که مورد اعتماد شبکه هستند و بعنوان یک روتر در شبکه پذیرفته شده است و همچنین در روند تبادل اطلاعات شرکت می کند در مقابل این تعریف؛ روترهای External/Outsider روترهایی می باشند که Internal نیستند و به تازگی می خواهند وارد Routing Domain  گرددند.

اطلاعات بیشتر

کاملترین مرجع فارسی دیباگر OllyDBG

سلام دوستان.

قرار شد سایت که بالا اومد منم به افتخار دوستان هم تیمی این آموزشی که در تاریخ 27/1/2010 که بصورت Private فقط در دو فروم قرار داده شده بود، امروز در تاریخ 31/8/2013 بصورت عمومی انتشار بدم، تا بتوانیم کمکی در توسعه علم و همچنین کمک به دوستان نوپا  نموده باشیم.

 

در این فایل آموزشی سعی شده تا حد امکان با تمامی قابلیت های این دیباگر آشنایی ایجاد گردد و توضیحات لازم داده شود. همچنین برای نحوه استفاده از امکانات دیباگر در محیط واقعی بخشی عملی به نام “کارگاه علمی” در آموزش گنجانده شده است.

اطلاعات بیشتر