Deuce untukmu, atau audit dengan peretasan

Seperti biasa, tanpa nama, dan karena saya juga dikaitkan dengan tanda tangan non-pengungkapan, itu juga memiliki sejarah yang sedikit dimodifikasi (dan menghilangkan beberapa detail untuk publikasi yang saya tidak menerima izin).
Berikut ini adalah kisah nyata seorang karyawan menembus komputer ... yah, katakanlah beberapa bank swasta. Peristiwa-peristiwa yang diceritakan hamba Anda yang rendah hati terjadi di beberapa negara Eropa belum lama ini, sebelum DSGVO (GDPR, RGPD) tetapi dalam proses menjadi satu, untuk mengantisipasi apa yang disebut.


Sebenarnya, semuanya dimulai dengan audit keamanan - ..., sebuah wawancara, mencari di bawah kaca pembesar segalanya dan segalanya, mencari dan mencari celah dan hambatan potensial untuk naik (baik di sana maupun dari sana), ..., dan sebenarnya pembekalan. Di mana pelanggan pada akhirnya menerima kesimpulan yang mengecewakan untuknya - "C grade with a stretch."


Mari kita hilangkan kata-kata bahwa petugas keamanan TI memerah di depan mata mereka, tetapi pesan lirik umumnya adalah bahwa saya melemparkan tuduhan yang tidak berdasar, dan mereka memiliki segalanya terkunci, dan kunci CSO ada di saku saya di bawah hati saya.


Berusaha menjelaskan bahwa sistem keamanan dibangun di sekitar firewall + proxy + mesin cuci web seperti content-filter & antivirus, tanpa hybrid IDS (HIDS + APIDS) yang dikonfigurasi dengan buruk, honepots, dll. dll., pertama, menurut definisi, tidak aman, kedua, seolah-olah, saya sudah menunjukkan beberapa tempat di mana itu setidaknya tidak kome il faut. Upaya untuk kembali ke dialog yang konstruktif (sebenarnya kembali ke analisis) dihancurkan terhadap tembok tiga tingkat kebencian yang dibangun oleh seluruh departemen.


Membatasi rapat dan melepaskan karyawan, CSO, bersama dengan dua bos penting, tetap berusaha mencari tahu secara jujur ​​di mana anjing itu menggeledah dan memahami bagaimana hidup lebih jauh sebagai fakta dan apa yang sebenarnya, menurut pendapat saya, perlu dilakukan.


Karena Sekilas pemahaman tidak diamati di masa depan juga, dengan antusiasme saya bertemu proposal untuk ditampilkan dalam praktek. Setelah menjelaskan bahwa sekarang ini tidak akan berhasil, menyelesaikan formalitas (menandatangani beberapa dokumen lagi, dll.), Saya mendapat lampu hijau.


Saya tidak terlalu menyukai kenyataan bahwa saya bekerja "secara membabi buta" (ini adalah pekerjaan rumah, lama dan mahal, dan pentesting adalah masalah keberuntungan) dan tolong berikan beberapa informasi tambahan (misalnya, beberapa data pribadi karyawan individu, seperti pengembang dan personel keamanan ), Saya juga tidak menemui pemahaman kontra.


Apakah Anda seorang hacker atau tidak ?! (Sebenarnya, tidak, saya seorang pengembang, kalau tidak, ini lebih dari hobi).


Saya tidak akan membahas diskusi lebih lanjut untuk waktu yang lama - seperti biasa, saya meyakinkan faktor uang dan waktu (yaitu, sebenarnya uang yang sama).


Yaitu sebagai hasilnya, kami memiliki semacam pengetahuan tentang struktur pertahanan perusahaan (diperoleh sebagai hasil dari audit pendahuluan), serta nama lengkap dan biografi singkat dari 4 administrator dan 3 pengembang.


Mengapa admin dan pengembang sebenarnya, setelah semua, Anda bisa meminta "akuntan perempuan", mengirim mereka semacam kucing dengan hewan yang jauh lebih tidak aman melekat padanya (atau mendongkrak sesuatu seperti itu dari bidang rekayasa sosial) . Tapi ...
Namun, banyak perusahaan, sebagai suatu peraturan, tidak begitu suka ketika mereka mulai membicarakannya di presentasi PoC , yaitu "Sistem peretasan" berdasarkan intrik dari bidang rekayasa sosial setidaknya tidak disambut, tidak peduli seberapa cemerlang itu dibangun.


