Trojan lain yang hampir tidak terhapus untuk Android

Pada akhir tahun lalu, menggunakan fungsi deteksi perubahan di area sistem, beberapa pengguna kami mencatat perubahan dalam file sistem /system/lib/libc.so. Ini adalah salah satu perpustakaan utama sistem operasi berbasis Linux yang bertanggung jawab untuk panggilan sistem dan fungsi dasar. Pemeriksaan rinci dari kasus ini mengungkapkan sampel baru dari Android. Keluarga Troya, yang kami kenal sejak 2015.

Untuk pertama kalinya, kami melihat pemasangan atribut " immutable " pada file-file perwakilannya, yang sangat mempersulit penghapusan Trojan dari perangkat.

Itu tampak cukup menghibur: atribut yang ditentukan diletakkan di file apk dari aplikasi yang diinstal, upaya untuk menghapus aplikasi ini terlihat berhasil, datanya telah dihapus, tetapi file apk itu sendiri tetap ada. Setelah reboot perangkat, aplikasi "muncul" lagi. Kami berbicara tentang salah satu Trojan ini pada tahun 2016. Untuk mengatasi ancaman semacam itu, kami telah menambahkan fungsi reset atribut file ke antivirus kami, yang berfungsi dengan syarat bahwa pengguna telah memberikan hak akses root ke antivirus.

Pada artikel ini, kami akan mempertimbangkan metode pertahanan diri lain yang menarik, yang digunakan oleh Android.Xiny versi baru.

Android 5.1? Tahun 2019?



Trojan yang dipertimbangkan dalam artikel ini bekerja di bawah OS Android hingga versi 5.1 inklusif. Mungkin aneh bahwa malware yang dirancang untuk versi "kuno" Android masih aktif (versi 5.1 dirilis pada 2015). Namun terlepas dari usianya, versi yang lebih lama masih digunakan. Menurut Google, pada 7 Mei 2019, 25,2% perangkat menjalankan Android 5.1 dan di bawahnya. Statistik untuk pengguna kami memberikan angka yang sedikit lebih besar - sekitar 26%. Ini berarti bahwa sekitar seperempat dari semua perangkat Android adalah target potensial, yang tidak terlalu kecil. Mengingat bahwa perangkat ini rentan terhadap kerentanan yang tidak akan pernah diperbaiki, tidak mengherankan bahwa versi Android OS yang lebih lama masih menarik bagi penulis virus. Memang, hak root, yang dapat diperoleh dengan mengeksploitasi kerentanan yang disebutkan, melepaskan tangan penulis virus - dengan bantuan mereka, Anda dapat melakukan apa saja di perangkat. Meskipun paling sering datang ke instalasi aplikasi dangkal.

Fungsi utama Trojan


Dimulai dengan versi paling awal, fungsi utama Android.Xiny Trojan adalah menginstal aplikasi sewenang-wenang pada perangkat tanpa izin pengguna. Dengan demikian, penyerang dapat memperoleh uang dengan berpartisipasi dalam program afiliasi yang membayar instalasi. Sejauh yang bisa dinilai, ini adalah salah satu sumber penghasilan utama bagi pencipta keluarga ini. Setelah meluncurkan beberapa perwakilannya, Anda bisa mendapatkan perangkat yang praktis tidak beroperasi dalam beberapa menit, di mana banyak aplikasi pengguna yang tidak berbahaya namun tidak perlu akan diinstal dan diluncurkan. Selain itu, Trojan ini juga dapat menginstal malware - semuanya tergantung pada perintah yang diterima dari server manajemen.

Hal paling menarik yang memicu versi baru Android.Xiny Trojan adalah perlindungan terhadap penghapusan. Dua komponen bertanggung jawab untuk itu. Mari kita pertimbangkan secara lebih detail.

Pemasang


sha1: f9f87a2d2f4d91cd450aa9734e09534929170c6c
Deteksi: Android.Xiny.5261

