خود آگاهی شناختی

سيد احسان لواساني

۱- مقدمه
در اين مقاله تلاش ما بر اين است تا مفهوم تمايز «خود» از ديگري (ارائه شده در مقالات Forrest و Hoffmeyr) را در راستاي مدل محاسباتي آگاهي شناختي (ارائه شده در مقالات Slomon) بسط دهيم.
تحقق اين بسط و گسترش، داراي ملزوماتي است که سعي شده است در اين مقاله بدان‌ها بپردازيم:
۱- تحليل مفهوم آگاهي و شرايط تحقق آن.
۲- بررسي روش‌هاي تحقيق در مورد آگاهي

 

تحليل مفهوم آگاهي و شرايط تحقق آن: تحليل مفهوم آگاهي و شرايط تحقق آگاهي از آن رو لازم است که مساله‌ي آگاهي دقيقا به خاطر پيچيدگي و ناشناخته بودن «مفهوم آگاهي» و «شرايط تحقق آگاهي» چنين دور از دسترس مانده است. متدلوژي ما از آگاهي بدين صورت است که ابتدا بايد مرادمان را از اين مفهوم روشن گردانيم و سپس شرايطي را بررسي نماييم که تحت آن شرايط آگاهي تحقق مي‌يابد. اما آگاهي يک مفهوم نظري است و لذا معناي آن را نظريه‌ها و مدل‌هاي در مورد آن تعيين مي‌کنند. لذا براي تحليل مفهوم آگاهي ناچاريم تا:

اولا انواع دسته‌بندي‌هاي انجام شده در مورد مفهوم آگاهي را بررسي نماييم.
ثانيا خواص و مستلزمات اصلي آن را مورد بررسي قرار دهيم.
ثالثا فضاي طراحي مدل‌هاي مختلف از آگاهي‌ را بررسي و طبقه‌بندي نماييم.
رابعا مدل‌هايي را در ذيل هر دسته مطرح سازيم.
تا نظريه‌هاي مختلف در مورد شراييط تحقق آگاهي و پيش‌فرض‌ها و تعريف هر کدام از اين مدل‌ها از آگاهي وضوح بيشتري يابد.

روش‌‌هاي تحقيق در مورد آگاهي: آن چه تحقيق در مورد آگاهي را پيچيده‌تر مي‌سازد اين است که هر تعريف و هر نظريه در مورد آگاهي، روش خاص خود را براي تحقيق در مورد آگاهي مي‌طلبد. از ميان روش‌هاي گوناگوني که براي تحقيق در مورد آگاهي گسترش يافته‌اند، ما دو روش را برگزيده‌ايم: اول روش بيولوژيکي و دوم روش محاسباتي. روش بيولوژيکي را از آن رو انتخاب نموديم که در مورد يک نمونه‌ي محقق از آگاهي و در سطح کافي از جزئيات (يا به تعبير آشناتر، در سطح پياده‌سازي آگاهي در يک بستر ارگانيک) به تحقيق مي‌پردازد. گزارشي از فعاليت‌هاي انجام شده و درجريان اين روش در ضميمه‌ي ب آمده است. روش محاسباتي نيز به نحوه و شيوه‌ي مدل کردن، طراحي و تحقق دادن به آگاه

 

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

۲-‌ بسط مدل آگاهي براي تشخيص خود از ديگري
در اين کاربست تلاش ما بر اين است که مجموعه‌اي از رفتارها و نشانه‌هاي محاسباتي را در بستر مدل محاسباتي آگاهي، به يک مفهوم سطح بالا پيوند دهيم: خود بودن و نه ديگري بودن. با استفاده از اين ارتباط تلاش مي‌نماييم تا برنامه‌هاي مورد تهاجم قرارگرفته را تشخيص دهيم و لذا در سطح ميزبان، به يک سيستم امنيتي کامپيوتري دست يابيم.
هر مفهوم سطح بالاي به کار رفته در مدل‌هاي محاسباتيِ آگاهي، پيوسته با صفت و ارزشي همراه است و در کاربست نيز: فراخوان‌هاي سيستم‌عامل با خود امن يا خودِ خود يا Well-Self

 

۲-۱-‌ تشخيص تهاجم در ميزبان
براي تشخيص پوياي تهاجم در ميزبان، به مکانيزمي براي تشخيص رفتارهاي ناهنجار از رفتارهاي هنجار نياز است. پس دنبال خصوصيتي با صفات ذيل هستيم که هويت يک برنامه را بازنمايد:
۱- مختصر
۲- کلي

