بررسی شیوهی نگهداری اطلاعات پروسهها در کرنل ویندوز
از دید کرنل ویندوز، هر پروسه دارای یک شی از ساختار EPROCESS بوده و اطلاعات پروسهها در یک لیست پیوندی حلقوی دو طرفه نگهداری میشود. متغیر سراسری PsActiveProcessHead اشارهگری به اولین و آخرین پروسه داشته «به خاطر دوطرفه بودن لیست پیوندی دارای دو اشارهگر Flink/Blink میباشد» و به کمک آن میتوان لیست را پیمایش کرد.
برای ایجاد لیست پیوندی، هر شی EPROCESS به کمک آیتمی به اسم ActiveProcessLinks که آن هم دو بخش Flink/Blink دارد پروسهها را به یکدیگر متصل کرده و به Offsetای از ساختار EPROCESS که مربوط به ActiveProcessLinks میباشد اشاره میکند. در این روند Flink به Offset پروسهی بعدی و Blink به Offset پروسهی قبلی اشاره میکند.
در این ویدئوی کوتاه که بخشی از کلاسهایم است به کمک WinDbg این لیست بررسی شده و اطلاعات پروسهها از آن استخراج میشود.
لینک ویدئو در یوتیوب:
https://youtu.be/zLxAtROZJWo
لینک ویدئو در آپارات:
https://aparat.com/v/iq3Xy
#ShortWinInternals #windows #internals #EPROCESS #WinDbg #ActiveProcessLinks
از دید کرنل ویندوز، هر پروسه دارای یک شی از ساختار EPROCESS بوده و اطلاعات پروسهها در یک لیست پیوندی حلقوی دو طرفه نگهداری میشود. متغیر سراسری PsActiveProcessHead اشارهگری به اولین و آخرین پروسه داشته «به خاطر دوطرفه بودن لیست پیوندی دارای دو اشارهگر Flink/Blink میباشد» و به کمک آن میتوان لیست را پیمایش کرد.
برای ایجاد لیست پیوندی، هر شی EPROCESS به کمک آیتمی به اسم ActiveProcessLinks که آن هم دو بخش Flink/Blink دارد پروسهها را به یکدیگر متصل کرده و به Offsetای از ساختار EPROCESS که مربوط به ActiveProcessLinks میباشد اشاره میکند. در این روند Flink به Offset پروسهی بعدی و Blink به Offset پروسهی قبلی اشاره میکند.
در این ویدئوی کوتاه که بخشی از کلاسهایم است به کمک WinDbg این لیست بررسی شده و اطلاعات پروسهها از آن استخراج میشود.
لینک ویدئو در یوتیوب:
https://youtu.be/zLxAtROZJWo
لینک ویدئو در آپارات:
https://aparat.com/v/iq3Xy
#ShortWinInternals #windows #internals #EPROCESS #WinDbg #ActiveProcessLinks
YouTube
ActiveProcessLinks Examination in WinDbg [PER]
از دید کرنل ویندوز، هر پروسه دارای یک شی از ساختار EPROCESS بوده و اطلاعات پروسهها در یک لیست پیوندی حلقوی دو طرفه نگهداری میشود. متغیر سراسری PsActiveProcessHead اشارهگری به اولین و آخرین پروسه داشته (به خاطر دوطرفه بودن لیست پیوندی دارای دو اشارهگر…
❤14👍8👏1
دعوت از جامعهی IT مخصوصا متخصصان و مدرسان حوزهی امنیت و لینوکس برای داوری و بیان مشکلات کارم
امسال تجربهی جالبی در زمینهی تدریس یک دوره با شرکت SITS «زیرساخت امن خدمات تراکنشی بانک ملت» داشتم که سوالات و ابهامات زیادی برایم ایجاد کرد که باعث شد تصمیم بگیرم روند کار، تجربهام و حتی ویدئوهای دوره رو اینجا به اشتراک بگذارم و امیدوارم دوستان همراهی کنند و با بررسی مطالب دوره، اشتراکگذاری، نظر دادن و ذکر اشکالاتی که میبینند به من کمک کنند که هم کارم رو بهبود بدم و هم اینکه مجدد کلاسی نداشته باشم که در نهایت پولم رو دریافت نکنم!
تابستان امسال از طرف SITS با من تماس گرفتند برای یک دوره که Internal و Forensic لینوکس رو تدریس کنم. من یک سرفصلی آماده و ارسال کردم که مورد تایید قرار گرفت و چون قرارداد شخصی نمیبستند من با آکادمی هماهنگ کردم و توافق شد که دوره از طرف آکادمی برگزار بشه. مدت زمان دوره ۴۰ ساعت در نظر گرفته شده و قیمت دوره بر اساس ۴۰ساعت بسته شده و پیشفاکتور برای SITS ارسال شد. چون قرار بود دو روز در هفته و هر روز ۳ساعت کلاس داشته باشیم من گفتم که ۱۴جلسهی ۳ ساعته و در مجموع ۴۲ساعت کلاس برگزار میکنیم و در فاکتور همین مدت زمان قید شد. با واریز ۵۰درصد مبلغ قرارداد، دوره اوایل مهر به صورت آنلاین آغاز شد.
با اینکه من ابتدای هر کلاسی کل کلاس رو مرور میکنم و میگم که چه ترتیبی پیش گرفته میشه و چه مطالبی بیان میشه، در ۴جلسهی اول تقریبا هر جلسه یک بحثی در مورد سرفصل داشتیم و من باید توضیح میدادم که چه روندی داریم طی میکنیم و چرا مطالب به این صورت بیان میشه. مثل این بود که سرفصل و مطالب دوره برای افرادی که در دوره شرکت کردهاند مبهمه و نمیدونند دوره در چه زمینهایه و چه چیزی رو میخواد پوشش بده. این بود که من پس از جلسهی چهارم کلاس رو کنسل کردم و ذکر کردم که بررسی کنید آیا این دوره رو نیاز دارید و آیا سرفصلی که خودتون تایید کردهاید درسته یا خیر! از آکادمی با من تماس گرفتند که دوره رو ادامه بدید و مشکل با رابط سازمانی بررسی و حل شده است. این بود که دوره ادامه پیدا کرد ولی تعداد شرکت کنندگان همچنان ثابت نبوده و خیلی متغیر بود!
چند جلسهی دیگر پیش رفت و در یک جلسه من بودم تنهای تنها!!! کسی از SITS آنلاین نشد و پس از پیگیری مشخص شد درگیر جابجایی بودهاند و فرصت اطلاع رسانی برای کنسل کردن کلاس نداشتهاند و من فقط بیکار بودم که از کار زدم و آنلاین شدم و منتظر تدریس! این بود که به پشتیبانی آکادمی اطلاع دادم به خاطر این موضوع باید یک جلسه از کلاس کم کنیم و کلاس بجای ۱۴ جلسه بشه ۱۳ جلسه چون من آنلاین و آمادهی تدریس بودم ولی از نظر دوستان وقت من ارزش اطلاع رسانی برای کنسل کردن نداشته! پشتیبان آکادمی هم این موضوع رو به رابط سازمانی اطلاع رسانی کردند.
دوره ادامه داشت تا اواخر دوره هم مجدد این حرکت تکرار شده و ۲ نفر پس از ۱۰ دقیقه که من منتظر بودم حاضر شدند و هرچقدر هم من ازشون تلاش کردم بپرسم که آیا شروع کنیم و بقیه میآیند یا خیر پاسخی دریافت نکردم و یک جلسهی دیگر نیز به خاطر دوستان کنسل شد. اینبار هم میخواستم یک جلسهی دیگر کسر کنم ولی فقط به پشتیبانی آکادمی اطلاع دادم که کلاس ۱۳ جلسه بیشتر نبوده و علیرغم اینکه من مطلب دارم برای بیان کردن در ۱۳ جلسه مطالب دوره جمع شده و کلاس پایان میپذیرد. این بود که اواخر آذرماه دوره با برگزاری ۱۳ جلسه به اتمام رسید.
الان حدود ۲ماه از اتمام دوره میگذرد و پس از کلی پیگیری توسط دوستان آکادمی «که واقعا از همشون کمال قدردانی و تشکر رو دارم» پیگیریهای خودم، بیان مفصل روندی که طی شده توسط خودم به صورت voice در گروه دوره که ۳۰ نفر از کارشناسان تا افراد ردهبالای SITS هم در آن بودند، نه تنها ۵۰درصد مابقی دوره تسویه نشده، حتی پاسخی دریافت نکردهام که اشکال دوره چی بوده و چرا پرداخت انجام نشده. آیا مطالب طبق سرفصل پیش نرفته؟ آیا من بی اخلاقی در برخورد و تدریس داشتهام؟ آیا مدت زمان دوره کم بوده؟ خلاصه اینکه من به خطایم آگاه نشدم!
در لینک زیر تمامی مطالب دوره از سرفصل تا اسلاید و ویدئو و کد وجود دارد. لطفا دوستان بررسی کنند و بازخورد دهند. اگر مطالب براتون مفید است استفاده کرده و منتشر کنید تا به دست افراد بیشتری برسه ولی حتما نگاه نقادانه داشته و اشکالات کارم رو بیان کنید که منم کارم رو بهبود بدم.
https://1drv.ms/f/s!Ai-nCVsaY1b5tzTMfCBo4c6MeIi_?e=eE1rpU
تشکر و سپاس فراوان.
امسال تجربهی جالبی در زمینهی تدریس یک دوره با شرکت SITS «زیرساخت امن خدمات تراکنشی بانک ملت» داشتم که سوالات و ابهامات زیادی برایم ایجاد کرد که باعث شد تصمیم بگیرم روند کار، تجربهام و حتی ویدئوهای دوره رو اینجا به اشتراک بگذارم و امیدوارم دوستان همراهی کنند و با بررسی مطالب دوره، اشتراکگذاری، نظر دادن و ذکر اشکالاتی که میبینند به من کمک کنند که هم کارم رو بهبود بدم و هم اینکه مجدد کلاسی نداشته باشم که در نهایت پولم رو دریافت نکنم!
تابستان امسال از طرف SITS با من تماس گرفتند برای یک دوره که Internal و Forensic لینوکس رو تدریس کنم. من یک سرفصلی آماده و ارسال کردم که مورد تایید قرار گرفت و چون قرارداد شخصی نمیبستند من با آکادمی هماهنگ کردم و توافق شد که دوره از طرف آکادمی برگزار بشه. مدت زمان دوره ۴۰ ساعت در نظر گرفته شده و قیمت دوره بر اساس ۴۰ساعت بسته شده و پیشفاکتور برای SITS ارسال شد. چون قرار بود دو روز در هفته و هر روز ۳ساعت کلاس داشته باشیم من گفتم که ۱۴جلسهی ۳ ساعته و در مجموع ۴۲ساعت کلاس برگزار میکنیم و در فاکتور همین مدت زمان قید شد. با واریز ۵۰درصد مبلغ قرارداد، دوره اوایل مهر به صورت آنلاین آغاز شد.
با اینکه من ابتدای هر کلاسی کل کلاس رو مرور میکنم و میگم که چه ترتیبی پیش گرفته میشه و چه مطالبی بیان میشه، در ۴جلسهی اول تقریبا هر جلسه یک بحثی در مورد سرفصل داشتیم و من باید توضیح میدادم که چه روندی داریم طی میکنیم و چرا مطالب به این صورت بیان میشه. مثل این بود که سرفصل و مطالب دوره برای افرادی که در دوره شرکت کردهاند مبهمه و نمیدونند دوره در چه زمینهایه و چه چیزی رو میخواد پوشش بده. این بود که من پس از جلسهی چهارم کلاس رو کنسل کردم و ذکر کردم که بررسی کنید آیا این دوره رو نیاز دارید و آیا سرفصلی که خودتون تایید کردهاید درسته یا خیر! از آکادمی با من تماس گرفتند که دوره رو ادامه بدید و مشکل با رابط سازمانی بررسی و حل شده است. این بود که دوره ادامه پیدا کرد ولی تعداد شرکت کنندگان همچنان ثابت نبوده و خیلی متغیر بود!
چند جلسهی دیگر پیش رفت و در یک جلسه من بودم تنهای تنها!!! کسی از SITS آنلاین نشد و پس از پیگیری مشخص شد درگیر جابجایی بودهاند و فرصت اطلاع رسانی برای کنسل کردن کلاس نداشتهاند و من فقط بیکار بودم که از کار زدم و آنلاین شدم و منتظر تدریس! این بود که به پشتیبانی آکادمی اطلاع دادم به خاطر این موضوع باید یک جلسه از کلاس کم کنیم و کلاس بجای ۱۴ جلسه بشه ۱۳ جلسه چون من آنلاین و آمادهی تدریس بودم ولی از نظر دوستان وقت من ارزش اطلاع رسانی برای کنسل کردن نداشته! پشتیبان آکادمی هم این موضوع رو به رابط سازمانی اطلاع رسانی کردند.
دوره ادامه داشت تا اواخر دوره هم مجدد این حرکت تکرار شده و ۲ نفر پس از ۱۰ دقیقه که من منتظر بودم حاضر شدند و هرچقدر هم من ازشون تلاش کردم بپرسم که آیا شروع کنیم و بقیه میآیند یا خیر پاسخی دریافت نکردم و یک جلسهی دیگر نیز به خاطر دوستان کنسل شد. اینبار هم میخواستم یک جلسهی دیگر کسر کنم ولی فقط به پشتیبانی آکادمی اطلاع دادم که کلاس ۱۳ جلسه بیشتر نبوده و علیرغم اینکه من مطلب دارم برای بیان کردن در ۱۳ جلسه مطالب دوره جمع شده و کلاس پایان میپذیرد. این بود که اواخر آذرماه دوره با برگزاری ۱۳ جلسه به اتمام رسید.
الان حدود ۲ماه از اتمام دوره میگذرد و پس از کلی پیگیری توسط دوستان آکادمی «که واقعا از همشون کمال قدردانی و تشکر رو دارم» پیگیریهای خودم، بیان مفصل روندی که طی شده توسط خودم به صورت voice در گروه دوره که ۳۰ نفر از کارشناسان تا افراد ردهبالای SITS هم در آن بودند، نه تنها ۵۰درصد مابقی دوره تسویه نشده، حتی پاسخی دریافت نکردهام که اشکال دوره چی بوده و چرا پرداخت انجام نشده. آیا مطالب طبق سرفصل پیش نرفته؟ آیا من بی اخلاقی در برخورد و تدریس داشتهام؟ آیا مدت زمان دوره کم بوده؟ خلاصه اینکه من به خطایم آگاه نشدم!
در لینک زیر تمامی مطالب دوره از سرفصل تا اسلاید و ویدئو و کد وجود دارد. لطفا دوستان بررسی کنند و بازخورد دهند. اگر مطالب براتون مفید است استفاده کرده و منتشر کنید تا به دست افراد بیشتری برسه ولی حتما نگاه نقادانه داشته و اشکالات کارم رو بیان کنید که منم کارم رو بهبود بدم.
https://1drv.ms/f/s!Ai-nCVsaY1b5tzTMfCBo4c6MeIi_?e=eE1rpU
تشکر و سپاس فراوان.
❤45👍27🤔1
OS Internals
دعوت از جامعهی IT مخصوصا متخصصان و مدرسان حوزهی امنیت و لینوکس برای داوری و بیان مشکلات کارم امسال تجربهی جالبی در زمینهی تدریس یک دوره با شرکت SITS «زیرساخت امن خدمات تراکنشی بانک ملت» داشتم که سوالات و ابهامات زیادی برایم ایجاد کرد که باعث شد تصمیم…
دوستانی که در لینکدین فعال هستند لطفا در اشتراک گذاری و بیان نظرات در لینکدین از طریق لینک زیر کمک کنند.
https://www.linkedin.com/posts/akazemi67_%D8%A7%D9%85%D8%B3%D8%A7%D9%84-%D8%AA%D8%AC%D8%B1%D8%A8%D9%87%DB%8C-%D8%AC%D8%A7%D9%84%D8%A8%DB%8C-%D8%AF%D8%B1-%D8%B2%D9%85%DB%8C%D9%86%D9%87%DB%8C-%D8%AA%D8%AF%D8%B1%DB%8C%D8%B3-%DB%8C%DA%A9-%D8%AF%D9%88%D8%B1%D9%87-activity-7156656054695608321-mxvW
https://www.linkedin.com/posts/akazemi67_%D8%A7%D9%85%D8%B3%D8%A7%D9%84-%D8%AA%D8%AC%D8%B1%D8%A8%D9%87%DB%8C-%D8%AC%D8%A7%D9%84%D8%A8%DB%8C-%D8%AF%D8%B1-%D8%B2%D9%85%DB%8C%D9%86%D9%87%DB%8C-%D8%AA%D8%AF%D8%B1%DB%8C%D8%B3-%DB%8C%DA%A9-%D8%AF%D9%88%D8%B1%D9%87-activity-7156656054695608321-mxvW
👍17❤11
OS Internals
دعوت از جامعهی IT مخصوصا متخصصان و مدرسان حوزهی امنیت و لینوکس برای داوری و بیان مشکلات کارم امسال تجربهی جالبی در زمینهی تدریس یک دوره با شرکت SITS «زیرساخت امن خدمات تراکنشی بانک ملت» داشتم که سوالات و ابهامات زیادی برایم ایجاد کرد که باعث شد تصمیم…
برخی با دانلود مطالب دوره از OneDrive مایکروسافت مشکل داشتند، با کمک یکی از دوستان کل دوره روی تلگرام آپلود شده و میتونید از لینک زیر دانلود کنید:
https://t.me/akazemi67_courses/23
به همت یکی دیگر از دوستان دوره بر روی مگا هم قرار گرفت:
https://mega.nz/folder/U3E1XThA#I8QoMr74favg2xPcmQNrVw
https://t.me/akazemi67_courses/23
به همت یکی دیگر از دوستان دوره بر روی مگا هم قرار گرفت:
https://mega.nz/folder/U3E1XThA#I8QoMr74favg2xPcmQNrVw
Telegram
akazemi67 Courses
فایلهای زیر مربوط به دورهی Linux Internals and Forensics هست که در لینک زیر توضیح دادهام:
https://t.me/OxAA55/115
https://t.me/OxAA55/115
❤45👍1
📚 انتشار دوره Windows Internals and Memory Analysis در مکتبخونه و یک تخفیف ۵۰درصدی برای ثبتنام
🗓️ سال ۹۷ اولین همکاری من با مکتبخونه با انتشار دورهای در زمینهی شبکه شکل گرفت که تجربهی خوبی بود.
از آن زمان تا کنون چندبار تلاش شد که مجدد همکاری شکل گرفته و دورهی دیگری از طریق مکتبخونه منتشر کنم ولی متاسفانه به دلیل مشغلهی کاری و سختی آماده کردن دورهی آفلاین این امر میسر نشد.
ℹ️ امسال دورهی Windows Internals and Memory Analysis را به صورت آفلاین آماده کردم که زحمت زیادی داشته و انرژی زیادی نیز ازم گرفت.
🎯 با صحبتی که با تیم خوب مکتبخونه داشتم بنا بر این شد که این دوره روی سایت مکتبخونه منتشر شده و از این به بعد از این طریق ارائه بشه، به این امید که افراد بیشتری ازش استقبال کرده و مخاطب بیشتری داشته باشه.
✅ میتونید دوره رو از طریق لینک زیر مشاهده و ثبتنام کنید:
yun.ir/rx6jy2
📴 برای دریافت ۵۰ درصد تخفیف، در زمان خرید کد tahlil-kazemi را وارد کنید.
#WindowsInternals #Course #Training #Maktabkhooneh
🗓️ سال ۹۷ اولین همکاری من با مکتبخونه با انتشار دورهای در زمینهی شبکه شکل گرفت که تجربهی خوبی بود.
از آن زمان تا کنون چندبار تلاش شد که مجدد همکاری شکل گرفته و دورهی دیگری از طریق مکتبخونه منتشر کنم ولی متاسفانه به دلیل مشغلهی کاری و سختی آماده کردن دورهی آفلاین این امر میسر نشد.
ℹ️ امسال دورهی Windows Internals and Memory Analysis را به صورت آفلاین آماده کردم که زحمت زیادی داشته و انرژی زیادی نیز ازم گرفت.
🎯 با صحبتی که با تیم خوب مکتبخونه داشتم بنا بر این شد که این دوره روی سایت مکتبخونه منتشر شده و از این به بعد از این طریق ارائه بشه، به این امید که افراد بیشتری ازش استقبال کرده و مخاطب بیشتری داشته باشه.
✅ میتونید دوره رو از طریق لینک زیر مشاهده و ثبتنام کنید:
yun.ir/rx6jy2
📴 برای دریافت ۵۰ درصد تخفیف، در زمان خرید کد tahlil-kazemi را وارد کنید.
#WindowsInternals #Course #Training #Maktabkhooneh
مکتبخونه
آموزش اینترنال و تحلیل حافظه ویندوز
این دوره با هدف کنار هم قرار دادن مباحث عمیق سیستمعامل و ترکیب آن با برنامهنویسی و تحلیل حافظه منبع خوبی برای محققان امنیت در حوزههای مختلف است.
❤35👍2🤔1
سلام خدمت همهی همراهان
🌹 سال نو مبارک 🌹
🪴امیدوارم در 403 به جای خطا خوردنها و ممنوع شدنها، گشایشهایی برای همهی شما در راه باشد و به بهترینها برسید.
🎯 برای امسال برنامهی تهیه یکسری آموزش جدید و خاص رو دارم که به مرور اعلام میکنم.
🧩 برنامه انتشار ویدئو از InTERnAL ویندور و لینوکس هم مثل قبل ادامه خواهد داشت.
🌺 به امید بهترینها برای همه
🌹 سال نو مبارک 🌹
🪴امیدوارم در 403 به جای خطا خوردنها و ممنوع شدنها، گشایشهایی برای همهی شما در راه باشد و به بهترینها برسید.
🎯 برای امسال برنامهی تهیه یکسری آموزش جدید و خاص رو دارم که به مرور اعلام میکنم.
🧩 برنامه انتشار ویدئو از InTERnAL ویندور و لینوکس هم مثل قبل ادامه خواهد داشت.
🌺 به امید بهترینها برای همه
❤47👏4👍1👎1
مروری بر حافظهی مجازی در ویندوز
وقتی یک برنامه اجرا میشود، برای آن پروسهای ایجاد شده که امکانات مختلفی از جمله دسترسی به حافظه را فراهم میکند. پروسهها مستقیم به حافظهی فیزیکی (همان RAM) دسترسی نداشته و یک لایهی Abstraction توسط سیستمعامل ایجاد میشود که به آن حافظهی مجازی میگویند.
این لایه وظایفی دارد که بخشی از آن به صورت خلاصه عبارتند از:
• مدیریت اینکه داده دقیقا در کدام آدرس RAM قرار دارد و Map کردن آن در فضای مجازی پروسه
• استفاده از Hard Disk در صورت کم بودن RAM بدون اینکه پروسه از آن اطلاع داشته باشد
• جلوگیری از تکرار داده در حافظهی فیزیکی و Map کردن بخشی که بین چند پروسه مشترک است برای آنها
• کنترل دسترسی به اطلاعات خاص و تعیین permission برای داده
• دسترسی به دادهها به صورت یکسری Chunk بجای دسترسی بایت به بایت (تعریف Page)
از طرف دیگر از دید پروسه کل فضای آدرسدهی ممکن (در مدل ۳۲بیتی ۲گیگابایت و در مدل ۶۴بیتی ۱۲۸ترابایت) قابل تخصیص بوده و میتوان از آن استفاده نمود ولی اینکه واقعا چقدر از آن قابل استفاده است بسته به میزان RAM موجود و میزان Hardای دارد که برای استفاده به عنوان حافظه در سیستمعامل تعیین شده است.
ویندوز امکان رزرو کردن کل فضای آدرسدهی ممکن را به پروسهها میدهد ولی برای استفادهی واقعی و قراردادن داده در آن باید آن فضا commit شده و در این مرحله است که امکانپذیر بودن آن با توجه به میزان کل فضای موجود، توسط سیستمعامل چک شده و اگر امکانپذیر بود به پروسه امکان دسترسی داده میشود.
در ابزارهای مختلفی که در ویندوز وجود دارند (مثل Task Manager, Process Explorer) یکسری Counter برای اطلاع پیدا کردن از وضعیت حافظه در سیستم و میزان فضای رزرو یا استفاده شده توسط پروسهها وجود دارد که میتوان به کمک آنها از اتفاقاتی که برای حافظه رخ میدهد اطلاع پیدا کرد.
در این ویدئو مروری بر وظایف حافظهی مجازی در ویندوز انجام گرفته و Counterهای موجود، برای بررسی آن در ابزارهای مختلف شرح داده میشوند.
لینک ویدئو در یوتیوب:
https://youtu.be/x5AnJpGBdW4
لینک ویدئو در آپارات:
https://aparat.com/v/NIsUi
#ShortWinInternals #windows #memory #internals #VirtualMemory #MemoryCounters
وقتی یک برنامه اجرا میشود، برای آن پروسهای ایجاد شده که امکانات مختلفی از جمله دسترسی به حافظه را فراهم میکند. پروسهها مستقیم به حافظهی فیزیکی (همان RAM) دسترسی نداشته و یک لایهی Abstraction توسط سیستمعامل ایجاد میشود که به آن حافظهی مجازی میگویند.
این لایه وظایفی دارد که بخشی از آن به صورت خلاصه عبارتند از:
• مدیریت اینکه داده دقیقا در کدام آدرس RAM قرار دارد و Map کردن آن در فضای مجازی پروسه
• استفاده از Hard Disk در صورت کم بودن RAM بدون اینکه پروسه از آن اطلاع داشته باشد
• جلوگیری از تکرار داده در حافظهی فیزیکی و Map کردن بخشی که بین چند پروسه مشترک است برای آنها
• کنترل دسترسی به اطلاعات خاص و تعیین permission برای داده
• دسترسی به دادهها به صورت یکسری Chunk بجای دسترسی بایت به بایت (تعریف Page)
از طرف دیگر از دید پروسه کل فضای آدرسدهی ممکن (در مدل ۳۲بیتی ۲گیگابایت و در مدل ۶۴بیتی ۱۲۸ترابایت) قابل تخصیص بوده و میتوان از آن استفاده نمود ولی اینکه واقعا چقدر از آن قابل استفاده است بسته به میزان RAM موجود و میزان Hardای دارد که برای استفاده به عنوان حافظه در سیستمعامل تعیین شده است.
ویندوز امکان رزرو کردن کل فضای آدرسدهی ممکن را به پروسهها میدهد ولی برای استفادهی واقعی و قراردادن داده در آن باید آن فضا commit شده و در این مرحله است که امکانپذیر بودن آن با توجه به میزان کل فضای موجود، توسط سیستمعامل چک شده و اگر امکانپذیر بود به پروسه امکان دسترسی داده میشود.
در ابزارهای مختلفی که در ویندوز وجود دارند (مثل Task Manager, Process Explorer) یکسری Counter برای اطلاع پیدا کردن از وضعیت حافظه در سیستم و میزان فضای رزرو یا استفاده شده توسط پروسهها وجود دارد که میتوان به کمک آنها از اتفاقاتی که برای حافظه رخ میدهد اطلاع پیدا کرد.
در این ویدئو مروری بر وظایف حافظهی مجازی در ویندوز انجام گرفته و Counterهای موجود، برای بررسی آن در ابزارهای مختلف شرح داده میشوند.
لینک ویدئو در یوتیوب:
https://youtu.be/x5AnJpGBdW4
لینک ویدئو در آپارات:
https://aparat.com/v/NIsUi
#ShortWinInternals #windows #memory #internals #VirtualMemory #MemoryCounters
❤12👍6👏1
شیوهی دریافت حافظه توسط برنامهها و درایورها در ویندوز
در پست قبلی در مورد حافظهی مجازی در ویندوز صحبت کردیم و وظایف این لایه و پارامترهایی که در ابزارهای مختلف برای بررسی میزان حافظهی تخصیص داده شده به پروسهها وجود دارند را مرور کردیم. در این پست جزئیات دریافت حافظه از ویندوز توسط برنامهها و درایورها را شرح داده و این فرآیند را در سمت کرنل عمیقتر بررسی میکنیم.
در user mode چند لایه API برای دریافت حافظه از سیستمعامل ویندوز وجود دارد. در پایینترین سطح، APIهای VirtualAlloc وجود دارند که هیچگونه مدیریتی بر روی حافظهی دریافت شده انجام نداده و حافظه را در واحدهایی به اندازهی Page (پیشفرض 4KB) تخصیص میدهند. این APIها امکان reserve/commit کردن حافظه را فراهم کرده و برای کار با حافظههای بزرگ مناسب هستند.
لایهی بعدی APIهای حافظه که برای کار با اندازهای کوچک حافظه مثل چندبایت نیز مناسب است Heap میباشد. این APIها به صورت داخلی از APIهای لایهی قبلی استفاده کرده و نیازی به تخصیص حافظه در ابعاد Page را ندارند. بر روی این لایه است که زبانهایی مثل C/C++ پیادهسازیهای malloc/new و free/delete را انجام میدهند (جزئیات پیادهسازی وابسته به کامپایلر است) که مربوط به پیادهسازیهای Compilerها میباشد. در این لایه دیگر APIهای ویندوز مستقیم توسط برنامهنویس استفاده نشده و نیازی به کار با آنها ندارد.
اما در سمت کرنل ماجرا از چه قرار است؟ در سمت کرنل چیزی با عنوان VirtualAlloc/Heap وجود ندارد و به درایورها حافظه از طریق دو نوع Pool اختصاص داده میشود. اولین نوع Non-Paged Pool است که حافظهی تخصیص داده شده از آن تضمین میشود که همیشه در RAM باشد. این موضوع برای جلوگیری از Deadlock و Crash کردن درایور اهمیت دارد (جزئیات این موضوع بماند برای یک پست و ویدئوی دیگر!) نوع دوم Pool که حافظهی آن ممکن است در RAM نبوده و به دیسک منتقل شود Paged Pool است.
در این ویدئو جزئیات تخصیص حافظه در سمت کرنل و APIهای ExAllocatePool بررسی شده، در یک درایور تخصیص و آزاد شدن حافظه نمایش داده شده و سپس به کمک WinDbg حافظهی تخصیص داده شده به درایور بررسی میشود.
لینک ویدئو در یوتیوب:
https://youtu.be/pMPyT13jzwk
لینک ویدئو در آپارات:
https://aparat.com/v/VIvgR
#ShortWinInternals #windows #memory #internals #VirtualMemory #MemoryCounters #kernel #drivers #SystemPools #WinDbg
در پست قبلی در مورد حافظهی مجازی در ویندوز صحبت کردیم و وظایف این لایه و پارامترهایی که در ابزارهای مختلف برای بررسی میزان حافظهی تخصیص داده شده به پروسهها وجود دارند را مرور کردیم. در این پست جزئیات دریافت حافظه از ویندوز توسط برنامهها و درایورها را شرح داده و این فرآیند را در سمت کرنل عمیقتر بررسی میکنیم.
در user mode چند لایه API برای دریافت حافظه از سیستمعامل ویندوز وجود دارد. در پایینترین سطح، APIهای VirtualAlloc وجود دارند که هیچگونه مدیریتی بر روی حافظهی دریافت شده انجام نداده و حافظه را در واحدهایی به اندازهی Page (پیشفرض 4KB) تخصیص میدهند. این APIها امکان reserve/commit کردن حافظه را فراهم کرده و برای کار با حافظههای بزرگ مناسب هستند.
لایهی بعدی APIهای حافظه که برای کار با اندازهای کوچک حافظه مثل چندبایت نیز مناسب است Heap میباشد. این APIها به صورت داخلی از APIهای لایهی قبلی استفاده کرده و نیازی به تخصیص حافظه در ابعاد Page را ندارند. بر روی این لایه است که زبانهایی مثل C/C++ پیادهسازیهای malloc/new و free/delete را انجام میدهند (جزئیات پیادهسازی وابسته به کامپایلر است) که مربوط به پیادهسازیهای Compilerها میباشد. در این لایه دیگر APIهای ویندوز مستقیم توسط برنامهنویس استفاده نشده و نیازی به کار با آنها ندارد.
اما در سمت کرنل ماجرا از چه قرار است؟ در سمت کرنل چیزی با عنوان VirtualAlloc/Heap وجود ندارد و به درایورها حافظه از طریق دو نوع Pool اختصاص داده میشود. اولین نوع Non-Paged Pool است که حافظهی تخصیص داده شده از آن تضمین میشود که همیشه در RAM باشد. این موضوع برای جلوگیری از Deadlock و Crash کردن درایور اهمیت دارد (جزئیات این موضوع بماند برای یک پست و ویدئوی دیگر!) نوع دوم Pool که حافظهی آن ممکن است در RAM نبوده و به دیسک منتقل شود Paged Pool است.
در این ویدئو جزئیات تخصیص حافظه در سمت کرنل و APIهای ExAllocatePool بررسی شده، در یک درایور تخصیص و آزاد شدن حافظه نمایش داده شده و سپس به کمک WinDbg حافظهی تخصیص داده شده به درایور بررسی میشود.
لینک ویدئو در یوتیوب:
https://youtu.be/pMPyT13jzwk
لینک ویدئو در آپارات:
https://aparat.com/v/VIvgR
#ShortWinInternals #windows #memory #internals #VirtualMemory #MemoryCounters #kernel #drivers #SystemPools #WinDbg
YouTube
System Memory Pools in Windows [PER]
در سمت کرنل چیزی با عنوان VirtualAlloc/Heap وجود ندارد و به درایورها حافظه از طریق دو نوع Pool اختصاص داده میشود. اولین نوع Non-Paged Pool است که حافظهی تخصیص داده شده از آن تضمین میشود که همیشه در RAM باشد. این موضوع برای جلوگیری از Deadlock و Crash کردن…
👍10❤3
نحوهی استفادهی لینوکس از vDSO برای سرعت بخشیدن به فراخوانیهای سیستمی
اگر ساختار حافظهی پروسههای لینوکسی را مشاهده کنید (مثلا از طریق cat /proc/pid/maps) در کنار بخشهای مربوط به کد، داده، پشته، هیپ و کتابخانههای استفاده شده در برنامه، دو بخش نیز مشاهده میشود که عناوین vsyscall/vdso دارند که آدرسهای یکی مربوط به Kernel Mode بوده و دیگری آدرسهای User Modeای دارد.
این دو، مکانیزمهایی هستند که برای سرعت بخشیدن به اجرای syscallهایی که نرخ فراخوانی بالایی دارند استفاده میشوند. یکی از این syscallها gettimeofday است که به صورت مستقیم و غیر مستقیم توسط تعداد زیادی از توابع کتابخانهای فراخوانی میشود و به دلیل سنگین بودن فراخوانی syscall و رفتن به Kernel و پردازش درخواست و بازگشتن به User Mode در فضای آدرسدهی پروسه قرار میگیرند که کار فراخوانی سریعتر شده و نیاز به طی مسیر پیشفرض syscallها نباشد.
در لینوکس کل فضای در اختیار پروسه در دسترس بوده و امکان dump آن به کمک dd وجود دارد. در این ویدئو مروری بر روی کاربرد vDSO انجام گرفته، علت استفاده از آن به جای vsyscall شرح داده شده و به dump و بررسی vDSO و مشاهدهی توابع تعریف شده در آن میپردازیم.
ℹ️پ.ن: اگر دوست دارید که جزئیات system callها را در لینوکس بدانید، لینک انتهای پست را در کانالم چک کنید. من قبلا در یک ارائه جزئیات system callهای لینوکس از شیوهی تعریف آنها، نحوهی اضافه کردن یک syscall به کرنل لینوکس و جزئیاتی که در فراخوانی system callهای لینوکس وجود دارد را به صورت کامل شرح دادهام که میتوانید ویدئوی آنرا مشاهده کنید.
لینک ویدئوی vDSO در یوتیوب:
https://youtu.be/UK6annv-t-s
لینک ویدئوی vDSO در آپارات:
https://aparat.com/v/7HRz1
لینک پست مربوط به جزئیات syscall در لینوکس:
https://t.me/OxAA55/87
#ShortLinuxInternals #linux #internals #syscalls #systemcalls #ELF #dump #memory
اگر ساختار حافظهی پروسههای لینوکسی را مشاهده کنید (مثلا از طریق cat /proc/pid/maps) در کنار بخشهای مربوط به کد، داده، پشته، هیپ و کتابخانههای استفاده شده در برنامه، دو بخش نیز مشاهده میشود که عناوین vsyscall/vdso دارند که آدرسهای یکی مربوط به Kernel Mode بوده و دیگری آدرسهای User Modeای دارد.
این دو، مکانیزمهایی هستند که برای سرعت بخشیدن به اجرای syscallهایی که نرخ فراخوانی بالایی دارند استفاده میشوند. یکی از این syscallها gettimeofday است که به صورت مستقیم و غیر مستقیم توسط تعداد زیادی از توابع کتابخانهای فراخوانی میشود و به دلیل سنگین بودن فراخوانی syscall و رفتن به Kernel و پردازش درخواست و بازگشتن به User Mode در فضای آدرسدهی پروسه قرار میگیرند که کار فراخوانی سریعتر شده و نیاز به طی مسیر پیشفرض syscallها نباشد.
در لینوکس کل فضای در اختیار پروسه در دسترس بوده و امکان dump آن به کمک dd وجود دارد. در این ویدئو مروری بر روی کاربرد vDSO انجام گرفته، علت استفاده از آن به جای vsyscall شرح داده شده و به dump و بررسی vDSO و مشاهدهی توابع تعریف شده در آن میپردازیم.
ℹ️پ.ن: اگر دوست دارید که جزئیات system callها را در لینوکس بدانید، لینک انتهای پست را در کانالم چک کنید. من قبلا در یک ارائه جزئیات system callهای لینوکس از شیوهی تعریف آنها، نحوهی اضافه کردن یک syscall به کرنل لینوکس و جزئیاتی که در فراخوانی system callهای لینوکس وجود دارد را به صورت کامل شرح دادهام که میتوانید ویدئوی آنرا مشاهده کنید.
لینک ویدئوی vDSO در یوتیوب:
https://youtu.be/UK6annv-t-s
لینک ویدئوی vDSO در آپارات:
https://aparat.com/v/7HRz1
لینک پست مربوط به جزئیات syscall در لینوکس:
https://t.me/OxAA55/87
#ShortLinuxInternals #linux #internals #syscalls #systemcalls #ELF #dump #memory
YouTube
Virtual Dynamic Shared Object (vDSO) in Linux [PER]
اگر ساختار حافظهی پروسههای لینوکسی را مشاهده کنید (مثلا از طریق cat /proc/#pid#/maps) در کنار بخشهای مربوط به کد، داده، پشته، هیپ و کتابخانههای استفاده شده در برنامه، دو بخش نیز مشاهده میشود که عناوین vsyscall/vdso دارند که آدرسهای یکی مربوط به Kernel…
❤12👏4
مقدار صفر برای argc در برنامههای لینوکسی. چرا و چگونه؟
همه چیز از بررسی CVE-2021-4034 و کامپایل مجدد PolKit بر روی Ubuntu 22.04 شروع شد! تصمیم داشتم یک نسخهی آسیبپذیر PolKit رو با فعال کردن Debug Symbols کامپایل کرده و مراحل کامل این CVE رو در GDB بررسی کنم. به صورت خلاصه بگم که این آسیبپذیری در باینری pkexec وجود دارد و به کمک آن میتوان LPE انجام داد. یکی از شرایط استفاده از این آسیبپذیری این است که در زمان اجرای pkexec شرط argc==0 برقرار باشد که از طریق آن متغیرهای محلی خوانده شده و بتوان یک library مخرب را بارگذاری نمود.
از آنجایی که pkexec علاوه بر لینوکس بر روی Solaris, BSD هم قابل استفاده است، در مقالهی اصلی این CVE که توسط Qualys Security منتشر شده است متن زیر مشاهده میشود که از الزام argc==0 برای امکانپذیر بودن این LPE خبر میدهد.
OpenBSD is not exploitable, because its kernel refuses to execve() a program if argc is 0
پس فرض من این بود که در نسخههای اخیر لینوکس هم با کامپایل PolKit باید بتوان این آسیبپذیری را تست کرد. این بود که بر روی Ubuntu 22.04 یک نسخهی آسیبپذیر را کامپایل کرده و یک کد ساده به صورت زیر نوشتم که pkexec را اجرا کرده و argc==0 برقرار باشد.
void main() {
char *args[] = { NULL };
char *envs[] = {"SHELL=/bin/bash", 0};
execve("pkexec", args, envs);
}
با اجرای برنامه و زدن strace مشاهده شد که فراخوانی در سطح user طبق انتظار انجام شد.
execve("pkexec", [], 0x7ffe3883b200 /* 1 var */)
ولی دو تا مورد عجیب رخ داد. اول اینکه برنامه در gdb بر خلاف انتظار با argc==1 اجرا شده و argv[0] که اسم برنامه در آن قرار میگیرد و طبق مدل فراخوانی باید NULL میبود برابر “” شده بود. مورد دومی که عجیب بود پیام زیر در dmesg بود.
process 'exploit' launched 'pkexec' with NULL argv: empty string added
با رسیدن به این مرحله به سراغ Ubuntu 20.04 رفتم و همین کد را بر روی آن اجرا کردم که همه چیز طبق انتظار رخ داده و در gdb با رسیدن به main برنامهی pkexec مقدار argc==0 برقرار بوده و امکان تست CVE وجود داشت. اینجا واضح بود که در کرنلهای جدید لینوکس در فراخوانی سیستمی execve تغییراتی اعمال شده است که جلوی اجرای برنامهها با argc==0 گرفته شود. اینجا دیگه لازم بود کد کرنل چک شود!
با رفتن به github و بررسی فایل fs/exec.c کرنل لینوکس مشاهده شد که در تابع اجرای فراخوانی سیستمی execve کد زیر در March 2022 اضافه شده که جلوی اجرای برنامهها با argc==0 را میگیرد.
/*
* When argv is empty, add an empty string ("") as argv[0] to
* ensure confused userspace programs that start processing
* from argv[1] won't end up walking envp. See also
* bprm_stack_limits().
*/
if (bprm->argc == 0) {
retval = copy_string_kernel("", bprm);
if (retval < 0)
goto out_free;
bprm->argc = 1;
}
پس از این به بعد علاوه بر OpenBSD بر روی لینوکس نیز امکان اجرای آسیبپذیریهای این مدلی وجود نخواهد داشت! :-D
پ.ن: در آینده یک ویدئو از شیوهی کامل اجرای این CVE منتشر میکنم.
#linux #kernel #CVE #PolKit #pkexec #execve
همه چیز از بررسی CVE-2021-4034 و کامپایل مجدد PolKit بر روی Ubuntu 22.04 شروع شد! تصمیم داشتم یک نسخهی آسیبپذیر PolKit رو با فعال کردن Debug Symbols کامپایل کرده و مراحل کامل این CVE رو در GDB بررسی کنم. به صورت خلاصه بگم که این آسیبپذیری در باینری pkexec وجود دارد و به کمک آن میتوان LPE انجام داد. یکی از شرایط استفاده از این آسیبپذیری این است که در زمان اجرای pkexec شرط argc==0 برقرار باشد که از طریق آن متغیرهای محلی خوانده شده و بتوان یک library مخرب را بارگذاری نمود.
از آنجایی که pkexec علاوه بر لینوکس بر روی Solaris, BSD هم قابل استفاده است، در مقالهی اصلی این CVE که توسط Qualys Security منتشر شده است متن زیر مشاهده میشود که از الزام argc==0 برای امکانپذیر بودن این LPE خبر میدهد.
OpenBSD is not exploitable, because its kernel refuses to execve() a program if argc is 0
پس فرض من این بود که در نسخههای اخیر لینوکس هم با کامپایل PolKit باید بتوان این آسیبپذیری را تست کرد. این بود که بر روی Ubuntu 22.04 یک نسخهی آسیبپذیر را کامپایل کرده و یک کد ساده به صورت زیر نوشتم که pkexec را اجرا کرده و argc==0 برقرار باشد.
void main() {
char *args[] = { NULL };
char *envs[] = {"SHELL=/bin/bash", 0};
execve("pkexec", args, envs);
}
با اجرای برنامه و زدن strace مشاهده شد که فراخوانی در سطح user طبق انتظار انجام شد.
execve("pkexec", [], 0x7ffe3883b200 /* 1 var */)
ولی دو تا مورد عجیب رخ داد. اول اینکه برنامه در gdb بر خلاف انتظار با argc==1 اجرا شده و argv[0] که اسم برنامه در آن قرار میگیرد و طبق مدل فراخوانی باید NULL میبود برابر “” شده بود. مورد دومی که عجیب بود پیام زیر در dmesg بود.
process 'exploit' launched 'pkexec' with NULL argv: empty string added
با رسیدن به این مرحله به سراغ Ubuntu 20.04 رفتم و همین کد را بر روی آن اجرا کردم که همه چیز طبق انتظار رخ داده و در gdb با رسیدن به main برنامهی pkexec مقدار argc==0 برقرار بوده و امکان تست CVE وجود داشت. اینجا واضح بود که در کرنلهای جدید لینوکس در فراخوانی سیستمی execve تغییراتی اعمال شده است که جلوی اجرای برنامهها با argc==0 گرفته شود. اینجا دیگه لازم بود کد کرنل چک شود!
با رفتن به github و بررسی فایل fs/exec.c کرنل لینوکس مشاهده شد که در تابع اجرای فراخوانی سیستمی execve کد زیر در March 2022 اضافه شده که جلوی اجرای برنامهها با argc==0 را میگیرد.
/*
* When argv is empty, add an empty string ("") as argv[0] to
* ensure confused userspace programs that start processing
* from argv[1] won't end up walking envp. See also
* bprm_stack_limits().
*/
if (bprm->argc == 0) {
retval = copy_string_kernel("", bprm);
if (retval < 0)
goto out_free;
bprm->argc = 1;
}
پس از این به بعد علاوه بر OpenBSD بر روی لینوکس نیز امکان اجرای آسیبپذیریهای این مدلی وجود نخواهد داشت! :-D
پ.ن: در آینده یک ویدئو از شیوهی کامل اجرای این CVE منتشر میکنم.
#linux #kernel #CVE #PolKit #pkexec #execve
👍27❤5
جزئیات پروسه و نخ در لینوکس
به صورت خلاصه از دید ویندوز پروسه فقط یک container میباشد که اجرا نشده و فضایی برای اجرای Threadها فراهم میکند و در سطح کرنل نیز دو ساختار EPROCESS, ETHREAD برای این دو تعریف شدهاند. اما در لینوکس ماجرا متفاوت است و Process, Thread هر دو قابلیت اجرا داشته و در سطح کرنل نیز یک ساختار task_struct برای آنها تعریف شده است. در دنیای شیگرایی مثل این است که در لینوکس یک کلاس برای این دو وجود دارد و فقط در زمان ایجاد شی خصوصیات متفاوتی برای آنها تنظیم میشود.
اگر به سراغ برنامهنویسی سیستمی در لینوکس برویم، تابع fork برای ایجاد پروسه استفاده شده و از تابع pthread_create نیز برای ایجاد نخ در لینوکس استفاده میشود. در سطحی کمی پایینتر، هر دوی این توابع syscallای به نام clone را فراخوانی میکنند و با ستکردن فلگهایی مشخص میکنند که قصد ایجاد پروسه یا نخ را دارند. در زمان بررسی برنامهها، در خروجی دستور ps برای یک برنامهی چند پروسهای pidهای مختلفی خواهیم دید ولی در یک برنامهی چند نخی pidها یکسان بوده ولی عددهای متفاوتی در فیلد Light-Weight Process-LWP میبینیم.
نکتهی جالب دیگر این است که در سطح کرنل پروسهها یک لیست پیوندی تشکیل میدهند. هم شیوهی ایجاد لیست پیوندی Generic در سطح کرنل و در زبان C موضوع جالبی است و هم اینکه به کمک فیلدی به اسم tasks میتوانیم یک لیست پیوندی از پروسهها تشکیل دهیم که به پروسههای قبلی و بعدی اشاره میکند.
این موارد و موارد دیگری از جزئیات پروسهها و نخهای لینوکس مواردی هستند که در این ویدئو به آن میپردازیم.
لینک ویدئو در یوتیوب:
https://youtu.be/0fxYtyFn8Jc
لینک ویدئو در آپارات:
https://aparat.com/v/cnytp55
#ShortLinuxInternals #linux #internals #syscalls #kernel #process #thread #gdb #qemu #clone #LWP
به صورت خلاصه از دید ویندوز پروسه فقط یک container میباشد که اجرا نشده و فضایی برای اجرای Threadها فراهم میکند و در سطح کرنل نیز دو ساختار EPROCESS, ETHREAD برای این دو تعریف شدهاند. اما در لینوکس ماجرا متفاوت است و Process, Thread هر دو قابلیت اجرا داشته و در سطح کرنل نیز یک ساختار task_struct برای آنها تعریف شده است. در دنیای شیگرایی مثل این است که در لینوکس یک کلاس برای این دو وجود دارد و فقط در زمان ایجاد شی خصوصیات متفاوتی برای آنها تنظیم میشود.
اگر به سراغ برنامهنویسی سیستمی در لینوکس برویم، تابع fork برای ایجاد پروسه استفاده شده و از تابع pthread_create نیز برای ایجاد نخ در لینوکس استفاده میشود. در سطحی کمی پایینتر، هر دوی این توابع syscallای به نام clone را فراخوانی میکنند و با ستکردن فلگهایی مشخص میکنند که قصد ایجاد پروسه یا نخ را دارند. در زمان بررسی برنامهها، در خروجی دستور ps برای یک برنامهی چند پروسهای pidهای مختلفی خواهیم دید ولی در یک برنامهی چند نخی pidها یکسان بوده ولی عددهای متفاوتی در فیلد Light-Weight Process-LWP میبینیم.
نکتهی جالب دیگر این است که در سطح کرنل پروسهها یک لیست پیوندی تشکیل میدهند. هم شیوهی ایجاد لیست پیوندی Generic در سطح کرنل و در زبان C موضوع جالبی است و هم اینکه به کمک فیلدی به اسم tasks میتوانیم یک لیست پیوندی از پروسهها تشکیل دهیم که به پروسههای قبلی و بعدی اشاره میکند.
این موارد و موارد دیگری از جزئیات پروسهها و نخهای لینوکس مواردی هستند که در این ویدئو به آن میپردازیم.
لینک ویدئو در یوتیوب:
https://youtu.be/0fxYtyFn8Jc
لینک ویدئو در آپارات:
https://aparat.com/v/cnytp55
#ShortLinuxInternals #linux #internals #syscalls #kernel #process #thread #gdb #qemu #clone #LWP
YouTube
Process and Thread Internals in Linux [PER]
به صورت خلاصه از دید ویندوز پروسه فقط یک container میباشد که اجرا نشده و فضایی برای اجرای Threadها فراهم میکند و در سطح کرنل نیز دو ساختار EPROCESS, ETHREAD برای این دو تعریف شدهاند. اما در لینوکس ماجرا متفاوت است و Process, Thread هر دو قابلیت اجرا داشته…
👍13❤5
استفاده از ftrace برای بررسی توابع فراخوانی شده در کرنل لینوکس
به کمک دستور strace میتوان system callهایی که در اجرای برنامهها فراخوانی میشوند را بررسی نمود ولی امکان اطلاع پیدا کردن از توابعی که درون کرنل لینوکی فراخوانی میشوند وجود ندارد و به عنوان مثال نمیتوان متوجه شد که در خواندن یک فایل، از چه توابعی در چه ماژولی و یا چه سیستمفایلی استفاده میشود.
لینوکس به کمک قرار دادن یکسری point در بخشهایی از کرنل، مکانیزمی به اسم ftrace فراهم میکند که مشابه procfs پس از mount شدن، با فراهم کردن یکسری فایل، امکان بررسی توابعی کرنلی که در رویدادهای مختلف فراخوانی میشوند را در اختیار قرار میدهد.
از ftrace در حالتهای مختلفی میتوان استفاده نمود. مثلا میتوان فقط لیست توابعی که فراخوانی میشوند را مشاهده کرده و یا به صورت نمایش گرافی، کلیهی توابعی که با شروع از یک تابع یکی پس از دیگری فراخوانی میشوند را دیده و به این صورت مثلا متوجه شد که پس از تابع vfs_read که یک تابع برای پردازش درخواست خواندن از فایل در VFS لینوکس است، به سراغ تابع خواندن از ext4 میرسیم یا xfs.
یکی از دیگر کاربردهای ftrace که هم در توسعهی ابزارهای امنیتی کاربرد دارد و هم بدافزارها میتوانند از آن استفاده کنند پیادهسازی hooking برای توابع کرنل لینوکس است. در این روش ftrace در ابتدای فراخوانی تابع کرنلی، به سراغ اجرای تابعی که شما مشخص کردهاید رفته و پس از اتمام کار تابع شما، میتواند به چرخهی اصلی فراخوانی تابع کرنل بازگشته و آنرا تا انتها اجرا کند.
در این ویدئو کاربرد ftrace شرح داده شده و شیوههای مختلف استفاده از آن نمایش داده میشود.
لینک ویدئو در یوتیوب:
https://youtu.be/AhxxT7lal5c
لینک ویدئو در آپارات:
https://aparat.com/v/acmv35h
#ShortLinuxInternals #linux #internals #kernel #tracing #ftrace
به کمک دستور strace میتوان system callهایی که در اجرای برنامهها فراخوانی میشوند را بررسی نمود ولی امکان اطلاع پیدا کردن از توابعی که درون کرنل لینوکی فراخوانی میشوند وجود ندارد و به عنوان مثال نمیتوان متوجه شد که در خواندن یک فایل، از چه توابعی در چه ماژولی و یا چه سیستمفایلی استفاده میشود.
لینوکس به کمک قرار دادن یکسری point در بخشهایی از کرنل، مکانیزمی به اسم ftrace فراهم میکند که مشابه procfs پس از mount شدن، با فراهم کردن یکسری فایل، امکان بررسی توابعی کرنلی که در رویدادهای مختلف فراخوانی میشوند را در اختیار قرار میدهد.
از ftrace در حالتهای مختلفی میتوان استفاده نمود. مثلا میتوان فقط لیست توابعی که فراخوانی میشوند را مشاهده کرده و یا به صورت نمایش گرافی، کلیهی توابعی که با شروع از یک تابع یکی پس از دیگری فراخوانی میشوند را دیده و به این صورت مثلا متوجه شد که پس از تابع vfs_read که یک تابع برای پردازش درخواست خواندن از فایل در VFS لینوکس است، به سراغ تابع خواندن از ext4 میرسیم یا xfs.
یکی از دیگر کاربردهای ftrace که هم در توسعهی ابزارهای امنیتی کاربرد دارد و هم بدافزارها میتوانند از آن استفاده کنند پیادهسازی hooking برای توابع کرنل لینوکس است. در این روش ftrace در ابتدای فراخوانی تابع کرنلی، به سراغ اجرای تابعی که شما مشخص کردهاید رفته و پس از اتمام کار تابع شما، میتواند به چرخهی اصلی فراخوانی تابع کرنل بازگشته و آنرا تا انتها اجرا کند.
در این ویدئو کاربرد ftrace شرح داده شده و شیوههای مختلف استفاده از آن نمایش داده میشود.
لینک ویدئو در یوتیوب:
https://youtu.be/AhxxT7lal5c
لینک ویدئو در آپارات:
https://aparat.com/v/acmv35h
#ShortLinuxInternals #linux #internals #kernel #tracing #ftrace
YouTube
Using ftrace in Linux for Tracing Kernel Functions [PER]
لینوکس به کمک قرار دادن یکسری point در بخشهایی از کرنل، مکانیزمی به اسم ftrace فراهم میکند که مشابه procfs پس از mount شدن، با فراهم کردن یکسری فایل، امکان بررسی توابعی کرنلی که در رویدادهای مختلف فراخوانی میشوند را در اختیار قرار میدهد.
از ftrace در…
از ftrace در…
👍15❤4
سرقت توکن پروسهها در ویندوز به کمک WinDbg
توکن یا به صورت کاملتر Access Token در ویندوز، یک شی است که شرایط امنیتی که یک پروسه یا نخ تحت آن میتوانند کار کنند را مشخص میکند. توکن با احراز هویت موفق یک کاربر ایجاد شده و هر پروسهای که توسط کاربر ایجاد شود، یک نسخه از آنرا خواهد داشت.
ویندوز از توکن در زمانیکه یک نخ تلاشی برای دسترسی به یک شی میکند استفاده میکند که کاربر را تشخیص داده و بررسی کند که آیا کاربر مجوز دسترسی به شی مورد نظر را دارد یا خیر. به عنوان مثال فرض کنید که با notepad قصد باز کردن یک فایل را داشته باشید. در این مثال پروسهی notepad توسط کاربر شما ایجاد شده و در نتیجه توکن آنرا خواهد داشت. شی مورد دسترسی نیز فایلی است که برای آن دسترسی خاصی تعریف شده و باید بررسی شود که آیا توکن مورد نظر مجوز دسترسی به فایل را دارد یا باید جلوی این دسترسی توسط ویندوز گرفته شود.
برخی از اطلاعاتی که توسط توکن مشخص میشوند عبارتند از: شناسه یا SID کاربر. شناسهی گروههایی که کاربر عضوی از آنهاست. شناسهی نشست جاری. لیستی از مجوزهایی که کاربر یا گروههای آن دارند.
یکی از کارهایی که با توکنها قابل انجام بوده و در سرویسها کاربرد زیادی دارد impersonation است. در این مدل، یک نخ با توکن متفاوتی از توکن اصلی خود اجرا شده و در نتیجه مجوزهای متفاوتی خواهد داشت. به عنوان مثال فرض کنید یک File Server دارید که فایلهای آن محدودیتهای دسترسی متفاوتی دارند. در این مثال، سرور با انجام impersonation درخواست هر کلاینت را با توکن همان کلاینت پاسخ داده و در نتیجه هر کاربر تنها به فایلهای خود دسترسی خواهد داشت.
یکی از کارهایی که بدافزارها از آن بهره میبرند همین بحث impersonation و دسترسی به منابع مختلف، مثل dump اطلاعات کاربران، است. در این حالت بدافزار توکن یک پروسه با دسترسی بالا را دزدیده و از آن برای مقاصد خود استفاده میکند.
در این ویدئو به کمک WinDbg مفهوم توکن و شیوهی دزدیدن و قرار دادن آن بر روی پروسهی دلخواهی شرح داده میشود که هم با موضوع توکن آشنا شده و هم به صورت عملی ببینیم که بدافزارها چطور میتوانند از impersonation سواستفاده کنند.
لینک ویدئو در یوتیوب:
https://youtu.be/NTPVeauBDe4
لینک ویدئو در آپارات:
https://www.aparat.com/v/cvyprh5
#ShortWinInternals #windows #internals #token #WinDbg #impersonation #kernel
توکن یا به صورت کاملتر Access Token در ویندوز، یک شی است که شرایط امنیتی که یک پروسه یا نخ تحت آن میتوانند کار کنند را مشخص میکند. توکن با احراز هویت موفق یک کاربر ایجاد شده و هر پروسهای که توسط کاربر ایجاد شود، یک نسخه از آنرا خواهد داشت.
ویندوز از توکن در زمانیکه یک نخ تلاشی برای دسترسی به یک شی میکند استفاده میکند که کاربر را تشخیص داده و بررسی کند که آیا کاربر مجوز دسترسی به شی مورد نظر را دارد یا خیر. به عنوان مثال فرض کنید که با notepad قصد باز کردن یک فایل را داشته باشید. در این مثال پروسهی notepad توسط کاربر شما ایجاد شده و در نتیجه توکن آنرا خواهد داشت. شی مورد دسترسی نیز فایلی است که برای آن دسترسی خاصی تعریف شده و باید بررسی شود که آیا توکن مورد نظر مجوز دسترسی به فایل را دارد یا باید جلوی این دسترسی توسط ویندوز گرفته شود.
برخی از اطلاعاتی که توسط توکن مشخص میشوند عبارتند از: شناسه یا SID کاربر. شناسهی گروههایی که کاربر عضوی از آنهاست. شناسهی نشست جاری. لیستی از مجوزهایی که کاربر یا گروههای آن دارند.
یکی از کارهایی که با توکنها قابل انجام بوده و در سرویسها کاربرد زیادی دارد impersonation است. در این مدل، یک نخ با توکن متفاوتی از توکن اصلی خود اجرا شده و در نتیجه مجوزهای متفاوتی خواهد داشت. به عنوان مثال فرض کنید یک File Server دارید که فایلهای آن محدودیتهای دسترسی متفاوتی دارند. در این مثال، سرور با انجام impersonation درخواست هر کلاینت را با توکن همان کلاینت پاسخ داده و در نتیجه هر کاربر تنها به فایلهای خود دسترسی خواهد داشت.
یکی از کارهایی که بدافزارها از آن بهره میبرند همین بحث impersonation و دسترسی به منابع مختلف، مثل dump اطلاعات کاربران، است. در این حالت بدافزار توکن یک پروسه با دسترسی بالا را دزدیده و از آن برای مقاصد خود استفاده میکند.
در این ویدئو به کمک WinDbg مفهوم توکن و شیوهی دزدیدن و قرار دادن آن بر روی پروسهی دلخواهی شرح داده میشود که هم با موضوع توکن آشنا شده و هم به صورت عملی ببینیم که بدافزارها چطور میتوانند از impersonation سواستفاده کنند.
لینک ویدئو در یوتیوب:
https://youtu.be/NTPVeauBDe4
لینک ویدئو در آپارات:
https://www.aparat.com/v/cvyprh5
#ShortWinInternals #windows #internals #token #WinDbg #impersonation #kernel
YouTube
Token Stealing using WinDbg in Local Kernel Debugging [PER]
توکن یا به صورت کاملتر Access Token در ویندوز، یک شی است که شرایط امنیتی که یک پروسه یا نخ تحت آن میتوانند کار کنند را مشخص میکند. توکن با احراز هویت موفق یک کاربر ایجاد شده و هر پروسهای که توسط کاربر ایجاد شود، یک نسخه از آنرا خواهد داشت.
ویندوز از…
ویندوز از…
👍20❤9👏2
محدود کردن اجرای پروسهها به کمک Sandbox در لینوکس
مفهوم Sandboxing به جدا کردن پروسههای در حال اجرا و محدود کردن دسترسی آنها به منابع سیستم اشاره دارد که در صورت آلوده بودن نرمافزار، مابقی بخشهای سیستم کمتر تحت تاثیر قرار گرفته و دامنهی آسیب کاهش یابد.
روشها و ابزارهای مختلفی برای انجام Sandboxing بر روی لینوکس وجود دارد و برخی از این روشها مستقیم توسط کرنل نیز پشتیبانی میشوند. به عنوان مثال در لینوکس به کمک namespaces امکان جداسازی سیستمفایل، شبکه و پروسههای سیستم از یکدیگر فراهم بوده و به کمک cgroups میتوانیم محدودیت دسترسی به RAM/CPU تعریف کنیم، که ایجاد Containerها و استفاده از docker به لطف این موارد در لینوکس امکانپذیر است.
یک روش جالب دیگر برای ایجاد محدودیت اجرا در لینوکس seccomp است که خود یک System Call بوده و قابلیت محدود کردن System Callهایی که یک پروسه امکان اجرای آنها را دارد فراهم میکند. این System Call به شیوههای مختلفی مثل تعریف محدودیت درون برنامه، اعمال محدودیت به کمک systemd و استفاده به صورت library و با ست کردن LD_PRELOAD قابل استفاده است.
در این ویدئو کاربرد Sandboxing توضیح داده شده و پس از معرفی چند روش انجام آن، جزئیات و نحوهی استفاده و کاربرد seccomp در لینوکس نمایش داده میشود.
لینک ویدئو در یوتیوب:
https://youtu.be/g8fuUag7oA8
لینک ویدئو در آپارات:
https://aparat.com/v/wowkca1
#ShortLinuxInternals #linux #internals #kernel #programming #seccomp #sandbox #namespaces #syscalls #processes #systemd
مفهوم Sandboxing به جدا کردن پروسههای در حال اجرا و محدود کردن دسترسی آنها به منابع سیستم اشاره دارد که در صورت آلوده بودن نرمافزار، مابقی بخشهای سیستم کمتر تحت تاثیر قرار گرفته و دامنهی آسیب کاهش یابد.
روشها و ابزارهای مختلفی برای انجام Sandboxing بر روی لینوکس وجود دارد و برخی از این روشها مستقیم توسط کرنل نیز پشتیبانی میشوند. به عنوان مثال در لینوکس به کمک namespaces امکان جداسازی سیستمفایل، شبکه و پروسههای سیستم از یکدیگر فراهم بوده و به کمک cgroups میتوانیم محدودیت دسترسی به RAM/CPU تعریف کنیم، که ایجاد Containerها و استفاده از docker به لطف این موارد در لینوکس امکانپذیر است.
یک روش جالب دیگر برای ایجاد محدودیت اجرا در لینوکس seccomp است که خود یک System Call بوده و قابلیت محدود کردن System Callهایی که یک پروسه امکان اجرای آنها را دارد فراهم میکند. این System Call به شیوههای مختلفی مثل تعریف محدودیت درون برنامه، اعمال محدودیت به کمک systemd و استفاده به صورت library و با ست کردن LD_PRELOAD قابل استفاده است.
در این ویدئو کاربرد Sandboxing توضیح داده شده و پس از معرفی چند روش انجام آن، جزئیات و نحوهی استفاده و کاربرد seccomp در لینوکس نمایش داده میشود.
لینک ویدئو در یوتیوب:
https://youtu.be/g8fuUag7oA8
لینک ویدئو در آپارات:
https://aparat.com/v/wowkca1
#ShortLinuxInternals #linux #internals #kernel #programming #seccomp #sandbox #namespaces #syscalls #processes #systemd
YouTube
Process Sandboxing in Linux [PER]
روشها و ابزارهای مختلفی برای انجام Sandboxing بر روی لینوکس وجود دارد و برخی از این روشها مستقیم توسط کرنل نیز پشتیبانی میشوند. به عنوان مثال در لینوکس به کمک namespaces امکان جداسازی سیستمفایل، شبکه و پروسههای سیستم از یکدیگر فراهم بوده و به کمک cgroups…
👍12❤10
سیگنال و وضعیت پروسهها در لینوکس
در لینوکس برای ارسال یک رویداد یا اطلاع دادن یک رخداد به پروسهها میتوان از سیگنال استفاده نمود. شیوهی کار به این صورت است که پروسه در صورت دریافت سیگنال، اجرای کد اصلی خود را متوقف کرده و به سراغ پردازش Signal میرود. از همین روی در لینوکس به سیگنال Asynchronous Event و یا Soft Interrupt نیز گفته میشود.
تولید سیگنال و ارسال آن به یک پروسه میتواند از دل کرنل رخ داده، توسط یک پروسهی دیگر بوده، از طریق Terminal و به کمک دستور kill بوده و یا حتی با فشردن کلیدهایی مثل CTRL+Z یا CTRL+C توسط کاربر انجام شود.
پروسه با دریافت Signal در صورت وجود داشتن یک Handler درون کد برنامهی خود، به سراغ اجرای آن رفته و در غیر این صورت رفتار پیشفرضی که سیستمعامل برای هر سیگنال تعریف کرده است را اجرا میکند که در اکثر مواقع باعث Terminate شدن اجرای پروسه میشود. همچنین ذکر این نکته ضروری است که امکان تعریف کردن Handler برای دو سیگنال SIGKILL و SIGSTOP وجود نداشته و برای این دو همیشه رفتار تعریف شده توسط سیستمعامل اجرا میشود.
برخی از سیگنالها باعث تغییر در وضعیت اجرای پروسه میشوند. به عنوان مثال زدن CTRL+Z در اکثر برنامهها باعث میشود که برنامه در وضعیت Stopped قرار گرفته و به Background رود و یا زدن CTRL+C به پروسه یک Interrupt داده که ممکن است اجرای آنرا متوقف کند.
در پایان این نکته را اضافه کنم که ارسال SIGKILL با شماره ۹ برای برخی از برنامهها ممکن است باعث از بین رفتن داده شود. به عنوان مثال فرض کنید که یک برنامه فایلی را باز کرده و در حال نوشتن در آن است. اگر منتظر اتمام کار برنامه نمانده و وسط کار آن SIGKILL ارسال کنیم بلافاصله برنامه بسته شده و نوشتن در فایل تمام نشده و بخشی از داده از بین میرود ولی ارسال SIGTERM با شماره ۱۵ به برنامه در صورت Handle شدن آن توسط برنامه، این فرصت را به برنامه میدهد که نوشتن در فایل را به اتمام رسانده و سپس بسته شود.
در این ویدئو شیوهی کار سیگنال، تاثیر آن بر وضعیت پروسه و چرخهی اجرای پروسهها در لینوکس شرح داده شده و شیوهی تعریف Handler برای پردازش سیگنال در کد C نمایش داده میشود.
لینک ویدئو در یوتیوب:
https://youtu.be/6FbpnYDeWw0
لینک ویدئو در آپارات:
https://aparat.com/v/nruhez3
#ShortLinuxInternals #linux #internals #kernel #programming #signals #processes
در لینوکس برای ارسال یک رویداد یا اطلاع دادن یک رخداد به پروسهها میتوان از سیگنال استفاده نمود. شیوهی کار به این صورت است که پروسه در صورت دریافت سیگنال، اجرای کد اصلی خود را متوقف کرده و به سراغ پردازش Signal میرود. از همین روی در لینوکس به سیگنال Asynchronous Event و یا Soft Interrupt نیز گفته میشود.
تولید سیگنال و ارسال آن به یک پروسه میتواند از دل کرنل رخ داده، توسط یک پروسهی دیگر بوده، از طریق Terminal و به کمک دستور kill بوده و یا حتی با فشردن کلیدهایی مثل CTRL+Z یا CTRL+C توسط کاربر انجام شود.
پروسه با دریافت Signal در صورت وجود داشتن یک Handler درون کد برنامهی خود، به سراغ اجرای آن رفته و در غیر این صورت رفتار پیشفرضی که سیستمعامل برای هر سیگنال تعریف کرده است را اجرا میکند که در اکثر مواقع باعث Terminate شدن اجرای پروسه میشود. همچنین ذکر این نکته ضروری است که امکان تعریف کردن Handler برای دو سیگنال SIGKILL و SIGSTOP وجود نداشته و برای این دو همیشه رفتار تعریف شده توسط سیستمعامل اجرا میشود.
برخی از سیگنالها باعث تغییر در وضعیت اجرای پروسه میشوند. به عنوان مثال زدن CTRL+Z در اکثر برنامهها باعث میشود که برنامه در وضعیت Stopped قرار گرفته و به Background رود و یا زدن CTRL+C به پروسه یک Interrupt داده که ممکن است اجرای آنرا متوقف کند.
در پایان این نکته را اضافه کنم که ارسال SIGKILL با شماره ۹ برای برخی از برنامهها ممکن است باعث از بین رفتن داده شود. به عنوان مثال فرض کنید که یک برنامه فایلی را باز کرده و در حال نوشتن در آن است. اگر منتظر اتمام کار برنامه نمانده و وسط کار آن SIGKILL ارسال کنیم بلافاصله برنامه بسته شده و نوشتن در فایل تمام نشده و بخشی از داده از بین میرود ولی ارسال SIGTERM با شماره ۱۵ به برنامه در صورت Handle شدن آن توسط برنامه، این فرصت را به برنامه میدهد که نوشتن در فایل را به اتمام رسانده و سپس بسته شود.
در این ویدئو شیوهی کار سیگنال، تاثیر آن بر وضعیت پروسه و چرخهی اجرای پروسهها در لینوکس شرح داده شده و شیوهی تعریف Handler برای پردازش سیگنال در کد C نمایش داده میشود.
لینک ویدئو در یوتیوب:
https://youtu.be/6FbpnYDeWw0
لینک ویدئو در آپارات:
https://aparat.com/v/nruhez3
#ShortLinuxInternals #linux #internals #kernel #programming #signals #processes
YouTube
Signals and Process States in Linux [PER]
در لینوکس برای ارسال یک رویداد یا اطلاع دادن یک رخداد به پروسهها میتوان از سیگنال استفاده نمود. شیوهی کار به این صورت است که پروسه در صورت دریافت سیگنال، اجرای کد اصلی خود را متوقف کرده و به سراغ پردازش Signal میرود. از همین روی در لینوکس به سیگنال Asynchronous…
👍16❤7
Forwarded from کانال بایت امن
Media is too big
VIEW IN TELEGRAM
#Course #DWORD
🖥 ویدیو معرفی دوره برنامه نویسی تهاجمی مختص به تیم های قرمز
📊 بررسی کامل دوره، سرفصل ها و موضوعاتی که در هر فصل بیان خواهند شد.
⏰ آخرین بروزرسانی سرفصل ها : 18 September 2024
🖥 شهریه دوره ۱۵,۰۰۰,۰۰۰ تومان است که با ۲۰٪ تخفیف به ۱۰ نفر اول ارائه میشود.
📑 همچنین، امکان پرداخت به صورت اقساط نیز فراهم است.
🖥 نحوه شرکت در دوره :
به دلیل ظرفیت محدود کلاس، اولویت ثبتنام با دانشجویانی است که آزمون تعیین سطح را گذرانده باشند. چنانچه پیشنیازهای لازم برای شرکت در دوره را ندارید، همچنان میتوانید در دوره شرکت کنید، اما ابتدا باید این پیشنیازها را بگذرانید. جهت دریافت اطلاعات بیشتر به آیدی @YMahmoudnia پیغام بدین.
🦅 کانال بایت امن | گروه بایت امن
_
به دلیل ظرفیت محدود کلاس، اولویت ثبتنام با دانشجویانی است که آزمون تعیین سطح را گذرانده باشند. چنانچه پیشنیازهای لازم برای شرکت در دوره را ندارید، همچنان میتوانید در دوره شرکت کنید، اما ابتدا باید این پیشنیازها را بگذرانید. جهت دریافت اطلاعات بیشتر به آیدی @YMahmoudnia پیغام بدین.
_
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11👎11👍3👏2
📚 تخفیف ۷۰درصدی دورهی Windows Internals and Memory Analysis برای ۲۰ نفر
🎯 چند نفری بهم پیام داده بودند و سراغ تخفیف دورهی Internal رو گرفته بودند. با صحبتی که با تیم خوب مکتبخونه داشتم قرار شد که یک تخفیف ۷۰درصدی برای ۲۰ نفر داشته باشیم.
✅ میتونید دوره رو از طریق لینک زیر مشاهده و ثبتنام کنید:
yun.ir/rx6jy2
📴 برای دریافت ۷۰ درصد تخفیف، در زمان خرید کد z03y2Lzs را وارد کنید.
#WindowsInternals #Course #Training #Maktabkhooneh
🎯 چند نفری بهم پیام داده بودند و سراغ تخفیف دورهی Internal رو گرفته بودند. با صحبتی که با تیم خوب مکتبخونه داشتم قرار شد که یک تخفیف ۷۰درصدی برای ۲۰ نفر داشته باشیم.
✅ میتونید دوره رو از طریق لینک زیر مشاهده و ثبتنام کنید:
yun.ir/rx6jy2
📴 برای دریافت ۷۰ درصد تخفیف، در زمان خرید کد z03y2Lzs را وارد کنید.
#WindowsInternals #Course #Training #Maktabkhooneh
مکتبخونه
آموزش اینترنال و تحلیل حافظه ویندوز
این دوره با هدف کنار هم قرار دادن مباحث عمیق سیستمعامل و ترکیب آن با برنامهنویسی و تحلیل حافظه منبع خوبی برای محققان امنیت در حوزههای مختلف است.
❤14🤔1
مروری بر روشهای IPC در لینوکس و تست SharedMemory
بحث IPC یا Inter-Process Communication به روشهایی گفته میشود که از طریق آن دو پروسه میتوانند با یکدیگر اطلاعاتی رد و بدل کرده یا یک رخداد را به اطلاع هم برسانند. برای انجام اینکار متدهای متنوعی در لینوکس وجود دارد که قبلا نیز در مورد Signal پستی منتشر کرده بودم و جزئیات آنرا نمایش داده بودم.
یکی دیگر از روشهای تبادل اطلاعات بین دو پروسه، استفاده از حافظهی مشترک است که در آن فضایی در RAM در نظر گرفته شده و در فضای آدرس مجازی دو پروسه نگاشت میشود که پروسهها در آن اطلاعات مشترک خود را قرار دهند.
برای استفاده از حافظهی مشترک در لینوکس، با استفاده از shm_open درخواست ایجاد فضای مشترک را داده و پس از دریافت یک File Descriptor به کمک mmap حافظهی مورد نیاز را از کرنل لینوکس دریافت میکنیم.
نکتهای که باید به آن توجه کنیم این است که نوشتن چند پروسه به صورت همزمان درفضای مشترک، میتواند ناسازگاری داده ایجاد کند که با استفاده از Semaphore یا روشهای دیگر Synchronization بر اساس نیاز، باید بین پروسهها هماهنگی ایجاد نمود.
در این ویدئو، پس از مرور کوتاهی بر روشهای مختلف IPC به بررسی عمیقتر روش Shared Memory پرداخته و یک کد ساده برای تست آن میزنیم.
لینک ویدئو در یوتیوب:
https://youtu.be/exhJs3RDnN8
لینک ویدئو در آپارات:
https://aparat.com/v/gskav3t
#ShortLinuxInternals #linux #internals #programming #processes #ipc #sharedmemory
بحث IPC یا Inter-Process Communication به روشهایی گفته میشود که از طریق آن دو پروسه میتوانند با یکدیگر اطلاعاتی رد و بدل کرده یا یک رخداد را به اطلاع هم برسانند. برای انجام اینکار متدهای متنوعی در لینوکس وجود دارد که قبلا نیز در مورد Signal پستی منتشر کرده بودم و جزئیات آنرا نمایش داده بودم.
یکی دیگر از روشهای تبادل اطلاعات بین دو پروسه، استفاده از حافظهی مشترک است که در آن فضایی در RAM در نظر گرفته شده و در فضای آدرس مجازی دو پروسه نگاشت میشود که پروسهها در آن اطلاعات مشترک خود را قرار دهند.
برای استفاده از حافظهی مشترک در لینوکس، با استفاده از shm_open درخواست ایجاد فضای مشترک را داده و پس از دریافت یک File Descriptor به کمک mmap حافظهی مورد نیاز را از کرنل لینوکس دریافت میکنیم.
نکتهای که باید به آن توجه کنیم این است که نوشتن چند پروسه به صورت همزمان درفضای مشترک، میتواند ناسازگاری داده ایجاد کند که با استفاده از Semaphore یا روشهای دیگر Synchronization بر اساس نیاز، باید بین پروسهها هماهنگی ایجاد نمود.
در این ویدئو، پس از مرور کوتاهی بر روشهای مختلف IPC به بررسی عمیقتر روش Shared Memory پرداخته و یک کد ساده برای تست آن میزنیم.
لینک ویدئو در یوتیوب:
https://youtu.be/exhJs3RDnN8
لینک ویدئو در آپارات:
https://aparat.com/v/gskav3t
#ShortLinuxInternals #linux #internals #programming #processes #ipc #sharedmemory
YouTube
IPC and Shared Memory in Linux [PER]
بحث IPC یا Inter-Process Communication به روشهایی گفته میشود که از طریق آن دو پروسه میتوانند با یکدیگر اطلاعاتی رد و بدل کرده یا یک رخداد را به اطلاع هم برسانند. برای انجام اینکار متدهای متنوعی در لینوکس وجود دارد که قبلا نیز در مورد Signal پستی منتشر…
❤12👍3
شیوهی زمانبندی اجرای پروسه و نخ در لینوکس
قبل از توضیح این بخش لازمه مجدد اشاره کنم که thread/process در کرنل لینوکس با task_struct پیادهسازی شدهاند و در این پست بجای تکرار «اجرای پروسه و نخ» در لینوکس از عبارت اجرای وظیفه یا task استفاده میکنیم. با این مقدمه برسیم به اصل موضوع این پست:
یکی از وظایفی که سیستمهای عامل بر عهده دارند کنترل اجرای پروسهها/نخها بر روی پردازنده است. اینکار توسط Scheduler سیستمعامل انجام شده و ترتیب و زمان شروع اجرا و مدت زمانی که آنها حق استفاده از پردارنده را دارند مشخص میکند.
لینوکس برای مشخص کردن اولویت اجرای taskها بر روی پردازنده و مدت زمانی که میتوانند از پردازنده استفاده کنند الگوریتمهای مختلفی دارد که به آنها class یا policy زمانبندی میگوید. در هر کلاس نیز به کمک یک عدد، اولویت اجرای taskها را مشخص میکند. به عنوان مثال زمانبند پیشفرض لینوکس که در کلاس Normal قرار دارد با عنوان Completely Fair Scheduler شناخته میشود که در پیادهسازی آن از Red-Black Tree که یک درخت جستجوی دودویی Balance میباشد کمک گرفته شده است.
یک کلاس دیگری که در لینوکس وجود دارد کلاس RealTime میباشد. البته منظور از RealTime در این مورد این است که وظایف تحت یک Time Frame مشخص اجرا میشوند. در این کلاس امکان استفاده از روشهای Round-Robin یا FIFO وجود دارد.
تنظیم کردن اولویت وظایف در کلاس نرمال توسط مقدار nice مشخص میشود که عددی در بازهی منفی ۲۰ تا مثبت ۱۹ میباشد. در کرنل لینوکس مقدار نهایی اولویت برای الگوریتمهای مختلف میتواند عددی بین صفر تا ۱۳۹ باشد و موارد مختلفی مثل Boost کردن اولویت برای پاسخدهی سریعتر برنامههای گرافیکی یا وظایفی که وابستگی خاصی به آنها وجود دارد نیز در اولویت نهایی تاثیر دارند. برای داشتن مقدار تنظیم شده برای اولویت و مقداری که کرنل تصمیم میگیرد اولویت وظیفه در زمان جاری باشد فیلدهای متفاوتی در task_struct وجود دارند.
به عنوان نکتهی پایانی باید اشاره کنم که تنظیم کردن اولویت وظایف به کمک syscall ای به اسم setpriority انجام میشود که دستور renice نیز از آن استفاده میکند. به کمک دستور chrt نیز میتوان تنظیمات مربوط به کلاس RealTime را تغییر داد.
شرح کامل موارد ذکر شده، نمایش دمو از شیوهی استفاده از آنها و نمایش کد کرنل مربوط به setpriotity مواردی هستند که در این ویدئو به آنها میپردازیم. برای مشاهدهی ویدئو از لینکهای زیر استفاده کنید:
لینک ویدئو در یوتیوب:
https://youtu.be/Q6zjeE3Ad_U
لینک ویدئو در آپارات:
https://aparat.com/v/ykmy2r4
پ.ن: اگر شیوهی پیادهسازی پروسه/نخ در لینوکس و کاربرد task_struct برای شما شفاف نیست به پست زیر مراجعه کنید:
https://t.me/OxAA55/124
#ShortLinuxInternals #linux #internals #programming #processes #sheduling #tasks #task_struct #nice #priority
قبل از توضیح این بخش لازمه مجدد اشاره کنم که thread/process در کرنل لینوکس با task_struct پیادهسازی شدهاند و در این پست بجای تکرار «اجرای پروسه و نخ» در لینوکس از عبارت اجرای وظیفه یا task استفاده میکنیم. با این مقدمه برسیم به اصل موضوع این پست:
یکی از وظایفی که سیستمهای عامل بر عهده دارند کنترل اجرای پروسهها/نخها بر روی پردازنده است. اینکار توسط Scheduler سیستمعامل انجام شده و ترتیب و زمان شروع اجرا و مدت زمانی که آنها حق استفاده از پردارنده را دارند مشخص میکند.
لینوکس برای مشخص کردن اولویت اجرای taskها بر روی پردازنده و مدت زمانی که میتوانند از پردازنده استفاده کنند الگوریتمهای مختلفی دارد که به آنها class یا policy زمانبندی میگوید. در هر کلاس نیز به کمک یک عدد، اولویت اجرای taskها را مشخص میکند. به عنوان مثال زمانبند پیشفرض لینوکس که در کلاس Normal قرار دارد با عنوان Completely Fair Scheduler شناخته میشود که در پیادهسازی آن از Red-Black Tree که یک درخت جستجوی دودویی Balance میباشد کمک گرفته شده است.
یک کلاس دیگری که در لینوکس وجود دارد کلاس RealTime میباشد. البته منظور از RealTime در این مورد این است که وظایف تحت یک Time Frame مشخص اجرا میشوند. در این کلاس امکان استفاده از روشهای Round-Robin یا FIFO وجود دارد.
تنظیم کردن اولویت وظایف در کلاس نرمال توسط مقدار nice مشخص میشود که عددی در بازهی منفی ۲۰ تا مثبت ۱۹ میباشد. در کرنل لینوکس مقدار نهایی اولویت برای الگوریتمهای مختلف میتواند عددی بین صفر تا ۱۳۹ باشد و موارد مختلفی مثل Boost کردن اولویت برای پاسخدهی سریعتر برنامههای گرافیکی یا وظایفی که وابستگی خاصی به آنها وجود دارد نیز در اولویت نهایی تاثیر دارند. برای داشتن مقدار تنظیم شده برای اولویت و مقداری که کرنل تصمیم میگیرد اولویت وظیفه در زمان جاری باشد فیلدهای متفاوتی در task_struct وجود دارند.
به عنوان نکتهی پایانی باید اشاره کنم که تنظیم کردن اولویت وظایف به کمک syscall ای به اسم setpriority انجام میشود که دستور renice نیز از آن استفاده میکند. به کمک دستور chrt نیز میتوان تنظیمات مربوط به کلاس RealTime را تغییر داد.
شرح کامل موارد ذکر شده، نمایش دمو از شیوهی استفاده از آنها و نمایش کد کرنل مربوط به setpriotity مواردی هستند که در این ویدئو به آنها میپردازیم. برای مشاهدهی ویدئو از لینکهای زیر استفاده کنید:
لینک ویدئو در یوتیوب:
https://youtu.be/Q6zjeE3Ad_U
لینک ویدئو در آپارات:
https://aparat.com/v/ykmy2r4
پ.ن: اگر شیوهی پیادهسازی پروسه/نخ در لینوکس و کاربرد task_struct برای شما شفاف نیست به پست زیر مراجعه کنید:
https://t.me/OxAA55/124
#ShortLinuxInternals #linux #internals #programming #processes #sheduling #tasks #task_struct #nice #priority
YouTube
Task Scheduling in Linux [PER]
یکی از وظایفی که سیستمهای عامل بر عهده دارند کنترل اجرای پروسهها/نخها بر روی پردازنده است. اینکار توسط Scheduler سیستمعامل انجام شده و ترتیب و زمان شروع اجرا و مدت زمانی که آنها حق استفاده از پردارنده را دارند مشخص میکند.
لینوکس برای مشخص کردن اولویت…
لینوکس برای مشخص کردن اولویت…
❤13👍5
نمایش شیوهی ایجاد پروسههای اولیهی لینوکس و طرز کار آنها از روی کد کرنل
پروسهها در لینوکس یک ساختار درختی دارند و همه چیز از پروسه با PID یک شروع میشه که در توزیعهای جدید لینوکس systemd است ولی در نسخههای قدیمیتر init, upstart و چیزهای دیگری میتوانست باشد. البته یک مورد جدید و جذاب دیگه unikernel میباشد که در آن برنامههای مختلف میتوانند به عنوان PID 1 اجرا شده و در ایجاد containerهایی با وابستگی کم کاربرد دارد.
ایجاد این پروسه در تابع start_kernel از کد کرنل که در فایل init/main.c تعریف شده است انجام میشود. پروسه با PID 1 در لینوکس یک پروسهی کامل میباشد که هم user space داشته و هم kernel space و پروسههایی که این دو را داشته باشند در ساختار درختی زیر مجموعهی این پروسه میباشند.
پروسهی دومی که در تابع start_kernel ایجاد میشود دارای PID 2 میباشد و در ساختار درختی موازی این پروسه بوده و زیر مجموعهی آن نمیباشد. اسم این پروسه kthreadd میباشد و بر خلاف پروسهی PID 1 دارای user space نبوده و فقط kernel space دارد. این پروسه وظیفهی مدیریت kernel threadها را در لینوکس دارد که برای مدیریت کارهای مختلف سیستمی و انجام وظایف مختلف مربوط به کرنل و درایورها استفاده میشوند.
با شروع به کار این دو پروسه سیستمعامل به صورت کامل بالا آمده و مابقی پروسهها میتوانند تحت آنها شروع به کار کرده و سرویسدهی را انجام دهند. البته یک پروسهی دیگر نیز با PID 0 در لینوکس وجود دارد که در خروجی ps نمیتوانید آنرا مشاهده کنید ولی با استفاده از ابزارهایی مثل ftrace, ebpf امکان کسب اطلاعات از آن وجود دارد.
برای اطلاع از جزئیات بیشتری که در مورد این سه پروسه وجود دارد ویدئو را مشاهده کنید.
لینک ویدئو در یوتیوب:
https://youtu.be/vRwfnFXex3E
لینک ویدئو در آپارات:
https://aparat.com/v/xkl8808
#ShortLinuxInternals #linux #internals #programming #processes #kernel #systemd #initd #kernelthreads
پروسهها در لینوکس یک ساختار درختی دارند و همه چیز از پروسه با PID یک شروع میشه که در توزیعهای جدید لینوکس systemd است ولی در نسخههای قدیمیتر init, upstart و چیزهای دیگری میتوانست باشد. البته یک مورد جدید و جذاب دیگه unikernel میباشد که در آن برنامههای مختلف میتوانند به عنوان PID 1 اجرا شده و در ایجاد containerهایی با وابستگی کم کاربرد دارد.
ایجاد این پروسه در تابع start_kernel از کد کرنل که در فایل init/main.c تعریف شده است انجام میشود. پروسه با PID 1 در لینوکس یک پروسهی کامل میباشد که هم user space داشته و هم kernel space و پروسههایی که این دو را داشته باشند در ساختار درختی زیر مجموعهی این پروسه میباشند.
پروسهی دومی که در تابع start_kernel ایجاد میشود دارای PID 2 میباشد و در ساختار درختی موازی این پروسه بوده و زیر مجموعهی آن نمیباشد. اسم این پروسه kthreadd میباشد و بر خلاف پروسهی PID 1 دارای user space نبوده و فقط kernel space دارد. این پروسه وظیفهی مدیریت kernel threadها را در لینوکس دارد که برای مدیریت کارهای مختلف سیستمی و انجام وظایف مختلف مربوط به کرنل و درایورها استفاده میشوند.
با شروع به کار این دو پروسه سیستمعامل به صورت کامل بالا آمده و مابقی پروسهها میتوانند تحت آنها شروع به کار کرده و سرویسدهی را انجام دهند. البته یک پروسهی دیگر نیز با PID 0 در لینوکس وجود دارد که در خروجی ps نمیتوانید آنرا مشاهده کنید ولی با استفاده از ابزارهایی مثل ftrace, ebpf امکان کسب اطلاعات از آن وجود دارد.
برای اطلاع از جزئیات بیشتری که در مورد این سه پروسه وجود دارد ویدئو را مشاهده کنید.
لینک ویدئو در یوتیوب:
https://youtu.be/vRwfnFXex3E
لینک ویدئو در آپارات:
https://aparat.com/v/xkl8808
#ShortLinuxInternals #linux #internals #programming #processes #kernel #systemd #initd #kernelthreads
YouTube
Investigating Initial Processes in Linux (systemd, kthreadd)
پروسهها در لینوکس یک ساختار درختی دارند و همه چیز از پروسه با PID یک شروع میشه که در توزیعهای جدید لینوکس systemd است ولی در نسخههای قدیمیتر init, upstart و چیزهای دیگری میتوانست باشد. البته یک مورد جدید و جذاب دیگه unikernel میباشد که در آن برنامههای…
❤12👍3
مقدمهای بر eBPF و کاربردهای آن
هر اتفاقی در لینوکس رخ میدهد از دل کرنل رد شده و با بودن در دل کرنل میتوان از آن رخداد اطلاع پیدا کرد. مشکلی که در توسعهی کد در کرنل وجود دارد این است که پیچیدگی زیادی داشته و یک اشتباه منجر به کرش کردن سیستمعامل شده و پایداری سیستم را به خطر میاندازد.
برای کسب اطلاعات از اتفاقات مختلفی که در سیستمعامل رخ میدهند و اعمال تغییرات در بخشهای مختلف آن ابزارهای مختلفی توسعه داده شدهاند که امکان کسب اطلاعات و یا اعمال تغییرات در نقاط مشخصی از کرنل را فراهم میکنند. قبلا در پستی یکی از این ابزارها به اسم ftrace را معرفی کردهام و در این پست و ویدئو قصد معرفی ابزار دیگری به اسم eBPF را دارم که قابلیتهایی بسیار زیادی فراهم کرده و انعطاف پذیری بالایی در کسب اطلاعات و اعمال تغییرات در کرنل لینوکس را دارد.
در واقع میتوان گفت که eBPF یک زبان تعامل با کرنل لینوکس است که به کمک آن میتوان اطلاعاتی از کارکرد کرنل بدست آورده و یا در آن تغییراتی اعمال نمود. کد نوشته شده برای eBPF پس از کامپایل به یک bytecode برای کرنل ارسال شده و اگر مشکلی نداشته باشد در کرنل اجرا میشود.
برای نمونهای از کاربردهای eBPF میتوان به استفادهی اندروید برای کسب اطلاعات از میزان استفاده از شبکه، استفادهی Netflix برای کسب اطلاعات آماری از شبکه در مقیاس بزرگ، استفادهی گوگل برای پردازش بستههای شبکه و performance monitoring و یا استفادهی Cloudflare برای امنیت شبکه اشاره کرد.
در این ویدئو ابتدا eBPF معرفی شده و سپس به کمک bpftrace استفاده از آن تست میشود.
لینک ویدئو در یوتیوب:
https://youtu.be/qOqi8RPf4N0
لینک ویدئو در آپارات:
https://aparat.com/v/rxzar9f
#ShortLinuxInternals #linux #internals #programming #kernel #bpf #ebpf #tracing #bpftrace
هر اتفاقی در لینوکس رخ میدهد از دل کرنل رد شده و با بودن در دل کرنل میتوان از آن رخداد اطلاع پیدا کرد. مشکلی که در توسعهی کد در کرنل وجود دارد این است که پیچیدگی زیادی داشته و یک اشتباه منجر به کرش کردن سیستمعامل شده و پایداری سیستم را به خطر میاندازد.
برای کسب اطلاعات از اتفاقات مختلفی که در سیستمعامل رخ میدهند و اعمال تغییرات در بخشهای مختلف آن ابزارهای مختلفی توسعه داده شدهاند که امکان کسب اطلاعات و یا اعمال تغییرات در نقاط مشخصی از کرنل را فراهم میکنند. قبلا در پستی یکی از این ابزارها به اسم ftrace را معرفی کردهام و در این پست و ویدئو قصد معرفی ابزار دیگری به اسم eBPF را دارم که قابلیتهایی بسیار زیادی فراهم کرده و انعطاف پذیری بالایی در کسب اطلاعات و اعمال تغییرات در کرنل لینوکس را دارد.
در واقع میتوان گفت که eBPF یک زبان تعامل با کرنل لینوکس است که به کمک آن میتوان اطلاعاتی از کارکرد کرنل بدست آورده و یا در آن تغییراتی اعمال نمود. کد نوشته شده برای eBPF پس از کامپایل به یک bytecode برای کرنل ارسال شده و اگر مشکلی نداشته باشد در کرنل اجرا میشود.
برای نمونهای از کاربردهای eBPF میتوان به استفادهی اندروید برای کسب اطلاعات از میزان استفاده از شبکه، استفادهی Netflix برای کسب اطلاعات آماری از شبکه در مقیاس بزرگ، استفادهی گوگل برای پردازش بستههای شبکه و performance monitoring و یا استفادهی Cloudflare برای امنیت شبکه اشاره کرد.
در این ویدئو ابتدا eBPF معرفی شده و سپس به کمک bpftrace استفاده از آن تست میشود.
لینک ویدئو در یوتیوب:
https://youtu.be/qOqi8RPf4N0
لینک ویدئو در آپارات:
https://aparat.com/v/rxzar9f
#ShortLinuxInternals #linux #internals #programming #kernel #bpf #ebpf #tracing #bpftrace
YouTube
eBPF Introduction [PER]
میتوان گفت که eBPF یک زبان تعامل با کرنل لینوکس است که به کمک آن میتوان اطلاعاتی از کارکرد کرنل بدست آورده و یا در آن تغییراتی اعمال نمود. کد نوشته شده برای eBPF پس از کامپایل به یک bytecode برای کرنل ارسال شده و اگر مشکلی نداشته باشد در کرنل اجرا میشود.…
👍17❤12