Securing a Linux Box with Tariq

وصلتني إستفسارات عدة بخصوص طريقة تركيب وتشغيل طارق Tariq ويبدو إنه هناك لبس بسيط في طريقة عمل البرنامج ولهذا لم يعرف الجميع كيفية تشغيله … سأشرح في هذا الموضوع طريقة تركيب Tariq وكيفية الإستفادة منه … الشرح الذي في هذا الموضوع تم تطبيقه على توزيعة Debian الأخيرة (Debian 6 – Squeeze) … سأقوم بشرح الأمور البسيطة التي في طارق وبعدها نتوسع في مواضيع أخرى لأني أنوي ترقيته والتعديل على بعض الأمور فيه …

قبل أن أشرح طريقة إستخدام طارق (Tariq) … أود أن أشرح بشكل مبسط جداً طريقة عمله الهيكلية أو التقنية … أولاً طارق (Tariq) عبارة عن نظام لعمل الـ Port Knocking وأمور أخرى أكثر تقدماً من مجرد كونه طارق على المنافذ والتي نعرفها في التقنيات الموجودة حالياً، وسأوضح ذلك في مواضيع أخرى إن شاء الله … طريقة عمل طارق (Tariq) هي من خلال إعطائك أمر له ليقوم بتنفيذه … يأخذ هذا الأمر ويقوم بتشفيره بواسطة مفتاح العميل ومن ثم يقوم بإخفاءه بداخل صورة معينة … بعد ذلك يتم إرسال هذه الصورة مُجزئة على أجزاء بسيطة بداخل عدد الدقات التي ستقوم بها … طبعاً يفضل أن لا تكون الصورة كبيرة الحجم، وذلك لأنك وقتها ستحتاج الى وقت أكثر لترسل التعليمة المراد تنفيذها، وكذلك ستحتاج الى إما زيادة عدد الدقات، أو الى إرسال حٌزم كبيرة الحجم وذلك بحكم تقسيم الصورة على الحزم المرسلة … هذه العملية الى الآن تمت على العميل … حين يستلم طارق (Tariq) الدقات يراعي إنها أولاً تحمل بيانات ومن ثم يراعي إنها جائت وفق دقات معينة تم الإتفاق عليها وكذلك بالترتيب الذي تم الإتفاق عليه … الى هنا طارق لم يحلل ما في داخل الحزم المرسلة … بعد ذلك يعيد إرسال لنسميه تأكيد الى العميل، والتأكيد عبارة عن رقم عشوائي … هذا الرقم العشوائي يكون مُشفر بواسطة مفتاح عميل طارق العام ويُرسل بواسطة حٌزمة Packet الى العميل مرة أخرى لكي يقوم العميل بإثبات إن هذا الأمر فعلاً هو من قام بإرسالها له … العميل يستلم الحزمة، وكونها مٌشفرة بمفتاحه العام يقوم بفكها ثم يقوم بإرسال هذا الرقم مرة أخرى الى الخادم ليؤكد إنه نعم أنا صاحب الطلب والرجاء تنفيذ طلبي … هكذا تمت عملية الـ Mutual Authentication أو البعض يسميها 2Way Authentication … إذا تحقق كل هذا، يقوم طارق بتجميع الحزم وإستخراج الصورة منها … ثم يستخرج النص أو الأوامر المطلوبة منه تنفيذها من خلال فك تشفير النص المخفي بداخل الصورة بإستعمال المفتاح العام للعميل … هذا بإختصار شديد آلية عمل طارق … والكود المصدري للنظام موجود بإمكانكم تحميله والإطلاع عليه وتعديله أو العمل معي على تحسينه حسب ما ترونه … بالنهاية هو مفتوح المصدر ويخضع لرخصة GPL … وكذلك هو منشور في موقع Port Knocking الرسمي ضمن قائمة التطبيقات التي تمت في هذا المجال … هذا النظام سيفيدك في فتح المنافذ وغلقها وتنفيذ الأوامر والعمليات التي تحتاجها بدون أن تقوم بفتح الخدمة للجميع … يرجى مراجعة أنظمة Port Knocking وما هي فائدتها بهذا الخصوص أو للإستفادة أكثر …

الآن ندخل في عملية إستعمال طارق (Tariq) وقبل كل شيء ستحتاج عزيزي القاريء الى تركيب الحزم التي بالأسفل سواء للخادم أو للعميل … وعملية تركيبهم على دبيان وباقي التوزيعات اليوم أصبحت جداً بسيطة:

