Bagaimana saya mengaudit suatu executable untuk memastikan itu tidak berbahaya?


10

Saya bertanya-tanya apakah ada alat atau teknik untuk menjalankan executable di lingkungan yang terisolasi, mungkin di mesin virtual. Ketika program sedang berjalan, saya ingin dapat mengaudit aplikasi, yaitu melihat semua yang dapat dieksekusi (file dan akses jaringan).

Dengan melakukan itu saya ingin dapat memeriksa apakah executable itu berbahaya, yaitu melakukan operasi yang tidak seharusnya (baca / tulis file, dengarkan / sambungkan ke port jaringan, ...).

Saya tidak keberatan dengan antarmuka grafis.


2
@ ElliKagan: Jika saya memahami pertanyaan dengan benar, OP meminta "a (alat) di mana saya dapat melihat semua yang dapat dieksekusi" - bayangkan jika Anda dapat menjalankan sandbox somebinarydan sandboxprogram imajiner akan mencatat semua file yang somebinarydibaca atau ditulis, semua IP / port yang terhubung, data yang ditransfer dll. Itu akan menjadi hal yang berguna untuk dimiliki, saya juga ingin tahu apakah ada sesuatu seperti ini (dan, sebenarnya, tanpa alat seperti itu mengamati program yang berjalan di VM tidak ada gunanya seperti Anda tidak bisa mengatakan apa yang dilakukannya di sana). Pertanyaan bagus.
Sergey

2
Pertanyaan yang relevan di UL.SE Saya bertanya sebelumnya: Bagaimana cara saya memonitor file yang dibuka dari suatu proses secara realtime? (tidak hanya tentang file, juga jaringan). Ingat bahwa setelah Anda melihatnya terjadi, kerusakan sudah terjadi.
gertvdijk

2
Saya mengajukan pertanyaan tentang meta tentang menutup pertanyaan ini: meta.askubuntu.com/questions/5871/… - Saya tidak yakin itu seharusnya sudah ditutup.
Sergey

Jawaban:


10

adalah alat atau mungkin mesin virtual untuk menjalankan executable di dalamnya

Ya, ini disebut virtualisasi Aplikasi .

LXC (Linux Containers) adalah alat yang biasa digunakan untuk mengatur ini. Ini memungkinkan Anda untuk mengatur jaringan yang benar-benar terpisah untuk aplikasi ini dan "kotak pasir" itu menjadi semacam mesin virtual, seperti chroot. Ini terutama untuk tujuan keamanan ("penjara"), bukan untuk audit.

Saya pikir itu sedikit di luar ruang lingkup pertanyaan untuk menjelaskan wadah LXC lengkap serta bagaimana mengauditnya dengan tepat. Di bawah ini adalah sedikit tentang cara memulai.

Ketika program sedang berjalan, saya ingin dapat melihat semua yang dapat dieksekusi (file dan akses jaringan).

Ini dapat dilakukan dengan menggunakan stracedan saya telah mengajukan pertanyaan yang sama di Unix & Linux:

Seperti yang dijawab di sana, pada dasarnya turun

strace -t -e trace=open,close,read,getdents,write,connect,accept command-here

Penting: setelah Anda melihatnya terjadi, kerusakan sudah terjadi.


Wadah aplikasi LXC

Dari artikel ini . Turun ke:

  1. lxc-macvlan.conf file konfigurasi:

    # example as found on /usr/share/doc/lxc/examples/lxc-macvlan.conf
    # Container with network virtualized using the macvlan device driver
    lxc.utsname = alpha
    lxc.network.type = macvlan
    lxc.network.flags = up
    lxc.network.link = eth0 # or eth2 or any of your NICs
    lxc.network.hwaddr = 4a:49:43:49:79:bd
    lxc.network.ipv4 = 0.0.0.0/24
    
  2. Mulai gunakan lxc-execute:

    sudo lxc-execute -n bash-test2 -f lxc-macvlan.conf /bin/bash
    

Perhatikan bahwa LXC menawarkan jenis wadah sistem dan aplikasi. Anda sedang mencari wadah aplikasi di sini.


1
LXC belum siap dan saat ini tidak aman. Misalnya, /systidak divirtualisasikan dan perubahan yang dibuat /sysdari wadah dilakukan ke /syshost. Melakukan pencarian cepat di Web, ada beberapa artikel yang mendokumentasikan cara "melarikan diri" dari sebuah wadah. LXC akan menjadi solusi yang baik untuk masalah ini, tetapi saat ini tidak, dan tidak boleh digunakan sebagai alat keamanan.
Andrea Corbellini

