Ai000 Cybernetics QLab

#linux
Channel
Logo of the Telegram channel Ai000 Cybernetics QLab
@aioooirPromote
1.99K
subscribers
219
photos
73
videos
62
links
Ai000 Cybernetic QLab is a non-profit research place which is focus on novel defensive and offensive services to protect our customers. Admin: @clightning
📌قسمت دوم: لینوکس بهتر است یا ویندوز، آخر سر حق با کیست؟

حال اجازه دهید به خود این سرتیفیکت بپرداریم که چیست و چرا لینوکس و ویندوز تاکنون در کسب آن موفق نشدند؟ این سرتیفیکت به عنوان Evaluation Assurance Level 7 شناخته می‌شود که یکی از سطوح بالای استانداردهای امنیتی در چارچوب Common Criteria for Information Technology Security Evaluation است.

این استانداردها برای ارزیابی و تایید میزان اعتماد به امنیت سیستم‌ها و محصولات فناوری اطلاعات استفاده می‌شوند. در اینجا به معیارهای اصلی و مواردی که برای دستیابی به EAL7 لازم است، پرداخته می‌شود:

1. طراحی بسیار دقیق و رسمی (Formally Verified Design): در EAL7، طراحی سیستم باید با استفاده از روش‌های رسمی (مانند ریاضیات) به طور دقیق و با جزئیات اثبات شود. این شامل استفاده از اثبات‌های رسمی برای تایید صحت عملکرد سیستم است. سیستم باید دارای یک مشخصات رسمی و کامل باشد که همه رفتارهای سیستم را به صورت ریاضی یا منطقی توصیف کند.

2. توسعه بر اساس یک مدل امنیتی رسمی (Formal Security Model): یک مدل امنیتی رسمی و مستند باید وجود داشته باشد که طراحی سیستم بر اساس آن انجام شده باشد. این مدل باید به طور دقیق رفتار امنیتی سیستم را توصیف کند. همچنین نیز باید اثبات شود که پیاده‌سازی سیستم به طور کامل و صحیح با این مدل امنیتی منطبق است.

3. بررسی‌های جامع و مستقل (Independent Vulnerability Analysis): در EAL7، آزمایش‌های بسیار دقیقی برای بررسی هر نوع نقص امنیتی احتمالی انجام می‌شود. این آزمایش‌ها شامل تست‌های رسمی و روش‌های خاص برای کشف آسیب‌پذیری‌های احتمالی است. همچنین آزمون‌های نفوذ بسیار پیشرفته و پیچیده باید روی سیستم انجام شود تا میزان مقاومت آن در برابر حملات سنجیده شود.

4. بررسی کد منبع و تحلیل‌های دقیق (Detailed Code Review and Analysis): کد منبع سیستم باید به صورت دقیق و کامل توسط تیم‌های مستقل مورد بررسی قرار گیرد تا هرگونه خطا یا نقص امنیتی در آن شناسایی و برطرف شود.همچنین تحلیل رسمی کد برای تایید انطباق با مشخصات رسمی و طراحی امنیتی انجام می‌شود.

5. مدیریت پیکربندی و کنترل تغییرات (Configuration Management and Change Control): سیستم‌های کنترل تغییرات باید به گونه‌ای باشند که هر تغییری در سیستم به دقت مستندسازی، پیگیری و بررسی شود تا امنیت سیستم تحت تأثیر قرار نگیرد. همچنین تمامی نسخه‌ها و تغییرات نرم‌افزار باید به طور دقیق مدیریت شوند تا از اعمال تغییرات ناخواسته جلوگیری شود.

6. تاییدیه‌ها و ارزیابی‌های مستقل (Independent Certification and Evaluation): تمامی ارزیابی‌ها و تاییدیه‌ها باید توسط نهادهای مستقل انجام شوند تا صحت و کامل بودن تمامی جنبه‌های امنیتی سیستم تایید شود.