* Python >= 2.6
* python-imaging  - Python Imaging Library (PIL)
* GnuGP
* Scapy
* نواة حديثة تستخدم iptables مثال على ذلك هو نواة (2.6)


أولاً: تركيب وإعداد العميل
قم بفك ضغط ملف طارق ونسخه الى /etc/ مثلاً كالتالي:

tar xvfj tariq.tar.bz2
cp -r tariq /etc/

بعد ذلك لنغيير تصاريح مجلد العميل:

chmod 600 /etc/tariq/.client-gpg

الآن كون Tariq يستعمل GnuPG فيجب علينا تهيئة المفاتيح والإعدادات اللازمة لذلك …

gpg --homedir /etc/tariq/.client-gpg --gen-key

بعد ذلك قم بإختيار الخيار الثاني (2):

(2) DSA and Elgamal

وبعدها أضغط Enter عند وصولك لهذه:

DSA keys may be between 1024 and 3072 bits long.
What keysize do you want? (2048) 

الآن كذلك اضغط Enter وذلك لجعل المفتاح لا ينتهي بزمن، طبعاً أنت ممكن تعمله ينتهي بزمن لكن بعد ذلك يجب ان تعيد عملية عمل المفتاح وما الى ذلك … لغرض الشرح والتوضيح سنكمل مع خيار الأساسي:

Key is valid for? (0) 

الآن سيؤكد عليك … ولهذا جوابك يكون نعم:

Key does not expire at all
Is this correct? (y/N) 

عند وصولك الى الأسم، ضع الأسم الذي تريده للمفتاح … الأسم سيساعدك حين تدير خادم Tariq ويستخدمه مستخدمين عدة وذلك لتميز بينهم:

Real name: 

أنا سأضع لغرض الشرح Tariq كأسم:

Real name: Tariq

وعند سؤاله عن بريد، ضع البريد الذي تريده للمستخدم، بالنسبة لي أيضاً طارق:

Email address: [email protected]

في حقل Comment ممكن تكتب مثلا إن هذا عميل طارق:

Comment:  Tariq Client

وأخيراً عندما تصل الى الجملة التي بالأسفل يرجى الضغط على O وذلك بالموافقة:

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? 

الآن علينا أن نقوم بتصدير المفتاح الذي عملناه لنعطيه للخادم الذي سيشغل Tariq وذلك لكي يستطيع أن يتعرف على العميل هذا … ولهذا نقوم بالتالي:

gpg --homedir /etc/tariq/.client-gpg -a --export [email protected] > client.pubkey.txt

ارجوا أن تضع بدل [email protected] البريد الذي قمت بإستعماله، وإذا كنت تستعمل مسار آخر قم بتغييره كذلك … الرجاء عدم نسيان ذلك … وقم بنسخ المفتاح client.pubkey.txt الى الخادم الذي سيعمل عليه Tariq … الآن قم بتحرير الملف client.conf وتأكد من الإعدادات التالية:

client_gpg_dir=/etc/tariq/.client-gpg
[email protected]
img_dir=img
secret_ports=10000,7456,22022,12121,10001

هذه أهم الأمور التي تحتاج ضبطها في جهاز العميل … الأول هو لتعريف مكان وجود مفتاح GnuPG الخاص بالعميل … والثاني هو لتعريف إسم المستخدم (بريده) والثالث هو مكان وجود الصورة التي سيتم إخفاء الأوامر المراد تنفيذها فيها بواسطة تقنية الـ Steganography
أيضاً قم بتعديلها حسب ما تناسب احتياجاتك … والسطر الأخير هو المنافذ الذي سيقوم طارق بالطرق عليها … يمكنك تغييرهم كلهم حسب ما تريد وحسب ما يناسبك … هكذا أنتهينا من إعداد العميل الذي سيتعامل مع الخادم الذي عليه طارق … الرجاء لا تنسى نسخ المفتاح الخاص بالعميل الى الخادم … أحببت تذكرتكم في ذلك …

ثانياً: تركيب وإعداد الخادم
قم بفك ضغط ملف طارق ونسخه الى /etc/ مثلاً كالتالي:

tar xvfj tariq.tar.bz2
cp -r tariq /etc/

بعد ذلك لنغيير تصاريح مجلد العميل:

chmod 600 /etc/tariq/.server-gpg

الآن لنقم بتوريد المفتاح الخاص بالعميل، من خلال:

gpg --homedir /etc/tariq/.server-gpg --import < client.pubkey.txt

