PDA

View Full Version : Kiss Driver signing Goodbye



illegalyasync
چهارشنبه 03 مرداد 1386, 03:46 صبح
http://agahresearch.blogspot.com/2007/07/kiss-driver-signing-goodbye-for-now.html
:قلب:

Inprise
پنج شنبه 04 مرداد 1386, 03:27 صبح
این برنامه برای نصب غیر مجاز درایورها اول درایورخودش رو نصب میکنه ( devicename=astiv ) و بعدا به کمک همین درایور درایور مورد نظر رو بایت به بایت به مموری مپ میکنه و بعد کنترل رو به نقطه شروع درایور میبره . به همین دلیل هست که وابستگی های درایور رو نمیتونه لود کنه . برای درایور اصلی خودش هم از وری ساین سرتیفیکیت داره !

قاعدتا آنتی ویروسها از فردا نام این درایور و دیوایس نیمش رو به عنوان Malicious Acitivity گزارش میکنن . ایدهء جدیدی هم نیست . برای کسانی که بخوان از این تکنیک در عمل استفاده کنن بهر حال پرداخت هزینه و گرفتن امضای دیجیتال و ثبت مشخصات و ...برای درایور اولیه که میتونه چیز ساده ای باشه ضروری است که باعث میشه این روش فایده خاصی برای فعالیتهای مخرب نداشته باشه .

illegalyasync
پنج شنبه 04 مرداد 1386, 12:37 عصر
منم Certificate ای که Issuer اش خود Verisign بود رو دیدم اما مشخصات متقاضی نبود یا من نتونستم ببینم ؟

Inprise
پنج شنبه 04 مرداد 1386, 13:09 عصر
؟!
نام شرکت ( L i n c h p i n L a b s ) همونجا هست . جدی باش ! ؟!؟!

greenway
شنبه 06 مرداد 1386, 08:37 صبح
به نظر شما این موضوع که برای نصب درایوری که در ویندوزهای قبلی با Start Service نصب میشد و نیازی به خودکشی نبود ، در یک برنامه تجاری آیا این درست هست که User رو مجبور به نصب درایور با astiv بکنیم ؟


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

کاملا موافقم اما متاسفانه امضای نامبرده رو به کشورهای محور شرارت نمی فروشند. بیشترین فعالیت توسط IranSSL در ایران انجام میشه که اون هم از Root مربوط به Comodo استفاده میکنه که اون هم در لیست مایکروسافت نیست . مدتهای زیادی هست که این موضوع رو پیگیری می کنم ، تقریبا داره یک سال میشه ،‌ حالا هم مجبور شدم به دلیل بسته بودن SSDT در ویندوزهای 64 بیت ، دوباره از سر بنویسم. اما این وسط یک شرکت اروپایی هست به نام GlobalSign که هنوز تست نکردم که میشه ازش خرید کرد یا نه ، روی هم رفته چون گند کارم داره روی ویندوزهای 64 بیت در میاد ، به زودی نتیجه اش رو ( یا راه حل رو ) پیدا میکنم و اینجا پیگیری میکنم.
در همین رابطه :
http://forums.comodo.com/code_signing_certificate/driver_signing-t1131.0.html

illegalyasync
چهارشنبه 10 مرداد 1386, 12:23 عصر
برای گرفتن گواهی مشکل اول مسئله تحریم نیست . مسئله اصلی و مهم WHQL هست . آیا کدی که نوشتی سازگاره ؟ تجربهء تو رو نمیدونم اما من با دو سال تجربه کدنویسی کرنل بعید میدونم کدهائی که تا حالا نوشتم حتی بهترینشون به همین راحتی WHQL بگیرن . یک دوست دارم که اهل روسیه هست و شرکتشون برای یکی از محصولاتش وابسته به یه درایور است که تا حالا همینطوری منتشر میکردن و یه وارنینگ هم بود که برای همه عادی شد اما برای انتشار 64بیتی ویستاشون دو نفر رو از یه شرکت آلمانی پارت تایم استخدام کردن که فقط و فقط کدشون رو برای WHQL مرور و ادیت کنه . اگر از کدت مطمئنی برای گرفتن گواهی داشتن یه آدرس پستی معتبرخارج از ایران و کارت اعتباری مرتبط با همین آدرس و یه skype که در ساعتهای خاصی انلاین باشه و بتونن باهات تماس تلفنی هم بگیرن باید کافی باشه...خودتو فری لنسر معرفی میکنی و ...