7. مستندسازی جامع (Comprehensive Documentation): تمامی جنبه‌های طراحی، پیاده‌سازی، آزمون‌ها و تحلیل‌های سیستم باید به طور کامل و دقیق مستند شوند. این مستندات باید شامل تمامی روش‌ها و فرآیندهای استفاده شده برای ارزیابی و تایید امنیت سیستم باشد.

سرتیفیکت EAL7 بالاترین سطح از EALها است که نشان‌دهنده اطمینان بسیار بالا از امنیت یک سیستم است. به همین دلیل، دستیابی به این سطح از امنیت نیازمند تلاش، دقت، و استفاده از روش‌های بسیار پیشرفته است. این سطح عمدتاً برای سیستم‌هایی مانند سیستم‌های نظامی، بانکداری، و مواردی که نیاز به امنیت بسیار بالا دارند، مورد استفاده قرار می‌گیرد.

✍️ نویسنده میلاد کهساری الهادی
راهبر فنی تحقیقات تیم آیو / مدرس برنامه‌نویسی سیستمی


یکشنبه - ۲۸ اَمرداد ۱۴۰۳

@aioooir | #linux #stupidswar
📌قسمت اول: لینوکس بهتر است یا ویندوز، آخر سر حق با کیست؟

شاید یکی از قدیمی‌ترین کل‌کل‌های فنی در بین پیرمردها و جوانک‌های پر حاشیه همین گزاره لینوکس بهتر است یا ویندوز باشد. بگذارید یک بار بدون هیچ تعصبی بررسی کنیم که چرا هر دوی این سیستم‌های عامل سر و ته یک کرباس هستند و عملا در مسئله امنیت تفاوتی با هم ندارند.

همانطور که در جریان هستید، لینوکس و ویندوز، دو غول در صنعت سیستم‌های‎عامل دسکتاپی و سروری هستند که همیشه در حال رقابت‌اند و هر کدام با ادعاهای بزرگ و سر و صدای زیاد در دنیای فناوری می‌چرخند. یکی به نام آزادی و متن باز بودن می‌بالد و دیگری به واسطه رابط کاربری ساده و محبوبیتش میان کاربران عادی، تاج پادشاهی را بر سر خود می‌گذارد. ولی شاید برای شما و تمامی افراد متخصص عجیب باشد که با تمام این ادعاها، این دو سیستم‌عامل بعد از 40 سال هنوز نتوانسته‌اند، مدرک EAL7 را کامل پاس کنند!

بیایید این‌طور تصور کنیم: لینوکس و ویندوز مثل دو دانش‌آموز تنبل‌اند که همیشه در حال رقابت برای کسب رتبه اول کلاس هستند. هر کدامشان ادعا می‌کنند که درسشان بهتر است، یکی می‌گوید من در امنیت بی‌نظیرم چون اوپن‌سورسم و همه می‌توانند کدهایم را بررسی کنند، و دیگری با صدای بلند می‌گوید که من میلیون‌ها کاربر دارم و برای همه آسان‌فهمم. اما وقتی نوبت به امتحان امنیت واقعی می‌رسد، یعنی همان EAL7 که حکم امتحان نهایی را دارد، هر دو ناگهان دفترچه‌ها را جمع می‌کنند و بهانه می‌آورند!

لینوکس: "ببین، ما نمی‌خواهیم مدرک بگیریم! ما اینجا برای آزادی هستیم. امنیت؟ ما امنیت را در جوامع خودمان تعریف می‌کنیم!"

ویندوز: "خب، ما به امنیت اهمیت می‌دهیم، اما خیلی هم مهم نیست، چون ما کاربران زیادی داریم و آن‌ها عاشق رابط کاربری ما هستند. مدرک؟ اونا چی هستن؟"

و این‌طور است که هر دو هنوز پشت درهای EAL7 مانده‌اند. عجیب نیست که با این همه ادعا، حتی در دنیای امنیتی که همواره یکی از ادعاهای اصلی هر دو بوده، نتوانسته‌اند امتیاز کامل بگیرند؟ به نظر می‌رسد که وقتی صحبت از EAL7 می‌شود، این دو مثل آن دانش‌آموزانی هستند که قبل از امتحان می‌گویند: "ما آماده‌ایم!" اما وقتی برگه امتحان را جلویشان می‌گذارند، فقط آهی می‌کشند و زیر لب غر می‌زنند: "اصلاً این امتحان لازم بود؟"