Komponen ini dimulai setelah mendapatkan hak akses root. Ia menggantikan file sistem / system / bin / debuggerd dan / system / bin / ddexe untuk memastikan peluncuran otomatisnya, dan menyimpan aslinya dengan nama dengan akhiran _server, bertindak seperti virus pendamping klasik. Ini juga menyalin beberapa file yang dapat dieksekusi ke partisi sistem dari folder yang dilewatkan dalam parameter baris perintah. Selain itu, Trojan dapat memperbarui komponen yang diinstal di partisi sistem jika Anda menjalankannya dengan parameter khusus dan menentukan folder tempat versi baru berada.

Android.Xiny.5261 berisi daftar file yang mengesankan untuk dihapus. Ini mencakup karakteristik jalur anggota keluarga yang lebih tua, serta keluarga Trojan yang bersaing yang dipasang di partisi sistem. Seperti, misalnya, Triada.



Selain itu, Android.Xiny.5261 menghapus beberapa aplikasi pra-instal - mungkin untuk membebaskan ruang. Akhirnya, menghapus aplikasi manajemen hak root yang terkenal - seperti SuperSU, KingRoot, dan lainnya. Dengan demikian, ini menghalangi pengguna untuk menggunakan hak root, dan, karenanya, menghapus komponen Trojan yang diinstal di partisi sistem.

Pustaka sistem yang dimodifikasi libc.so


sha1: 171dba383d562bec235156f101879223bf7b32c7
Deteksi: Android.Xiny.5260

File ini paling menarik bagi kami, dan penelitian ini dimulai dengan itu. Melihat sekilas di hiew mengungkapkan keberadaan kode yang dapat dieksekusi di dekat bagian akhir di bagian .data, yang mencurigakan.





Buka file di IDA dan lihat jenis kodenya.

Ternyata fungsi-fungsi berikut telah diubah di perpustakaan ini: mount, execve, execv, execvp, execle, execl, execlp.

Kode fungsi pemasangan yang dimodifikasi:
int __ fastcall mount ( const char * source , const char * target , const char * filesystemtype , unsigned int mountflags , const void * data )
{
unsigned __int8 systemPath [ 19 ] ; // [sp + 18j] [bp-1Ch]
bool diterimaMagicFlags ; // [sp + 2Bh] [bp-9h]
int v13 ; // [sp + 2Ch] [bp-8h]
v13 = MAGIC_MOUNTFLAGS ; // 0x7A3DC594
diterimaMagicFlags = mountflags == MAGIC_MOUNTFLAGS ;
if ( mountflags == MAGIC_MOUNTFLAGS )
mountflags = 0x20 ; // MS_REMOUNT
if ( diterimaMagicFlags )
return call_real_mount ( sumber , target , tipe sistem file , mountflags , data ) ;
if ( mountflags & 1 ) // MS_RDONLY
return call_real_mount ( sumber , target , tipe sistem file , mountflags , data ) ;
if ( getuid_ ( ) ) // tidak root
return call_real_mount ( sumber , target , tipe sistem file , mountflags , data ) ;
memCopy ( systemPath , ( unsigned __int8 * ) off_73210 + 471424 , 8 ) ; // / sistem
dekripsi ( systemPath , 8 ) ;
if ( memCompare ( ( unsigned __int8 * ) target , systemPath , 8 ) || isBootCompete ( ) )
return call_real_mount ( sumber , target , tipe sistem file , mountflags , data ) ;
* ( _DWORD * ) errno_ ( ) = 13 ;
kembali - 1 ;
}

Pada awalnya, parameter mountflags diperiksa untuk keberadaan nilai "ajaib" 0x7A3DC594. Jika nilai ini diteruskan ke fungsi, kontrol segera ditransfer ke fungsi pemasangan sebenarnya. Selanjutnya, dicek apakah ada upaya untuk me-remount partisi / sistem untuk penulisan dan apakah boot OS sudah selesai. Jika kondisi ini terpenuhi, fungsi pemasangan sebenarnya tidak dipanggil dan kesalahan dikembalikan. Dengan demikian, fungsi mount yang dimodifikasi oleh Trojan tidak memungkinkan siapa pun untuk me-remount partisi sistem untuk menulis, kecuali Trojan itu sendiri, yang menyebutnya dengan parameter "ajaib".

