Implementing Windows 8 ROP Mitigation for Fun and Profit

The story begins when I saw the new Windows 8 security mitigation implemented by PsValidateUserStack() kernel function( I believe this method introduced by Piotr Bania for the first time). This function is implemented for protecting users from stack exchange method used in modern exploits for bypassing DEP and ASLR by pointing ESP to the attacker controlled heap address range. If you check this function, you will see all references to it are from memory management functions such as NtAllocateVirtualMemory() etc.

What this function actually does is monitoring ESP value when one of memory manipulation functions are called. PsValidateUserStack will get bottom and top of stack for current thread from ETHREAD and check it against current ESP value. If ESP doesn’t point to the actual Stack address range which allocated during thread creation and initialization, the function will terminate the process by throwing  a STATUS_STACK_BUFFER_OVERRUN exception. Here is the PsValidateUserStack() pseudo code reversed by Alex Ionescu :

char __cdecl PsValidateUserStack()

{

char Status; // al@1

_KTRAP_FRAME *TrapFrame; // ecx@3

_TEB *Teb; // ecx@3

void *.Eip; // [sp+10h] [bp-88h]@3

unsigned int .Esp; // [sp+14h] [bp-84h]@3

void *StackLimit; // [sp+18h] [bp-80h]@3

void *StackBase; // [sp+1Ch] [bp-7Ch]@3

_EXCEPTION_RECORD ExitStatus; // [sp+24h] [bp-74h]@6

CPPEH_RECORD ms_exc; // [sp+80h] [bp-18h]@3

 

CurrentThread = (_ETHREAD *)__readfsdword(0x124u);

Status = LOBYTE(CurrentThread->Tcb.___u42.UserAffinity.Reserved[0]);// // PreviousMode == User

if ( Status )

{

__asm { bt      dword ptr [edx+58h], 13h }  // // KernelStackResident, ReadyTransition, Alertable

Status = _CF;

if ( _CF != 1 )

{

TrapFrame = CurrentThread->Tcb.TrapFrame;

.Esp = TrapFrame->HardwareEsp;

.Eip = (void *)TrapFrame->Eip;

Teb = (_TEB *)CurrentThread->Tcb.Teb;

ms_exc.disabled = 0;

StackLimit = Teb->DeallocationStack;

StackBase = Teb->NtTib.StackBase;

ms_exc.disabled = -2;

Status = .Esp;

if ( .Esp < (unsigned int)StackLimit || .Esp >= (unsigned int)StackBase )

{

memset(&ExitStatus, 0, 0x50u);

ExitStatus.ExceptionCode = STATUS_STACK_BUFFER_OVERRUN;

ExitStatus.ExceptionAddress = .Eip;

ExitStatus.NumberParameters = 2;

ExitStatus.ExceptionInformation[0] = 4;

ExitStatus.ExceptionInformation[1] = .Esp;

Status = DbgkForwardException(&ExitStatus, 1, 1);

if ( !Status )

{

Status = DbgkForwardException(&ExitStatus, 0, 1);

if ( !Status )

Status = ZwTerminateProcess((HANDLE)0xFFFFFFFF, ExitStatus.ExceptionCode);

}

}

}

}

return Status;

}

Protection mechanism is pretty simple. So I decided to implement it from user-mode for other versions of Windows operation system. It was one day of pure fun :) what actually my code does is monitoring ESP value each time a memory management function is called, just like the kernel! And in case of anomaly, rise the STATUS_STACK_BUFFER_OVERRUN exception.

Note 1: This is a 32bit version of the program. You need to manually inject it into your desired process (or use AppInit_DLLs to do it globally).
Note 2: check out Dan Rosenberg blog to see how easy it is to bypass this mitigation ;)

Download RopDosham

Demo

pinStalk : Tracing Program Execution Flow

pinStalk ابزاری برای بررسی و دنبال کردن روند اجرایی برنامه است.این ابزار برای دنبال کردن رفتار برنامه از فناوری Dynamic Binary Instrumentation بهره میجویید. این فناوری اجازه ی اجرای کد پیش از اجرای هر Instruction را به کابر میدهد. از این رو با استفاده از این ویژگی میتوان رفتار برنامه را در سطح Basic Block و Instruction ثبت و بررسی کرد.با استناد به این فناوری  pinStalk توانایی بررسی و مقایسه روند اجرایی برنامه را در بازه های اجرایی گوناگون را داراست. pinStalk از Pintool و نرم افزار IDA Pro برای پیشبرد هدف خود بهره میجویید. شما می توانید این ابزار را برروی معماری های 32 و 64 بیتی ، و سیستم عامل های ویندوز ، لینوکس و مک کامپایل کرده و استفاده کنید.

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