شاید روزی بالاخره لینوکس و ویندوز تصمیم بگیرند که کمی بیشتر روی تکالیفشان کار کنند و ما را با مدرک EAL7 شگفت‌زده کنند. اما تا آن روز، همین دعواهای همیشگی و ادعاهای بی‌پایانشان را با لبخندی بر لب ادامه خواهیم داد! از این پس هر کسی گفت فلان سیستم عامل بهتر است، از او بپرسید اگر EAL7 را دارد، حرف شما صحیح است، والا وقت ما را هدر ندهید.

✍️ نویسنده میلاد کهساری الهادی
راهبر فنی تحقیقات تیم آیو / مدرس برنامه‌نویسی سیستمی


یکشنبه - ۲۸ اَمرداد ۱۴۰۳

@aioooir | #linux #stupidswar
📌طراحی یک سامانه Windowing برای لینوکس از صفر

همیشه برایم جالب بود که بدانم کدام لایه‌ها در سیستم‌عامل، به‌ویژه در محیط لینوکس، درگیر نمایش المان‌های گرافیکی می‌شوند. آنچه تا این لحظه متوجه شده‌ام این است که در لینوکس، شما یا به X Window System می‌رسید یا اگر بخواهید کنترل کاملی بر تمام جزئیات داشته باشید، باید سراغ framebuffer بروید، که یک ماتریس پیکسلی نمایشگر را نگهداری می‌کند.

البته انجام کارهای گرافیکی مستقیم به واسطه کار با این بافر واقعاً پیچیده است. مدیریت متغیرهای مختلف مانند پیکسل‌ها، تنظیمات رنگ، و رزولوشن، چالش‌برانگیز است. با این حال، استفاده از X برای ترسیم المان‌های گرافیکی ساده‌تر است، زیرا کتابخانه‌های برنامه‌نویسی گرافیکی با رابط‌های این سیستم کار می‌کنند.

اولین لایه یا پایین‌ترین سطح، متعلق به framebuffer است. کار با این لایه نیازمند دقت فراوان و آگاهی کامل از جزئیات فنی است، زیرا این لایه به صورت مستقیم با نمایشگر و کارت گرافیک در ارتباط است. به بیان ساده، داده‌های پیکسل‌های نمایشگر در این بافر ذخیره می‌شوند و هر تغییری در آن بلافاصله روی صفحه نمایشگر اعمال می‌شود. اما به دلیل نیاز به مدیریت دقیق پیکسل‌ها، تنظیمات رنگ، و رزولوشن، کار با framebuffer چالش‌برانگیز است.

لایه بعد از فریم بافر، متعلق به X Window System است که مسئول مدیریت و کنترل سیستم گرافیکی لینوکس است. X به برنامه‌ها اجازه می‌دهد بدون نیاز به دسترسی مستقیم به سخت‌افزار گرافیکی، المان‌های گرافیکی را روی صفحه نمایش ترسیم کنند. کتابخانه‌های گرافیکی مانند GTK، Qt و OpenGL نیز از X به عنوان رابطی برای ترسیم استفاده می‌کنند تا از پیچیدگی‌های کار با framebuffer دوری کنند.

البته لایه‌های دیگری هم در این فرایند وجود دارند که در دوره‌های برنامه‌نویسی آیو به اندازه کافی درباره آن ها صحبت خواهیم کرد، اما تا این لحظه متوجه شده‌ام که استفاده از X برای ترسیم محیط‌های گرافیکی برنامه‌ها گزینه‌ای ساده‌تر و کارآمدتر است.

✍️ نویسنده میلاد کهساری الهادی
راهبر فنی تحقیقات تیم آیو / مدرس برنامه‌نویسی سیستمی


