Jika Linux adalah lingkungan kerja utama Anda, maka Anda mungkin akrab dengan Executable and Linkable Format (ELF), format file utama yang digunakan untuk executable, library, core-dumps, dan banyak lagi, di Linux. Saya telah menulis artikel yang mencakup alat Linux asli untuk memahami binari ELF, dimulai dengan bagaimana binari ELF dibangun, diikuti oleh beberapa tip umum tentang cara menganalisis binari ELF. Jika Anda tidak terbiasa dengan ELF dan executable secara umum, saya sarankan untuk membaca artikel ini terlebih dahulu.
Memperkenalkan Capa
Capa adalah proyek open source dari Mandiant (perusahaan keamanan siber). Dengan kata-kata proyek sendiri, capa mendeteksi kemampuan dalam file yang dapat dieksekusi . Meskipun target utama Capa tidak diketahui dan mungkin dapat dieksekusi berbahaya, contoh dalam artikel ini menjalankan Capa pada utilitas Linux sehari-hari untuk melihat cara kerja alat tersebut.
Mengingat bahwa sebagian besar malware berbasis Windows, versi Capa sebelumnya hanya mendukung format file PE, format dominan Windows yang dapat dijalankan. Namun, mulai dengan v3.0.0, dukungan untuk file ELF telah ditambahkan (terima kasih kepada Intezer).
Lebih banyak sumber daya Linux
- Lembar contekan perintah Linux
- Lembar contekan perintah Linux tingkat lanjut
- Kursus online gratis:Ikhtisar Teknis RHEL
- Lembar contekan jaringan Linux
- Lembar contekan SELinux
- Lembar contekan perintah umum Linux
- Apa itu container Linux?
- Artikel Linux terbaru kami
Apa itu kapabilitas?
Apa konsep kemampuan sebenarnya berarti, terutama dalam konteks file yang dapat dieksekusi? Program atau perangkat lunak memenuhi kebutuhan komputasi tertentu atau memecahkan masalah. Untuk mempermudah, persyaratan kami dapat bervariasi dari menemukan file, membaca/menulis ke file, menjalankan program, mencatat beberapa data ke file log, membuka koneksi jaringan, dll. Kami kemudian menggunakan bahasa pemrograman pilihan kami dengan instruksi khusus untuk memenuhi tugas-tugas ini dan mengkompilasi program. Biner atau executable yang dihasilkan kemudian melakukan tugas ini atas nama pengguna, sehingga executable yang dihasilkan mampu melaksanakan tugas-tugas di atas.
Melihat kode sumber, mudah untuk mengidentifikasi apa yang dilakukan suatu program atau apa maksudnya. Namun, setelah program dikompilasi sebagai executable, kode sumber dikonversi ke bahasa mesin dan tidak lagi menjadi bagian dari executable yang dihasilkan (kecuali dikompilasi dengan info debug). Kami masih dapat memahaminya dengan melihat instruksi perakitan yang setara yang didukung oleh beberapa pengetahuan tentang API Linux (panggilan glibc/sistem), namun, itu sulit. Alat-alat seperti de-compiler memang ada yang mencoba mengonversi Majelis menjadi kode semu dari apa yang mungkin merupakan kode sumber asli. Namun, ini bukan pertandingan satu lawan satu, dan ini hanya upaya upaya terbaik.
Mengapa alat lain?
Jika kita memiliki beberapa alat Linux asli untuk menganalisis binari, mengapa kita membutuhkan yang lain? Alat yang ada membantu pengembang dalam memecahkan masalah dan men-debug masalah yang mungkin muncul selama pengembangan. Mereka sering kali merupakan langkah pertama untuk analisis awal pada binari yang tidak diketahui, namun, itu tidak cukup.
Terkadang yang dibutuhkan bukanlah pembongkaran yang panjang atau kode semu yang panjang, tetapi hanya ringkasan singkat dari kemampuan yang terlihat dalam biner berdasarkan penggunaan API-nya. Seringkali, binari dan malware berbahaya menggunakan beberapa teknik anti-analisis atau anti-pembalikan yang membuat alat asli tersebut tidak berdaya.
Audiens utama Capa adalah malware atau peneliti keamanan yang sering menemukan binari tidak dikenal yang kode sumbernya tidak tersedia. Mereka perlu mengidentifikasi apakah itu malware atau executable jinak. Langkah awal pertama adalah mencari tahu apa yang dapat dieksekusi sebelum pindah ke analisis dinamis. Ini dapat dilakukan dengan beberapa set aturan yang telah ditentukan sebelumnya yang dicocokkan dengan kerangka kerja populer (yang kami jelajahi di bawah). Alat Linux asli tidak dirancang untuk penggunaan seperti itu.
Mendapatkan Capa
Unduh program Capa Linux bawaan dari sini. Anda harus menggunakan v3.0.0 atau lebih tinggi. Capa diprogram dengan Python, namun program yang diunduh bukan .py
file yang dapat dieksekusi oleh juru bahasa Python. Ini adalah ELF yang dapat dieksekusi yang berjalan langsung dari baris perintah Linux.
$ pwd
/root/CAPA
$
$ wget -q https://github.com/mandiant/capa/releases/download/v3.0.2/capa-v3.0.2-linux.zip
$
$ file capa-v3.0.2-linux.zip
capa-v3.0.2-linux.zip: Zip archive data, at least v2.0 to extract
$
$ unzip capa-v3.0.2-linux.zip
Archive: capa-v3.0.2-linux.zip
inflating: capa
$
$ ls -l capa
-rwxr-xr-x. 1 root root 41282976 Sep 28 18:29 capa
$
$ file capa
capa: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=1da3a1d77c7109ce6444919f4a15e7e6c63d02fa, stripped
Opsi baris perintah
Capa hadir dengan berbagai opsi baris perintah. Artikel ini mengunjungi beberapa di antaranya, dimulai dengan konten bantuan:
$ ./capa -h
usage: capa [-h] [--version] [-v] [-vv] [-d] [-q] [--color {auto,always,never}] [-f {auto,pe,elf,sc32,sc64,freeze}]
[-b {vivisect,smda}] [-r RULES] [-s SIGNATURES] [-t TAG] [-j]
sample
The FLARE team's open-source tool to identify capabilities in executable files.
<< snip >>
$
Gunakan perintah ini untuk memeriksa apakah versi Capa yang diperlukan (v3 ke atas) sedang berjalan:
$ ./capa --version
capa v3.0.2-0-gead8a83
Keluaran capa dan kerangka kerja MITER ATT&CK
Output Capa bisa sedikit berlebihan, jadi jalankan dulu di utilitas sederhana, seperti pwd
. pwd
perintah di Linux mencetak direktori kerja saat ini dan merupakan perintah umum. Harap diperhatikan bahwa pwd
mungkin merupakan shell-inbuilt untuk Anda (tidak dapat dieksekusi terpisah) tergantung pada distro yang Anda gunakan. Identifikasi jalurnya menggunakan which
perintah terlebih dahulu dan kemudian berikan jalur lengkap ke Capa. Ini contohnya:
$ which pwd
/usr/bin/pwd
$
$ file /usr/bin/pwd
/usr/bin/pwd: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=ec306ddd72ce7be19dfc1e62328bb89b6b3a6df5, for GNU/Linux 3.2.0, stripped
$
$ ./capa -f elf /usr/bin/pwd
loading : 100%| 633/633 [00:00<00:00, 2409.72 rules/s]
matching: 100%| 76/76 [00:01<00:00, 38.87 functions/s, skipped 0 library functions]
+------------------------+------------------------------------------------------------------------------------+
| md5 | 8d50bbd7fea04735a70f21cca5063efe |
| sha1 | 7d9df581bc3d34c9fb93058be2cdb9a8c04ec061 |
| sha256 | 53205e6ef4e1e7e80745adc09c00f946ae98ccf6f8eb9c4535bd29188f7f1d91 |
| os | linux |
| format | elf |
| arch | amd64 |
| path | /usr/bin/pwd |
+------------------------+------------------------------------------------------------------------------------+
+------------------------+------------------------------------------------------------------------------------+
| ATT&CK Tactic | ATT&CK Technique |
|------------------------+------------------------------------------------------------------------------------|
| DISCOVERY | File and Directory Discovery:: T1083 |
+------------------------+------------------------------------------------------------------------------------+
+-----------------------------+-------------------------------------------------------------------------------+
| MBC Objective | MBC Behavior |
|-----------------------------+-------------------------------------------------------------------------------|
| FILE SYSTEM | Writes File:: [C0052] |
+-----------------------------+-------------------------------------------------------------------------------+
+------------------------------------------------------+------------------------------------------------------+
| CAPABILITY | NAMESPACE |
|------------------------------------------------------+------------------------------------------------------|
| enumerate files on Linux (2 matches) | host-interaction/file-system/files/list |
| write file on Linux | host-interaction/file-system/write |
+------------------------------------------------------+------------------------------------------------------+
Jalankan Capa dengan -f elf
argumen untuk mengatakan bahwa executable untuk dianalisis ada dalam format file ELF. Opsi ini mungkin diperlukan untuk binari yang tidak dikenal; namun, Capa sangat mampu mendeteksi format sendiri dan melakukan analisis, sehingga Anda dapat melewati opsi ini jika diperlukan. Pada awalnya, Anda akan melihat pesan memuat/mencocokkan saat Capa memuat aturannya dari backend dan kemudian menganalisis yang dapat dieksekusi dan mencocokkan aturan tersebut dengannya. Lewati menampilkan ini dengan menambahkan -q
opsi untuk semua perintah.
Capa output dibagi menjadi beberapa bagian. Bagian pertama secara unik mengidentifikasi biner menggunakan hash md5, sha1, atau sha256 diikuti oleh sistem operasi, format file, dan informasi arsitektur. Informasi ini sering penting ketika berhadapan dengan executable. Di bagian berikut, Capa menggunakan Taktik dan Teknik ATT&CK untuk menyesuaikan dengan kemampuannya.
MITRE ATT&CK paling baik dijelaskan dengan kata-kata proyek itu sendiri:
MITER ATT&CK® adalah basis pengetahuan taktik dan teknik musuh yang dapat diakses secara global berdasarkan pengamatan di dunia nyata.
Jika Anda ingin mempelajari lebih lanjut tentang ATT&CK, silakan merujuk ke Kerangka MITRE ATT&CK di sini.
Anda dapat mencocokkan keluaran Capa di dua bagian berikut dengan kerangka kerja MITER ATT&CK. Saya akan melewatkan bagian ini dalam artikel ini.
Terakhir, di bagian Kemampuan, Anda dapat melihat dua kemampuan khusus yang tercantum:
enumerate files on Linux
write file on Linux
Bandingkan ini dengan sifat pwd
program, yang perlu menunjukkan direktori saat ini. Ini cocok dengan kemampuan pertama (ingat konsep semuanya adalah file di Linux). Bagaimana dengan bagian kedua, yang mengatakan menulis file ? Kami tentu belum menulis pwd
output ke file apa pun. Namun, ingat pwd
perlu menulis lokasi direktori saat ini ke terminal; bagaimana lagi output akan dicetak? Jika Anda masih tidak yakin tentang cara kerjanya, jalankan perintah berikut dan cocokkan hasilnya. Jika Anda tidak terbiasa dengan strace
atau apa fungsinya, saya punya artikel yang membahasnya di sini. Fokus pada tulis panggilan sistem menjelang akhir artikel di mana pwd
yang dapat dieksekusi perlu menulis jalur direktori (string) ke 1 , yang merupakan singkatan dari standar keluar. Dalam kasus kami, itu adalah terminal.
$ strace -f /usr/bin/pwd
execve("/usr/bin/pwd", ["/usr/bin/pwd"], 0x7ffd7983a238 /* 49 vars */) = 0
brk(NULL)
<< snip >>
write(1, "/root/CAPA\n", 11/root/CAPA
) = 11
close(1) = 0
close(2) = 0
exit_group(0) = ?
+++ exited with 0 +++
Menjalankan Capa di berbagai utilitas Linux
Sekarang setelah Anda tahu cara menjalankan Capa, saya sangat menyarankan Anda mencobanya di berbagai utilitas Linux sehari-hari. Saat memilih utilitas, cobalah untuk menjadi beragam mungkin. Misalnya, pilih utilitas yang bekerja dengan sistem file atau perintah penyimpanan, seperti ls
, mount
, cat
, echo
, dll. Selanjutnya, pindah ke utilitas jaringan, seperti netstat
, ss
, telnet
, dll., Di mana Anda akan menemukan kemampuan jaringan yang dapat dieksekusi. Perluas ke daemon program yang lebih luas seperti sshd
untuk melihat kemampuan terkait kripto, diikuti oleh systemd
, bash
, dll.
Sebuah kata peringatan, jangan terlalu ketakutan jika Anda melihat aturan yang cocok dengan malware untuk utilitas asli ini. Misalnya, ketika menganalisis systemd, Capa menunjukkan kecocokan untuk COMMAND AND CONTROL berdasarkan kemampuan untuk menerima data dari jaringan. Kemampuan ini dapat digunakan oleh program asli untuk kasus yang sah, sementara malware dapat menggunakannya untuk tujuan jahat.
Berjalan dalam mode Debug
Jika Anda ingin melihat bagaimana Capa menemukan semua kemampuan ini dalam executable, berikan -d
flag, yang menampilkan informasi tambahan di layar yang mungkin membantu memahami cara kerja bagian dalamnya. Gunakan data ini dan cari petunjuk dalam kode sumber di GitHub.
$ ./capa -q /usr/sbin/sshd -d
Hal pertama yang harus diperhatikan adalah Capa menyimpan aturan ke direktori temp dan membacanya dari sana:
DEBUG:capa:reading rules from directory /tmp/_MEIKUG6Oj/rules
Output debug menunjukkan itu memuat berbagai aturan dari direktori ini. Sebagai contoh, lihat bagaimana ia mencoba mengidentifikasi nama host mesin:
DEBUG:capa:loaded rule: 'get hostname' with scope: function
Dengan informasi ini, mudah untuk mencari aturan. Cukup buka rules
direktori dan grep
untuk nama aturan tertentu seperti contoh di bawah ini. Aturan dinyatakan dalam file .yml.
$ grep -irn "name: get hostname" *
rules/host-interaction/os/hostname/get-hostname.yml:3: name: get hostname
Periksa -api
bagian di mana berbagai API terdaftar. Capa mencari gethostname
Penggunaan API (di Linux), dan Anda juga dapat melihat Windows yang setara tercantum di sana.
$ cat _MEIKUG6Oj/rules/host-interaction/os/hostname/get-hostname.yml
rule:
meta:
name: get hostname
namespace: host-interaction/os/hostname
<< snip >>
features:
- or:
- api: kernel32.GetComputerName
- api: kernel32.GetComputerNameEx
- api: GetComputerObjectName
- api: ws2_32.gethostname
- api: gethostname
Anda dapat menemukan informasi lebih lanjut tentang panggilan sistem khusus ini di Linux menggunakan halaman manual.
$ man 2 gethostname
GETHOSTNAME(2) Linux Programmer's Manual GETHOSTNAME(2)
NAME
gethostname, sethostname - get/set hostname
<< snip >>
Penggunaan verbose
Cara lain yang baik untuk mengidentifikasi API yang dicari Capa adalah menggunakan mode verbose, seperti yang ditunjukkan di bawah ini. Contoh sederhana ini menampilkan penggunaan opendir
, readdir
, dan fwrite
API:
$ ./capa -q /usr/bin/pwd -vv
enumerate files on Linux (2 matches)
<< snip >>
api: opendir @ 0x20052E8
api: readdir @ 0x2005369, 0x200548A
write file on Linux
<< snip >>
os: linux
or:
api: fwrite @ 0x2002CB5
Aturan khusus
Seperti alat bagus lainnya, Capa memungkinkan Anda untuk memperluasnya dengan menambahkan aturan Anda sendiri. Petunjuk ini juga diberikan dalam keluaran debug, jika Anda perhatikan.
$ capa --signature ./path/to/signatures/ /path/to/executable
Hanya aturan khusus
Anda juga dapat mencari aturan tertentu daripada membuat Capa mencoba mencocokkan setiap aturan. Lakukan ini dengan menambahkan -t
bendera diikuti dengan nama aturan yang tepat:
$ ./capa -t "create process on Linux" /usr/sbin/sshd -q -j
Tampilkan nama aturan dari file .yml dalam rules
direktori. Misalnya:
$ grep name rules/host-interaction/process/create/create-process-on-linux.yml
name: create process on Linux
Format keluaran
Terakhir, Capa mengizinkan output dalam format JSON menggunakan -j
bendera. Bendera ini membantu mengkonsumsi informasi dengan cepat dan membantu otomatisasi. Contoh perintah ini mengharuskan perintah jq diinstal:
$ ./capa -t "create process on Linux" /usr/sbin/sshd -q -j | jq .
Menutup
Capa adalah tambahan yang layak untuk alat yang sangat dibutuhkan untuk executable ELF. Saya katakan sangat dibutuhkan karena kami sering melihat kasus malware Linux sekarang. Alat di Linux harus mengejar untuk mengatasi ancaman ini. Anda dapat bermain-main dengan Capa dan mencobanya di berbagai executable, dan juga menulis aturan Anda sendiri dan menambahkannya ke hulu untuk kepentingan komunitas.