greenway
چهارشنبه 10 مرداد 1386, 14:14 عصر
با توجه به نوع درایور برای درخواست WHQL باید امضای Verisign رو داشته باشیم . به هر حال جواب سوال شما نه است ، یعنی به طور کلی تغییرات در System Service Dispatch Table راهی نیست که مایکروسافت قبول داشته باشه ، اما در حال حاضر دارم تبدیلشون میکنم.

http://download.microsoft.com/download/d/e/1/de1e0c8f-a222-47bc-b78b-1656d4cf3cf7/WLP_309-Final_Word.exe

Inprise
پنج شنبه 11 مرداد 1386, 23:55 عصر
برای گرفتن گواهی داشتن یه آدرس پستی معتبرخارج از ایران و کارت اعتباری مرتبط با همین آدرس و یه skype که در ساعتهای خاصی انلاین باشه و بتونن باهات تماس تلفنی هم بگیرن باید کافی باشه...خودتو فری لنسر معرفی میکنی و ...به فرد حقیقی چنین گواهی ای داده نمیشه . قبل از پرداخت هزینه و انجام هر نوع مبادله ای با CA باید وضعیت حقوقی کمپانی نه با ایمیل که فقط و فقط با فکس به CA ارسال بشه . معمولا این وضعیت حقوقی رو وکلای یک کمپانی تهیه میکنن و آپدیت نگهش میدارن . لااقل من مکانی که به تو به عنوان یک برنامه نویس خوشحال و مستقل و تنها زیر سقف آسمان گواهی بدهد را نمیشناسم ! هزینه کل این داستان سیصد دلار هم نمیشه اما چون امضا باید دارای یک ضمانت حقوقی باشه طبیعتا نمیتونه شامل حال یک فرد بشه . اگه کسی جائی رو میشناسه که اینطور عمل نمیکنه لینکش رو بده !



یعنی به طور کلی تغییرات در System Service Dispatch Table راهی نیست که مایکروسافت قبول داشته باشه ذاتا" هر نوع تغییری در سیستم عامل میتونه پذیرفته بشه بشرطها و شروطها . دستکاری SSDT هم جزو این موارد هست . به عنوان مثال KAV 6 به بعد SSDT رو هوک میکنه و درایورش هم امضا شده حتی یادم هست که در مثالهای DriverStudio ی مرحوم Numega هم روتینهائی برای هوک وجود داشت و مدعی بود که درایورهای لینک شده به لایبراری اونها WHQL میگیرن و چند صفحه ای هم مخ زده بود . کلا ذات یک عمل مسئله مورد بحث در WHQL نیست . مسئله ای که بررسی میشه روش هست و Quality . اگر درایوری به احمقانه ترین شکل بی ربط ترین اجزاء رو دستکاری بکنه ولی به چیز لطمه نزنه و کیفیت اجراش خوب باشه گواهی میگیره . جدا از اینها WHQL چندان هم مهم و حائز اهمیت نیست . ما یک عمر برنامه مزخرف نوشتیم و کاربرانش استفاده کردن و هنوز زنده هستند حالا اگر درایور هم گاهی حالش خوب نباشه اتفاق حادی نمیفته . خیلی از درایورهای تجاری این تائیدیه رو ندارن و کسی موقع خرید دستگاه یا حتی وقتی اون صفحه آبی دیده میشه و سیستم انگشت وسطش رو به کاربر نمایش میده به عمق مسئله فکر نمیکنه ؛ یه ریبوت و خلاص . این مسئله حتی شامل کارتهای گران قیمت 10-گیگ اینتل هم میشه و حتی بعید نیست یک مشت طفل نابالغ اونها رو نوشته باشن . ما استفاده میکنیم و هر وقت چیزی گیر کرد ریبوت میکنیم و یه سری ای ک[...] خ[...]ت نثارش و کل مسئله حل میشه ! من به شخصه چه به عنوان کار شخصی چه به عنوان مدیریت یک روند توسعه حاضر نیستم هزینهء خفنی برای QA و گواهی های مربوطه بکنم . مسئله اصلا فنی نیست . در یک جمله ، در اغلب موارد ، توجیه اقتصادی نداره . مگر در حالتهای استثناء . بقول دکتر لوکس ، همینکه یه چیزی فقط-خیلی-وقتا کار بکنه برای اکثر آدمها کافیه چون خودشون هم همینطورن !

greenway
جمعه 12 مرداد 1386, 01:35 صبح
ذاتا" هر نوع تغییری در سیستم عامل میتونه پذیرفته بشه بشرطها و شروطها . دستکاری SSDT هم جزو این موارد هست . به عنوان مثال KAV 6 به بعد SSDT رو هوک میکنه و درایورش هم امضا شده حتی یادم هست که در مثالهای DriverStudio ی مرحوم Numega هم روتینهائی برای هوک وجود داشت و مدعی بود که درایورهای لینک شده به لایبراری اونها WHQL میگیرن و چند صفحه ای هم مخ زده بود . کلا ذات یک عمل مسئله مورد بحث در WHQL نیست .

