Dunia Virus MS-DOS

gambar

Posting ini adalah versi teks dari ceramah saya di Kongres Komputer ke-35 di akhir tahun 2018.

Jadi saya harus mengakui bahwa MS-DOS sedikit marah, meskipun fakta bahwa malware MS-DOS selalu membuat saya terpesona sampai batas tertentu, tetapi pertama-tama kita harus bertanya: "Apa itu DOS?"

  • DOS adalah salah satu versi CP / M, sistem operasi lain yang sangat tua.
  • Keluarga DOS mencakup berbagai pemasok, hanya karena itu DOS tidak berarti bahwa itu akan berjalan pada CPU 8086 atau lebih baik
  • Beberapa penyedia DOS ini memiliki kompatibilitas API, yang berarti bahwa beberapa dari mereka menggunakan malware!


gambar

Video kinerja:


Perangkat Lunak EDISON - pengembangan web
Posting ini ditulis dengan dukungan Perangkat Lunak EDISON, yang mengembangkan aplikasi untuk operator seluler virtual dan terlibat dalam pengembangan dan pemeliharaan situs-situs dengan Python .

gambar

Tetapi pada kenyataannya, sebagian besar ingatan kita tentang era DOS adalah estetika dari bagaimana komputer pada waktu itu terlihat:

gambar

Ini adalah era "komputasi beige" dan keyboard Model M, yang bisa terkenal atau terkenal tergantung pada apakah Anda suka keyboard yang berisik atau tidak.

gambar

Beberapa dari kita mungkin memiliki kenangan menggunakan DOS, dan beberapa mungkin masih menggunakan DOS!

gambar

Misalnya, George R. Martin, yang menulis The Game of Thrones, dikabarkan telah menggunakan Wordstar dalam DOS untuk menulis buku!

gambar

Kami juga tidak dapat melewatkan QBASIC, karena banyak yang akan menjadi kenalan pertama mereka dengan pemrograman!

gambar

Tetapi terkadang hidup menggunakan DOS tidak begitu baik, kadang-kadang Anda menggunakan DOS, dan hal-hal seperti itu tiba-tiba terjadi. Dalam contoh ini, melodi kecil dimainkan selama pencetakan, jadi ini bisa menjadi situasi yang sangat canggung di lingkungan kantor.

gambar

Beberapa dari mereka lebih "imut", dalam hal ini, misalnya, ambulan yang ditarik oleh simbol ascii lewat, dan kemudian program yang ingin Anda buka memulai, dalam kasus terburuk, dengan sedikit ketidaknyamanan.

Berkat sekelompok pengarsip malware yang menggunakan nama VX Heavens, kami memiliki arsip malware DOS historis yang baik, atau setidaknya sampai polisi Ukraina menggerebek situs tersebut:
Pada hari Jumat, 23 Maret, server ditangkap oleh polisi sehubungan dengan investigasi kriminal (pasal 361-1 KUHP Ukraina - menciptakan malware untuk tujuan menjual atau mendistribusikannya) berdasarkan permintaan seseorang. tentang "menempatkan dalam perangkat lunak berbahaya akses gratis yang dirancang untuk meretas komputer, sistem otomatis, dan jaringan komputer tanpa izin".

Untungnya, situs torrent populer masih memiliki salinan basis data situs yang dapat memberi kami dataset yang sangat baik:

$ tar -tvf viruses-20070914.tar | wc -l 66714 $ ls -alh viruses-20070914.tar 6.6G viruses-20070914.tar 

Namun, untuk mulai mempelajari sampel-sampel ini, kita perlu terlebih dahulu memahami aliran distribusi tipikal dari sampel-sampel ini, mengingat bahwa program-program ini bekerja di era pra-Internet:

gambar

Setelah Anda menerima file yang terinfeksi pada sistem Anda dan menjalankannya, program jahat akan secara aktif mencari atau menginstal interseptor panggilan sistem untuk program yang Anda jalankan. Dia sering melakukan ini dengan cara yang halus dan tidak terlihat untuk menghindari deteksi. Pentingnya kehalusan adalah penting karena untuk mendistribusikan program jahat ini Anda harus mentransfernya ke sistem lain menggunakan media (floppy disk) atau mengunduhnya ke titik distribusi lain, seperti BBS.

