پیشنویس:تصادفیسازی چیدمان فضای آدرس
تصادفیسازی چیدمان فضای آدرس (ASLR) یک روش امنیت رایانهای است که در جلوگیری از سوء استفاده از آسیبپذیریهای فساد حافظه نقش دارد. به منظور جلوگیری از پرش مطمئن یک حملهکننده به مثلا یک تابع خاص به کار رفته در حافظه، ASLR به صورت تصادفی موقعیتهای فضای آدرس مناطق دادهی کلید یک فرآیند را مرتب میکند، که شامل پایهی قابل اجرا و موقعیتهای پشته، هیپ و کتابخانهها میباشد.
تاریخچه
پروژه PaX لینوکس اولین بار اصطلاح "ASLR" را ابداع کرد و اولین طراحی و اجرای ASLR را در ژوئیه 2001 به عنوان وصلهای برای هسته لینوکس منتشر کرد. این پروژه به عنوان یک پیادهسازی کامل دیده میشود، که از اکتبر 2002 یک وصله برای تصادفیکردن پشتههای هسته فراهم می کند. [۱]
اولین سیستم عامل جریان اصلی که به طور پیش فرض از ASLR پشتیبانی میکند، نسخه OpenBSD 3.4 در سال 2003 بود،[۲][۳] که به دنبال آن لینوکس در 2005 آمد.
فواید
تصادفیسازی فضای آدرس، مانع از برخی انواع حملات امنیتی میشود و پیشبینی آدرس های هدف را برای مهاجم دشوارتر میکند. به عنوان مثال ، مهاجمین که سعی در اجرای حملات بازگشت به libc دارند، باید کد را برای اجرا مکانیابی کنند، در حالی که سایر مهاجمین که سعی در اجرای کد شل تزریق شده روی پشته را دارند، ابتدا باید پشته را پیدا کنند. در هر دو مورد، سیستم آدرسهای مربوط به حافظه را از مهاجمین پنهان میکند. این مقادیر باید حدس زده شوند و یک حدس اشتباه معمولاً به دلیل خرابی برنامه قابل بازیابی نیست.
اثربخشی
تصادفیسازی چیدمان فضای آدرس، براساس احتمال کم حدسزدن مکانهای تصادفی مناطق برای مهاجم است. امنیت با افزایش فضای جستجو افزایش مییابد. بنابراین، تصادفیسازی فضای آدرس زمانی موثرتر است که آنتروپی بیشتری در آفستهای تصادف وجود داشته باشد. آنتروپی با افزایش مقدار فضای حافظه مجازی که در آن تصادفیسازی اتفاق میافتد یا کاهش مدت زمانی که تصادفیسازی اتفاق میافتد، افزایش مییابد. این دوره به طور معمول تا حد ممکن کوچک پیادهسازی میشود، بنابراین بیشتر سیستمها باید تصادفیسازی فضای VMA را افزایش دهند.
برای شکستدادن تصادفیسازی، مهاجمان باید با موفقیت موقعیتهای همهی مناطقی را که می خواهند به آن حمله کنند، حدس بزنند. برای مناطق داده مانند پشته و هیپ، جایی که کد سفارشی یا داده های مفید بارگذاری میشوند، با استفاده از اسلایدهای NOP برای کد یا کپی های مکرر داده، به بیش از یک حالت حمله میشود. اگر منطقه به طور تصادفی به یكی از مقادیر معادل تصادفی تبدیل شود، این امر می تواند به موفقیت حمله برسد. در مقابل، مناطق کد مانند پایگاه کتابخانه و جز اصلی قابل اجرا نیاز دارند که دقیقاً کشف شوند. اغلب این نواحی با هم مخلوط میشوند، به عنوان مثال فریمهای پشته روی پشته تزریق می شوند و یک کتابخانه به داخل باز میگردد.
متغیرهای زیر قابل تعریف هستند:
- (بیتهای آنتروپی بالای پشته)
- (بیتهای آنتروپی پایه
mmap()) - (بیت های آنتروپی پایه اصلی قابل اجرا)
- (بیتهای آنتروپی پایه هیپ)
- (بیتهای حملهشده در هر تلاش آنتروپی پشته)
- (بیتهای حملهشده در هر تلاش آنتروپی پایه
mmap()) - (بیتهای حملهشده در هر تلاش آنتروپی اصلی قابل اجرا)
- (بیتهای حملهشده در هر تلاش آنتروپی پایه هیپ)
- (تلاشهای انجامشده)
- (مقدار کل آنتروپی: )
برای محاسبهی احتمال موفقیت یک مهاجم، باید تعدادی از تلاشها یعنی الگو:Mvar را بدون قطع شدن توسط IPS مبتنی بر امضا، اجرای قانون یا عامل دیگر انجام دهیم. در صورت وقوع جستجوی فراگیر، Daemon نمیتواند دوباره شروع شود. ما همچنین باید دریابیم که چه تعداد بیت مربوط هستند و چه تعداد در هر تلاش مورد حمله قرار می گیرند، با دستکشیدن از هر چند تعداد بیتی که حملهکننده باید شکست بدهد.
فرمول زیر نشاندهنده احتمال موفقیت برای یک مجموعه دادهشده از تلاشهای الگو:Mvar در بیتهای آنتروپی الگو:Mvar است.
- (حدسزدن مجزا؛ فضای آدرس پس از هر تلاش دوباره تصادفی میشود)
- (اجبار بیرحمانه منظم در رونوشتهایی از برنامه با فضای آدرس مشابه)
در بسیاری از سیستمها، مقدار میتواند در محدودهی هزاران یا میلیونها باشد؛ در سیستمهای 64 بیتی، این اعداد معمولا حداقل به میلیونها میرسد، آقایان هکتور مارکو گیزبرت و اسماعیل ریپول در سال 2014 نشان دادند که چگونه میتوان ASLR را در سیستمهای 64 بیتی در کمتر از یک ثانیه تحت شرایط خاص دور زد.[۴] برای سیستمهای 32 بیتی با سرعت رایانه 2004 که 16 بیت برای تصادفیسازی آدرس دارد، جناب آقای شچم و همکارانش بیان کردند: "16 بیت تصادفیسازی آدرس را می توان با حملهی جستجوی فراگیر در عرض چند دقیقه مغلوب کرد."[۵] بیانیهی نویسندگان بستگی به توانایی چندین بار حمله به هر برنامهی مشابه و بدون هیچ تاخیری دارد. پیادهسازیهای صحیح ASLR، مانند آن که در ماژول امنیت GR گنجانده شدهاست، روشهای مختلفی را ارائه می دهد تا چنین حملات جستجوی فراگیری ناممکن شود. یک روش شامل جلوگیری از اجرای یک جز قابل اجرا برای مدت زمان قابل تنظیم در صورتی است که تعداد معینی بار تصادف کرده باشد.
Android،[۶] و احتمالاً سایر سیستمها، تصادفیسازی سفارش بارگذاری کتابخانه را پیادهسازی میکند، نوعی از ASLR که ترتیب بارگذاری کتابخانهها را تصادفی میکند. این سیستم آنتروپی بسیار کمی عرضه میکند. تقریب تعداد بیتهای آنتروپی عرضهشده در هر کتابخانه مورد نیاز در زیر آمدهاست. این تقریب هنوز اندازههای متنوع کتابخانه را در نظر نمیگیرد، بنابراین در حقیقت آنتروپی واقعی بهدستآمده بالاتر است. توجه داشته باشید که مهاجمان معمولاً فقط به یک کتابخانه احتیاج دارند. ریاضیات با کتابخانههای متعدد پیچیدهتر است و به خوبی در زیر نشان داده شدهاست. توجه داشته باشید که مورد مهاجمی که فقط از یک کتابخانه استفاده میکند سادهسازی فرمول پیچیدهتر برای است.
این مقادیر حتی برای مقادیر زیادی از الگو:Mvar به کم میل میکند، از همه مهمتر اینکه مهاجمان معمولاً فقط میتوانند از کتابخانه استاندارد C استفاده کنند و بنابراین میتوان فرض کرد که است. با این حال، حتی برای تعداد کمی از کتابخانهها، تعداد کمی از بیتهای آنتروپی در اینجا بهدستآمده است. بنابراین به طور بالقوه ترکیب تصادفیسازی سفارش بارگذاری کتابخانه با تصادفیسازی آدرس VMA برای بهدستآوردن چند بیت اضافی از آنتروپی جالب است. توجه داشته باشید که این بیتهای اضافی آنتروپی فقط به کتابخانهها اعمال میشود نه سایر بخشهای mmap().
کاهش آنتروپی
مهاجمان ممکن است از چندین روش برای کاهش آنتروپی موجود در یک فضای آدرس تصادفی استفاده کنند، اعم از نشت اطلاعاتی ساده گرفته تا حمله به چندین بیت آنتروپی در هر حمله (مانند افشاندن هیپ). در این باره چیزهای کمی برای انجامدادن وجود دارد.
با استفاده از آسیبپذیریهای رشته قالب ، ممکن است اطلاعات مربوط به چیدمان حافظه به بیرون نشت کند. توابع رشته قالب مانند printf از یک لیست آرگومان متغیر برای انجام کار خود استفاده میکنند. مشخصکنندگان قالب چیزی را که لیست آرگومان به آن شبیه است، توصیف می کنند. به دلیل روشی که معمولا آرگومانها عبور میکنند، هر مشخصکنندهی قالب به بالای قاب پشته نزدیکتر میشود. سرانجام، نشانگر بازگشت و نشانگر قاب پشته میتواند استخراج شود و آدرس یک کتابخانهی آسیبپذیر و آدرس یک قاب پشتهی شناختهشده را نشان دهد. این میتواند به طور کامل تصادفیسازی کتابخانه و پشته را به عنوان مانعی برای مهاجم از بین ببرد.
همچنین میتوان آنتروپی را در پشته یا هیپ کاهش داد. پشته معمولاً باید با 16 بایت تنظیم شود، بنابراین این مقدار کوچکترین فاصله تصادفیسازی ممکن است. در حالی که هیپ باید با صفحه تنظیم شود، به طور معمول 4096 بایت. هنگام تلاش برای حمله، میتوان حملات تکراری را با این فواصل مرتب کرد. از یک اسلاید NOP با تزریق کد شل استفاده می شود ، و رشتهی "الگو:Code" را میتوان با "الگو:Code" برای تعداد دلخواه برشها هنگام تلاش برای بازگشت به سیستم جایگزین کرد. تعداد بیتهای حذف شده دقیقاً برابر است با برای الگو:Mvar فاصلهی حملهشده.
این کاهش به دلیل مقدار داده موجود در پشته یا هیپ محدود است. به عنوان مثال پشته معمولاً محدود به الگو:Val مگابایت است و بسیار کمتر رشد میکند. این حداکثر برای الگو:Val بیت اجازه میدهد اگر چه یک تخمین محافظهکارانهتر خواهد بود در اطراف ۸-الگو:Val بیت مربوط به ۴-الگو:Val کیلوبایت از پر کردن پشته. از طرف دیگر، هیپ با رفتار تخصیصدهندهی حافظه محدود شدهاست. در مورد glibc، تخصیصهای بالاتر از ۱۲۸ کیلوبایت با استفاده از mmap ایجاد میشود و مهاجمین را به ۵ بیت کاهش محدود میکند. این همچنین یک عامل محدودکننده هنگام اجبار بیرحمانه است. اگرچه میتوان تعداد حملات انجامشده را کاهش داد، اما اندازه حملات به اندازه کافی افزایش مییابد که در برخی شرایط ممکن است این رفتار در سیستمهای تشخیص نفوذ آشکار شود.
محدودیتها
آدرسهای محافظتشدهی ASLR میتوانند توسط کانالهای جانبی مختلف نشت پیدا کرده و ابزار کاهش را حذف کنند. حملات اخیر از اطلاعاتی که توسط جداکنندهی بافر پیشبینیکنندهی هدف شاخه CPU یعنی (BTB) یا واحد مدیریت حافظه (MMU) نشت پیدا کرده، استفاده کردهاست. هنوز مشخص نیست که آیا این کلاس از حمله ASLR میتواند کاهش یابد یا خیر. اگر آنها نتوانند، سود ASLR کاهش یافته یا از بین میرود.
پیاده سازیها
چندین سیستم عامل اصلی و همه منظوره ASLR را پیادهسازی میکنند.
اندروید
ساندویچ بستنی آندروید 4.0، تصادفیسازی چیدمان فضای آدرس (ASLR) را برای کمک به محافظت از سیستم و برنامه های شخص ثالث از سوء استفاده به دلیل مشکلات مدیریت حافظه، فراهم میکند. پشتیبانی قابل اجرای مستقل از موقعیت در Android 4.1 اضافه شدهاست.[۷] Android 5.0 پشتیبانی غیر PIE را کاهش داده و به همهی باینریهای متصلشدهی پویا نیاز دارد که مستقل از موقعیت باشد.[۸][۹] تصادفیسازی سفارش بارگذاری کتابخانه در 26 اکتبر 2015 در پروژه منبع باز آندروید پذیرفته شده[۶] و در نسخه اندروید 7.0 گنجانده شدهاست.
DragonFly BSD
DragonFly BSD دارای پیادهسازی ASLR را بر اساس مدل OpenBSD است که در سال 2010 اضافه شدهاست.[۱۰] این پیادهسازی به طور پیش فرض خاموش است و میتواند با تنظیم مقدار sysctl vm.randomize_mmap به 1 فعال شود.
FreeBSD
پشتیبانی از ASLR در FreeBSD 13.0 (در حال حاضر در دست توسعه) پدیدار میشود.[۱۱] این مورد به صورت پیشفرض غیر فعال است.
iOS به کار رفته در (iPhone ، iPod touch ، iPad)
اپل ASLR را در iOS 4.3 معرفی کرد (منتشر شده در مارس 2011).[۱۲]
KASLR در iOS 6 معرفی شد.[۱۳] پایه هسته تصادفیشده 0x01000000 + (((1 + 0xRR) * 0x00200000) است که در آن 0xRR یک بایت تصادفی از SHA1 (دادههای تصادفی) تولیدشده توسط iBoot (بارگذارنده راهانداز iOS دارای ۲ مرحله) است.[۱۴]
لینوکس
هسته لینوکس از زمان انتشار نسخه 2.6.12 هسته در ژوئن 2005، به طور پیش فرض شکل ضعیفی از ASLR را فعال کرد.[۱۵] مجموعه وصلههای PaX و Exec Shield به هسته لینوکس پیادهسازیهای کاملتری را ارائه میدهند. وصله Exec Shield برای لینوکس 19 بیت آنتروپی پشته را برای دورهی 16 بایت و 8 بیت تصادفیسازی پایه mmap در یک دوره 1 صفحهای از 4096 بایت فراهم میکند. این مطلب پایهی پشته را در منطقه 8 مگابایت گسترده شامل 524،288 موقعیت ممکن و پایهی mmap در منطقه 1 مگابایت گسترده شامل 256 موقعیت ممکن قرار میدهد.
جزء قابل اجرای مستقل از موقعیت (PIE) یک آدرس پایهی تصادفی را برای باینری اصلی قابل اجرا پیادهسازی میکند و از سال 2003 آغاز به کار کردهاست. این جزء، تصادفیبودن آدرس مشابهی را به عنوان عامل اصلی برای کتابخانههای مشترک مورد استفاده قرار میدهد. ویژگی PIE فقط برای شبکهای که با Daemonها روبرو میشود استفاده میگرددالگو:مدرک - ویژگی PIE را نمی توان همراه با ویژگی prelink برای همان جزء قابل اجرا استفاده کرد. ابزار prelink، تصادفی سازی را در زمان prelink و نه زمان اجرا پیادهسازی میکند، زیرا در طراحی، prelink مدیریت جابجایی کتابخانهها را قبل از پیونددهندهی پویا انجام میدهد، که اجازه میدهد تا یک بار برای بسیاری از اجراهای این برنامه جابجایی انجام شود. در نتیجه، تصادفیسازی فضای آدرس واقعی هدف از پیش پیوندزدن را شکست میدهد.
تصادفی سازی با تغییر دامنه اجرای آن با استفاده از شخصیت (2) می تواند برای یک فرآیند خاص غیرفعال شود. [۱۶]
تصادفیسازی چیدمان فضای آدرس هسته (KASLR)، پشتیبانی از تصادفیسازی فضای آدرس را برای اجرای تصاویر هسته لینوکس با تصادفیکردن محل قرار گیری کد هسته در زمان بوت،[۱۷] که در خط اصلی هسته لینوکس در نسخه 3.14 هسته منتشرشده در 30 مارس 2014 ادغام شده، موجب میشود.[۱۸] هنگام کامپایلکردن، می توان آن را در زمان راهاندازی با مشخصکردن الگو:Mono به عنوان یکی از پارامترهای راهاندازی هسته غیرفعال کرد.[۱۹]
چندین حملهی کانال جانبی در پردازندههای x86 وجود دارد که میتوانند آدرسهای هسته را نشت دهند.[۲۰] [۲۱] در اواخر سال 2017، جداسازی جدول صفحهی هسته (KPTI با نام KAISER) برای شکست این حملات ایجاد شد.[۲۲] [۲۳] با این حال، این روش نمیتواند در مقابل حملات کانال جانبی با استفاده از تصادمها در ساختارهای پیشبینیکنندهی شاخه محافظت کند.[۲۴]
ویندوز مایکروسافت
ویندوز ویستا مایکروسافت (منتشرشده در ژانویه 2007) و بعداً ASLR فقط برای اجزای قابل اجرا و کتابخانههای پیوند پویا که به طور خاص به فعالسازی ASLR پیوند خوردهاند فعال شدهاند.[۲۵] برای سازگاری، به طور پیشفرض برای سایر برنامهها فعال نیست. معمولا فقط نرم افزار قدیمی ناسازگار است و ASLR میتواند با ویرایش یک مدخل رجیستری "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Management Memory\MoveImages"،[۲۶] یا با نصب ابزار پیشرفتهی تجربهی کاهش مایکروسافت، کاملاً فعال شود.
مکانهای پشته، هیپ، بلوک محیط فرآیند و بلوک محیط نخ نیز به صورت تصادفی هستند. یک منبع امنیتی از سیمانتک خاطرنشان کرد: ASLR در ویندوز ویستای 32 بیتی ممکن است به اندازه انتظار نیرومند نباشد و مایکروسافت یک ضعف را در پیادهسازی خود اذعان کردهاست. [۲۷]
سیستمهای پیشگیری از نفوذ مبتنی بر میزبان مانند WehnTrust[۲۸] و Ozone[۲۹] همچنین ASLR را برای سیستمعاملهای Windows XP و Windows Server 2003 پیشنهاد میدهند. WehnTrust منبع باز است.[۳۰] جزئیات کامل در مورد پیادهسازی Ozone در دسترس نیست.[۳۱]
در فوریه 2012[۳۲] خاطرنشان شد كه ASLR در سیستمهای 32 بیتی ویندوز قبل از ویندوز 8 میتواند در شرایط حافظهی كم اثربخشیاش كاهش پیدا کند. اثر مشابهی در همین تحقیق بر روی لینوکس نیز حاصل شدهبود. کد تست باعث شد تا سیستم Mac OS X 10.7.3 باعث وحشت هسته شود ، بنابراین در مورد رفتار ASLR آن در این سناریو ناشناخته ماند.
NetBSD
پشتیبانی از ASLR در زمین کاربری در NetBSD 5.0 (منتشر شده در آوریل 2009)،[۳۳] و به طور پیشفرض در جریان NetBSD در آوریل 2016 فعال شد.[۳۴]
پشتیبانی هسته ASLR از amd64 در ماه اکتبر سال 2017 در جریان NetBSD اضافه شد و NetBSD را به عنوان اولین سیستم BSD برای پشتیبانی از KASLR تبدیل کرد.[۳۵]
OpenBSD
در سال 2003، OpenBSD به اولین سیستمعامل جریان اصلی تبدیل شد که از یک شکل قوی از ASLR پشتیبانی کرده و به طور پیشفرض آن را فعال کند.[۲] OpenBSD پشتیبانی از ASLR خود را در سال 2008 با افزودن پشتیبانی برای باینریهای PIE کامل کرد.[۳۶] malloc (3) در OpenBSD 4.4 برای بهبود امنیت با بهرهگیری از ویژگیهای ASLR و صفحهی شکاف پیادهسازی شده به عنوان بخشی از فراخوان سیستمی mmap در OpenBSD و شناسایی اشکالات پس از استفاده طراحی شد.[۳۷] OpenBSD 5.3 منتشر شده در 2013، اولین سیستمعامل جریان اصلی بود که اجزای قابل اجرای مستقل از موقعیت را به طور پیش فرض بر روی چندین سکوی سخت افزاری فعال کرده و OpenBSD 5.7 باینریهای استاتیک مستقل از موقعیت (PIE استاتیک) را به طور پیش فرض فعال نمود.
سیستم عامل مک
در سیستم عامل Mac OS X Leopard 10.5 (منتشر شده در اکتبر 2007) ، اپل تصادفیسازی را برای کتابخانههای سیستم معرفی کرد.[۳۸]
در سیستم عامل Mac X X Lion 10.7 (منتشر شده در ژوئیه 2011)، اپل پیادهسازی خود را برای پوششدادن کلیهی برنامهها گسترش داد و اظهار داشت: "تصادفیسازی چیدمان فضای آدرس (ASLR) برای همهی برنامهها بهبود یافتهاست. این پیادهسازی، اکنون برای برنامههای 32 بیتی (همانند محافظت از حافظهی هیپ) در دسترس است و باعث مقاومتر شدن برنامههای 64 بیتی و 32 بیتی در برابر حمله میشود."[۳۹]
از سیستم عامل OS X Mountain Lion 10.8 (منتشر شده در ژوئیه 2012) تا بعد آن، کل سیستم از جمله هسته و همچنین ماژولهای هستهی قابلبارگذاری و مناطق به طور تصادفی در طول راهاندازی سیستم جابجا میشوند.[۴۰]
سولاریس
ASLR در آغاز سولاریس با Solaris 11.1 (منتشر شده در اکتبر 2012) معرفی شدهاست. ASLR در Solaris 11.1 میتواند به صورت گسترده سیستمی، در هر منطقه و یا بر پایهی هر باینری تنظیم شود.[۴۱]
بهره برداری
حمله کانال جانبی با استفاده از بافر هدف شاخه برای دورزدن حفاظت ASLR نشان داده شد.[۲۴] در سال 2017، حمله ای به نام "ASLR⊕Cache" نشان داده شد که میتوانست ASLR را در یک مرورگر وب با استفاده از JavaScript شکست دهد.[۴۲]
همچنین ببینید
منابع
لینک های خارجی
- تکنیک های کاهش بهره برداری: بروزرسانی پس از 10 سال در OpenBSD
- مستندات PaX در مورد ASLR
- مقایسه PaX با Exec Shield و W ^ X
- تصادفیسازی چیدمان فضای آدرس در ویندوز ویستا - لاگ وب مایکل هوارد
- ASLR برای ویندوز 2000 / XP / 2003 (WehnTrust)
- دور زدن محافظت از PaX ASLR
- در مورد اثربخشی تصادفیسازی چیدمان فضای آدرس
- برنامه های کاربردی (یا کتابخانهها) را برای پشتیبانی از ASLR و DEP تست کنید
- مرجع ASLR Smack & Laugh
- ↑ الگو:Cite web
- ↑ ۲٫۰ ۲٫۱ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite conference
- ↑ ۶٫۰ ۶٫۱ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ mmap - add mmap offset randomization, DragonFly Gitweb, 25 November 2010.
- ↑ الگو:Cite web
- ↑ Pwn2Own day 2: iPhone, BlackBerry beaten; Chrome, Firefox no-shows, Ars Technica, 11 March 2011
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ The NX Bit And ASLR, Tom's Hardware, 25 March 2009.
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite conference
- ↑ الگو:Cite journal
- ↑ الگو:Cite news
- ↑ الگو:Cite news
- ↑ ۲۴٫۰ ۲۴٫۱ الگو:Cite book
- ↑ الگو:Cite web
- ↑ Windows Internals: Including Windows Server 2008 and Windows Vista, Fifth Edition (PRO-Developer) الگو:شابک
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ الگو:Cite web
- ↑ Controlling Access to Machine Resources, Oracle Information Library, 26 October 2012.
- ↑ AnC VUSec, 2017