Kembali ke techies, mereka pertama-tama tidak kurang "sosial" (yang tidak berarti sama sekali bahwa mereka akan meluncurkan semacam "kucing", tetapi faktanya sendiri adalah penting), dan kedua, mereka biasanya memiliki komputer yang lebih "dikembangkan secara fungsional" ( yang tidak akan Anda temui). Dan yang lebih menarik, di samping itu, mereka sering memiliki semacam "hak istimewa", tidak seperti gadis akuntan yang sama, yaitu, mereka bisa kurang dilanggar dalam hal keamanan dan pembatasan sistem (seperti kebijakan dan bersama itu perlu, misalnya, untuk menjalankan exe-shnik yang baru dikompilasi entah bagaimana) dan / atau mereka dapat memanjat melalui "dinding" yang dibangun oleh penjaga keamanan (misalnya, dengan memaksa sebuah terowongan melalui proxy), dll. dll.


Sekali lagi, merangkak melalui perlindungan, menggunakan programmer komputer atau admin pada saat yang sama, terdengar sangat berbeda dari, misalnya, "memaksa" trojan akuntan untuk berjalan.


Yaitu awal diterima, tugas disuarakan - mari kita pergi ...


Langkah pertama adalah mengumpulkan informasi tentang "pelanggan" - siapa, apa, di mana, kapan.


Saya tidak akan terlalu terganggu di sini, artikelnya tidak sepenuhnya tentang itu, jadi saya hanya akan mengatakan - Saya memilih seorang pria yang cukup sosial, dengan Facebook dan rekannya, termasuk saluran youtube-nya sendiri (YouTube, Vasya!), Beberapa proyek sumber terbuka (baik dalam grup dan dan memiliki) dan hanya aktivitas kontribusi raksasa (bertanya, tetapi dia umumnya bekerja di tempat utama) .


Mencari tahu hoo-hoo hari ini umumnya tidak masalah sama sekali (di suatu tempat saya menggunakan nama asli saya di tempat dengan nama panggilan, di suatu tempat saya mendapat alamat IP proxy dari perusahaan dan gambar itu dibentuk), tetapi tidak ada yang benar-benar menyembunyikannya.


Saya terpaksa memperlambatnya, termasuk bakat alami saya fakta bahwa di salah satu komunitas, pahlawan kita terlibat dalam kurang lebih dukungan aktif dalam obrolan, dan menggunakan klien IRC, yang dalam info pengguna diberikan selain IP, dari mana kaki tumbuh, nama dan versi dirinya dicintai, yah, yang terkenal bug / lubang dan secara default itu dibungkus oleh plugin yang sia-sia.


Seperti biasa, suatu malam, rumah tertidur, satu ampas di dalam kotak, kita kehilangan lagi :) dalam obrolan itu saya menemukan nama panggilan akrab sebagai pengguna aktif dengan koneksi lebih dari 12 jam (dilihat dari log dengan pemutusan / koneksi ulang menengah, karena proxy perusahaan adalah hal semacam itu, tetapi lebih dari setengah hari sejak koneksi pertama), dari alamat IP yang saya butuhkan yaitu dengan login dari form max.mustermann@proxyext.our-company.example.com .


Artinya, baik klien kami memiliki hari - 24 jam, atau lebih mungkin (karena 2 jam telah berlalu sejak pesan terakhirnya), ia sama sekali tidak mematikan komputer yang berfungsi dan membiarkan klien IRC aktif.


Atau mungkin dia mematikan komputer, tetapi (lagi-lagi, kesalahan keamanan atau admin) terjadi bahwa yang terakhir terbangun dengan sendirinya, misalnya, untuk memperbarui pembaruan untuk Windows (dan setelah jeda 4 jam untuk reboot) atau hanya dengan bodoh menangkap sinyal wake-on-lan .. .


Bagaimanapun, saya punya waktu untuk menepuk komputer, atau lebih tepatnya klien IRC dari "korban" kami.


Tidak menemukan satu lubang pun yang diketahui dalam versi spesifik dari klien IRC ini (yang kebetulan terkait), dipersenjatai dengan ida, ollydbg, dll. dan melirik sumbernya (horor yang sunyi, Vasya!) ia mulai mencari semacam kerentanan yang akan memungkinkannya untuk setidaknya menjalankan sesuatu di sana, dengan mata untuk setidaknya mengendalikan klien IRC dari jarak jauh (dan kami ingat tentang plugins).


