<red teamind>
<the ART of EXPLOITATION>
در پارت اول از توسعه اکسپلویت سیستمیک ما به قضیه طراحی اکسپلویت پرداختیم و به این پی بردیم که رفتار اکسپلویت ها چگونه می باشد
در این پارت ما buffer overflow یا stack overflow خواهیم پرداخت و در پارت بعد به heap overflow خواهیم پرداخت.
در کد هایی که ما توسعه میدهیم اسیب پذیری هایی موجود می باشد که حتی به آن فکر هم نمیتوانیم بکنیم برای مثال include کردن هدر فایل های اضافی
برای مثال:
#include <stdlib.h>
وقتی این هدر فایل را به کد خود اضافه میکنید و کاربردی درون کد شما ندارد باعث می شود فردی که طراح اکسپلویت می باشد بتواند از توابع هدر فایل برای byte code injection استفاده کند و یا ROP پیاده سازی کند و مکانیزم های DEP و ASLR را بای پس نماید .
buffer بخشی از حافظه است که درون stack رزرو می شود تا محتوای متغیر ها و دگر آدرس های حافظه مورد نیاز را در خود جای دهد برای مثال
char ch[500];
کد بالا 500 اندیس را در حالت کرکتر %c رزرو میکند اما برای کد های ماشین باید بگوییم ۵۰۰ بایت از حافظه را رزرو میکند
به نظر شما ۵۰۰ بایت حافظه چگونه پر می شود؟
و آیا پس از پر شدن buffer چه اتفاقی می افتد؟
بله درست حدس زدید پس از اتمام فضای بافر اگر همچنان دیتایی درحال ریخته شدن درون buffer باشد برنامه کرش خواهد کرد
به مقدار دقیق حافظه ذخیره شده offset گفته می شود برای مثال درون مموری این امکان وجود دارد که یک متغیر char که برای آن 500 بایت درون stack رزرو شده است 524 بایت offset داشته باشد
مقدار دقیق offset را می توان با pattern و کم کردن آن از آدرس رجیستر EIP پس از اتمام فضای بافر به دست آورد.
مقدار دقیق offset بسیار کاربردی می باشد چون ما می دانیم که چگونه می توانیم shellcode خود را درون یک بافر inject کنیم که برنامه دچار crash نشود علاوه بر این offset به صورت مستقیم درون فرمول محاسبه finally address بسیاری از آدرس های حافظه نقش مستقیم دارد
مانند
Base Register - register segement(DI, ES, SS, CS, ...) - offset = finally address
فرمول بالا جهت دادن آدرس نهایی و دیتای نهایی با محاسبه سگمنت و بیس رجیستر به cpu استفاده می شود.
اگر ما بتوانیم shellcode خود را در زمان انتهای بافر اینجکت کنیم موفق میشویم byte code دلخواه خود را برای مثال برای گرفتن uid روت از یک فایل دارای دسترسی suid root کسب کنیم و با استفاده از buffer overflow کد آسیب پذیر را اکسپلویت کنیم و privilege escalation کنیم.
در حالی که ASLR و DEP امکان این اکسپلویتیشن را کاهش میدهند با تکنیک هایی مانند ROP می توان آنها را bypass کرد و به uid روت رسید.
<the ART of EXPLOITATION>
در پارت اول از توسعه اکسپلویت سیستمیک ما به قضیه طراحی اکسپلویت پرداختیم و به این پی بردیم که رفتار اکسپلویت ها چگونه می باشد
در این پارت ما buffer overflow یا stack overflow خواهیم پرداخت و در پارت بعد به heap overflow خواهیم پرداخت.
در کد هایی که ما توسعه میدهیم اسیب پذیری هایی موجود می باشد که حتی به آن فکر هم نمیتوانیم بکنیم برای مثال include کردن هدر فایل های اضافی
برای مثال:
#include <stdlib.h>
وقتی این هدر فایل را به کد خود اضافه میکنید و کاربردی درون کد شما ندارد باعث می شود فردی که طراح اکسپلویت می باشد بتواند از توابع هدر فایل برای byte code injection استفاده کند و یا ROP پیاده سازی کند و مکانیزم های DEP و ASLR را بای پس نماید .
buffer بخشی از حافظه است که درون stack رزرو می شود تا محتوای متغیر ها و دگر آدرس های حافظه مورد نیاز را در خود جای دهد برای مثال
char ch[500];
کد بالا 500 اندیس را در حالت کرکتر %c رزرو میکند اما برای کد های ماشین باید بگوییم ۵۰۰ بایت از حافظه را رزرو میکند
به نظر شما ۵۰۰ بایت حافظه چگونه پر می شود؟
و آیا پس از پر شدن buffer چه اتفاقی می افتد؟
بله درست حدس زدید پس از اتمام فضای بافر اگر همچنان دیتایی درحال ریخته شدن درون buffer باشد برنامه کرش خواهد کرد
به مقدار دقیق حافظه ذخیره شده offset گفته می شود برای مثال درون مموری این امکان وجود دارد که یک متغیر char که برای آن 500 بایت درون stack رزرو شده است 524 بایت offset داشته باشد
مقدار دقیق offset را می توان با pattern و کم کردن آن از آدرس رجیستر EIP پس از اتمام فضای بافر به دست آورد.
مقدار دقیق offset بسیار کاربردی می باشد چون ما می دانیم که چگونه می توانیم shellcode خود را درون یک بافر inject کنیم که برنامه دچار crash نشود علاوه بر این offset به صورت مستقیم درون فرمول محاسبه finally address بسیاری از آدرس های حافظه نقش مستقیم دارد
مانند
Base Register - register segement(DI, ES, SS, CS, ...) - offset = finally address
فرمول بالا جهت دادن آدرس نهایی و دیتای نهایی با محاسبه سگمنت و بیس رجیستر به cpu استفاده می شود.
اگر ما بتوانیم shellcode خود را در زمان انتهای بافر اینجکت کنیم موفق میشویم byte code دلخواه خود را برای مثال برای گرفتن uid روت از یک فایل دارای دسترسی suid root کسب کنیم و با استفاده از buffer overflow کد آسیب پذیر را اکسپلویت کنیم و privilege escalation کنیم.
در حالی که ASLR و DEP امکان این اکسپلویتیشن را کاهش میدهند با تکنیک هایی مانند ROP می توان آنها را bypass کرد و به uid روت رسید.
🔥4
<red teaming>
<introduction to NS(Network Security)> <1>
در این پارت که پارت اول از ضمیمه های امنیت شبکه می باشد به معرفی راه ها و منابع یادگیری این field خواهیم پرداخت.
امنیت شبکه چیست؟
دنیای ارتباطات سالها است که یکی از پر جهش ترین علوم فناوری در جهان می باشد و با تکامل به شدت قوی ای رو به رو می باشد .
بر همین روال سالها پیش توسعه دهندگان پروتکل های شبکه می اندیشیدند تا به روش های امنیتی دست پیدا کنند که بتوانند DATA کاربران را با سلامت و در امنیت کامل به مقصد برسانند .
از همین رو در packet header که ساختار یک packet (بسته) می باشد مکانیزم های امنیتی به وجود آمد تا بتوان packet را سالم به مقصد رساند .
packet یا datagram
واحدی انتقال دیتا در لایه 3 از مدل OSI می باشد که نام آن Network Layer می باشد .
-------------------------------------------------
یکی از پروتکل های مهم در سطح شبکه IP یا Internet Protocol می باشد.
IP که با RFC 791 شناخته می شود دارای پکتی به طول MTU می باشد که در مسیر مشخص می شود.
MTU چیست؟
در اصل MTU یا Maximum Transmition Unite تایین کننده ی حد اکثر طول پکت هدر می باشد می باشد که در مسیر برای ترافیک تایین می شود .
اگر یک packet در شبکه از MTU گذر کند عمل fragmentation برای آن انجام می شود .
طول ip fragment header حدودا 13 bit می باشد که با بالارفتن طول ip header از MTU می تواند طول fragment هم بالا رود .
---------------------------------------------------
اولین لایه محافظتی سرور ها و اجزای شبکه از پکت های مخرب checksum می باشد .
checksum
مکانیزمی می باشد که یک کلید مبنای 16 ارائه می دهد که اگر packet در راه دچار تغییر شود firewall می تواند آن را drop یا block کند .
--------------------------------------------------
NS
شامل field های مختلفی می شود که در ادامه به آن می پردازیم .
SOC
NOC
the expert of firewalls
...
در بالا ۳ نمونه از شغل های مرتبط با NS نام برده شد که از محبوب ترین ها می باشد و SOC در متون بالا توضیح داده شده است .
در پارت بعدی از NS introduction به معرفی کامل IP packet header خواهیم پرداخت .
<introduction to NS(Network Security)> <1>
در این پارت که پارت اول از ضمیمه های امنیت شبکه می باشد به معرفی راه ها و منابع یادگیری این field خواهیم پرداخت.
امنیت شبکه چیست؟
دنیای ارتباطات سالها است که یکی از پر جهش ترین علوم فناوری در جهان می باشد و با تکامل به شدت قوی ای رو به رو می باشد .
بر همین روال سالها پیش توسعه دهندگان پروتکل های شبکه می اندیشیدند تا به روش های امنیتی دست پیدا کنند که بتوانند DATA کاربران را با سلامت و در امنیت کامل به مقصد برسانند .
از همین رو در packet header که ساختار یک packet (بسته) می باشد مکانیزم های امنیتی به وجود آمد تا بتوان packet را سالم به مقصد رساند .
packet یا datagram
واحدی انتقال دیتا در لایه 3 از مدل OSI می باشد که نام آن Network Layer می باشد .
-------------------------------------------------
یکی از پروتکل های مهم در سطح شبکه IP یا Internet Protocol می باشد.
IP که با RFC 791 شناخته می شود دارای پکتی به طول MTU می باشد که در مسیر مشخص می شود.
MTU چیست؟
در اصل MTU یا Maximum Transmition Unite تایین کننده ی حد اکثر طول پکت هدر می باشد می باشد که در مسیر برای ترافیک تایین می شود .
اگر یک packet در شبکه از MTU گذر کند عمل fragmentation برای آن انجام می شود .
طول ip fragment header حدودا 13 bit می باشد که با بالارفتن طول ip header از MTU می تواند طول fragment هم بالا رود .
---------------------------------------------------
اولین لایه محافظتی سرور ها و اجزای شبکه از پکت های مخرب checksum می باشد .
checksum
مکانیزمی می باشد که یک کلید مبنای 16 ارائه می دهد که اگر packet در راه دچار تغییر شود firewall می تواند آن را drop یا block کند .
--------------------------------------------------
NS
شامل field های مختلفی می شود که در ادامه به آن می پردازیم .
SOC
NOC
the expert of firewalls
...
در بالا ۳ نمونه از شغل های مرتبط با NS نام برده شد که از محبوب ترین ها می باشد و SOC در متون بالا توضیح داده شده است .
در پارت بعدی از NS introduction به معرفی کامل IP packet header خواهیم پرداخت .
🔥2👏2
<Red Teaming>
<introduction to NS(Network Security)> <2>
در پارت قبلی درمورد یکسری مبانی از نقشه راه و مبانی مقدماتی network security بحث کردیم .
حال امروز به مبحث IP Datagram Header خواهیم پرداخت و با ساختار پکت های ip آشنا خواهیم شد .
IP DATAGRAM HEADER
یا پکت هدر پروتکل اینترنت شامل هدر های از جمله:
version:
این هدر شامل ورژن پروتکل می شود که یا v4 خواهد بود با v6 به دلیل اینکه ip در دو ورژن v6 و v4 می باشد که 4 bit سایز این هدر است.
size: 4 bit
IHL:
یا internet header lenght همانطور که از نامش مشخص می باشد این هدر با سایز 4 bit نشان دهنده ی سایز هدر اینترنت می باشد .
size: 4 bit
TOS:
یا type of service که نشاندهندهی پارامترهای انتزاعی کیفیت سرویس مورد نظر است و این پارامترها برای هدایت انتخاب پارامترهای واقعی سرویس هنگام انتقال یک دیتاگرام از طریق یک شبکهی خاص استفاده میشوند.
تایپ می تواند شامل موارد زیر باشند که از بیت 0 تا 7 مشمول می شود :
Bits 0-2: Precedence
Bit 3: 0 = Normal Delay
1 = Low Delay
Bits 4:
0 = Normal Throughput
1 = High Throughput
Bits 5:
0 = Normal Relibility
1 = High Relibility
Bit 6-7: Reserved for Future Use
size: 8 bit
precedence این هدر شامل موارد زیر می باشد:
111 - Network Control
110 - Internetwork Control
101 - CRITIC/ECP
100 - Flash Override
011 - Flash
010 - Immediate
001 - Priority
000 - Routine
total lenght:
در اصل total lenght طول دیتاگرام است که بر حسب اکتت اندازهگیری میشود شامل هدر اینترنت و دادهها این فیلد اجازه میدهد طول یک دیتاگرام تا 65535 اکتت باشد چنین دیتاگرامهای طولانی برای اکثر host و شبکهها غیرعملی هستند همه host ها باید آماده باشند تا دیتاگرامهایی تا 576 اکتت را بپذیرند (چه به صورت کامل و چه به صورت قطعه قطعه یا fragment) توصیه میشود host ها فقط در صورتی دیتاگرامهایی بزرگتر از 576 اکتت ارسال کنند که مطمئن باشند مقصد آماده پذیرش دیتاگرامهای بزرگتر است
size: 16 bit
identification:
این هدر یک مقدار شناسایی است که توسط فرستنده برای کمک به اسمبل fragment های یک دیتاگرام اختصاص داده شده است
size: 16 bit
flags:
فلگ ها 3 بیت می باشند که در زیر توضیح داده می شود و این فلگ ها نربدط به هدر fragment می باشند .
Bit 0: reserved, must be zero
Bit 1: (DF) 0 = May Fragment, 1 = Don't Fragment
Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments
size: 3 bit
fragment offset:
این فیلد شامل دیتا های دیگر دیتا گرام می باشد در صورت بزرگ بودن دیتاگرام این فیلد به کار گرفته خواهد شد .
size: 13 bit
time to live(ttl):
این فیلد حداکثر زمانی را که دیتاگرام اجازه دارد در سیستم اینترنت باقی بماند نشان میدهد اگر این فیلد حاوی مقدار صفر باشد دیتاگرام باید از بین برود این فیلد در پردازش هدر اینترنت اصلاح میشود زمان بر حسب ثانیه اندازهگیری میشود، اما از آنجایی که هر ماژولی که یک دیتاگرام را پردازش میکند حتی اگر دیتاگرام را در کمتر از یک ثانیه پردازش کند، باید TTL را حداقل یک واحد کاهش دهد TTL را باید فقط به عنوان یک حد بالا برای زمانی که یک دیتاگرام ممکن است وجود داشته باشد در نظر گرفت هدف این است که دیتاگرامهای غیرقابل تحویل کنار گذاشته شوند و حداکثر طول عمر دیتاگرام محدود شود
size: 8 bit
protocol:
این فیلد پروتکل سطح بعدی مورد استفاده در بخش دادهی دیتاگرام اینترنت را نشان میدهد
size: 8 bit
header checksum:
از آنجایی که برخی از فیلدهای هدر تغییر میکنند (مثلاً ttl) این مقدار در هر نقطهای که هدر اینترنت پردازش میشود دوباره محاسبه و تأیید میشود الگوریتم هدر به شرح زیر است:
فیلد هدر مکمل یک ۱۶ بیتی از مجموع مکمل یک تمام کلمات ۱۶ بیتی در هدر است. برای محاسبه هدر مقدار فیلد هدر صفر است این یک سربرگ ساده برای محاسبه است و شواهد تجربی نشان میدهد که کافی است اما موقت است و بسته به تجربه بیشتر ممکن است با یک روش CRC جایگزین شود
source address:
این فیلد شامل آی پی آدرس فرستنده می شود.
destination address:
این فیلد شامل آی پی آدرس گیرنده می شود.
-------------------------------------------------
در بالا هدر های اصلی یک ip datagram نام برده و توضیح داده شد اما به جز این هدر ها آفست های دیگری تحت عنوان option و padding موجود می باشد که مقدار آنها متغیر می باشد .
با بعضی از ابزار ها مانند scapy می توان هدر های ip را دستکاری و چنج کرد .
<introduction to NS(Network Security)> <2>
در پارت قبلی درمورد یکسری مبانی از نقشه راه و مبانی مقدماتی network security بحث کردیم .
حال امروز به مبحث IP Datagram Header خواهیم پرداخت و با ساختار پکت های ip آشنا خواهیم شد .
IP DATAGRAM HEADER
یا پکت هدر پروتکل اینترنت شامل هدر های از جمله:
version:
این هدر شامل ورژن پروتکل می شود که یا v4 خواهد بود با v6 به دلیل اینکه ip در دو ورژن v6 و v4 می باشد که 4 bit سایز این هدر است.
size: 4 bit
IHL:
یا internet header lenght همانطور که از نامش مشخص می باشد این هدر با سایز 4 bit نشان دهنده ی سایز هدر اینترنت می باشد .
size: 4 bit
TOS:
یا type of service که نشاندهندهی پارامترهای انتزاعی کیفیت سرویس مورد نظر است و این پارامترها برای هدایت انتخاب پارامترهای واقعی سرویس هنگام انتقال یک دیتاگرام از طریق یک شبکهی خاص استفاده میشوند.
تایپ می تواند شامل موارد زیر باشند که از بیت 0 تا 7 مشمول می شود :
Bits 0-2: Precedence
Bit 3: 0 = Normal Delay
1 = Low Delay
Bits 4:
0 = Normal Throughput
1 = High Throughput
Bits 5:
0 = Normal Relibility
1 = High Relibility
Bit 6-7: Reserved for Future Use
size: 8 bit
precedence این هدر شامل موارد زیر می باشد:
111 - Network Control
110 - Internetwork Control
101 - CRITIC/ECP
100 - Flash Override
011 - Flash
010 - Immediate
001 - Priority
000 - Routine
total lenght:
در اصل total lenght طول دیتاگرام است که بر حسب اکتت اندازهگیری میشود شامل هدر اینترنت و دادهها این فیلد اجازه میدهد طول یک دیتاگرام تا 65535 اکتت باشد چنین دیتاگرامهای طولانی برای اکثر host و شبکهها غیرعملی هستند همه host ها باید آماده باشند تا دیتاگرامهایی تا 576 اکتت را بپذیرند (چه به صورت کامل و چه به صورت قطعه قطعه یا fragment) توصیه میشود host ها فقط در صورتی دیتاگرامهایی بزرگتر از 576 اکتت ارسال کنند که مطمئن باشند مقصد آماده پذیرش دیتاگرامهای بزرگتر است
size: 16 bit
identification:
این هدر یک مقدار شناسایی است که توسط فرستنده برای کمک به اسمبل fragment های یک دیتاگرام اختصاص داده شده است
size: 16 bit
flags:
فلگ ها 3 بیت می باشند که در زیر توضیح داده می شود و این فلگ ها نربدط به هدر fragment می باشند .
Bit 0: reserved, must be zero
Bit 1: (DF) 0 = May Fragment, 1 = Don't Fragment
Bit 2: (MF) 0 = Last Fragment, 1 = More Fragments
size: 3 bit
fragment offset:
این فیلد شامل دیتا های دیگر دیتا گرام می باشد در صورت بزرگ بودن دیتاگرام این فیلد به کار گرفته خواهد شد .
size: 13 bit
time to live(ttl):
این فیلد حداکثر زمانی را که دیتاگرام اجازه دارد در سیستم اینترنت باقی بماند نشان میدهد اگر این فیلد حاوی مقدار صفر باشد دیتاگرام باید از بین برود این فیلد در پردازش هدر اینترنت اصلاح میشود زمان بر حسب ثانیه اندازهگیری میشود، اما از آنجایی که هر ماژولی که یک دیتاگرام را پردازش میکند حتی اگر دیتاگرام را در کمتر از یک ثانیه پردازش کند، باید TTL را حداقل یک واحد کاهش دهد TTL را باید فقط به عنوان یک حد بالا برای زمانی که یک دیتاگرام ممکن است وجود داشته باشد در نظر گرفت هدف این است که دیتاگرامهای غیرقابل تحویل کنار گذاشته شوند و حداکثر طول عمر دیتاگرام محدود شود
size: 8 bit
protocol:
این فیلد پروتکل سطح بعدی مورد استفاده در بخش دادهی دیتاگرام اینترنت را نشان میدهد
size: 8 bit
header checksum:
از آنجایی که برخی از فیلدهای هدر تغییر میکنند (مثلاً ttl) این مقدار در هر نقطهای که هدر اینترنت پردازش میشود دوباره محاسبه و تأیید میشود الگوریتم هدر به شرح زیر است:
فیلد هدر مکمل یک ۱۶ بیتی از مجموع مکمل یک تمام کلمات ۱۶ بیتی در هدر است. برای محاسبه هدر مقدار فیلد هدر صفر است این یک سربرگ ساده برای محاسبه است و شواهد تجربی نشان میدهد که کافی است اما موقت است و بسته به تجربه بیشتر ممکن است با یک روش CRC جایگزین شود
source address:
این فیلد شامل آی پی آدرس فرستنده می شود.
destination address:
این فیلد شامل آی پی آدرس گیرنده می شود.
-------------------------------------------------
در بالا هدر های اصلی یک ip datagram نام برده و توضیح داده شد اما به جز این هدر ها آفست های دیگری تحت عنوان option و padding موجود می باشد که مقدار آنها متغیر می باشد .
با بعضی از ابزار ها مانند scapy می توان هدر های ip را دستکاری و چنج کرد .
🔥4
<Red Teaming>
<the art of exploitation> <3>
در پارت قبل از هنر طراحی اکسپلویت به مبحث stack overflow پرداختیم.
اکنون قصد ما فوکوس بر روی مبانی heap overflow می باشد .
heap چیست؟
heap
یک بخش حافظه از مموری می باشد که به صورت دستی مقدار دهی می شود .
برای مثال در کد c پایین مشاهده خواهید کرد:
در کد بالا یک متغیر با نام x تعریف شده با نوع دیتای int که قرار است مقداری عددی را از کاربر بگیرد و بعد آن را درون x با سایز 500 بایت ذخیره کند .
در کد بالا 500 بایت برای متغیر x در stack به طور اتومات ذخیره خواهد شد .
ولی در کد پایین:
در کد بالا که به زبان c نوشته شده ما یک کد را دارا می باشیم که به جز مدیریت غلط حافظه کار دیکری انجام نمی دهد .
در کد بالا با تابع malloc از هدر فایل stdlib می توانیم 20 بایت از حافظه را به متغیر x از نوع داده char بدهیم .
متغیر x چون یک متغیر معمولی char است نمی تواند از malloc بحره ببرد و آدرسی را در heap ذخیره کند اما اگر یک متغیر pointer از نوع داده char باشد می تواند .
در خطوط بعد کد یک رشته ی 19 اندیسی را می گیرد با حسب 0\ برای خاتمه دادن به بایت های حافظه تا حد اکثر 19 بایت .
اما یک مشکلی در اینجا وجود دارد این کد با شروط مدیریت نشده و کاربر اگر بخواهد می تواند یک رشته ی بالای 19 بایت به متغیر اینجکت کند و آن را دچار کرش کند .
یا اگر برنامه دارای دسترسی suid root باشد می تواند با byte code injection یک شل کد را به heap تزریق کند .
عمل بالا شروطی دارد و شروط آن دانستن offset دقیق می باشد .
اگر فرد بتواند آخرین دستور اجرایی بر روی offset را پیدا کند که pattern قابل انجام می باشد می تواند از روی ثبات EIP آخرین دستور را پیدا کند .
و با یک کد c یا اینجکشن تحت خط فرمان با perl شل کد خود را به جای دستور آخر قرار دهد .
در bss overflow هم به همین رکند می توان بر روی متغیر های static یک bytecode را اینجکت نمود .
در قسمت بعد به DTor ها خواهیم پرداخت .
<the art of exploitation> <3>
در پارت قبل از هنر طراحی اکسپلویت به مبحث stack overflow پرداختیم.
اکنون قصد ما فوکوس بر روی مبانی heap overflow می باشد .
heap چیست؟
heap
یک بخش حافظه از مموری می باشد که به صورت دستی مقدار دهی می شود .
برای مثال در کد c پایین مشاهده خواهید کرد:
#include <stdio.h>
int main(int argc, int* argv[]) {
int x[500];
scanf("%d", &x);
printf("this is your number: %d", x);
return 0;
}
در کد بالا یک متغیر با نام x تعریف شده با نوع دیتای int که قرار است مقداری عددی را از کاربر بگیرد و بعد آن را درون x با سایز 500 بایت ذخیره کند .
در کد بالا 500 بایت برای متغیر x در stack به طور اتومات ذخیره خواهد شد .
ولی در کد پایین:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char* x = malloc(20);
scanf("%19s", x);
printf("%s", x);
return 0;
}
در کد بالا که به زبان c نوشته شده ما یک کد را دارا می باشیم که به جز مدیریت غلط حافظه کار دیکری انجام نمی دهد .
در کد بالا با تابع malloc از هدر فایل stdlib می توانیم 20 بایت از حافظه را به متغیر x از نوع داده char بدهیم .
متغیر x چون یک متغیر معمولی char است نمی تواند از malloc بحره ببرد و آدرسی را در heap ذخیره کند اما اگر یک متغیر pointer از نوع داده char باشد می تواند .
در خطوط بعد کد یک رشته ی 19 اندیسی را می گیرد با حسب 0\ برای خاتمه دادن به بایت های حافظه تا حد اکثر 19 بایت .
اما یک مشکلی در اینجا وجود دارد این کد با شروط مدیریت نشده و کاربر اگر بخواهد می تواند یک رشته ی بالای 19 بایت به متغیر اینجکت کند و آن را دچار کرش کند .
یا اگر برنامه دارای دسترسی suid root باشد می تواند با byte code injection یک شل کد را به heap تزریق کند .
عمل بالا شروطی دارد و شروط آن دانستن offset دقیق می باشد .
اگر فرد بتواند آخرین دستور اجرایی بر روی offset را پیدا کند که pattern قابل انجام می باشد می تواند از روی ثبات EIP آخرین دستور را پیدا کند .
و با یک کد c یا اینجکشن تحت خط فرمان با perl شل کد خود را به جای دستور آخر قرار دهد .
در bss overflow هم به همین رکند می توان بر روی متغیر های static یک bytecode را اینجکت نمود .
در قسمت بعد به DTor ها خواهیم پرداخت .
❤4
MAC Address چیه و چرا توی لایه دوم قرار داره؟
برای اینکه بفهمیم MAC چی هست، اول باید یه مرور کوتاه روی مدل OSI داشته باشیم:
لایه ۱ (Physical): این لایه فقط وظیفه داره بیتها (۰ و ۱) رو از طریق سیم، فیبر یا امواج رادیویی منتقل کنه. اینجا هیچ آدرسدهی وجود نداره.
لایه ۲ (Data Link): اینجاست که بیتها رو تبدیل به فریم (Frame) میکنه و مشخص میکنه این فریم باید به کدوم دستگاه روی همون شبکهی محلی (LAN) بره.
اینجا ما به چیزی به اسم آدرس سختافزاری (Hardware Address) یا همون MAC Address نیاز داریم.
MAC Address دقیقاً چیه؟
یک آدرس منحصربهفرد سختافزاریه که روی کارت شبکه (NIC) دستگاهها مثل لپتاپ، موبایل، پرینتر، روتر و... توسط سازنده (Vendor) ثبت میشه.
معمولاً به شکل ۶ جفت عدد هگزادسیمال نمایش داده میشه، مثل:
00:1A:2B:3C:4D:5E
در هدر هر فریم اترنت دو تا MAC داریم:
Source MAC → فرستنده
Destination MAC → گیرنده
به همین دلیل میگیم MAC در لایه دوم قرار داره، چون بدون اون دستگاهها داخل یک LAN نمیتونن همدیگه رو پیدا کنن.
چطور MAC رو ببینیم؟
توی ویندوز کافیه دستور زیر رو توی CMD وارد کنید:
ipconfig /all
اونجا قسمت Physical Address رو میبینید که همون MAC Address هست.
ساختار و طول MAC Address
طول MAC Address دقیقاً ۴۸ بیت (۶ بایت)ه.
هر بایت ۸ بیت هست → در مجموع ۶×۸ = ۴۸ بیت.
در نمایش هگزادسیمال، ۱۲ رقم (۶ جفت) داریم.
مثال:
D4-F5-47-8C-1A-2B
۲۴ بیت اول (OUI) = مشخصکنندهی شرکت سازنده (مثلاً Intel، Cisco، Apple).
۲۴ بیت دوم = شماره سریال کارت شبکه.
برای اینکه بفهمیم MAC چی هست، اول باید یه مرور کوتاه روی مدل OSI داشته باشیم:
لایه ۱ (Physical): این لایه فقط وظیفه داره بیتها (۰ و ۱) رو از طریق سیم، فیبر یا امواج رادیویی منتقل کنه. اینجا هیچ آدرسدهی وجود نداره.
لایه ۲ (Data Link): اینجاست که بیتها رو تبدیل به فریم (Frame) میکنه و مشخص میکنه این فریم باید به کدوم دستگاه روی همون شبکهی محلی (LAN) بره.
اینجا ما به چیزی به اسم آدرس سختافزاری (Hardware Address) یا همون MAC Address نیاز داریم.
MAC Address دقیقاً چیه؟
یک آدرس منحصربهفرد سختافزاریه که روی کارت شبکه (NIC) دستگاهها مثل لپتاپ، موبایل، پرینتر، روتر و... توسط سازنده (Vendor) ثبت میشه.
معمولاً به شکل ۶ جفت عدد هگزادسیمال نمایش داده میشه، مثل:
00:1A:2B:3C:4D:5E
در هدر هر فریم اترنت دو تا MAC داریم:
Source MAC → فرستنده
Destination MAC → گیرنده
به همین دلیل میگیم MAC در لایه دوم قرار داره، چون بدون اون دستگاهها داخل یک LAN نمیتونن همدیگه رو پیدا کنن.
چطور MAC رو ببینیم؟
توی ویندوز کافیه دستور زیر رو توی CMD وارد کنید:
ipconfig /all
اونجا قسمت Physical Address رو میبینید که همون MAC Address هست.
ساختار و طول MAC Address
طول MAC Address دقیقاً ۴۸ بیت (۶ بایت)ه.
هر بایت ۸ بیت هست → در مجموع ۶×۸ = ۴۸ بیت.
در نمایش هگزادسیمال، ۱۲ رقم (۶ جفت) داریم.
مثال:
D4-F5-47-8C-1A-2B
۲۴ بیت اول (OUI) = مشخصکنندهی شرکت سازنده (مثلاً Intel، Cisco، Apple).
۲۴ بیت دوم = شماره سریال کارت شبکه.
🔥3❤1🤮1💩1🙏1🖕1
<Red Teaming>
<the ART of EXPLOITATION> <4:1>
در پارت قبلی ما به مسئله BSS Overflow و Heap Overflow پرداختیم و به این نتیجه رسیدیم که اگر یک بافر سمت heap یا bss اگر درست کنترل و رزرو نشود می تواند مشکلات جدی را مانند stack overflow به وجود بیاورد .
در همین باره مسئله ای برای طراحان درایور ها و طراحان مکانیزم های امنیتی سیستم عامل پیش آمد که چطور می توانند از این ضعف ها برنامه ها را حفظ کنند .
در بعضی موارد می توان حتی stack های کنترل شده را هم مورد آسیب پذیری قرار داد و کنترل آنها را به دست گرفت .
به همین دلیل مکانیزم هایی مانند ASLR برای رندوم کردن آدرس های حافظه و DEP برای کنترل بافر و جلو گیری از Execution کد در بافر طراحی شد .
در زندگی امروزه خیلی از متخصصان برای تاکتیک هایی مانند privillege escalation ترجیح می دهند از winapi ها استفاده کنند که همین api ها بدون دسته ای از ماژول های Nt از زیر مجموعه ntdll.dll فقط به user mode دسترسی خواهند داشت و دسترسی بسیار پایینی به kernel mode خواهند داشت .
اکثر متخصصانی که در سیستم هایی با مکانیزم امنیتی فوق پیچیده اکثر تاکتیک ها را به winapi محدود می کنند متخصصان low level هستند ، اما متخصصان APT ای که از zero day استفاده می کنند اکثرا افراد متخصص high level می باشند که برای مکانیزم ها می توانند در هر شرایطی یک حمله طراحی کنند ، اکثر این متخصصان علمی برابر با توسعه دهنده مکانیزم های امنیتی و توسعه دهندگان درایور های سیستم عامل ها دارند و یا دانشی فراتر از آنها دارند .
در سیستم عامل های زیرمجموعه کرنل لینوکس مانند kali بر پایه debian ما winapi هایی را دارا نمی باشیم اما رابط های برنامه نویسی را مانند POSIX یا Portable Operating System Interface دارا می باشیم دارای توابعی مانند:
file managment:
read()
write()
open()
flow managment:
fork()
exec()
thread managment:
pthread_create()
اکثر توزیع های لینوکسی با POSIX سازگار می باشند اما POSIX هم مانند wiapi محدودیت هایی را دارا می باشد شاید از winapi هم محدود تر !
حالا ما قصد آشنایی با یک سری جداول و stub handler هارا در این بخش از پارت چهارم داریم به نام GOT/PLT در ELF برای linux و IAT/TF درون windows .
اول با این جداول در لینوکس آشنا خواهیم شد :
PLT (Procedure Linkage Table)
این مکانیزم یک جدول Linkage می باشد که بر پایه GOT کار می کند و در ادامه به کار آن آشنا خواهیم شد .
GOT(Global Offset Table)
این مکانیزم یک جدول می باشد که در ELF آدرس توابع خارجی مانند ()exit از libc را درون خود نگه میدارد.
PLT/GOT:
در ادامه وقتی کد اجرا خواهد شد باید توابع خارجی توسط Dynamic Loader درون جداول GOT پیاده سازی شوند .
وقتی تابع توسط داینامیک لودر درون GOT پیاده سازی شد ، و وقتی نیاز به اجرای یک تابع خارجی باشد PLT به دنبال آدرس آن تابع درون GOT خواهد گشت و اگر آن را پیدا کند با یک jmp به آن آدرس پرش می کند و آن را فراخوانی می کند .
اگر آدرس آن تابع درون GOT وجود نداشته باشد به داینامیک لودر یک سیگنال خواهد فرستاد که داینامیک لودر موظف به resolve کردن توابع مد نظر درون GOT می باشد .
در بخش بعد به معرفی IAT/TF خواهیم پرداخت
<the ART of EXPLOITATION> <4:1>
در پارت قبلی ما به مسئله BSS Overflow و Heap Overflow پرداختیم و به این نتیجه رسیدیم که اگر یک بافر سمت heap یا bss اگر درست کنترل و رزرو نشود می تواند مشکلات جدی را مانند stack overflow به وجود بیاورد .
در همین باره مسئله ای برای طراحان درایور ها و طراحان مکانیزم های امنیتی سیستم عامل پیش آمد که چطور می توانند از این ضعف ها برنامه ها را حفظ کنند .
در بعضی موارد می توان حتی stack های کنترل شده را هم مورد آسیب پذیری قرار داد و کنترل آنها را به دست گرفت .
به همین دلیل مکانیزم هایی مانند ASLR برای رندوم کردن آدرس های حافظه و DEP برای کنترل بافر و جلو گیری از Execution کد در بافر طراحی شد .
در زندگی امروزه خیلی از متخصصان برای تاکتیک هایی مانند privillege escalation ترجیح می دهند از winapi ها استفاده کنند که همین api ها بدون دسته ای از ماژول های Nt از زیر مجموعه ntdll.dll فقط به user mode دسترسی خواهند داشت و دسترسی بسیار پایینی به kernel mode خواهند داشت .
اکثر متخصصانی که در سیستم هایی با مکانیزم امنیتی فوق پیچیده اکثر تاکتیک ها را به winapi محدود می کنند متخصصان low level هستند ، اما متخصصان APT ای که از zero day استفاده می کنند اکثرا افراد متخصص high level می باشند که برای مکانیزم ها می توانند در هر شرایطی یک حمله طراحی کنند ، اکثر این متخصصان علمی برابر با توسعه دهنده مکانیزم های امنیتی و توسعه دهندگان درایور های سیستم عامل ها دارند و یا دانشی فراتر از آنها دارند .
در سیستم عامل های زیرمجموعه کرنل لینوکس مانند kali بر پایه debian ما winapi هایی را دارا نمی باشیم اما رابط های برنامه نویسی را مانند POSIX یا Portable Operating System Interface دارا می باشیم دارای توابعی مانند:
file managment:
read()
write()
open()
flow managment:
fork()
exec()
thread managment:
pthread_create()
اکثر توزیع های لینوکسی با POSIX سازگار می باشند اما POSIX هم مانند wiapi محدودیت هایی را دارا می باشد شاید از winapi هم محدود تر !
حالا ما قصد آشنایی با یک سری جداول و stub handler هارا در این بخش از پارت چهارم داریم به نام GOT/PLT در ELF برای linux و IAT/TF درون windows .
اول با این جداول در لینوکس آشنا خواهیم شد :
PLT (Procedure Linkage Table)
این مکانیزم یک جدول Linkage می باشد که بر پایه GOT کار می کند و در ادامه به کار آن آشنا خواهیم شد .
GOT(Global Offset Table)
این مکانیزم یک جدول می باشد که در ELF آدرس توابع خارجی مانند ()exit از libc را درون خود نگه میدارد.
PLT/GOT:
در ادامه وقتی کد اجرا خواهد شد باید توابع خارجی توسط Dynamic Loader درون جداول GOT پیاده سازی شوند .
وقتی تابع توسط داینامیک لودر درون GOT پیاده سازی شد ، و وقتی نیاز به اجرای یک تابع خارجی باشد PLT به دنبال آدرس آن تابع درون GOT خواهد گشت و اگر آن را پیدا کند با یک jmp به آن آدرس پرش می کند و آن را فراخوانی می کند .
اگر آدرس آن تابع درون GOT وجود نداشته باشد به داینامیک لودر یک سیگنال خواهد فرستاد که داینامیک لودر موظف به resolve کردن توابع مد نظر درون GOT می باشد .
در بخش بعد به معرفی IAT/TF خواهیم پرداخت
❤4
جاسوسی سختافزاری و شنود در تلفنهای هوشمند
تلفنهای همراه از چندین لایهی اساسی برای پردازش و انتقال داده تشکیل شدهاند:
1. سختافزار (Hardware):
شامل اجزای اصلی مانند تراشه پردازشی (CPU/SOC)، حافظهها (RAM، Flash)، ماژولهای ارتباطی (Baseband/Modem، Wi-Fi، Bluetooth)، و سنسورها (میکروفون، GPS، ژیروسکوپ، دوربین و …).
2. فریمور (Firmware):
نرمافزار سطح پایینی است که مستقیماً بر روی سختافزار اجرا شده و کنترل مستقیم آن را بر عهده دارد.
3. سیستمعامل (Operating System مانند Android یا iOS):
لایهای بالاتر که تعامل کاربر با دستگاه از طریق آن انجام میشود.
زمانی که جاسوسی در سطح سختافزار یا فریمور صورت بگیرد، دادهها پیش از رسیدن به سیستمعامل یا کاربر جمعآوری و منتقل میشوند. به این نوع تهدید، جاسوسی سختافزاری گفته میشود.
روشهای احتمالی شنود سختافزاری
میکروفون یا ماژول صوتی:
در صورت دستکاری، قابلیت ضبط صدای محیط بدون نیاز به اجرای برنامه خاصی وجود دارد و دادهها میتوانند ذخیره یا ارسال شوند.
دوربین:
در صورت تغییرات در سطح فریمور، امکان ثبت تصویر یا ویدئو بدون فعالشدن نشانگر LED فراهم میشود.
ماژولهای ارتباطی (Wi-Fi، Bluetooth، GSM Modem):
در صورت آلودگی، میتوانند اطلاعات را مستقیماً به خارج از دستگاه منتقل کنند.
سنسورهای به ظاهر بیخطر: مانند ژیروسکوپ یا شتابسنج، که از طریق تحلیل لرزشها میتوانند بهطور غیرمستقیم اطلاعات صوتی یا حرکتی را استنتاج کنند.
تفاوت با جاسوسی نرمافزاری
در جاسوسی نرمافزاری لازم است بدافزاری روی گوشی نصب و توسط کاربر اجرا شود. این نوع حمله معمولاً قابل شناسایی و با حذف بدافزار یا ریست دستگاه برطرف میشود.
اما در جاسوسی سختافزاری، کد یا مدار مخرب مستقیماً در سطح برد اصلی یا تراشه تعبیه میشود. چنین تهدیدی با فرمت یا ریست از بین نمیرود و شناسایی و حذف آن بسیار دشوارتر است.
تلفنهای همراه از چندین لایهی اساسی برای پردازش و انتقال داده تشکیل شدهاند:
1. سختافزار (Hardware):
شامل اجزای اصلی مانند تراشه پردازشی (CPU/SOC)، حافظهها (RAM، Flash)، ماژولهای ارتباطی (Baseband/Modem، Wi-Fi، Bluetooth)، و سنسورها (میکروفون، GPS، ژیروسکوپ، دوربین و …).
2. فریمور (Firmware):
نرمافزار سطح پایینی است که مستقیماً بر روی سختافزار اجرا شده و کنترل مستقیم آن را بر عهده دارد.
3. سیستمعامل (Operating System مانند Android یا iOS):
لایهای بالاتر که تعامل کاربر با دستگاه از طریق آن انجام میشود.
زمانی که جاسوسی در سطح سختافزار یا فریمور صورت بگیرد، دادهها پیش از رسیدن به سیستمعامل یا کاربر جمعآوری و منتقل میشوند. به این نوع تهدید، جاسوسی سختافزاری گفته میشود.
روشهای احتمالی شنود سختافزاری
میکروفون یا ماژول صوتی:
در صورت دستکاری، قابلیت ضبط صدای محیط بدون نیاز به اجرای برنامه خاصی وجود دارد و دادهها میتوانند ذخیره یا ارسال شوند.
دوربین:
در صورت تغییرات در سطح فریمور، امکان ثبت تصویر یا ویدئو بدون فعالشدن نشانگر LED فراهم میشود.
ماژولهای ارتباطی (Wi-Fi، Bluetooth، GSM Modem):
در صورت آلودگی، میتوانند اطلاعات را مستقیماً به خارج از دستگاه منتقل کنند.
سنسورهای به ظاهر بیخطر: مانند ژیروسکوپ یا شتابسنج، که از طریق تحلیل لرزشها میتوانند بهطور غیرمستقیم اطلاعات صوتی یا حرکتی را استنتاج کنند.
تفاوت با جاسوسی نرمافزاری
در جاسوسی نرمافزاری لازم است بدافزاری روی گوشی نصب و توسط کاربر اجرا شود. این نوع حمله معمولاً قابل شناسایی و با حذف بدافزار یا ریست دستگاه برطرف میشود.
اما در جاسوسی سختافزاری، کد یا مدار مخرب مستقیماً در سطح برد اصلی یا تراشه تعبیه میشود. چنین تهدیدی با فرمت یا ریست از بین نمیرود و شناسایی و حذف آن بسیار دشوارتر است.
👏4🔥1
What is the APC?
A mechanism in Windows that allows you to execute functions asynchronously in threads With QueueUserAPC you can add a function (such as shellcode) to a thread queue and execute it with NtTestAlert .
What is the APC injection?
APC injection is a exploitation technique for reserving function execution in one thread flow
this technique is excuting shellcode in memory of the one thread
This technique is done using functions such as QueueUserAPC and NtTestAlert and has the ability to bypass a number of EDR security mechanisms However because it will be executed in memory a number of EDRs can detect it such as SentinelOne
example code for APC injection:
Outside of Training
thank you for following us
A mechanism in Windows that allows you to execute functions asynchronously in threads With QueueUserAPC you can add a function (such as shellcode) to a thread queue and execute it with NtTestAlert .
What is the APC injection?
APC injection is a exploitation technique for reserving function execution in one thread flow
this technique is excuting shellcode in memory of the one thread
This technique is done using functions such as QueueUserAPC and NtTestAlert and has the ability to bypass a number of EDR security mechanisms However because it will be executed in memory a number of EDRs can detect it such as SentinelOne
example code for APC injection:
#include <windows.h>
int main() {
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 1234);
LPVOID addr = VirtualAllocEx(hProcess, NULL, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
unsigned char code[] = "\x31\xc0\xc3";
WriteProcessMemory(hProcess, addr, code, sizeof(code), NULL);
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)QueueUserAPC, addr, 0, NULL);
CloseHandle(hThread);
CloseHandle(hProcess);
return 0;
}
Outside of Training
thank you for following us
🔥5❤1👏1
<Red Teaming>
<the ART of Exploitation> <4:2>
در پارت قبل به مسئله exploitation از طریقت جداول GOT/PLT پرداختیم که دو stub handler می باشند و در ELF و لینوکس کاربرد فراوانی دارند.
هم اکنون قصد آشنایی با IAT معادل جدول GOT و (TF(Thunk Function معادل جدول PLT در لینوکس را داریم.
این دو جدول کاربرد کاملا مشابهی را دارا می باشند
TF:
این جدول مانند procedure linkage table یک جدول linkage میباشد که مسئول jmp به توابع فراخوانی شده خارجی می باشد و فقط دارای دسترسی READ می باشد و قابل WRITE نمی باشد.
این جدول یعنی مانند TF آدرس توابع خارجی را از IAT دریافت میکند که IAT آدرس توابع خارجی خود را از dynamic loader دریافت میکند.
اگر قصد ما تغییر روند و فرایند آدرس دهی این جداول باشد باید آدرس مورد نظر در جدول IAT را overwrite کنیم.
برای مثال تابع ()exit در زبان c از هدر فایل stdio.h کاربرد خروج از فرایند را محیی میکند.
آدرس این تابع توسط DL درون IAT بازنشانی می شود و زمانی که نیاز به فراخوانی این تابع در برنامه مورد نظر باشد و نیاز به اسمبل شدن آن دستور باشد در این زمان جدول TF به آدرس آن تابع در IAT یک jmp میزند و آن تابع را فراخوانی میکند.
اگر قصد جا به جایی آدرس این توابع را در این جدتل داشته باشیم باید DEP و ASLR و CFG و HVCI را bypass کنیم تا نظارتی بر flow تابع جایگزین ما وجود نداشته باشد اولین قدم Address Leak میباشد برای دور زدن ASLR قدم دوم Return-Oriented Programming برای دور زدن DEP و قدم سوم بای پس Control Flow Guard از طریق پیدایش گجت های cfguard از طریق دستور "cfguard!" در windbg و یا immunity در قدم چهارم نیاز به بایپس HVCI برای کنترل نشدن جریان اجرای آدرس ها میباشد.
در پارت 5 از این آموزشات به راهکار عملی دستکاری IAT/TF و بای پس پروتکتور های ذکر شده خواهیم پرداخت
<the ART of Exploitation> <4:2>
در پارت قبل به مسئله exploitation از طریقت جداول GOT/PLT پرداختیم که دو stub handler می باشند و در ELF و لینوکس کاربرد فراوانی دارند.
هم اکنون قصد آشنایی با IAT معادل جدول GOT و (TF(Thunk Function معادل جدول PLT در لینوکس را داریم.
این دو جدول کاربرد کاملا مشابهی را دارا می باشند
TF:
این جدول مانند procedure linkage table یک جدول linkage میباشد که مسئول jmp به توابع فراخوانی شده خارجی می باشد و فقط دارای دسترسی READ می باشد و قابل WRITE نمی باشد.
این جدول یعنی مانند TF آدرس توابع خارجی را از IAT دریافت میکند که IAT آدرس توابع خارجی خود را از dynamic loader دریافت میکند.
اگر قصد ما تغییر روند و فرایند آدرس دهی این جداول باشد باید آدرس مورد نظر در جدول IAT را overwrite کنیم.
برای مثال تابع ()exit در زبان c از هدر فایل stdio.h کاربرد خروج از فرایند را محیی میکند.
آدرس این تابع توسط DL درون IAT بازنشانی می شود و زمانی که نیاز به فراخوانی این تابع در برنامه مورد نظر باشد و نیاز به اسمبل شدن آن دستور باشد در این زمان جدول TF به آدرس آن تابع در IAT یک jmp میزند و آن تابع را فراخوانی میکند.
اگر قصد جا به جایی آدرس این توابع را در این جدتل داشته باشیم باید DEP و ASLR و CFG و HVCI را bypass کنیم تا نظارتی بر flow تابع جایگزین ما وجود نداشته باشد اولین قدم Address Leak میباشد برای دور زدن ASLR قدم دوم Return-Oriented Programming برای دور زدن DEP و قدم سوم بای پس Control Flow Guard از طریق پیدایش گجت های cfguard از طریق دستور "cfguard!" در windbg و یا immunity در قدم چهارم نیاز به بایپس HVCI برای کنترل نشدن جریان اجرای آدرس ها میباشد.
در پارت 5 از این آموزشات به راهکار عملی دستکاری IAT/TF و بای پس پروتکتور های ذکر شده خواهیم پرداخت
❤7
what is the RootKit?
Rootkits are categorized into 5 types of rootkits.
The use of rootkits is generally to increase the attacker's access to the victim's system.
But the high performance can be changed and induce more complex tasks to the system.
Types of rootkits:
user-mode rootkit:
This type of rootkit includes access at the top layer of the operating system and has capabilities such as controlling surface access such as opening chrome and notepad or making changes to their data.
This rootkit works in ring3 and is considered a relatively low-risk rootkit.
kernel-mode rootkit:
This type of rootkit can have access between ring3 and ring0 and has access to control the process of processes and threads.
This type of rootkit is a little more complex in terms of risk, but still detectable.
Rootkits that run in the Windows registry can be of this type.
bootkits:
This type of rootkit operates in the boot loader and post process and has the ability to change the flows before the kernel loads and definitely has ring0 access and can take control of hardware sockets and even change the kernel loading flows.
This type of rootkit is dangerous but can still be found with special tools.
bios rootkit:
This type of rootkit can even control the boot loading flows and abuse all these flows and perform the work before all operations.
This type of rootkit is very dangerous but can still be detected with external boot and tools like kaspersky rescue disk.
hypervisor rootkit:
This is the ultimate level of rootkits that runs in the hypervisor layer and can copy all the system flows by virtualizing all those flows and taking control of a complete copy of the system.
This type of rootkit runs at the hardware firmware layer and is extremely dangerous because it can only be removed by resetting the system and changing the hardware.
Like the subVist rootkit, which is research.
Yes, my friends, as you have seen, roots can be extremely dangerous and in some cases, such as level 4 and 5, namely the bios rootkit and hypervisor rootkit, they can even cause explosions.
It is worth noting that level 4 and 5 rootkits can only be carried out with hardware and physical access.
Rootkits are categorized into 5 types of rootkits.
The use of rootkits is generally to increase the attacker's access to the victim's system.
But the high performance can be changed and induce more complex tasks to the system.
Types of rootkits:
user-mode rootkit:
This type of rootkit includes access at the top layer of the operating system and has capabilities such as controlling surface access such as opening chrome and notepad or making changes to their data.
This rootkit works in ring3 and is considered a relatively low-risk rootkit.
kernel-mode rootkit:
This type of rootkit can have access between ring3 and ring0 and has access to control the process of processes and threads.
This type of rootkit is a little more complex in terms of risk, but still detectable.
Rootkits that run in the Windows registry can be of this type.
bootkits:
This type of rootkit operates in the boot loader and post process and has the ability to change the flows before the kernel loads and definitely has ring0 access and can take control of hardware sockets and even change the kernel loading flows.
This type of rootkit is dangerous but can still be found with special tools.
bios rootkit:
This type of rootkit can even control the boot loading flows and abuse all these flows and perform the work before all operations.
This type of rootkit is very dangerous but can still be detected with external boot and tools like kaspersky rescue disk.
hypervisor rootkit:
This is the ultimate level of rootkits that runs in the hypervisor layer and can copy all the system flows by virtualizing all those flows and taking control of a complete copy of the system.
This type of rootkit runs at the hardware firmware layer and is extremely dangerous because it can only be removed by resetting the system and changing the hardware.
Like the subVist rootkit, which is research.
Yes, my friends, as you have seen, roots can be extremely dangerous and in some cases, such as level 4 and 5, namely the bios rootkit and hypervisor rootkit, they can even cause explosions.
It is worth noting that level 4 and 5 rootkits can only be carried out with hardware and physical access.
👏6❤3❤🔥2
<red team>
<persis><part 1>
what is the shell execution hijacking via ads?
در این پارت به سوال ads چیست و چه کاربردی دارد و shell execute hijacking چگونه با ads انجام می شود خواهیم پرداخت .
ads چیست؟
alternative data stream یک سرویس ویندوز است که که برای مدیریت stream ها در فایل ها ساخته شده است
stream چیست؟
یک دیتای اضافی که به فایل بایند می شود تا در هنگام اجرای فایل آن stream در پس زمینه فایل باشد تا در مواقع لزوم توسط نرم افزار جاری یا سیستم عامل خوانده شود .
آن stream می تواند متادیتای یک image باشد که در ads آن فایل قرار گرفته .
اگر یک فایل اجرایی exe درون stream یک عکس قرار گیرد چه اتفاقی خواهد افتاد؟
پاسخ واضح است آن stream در پس زمینه ی عکس وجود دارد تا زمانی که فراخوانی شود :
image:malware.exe
و زمانی که فراخوانی شود کاربر عکس را مشاهده خواهد کرد اما در پس زمینه malware.exe اجرا خواهد شد .
از این تکنیک در persistence به صورت مشابه با عنوان atexec یاد می شود .
حال اگر بخواهیم به صورت خودکار پس ازاجرای عکس بدون کامند یک فایل در پس زمینه اجرا شود چه کار کنیم؟
در این مواقع ما نیاز به یک vb script یا یک js script داریم تا برای shell execute استفاده شود .
در این حالت js script به فایل چسبانده خواهد شد و کار او این است که به هنگام اجرای عکس به صورت خودکار stream مورد نظر image:malware.exe اجرا شود.
حال اگر کاربر فقط بر روی عکس دابل کلیک کند shell ما execute خواهد شد و stream مورد نظر در پس زمینه اجرا خواهد شد .
در پست بعدی کد های مربوط به عملیات بالا در اختیار دوستان قرار خواهد گرفت .
این تکنیک همچنین با نام ads polyglot هم شناخته می شود .
#free_learning
<persis><part 1>
what is the shell execution hijacking via ads?
در این پارت به سوال ads چیست و چه کاربردی دارد و shell execute hijacking چگونه با ads انجام می شود خواهیم پرداخت .
ads چیست؟
alternative data stream یک سرویس ویندوز است که که برای مدیریت stream ها در فایل ها ساخته شده است
stream چیست؟
یک دیتای اضافی که به فایل بایند می شود تا در هنگام اجرای فایل آن stream در پس زمینه فایل باشد تا در مواقع لزوم توسط نرم افزار جاری یا سیستم عامل خوانده شود .
آن stream می تواند متادیتای یک image باشد که در ads آن فایل قرار گرفته .
اگر یک فایل اجرایی exe درون stream یک عکس قرار گیرد چه اتفاقی خواهد افتاد؟
پاسخ واضح است آن stream در پس زمینه ی عکس وجود دارد تا زمانی که فراخوانی شود :
image:malware.exe
و زمانی که فراخوانی شود کاربر عکس را مشاهده خواهد کرد اما در پس زمینه malware.exe اجرا خواهد شد .
از این تکنیک در persistence به صورت مشابه با عنوان atexec یاد می شود .
حال اگر بخواهیم به صورت خودکار پس ازاجرای عکس بدون کامند یک فایل در پس زمینه اجرا شود چه کار کنیم؟
در این مواقع ما نیاز به یک vb script یا یک js script داریم تا برای shell execute استفاده شود .
در این حالت js script به فایل چسبانده خواهد شد و کار او این است که به هنگام اجرای عکس به صورت خودکار stream مورد نظر image:malware.exe اجرا شود.
حال اگر کاربر فقط بر روی عکس دابل کلیک کند shell ما execute خواهد شد و stream مورد نظر در پس زمینه اجرا خواهد شد .
در پست بعدی کد های مربوط به عملیات بالا در اختیار دوستان قرار خواهد گرفت .
این تکنیک همچنین با نام ads polyglot هم شناخته می شود .
#free_learning
❤5🔥2❤🔥1