1
Omong-omong contoh konfigurasi yang dipasang tidak menggunakan lxc.mountopsi. Ini berarti bahwa seluruh sistem file pengguna dapat diakses oleh proses yang dapat dieksekusi.
Andrea Corbellini

10

Apa yang Anda cari adalah alat yang menunjukkan bagaimana suatu program berinteraksi dengan sistem (lebih khusus, dengan kernel). Program berinteraksi dengan sistem menggunakan syscalls. Contoh-contoh syscalls adalah:

  • open - Digunakan untuk membuka file;
  • readdan write- digunakan untuk membaca / menulis dari / ke deskriptor file;
  • connect - Digunakan untuk menghubungkan socket ke peer;
  • banyak, banyak lainnya (lihat man syscalls).

Intinya adalah: syscalls dapat dilacak menggunakan ptrace(2). Jadi, pada dasarnya, Anda mencari alat yang dibangun di sekitar ptrace. Salah satu alat tersebut adalah strace(1), yang merupakan aplikasi terminal yang mengambil perintah sebagai argumen dan keluaran:

  • sistem memanggil program yang dipanggil;
  • argumen yang digunakan untuk membuat syscalls;
  • hasil dari syscalls.

Outputnya dalam mode-C. Berikut ini sebuah contoh:

$ strace cat test
execve("/bin/cat", ["cat", "test"], [/* 55 vars */]) = 0
/* ... */
open("test", O_RDONLY)                 = 3
/* ... */
read(3, "hello\n", 32768)               = 6
write(1, "hello\n", 6)                  = 6
read(3, "", 32768)                      = 0
/* ... */

Di sana Anda melihat bahwa cat testmembuka file bernama test, membaca kontennya ( hello) dan menempatkannya pada output standar.

stracedapat menghasilkan banyak output, jadi pastikan untuk membaca halaman manualnya ( man strace), terutama dokumentasi dari -eoutput yang akan membuat Anda melihat hanya syscalls yang Anda minati.

Sayangnya, saya tidak mengetahui alternatif grafis atau mudah digunakan. Jika Anda ingin mencarinya, ptraceharus menjadi salah satu kata kunci pencarian Anda.


Tentang isolasi, ada banyak teknologi di luar sana. Chroots, wadah Linux (yang saat ini sedang dalam pengembangan dan tidak lengkap), virtualisasi perangkat lunak dan paravirtualisasi adalah yang paling banyak digunakan. Namun ini adalah topik yang terlalu besar untuk dibahas. Saya sarankan membuka pertanyaan baru jika Anda ingin memiliki lebih banyak detail.


5

Lihatlah AppArmor . Anda dapat menambahkan profil terbatas untuk yang dapat dieksekusi dan memasukkannya ke mode "mengeluh", di mana tindakan akan diizinkan tetapi dicatat, yang menurut saya memenuhi persyaratan Anda.

Tetapi perhatikan bahwa ini tidak cukup. Biner jahat yang pintar mungkin dapat mendeteksi bahwa ia sedang diamati dan tidak melakukan tindakan jahat kecuali jika tidak diamati.

AppArmor melangkah lebih jauh dari ini dan memungkinkan aplikasi untuk selamanya ditahan hanya untuk operasi yang disetujui. Aplikasi yang berakhir di Pusat Perangkat Lunak Ubuntu dikirimkan bersama profil AppArmor.


5

Seperti yang telah Anda identifikasi, mesin virtual akan lebih baik untuk memberikan isolasi, terutama jika Anda memiliki alasan untuk percaya bahwa executable itu berbahaya. Tetapi bahkan ini tidak sempurna, karena kerentanan dalam platform virtualisasi (baik perangkat keras maupun perangkat lunak) dapat dieksploitasi oleh kode jahat untuk keluar. Berikut adalah contoh kerentanan virtualisasi dunia nyata: http://www.kb.cert.org/vuls/id/649219


1

Anda dapat membuat snap .

Terkunci "dikurung dari OS dan aplikasi lain melalui mekanisme keamanan, tetapi dapat bertukar konten dan fungsi dengan bentak lain sesuai dengan kebijakan berbutir halus yang dikendalikan oleh pengguna dan standar OS." (dari http://snapcraft.io/docs/snaps/intro )

Ini memberikan isolasi lebih lanjut selain AppArmor, misalnya menggunakan seccomp juga.

Selain itu, sebuah snap dapat menjadi mandiri untuk memudahkan distribusi dan pembaruan atom pada sistem Anda.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.