gambar

Saat runtime, malware memiliki dua opsi; itu bisa tetap tersembunyi dan menginfeksi file baru, atau menampilkan muatan.

Beberapa muatan cukup cantik! Contoh di bawah ini menggunakan fungsi yang tidak biasa, seperti 256 warna:

gambar

Atau yang ini bermain dengan penyangga layar Anda:

gambar

gambar

Namun, sebagian besar, malware akan tetap diam dan mencoba mencari file untuk infeksi. Infeksi sebagian besar file sangat sederhana, misalnya, jika Anda melihat file COM sebagai rekaman panjang kode mesin:

gambar

Kemudian "yang harus Anda lakukan" adalah memasukkan JMP di awal program dan menambahkan data ke akhir program. Akan terlihat seperti ini:

gambar

Beberapa kode lebih pintar dan menemukan "ruang kosong" dalam file biner dan menulis sendiri di sana, yang mencegah file biner dari peningkatan ukuran, yang, mungkin, berarti antivirus dapat menggunakan bendera merah.

gambar

Namun, sebelumnya, saya juga menyebutkan panggilan sistem intersepsi. Terlepas dari kenyataan bahwa runtime MS-DOS sangat sederhana dan praktis tidak terlindungi (Anda dapat dengan mudah memuat Linux dari file COM). Itu masih berisi API lengkap sehingga aplikasi tidak perlu memiliki implementasi sistem file sendiri. Berikut adalah beberapa fitur syscalls:

gambar

Mereka bekerja dengan menyebabkan gangguan perangkat lunak, di mana program meminta prosesor untuk pindah ke bagian lain dari memori sistem untuk memproses sesuatu:

gambar

Namun, MS-DOS juga menawarkan kemampuan untuk menambah / memodifikasi panggilan ini (menggunakan panggilan lain), memungkinkan Anda untuk memperluas sistem sehingga driver baru dapat memuat pada saat dijalankan. Namun, ini juga merupakan tempat yang ideal untuk menambahkan intersepsi malware:

gambar

Itu adalah trik yang digunakan dengan baik, karena Anda dapat mencegat panggilan "Buka File" dan kemudian menggunakannya untuk mendeteksi file yang dapat dieksekusi baru dalam sistem ... dan menginfeksi mereka.

Sebagai contoh singkat bagaimana mereka digunakan, mari kita lihat program Hello World yang sederhana:

gambar

Seperti yang bisa kita lihat, ada dua panggilan bertipe int . Kami menggunakan 21h (h = hex) sebagai nomor panggilan sistem utama, dan kami dapat menentukan tindakan apa yang kami inginkan untuk dilakukan MS-DOS berdasarkan nilai Ah

gambar

Dalam hal ini, program membuat panggilan untuk mencetak saluran, dan kemudian keluar dengan kode pengembalian 0 (tidak ditentukan).

Seperti yang disebutkan sebelumnya. Ketika Anda memanggil int 21h, prosesor pusat akan melihat di tabel IVT ke mana harus pergi, di dalam handler ini sering ada segmen seperti router yang merutekan berbagai panggilan utama, dalam kasus Int 21h mengarahkan ke berbagai fungsi berdasarkan nilai ah. Segera setelah kami sampai di tempat itu, penangan panggilan yang sebenarnya akan menangani tugas tersebut, maka dia akan menjalankan iret untuk kembali ke program utama, sering meninggalkan register hasil panggilan:

gambar

Jadi Jika kita ingin melihat semua panggilan sistem ketika program dimulai, kita dapat mengatur breakpoint di awal interrupt handler dan memeriksa apa ah:

gambar

Kami melakukan ini karena interrupt handler selalu berada di tempat yang tetap di MS-DOS (ini jauh lebih awal dari era ASLR dan Kernel ASLR), dan lokasi program tidak.

gambar