Kode fungsi execve yang dimodifikasi (di sisa fungsi exec * semuanya sama):
int __ fastcall execve ( const char * nama file , char * const argv [ ] , char * const envp [ ] )
{
int v3 ; // r3
if ( targetInDataOrSdcard ( nama file ) > = 0 ) // mengembalikan -1 jika benar
{
sub_7383C ( ) ;
v3 = call_real_execve ( nama file , argv , envp ) ;
}
lain
{
* ( _DWORD * ) errno_ ( ) = 13 ;
v3 = - 1 ;
}
return v3 ;
}

int __panggilan cepat targetInDataOrSdcard ( const char * path )
{
char buf [ 516 ] ; // [sp + 8j] [bp-204j]
if ( isDataOrSdcard ( path ) )
kembali - 1 ;
if ( * path == '.' && getcwd_ ( buf , 0x200u ) && isDataOrSdcard ( buf ) )
kembali - 1 ;
return 0 ;
}

Di sini diperiksa apakah path ke file yang diluncurkan dimulai dengan "/ data /" dan apakah itu berisi "/ sdcard". Jika salah satu kondisi terpenuhi, awal diblokir. Ingat bahwa di sepanjang jalur / data / data / adalah direktori aplikasi. Ini memblokir eksekusi file yang dapat dieksekusi dari semua direktori di mana aplikasi biasa dapat membuat file.

Perubahan yang dilakukan pada pustaka sistem libc.so mengganggu aplikasi yang dirancang untuk mendapatkan hak akses root. Karena perubahan dalam fungsi exec *, aplikasi semacam itu tidak akan dapat meluncurkan eksploit untuk meningkatkan hak istimewa dalam sistem, karena biasanya eksploit adalah file yang dapat dieksekusi yang diunduh dari jaringan ke direktori aplikasi dan dijalankan. Jika Anda masih berhasil meningkatkan hak istimewa, fungsi mount yang diubah tidak akan memungkinkan Anda untuk me-remount partisi sistem untuk menulis, yang berarti ia tidak akan membuat perubahan apa pun padanya.

Akibatnya, pertahanan diri Trojan terdiri dari dua bagian: penginstalnya mencopot pemasangan aplikasi untuk mengelola hak root, dan libc.so library yang dimodifikasi mencegahnya diinstal lagi. Selain itu, perlindungan ini juga berfungsi dari "pesaing" - Trojan lain yang mendapatkan hak akses root dan diinstal di partisi sistem, karena mereka bekerja dengan prinsip yang sama dengan aplikasi privilege root "baik".

Bagaimana cara mengatasi Trojan semacam itu?


Untuk menghilangkan Android.Xiny.5260, perangkat dapat di-flash - asalkan ada firmware akses terbuka untuknya. Tetapi apakah mungkin untuk menghapus malware dengan cara lain? Sulit, tetapi mungkin - ada beberapa cara. Anda bisa menggunakan exploit dalam bentuk so-libraries untuk mendapatkan privilege root. Tidak seperti file yang dapat dieksekusi, Trojan tidak akan memblokir unduhannya. Anda juga dapat menggunakan komponen Trojan itu sendiri, yang dirancang untuk memberikan hak root ke bagian-bagian lainnya. Ia menerima perintah melalui soket di sepanjang path / dev / socket / hs_linux_work201908091350 (jalur mungkin berbeda dalam modifikasi yang berbeda). Sedangkan untuk melewati kunci gunung, Anda dapat menggunakan nilai "ajaib" dari parameter mountflags, atau langsung memanggil syscall yang sesuai.

Tentu saja, saya tidak akan menerapkan ini.

Jika perangkat Anda mengambil Trojan semacam itu, kami sarankan untuk menggunakan gambar resmi sistem operasi untuk menginstalnya. Namun, jangan lupa bahwa ini akan menghapus semua file dan program pengguna, jadi berhati-hatilah dalam membuat cadangan terlebih dahulu.

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


All Articles