Advanced
Intrusion Detection Environment
السلام
عليكم ورحمة الله وبركاته
كيف
أحوال الشباب إن شاء الله الجميع بخير
وعافية ... اليوم
قلت أكتب عن AIDE والذي
هو إختصار لـ "Advanced Intrusion
Detection Environment" وظيفته
هي التحقق من سلامة الملفات File
Integrity Checker الموجودة
على النظام، طبعاً هنا أتكلم عن جنو/لينوكس
:) يتم ذلك
من خلال أخذ صورة snapshot للنظام
في بداية تشغيلك له ومن ثم تصبح هي النقطة
التي يتم بناء المقارنة عليها، أي في
المستقبل عندما تشك بوجود حاجة غريبة أو
تشك بإنه ربما قام أحد المخترقين بتنفيذ
exploit على
أو قام بتنصيب RootKit أو
Trojan داخل
النظام فإنك تستطيع مقارنة الملفات التي
كنت قد أخذت لها snapshot مع
الملفات الحالية وبالتالي تعرف إذا كانت
هذه الملفات قد تغييرت أم لا ...
أول
حاجة لنقم بتحميله من موقع sourceforge:
-
تحميل
aide
أيضاً
سنحتاج الى مكتبة إسمها mhash،
أيضاً قم بتحميلها من موقع sourceforge:
-
تحميل
mhash
الآن
لنقم بتركيب mhash
على نظامنا:
كود:
tar xzvf mhash-version.tar.gz cd mhash-version ./configure make su - cd /path2/mhash-version make install
السبب في تنصيبنا
لمكتبة mhash في
البداية هي كما ذكرت لكم بالأعلى بإنها
أحد متطلبات تنصيب aide
على النظام ...
لنقم الآن بتنصيب
aide على
النظام من خلال أتباع نفس الخطوات السابقة:
كود:
tar xzvf aide-version.tar.gz cd aide-version ./configure make su - cd /path2/aide-version make install
الآن بما إننا
سنقوم بإستعمال برنامج له علاقة بسلامة
الملفات والتحقق منها File
Integrity Checker، من
الظرورة أن نقوم بأخذ الـ md5
للبرنامج نفسه،
فمن يدري ربما يتم عمل تبديل للبرنامج
نفسه وبالتالي يتم التغطية عن جميع
التغييرات التي قد تكون حصلت على الملفات
الموجودة ... لعمل
ذلك عليك أن تعرف أين يوجد برنامج aide
أي أين تم تنصيب
البرنامج التنفيذه حقه ... تستطيع
معرفة ذلك من خلال قراءة البيانات التي
ظهرت على الشاشة لديك حين قمت بعمل make
install أو من خلال
تنفيذ الأمر:
كود:
which aide
على كل حال المسار
عندي هو:
كود:
/usr/bin/aide
الآن لنقوم بأخذ
الـ md5 له
من خلال تنفيذ الأمر التالي:
كود:
md5sum /usr/bin/aide
قم بحفظ الناتج
في ملف وفي مكان لا يستطيع أحد الوصول
أليه مثلا في جيبك :) أي
ما أقصده أن تحتفظ به مثلا على USB
أو CD
وبالتالي هو بعيد
المنال عن الناس ... طبعاً
هناك ملاحظات أخرى سأذكرها في وقتها وهي
مهمة جداً ... بعد
عمل الكومبايل للبرنامج وتنصيبه ستجد في
المجلد الأساسي الذي عملت منه الـ compile
مجلد الـ src
فيه ملف أسمه aide
... من خلاله أيضاً
تستطيع أن تتأكد أكثر من سلامة الملف الذي
قمت بتركيبه وذلك من خلال مقارنة الـ md5
له مع الـ md5
الخاصة بالملف الذي
قمت بتركيبه في الخطوات السابقة ...
الآن
لنفتح الملف الخاص بإعدادات aide
ونلقي نظرة عليه
... أذهب
الى:
كود:
vi /etc/aide.conf
- يوجد في الملف
هذا متغييرات، macros،
و الملفات/المجلدات
التي نريد مراقبتها.
أولاً:
المتغيير مثل:
كود:
@@define TOPDIR /home/user/
ثانياً:
الـ macro
مثل:
كود:
@@ifndef TOPDIR @@define TOPDIR / @@endif
حيث هنا قمنا
بتعريف المجلد الذي سيكون المجلد الأب
أو العلوي لباقي المجلدات.
ثالثاً:
الملفات/المجلدات
التي نريد مراقبتها مثل:
كود:
/etc R
- قاعدة البيانات
الخاصة به هي: aide.db.new
ويختلف مكان تخزينها
من توزيعة الى أخرى وأيضاً لا ننسى بإنك
تستطيع تغيير المسار الخاص بها وأيضاً
إسم هذه القاعدة.
- تستطيع ان تحدد
ما هي الـ attributes التي
تريد aide أن
يقوم بمراقبتها، مثل: permissions,
atime, ctime, size, , user, group, md5hashes, mtime, inodes
وغيرها.
-
الجميل بالأمر إن
aide لا
يدعم md5 hashes فقط،
وإنما يدعم sha1 و
rmd160 و
tiger و
crc32 وغيرها.
-
أيضاً تستطيع أن
تقوم بإستعمال أكثر من خيار للمراقبة
وذلك من خلال إستعمال الخيارات التي تدل
على خيارات متعددة مثل R حيث
إنها تدل على إنك تريد مراقبة كل من:
p+i+n+u+g+s+m+c+md5 وكل
واحدة موجود في ملف الـ conf.
ماذا تعني.
إستخدام هذه الطريقة
R سيسهل
علينا الكثير من الأمور سنراها في
الشرح.
على
الرغم من إنك تستطيع من خلال الخيارات
التي يوفرها AIDE
أن تقوم بعملية
مراقبة للملفات التي تتغيير بشكل مستمر
مثل ملفات السجلات Log Files إلا
إنه يفضل إستعمال البرنامج AIDE
لمراقبة الملفات
التي لا تتغيير بشكل مستمر مثل ملفات
الإعدادات الخاصة بالخدمات والملفات
التشغيلية والأدوات ... وذلك
لأنه مراقبة السجلات Log يجب
أن تكون من وظائفك أنت مدير النظام أو
وظيفة البرامج المعنية التي تهتم بقراءة
السجلات Log مثل
IDS وغيرها.
سؤال:
لماذا لا يفضل
إستعمال أو مراقبة الـ atime والذي
هو Access Time بالرجوع
لـ aide ؟
الجواب:
سأتركه لكم للتفكير
أو للتجربة ومعرفة السبب !!!
صراحة
هناك خيارات كثيرة جداً للبرنامج لا أريد
أن أقوم بشرحها كلها ويمكنك ان تتعرف
عليها بمجرد قراءتها وقراءة ملفات المساعدة
الخاصة بالبرنامج ولهذا سأدخل مباشرة
الى بعض الخيارات التي سأقوم بإستعمالها
في هذا الشرح.
الآن
لو نفرض تريد أن تقوم بمراقبة المجلد etc/
وكل ما هو في داخله،
قم بوضع السطر التالي:
كود:
/etc R
بعد الجملة
Selection regexp rule.
أول
حاجة سنقوم بها بعد أن قمنا بعمل الاعدادات
المطلوبة هي بناء قاعدة البيانات، ويمكننا
عمل ذلك من خلال:
كود:
aide --init
إذا كنت تريد أن
تقوم ببناء قاعدة البيانات بناءاً على
إعدادات غير التي في المجلد الخاص بالبرنامج
aide،
وهذا الملف الخاص بالإعدادات موجود في
مجلد آخر لنفرض في المجلد الرئيسي للمستخدم
الذي تستعمله، ولنفرض هو user
نقوم ببناء قاعدة
البيانات بهذا الشكل:
كود:
aide -c /home/user/aide.conf --init
بعد أن تنتهي من
تنفيذ هذا الأمر سيخبرك aide
بإنه تم تهيئة
القاعدة. للتأكد
سترى بإنه تم خلق ملف إسمه aide.db.new.
طبعاً هذه العملية
ستأخذ بعض الوقت وذلك لأنه سيقوم ببناء
القاعدة بناءاً على جميع المحتويات للمجلد
etc/ ولهذا
قد تأخذ بعض الوقت للإنتهاء، ليس الكثير
جداً. بعد
أن قمت بتنفيذ الامر بالأعلى الأن تستطيع
أن تقوم مثلا بقراءة محتوى الملف aide.db.new
وذلك لأنه عبارة
عن ملف نصي Text File. أفتح
الملف أو قم مثلاً بالبحث عن السطور الخاصة
بالملف etc/resolv.conf/ وقارنها
مع ناتج أمر الـ stat للملف
نفسه. مثلاً:
كود:
stat /etc/resolv.conf
الناتج:
كود:
binary@rul3z:~> stat /etc/resolv.conf File: `/etc/resolv.conf' Size: 68 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 1452487 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2008-06-15 23:55:45.000000000 +0300 Modify: 2008-06-07 17:00:22.000000000 +0300 Change: 2008-06-07 17:00:22.000000000 +0300
الآن قارن هذه
المعلومات مع التي قام بتسجيلها aide
في قاعدة البيانات
الخاصة به، مثلاً بالنسبة للملف هذا كما
نره حجمه 68 أنظر
الى ما قام تسجيله aide
ستجده قام بتسجيل
هذه القيمة أيضاً، أيضاً مثلا أنظر الى
رقم الـ Inode للملف
هي 1452487 وأنظر
لما سجله aide
ستجده نفس الشي
وهكذا. طبعاً
aide سيسجل
وفقاً للخيارات التي قمنا بإعطاءها له
في السطر الذي كتبناه كما تذكرون
كود:
/etc R
في ملف الإعدادات
حق aide ولا
تنسو بإن R تعني
p+i+n+u+g+s+m+c+md5. إذن
نستطيع القول بإن أغلب ما قام بستجيله
aide أتت
من ناتج الأمر stat بإستثناء
الـ Hashes والتي
ستكون ناتج الأمر md5sum.
الآن
لا تقم بأي تغيير أو شيء على الملفات
الموجودة داخل المجلد etc/ وذلك
لكي نقوم بعمل أول تجربة لنا بإستعمال
aide. الآن
قم بتشغيل aide
ولكن هذه المرة
بإستخدام خاصية الفخص check
ولنرى هل سيتعرف
aide على
التغييرات التي قمنا بها (والتي
بالحقيقة هنا لم نقم بعمل أية تغييرات)،
المهم لنجرب ونرى ماذا سيحصل:
كود:
aide --check
إن كنت تستعمل
ملف إعدادات موجود في مكان آخر لا تنسى
أن تمرره لـ aide
من خلال الخيار c
كما عملنا في السابق.
بعد أن ينتهي من
عملية الفحص سيخبرنا بإنه:
All files match AIDE database. Looks okay
أي
إن جميع الملفات (التي
بداخل المجلد etc/ في
مثالنا هذا) مطابقة
لقاعدة البيانات وبهذا نعرف بإنه لا يوجد
أو لم تحصل أي تغييرات على الملفات.
طبعا في حالة كان
هذا الجهاز هو خادم معيين سيكون شي ممتاز
ومريح للأعصاب بإنك عرفت بإنه للحين لم
يتم التلاعب في ملفات النظام لديك.
طيب
الآن لنقوم بعمل تغيير بسيط على أي من
الملفات الموجودة داخل المجلد etc/
لنفرض قم بإضافة
nameserver جديد
الى الملف resolv.conf. نفذ
الأمر التالي لكي نقوم بتجربة aide
مرة أخرى ولكن هذه
المرة بوجود ملف تم التعديل عليه.
نفذ التالي:
كود:
echo "nameserver 192.168.0.22" >> /etc/resolv.conf
أو قم بتفعيل/إيقاف
خاصية التمرير أو الـ routing من
خلال التعديل على ملف sysctl.conf،
إن كانت فعالة "1" أعملها
غير فعالة "0" أو
العكس، نحن فقط نريد أن نعمل أي تغيير لكي
نرى النتائج التي سيعطينا إياها aide.
بعد أن قمت بأي
تعديلات تريدها، قم بتشغيل aide
مرة أخرى بإستعمال
خاصية الفحص check كالتالي:
كود:
aide --check
الآن سيخبرنا
بإنه يوجد ملفات تم التعديل عليها وسيعطينا
مقارنة بين الخصائص الحالية للملف بعد
التعديل وبين الخصائص للملف قبل التعديل
والتي هي مسجلة في قاعدة البيانات الخاصة
بـ aide. من
ظمن هذه التغييرات هنا ستكون الـ md5
للملف وذلك لأنه
نحن قمنا بمراقبة هذه الخاصية في الملفات،
وأيضاً أي تغيير ولو بحرف واحد على الملف
سيعرض الـ md5 hash للتغيير.
طبعاً كل شي سيتم
عرضه لك على شكل إحصائيات ومقارنات جداً
سهلة قراءتها ...
سؤال:
لو قمت بعمل تعديل
على ملف etc/hosts/ فقط،
وقمت بعدها بعمل فحص من خلال aide
لماذا سيقول لك
بإنك قمت بالتعديل على ملفين وليس
واحد؟
الجواب:
أكتشفه بنفسك.
سؤال:
ماذا لو تم إضافة
ملف الى المجلد etc ؟
الجواب:
أكتشفه بنفسك.
الآن
لنفرض الحالة الطبيعية وهي أن تقوم أنت
بعمل مثل التغييرات التي عملناها بالاعلى،
ما سيحصل عند قيامك بالفحص بـ aide
هو إنه سيخبرك بإنه
الفحص وجد التغييرات الفلانية 1
2 3 4، والتي هي
تغييرات أنت قمت بها. هنا
نقوم بإخبار او تبليغ (أو
أختر أي كلمة مناسبة ليتم وضعها هنا)
aide بإنه
هذه الخيارات طبيعية قم بإضافتها الى
القاعدة، أي قم بتعديل القاعدة الخاصة
بك على ضوء التغييرات التي هي موجودة
حالياً. للقيام
بذلك لنقم بعملية تأكد من إن التعديلات
حصلت على الملفات التي قمنا نحن بالتعديل
عليها فقط، ولهذا ننفذ الأمر:
كود:
aide --check
وبعد أن نتأكد
بإن فعلا هذه التعديلات هي ما قمنا به
نحن، نقوم بعمل التالي للتحديث:
كود:
aide --update
هنا سيقوم aide
بتحديث قاعدة
البيانات التي لديه وبالتالي في المرات
القادمة سيتم المقارنة بناءاً على القاعدة
الجديدة التي قمنا بتحديثها الحين.
الآن
هناك مشكلة، وهي بوجود بعض الملفات بداخل
المجلد etc تتغيير
بعد عمل إعادة تشغيل، طبعاً هذه الملفات
تختلف من نظام الى آخر. كيف
سنقوم بمراقبة هذه الملفات إذن؟ الجواب
هو إنني ذكرت بإنه يفضل مراقبة الملفات
التي لا تتغيير بإستمرار أو ربما لا تتغيير
نهائياً وهنا لا أقصد فقط الملفات التي
بداخل المجلد etc لا،
وإنما يفضل مراقبة الملفات التي بداخل
المجلدات التالية أيضاً: bin
و sbin و
usr و
lib و
boot الذي
يحتوي على النواة Kernel ولا
يجب أن يتغيير بإستمرار وبالإضافة الى
بعض الملفات الموجودة في المجلد etc
أو كلها، حسب ما
تحتاجه.
لهذا
لنقم بإضافة السطور التالية، أسفل السطر
الذي قمنا بإضافته سابقاً ليصبح لدينا
كالتالي:
كود:
/etc R /boot R /bin R /sbin R /lib R /usr R
هكذا نكون قد
حددنا مراقبة هذه المجلدات وجميع
الملفات/المجلدات
التي بداخلها بشكل Recursive ...
إن كنت تريد أن تقوم
بتحديد جزء من مجلد هنا سنحتاج الى إستعمال
إمكانيات الـ regex. مثلاً
تريد أن يقوم aide
بمراقبة الملفات
التي بداخل المجلد bin مباشرة
فقط وليست التي بداخل مجلدات بداخل هذا
المجلد تستطيع أن تقوم بعمل ذلك من خلال
تعديل السطر الخاص بالمجلد bin
ليصبح هكذا:
كود:
/bin$ R
ولو كنت تريد أن
تقوم بتحديد ملفات معينة للمراقبة ولنفرض
تنتهي بالحروف co نستطيع
عمل ذلك من خلال التالي:
كود:
/lib/*.co
أيضاً تستطيع أن
تقوم بتحديد المجلد العام للمراقبة وتقوم
بعد ذلك بإختيار المجلدات التي لا تريد
مراقبتها والتي تقع أسفل هذا المجلد،
مثلا لو نفرض تريد مراقبة المجلد /
كله ومن ثم تقوم
بعمل exclude استخراج
لمجلدات معينة من هذه المراقبة يتم عمل
ذلك من خلال السطور التالية:
كود:
/ R !/var !/tmp !/home
وهكذا قمنا
بمراقبة جميع ملفات النظام بإستثناء
المجلدات التي قمنا بوضع الاشارة !
قبلها. إذن
من هذا نفهم بإن أي مجلد لا نريد مراقبة
محتواه نضع العلامة ! قبله.
سؤال:
عندما نقوم بتغييرات
معينة أو نغيير ملف الإعدادات، هل نستطيع
أن نقوم بحذف القاعدة rm لها
ومن ثم تشغيل aide
وكأننا نقوم بتشغيله
لأول مرة وذلك لبناء قاعدة جديدة؟ أم
نستطيع أن نقوم بعمل update لها
فقط؟
الجواب:
قم بالتجربة أنت
!!!
الآن
بعد أن قمت بأخذ snapshot من
النظام الذي لديك، تستطيع أن تقوم بنقل
(حذف)
البرنامج aide
وملف الأعداد له
والقاعدة التي قمت ببناءها الى مكان أمين
ويكون قابل للقراءة فقط Read Only.
أفضل طريقة لعمل
ذلك هي نقل الملفات الى قرص CD
العادي مثلا وذلك
لانك تستطيع الكتابة عليه لمرة واحدة
وبالتالي لن يستطيع أحد أن يقوم بتغيير
البيانات التي عليه ... بهذه
الطريقة قمنا بإخفاء الآثار لوجود البرنامج
aide.
في
حالة أردت عمل فحص للنظام مرة أخرى بناءاً
على القاعدة التي قمت بالإحتفاظ بها عليك
أن تقوم بنسخ ملف الأعدادات الى مجلد
معيين وعليك أن تعدل قيمة المتغيير في
الملف نفسه ليشير الى المسار الصحيح لوجود
ملف الإعدادات، لا تنسى ذلك.
بعد
أن أنتهينا من كل تنصيب ومن ثم تشغيل aide
وأخذ ملف القاعدة
وباقي الملفات المهمة، عندما تشعر بإن
النظام لديك قد يكون تعرض الى إختراق أو
تم التلاعب به، أدخل القرص CD
وقم بتشغيل aide
مرة أخرى مع تمرير
ملف الإعداد الذي وضعناه على الـ CD
وذلك ليقوم بالفحص
والتأكد من سلامة جميع الملفات التي على
النظام. إن
كنت تريد أن تعقد المسألة أكثر على
المخترقين في إمكانية إخفاء آثارهم
وإمكانية إكتشافك لهذا التلاعب تستطيع
أن تقوم بإستعمال أو الإعتماد على أكثر
من hash في
نفس الوقت مثلاً md5 و
sha1 وهكذا.
بالنهاية حتى أشطر
المخترقين سيقعون في قبضة aide.
ملاحظة:
-
الإختصار FIC
تعني File
Integrity Checker.
الموقع
الرسمي للبرنامج
تقبلوا
تحياتي الحارة ...
ودمتم
بود جميعاً ...