Begitu kita meluncurkannya, kita bisa melihat tantangan yang dibuat oleh pola ini. Sementara kita bisa melihat di layar bahwa dia baru saja mencetak pemberitahuan tentang file Kambing (Kambing adalah file yang dirancang untuk menginfeksi, seperti kambing kurban). Kami juga melihat bahwa program ini melakukan lebih dari sekedar mencetak garis. Ia memeriksa versi DOS (mungkin untuk memeriksa kompatibilitasnya) dan kemudian membuka, membaca dan menulis data!

gambar

Ini menarik! Tetapi kami ingin tahu lebih banyak tentang apa yang panggilan sistem disorot dengan warna merah, karena mereka harus memiliki input untuk hal-hal seperti nama file dan data untuk ditulis ke file / output ke layar.

Untuk melakukan ini, kita perlu melihat register lain selama panggilan sys:

gambar

Menggunakan "Print String" sebagai contoh sederhana, kita dapat melihat seperti apa tampilannya:

gambar

Apa itu DS: DX? Mengapa ada dua register di sini, dan bagaimana kita mendapatkan data dari mereka?

Untuk melakukan ini, kita perlu memahami sedikit tentang prosesor 8086.

gambar

Prosesor 8086 adalah CPU 16-bit, tetapi dengan pengalamatan memori 20-bit. Ini berarti bahwa prosesor hanya dapat menyimpan nilai yang mengindikasikan 64 KB, ini merupakan masalah ketika kapasitas memori hingga 1 MB.

Untuk menyiasatinya, kita perlu memahami register segmentasi:

gambar

Prosesor 8086 memiliki 4 register segmentasi yang perlu kita tangani:

  • Segmen kode - CS
  • DS - segmen data
  • Segmen SS - stack
  • ES - segmen tambahan (jika Anda membutuhkan satu lagi untuk mengatasi situasi yang berbeda)

Ada sejumlah register tujuan umum lainnya yang menyelamatkan Anda dari penggunaan memori yang berlebihan dan memungkinkan Anda meneruskan parameter ke fungsi lain.
Segmentasi mendaftarkan pekerjaan dengan mengubah blok dalam RAM:

gambar

Ini memungkinkan 16-bit CPU untuk melihat semua 20 bit RAM, memastikan bahwa untuk setiap nilai DS blok diimbangi oleh 16 byte.

gambar

Dalam hal ini, panggilan DS digunakan sebagai penunjuk di dalam jendela 16-bit mengenai di mana awal baris. Kemudian printer baris akan memindai sampai menemukan karakter $, dan kemudian berhenti. Ini mirip dengan sistem lain yang menggunakan byte nol, bukan $.

gambar

Dengan usia ISA x86, sedikit yang berubah, bukannya fakta bahwa ukuran bit prosesor telah meningkat, register yang sama telah menjadi lebih luas.

Jadi, dengan pengetahuan ini, kita dapat membuat daftar "tugas" untuk melacak program-program ini:

gambar

Dengan pengaturan ini, kita dapat melempar beberapa komputer besar ke masalah selama beberapa jam dan mengumpulkan hasilnya!

gambar

Dan kita mendapatkan ...

gambar

Tidak ada yang seperti itu.

Ini mengecewakan.

Kami membakar setidaknya hamster dengan kekuatan dan hampir tidak ada aktivasi keren! (Xs cara menerjemahkan ini)

gambar

Jika kita melihat beberapa sampel, kita akan melihat pistol merokok di sini. Sepotong sampel yang layak memeriksa tanggal atau waktu.

Jika kita melihat dokumentasi untuk panggilan ini, kita akan melihat bahwa panggilan sistem mengembalikan nilai dalam bentuk register untuk program:

gambar

Jadi kita bisa dengan kasar memaksa mereka! Yang perlu kita lakukan adalah sesuatu seperti ini:

gambar

Tetapi ada satu masalah dengan metode ini.

gambar

Langkah pengujian contoh ini memakan waktu sekitar 15 detik, karena menggunakan proses emulasi qemu penuh, dan mungkin butuh hingga 15 detik untuk sepenuhnya menjalankan program di mesin virtual. Karena DOS tidak memiliki fitur hemat daya, ini berarti bahwa ketika DOS dalam mode siaga, ia dalam siklus sibuk

