Kötü amaçlı olmadığından emin olmak için bir yürütülebilir dosyayı nasıl denetlerim?


10

İzole bir ortamda, belki de sanal bir makinede çalıştırılabilir bir dosya çalıştırmak için bir araç veya teknik olup olmadığını merak ediyordum. Program çalışırken, uygulamayı denetlemek istiyorum, yani yürütülebilir her şeyi (dosya ve ağ erişimi) görmek.

Bunu yaparak yürütülebilir dosyanın kötü amaçlı olup olmadığını kontrol etmek istiyorum, yani yapmaması gereken işlemleri yapar (dosyalara okuma / yazma, ağ bağlantı noktalarını dinleme / bağlanma, ...).

Grafik arayüzlü bir şey umursamıyorum.


2
@EliahKagan: Soruyu doğru anlarsam, OP "çalıştırılabilir dosyanın yaptığı her şeyi görebildiğim bir" aracı (") sorar - çalıştırabildiğinizi sandbox somebinaryve hayali sandboxprogramın somebinaryokunan veya yazılan tüm dosyaları günlüğe kaydedeceğini hayal edin IP / bağlantı noktaları bağlı, veri aktarımı vb. Bu yararlı bir şey olurdu, ben de böyle bir şey olup olmadığını bilmek istiyorum (ve aslında, böyle bir araç bir sanal makinede çalışan bir programı gözlemlemek olmadan anlamsız olurdu bilmek istiyorum zaten orada ne yaptığını söyleyemem). İyi soru.
Sergey

2
Daha önce sorduğum UL.SE ile ilgili soru: Bir sürecin açık dosyalarını gerçek zamanlı olarak nasıl izleyebilirim? (sadece dosyalar hakkında değil, aynı zamanda ağ) Bir kez meydana geldiğini gördüğünüzde, hasarın zaten meydana geldiğini unutmayın.
gertvdijk

2
Meta ile ilgili şu soruyu kapatmakla ilgili bir soru sordum: meta.askubuntu.com/questions/5871/… - Bunun kapatılması gerektiğine inanmıyorum.
Sergey

Yanıtlar:


10

içinde yürütülebilir bir dosya çalıştırmak için kullanılan bir araç veya sanal bir makinedir

Evet, buna Uygulama sanallaştırma denir .

LXC (Linux Kapsayıcılar) bunu ayarlamak için yaygın olarak kullanılan bir araçtır. Bu uygulama için tamamen ayrılmış bir ağ kurmanıza izin verir ve bir chroot gibi bir tür sanal makineye "sandbox" yapar. Bu esas olarak güvenlik amaçlıdır (bir "hapishane"), aslında denetim amaçlı değildir.

Tüm LXC konteynırlarının yanı sıra tam olarak nasıl denetleneceğini açıklamanın sorunun kapsamı dışında biraz olduğunu düşünüyorum. Aşağıda, nasıl başlayacağınıza dair biraz bilgi verilmiştir.

Program çalışırken, yürütülebilir her şeyi (dosya ve ağ erişimi) yaptığı her şeyi görmek istiyorum.

Bu, straceUnix ve Linux'ta da aynı soruyu sordum:

Gibi cevap var, temelde aşağı gelir

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

Önemli: Bir kez olduğunu gördüğünüzde, hasar zaten meydana geldi.


LXC uygulama kabı

Gönderen bu makalede . Aşağı gelir:

  1. lxc-macvlan.conf yapılandırma dosyası:

    # 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. Kullanarak başlatın lxc-execute:

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

LXC'nin hem sistem hem de uygulama türü kaplar sunduğunu unutmayın. Burada uygulama kapları arıyorsunuz.


1
LXC henüz hazır değil ve şu anda güvensiz. Örneğin, /syssanallaştırılmaz ve /syskapsayıcıdan yapılan değişiklikler /sysana bilgisayarda yapılır. Web'de hızlı bir arama yaparken, bir kaptan nasıl "kaçacağını" belgeleyen bazı makaleler vardır. LXC, soruna iyi bir çözüm olacaktır, ancak şu anda değildir ve bir güvenlik aracı olarak kullanılmamalıdır.
Andrea Corbellini

1
Bu arada, yayınlanan örnek yapılandırma lxc.mountseçenekleri kullanmaz . Bu, tüm kullanıcının dosya sistemine yürütülebilir çalışma tarafından erişilebilir olduğu anlamına gelir.
Andrea Corbellini

10

Aradığınız şey, bir programın sistemle nasıl etkileştiğini gösteren bir araçtır (daha spesifik olarak çekirdek ile). Programlar sistemle sistem aramaları kullanarak etkileşime girer. Sistem çağrılarına örnekler:

  • open - bir dosyayı açmak için kullanılır;
  • readve write- dosya tanımlayıcısını okumak / dosya tanımlayıcıya yazmak / yazmak için kullanılır;
  • connect - bir soketi bir eşe bağlamak için kullanılır;
  • birçok, birçok diğerleri (bkz. man syscalls).

Mesele şu: sistem çağrıları kullanılarak izlenebilir ptrace(2). Yani, temel olarak, etrafta inşa edilmiş araçları arıyorsunuz ptrace. Bu araçlardan biri strace(1), argüman olarak bir komut alan ve çıktılar alan bir terminal uygulamasıdır:

  • sistem çağırır programı çağırır;
  • sistem çağrılarını yapmak için kullanılan argümanlar;
  • sistem çağrılarının sonucu.

Çıktı C-tarzındadır. İşte bir örnek:

$ 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
/* ... */

Orada cat testadında bir dosyayı açtığını , testiçeriğini okuduğunu ( hello) ve standart çıktıya yerleştirdiğini görüyorsunuz .

straceçok çıktı üretebildiğinden, kılavuz sayfasını ( man strace), özellikle de -eyalnızca ilgilendiğiniz sistem çağrılarını görmenizi sağlayan çıktı belgelerini okuduğunuzdan emin olun .

Ne yazık ki, grafiksel veya kullanımı kolay alternatiflerin farkında değilim. Bunları aramak istiyorsanız ptrace, arama anahtar kelimelerinizden biri olmalıdır.


İzolasyon hakkında, orada birçok teknoloji var. Chroots, Linux kapsayıcılar (şu anda geliştirme aşamasında ve eksiktir), yazılım sanallaştırma ve paravirtualization en çok kullanılanlardır. Ancak bu tartışılması çok büyük bir konu. Daha fazla ayrıntıya sahip olmak istiyorsanız yeni bir soru açmanızı öneririm.


5

AppArmor'a bir göz atın . Bir yürütülebilir dosya için sınırlı bir profil ekleyebilir ve "şikayet" moduna koyabilirsiniz, burada eylemlere izin verilecek ancak günlüğe kaydedilebilir, bence gereksinimlerinizi karşılar.

Ama bunun gerçekten yeterli olmadığını unutmayın. Akıllı bir zararlı ikili dosya, gözlem altında olduğunu algılayabilir ve gözlemlenmediği durumlar dışında kötü amaçlı eylemler gerçekleştiremez.

AppArmor bundan daha ileri gider ve bir uygulamanın yalnızca onaylanmış işlemlerle sonsuza dek kısıtlanmasına izin verir. Ubuntu Yazılım Merkezi ile sonuçlanan uygulamalar AppArmor profillerle gönderilir.


5

Tanımladığınız gibi, özellikle yürütülebilir bir dosyanın ilk etapta kötü amaçlı olduğuna inanmanız için bir nedeniniz varsa, sanal bir makine yalıtım sağlamak için daha iyi olacaktır. Ancak bu bile mükemmel değildir, çünkü sanallaştırma platformundaki (hem donanım hem de yazılım) güvenlik açıklarından kurtulmak için kötü amaçlı kodlar kullanılabilir. İşte gerçek bir sanallaştırma güvenlik açığı örneği: http://www.kb.cert.org/vuls/id/649219


1

Bir çırpıda oluşturabilirsiniz .

Snapler "güvenlik mekanizmaları aracılığıyla işletim sisteminden ve diğer uygulamalardan sınırlıdır, ancak kullanıcı ve işletim sistemi varsayılanları tarafından kontrol edilen ayrıntılı politikalara göre içerik ve işlevleri diğer snap'larla değiştirebilir." ( http://snapcraft.io/docs/snaps/intro adresinden )

Bunlar AppArmor'a ek olarak, örneğin seccomp kullanarak da daha fazla izolasyon sağlar .

Ayrıca, sisteminizde kolay dağıtım ve atomik güncellemeler için bir çıtçıt kendi kendine yetebilir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.