سرقت توکن پروسهها در ویندوز به کمک 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
مکتبخونه
آموزش اینترنال و تحلیل حافظه ویندوز
این دوره با هدف کنار هم قرار دادن مباحث عمیق سیستمعامل و ترکیب آن با برنامهنویسی و تحلیل حافظه منبع خوبی برای محققان امنیت در حوزههای مختلف است.
❤13🤔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❤11
مروری بر پروسههای کرنلی لینوکس
در لینوکس برخی از پروسهها بخش user space نداشته و کامل در دل کرنل اجرا میشوند. این پروسهها در اجرای کارهای مختلف به سیستمعامل کمک کرده و به صورت background کارهایی که نیاز است انجام شوند که لینوکس بتواند سرویسدهی موارد مختلف را انجام دهد مدیریت میکنند. در این پست و ویدئو برخی از این پروسهها معرفی شده و کاربردهای مختلف آنها شرح داده میشود.
اولین پروسه (نخ) کرنلی لینوکس kthreadd است که وظیفهی ایجاد یک interface برای ایجاد و مدیریت پروسههای کرنلی در لینوکس را داشته و همیشه با PID برابر ۲ اجرا میشود. در کد این نخ یک حلقهی بینهایت وجود دارد که از لیستی به اسم kthread_create_list اطلاعات پروسهی کرنلی که قرار است ایجاد شود را برداشته و آنرا ایجاد میکند. تمامی پروسههای کرنلی لینوکس از اینجا به بعد فرزندان kthreadd خواهند بود.
پروسهی بعدی که معرفی میکنیم migration است. از پروسهی کرنلی migration به تعداد coreهای cpu خواهیم داشت و وظیفهی آن مدیریت پروسههایی است که بر روی یک core اجرا میشوند و در صورت زیاد بودن بار بر روی یک core یک پروسه را از روی run_queue یک core بر داشته و بر روی run_queue یک core دیگر قرار میدهد.
پروسهی دیگری که در ویدئو در مورد آن صحبت شده است kcompactd است که وظیفهی آن جلوگیری از ایجاد fragmentation در حافظه و کمک به کنارهم قرار گرفتن pageهای مرتبط در حافظه است.
یک پروسهی جالب دیگر oom_reaper است که در صورتیکه سیستمعامل با کمبود حافظه مواجه شود دست به کار شده و با kill کردن یک پروسه فضای لازم را برای کار مابقی پروسهها فراهم میکند.
در ویدئو در مورد پروسههای بیشتری صحبت شده است که میتوانید با مشاهدهی آن از این پروسهها اطلاع پیدا کنید.
لینک ویدئو در یوتیوب:
https://youtu.be/PsZ5GZhzvqE
لینک ویدئو در آپارات:
https://aparat.com/v/obt29c7
پ.ن ۱: برای اطلاع از جزئیات پروسههای ابتدایی لینوکس پست زیر را مشاهده کنید:
https://t.me/OxAA55/133
پ.ن ۲: برای اطلاع از جزئیات پروسه و نخ در لینوکس پست زیر را مشاهده کنید:
https://t.me/OxAA55/124
#ShortLinuxInternals #linux #internals #programming #kernel #memory #threads #processes #kernel_threads
در لینوکس برخی از پروسهها بخش user space نداشته و کامل در دل کرنل اجرا میشوند. این پروسهها در اجرای کارهای مختلف به سیستمعامل کمک کرده و به صورت background کارهایی که نیاز است انجام شوند که لینوکس بتواند سرویسدهی موارد مختلف را انجام دهد مدیریت میکنند. در این پست و ویدئو برخی از این پروسهها معرفی شده و کاربردهای مختلف آنها شرح داده میشود.
اولین پروسه (نخ) کرنلی لینوکس kthreadd است که وظیفهی ایجاد یک interface برای ایجاد و مدیریت پروسههای کرنلی در لینوکس را داشته و همیشه با PID برابر ۲ اجرا میشود. در کد این نخ یک حلقهی بینهایت وجود دارد که از لیستی به اسم kthread_create_list اطلاعات پروسهی کرنلی که قرار است ایجاد شود را برداشته و آنرا ایجاد میکند. تمامی پروسههای کرنلی لینوکس از اینجا به بعد فرزندان kthreadd خواهند بود.
پروسهی بعدی که معرفی میکنیم migration است. از پروسهی کرنلی migration به تعداد coreهای cpu خواهیم داشت و وظیفهی آن مدیریت پروسههایی است که بر روی یک core اجرا میشوند و در صورت زیاد بودن بار بر روی یک core یک پروسه را از روی run_queue یک core بر داشته و بر روی run_queue یک core دیگر قرار میدهد.
پروسهی دیگری که در ویدئو در مورد آن صحبت شده است kcompactd است که وظیفهی آن جلوگیری از ایجاد fragmentation در حافظه و کمک به کنارهم قرار گرفتن pageهای مرتبط در حافظه است.
یک پروسهی جالب دیگر oom_reaper است که در صورتیکه سیستمعامل با کمبود حافظه مواجه شود دست به کار شده و با kill کردن یک پروسه فضای لازم را برای کار مابقی پروسهها فراهم میکند.
در ویدئو در مورد پروسههای بیشتری صحبت شده است که میتوانید با مشاهدهی آن از این پروسهها اطلاع پیدا کنید.
لینک ویدئو در یوتیوب:
https://youtu.be/PsZ5GZhzvqE
لینک ویدئو در آپارات:
https://aparat.com/v/obt29c7
پ.ن ۱: برای اطلاع از جزئیات پروسههای ابتدایی لینوکس پست زیر را مشاهده کنید:
https://t.me/OxAA55/133
پ.ن ۲: برای اطلاع از جزئیات پروسه و نخ در لینوکس پست زیر را مشاهده کنید:
https://t.me/OxAA55/124
#ShortLinuxInternals #linux #internals #programming #kernel #memory #threads #processes #kernel_threads
آپارات - سرویس اشتراک ویدیو
Going over Linux Kernel Threads
در لینوکس برخی از پروسهها بخش user space نداشته و کامل در دل کرنل اجرا میشوند. این پروسهها در اجرای کارهای مختلف به سیستمعامل کمک کرده و به صورت background کارهایی که نیاز است انجام شوند که لینوکس بتواند سرویسدهی موارد مختلف را انجام دهد مدیریت میکنند.…
👍16❤3👏3
ساعتی با حافظهی مجازی در لینوکس
یکی از کارهایی که سیستمهای عامل از جمله لینوکس انجام میدهند مدیریت حافظه و ایجاد یک لایهی Abstraction برای پروسههاست که به کمک آن هر پروسهای تصور میکند کل حافظهی موجود در سیستم، معمولا ۳ گیگ در مدل ۳۲بیتی و ۱۲۸ترابایت در مدل ۶۴بیتی، را در اختیار داشته و از اینکه واقعا چه مقداری حافظه در سیستم موجود بوده و داده بر روی RAM یا Disk ذخیره میشود اطلاعی نخواهد داشت.
دریافت حافظه از سیستمعامل و نگاشت آن در فضای آدرس دهی پروسهها نیز در واحدهایی به اسم Page و به کمک فراخوانی سیستمی mmap انجام میشود که پیشفرض مقدار 4KB داشته و از یک Page Table برای مشخص کردن اینکه چه فضایی از پروسه در کجای RAM/Disk قرار گرفته است استفاده میشود.
در این ویدئو مفاهیم مربوط به آدرسدهی مجازی Virtual Addressing در لینوکس و بخشهایی که در آن دخیل بوده شرح داده شده و به کمک چند نمونه کد مفاهیم تست میشوند.
برخی از مواردی که در مورد آنها صحبت میکنم به شرح زیر است:
• مقدمهای بر حافظه مجازی و دلیل استفاده از Virtual Addressing
• نحوه نگاشت Page و Frame
• مفهوم Page Table و نقش آن در نگاشت آدرسها
• بررسی فایل proc/iomem/ و نحوه نگاشت حافظه در RAM
• تفاوت Page Faultهای Major و Minor و نحوه مدیریت آنها
• آشنایی با Zoneهای حافظه در لینوکس
• معرفی Slab Allocator و مفهوم کشهای حافظه
• مقایسه روشهای تخصیص حافظه در کرنل kmalloc vs vmalloc
• بررسی اطلاعات در حافظه مجازی و RAM به کمک Qemu
لینک ویدئو در یوتیوب:
https://youtu.be/2bjuqRLFaHc
لینک ویدئو در آپارات:
https://aparat.com/v/xqj64rn
#ShortLinuxInternals #linux #internals #VirtualMemory #MemoryManagement #KernelProgramming #PageTable #PageFault #SlabAllocator #kmalloc #vmalloc #SystemProgramming #EmbeddedLinux
یکی از کارهایی که سیستمهای عامل از جمله لینوکس انجام میدهند مدیریت حافظه و ایجاد یک لایهی Abstraction برای پروسههاست که به کمک آن هر پروسهای تصور میکند کل حافظهی موجود در سیستم، معمولا ۳ گیگ در مدل ۳۲بیتی و ۱۲۸ترابایت در مدل ۶۴بیتی، را در اختیار داشته و از اینکه واقعا چه مقداری حافظه در سیستم موجود بوده و داده بر روی RAM یا Disk ذخیره میشود اطلاعی نخواهد داشت.
دریافت حافظه از سیستمعامل و نگاشت آن در فضای آدرس دهی پروسهها نیز در واحدهایی به اسم Page و به کمک فراخوانی سیستمی mmap انجام میشود که پیشفرض مقدار 4KB داشته و از یک Page Table برای مشخص کردن اینکه چه فضایی از پروسه در کجای RAM/Disk قرار گرفته است استفاده میشود.
در این ویدئو مفاهیم مربوط به آدرسدهی مجازی Virtual Addressing در لینوکس و بخشهایی که در آن دخیل بوده شرح داده شده و به کمک چند نمونه کد مفاهیم تست میشوند.
برخی از مواردی که در مورد آنها صحبت میکنم به شرح زیر است:
• مقدمهای بر حافظه مجازی و دلیل استفاده از Virtual Addressing
• نحوه نگاشت Page و Frame
• مفهوم Page Table و نقش آن در نگاشت آدرسها
• بررسی فایل proc/iomem/ و نحوه نگاشت حافظه در RAM
• تفاوت Page Faultهای Major و Minor و نحوه مدیریت آنها
• آشنایی با Zoneهای حافظه در لینوکس
• معرفی Slab Allocator و مفهوم کشهای حافظه
• مقایسه روشهای تخصیص حافظه در کرنل kmalloc vs vmalloc
• بررسی اطلاعات در حافظه مجازی و RAM به کمک Qemu
لینک ویدئو در یوتیوب:
https://youtu.be/2bjuqRLFaHc
لینک ویدئو در آپارات:
https://aparat.com/v/xqj64rn
#ShortLinuxInternals #linux #internals #VirtualMemory #MemoryManagement #KernelProgramming #PageTable #PageFault #SlabAllocator #kmalloc #vmalloc #SystemProgramming #EmbeddedLinux
YouTube
Virtual Memory in Linux
یکی از کارهایی که سیستمهای عامل از جمله لینوکس انجام میدهند مدیریت حافظه و ایجاد یک لایهی Abstraction برای پروسههاست که به کمک آن هر پروسهای تصور میکند کل حافظهی موجود در سیستم، معمولا ۳ گیگ در مدل ۳۲بیتی و ۱۲۸ترابایت در مدل ۶۴بیتی، را در اختیار داشته…
❤26👍4
Forwarded from کانال بایت امن
#Article #Tools
چند مقاله و ابزار درباره ساختار PE قبلاً در وبلاگ قرار داده بودم که امروز اونها رو بهروزرسانی کردم. سورسکدها و ویدیوهای دمو هم اضافه شده تا این مفاهیم بهتر قابل درک باشن و راحتتر بتونید با موضوع ساختار PE ارتباط برقرار کنید.
⬅️ بررسی و تحلیل Checksum در ساختار PE
⬅️ بررسی و تشریح DEP و ASLR در ساختار PE
⬅️ ابزار تبدیل DLL به EXE
⬅️ ابزار حذف DEP و ASLR از ساختار PE
⬅️ ابزار تصحیح Checksum در ساختار PE
🦅 کانال بایت امن | گروه بایت امن
_
چند مقاله و ابزار درباره ساختار PE قبلاً در وبلاگ قرار داده بودم که امروز اونها رو بهروزرسانی کردم. سورسکدها و ویدیوهای دمو هم اضافه شده تا این مفاهیم بهتر قابل درک باشن و راحتتر بتونید با موضوع ساختار PE ارتباط برقرار کنید.
_
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8👏3👍2👎1
🎓 Foundations of Linux Reverse Engineering and Exploitation
🧠 Course Overview
🔍 Linux Internals & Assembly
• Introduction to Linux internals
• Quick review of assembly (x86 & x64)
• Understanding calling conventions
🛠️ Reverse Engineering Tools
• GDB + pwndbg
• Ghidra
• Radare2
• Metasploit Framework
• PwnTools
💥 Exploitation Techniques
• Integer Overflow
• Buffer Overflow
• Format String Vulnerabilities
• Out-of-Bounds Memory Access
🛡️ Bypassing Security Mechanisms
• NX (No eXecute)
• ASLR
• Stack Canaries
• RELRO
🐚 Shellcoding Basics
• Writing and injecting shellcodes
📦 Binary Analysis
• Binary permissions & SetUID bit
• ELF structure
• GOT / PLT concepts
📚 Return-Oriented Programming (ROP)
• ret2win
• ret2libc
• ret2csu
🎯 Real-World Practice
• Hands-on CTFs:
▪️ PicoCTF
▪️ SnappCTF
▪️ Narnia (OverTheWire)
▪️ ROP Emporium
🚀 Final Lab
Walkthrough of a real CVE and writing an exploit for it from scratch.
🧠 Course Overview
🔍 Linux Internals & Assembly
• Introduction to Linux internals
• Quick review of assembly (x86 & x64)
• Understanding calling conventions
🛠️ Reverse Engineering Tools
• GDB + pwndbg
• Ghidra
• Radare2
• Metasploit Framework
• PwnTools
💥 Exploitation Techniques
• Integer Overflow
• Buffer Overflow
• Format String Vulnerabilities
• Out-of-Bounds Memory Access
🛡️ Bypassing Security Mechanisms
• NX (No eXecute)
• ASLR
• Stack Canaries
• RELRO
🐚 Shellcoding Basics
• Writing and injecting shellcodes
📦 Binary Analysis
• Binary permissions & SetUID bit
• ELF structure
• GOT / PLT concepts
📚 Return-Oriented Programming (ROP)
• ret2win
• ret2libc
• ret2csu
🎯 Real-World Practice
• Hands-on CTFs:
▪️ PicoCTF
▪️ SnappCTF
▪️ Narnia (OverTheWire)
▪️ ROP Emporium
🚀 Final Lab
Walkthrough of a real CVE and writing an exploit for it from scratch.
❤30👍1
🔍 قابل توجه علاقهمندان به امنیت سیستمعامل و توسعه اکسپلویت در لینوکس
من همیشه به تدریس علاقهمند بودهام؛ نه صرفاً آموزش تئوری، بلکه انتقال واقعی تجربهها و درک عمیق مفاهیم فنی. از سالها پیش، تمرکزم روی internal سیستمعاملها—بهویژه ویندوز و لینوکس—و مباحث امنیتی بوده و سعی کردهام این مطالب تخصصی را به زبانی ساده، کاربردی و قابلفهم برای دیگران ارائه دهم.
🎓 حالا نوبت یک قدم جدید و متفاوت رسیده:
«دورهی Exploit Development در لینوکس»
از تحلیل آسیبپذیری واقعی گرفته تا نوشتن اکسپلویتهای عملی و کاربردی.
اما تصمیم گرفتم یک شرط خاص برای انتشار این دوره بگذارم:
🎯 اگر اعضای کانالم به ۵۰۰۰ نفر برسند، دوره را به صورت کامل و رایگان منتشر میکنم.
بیش از ۲۰ ساعت ویدئو و تمرین عملی بدون تبلیغات، بدون پرداخت هزینه—صرفاً برای اینکه دانش تخصصی، راحتتر و بیواسطه به دست کسانی برسه که واقعاً به یادگیری اهمیت میدن.
🧠 اگر شما هم به این مسیر علاقهمندید یا فکر میکنید افراد دیگری در اطرافتان هستند که این محتوا به دردشان میخورد، خوشحال میشم با معرفی کانالم به دوستانتان از این پروژه حمایت کنید.
📎 لینک کانال:
https://t.me/OxAA55
✍️راستی سرفصل دوره رو هم میتونید در لینک زیر مشاهده کنید:
https://t.me/OxAA55/140
من همیشه به تدریس علاقهمند بودهام؛ نه صرفاً آموزش تئوری، بلکه انتقال واقعی تجربهها و درک عمیق مفاهیم فنی. از سالها پیش، تمرکزم روی internal سیستمعاملها—بهویژه ویندوز و لینوکس—و مباحث امنیتی بوده و سعی کردهام این مطالب تخصصی را به زبانی ساده، کاربردی و قابلفهم برای دیگران ارائه دهم.
🎓 حالا نوبت یک قدم جدید و متفاوت رسیده:
«دورهی Exploit Development در لینوکس»
از تحلیل آسیبپذیری واقعی گرفته تا نوشتن اکسپلویتهای عملی و کاربردی.
اما تصمیم گرفتم یک شرط خاص برای انتشار این دوره بگذارم:
🎯 اگر اعضای کانالم به ۵۰۰۰ نفر برسند، دوره را به صورت کامل و رایگان منتشر میکنم.
بیش از ۲۰ ساعت ویدئو و تمرین عملی بدون تبلیغات، بدون پرداخت هزینه—صرفاً برای اینکه دانش تخصصی، راحتتر و بیواسطه به دست کسانی برسه که واقعاً به یادگیری اهمیت میدن.
🧠 اگر شما هم به این مسیر علاقهمندید یا فکر میکنید افراد دیگری در اطرافتان هستند که این محتوا به دردشان میخورد، خوشحال میشم با معرفی کانالم به دوستانتان از این پروژه حمایت کنید.
📎 لینک کانال:
https://t.me/OxAA55
✍️راستی سرفصل دوره رو هم میتونید در لینک زیر مشاهده کنید:
https://t.me/OxAA55/140
Telegram
OS Internals
مقاله و فیلم آموزش مدیریت و برنامهنویسی سیستمهای عامل، شبکه و امنیت اطلاعات.
مقالات من در ویرگول:
https://virgool.io/@akazemi
ویدئوهای کانال در آپارات:
https://www.aparat.com/oxaa55
ارتباط با مدیر کانال از طریق:
@akazemi67
مقالات من در ویرگول:
https://virgool.io/@akazemi
ویدئوهای کانال در آپارات:
https://www.aparat.com/oxaa55
ارتباط با مدیر کانال از طریق:
@akazemi67
👏58❤33👍3🤔3
📢 برنامهی انتشار دورهی Exploit Development در لینوکس
یکی از علاقهمندیهای اصلی من همیشه آموزش و انتقال دانش بوده—نه به عنوان یک شغل یا وظیفه، بلکه به عنوان یک انتخاب شخصی و لذت واقعی.
🎥 برای همین، تصمیم گرفتم دورهای که زمان زیادی برای آمادهسازیش گذاشتم رو بهصورت رایگان منتشر کنم.
البته در ابتدا کمی نگران بودم… نکنه چون دوره رایگانه، بعضیها فکر کنن کیفیتش پایینه؟؟🤔
📚ولی واقعیت اینه که برای هر جلسه تدریس، گاهی تا ۳ روز کامل درگیرم و زمان زیادی صرف آمادهسازی محتوا میکنم—چه در تدریس سازمانی، چه دانشگاهی و چه همین دورهی توسعهی اکسپلویت. این بود که برای انتشار دوره شرط افزایش تعداد اعضای کانال و حمایت رو گذاشتم!
🌿با تمام وجود از دوستانی که در معرفی دوره، افزایش اعضای کانال و دیده شدن پستها صمیمانه کمک کردند، ممنونم. حمایت واقعی شما انگیزهای بزرگه 🙏
🗓️ حالا نوبت اعلام برنامهی انتشار دوره رسیده:
✅ از هفتهی آخر مرداد، فارغ از تعداد اعضای کانال،
🔸 انتشار دوره شروع میشه
🔸 هر هفته، در آخر هفته، یک بخش جدید منتشر خواهد شد
🔸 اطلاعرسانی قسمتهای جدید در کانال تلگرام و لینکدین انجام میشه
💻 همچنین در تلاش هستم که مطالب دوره در قالب مقاله هم روی یک سایت منتشر بشه. در صورت آماده شدن، حتماً خبرش رو میدم.
🔥 پس آماده باشید!
از هفتهی آخر مرداد، با هم وارد دنیای توسعه اکسپلویت در لینوکس میشیم...
📎 کانال رو دنبال کنید تا هیچ بخشی رو از دست ندید!
https://t.me/OxAA55
یکی از علاقهمندیهای اصلی من همیشه آموزش و انتقال دانش بوده—نه به عنوان یک شغل یا وظیفه، بلکه به عنوان یک انتخاب شخصی و لذت واقعی.
🎥 برای همین، تصمیم گرفتم دورهای که زمان زیادی برای آمادهسازیش گذاشتم رو بهصورت رایگان منتشر کنم.
البته در ابتدا کمی نگران بودم… نکنه چون دوره رایگانه، بعضیها فکر کنن کیفیتش پایینه؟؟🤔
📚ولی واقعیت اینه که برای هر جلسه تدریس، گاهی تا ۳ روز کامل درگیرم و زمان زیادی صرف آمادهسازی محتوا میکنم—چه در تدریس سازمانی، چه دانشگاهی و چه همین دورهی توسعهی اکسپلویت. این بود که برای انتشار دوره شرط افزایش تعداد اعضای کانال و حمایت رو گذاشتم!
🌿با تمام وجود از دوستانی که در معرفی دوره، افزایش اعضای کانال و دیده شدن پستها صمیمانه کمک کردند، ممنونم. حمایت واقعی شما انگیزهای بزرگه 🙏
🗓️ حالا نوبت اعلام برنامهی انتشار دوره رسیده:
✅ از هفتهی آخر مرداد، فارغ از تعداد اعضای کانال،
🔸 انتشار دوره شروع میشه
🔸 هر هفته، در آخر هفته، یک بخش جدید منتشر خواهد شد
🔸 اطلاعرسانی قسمتهای جدید در کانال تلگرام و لینکدین انجام میشه
💻 همچنین در تلاش هستم که مطالب دوره در قالب مقاله هم روی یک سایت منتشر بشه. در صورت آماده شدن، حتماً خبرش رو میدم.
🔥 پس آماده باشید!
از هفتهی آخر مرداد، با هم وارد دنیای توسعه اکسپلویت در لینوکس میشیم...
📎 کانال رو دنبال کنید تا هیچ بخشی رو از دست ندید!
https://t.me/OxAA55
Telegram
OS Internals
مقاله و فیلم آموزش مدیریت و برنامهنویسی سیستمهای عامل، شبکه و امنیت اطلاعات.
مقالات من در ویرگول:
https://virgool.io/@akazemi
ویدئوهای کانال در آپارات:
https://www.aparat.com/oxaa55
ارتباط با مدیر کانال از طریق:
@akazemi67
مقالات من در ویرگول:
https://virgool.io/@akazemi
ویدئوهای کانال در آپارات:
https://www.aparat.com/oxaa55
ارتباط با مدیر کانال از طریق:
@akazemi67
❤123👏21👍6🤔1
OS Internals pinned «📢 برنامهی انتشار دورهی Exploit Development در لینوکس یکی از علاقهمندیهای اصلی من همیشه آموزش و انتقال دانش بوده—نه به عنوان یک شغل یا وظیفه، بلکه به عنوان یک انتخاب شخصی و لذت واقعی. 🎥 برای همین، تصمیم گرفتم دورهای که زمان زیادی برای آمادهسازیش گذاشتم…»
Media is too big
VIEW IN TELEGRAM
🎥 ویدئوی معرفی دوره Exploit Development در لینوکس
📚 توی این دوره قراره یاد بگیریم آسیبپذیریها در لینوکس چطور به وجود میان، چطور شناسایی میشن و چطور میشه ازشون استفاده کرد. قدمبهقدم جلو میریم: از آشنایی با ساختار و امنیت لینوکس، تا پیدا کردن باگها و نوشتن اکسپلویت برای اونها.
🧨 بخش مهم دوره، مهندسی معکوس برنامههای لینوکسیه؛ یعنی یاد میگیریم چطور یک فایل اجرایی رو باز کنیم، کدهاشو بخونیم و ضعفهاشو پیدا کنیم. با ابزارهایی مثل GDB، pwndbg، Ghidra، Radare2، PwnTools و چند تا ابزار دیگه کار میکنیم و در عمل میبینیم چطور میشه مکانیزمهای امنیتی مثل ASLR، Stack Canaries، NX رو دور زد.
💣 در طول دوره با انواع آسیبپذیریها مثل Buffer Overflow، Integer Overflow، Format String و چیزهای دیگه آشنا میشیم، روشهای بهرهبرداری رو یاد میگیریم و روی چالشهای CTF تمرین میکنیم.
💡در پایان هم یک پروژه عملی داریم: تحلیل یک CVE واقعی و نوشتن اکسپلویت برای اون.
⏰ هر پنجشنبه منتظر یک فصل از دوره باشید. شروع از ۵شنبه ۳۰ مرداد.
https://t.me/OxAA55/140
📚 توی این دوره قراره یاد بگیریم آسیبپذیریها در لینوکس چطور به وجود میان، چطور شناسایی میشن و چطور میشه ازشون استفاده کرد. قدمبهقدم جلو میریم: از آشنایی با ساختار و امنیت لینوکس، تا پیدا کردن باگها و نوشتن اکسپلویت برای اونها.
🧨 بخش مهم دوره، مهندسی معکوس برنامههای لینوکسیه؛ یعنی یاد میگیریم چطور یک فایل اجرایی رو باز کنیم، کدهاشو بخونیم و ضعفهاشو پیدا کنیم. با ابزارهایی مثل GDB، pwndbg، Ghidra، Radare2، PwnTools و چند تا ابزار دیگه کار میکنیم و در عمل میبینیم چطور میشه مکانیزمهای امنیتی مثل ASLR، Stack Canaries، NX رو دور زد.
💣 در طول دوره با انواع آسیبپذیریها مثل Buffer Overflow، Integer Overflow، Format String و چیزهای دیگه آشنا میشیم، روشهای بهرهبرداری رو یاد میگیریم و روی چالشهای CTF تمرین میکنیم.
💡در پایان هم یک پروژه عملی داریم: تحلیل یک CVE واقعی و نوشتن اکسپلویت برای اون.
⏰ هر پنجشنبه منتظر یک فصل از دوره باشید. شروع از ۵شنبه ۳۰ مرداد.
https://t.me/OxAA55/140
❤82👏9👍5🤔1
📢 انتشار فصل اول دوره توسعه اکسپلویت در لینوکس
📚 این فصل شامل ۷ ویدئو میباشد و در آن با مفاهیم بنیادین اجرای برنامهها در سیستمعامل لینوکس آشنا میشوید؛ از مروری بر برنامهنویسی و ساختار فایلهای اجرایی گرفته تا نحوهی ایجاد و اجرای پروسهها و مدیریت حافظه. این فصل پایهای محکم برای درک مباحث پیشرفتهتری ایجاد میکند که در فصلهای آینده به آنها خواهیم پرداخت.
✍️ لینک ویدئوهای فصل در یوتیوب:
00) Course Introduction
P01-01) Programming Review
P01-02) ELF Intro
P01-03) Process Execution
P01-04) Heap Investigation
P01-05) Process Address Space
P01-06) Virtual Memory
P01-07) Syscalls Intro
✍️ لینک ویدئوهای فصل در آپارات:
https://aparat.com/v/qxvin87
https://aparat.com/v/fwd0751
https://aparat.com/v/ljqz0v8
https://aparat.com/v/pdw1xkk
https://aparat.com/v/nct8m83
https://aparat.com/v/eak4pvp
https://aparat.com/v/lbuc0q0
https://aparat.com/v/sfb8398
#linux #exploitdev #internals #programming #security
📚 این فصل شامل ۷ ویدئو میباشد و در آن با مفاهیم بنیادین اجرای برنامهها در سیستمعامل لینوکس آشنا میشوید؛ از مروری بر برنامهنویسی و ساختار فایلهای اجرایی گرفته تا نحوهی ایجاد و اجرای پروسهها و مدیریت حافظه. این فصل پایهای محکم برای درک مباحث پیشرفتهتری ایجاد میکند که در فصلهای آینده به آنها خواهیم پرداخت.
✍️ لینک ویدئوهای فصل در یوتیوب:
00) Course Introduction
P01-01) Programming Review
P01-02) ELF Intro
P01-03) Process Execution
P01-04) Heap Investigation
P01-05) Process Address Space
P01-06) Virtual Memory
P01-07) Syscalls Intro
✍️ لینک ویدئوهای فصل در آپارات:
https://aparat.com/v/qxvin87
https://aparat.com/v/fwd0751
https://aparat.com/v/ljqz0v8
https://aparat.com/v/pdw1xkk
https://aparat.com/v/nct8m83
https://aparat.com/v/eak4pvp
https://aparat.com/v/lbuc0q0
https://aparat.com/v/sfb8398
#linux #exploitdev #internals #programming #security
YouTube
00) Course Introduction [PER]
معرفی دوره توسعه اکسپلویت در لینوکس
❤84👍8👏8