GNU/Linux >> Belajar Linux >  >> Linux

Periksa kemampuan binari ELF dengan alat sumber terbuka ini

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.


Linux
  1. Lakukan forensik memori Linux dengan alat sumber terbuka ini

  2. Kisah Linux saya:memecahkan hambatan bahasa dengan open source

  3. Pengusaha untuk meningkatkan perekrutan profesional TI dengan keterampilan open source

  1. Berbagi file sumber terbuka dengan alat Linux ini

  2. Transfer file antara ponsel Anda dan Linux dengan alat sumber terbuka ini

  3. 3 hal berguna yang dapat Anda lakukan dengan alat IP di Linux

  1. Dapatkan statistik penggunaan memori dengan alat baris perintah Linux ini

  2. Akses iPhone Anda di Linux dengan alat sumber terbuka ini

  3. Simpan beberapa distro Linux di USB dengan alat sumber terbuka ini