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.

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.tardebian.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:
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.
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:
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 :
Dan di
postinstal , ini dia:
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?