WHQL در این بحث یک روش دور زدن نیاز به امضا است. یعنی وقتی که خود مایکروسافت درایوری رو امضا بکنه ، مسلما نیاز من به امضا از بین میره . پس منظور illegalyasync به نظرم این هست که در صورت موفقیت برای پاس کردن تست ویندوز ، بهتر هست که یک درخواست تست ثبت کنم . در مورد چیزهایی هم که تغییردادنشون تابو بوده و داد چند تا شرکت بزرگ از جمله کسپرسکی رو در آورده ، یک قولهایی هست در مورد تغییراتی که در نسخه سرویس پک یک مایکروسافت ویستا منتشر خواهد شد. شاید من بد فهمیده باشم ، اما فکر میکنم موضوع رعایت Level ها ،‌ استفاده به جا از SpinLock و Event ها و حافظه هایی که در کرنل از دنیا میروند از مهمترین بحث های مورد نظر برای WHQL باشند. در زمینه SSDT هم این یک شمشیر دو لبه است. هم میشه برای ساختن روتکیت ، ویروس ازش استفاده کرد و هم میشه برای جلوگیری از بارداری سیستم ( مثلا کاری که کسپرسکی میکنه ) ازش استفاده کرد. برای مثال یکی از موارد استفاده من تغییر کامندهایی که توسط دیمون تولز و الکل به درایور مجازی ارسال میشه بوده یا از بین بردن نیاز به دسترسی رایت در ارسال کامند به اسکازی . تا ویندوز 2000 SSDT مستقبما قابل رایت بود و مشکل Page Protection نداشت ، اما از ویندوز ایکس پی به بعد مجبور بودیم که از طریق CR0 به صورت سخت افزاری PP رو Disable کنیم. توی ویندوز 64 بیت یک مرحله جلوتر رفته و مقادیر موجود در اون رو از روی باینری ntdll.dll رونویسی میکنه و هر چیزی توش بنویسی دوباره به حالت قبلش بر میگرده ... اما در کل درایور نویسی با اینهمه دردسر کار عاقلانه ای نیست ، مگر اینکه توی هر کشوری بغیر از این 7 تا کشور زندگی کنید.




Microsoft Corp. has been collaborating with the independent software vendor (ISV) and analyst communities to develop documented and supported methods by which third-party software can work alongside Kernel Patch Protection on 64-bit versions of Microsoft® Windows®. Starting with Windows Vista™ Service Pack (SP) 1, Microsoft will begin making these new APIs available so that security vendors can extend the functionality of the kernel on 64-bit systems without disabling or weakening the protection offered by Kernel Patch Protection.

من نمیدونم اینو از کجای مایکروسافت گرفتم ، اما عنوانش این هست :



How Microsoft Assesses Kernel API Development to Support ISVs and Kernel Patch Protection


با این که همچین چیزی نوشته ،‌ ولی این با همون DeadLock خودش مربوط میشه : در بند 5 موارد لازم برای تهیه آش نوشته :



The code needs to be digitally signed consistently with the Authenticode signing procedures for mandatory driver signing on 64-bit platforms.