۳- حساس نسبت به رفتارهاي ناهنجار
اکثر سيستم‌هاي تشخيص تهاجم بر اساس رفتار کاربران عمل مي‌کنند ولي ما در سطح فرايند‌هاي سيستم و بر رفتار برنامه نظارت خواهيم کرد.

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

۱- تعريف استواري از خود هر برنامه
۲- تشخيص فعاليت‌هاي مضر براي هر برنامه يادگيري بر اساس اجراهاي پيشين
ايده‌ي اصلي اين است كه پايگاه‌داده‌ي رفتار بهنجار هر برنامه‌ را بر اساس اجراهاي پيشين آن ايجاد نماييم. اين پايگاه داده (حافظه بلند مدت آن). هرگاه توانستيم اين پايگاه‌داده را بسازيم، مي‌توانيم از آن براي نظارت بر رفتارهاي بعدي آن فرايند استفاده نماييم.

اين تعريف از ”خود” يا رفتار بهنجار، بسياري از جنبه‌هاي رفتار يك فرايند را ناديده مي‌گيرد. اما فلسفه‌ي ما اين است كه ببينيم با يك فرض ساده تا كجا مي‌توانيم پيش رويم.

۲-۲-‌ کارهاي مشابه
دو روش كلان در تشخيص تجاوز وجود دارد: الف) تشخيص تجاوز‌هاي از پيش‌معلوم: در اين روش با استفاده از الگوهاي شناخته شده‌ي تجاوز، خرابكاري‌ها كشف مي‌گردند. ب) تشخيص تجاوزهاي از پيش‌نامعلوم: ماهيت تجاوز بر ما نامعلوم است ولي مي‌دانيم تجاوز باعث تغيير در رفتار بهنجار سيستم مي‌شود. در اين پروژه ما بر اساس نوع پيش‌ رفته‌ايم، يعني تشخيص تهاجم به صورت پويا.
در پروژه‌هايي كه از نوع دوم بوده‌اند، چارچوبي براي رفتار بهنجار يك ”كاربر” تعريف مي‌كرده‌اند. فرض نيز بر اين است كه اگر رفتار كاربري خارج از آن چارچوب بود، تجاوزي رخ داده است. اين چارچوب‌ها يا از طريق آماري، يا به كمك الگوهاي استنتاجي و يا شبكه‌هاي عصبي ايجاد مي‌شده‌اند. اما لازمه‌ي اين رويكرد، نظارت بر فعاليت‌هاي هر كاربر بوده است. اين رويكرد در تطبيق خود با تغيير رفتار كاربران و تغيير خود كاربران، بسيار كند است.

اما يك روش جايگزين اين بوده است که به جاي توجه به رفتار كاربر، بر روي رفتار فرايند‌هايي متمركز شويم كه اجازه‌ي اجراي ف.س. دارند. در اين روش خود كد برنامه مورد مطالعه قرار مي‌گرفت (ف.س.هاي آن و مقدار هركدام) تا الگوي رفتاري آن به صورت صوري و به زبان خاصي مشخص گردد. اين روش که توسط Forrest و Hoffmeyr طراحي شده است، با الگو گرفتن از سيستم ايمني بدن مدل شده است. جزئيات اين مدل در پيوست آمده است و در آن جا تشريح شده است که چگونه اين

مدل با گرايش به توزيع زيرسيستم‌هاي امنيتي در يک شبکه، خود را به ايجاد ايمني در سيستم‌هاي کامپيوتري نزديک کرده است. در اين روش لايه‌اي به نام متامديريت وجود ندارد که رفتار برنامه را بررسي نمايد و آن را بر اساس معيار يا ارزشي به نام امنيت بسنجد، بلکه با به کارگيري «انتخاب منفي» و تربيت تشخيص‌دهنده‌ها، اين کار را به صورت توزيع‌شده انجام مي‌دهد.