Dan itu ditemukan, bahkan relatif cepat!


Mencegah kontrol memungkinkan sprintf tidak aman memanggil buffer dari stack dengan %s dalam input asing yang disaring dengan buruk (bersama dengan injeksi pengkodean), yang memungkinkan untuk menulis "exploit code loader" ke stack di tempat yang tepat (terima kasih kepada pengembang klien untuk kode, Microsoft untuk tumpukan dataran rendah dan keberuntungan).


Meskipun siksaan masih harus - karena kami memiliki DEP, Anda tidak dapat mengeksekusi langsung dari stack, Anda perlu menulis salinan "kode program" pada stack untuk dieksekusi, menemukan panggilan memcpy dengan ret di akhir untuk menyalin ke tempat yang tepat (menulis ulang kelas yang jarang digunakan), mengarahkan output dari beberapa prosedur ke tempat yang tepat, menimpa beberapa nilai VTABLE untuk menghasilkan peristiwa dengan memanggil metode virtual berikutnya yang menyebabkan beberapa kode python sebagai plug-in (dan mengubah kode python ini ke Anda sendiri, seperti loader dari pesan yang rusak, agar sudah merakit yang sudah jadi ployt-toolkit).


Oh ya, Anda masih harus membuat sebuah plugin (sekali lagi terima kasih kepada pengembang klien untuk fungsionalitas yang sangat murah hati), sebagai proxy, mengubah pesan dengan cepat (menambahkan pembungkus untuk memulai injeksi, melanggar penyandian untuk itu, sambil memasukkan pengganti yang tidak lengkap di tempat yang tepat, dan t dll.), menyandikan pemuat awal dari pesan injeksi, dll.
Selain itu, saya harus membuat skrip python kecil sebagai plugin klien baru untuk sistem target sebagai emulator konsol (menerima pesan saya di stdin-nya, dan mengirim stdout + stderr dalam pesan pribadi kembali ke nama panggilan saya).


Setelah mengumpulkan semua ini di atas lututnya, ia meluncurkan klien IRC untuk mencoba dirinya sebagai korban, yaitu lihat bagaimana itu akan dalam bentuk penuh, selesai.


Dan mengirimkan melalui plug-in saya dari sesi lain dari versi kedua yang diluncurkan aplikasi, beberapa pesan-suntikan pribadi, saya senang melihat salam Python biasa >>> (yang saya terjebak dalam emulator, demi kejelasan - python).


Puas sebagai gajah (mencatat bahwa aplikasi yang diserang tidak jatuh), ia melihat apa yang terjadi di jendela output pesannya - penuh dengan berbagai karakter non-ascii, yang paling mencolok adalah dengan nomor seri 90h (yang setidaknya tidak comme il faut, bahkan memberi Anda upaya peretasan), saya pikir saya masih harus mengulang bootloader untuk menutupi pesan berikut (tiba-tiba masih berfungsi dan pemberitahuan).


Dia melihat ke dalam kode, dan di sana mereka menunggu baris NTS di output, dia memutuskan untuk tidak repot-repot dan dengan bodoh menulis ulang byte pertama dari pesan setelah memuat nol (dengan harapan bahwa pesan akan ditampilkan di layar sedikit kemudian).


Mengulangi seluruh proses, dan menunggu yang diinginkan >>> lagi melihat ke jendela lain dan menemukan tidak ada yang berlebihan dalam obrolan (Saya masih jenius) , memutuskan untuk melanjutkan tes.
Pesan from glob import glob as ls; ls('*') from glob import glob as ls; ls('*') , dan saya akan dengan senang hati menjawab saya melihat daftar folder dan file yang terdapat dalam folder aplikasi.


Benar, saya melihat pesan yang sama di jendela klien yang menyerang sebagaimana dikirim ke nama panggilan saya. Saya juga harus meletakkan 0-byte (NTS) di awal baris setelah mengirimkannya kepada saya.


Setelah selesai dengan tahap persiapan, ia mencatat bahwa teman eksperimental kami masih mengobrol (tanpa pesan, Vasya!), Dia sudah menyiapkan exploit untuk kandidat kami.


Ayo pergi ...


