مکانیابی خطاها از طریق ایجاد سیاستها در فایروال
فایروالها از جمله عناصر بسیار مهم در تأمین امنیت سازمانها محسوب شده و جزو پرکاربردترین فناوریهای حفاظت از شبکهها هستند. ایجاد اطمینان از درست بودن سیاستهای فایروالها از طریق آزمون و ارزیابی، اهمیت بسیار زیادی دارد. در فرایند ارزیابی سیاستهای فایروال، بستههایی که قصد ورود به شبکه خصوصی مدنظر را دارند ورودیها و تصمیمی که برای پذیرش یا عدم پذیرش هر بسته گرفته میشود، خروجی این فرایند هستند.
بستههایی که تصمیمگیری صورت گرفته برای آنها پذیرش (یا عدم پذیرش) باشد، در این ارزیابی پذیرفته (یا رد) میشوند. آزمونگرهای سیاست باید با توجه به بستههای رد یا پذیرفته شده، سیاستها را تحلیل نموده و خطاهای تصمیمگیری (مثل نقص در قوانین فایروال) را شناسایی کنند. چنین فرایندی معمولاً زمانبر است.
از این رو در این مطلب از فراست برای کمک به کمتر شدن تلاش مورد نیاز جهت تشخیص مکانهای خطا روشی پیشنهاد میدهیم که تعداد قوانین مورد بررسی را بر اساس اطلاعات جمعآوری شده در طول فرایند ارزیابی بستههای رد شده کاهش میدهد. روش پیشنهادی ما این قوانین کاهش یافته را رتبهبندی میکند تا مشخص شود کدام قوانین باید زودتر بررسی شوند. در نهایت نیز آزمایشهایی را بر روی روش پیشنهادی اجرا کردیم که نشان میدهند این روش، 56 درصد از قوانین مورد بررسی برای مکانیابی خطا را کاهش میدهد.
مقدمه ای بر فایروالها
فایروالها که نقش اولین خط دفاعی را در برابر حملات مخرب و ترافیک غیرمجاز دارند، از جمله عناصر بسیار مهم برای امنسازی شبکههای خصوصی کسبوکارها، سازمان ها و شبکههای خانگی هستند. فایروال معمولاً در نقطه ورودی و محل تلاقی بین یک شبکه خصوصی و شبکه بیرونی (اینترنت) نصب میشود به صورتی که کل ترافیک ورودی به شبکه خصوصی و خروجی از آن باید از فایروال عبور کند.
از آنجا که عملکرد فایروال وابستگی زیادی به کیفیت سیاستهای تعریف شده برای آن در زمینه فیلتر کردن بستهها دارد، معمولاً خطاهای فایروال ناشی از خطاهایی (پیکربندیهای نادرست) هستند که در قوانین این سیاستها به وجود آمدهاند. کارشناسان امنیتی تعداد بسیار زیادی از فایروالها را بررسی نموده و متوجه شدهاند که در قوانین بیش از 90 درصد این فایروالها خطای پیکربندی وجود دارد!
ابزارهای مختلفی برای ارزیابی قوانین پیشنهاد شدهاند تا مشکلات امنیتی این سیاستها را مشخص کنند. در فرایند ارزیابی سیاستهای فایروال، ورودیها و خروجیها به ترتیب بستههای شبکه و تصمیمهای انجام شده (بر اساس سیاست مورد آزمایش) برای هر بسته هستند. آزمونگرهای سیاستهای فایروال، بستهها و تصمیمهای صورت گرفته برای آنها را ارزیابی نموده تا مشخص کنند آیا تصمیم صورت گرفته طبق انتظار بوده است یا خیر.
این ابزارها جفتهای «ورودی، خروجی» یا همان «بسته، تصمیم» را به دو گروه قبول و رد شده تقسیم میکنند. بستههایی که تصمیمگیری صورت گرفته برای آنها طبق انتظار بوده، در ارزیابی قبول میشوند. بستههایی نیز که تصمیم صورت گرفته برای آنها برخلاف انتظار باشد (به دلیل خطاهای موجود در قوانین یک سیاست) به عنوان بستههای رد شده در آزمون ارزیابی دستهبندی میشوند. بستههای رد شده نشان میدهند که میزان خطا در سیاست مورد ارزیابی چقدر است.
این ابزارها معمولاً با در اختیار داشتن مجموعهای از بستههای رد شده و قبول شده، سیاستهای فایروال را تحلیل و سعی میکنند خطاهای آن را رفع کنند. فرض کنید فایروالی به دلیل وجود یک نقص در سیاستهایش قادر نباشد بسته ای را که شامل بدافزار است فیلتر نموده و مانع از ورود آن به شبکه خصوصی شود. ابزارهای ارزیابی، سیاست فایروال مدنظر را با تحلیل شکست، پیدا کردن خطا و اصلاح خطا عیبیابی میکنند.
در بین این سه مرحله، پیدا کردن خطا (یا مکانیابی خطا) برای تشخیص محل خطا (یعنی علت ریشهای) مثل قوانینی که منجر به ایجاد خطا شدهاند به بررسیهای زمانبر و عمدتاً دستی سیاستها نیاز دارد. هنگامی که یک سیاست فایروال شامل تعداد زیادی قانون باشد، پیدا کردن قوانین معیوب کاری پرزحمت، زمانبر و با احتمال خطای بالا است. بنابراین طراحی روشی کارآمد برای خطایابی میتواند به آزمونگرهای سیاستها جهت کاهش هزینههای عیبیابی کمک کند.
تمرکز ما در این مطلب از فراست بر روی پیدا کردن خطاهای سیاستهای فایروالی است که شامل فقط یک خطا هستند. در این مقاله ما دو نوع خطای مهم را که امکان وجود آنها در سیاستهای فایروالها زیاد است، مدلسازی میکنیم. این دو خطا عبارتند از:
- تغییر تصمیم قانون (RDC[1]): این خطا زمانی رخ میدهد که تصمیم یک قانون نادرست باشد.
- تغییر بازه فیلد قانون (RFC[2]): خطای RFC بیانگر نادرست بودن محدوده مقادیر در یک فیلد است (مثل آدرس آیپی سیستم مبدأ یا مقصد).
وقتی سیاستی حاوی چنین خطاهایی باشد برای بعضی از بستهها تصمیمهای نادرستی گرفته میشود. در روش پیشنهادی ما ابتدا سیاست معیوب و آزمونهای رد شده آن ارزیابی میشوند. در این روش قوانین موجود در آزمونهای شکست خورده مورد بررسی قرار گرفته تا مشخص شود آیا این قوانین شامل خطاهایی مثل RDC و RFC هستند یا خیر.
اگر قوانین مورد بررسی فاقد چنین خطاهایی باشند، روش ما سایر خطاها را بررسی میکند. در این روش برای کاهش تلاش لازم جهت شناسایی محل خطا، تعداد قوانین مورد بررسی بر اساس رفتارهای اشتباه ناشی از خطا کاهش پیدا میکند. همچنین روش ما برای کاهش هر چه بیشتر تلاش مورد نیاز، قوانین کاهشیافته را رتبهبندی میکند تا بر اساس پوشش ساختاری در طول ارزیابی بستههای شکست خورده، مشخص شود کدام قوانین زودتر باید بررسی و تحلیل شوند.
سیاستهای فایروالی
هر سیاست فایروال متشکل از مجموعهای از قوانین است که مشخص میکند بستههایی که بین یک شبکه خصوصی و دنیای اینترنت در جریان هستند، تحت چه شرایطی قبول یا رد شوند. به عبارت دیگر این قوانین درباره قبول شدن (یعنی مجاز بودن) یا رد شدن (یعنی غیرمجاز بودن) بستهها تصمیمگیری میکنند.
هر قانونی که در این سیاست قرار دارد متشکل از یک مجموعه فیلد است. این فیلدها معمولاً شامل آیپی مبدأ/مقصد، شماره پورتهای مبدأ/مقصد، نوع پروتکل و یک تصمیم هستند. هر فیلد همچنین مجموعهای از مقادیر ممکن را نشان میدهد (که با مقادیر مربوط در فیلدهای یک بسته تطبیق داده میشوند). مقادیر فیلدهای هر قانون یا دارای مقدار واحدی بوده یا بازهای متناهی از اعداد صحیح غیرمنفی را شامل میشوند.
هر بسته متشکل از مقادیر مختلفی است که هر کدام از آنها به یک فیلد مربوط هستند. یک بسته فقط در صورتی با یک قانون منطبق میشود که مقدار فیلدهای آن بسته معادل با مقادیر متناظر آن در یک قانون باشد. پس از تطبیق بسته با یک قانون، با توجه به تصمیم قانون، تصمیمگیری مربوط به بسته مربوطه انجام میشود. هنگام ارزیابی هر بسته، سیاست فایروال از روش اولین تطبیق استفاده میکند. در این روش، تصمیم مربوط به اولین قانون تطبیق یافته با یک بسته، تصمیمی است که برای آن بسته در نظر گرفته میشود.
قانون | آیپی مبدأ | پورت مبدأ | آیپی مقصد | پورت مقصد | پروتکل | تصمیم |
r1 | * | * | 192.168.*.* | * | * | Accept |
r2 | 1.2.3.* | * | * | [1,28 − 1] | TCP | Discard |
r3 | * | * | * | * | * | Discard |
جدول بالا مثالی از یک قانون فایروال را نشان میدهد. علامت * نشان دهنده محدوده دامنه مربوطه است (مثلاً دامنه فیلد آیپی از 0.0.0.0 تا 255.255.255.255 میباشد). در این مثال سیاست فایروال شامل سه قانون r2، r1 و r3 است. قانون r1 هر بستهای را که آدرس آیپی مقصد آن برابر با 192.168.∗.∗ باشد (یعنی بازه [192.168.0.0 , 192.168.255.255]) میپذیرد. قانون r2 هر بستهای که مقدار آدرس آیپی مبدأ آن برابر با عدد 1.2.3.∗ (یعنی محدوده [1.2.3.0, 1.2.3.255]) و محدوده پورت آن [1,28 − 1] و پروتکل بسته نیز از نوع TCP باشد رد میکند. قانون r3 همه بستهها را نادیده میگیرد (به این قانون همانگویی[3] هم میگویند).
فرض کنید k بستهای باشد که آدرس آیپی مقصد آن 192.168.0.0 و پروتکلش از نوع UDP است. هنگام ارزیابی k متوجه میشویم که این قانون با هر دو قانون r1 و r3 مطابقت دارد. از بین این دو قانون، تصمیم مربوط به r1 اعمال میشود چون اولین قانون تطبیق یافته با بسته k است و در سیاست این فایروال در رتبه بالاتری قرار دارد. در نتیجه (بر اساس تصمیم r1 که پذیرش است) k پذیرفته میشود.
مدل سیاست فایروال
ما در این مطلب از یک مدل سیاست فایروال بر اساس ویژگیهای مشترک عمومی استفاده میکنیم. یک سیاست فایروال، متشکل از مجموعهای قوانین است که الگوریتم کلی هر کدام از آنها به صورت زیر می باشد:
در عبارت بالا predicate یا گزاره برای هر بسته شامل تعداد متناهی فیلد F1, …, Fn است. مقدار Decision یا تصمیم یک قانون میتواند پذیرش (Accept) یا عدم پذیرش (Discard) باشد که در صورت درست بودن گزاره، به عنوان نتیجه ارزیابی برای بسته مدنظر ایجاد میشود.
هر بسته k را میتوان به شکل یک چندتایی (fv1, …, fvn) بر روی یک مجموعه فیلد متناهی F1, …, Fn در نظر گرفت که در اینجا fvi متغیری است که مقادیر آن در دامنهای که با D(Fi) نمایش میدهیم قرار دارد. در این مدل برای ساده شدن فرمت بازنمایی، مقادیر فیلدها به اعداد صحیح متناظر تبدیل میشود (مثلاً آدرس آیپی 255.255.255.255 به 232−1 تبدیل میشود). فرض کنید Si زیرمجموعهای از دامنه D(Fi) باشد. در این صورت میتوان predicate را به صورت زیر نمایش داد:
(F1 ∈ S1) ∧ … ∧ (Fn ∈ Sn)
به هر Fi ∈ Si یک Clause یا عبارت میگوییم. توجه داشته باشید که سیاست فایروال از روش اولین تطبیق پیروی میکند. با داشتن مجموعهای از قوانین، زمانی که بستهای به فایروال میرسد فرایند زیر تکرار میشود تا جایی که به آخرین قانون برسیم:
if a <predicate> in a rule is evaluated to true, then the corresponding decision is returned; otherwise, the next rule (if exists) is evaluated.
اگر <predicate> قانون درست بود، تصمیم متناظر با آن برگردانده میشود؛ در غیر این صورت نیز قانون بعدی (در صورت وجود) ارزیابی میشود.
مدل خطا
در این بخش، خطاهای احتمالی در سیاستهای فایروال را بررسی میکنیم. فرض کنید خطایی در یک سیاست فایروال وجود داشته باشد. بر اساس مدلهای خطا بر روی دو نوع خطا تمرکز میکنیم:
- تغییر تصمیم قانون (RDC): خطاهای گروه RDC نشان میدهند که تصمیم قانون ri نادرست است. مثلاً نویسندههای سیاست در ri به جای Accept از Discard استفاده کردهاند یا برعکس.
- تغییر بازه فیلد قانون (RFC): خطاهای این گروه در صورتی ایجاد میشوند که بازه یک فیلد Fi در قانون ri نادرست باشد. مثلاً نویسندههای سیاست در فیلد آدرس آیپی مبدأ قانون ri به جای یک بازه مشخص مثل [0, 50] (که فرض شده درست است) از * استفاده کردند.
این خطاها نشان میدهند که یک قانون خاص میتواند شامل یک خطای واحد در یکی از موجودیتهای ساختاری باشد (مثل تصمیم یا بخش گزاره). هر خطایی در یک موجودیت ساختاری میتواند درستی رفتار سیاست را دچار مخاطره کند.
مکانیابی خطا
برای مکانیابی خطا ابتدا قوانین سیاست فایروال را کاهش داده سپس قوانین کاهشیافته را رتبهبندی کردیم تا مشخص نماییم کدام یک از قوانین کاهش یافته باید زودتر مورد بررسی قرار گیرند.
مکانیابی خطای قانون پوشش یافته
در این بخش راهکاری را توضیح میدهیم که هدف آن پیدا کردن قوانینی است که توسط بستههای رد شده شناسایی میشوند و احتمال اینکه دارای خطا باشند زیاد است. این رویکرد، قانون خطادار را در یک سیاست با پیشنهاد بررسی اولین قانون اعمال شده برای بستههای رد شده پیدا میکند. بر اساس این رویکرد اگر بیش از یک قانون در سیاست فایروال وجود داشته که یک بسته رد شده را پوشش داده باشد، اولویت بررسی با اولین قانونی میباشد که بالاتر از سایر قوانین قرار گرفته است. در این رویکرد، rS شامل تمام قوانین سیاست فایروال و rp شامل قوانینی است که یک بسته رد شده را پوشش دادهاند.
فرض کنید سیاست p متشکل از مجموعهای از قوانین (r1, r2, …, r n) باشد. قانون ri به قانون مشکلدار در p گفته میشود. توجه داشته باشید که قوانین ri و rj به ترتیب بستههای ki و kj را که پذیرفته نشدهاند پوشش میدهند. اگر قانون ri در پایین rj قرار گرفته باشد (i>j) مهم نیست که گزاره یا تصمیم ri را چگونه تغییر دهیم چون همچنان بسته kj با rj تطبیق یافته و رد میشود. بنابراین قانون ri باید در بالای rj قرار بگیرد (i ≤ j). از این رو مکان این قانون در سیاست فایروال باید اصلاح شده و در بین قوانین ri و rj، ri در مرتبه بالاتری قرار گیرد.
شکل 2 سیاست یک فایروال را نشان میدهد که شامل یک خطا است. اعداد ستونهای 2 و 3 نشان میدهند که هر قانون توسط چه تعداد بسته رد یا پذرفته شده است. در این مثال از 10 بسته استفاده شده که 8 بسته پذیرفته و 2 بسته رد شدهاند. ما با تغییر تصمیم R4 از Discard به Accept یک خطای RDC به آن تزریق میکنیم. بر اساس رویکرد پیشنهادی ما از آنجا که R4 بالاتر قرار داشته و بستههایی را شامل میشود که توسط قوانین بالاتر پوشش داده نشدهاند، پس احتمالاً R4 یک خطا دارد که باید مورد بررسی قرار گیرد.
کاهش قوانین
اگر اولین قانونی که بستههای رد شده را پوشش میدهد فاقد مشکل باشد، طی دو مرحله تعداد سایر قوانین سیاست فایروال را کاهش داده و فقط قوانینی را بررسی میکنیم که احتمال وجود خطا در آنها بیشتر است.
در گام اول، قانون خطادار اولین قانونی است که بستههای رد شده را پوشش میدهد. در این روش قوانینی که احتمالاً منجر به ایجاد خطا شدهاند (یعنی قوانینی که زودتر از سایر قوانین، بستههای رد شده را پوشش میدهند) مشخص میشوند. فرض کنید p نشاندهنده یک مجموعه قانون r1, r2, …, rn باشد. ri اولین قانونی است که در زمان ارزیابی بستههای رد شده، آنها را پوشش داده و اعمال میشود.
اگر rj قانونی باشد که دچار خطا است چون نسبت به ri در مرتبه پایینتری قرار گرفته (j > i) مورد بررسی و ارزیابی قرار نخواهد گرفت. در این حالت، مهم نیست که چقدر گزاره یا تصمیم rj را تغییر دهیم چون همچنان تصمیم نادرستی برای بسته ki که توسط ri پوشش داده میشود، در نظر گرفته میشود. بنابراین قانون خطادار rj باید هم ردیف با قانون ri بوده یا در رتبه بالاتری نسبت به آن قرار گرفته باشد (j ≤ i) تا بررسی و ارزیابی شود.
مرحله دوم بر این اساس است که تصمیم یک قانون خطادار (decj) باید با تصمیم قوانین پوششدهنده بستههای رد شده (deci) متفاوت باشد. این روش از بین قوانینی که توسط رویکرد اول انتخاب شدهاند قوانینی را برای بررسی انتخاب میکند که تصمیمشان با تصمیم قوانین پوششدهنده بستههای رد شده تفاوت داشته باشد؛ زیرا احتمال اینکه این قوانین دچار خطا باشند بسیار زیاد است.
فرض کنید که یک بسته رد شده، مشمول قانون ri با تصمیم deci میشود و یک قانون rj با تصمیم decj خطادار است (شامل یک عبارت خطادار). پس از اینکه عبارت مشکلدار rj را اصلاح کردیم، بسته رد شده توسط rj پوشش داده میشود. از آنجا که deci تصمیم مورد انتظار برای بسته رد شده نیست، deci و decj باید متفاوت باشند؛ در غیر این صورت اصلاح عبارت مشکلدار منجر به انجام تصمیمگیری مورد انتظار برای بسته نمیشود.
رتبهبندی قوانین
در این بخش روشی معرفی میشود که قوانین کاهش یافته در مرحله قبل را رتبهبندی میکند. منطقی که در پشت این رویکرد قرار دارد به این صورت است که در بین قوانین کاهش یافته، تعداد فیلدهایی که در یک قانون، خطادار «غلط» (False) ارزیابی میشوند حداقل برابر یا کمتر از سایر قوانین است. بنابراین این روش پوشش فیلدها را بررسی نموده و قوانین را بر اساس نسبت فیلدهای غلط به کل فیلدهای ارزیابی شده برای تمام بستههای رد شده، رتبهبندی میکند.
فرض کنید قانون rj شامل یک خطای RFC باشد. k نیز یک بسته است که به جای قانون rj ، قانون ri را شامل میشود (j < i) و بر اساس تصمیم این قانون رد میشود. وقتی یک بسته رد شده، قانون rj را ارزیابی میکند فقط یک فیلد در rj، مقدار بسته k را False در نظر میگیرد اما سایر عبارتهای rj، True بوده و با مقادیر متناظرشان در بسته K مطابقت دارند.
به عبارت دیگر، یک عبارت خاص در rj (که نادرست است)، k را False در نظر میگیرد. وقتی بسته k سایر قوانین بالای ri را ارزیابی میکند، هر قانون حداقل شامل یک فیلد است که با مقدار متناظرش در بسته K تطبیق ندارد. بنابراین تعداد عبارتهایی که در rj با مقادیر متناظرشان در بسته K مطابقت نداشتند باید کوچکتر از فیلدهای سایر قوانینی باشند که با مقادیر متناظرشان در K مطابقت نیافتهاند.
معادلهای به نام “Suspicions“را برای ارزیابی میزان مشکوک بودن قوانین و بر اساس پوشش عبارتها طراحی کرده ایم. Suspicions برای هر قانون، با تقسیم تعداد عبارتهای غلط در زمان ارزیابی بستههای رد شده بر تعداد عبارتهای درست پوشش یافته توسط بستههای رده شده محاسبه میشود. هر چقدر میزان Suspicions برای قانون r بیشتر باشد، احتمال اینکه این قانون خطا داشته باشد کمتر است. روش پیشنهادی ما قوانین را برحسب میزان مشکوک بودن و به ترتیب نزولی مرتب میکند. برای هر قانون r فرض کنید FF(r) (FT(r)) تعداد عبارتهای غلط (درست) در زمان ارزیابی بستههای رد شده باشد. ما برای هر قانون r، suspicion (r) را با استفاده از معادله زیر ارزیابی میکنیم:
شکل 3 سیاست یک فایروال را نشان میدهد که شامل یک قانون خطادار است. ستونهای 2 تا 3 تعداد دفعات پوشش هر قانون به ترتیب توسط بستههای رد و قبول شده را نشان میدهند. ستونهای 4 تا 8 به ترتیب تعداد دفعات پوشش فیلدهای درست و غلط توسط بستههای رد شده، موارد مشکوک بر اساس پوشش عبارت (ستون Susp)، قوانین انتخابی (برای بررسی) و رتبه هر قانون برای تصمیمگیری درباره اولویت بررسی قوانین را نشان میدهند. در این سیاست، R1 یک قانون خطادار است (با تغییر مقادیر فیلد سوم آن از [3,5] به [3,3] یک خطای RFC به قانون تزریق شده است).
در این مثال، 12 بسته برای ارزیابی این سیاست فایروال ایجاد شدند. در بین این بستهها 9 بسته توسط سیاست فایروال پذیرفته و 3 بسته رد شدند. در این مثال قوانین R4 و R5 توسط بستههای رد شده پوشش یافتند. ابتدا R4 که اولین قانون پوشش یافته توسط بستههای رد شده است را مشخص نموده و بررسی میکنیم آیا این قانون، خطایی را شامل میشود یا خیر.
اگر ثابت کنیم R4 دچار هیچ خطایی نیست رویکرد پیشنهادیمان برای کاهش قوانین که در بخش 4.2 معرفی کردیم اعمال میکنیم. ابتدا قوانین R1، R2، R3 را که در رتبه بالاتری نسبت به R4 قرار گرفتهاند در نظر میگیریم. این قوانین در زمان ارزیابی نسبت به R4 اولویت بیشتری داشته و وجود حداق یک خطا در یکی از آنها میتواند بر R4 تأثیرگذار بوده و منجر به ایجاد رفتار غلط توسط سیاست فایروال شود. در بین این سه قانون، R1 و R3 به عنوان قوانینی که احتمال نقص در آنها وجود دارد انتخاب میشوند چون تصمیمات آنها (accept) نسبت به تصمیم R4 (discard) متفاوت است.
با توجه به R1 و R3 در شکل 3، مقدار suspicion (R1) برابر با 0.66 (1 – 3/9 = 0.66) و suspicion (R3) برابر با (1 – 5/9 = 0.44)است. بنابراین احتمال اینکه R1 خطادار باشد نسبت به R3 بیشتر است.
[1] Rule Decision Change
[2] Rule Field interval Change
[3] Tautology