DWORD FakeDT4Option=0x66666666;
PCHAR DT4ProcessName[20]={""};
NTSTATUS NewNtDeviceIoControlFile(
HANDLE hFile,
HANDLE hEvent OPTIONAL,
PIO_APC_ROUTINE IoApcRoutine OPTIONAL,
PVOID IoApcContext OPTIONAL,
PIO_STATUS_BLOCK pIoStatusBlock,
ULONG DeviceIoControlCode,
PVOID InBuffer OPTIONAL,
ULONG InBufferLength,
PVOID OutBuffer OPTIONAL,
ULONG OutBufferLength
)
{
int rc;
int i;
DWORD *MyPtr;
PCHAR Ptr;
ULONG Dummy,cmd;
DWORD DT4Option;
HANDLE ThisProcID=PsGetCurrentProcessId();
cmd = 0;
// Disabling SetOption in DT4
if (DeviceIoControlCode == IOCTL_SCSIFAKE)
{
// DbgPrint("SCSI IOCTL");
DeviceIoControlCode = IOCTL_SCSI_PASS_THROUGH_DIRECT;
}
if (DeviceIoControlCode==0x220017)
{
if (InBufferLength>0x20)
{
Ptr = (PCHAR) InBuffer;
Ptr = Ptr + 0x10;
cmd = *(ULONG *) Ptr;

if (cmd==3)
{
Ptr = (PCHAR) InBuffer;
Ptr = Ptr + 0x10 + 4;
Dummy = *(ULONG *) Ptr;
if (Dummy>0x20)
{
Ptr += 0x0C;
MyPtr = (DWORD *) (*(DWORD *) Ptr);
Ptr = (PCHAR) MyPtr;
Ptr += 0x1C;
DT4Option = *(DWORD *) Ptr;
FakeDT4Option = DT4Option;
DT4Option = DT4Option & 0xBFFFFFBF;
*(DWORD *) Ptr = DT4Option;

if (ThisProcID != OriginalProcess)
{
//Removed
}
#ifdef EBUG
DbgPrint("Setting FakeInfo = %x\n", FakeDT4Option);
DbgPrint("Setting FakeInfo = %s\n", DT4ProcessName);
#endif
}
}
}
}
// Do Previous Create Operation to Fill Client IOSB
rc=((NTDEVICEIO)(OldNtDeviceIoControl))
(
hFile,
hEvent,
IoApcRoutine,
IoApcContext,
pIoStatusBlock,
DeviceIoControlCode,
InBuffer,
InBufferLength,
OutBuffer,
OutBufferLength);
if (DeviceIoControlCode==0x220017)
{
if (InBufferLength>0x20)
{
// Fucking The Returned Results to Fool DT4 User
if (cmd==2)
{
Ptr = (PCHAR) InBuffer;
Ptr = Ptr + 0x10 + 8;
Dummy = *(ULONG *) Ptr;
if (Dummy>0x20)
{
Ptr += 0x10;
MyPtr = (DWORD *) (*(DWORD *) Ptr);
Ptr = (PCHAR) MyPtr;
Ptr += 0x1C;
DT4Option = *(DWORD *) Ptr;

if (cmd==2)
{
if (FakeDT4Option==0x66666666)
{
FakeDT4Option = *(DWORD *) Ptr;
FakeDT4Option = FakeDT4Option & 0xBFFFFFBF;
}
*(DWORD *) Ptr = FakeDT4Option;
if (ThisProcID != OriginalProcess)
{
//Removed
}
//DbgPrint("Proc ID = %x\n", ThisProcID);
#ifdef DEBUG
DbgPrint("Getting FakeInfo = %x\n", FakeDT4Option);
DbgPrint("Getting FakeInfo = %s\n", DT4ProcessName);
#endif
}
}
}
}
}
return rc;
}



تاپیک عجیبی شده ...:گیج:

Inprise
جمعه 12 مرداد 1386, 21:33 عصر
قاعدتا آنتی ویروسها از فردا نام این درایور و دیوایس نیمش رو به عنوان Malicious Activity گزارش میکنن

http://blogs.eweek.com/cheap_hack/content/vista/microsoft_hits_back_at_atsiv.html

illegalyasync
دوشنبه 15 مرداد 1386, 22:15 عصر
این روش جدید http://agahresearch.blogspot.com/2007/08/purple-pill.html
رو نمیتونن مثل قبلی تعطیل کنن . خیلی دوست دارم زودتر عکس العمل مایکروسافت رو ببینم ;)

Inprise
شنبه 20 مرداد 1386, 14:52 عصر
http://linchpinlabs.com/resources/atsiv/usage-design.htm

Inprise
شنبه 20 مرداد 1386, 14:53 عصر
خیلی دوست دارم زودتر عکس العمل مایکروسافت رو ببینم ;)

این شانسو پیدا نمیکنی چون نویسنده اش بلافاصله کد و توضیحاتش رو از روی دو سایتی که منتشر کرده بود برداشت ! الان مطلقا اثری ازش وجود نداره

illegalyasync
شنبه 20 مرداد 1386, 17:46 عصر
این شانسو پیدا نمیکنی

چرا ؟
ماجرا اینه که آلکس از یه نقطه ضعف در یکی از درایورهای ATI برای رجیستر کردن درایور استفاده میکرد و الان تو مصاحبه اش گفته که بلافاصله این برنامه رو حذف کرده تا بعد از Patch شدن درایور ATI به عنوان کد نمونه بازم منتشرش کنه و میگه فقط 39 نفر داونلودش کردن . خوشحالم که یکی از اونام :D
من روی لپ تاپم تستش کردم و خوب کار میکنه ....بهر حال ایده که چیز جدیدی نبوده و قبلا تو بلک هت در موردش حرف زده شده

http://agahresearch.blogspot.com/2007/08/purple-pill_11.html