Pesan injeksi hilang ... Dan setelah beberapa detik yang lama (rupanya disk sedang tidur atau proxynya bodoh) saya kembali melihat undangan >>> .
Ketika saya melompat-lompat di sekitar ruangan, saya masih tidak akan memberi tahu (tontonan itu bukan untuk orang yang lemah hati, karena sebagai hasil dari proses mewujudkan sukacita yang tidak terkendali, saya masih mendorong kaki kecil saya di atas kaki kursi).


Mengernyit kesakitan dan segera berpikir, "bagaimana jika ada sesuatu yang tidak terlihat di jendela recoil-nya, tiba-tiba saya mengacaukan suatu tempat dan hasilnya crash," ingat kemungkinan restart paksa setelah pembaruan (jika tiba-tiba komputer terbangun dari itu dan pembaruan sudah digulung), dengan keringat dingin (melihat jari kelengkungan dan menghapus tangan gemetar) saya mempercepat.


Langkah pertama adalah memeriksa kalau-kalau kita ada di sana.


 >>> import os; os.environ['userdomain'] 

dan jawabannya adalah:


 'OUR-COMPANY' >>> 

Yah, semuanya, tangan tidak terikat ... Ayo pergi.


Setelah memeriksa dengan skrip kecil bahwa logonui dikunci, setelah sedikit tenang, saya memutuskan untuk melihat apa yang tersedia di komputer secara umum:


 >>> from glob import glob as ls; ls(r'C:\Program Files\*') 

dan dalam jawabannya, tidak memercayai keberuntungannya, di antara banyak hal menarik saya melihat yang berikut:


 [...,'C:\\Program Files\\TeamViewer',...] >>> 

Yaitu tidak perlu membuat gerakan tambahan - Anda tidak perlu mengunduh apa pun, kompilasi, dan cari folder tempat Anda dapat menulis semuanya tanpa melanggar kebijakan apa pun.


Dan kemudian terbang:


 >>> import subprocess; subprocess.call([r'C:\Program Files\TeamViewer\TeamViewer.exe']) 

Nah, setelah jawaban balik:


 0 >>> 

Setelah menunggu sebentar untuk TeamViewer melewati proxy dan server memberikannya ID (dengan kata sandi), saya menjalankan skrip di sana, mencari jendela TeamViewer, mengambil screenshot darinya dan mengirimkannya kembali kepada saya dalam bentuk garis base64, di mana, memperluasnya kembali ke bitmap, saya senang menemukan ID dan kata sandi untuk koneksi.


...


Pagi berikutnya saya dipanggil oleh CSO yang terkejut, yang pertama kali menerima surat dari saya (tetapi karena beberapa alasan datang dari akun Exchange internal karyawannya), dan kemudian panggilan menakutkan dari karyawan yang sama dengan kata-kata "Koki, kami kehilangan - mereka menghancurkan kami", yang menemukan jendela terbuka di pagi hari Word dengan teks besar di dalam "Dua untuk keamanan Anda. Anda telah diretas!", Tanggal, tanda tangan.


Setelah itu, komunikasi dengan petugas keamanan sudah lebih membuahkan hasil, tanpa semprotan air liur, merobek baju dan menjerit. Diajarkan oleh pengalaman pahit ( misalnya, seperti yang dijelaskan dalam artikel ini ), saya berusaha semaksimal mungkin untuk menunda pembobolan itu sendiri nanti (karena pada awalnya saya ingin menerima wesel untuk "konsep keamanan" baru), tetapi setelah banyak bujukan, petunjuk kerja sama jangka panjang, dll. n., dan juga janji di pihak mereka untuk "tidak menyentuh" ​​karyawan yang menyalahkan (kolega setelah semua), mereka harus menjelaskan hampir semua poin utama.


Saya kemudian menerima hadiah yang dinegosiasikan untuk peretasan (serta biaya audit pendahuluan) sepenuhnya, tetapi kemudian kantor berperilaku ... katakanlah, tidak cukup olahraga. Untuk melanjutkan konser, mereka menyewa perusahaan audit yang terkenal dan terkenal, yang pada dasarnya menolak bekerja dengan pihak eksternal atas nama saya.


Baiklah, seperti yang mereka katakan di Jerman, "Man sieht sich immer zweimal im Leben", yang berarti "Pastikan untuk bertemu lagi."

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


All Articles