یکشنبه - ۲۸ اَمرداد ۱۴۰۳

@aioooir | #linux #embedded
📌 برنامه نویسی گرافیکی سطح پایین در لینوکس و فریمورک کیوت
✏️ نویسنده میلاد کهساری الهادی
۲ فروردین ۱۴۰۲

در لینوکس اگر قصد برنامه نویسی گرافیکی داشته باشید، مخصوصا با استفاده از رابط های سطح پایین، یا به عبارتی بخواهید برنامه شما خیلی سطح پایین و بدون واسطه با کرنل کار کند، که روی همه دستگاه هایی که کرنل لینوکس داشته باشند برنامه شما اجرا شود باید به سراغ framebuffer بروید. در این پست قصد دارم مقداری درباره آن حرف بزنم.

برنامه نویسی با framebuffer کل کار رو به خودت می سپارد (مانند استفاده از Winapi برای برنامه نویسی گرافیکی در ویندوز که همه چیز توسط برنامه نویس پیاده سازی می شود)، در این حالت لینوکس هم بحث window compositing کامل بر عهده خودت است. شاید پیاده سازی برنامه با چنین رویکردی بی نهایت سخت نباشد اما چیزی که بی نهایت سخته بهینه پیاده کردن چنین برنامه ای است. چون خیلی کند میشه مخصوصا روی موبایل ... اسکرول ها و اسکیل کردن ها وحشتناک کندتر از حالت عادین مگه اینکه درست حسابی با SSE/NEON اپتیمایزشون کنید.

شایان ذکر است، فریمورک Qt یک مود دارد که میاد مستقیما روی framebuffer اجرا می شود که در آن صورت X به کلی کنار می رود. البته اونجا Qt نقش window manager رو ندارد دیگر. برنامه ای که به این شکل پیاده سازی می شود که بیشتر مناسب بحث اینترنت اشیا و گجت های امبدد است.

لذا وقتی شما قصد برنامه نویسی گرافیکی روی لینوکس به صورت نیتیو داشته باشید، مخصوصا هنگام بهینه سازی برنامه مذکور دچار حمله قلبی خواهید شد. شاید ده برابر تایمی که برای پیاده سازی این موضوع نیازه، برای بهینه کردنش زمان و هزینه نیازه. از رندر کردن فونت و تایپ فیس ها گرفته تا بحثای window compositing مثل همین کشیدن پنجره ها، بزرگ کوچک کردنشون، انیمیشن ها، اسکرول کردن لیست ها، درگ کردن ها و ...

فریمورک کیوت به شما این امکان و میده که برنامه های گرافیکی تو مدهای گوناگون روی لینوکس بنویسید و دچار این مشکلات نشوید. برای همین خیلی از پوسته های لینوکس و الان با کیوت می نویسند چون به مراتب پرفورمنس بهتری داره.

این مسئله البته در ویندوز هم هست، مثلا وقتی شما بروید از Winapi برای پیاده سازی یک برنامه گرافیکی استفاده کنید، با خیلی از مسائل درگیر خواهید شد (مثلا فقط برای کنترل تمامی ایونت های مرتبط با اسکرول در ویندوز باید بیش از 20 تا پیام و کنترل کنید و براشون داخل swtch-case رول بنویسید). در حالیکه هنگام استفاده از کیوت دیگر آن مسائل و مدیریت تمامی Eventها و Messageها نیازمند نیستند.

خلاصه استفاده از این کتابخونه ها تو خیلی از شرایط به شما کمک می کنه با سرعت زیاد یک برنامه با پرفورمنس مناسبت طراحی کنید. لذا شما بدون اینکه دچار panic شوید، می توانید داخل کیوت برنامه نویسی کنید (با رعایت مسائل cross-platform) و روی پلتفرم های گوناگون آن را کامپایل کنید و خروجی بگیرید. به هر صورت کیوت کار ما رو به عنوان برنامه نویس با این رویکرد ساده تر کرده است.

@aioooir | #linux #low_development