بعد ذلك سنحتاج الى أن نثبت ثقتنا بهذا المفتاح، من خلال:

gpg --homedir /etc/tariq/.server-gpg --edit-key [email protected]

هكذا سيدخلك على طرفية خاصة بـ gpg كل الذي عليك فعله هو أن تقوم بإختيار المفتاح المراد الثقة فيه وبعد ذلك إستعمال الأمر trust ... ستظهر لك قائمة:

Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)

  1 = I don't know or won't say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately
  m = back to the main menu

Your decision? 

قم بإختيار الخيار الخامس (5) وذلك إنك تثق به ثقة تامة :) وسيعود ويسألك:

Do you really want to set this key to ultimate trust? (y/N) 

أخبره نعم (y) وأكمل ... وتأكد إنه المفتاح أصبح أسفله التالي:

trust: ultimate      validity: ultimate

هكذا أنتهينا من المفتاح الخاص بالعميل وتوريده وتثبيته للعمل مع خادم طارق، لا تنسى تكتب quit للخروج من طرفية gpg ... الآن لنقوم بإعدادات ملف الخادم الأساسية وليس المتقدمة، والتي كما ذكرت سأتركها لموضوع آخر ... أهم شيء تعمل حساب الإعدادات التالية:

secret_ports=10000,7456,22022,12121,10001
server_gpg_dir=/etc/tariq/.server-gpg
iptables_chain=tariq
open_tcp_port=-A tariq -s {ip} -p tcp -m state --state NEW -m tcp --dport {dport} -j ACCEPT
open_udp_port=-A tariq -s {ip} -p udp -m state --state NEW -m udp --dport {dport} -j ACCEPT

الأول كما هو واضح إنه المنافذ الذي سيقوم طارق العميل TariqClient بالطرق عليها ... والثاني هو مكان وجود المفاتيح العامة للعملاء ... والثالث هو إسم السلسلة التي ستستعملها في أوامر الجدار الناري iptables التي سأذكرها بعد قليل ... ونفس الشيء بالنسبة للرابع والخامس، ظروري يكون الإسم المستعمل في سلسلة الـ iptables هو نفسه فيهم ...

الآن كما ذكرت بإن هذا الموضوع لشرح إعداد طارق () للعمل بشكل بسيط، ولهذا سنستعمل هنا فقط أوامر الـ iptables الأساسية ... أرجوا أن تحرص على إضافة أمر يساعدك في العودة الى الخادم في حالة حصلت مشكلة معك في التطبيق أو في حالة طبقت الأوامر التي بالأسفل والتي ستمنع أي وصول بشكل أولي ... الأوامر الأساسية لعمل طارق هي:

iptables -P INPUT DROP
iptables -N tariq
iptables -A INPUT -j tariq
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

الآن وذلك لكي تستطيع العودة للخادم من جهاز آخر مثلاُ، كل الذي عليك أن تقوم به هو:

iptables -A tariq -s your_uip_address -j ACCEPT

إن كنت واثق من عملك، لا تقلق فإن طارق سيتولى مهمة فتح المنفذ لك :) ولكن إن لم تكن خبير في إستعمال iptables يرجى وضع هذا الباب للدخول الى الخادم من باب إحترازي ليس إلا ...ولا تنسى أن تقوم بحفظ أوامر الجدار الناري بواسطة الأمر iptables-save وذلك لكي تستفيد منهم لاحقاً ... هكذا الى هنا أنتهينا من إعداد عمل خادم طارق Tariq Server ... الآن لتشغيله كل الذي عليك فعله هو التالي:

./TariqServer

الآن على جهاز العملي يمكننا عمل عدة أمور ... على سبيل الذكر لا الحصر:
1- طلب فتح منفذ من طارق
2- طلب غلق منفذ من طارق
3- طلب تنفيذ أمر معيين عن بعد
4- خبايا أخرى أتركها لكم، أو لحادثة أخرى غير هذه :)

فتح منفذ بواسطة طارق:
كل الذي عليك فعله هنا هو التالي:

./TariqCleint -u [email protected] example.com C 22

TariqCleint هو إسم البرنامج العميل والخيار u هو لإخبار العميل أن يتم التنفيذ بواسطة أي عميل (قلنا نستعمل البريد الخاص به والموجود في مفتاحه) ... والخيار example.com هو اسم الخادم الموجود عليه طارق ... ممكن تضع IP Address ذلك الخادم أنت حُر ... والخيار O كبيرة هي لإخبار طارق بفتح Open منفذ على الخادم والذي هو هنا المنفذ 22 ... هكذا سيقوم طارق بعدما يتم إرسال الطلب وإستقباله من الطرف الآخر بفتح هذا المنفذ لك ... مثال على ما سيحصل:

root@tariq-client:~/tariq# ./TariqCleint -u [email protected] 192.168.1.1 O 22
WARNING: No route found for IPv6 destination :: (no default route?)
4374
.
Sent 1 packets.
.
Sent 1 packets.
.
Sent 1 packets.
.
Sent 1 packets.
Begin emission:
Finished to send 1 packets.
...........................*
Received 28 packets, got 1 answers, remaining 0 packets

Got answer: skipped
Got answer: OK
** SENDING REST:. 
Sent 1 packets.

وعلى الطرف الآخر الخادم، ستجد النواتج هكذا:

dp= 10000 ** right order= True
dp= 7456 ** right order= True
dp= 22022 ** right order= True
dp= 12121 ** right order= True
dp= 10001 ** right order= True
** last valid knock received, cmd=[O] arg=[22]
** sending challenge ...
** expecting answer=['8zXZKp+ivs5fewfewfewfewfwe6fwefewfew4pwl8CTcg1fw==\n']
Ether / IP / TCP 192.168.1.112:7304 > 192.168.1.1:10001 S / Raw ==> IP / TCP 192.168.1.1:10001 > 192.168.1.112:7304 SA / Raw
** Got challenge answer=['8zXZKp+ivs5fewfewfewfewfwe6fwefewfew4pwl8CTcg1fw==\n']
** accepted, executing cmd=[O] arg=[22]

لو لاحظتم إنه كان يتحقق من كل عملية دق يقوم بها العميل right order= True وبعد ذلك قام بإرسال التحقق ومن ثم قبل التحقيق ونفذ العملية حين أخبرنا بجملة accepted, executing cmd=[O] arg=[22] والتي تعني إن الطلب عبارة عن أمر cmd والمطلوب فتح O منفذ والذي هو 22 ...

تنفيذ أمر عن بعد:
كل الذي عليك فعله هنا هو التالي:

./TariqCleint -u [email protected] example.com E service httpd restart

لاحظ عزيزي القاريء، هنا الذي تغيير هو الحرف E بدل من O والحرف هذا يعني Execute أي نفذ ما بعد هذا الحرف والذي هو هنا service httpd restart (عملية إعادة تشغيل للخادم أباتشي) ... أهم شيء لا تنسى إنه يجب ان يكون هناك خادم httpd موجود على خادم طارق وإلا سيعمل إعادة تشغيل للهواء :)

الى هنا أكتفي بهذا القدر من الشرح والتوضيح ببساطة لطريقة عمل طارق وأتمنى أن لا يجد بعد اليوم أي شخص مشكلة في عملية تشغيله ... هناك تعديلات وتحسينات إن شاء الله سأقوم بها في القريب العاجل ... أتمنى أن يتم تجربته وإعطائي أي ملاحظات ولو سلبية عن النظام وأي افكار ممكن تساعد على تطويره الى ما هو أفضل ... ولا تنسوا بإنكم ممكن تحملوا طارق (Tariq) من هنا ...

دمتم بود ...

About [email protected]

[Between Teams of Red and Blue, I'm with the Purple Team]
This entry was posted in Development, Firewalls, Linux Security, Linux Services, Networks, PortKnocking, Security and tagged , , , , , , , , , , , , , . Bookmark the permalink.

4 Responses to Securing a Linux Box with Tariq

  1. google says:

    I liked your article is an interesting technology
    thanks to google I found you

  2. B!n@ry says:

    google@

    Thanks for passing by, and I really wish it was a benefit for you.

  3. خليل says:

    السلام عليكم ورحمة الله
    دكتور علي ممكن اطلب منك رسالةالدكتوراة الخاصة بك من اجل الاطلاع عليها ثم التواصل معك بخصوصهااذا كان هذا ممكن..
    تقبل مروري وتحياتي.

  4. B!n@ry says:

    وعليكم السلام ورحمة الله وبركاته
    حياك الله اخي خليل … بخصوص النظام فهو موجود بالكامل على جوجل كود وممكن تحصل عليه وعلى المستندات التابعة له بالمجان … بخصوص البحث، هل هناك جزء معيين تقصده؟ وأين تدرس وكيف يمكنني ان أساعدك؟
    دمت بود …

Comments are closed.