روش ما نيز شبيه به اين روش جايگزين است. ما نيز با پروسه‌هاي مجاز به اجراي ف.س.هاي سروكار داريم؛ ولي ما از روش بسيار ساده‌تري براي ”ارائه”‌ي رفتارهاي بهنجار استفاده كرده‌ايم. ما براي استخراج رفتار بهنجار هر فرايند و ايجاد يك هويت و ”خود” براي آن، به عوض بررسي خود كد، نمونه‌هاي اجرا شده‌اي از آن را مطالعه مي‌كنيم. همچنين رويکرد ما، چنانکه در مقدمه آمده است، در جهت بسط نظارت بر رفتار يک برنامه و تعريف «خود» آن برنامه در جهت يک مدل‌ محاسباتي آگاهي بر اساس مقالات Slomon است. در واقع اين پروژه، همان لايه‌ي متامديريت براي يک برنامه است که رفتار آن را (اين رفتار به صورت ف.س.‌ها به لايه‌ي متامديريت ارائه مي‌شود) بر اساس ملاک «خودِ برنامه بودن» ارزيابي مي‌کند.

نتايج کارهاي Forrest و Hoffmeyr نشان مي‌دهد که به کار بستن يک روش توزيع‌شده در ايمني‌سازي سيستم‌هاي امنيتي، در ايجاد يک سيستم امن با خصوصيات لازم آن (استواري، لايه لايه بودن خاکريزها، انعطاف‌پذيري، پويايي و غيره) بسيار موثر خواهد بود.

 

۲-۳-‌ متامديريت امنيت
تشبيه متامديريت امنيت مانند مدير ضرابخانه است که بعد از رفت آمد هر کارمند به خزانه، بدان‌جا سر مي‌زند تا مطمئن شود همه‌ي شمش‌ها سرجاي‌شان هستند.