pinStalk is a tool for analyzing the execution procedure of an executable. It uses Dynamic Binary Instrumentation to trace the program behavior. Using this technology, it can see and analyze each instruction before execution, so one can analyze the program’s behavior in basic-block and instruction levels. pinStalk uses Pintool (from Intel) and IDA Pro to do its job. You can compile and use it on Windows, Linux and Mac (on 32 and 64 bit architectures).

Note: This tool is not fully functional now and has some limitations.
Update : new version of tool with some minor changes is now available, use link below.

Forensic Challenge 9 – “Mobile Malware”

دو روز پیش نهمین Forensic Challenge هانی نت تحت عنوان “بدافزار موبایل” منتشر شد. مهلت ارسال راه حلها تا 4 سپتامبر است. برندگان این مسابقه در حدود هفته سوم سپتامبر اعلام می شود و به سه نفر برتر جوایزی اهدا خواهد شد.
جملات انگلیسی ساده و قابل فهمی برای توضیح challenge و صورت سوالات استفاده شده، اما با این حال برای راحتی فارسی زبانان و مشارکت بیشتر آنها در این مسابقه، نسخه فارسی آن را هم در سایت قرار داده ایم.

دانلود فایل مربوط به challenge شامل image قسمتی از تلفن و فایل pcap ترافیک کپچر شده از ترافیک بدافزار:

fc9files-final.tar.gz
SHA1: dbc378ce1807a4a2459f882b13b4224d0db8fbc7

جواب های خود را در این قالب وارد کنید و در آدرس ذکر شده در سایت آپلود کنید.

توضیح مختصری در مورد challenge:

 از آنجا که تعداد کاربران تلفن های هوشمند به صورت نمایی در حال افزایش است (از 1.6 بیلیون دستگاه موبایل به فروش رسیده در سال 2010، 19 درصد از آنها تلفن های هوشمند بوده اند – منبع: Gartner)، دستگاه های موبایل به یک پلتفرم جذاب برای خلافکاران سایبری تبدیل شده اند. شما به عنوان یک محقق امنیتی نیاز دارید که دشمنانتان را بشناسید و در برابر این نوع جدید از تهدیدات قادر به دفاع از خود باشید.
در این challenge یک تلفن هوشمند واقعی، مبتنی بر یک OS محبوب و متداول، بعد از یک رخداد امنیتی برای بررسی فراهم شده است. شما باید با بررسی image فراهم شده از قسمتی از فایل سیستم، تمام چیزهایی که مشکوک به نظر میرسد را استخراج کرده، تهدیدات را آنالیز کنید و درنهایت نتیجه آنالیز خود را ارسال کنید.
این challenge از بازیابی فایل سیستم تا مهندسی معکوس بدافزار و آنالیز PCAP، شما را به دنیای بدافزارهای موبایل خواهد برد.

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

SnoopMag Special Issue [Honeynet Project]

مجله امنیتی اسنوپ با همکاری پروژه هانی نت ایران به زودی ویژه نامه ای تحت عنوان Honeynet Project منتشر خواهد کرد.
مطالب این ویژه نامه به طور کلی در زمینه های زیر خواهد بود:

  • Botnet ها و روش های کشف آنها
  • سیستم های آنالیز داینامیک Malware و روش های کشف
  • آنالیز حملات و اطلاعات جمع آوری شده توسط Honeypot ها
  • معرفی نرم افزارهای جدید Honeypot و بررسی آنها

هدف از این ویژه نامه، تولید مطلب فارسی در زمینه مباحث بروز و پیشرفته امنیت اطلاعات و افزایش آگاهی کاربران و متخصصان ایرانی فعال در این حوزه می باشد. آماده دریافت نظرات و پیشنهادات شما هستیم. اطلاعات بیشتر در مورد زمان انتشار این ویژه نامه متعاقباً اعلام می شود.