Jadi kita dapat melihat masalah ini secara berbeda dengan melihat kode apa yang akan dieksekusi setelah permintaan tanggal / waktu.

Karena pelacak kami ada di interrupt handler, kami tidak tahu dari kotak di mana program berada:

gambar

Untuk melakukan ini, kita perlu melihat tumpukan di mana register CS dan IP menunggu kita!

gambar

Segera setelah kami mengambil dua register ini dari tumpukan, kami dapat menggunakannya untuk mendapatkan kode kembali sehingga daftar periksa kami terlihat seperti ini:

gambar

Setelah kita melakukan ini dan berulang kali menguji dataset, kita akan melihat seperti apa bagian dari kode pengembalian!

gambar

Berikut adalah contohnya. Di sini kita melihat bahwa perbandingan dibuat untuk DL dan 0x1e.

gambar

Jika kita melihat dokumentasi kita, kita akan melihat bahwa DL adalah hari dalam sebulan, yaitu, kita dapat menganalisis tiga kode operasi teratas sebagai berikut:

gambar

Kita bisa melihat secara manual semua ini, tetapi ada banyak dari sampel ini yang memeriksa waktu, sekitar 4700:

gambar

Jadi alih-alih kita perlu melakukan sesuatu yang lain. Kita perlu menulis sesuatu ... Kita perlu menulis ...

gambar

Emulator x86 terburuk di dunia, disebut BenX86, adalah emulator yang dirancang khusus untuk kebutuhan kita, dan tidak lebih dari itu:

gambar

Tetapi ia memiliki beberapa kelebihan dalam kecepatannya.

gambar

gambar

Kami menambahkan 10.000 tes eksekusi berbeda berdasarkan jalur yang kami temukan menggunakan brute force menggunakan BenX86. Jadi, saya akan mengakhiri dengan beberapa penemuan favorit saya yang diaktifkan waktu:

gambar

Pola ini aktif pada Hari Tahun Baru dan menutup sistem Anda setelah salam ditampilkan. Ini bisa baik jika Anda terjebak di kantor untuk tahun baru, atau bisa buruk jika Anda benar-benar perlu melakukan sesuatu pada Hari Tahun Baru.

gambar

Contoh ini sangat mengejutkan saya. Ini diaktifkan pada awal 1995 dan memberi tahu pengguna tentang semua file yang terinfeksi itu terinfeksi, dan kemudian menghapus virus (menghapus transisi di awal) dan kemudian tidak melakukan hal lain. Meskipun untuk beberapa alasan dikatakan Anda harus membeli McAfee, pesan ini jelas tidak ketinggalan zaman.

gambar

Ini, terus terang, benar-benar membingungkan saya, pada 8 November setiap tahun, itu akan mengubah semua 0s dalam sistem menjadi mesin terbang kecil "benci". Itu benar-benar mengganggu saya jika Anda tahu mengapa Anda membutuhkannya, beri tahu saya ...

gambar

Ini mungkin mimpi buruk saya ketika, setelah memulai program apa pun, ini menampilkan pesan bahwa dia tidak dapat memakan drive utama Anda. Akan sangat mengganggu untuk melihat tiba-tiba.

gambar

Sebagai kesimpulan, kami memiliki apa itu malware malware versi DOS Seal Copypasta. Saya tidak yakin penulis ini tidak menyukai Aladdin, tetapi apa pun yang Anda lakukan, Anda adalah seseorang.

Jika Anda tertarik dengan kode yang berjalan di artikel ini, saya merilis toolkit saya di github , tanpa jaminan apa pun. Jika Anda ingin membuat kode ini sendiri, Anda perlu bekerja untuk memastikan bahwa kode itu berfungsi dengan instalasi MS-DOS Anda (memperbaiki breakpoint handler)

Namun, jika Anda hanya melihat untuk melihat apa yang saya lihat saat melihat proyek ini, saya telah mengarsipkan antarmuka web di sini: dosv.benjojo.co.uk

Sampai ketemu lagi!

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


All Articles