متامديريت و برنامه، جمعا سيستم مورد نظر ما را تشکيل مي‌دهند: متامديريت با استفاده از اطلاعات دريافتي از محيط (سيستم‌عامل)، احساس خود را از برنامه شکل مي‌دهد (پايگاه‌داده‌اي از رشته‌هاي ف.س مجاز. خود برنامه به عنوان لايه‌ي عکس‌العملي و قصدي (يا برنامه‌اي که صرفا يک لايه دارد). سيستم‌عامل نيز محيط اين سيستم است.

۲-۴-‌ در جستجوي تعريف خود
براي تعريف خود توجه ما به فراخوان‌هاي سيستم‌عامل (ف.س) در برنامه‌هاي با اجازه‌هاي ممتاز است، دليل اين امر نيز عبارتست از:
۱- خرابكاري‌هاي سيستمي، با اجراي برنامه‌هايي رخ مي‌دهند كه تقاضاهاي مکرر و نامعمول ف.س مي‌كنند.
۲- برنامه‌هاي root از فرايندهاي كاربران خطرناك‌تراند چون به قسمت‌هاي بيشتري از كامپيوتر دسترسي دارند.
۳- اين گونه برنامه‌ها محدوده‌ي رفتارشان تنگ‌تر است و در طول زمان نيز پايدارتر.
در هر برنامه‌اي مجموعه‌ي ترتيب‌هاي ممكنِ اجراي ف.س.هاي آن به صورت ضمني مشخص شده است. براساس ترتيب‌هاي ممكن اجراي كد آن،‌ترتيب ف.س.هاي آن به دست مي‌آيند. در هر اجراي بهنجار يكي از اين اعضاي اين مجموعه توليد مي‌شود. لذا اگر ما بتوانيم درخت اجرايي برنامه را تماما پيمايش نماييم مي‌توانيم از اين درخت براي تعريف خود استفاده نماييم. اين درخت در واقع مجموعه‌ي سري‌هاي كوتاهي از اين ف.س.ها است که از سازگاري بالايي برخوردارند. ما رفتار بهنجار يا ”خود” (هويت ) يك برنامه را به صورت سري كوتاهي از ف.س.هايي تعريف مي‌كنيم كه در حين اجراي آن بوجود آمده‌اند.

۲-۵-‌ ‌ اسلوب رفتاري و اندازه‌ي پايگاه‌داده
اما مفيد بودن اين تعريف بسته به پاسخ اين سوال‌ها دارد:

اندازه‌ي پايگاه‌داده‌ي رفتارهاي بهنجار چقدر است؟ چند درصد سري‌هايِ ممكنِ ف.س.ها را به عنوان بهنجار شناخته‌ايم؟ آيا اين تعريف برنامه‌هاي متفاوت را از هم متمايز مي‌كند؟ آيا اين تعريف، رفتارهاي نابهنجار را تشخيص مي‌دهد؟
آزمايش‌هاي ما نشان داده‌اند كه جواب اين سوال‌ها رضايت‌بخش است.
اما اندازه‌ي پايگاه‌داده مهم است چون:

۱- اگر كوچك باشد به تعريف جامع و مانعي از هويت يك فرايند‌ دست يافته‌ايم و مي‌توانيم از آن به صورت بلادرنگ استفاده نماييم.

۲- اندازه‌ي آن مقدار گونه‌گوني رفتار بهنجار يك فرايند را نشان مي‌دهد. يعني اگر گونه‌گوني آن بسيار باشد، پس تشخيص رفتار نابهنجار مشكل مي‌شود. يعني اگر پايگاه‌داده حجم زيادي از تركيب‌هاي ممكن ف.س.ها را بپوشاند، عملا گويي هر رفتاري بهنجار است.

با داشتن پايگاه‌داده‌اي از هويت‌هاي شناخته شده‌ي مهاجمان، متامدير امنيت مي‌تواند هر از چند گاهي تشخيص‌هاي خود را بسنجد تا اسلوب رفتاري خود را انتخاب نمايد: پارامترهاي تطابق تقريبي، طول پايگاه‌داده و طول رشته‌هاي ف.س.
اگر تشخيص‌هاي او عموما درست بودند، وارد اسلوب رفتاري خوش‌بينانه مي‌شود و طول رشته‌ها و حجم پايگاه داده را کاهش مي‌دهد. اما اگر false negativeهاي زيادي بوجود آمدند، وارد اسلوب رفتاري محتاطانه مي‌شود و حجم بيشتري از رفتار برنامه را بررسي مي‌کند.

 

۲-۶-‌ پياده‌سازي
الگوريتم پيشنهادي داراي دو مرحله است:
۱- رفتارهاي بهنجار برنامه را مطالعه مي‌كنيم و از روي آن پايگاه‌داده‌ي الگوهاي بهنجار آن را مي‌سازيم.
براي ساختن پايگاه‌داده،‌ پنجره‌اي به طول k (K متغيري است که طول پنجره را نشان مي‌دهد) را بر روي سري‌هاي كوتاهي از ف.س‌ها مي‌لغزانيم. با اين كار، تمام ترتيب‌هاي مجاز ف.س‌ها را استخراج خواهيم نمود و خواهيم دانست كه هر ف.س‌ مي‌تواند بعد از كدام ف.س‌ ديگر بيايد و در كدام موقعيت. بايد توجه داشت که ما به پارامترهاي ف.س. توجهي نداريم.
حال رفتارهاي بعدي آن را با استفاده از اين پايگاه‌داده بررسي مي‌كنيم تا ببينيم آيا آن رفتار بهنجار هست يا خير. اگر بهنجار نبود، آن را به پايگاه‌داده اضافه مي‌نماييم.
۲- در قدم بعدي سري‌هاي جديد را به كمك همين مكانيزم با پايگاه‌داده مي‌سنجيم: خيلي ساده؛ آيا جزو الگوهاي مجاز هست يا خير. هر عدم هم‌خواني را ثبت مي‌كنيم.
تعداد ناهم‌خواني‌هاي الگوي ترتيب ف.س‌ها با الگوهايِ مجاز ثبت شد ه، تنها ملاك تمايز ”خود” از ”ديگري” است.
اما براي ساختن خود پايگاه‌داده بايد چند تصميم اتخاذ گردد:
۱- آيا بايد يك مجموعه‌ي مصنوعي از ورودي‌ها توليد كنيم تا تمام رفتارهاي بهنجار توليد گردد؟ يا كه ورودي‌هايي از كاربران واقعي؟ تصميم ما: اولي. ولي احتمالا تركيبي از هر دو مفيدتر خواهد بود.
۲- رفتارهاي جديد را چگونه با پايگاه‌داده بسنجيم؟ ‌جواب: به سادگي تعداد عدم تطابق‌ها را بشماريم و انتظار داريم كه اين عدد صفر باشد (يا لااقل از حدي كمتر باشد).
شيوه‌ي تطبيع رشته‌ها: براي تطبيق رشته‌ها ما از روش تطبيق تقريبي استفاده نموده‌ايم. به اين ترتيب که هر ف.س. هر يک از رشته‌هاي به دست آمده از log file برنامه، با ف.س. متناظر آن (از نظر موقعيت در رشته) مقايسه مي‌شود. اگر تعداد عدم تطابق‌ها از حدي بيشتر بود، عدم تطبيق اعلام مي‌شود. اگر تعداد اين عدم تطبيق‌ها از حد ديگري تجاوز نمود، اعلام تهاجم مي‌شود. براي مثال فرض کنيد که رشته‌ي ذيل در دوره‌ي آموزش برنامه، زير رشته‌اي از log file برنامه است.
open read mmap mmap open close …

با لغزاندن پنجره‌اي به طول ۳، رشته‌هاي ف.س. ذيل به دست مي‌آيند:
open read mmap
read mmap mmap

mmap mmap open
mmap open close
چنين تعاقب‌هايي نشان مي‌دهند که بعد از ف.س. open و در موقعيت اول بعد از آن ف.س. read و close مجاز هستند و در موقعيت دوم بعد از آن نيز mmap. حال اگر در دوره‌ي کاري آن، چنين رشته‌اي را دريافت کند:
open close read mmap open mmap …

با لغزاندن پنجره‌اي به طول ۳، رشته‌هاي ف.س. ذيل به دست مي‌آيند:
open close read
close read mmap
read mmap open
mmap open mmap

با تلاش براي تطبيق دادن رشته‌ي اول با پايگاه داده‌ي خود، اولين عدم تطابق با همان اولين رشته‌ي درون پايگاه داده به دست مي‌آيد چراکه نه close و نه readدر جاي خود قرار ندارند و اگر آستانه‌ي عدم تطبيق در مقايسه‌ي دو رشته، دو باشد، عدم تطابق اعلام مي‌شود. اگر شماره‌ي اين عدم تطابق‌ها از آستانه‌ي دومي تجاوز کند (براي مثال ۲۰ شمارش) اعلام خطر خواهد شد.

۲-۷-‌ نتايج
آزمايش‌هاي ما عموما بر روي sendmail بوده است، به دو دليل: اول آن‌که اين فرايند به اندازه‌ي کافي پيچيده است و نيز رفتارهاي آن گونه‌گوني لازم را دارا مي‌باشند و ثانيا تهاجم‌هاي مستند شده ي بسياري درمورد آن وجود دارد. نتايج به دست آمده از آزمايش‌هاي گوناگوني که با نرم‌افزار پياده شده بر روي sendmail انجام شده است به شرح ذيل مي‌باشند:
اول؛ تمايز يک برنامه از برنامه‌هاي ديگر:
براي آن‌که دريابيم رفتار sendmail در نسبت با برنامه‌هاي ديگر چه تغييراتي مي‌کند، آن را نسبت به چند برنامه‌ي متداول ديگر آزموديم. جدول شماره‌ي يک نتايج اين مقايسه‌ها را نشان مي‌دهد. همان طور که در اين جدول ديده مي‌شود ما بر اساس سه طول رشته آزمايش‌ها را انجام داديم. همچنين اين جدول نشان مي‌دهد که به راحتي مي‌توان sendmail را با استفاده از توالي‌هاي کوتاه ف.س.‌ها از ديگر برنامه‌ها تمايز داد.

جدول يک: تمايز sendmail از ديگر فرايندها

دوم؛ تشخيص تهاجم:
در اين نوع آزمايش‌ها ما به دنبال توليد رفتارهايي مشابه با رفتار sendmail ولي همچنان متفاوت از آن بوده‌ايم و لذا دو تهاجمي را انتخاب نموديم که در رخنه کردن موفق بوده‌اند:
Sunsendmailcp: اين برنامه با استفاده از دستور مخصوصي sendmail را وادار مي‌نمايد تا فايلي را به يک نامه متصل گرداند. لذا اگر اين اتفاق براي فايلي چون /.rhosts بيفتد، آن کاربر مي‌تواند دسترسي root پيدا کند.
Syslog: اين حمله با استفاده از رابط syslog موجب مي‌شود که بافري در sendmail پر شود. اين کار با فرستادن نوع خاصي نامه به sendmail صورت مي‌گيرد که sendmail را مجبور مي‌سازد تا يک پيغام خطاي فوق‌العاده طولاني را ثبت کند. چنين کاري باعث خواهد شد که قسمتي از کد ماشين شخص حمله کننده، جايگزين کد sendmail گردد. اين کد نيز باعث مي‌گردد که يک پورت با دسترسي root در اختيار حمله‌کننده قرار گيرد تا هر هنگام که خواست از آن استفاده کند.