मैं यह सुनिश्चित करने के लिए एक निष्पादन योग्य कैसे ऑडिट करूं कि यह दुर्भावनापूर्ण नहीं है?


10

मैं सोच रहा था कि क्या एक उपकरण या एक पृथक वातावरण में एक निष्पादन योग्य चलाने की तकनीक है, शायद एक आभासी मशीन में। जबकि कार्यक्रम चल रहा है, मैं एप्लिकेशन को ऑडिट करने में सक्षम होना चाहता हूं, अर्थात वह सब कुछ देखें जो निष्पादन योग्य कर रहा है (फ़ाइल और नेटवर्क एक्सेस)।

ऐसा करने से मैं यह जांचने में सक्षम होना चाहता हूं कि क्या निष्पादन योग्य दुर्भावनापूर्ण है, अर्थात वह ऑपरेशन करता है जो इसे नहीं करना चाहिए (फ़ाइलों को पढ़ना / लिखना, नेटवर्क पोर्ट से कनेक्ट करना / सुनना) ...।

मैं ग्राफिकल इंटरफ़ेस के साथ कुछ बुरा नहीं मानूंगा।


2
@ एलियाकगन: यदि मैं प्रश्न को ठीक से समझता हूं, तो ओपी "ए (टूल) मांगता है, जहां मैं वह सब कुछ देख सकता हूं जो निष्पादन योग्य कर रहा है" - कल्पना करें कि क्या आप चला सकते हैं sandbox somebinaryऔर काल्पनिक sandboxकार्यक्रम सभी फाइलों को somebinaryपढ़ या लिखी गई सभी फाइलों को लॉग इन करेगा। IP / पोर्ट से जुड़े, डेटा ट्रांसफर आदि। यह एक उपयोगी बात होगी, मैं यह भी जानना चाहूंगा कि क्या ऐसा कुछ मौजूद है (और, वास्तव में, ऐसे उपकरण के बिना किसी वीएम में चल रहे प्रोग्राम को देखना आपके लिए व्यर्थ होगा। यह नहीं कह सकता कि यह वहाँ क्या करता है)। अच्छा प्रश्न।
सर्गेई

2
UL.SE पर प्रासंगिक प्रश्न मैंने पहले पूछा था: मैं वास्तविक समय में एक प्रक्रिया की फ़ाइलों को कैसे मॉनिटर करता हूं? (न केवल फाइलों के बारे में, बल्कि नेटवर्क) याद रखें कि एक बार जब आप इसे होते हुए देखते हैं, तो नुकसान पहले ही हो चुका होता है।
gertvdijk

2
मैंने इस प्रश्न को बंद करने के बारे में मेटा पर एक प्रश्न पूछा: meta.askubuntu.com/questions/5871/… - मेरा मानना ​​है कि इसे बंद नहीं किया जाना चाहिए था।
सर्गेई

जवाबों:


10

एक उपकरण या शायद एक आभासी मशीन है जो इसके अंदर एक निष्पादन योग्य चलाने के लिए है

हां, इसे एप्लिकेशन वर्चुअलाइजेशन कहा जाता है

LXC (लिनक्स कंटेनर) इसे स्थापित करने के लिए आमतौर पर इस्तेमाल किया जाने वाला उपकरण है। यह आपको इस एप्लिकेशन के लिए पूरी तरह से अलग नेटवर्क स्थापित करने की अनुमति देता है और यह "सैंडबॉक्स" को एक वर्चुअल मशीन के रूप में "चेरोट" की तरह बनाता है। यह मुख्य रूप से सुरक्षा उद्देश्यों (एक "जेल") के लिए है, वास्तव में ऑडिटिंग के लिए नहीं।

मुझे लगता है कि पूर्ण LXC कंटेनरों की व्याख्या करने के लिए प्रश्न के दायरे के बाहर यह थोड़ा सा है और साथ ही साथ इसे कैसे ऑडिट करना है। नीचे थोड़ा सा है कि कैसे शुरू करें, हालांकि।

जबकि कार्यक्रम चल रहा है, मैं सब कुछ देखना चाहता हूं जो निष्पादन योग्य कर रहा है (फ़ाइल और नेटवर्क एक्सेस)।

इसका उपयोग करके पूरा किया जा सकता है straceऔर मैंने यूनिक्स और लिनक्स पर एक ही सवाल पूछा है:

वहाँ उत्तर के रूप में , यह मूल रूप से नीचे आता है

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

महत्वपूर्ण: एक बार जब आप इसे होते हुए देखते हैं, तो नुकसान पहले ही हो चुका होता है।


एलएक्ससी एप्लीकेशन कंटेनर

से इस लेख । यह नीचे आता है:

  1. lxc-macvlan.conf विन्यास फाइल:

    # 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. इसका उपयोग शुरू करें lxc-execute:

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

ध्यान दें कि LXC सिस्टम और एप्लिकेशन दोनों प्रकार के कंटेनर प्रदान करता है। आप यहां एप्लिकेशन कंटेनरों की तलाश कर रहे हैं।


1
LXC अभी तैयार नहीं है और वर्तमान में असुरक्षित है। उदाहरण के लिए, /sysवर्चुअलाइज्ड नहीं है और /sysकंटेनर से किए गए बदलाव /sysमेजबान को किए जाते हैं । वेब पर त्वरित खोज करते हुए, कुछ लेख हैं जो एक कंटेनर से "भागने" के लिए दस्तावेज़ हैं। LXC समस्या का एक अच्छा समाधान होगा, लेकिन वर्तमान में यह नहीं है, और इसे सुरक्षा उपकरण के रूप में उपयोग नहीं किया जाना चाहिए।
एंड्रिया कोरबेलिनी

1
वैसे पोस्ट किए गए उदाहरण कॉन्फ़िगरेशन lxc.mountविकल्प का उपयोग नहीं करता है । इसका मतलब है कि निष्पादन योग्य रन द्वारा पूरे उपयोगकर्ता की फाइल सिस्टम सुलभ है।
एंड्रिया कोरबेलिनी

10

आप जिस चीज की तलाश कर रहे हैं वह एक उपकरण है जो दिखाता है कि कोई प्रोग्राम सिस्टम के साथ कैसे इंटरेक्ट करता है (अधिक विशेष रूप से, कर्नेल के साथ)। कार्यक्रम सिसकल्स का उपयोग करके सिस्टम के साथ बातचीत करते हैं। Syscalls के उदाहरण हैं:

  • open - एक फ़ाइल खोलने के लिए उपयोग किया जाता है;
  • readऔर write- एक फ़ाइल डिस्क्रिप्टर से / से पढ़ने / लिखने के लिए उपयोग किया जाता है;
  • connect - एक सॉकेट को एक सहकर्मी से जोड़ने के लिए उपयोग किया जाता है;
  • कई, कई अन्य (देखें man syscalls)।

मुद्दा यह है: syscalls का उपयोग करके पता लगाया जा सकता है ptrace(2)। तो, मूल रूप से, आप आस-पास निर्मित उपकरणों की तलाश कर रहे हैं ptrace। ऐसे उपकरणों में strace(1)से एक है , जो एक टर्मिनल एप्लिकेशन है जो एक कमांड को एक तर्क और आउटपुट के रूप में लेता है:

  • सिस्टम कॉल कर रहा है कार्यक्रम बुला रहा है;
  • Syscalls बनाने के लिए उपयोग किए जाने वाले तर्क;
  • सिसकियों का परिणाम है।

आउटपुट सी-फैशन में है। यहाँ एक उदाहरण है:

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

वहां आप देखते हैं कि cat testनाम की एक फ़ाइल खोल रहा है test, इसकी सामग्री ( hello) को पढ़ रहा है और इसे मानक आउटपुट पर रख रहा है।

straceबहुत अधिक उत्पादन कर सकते हैं, इसलिए इसके मैन पेज ( man strace) को पढ़ना सुनिश्चित करें , विशेष रूप से -eआउटपुट का दस्तावेज़ीकरण जो आपको केवल उन syscalls को देखने देगा जो आप में रुचि रखते हैं।

दुर्भाग्य से, मैं ग्राफिकल या आसान-से-उपयोग विकल्पों के बारे में नहीं जानता। यदि आप उन्हें ढूंढना चाहते हैं, तो ptraceआपके खोज कीवर्ड में से एक होना चाहिए।


अलगाव के बारे में, वहाँ कई तकनीकें हैं। चेरोट्स, लिनक्स कंटेनर (जो वर्तमान में विकास और अपूर्ण हैं), सॉफ्टवेयर वर्चुअलाइजेशन और पैरावर्टलाइजेशन सबसे अधिक उपयोग किए जाते हैं। हालाँकि यह चर्चा करने के लिए एक बड़ा विषय है। यदि आप अधिक विवरण चाहते हैं तो मैं एक नया प्रश्न खोलने का सुझाव दूंगा।


5

AppArmor पर एक नज़र डालें । आप एक निष्पादन योग्य के लिए एक सीमित प्रोफ़ाइल जोड़ सकते हैं और इसे "शिकायत" मोड में डाल सकते हैं, जहां कार्रवाई की अनुमति दी जाएगी, लेकिन लॉग इन किया जाएगा, जो मुझे लगता है कि आपकी आवश्यकताओं को पूरा करता है।

लेकिन ध्यान दें कि यह वास्तव में पर्याप्त नहीं है। एक चतुर दुर्भावनापूर्ण बाइनरी यह पता लगाने में सक्षम हो सकता है कि यह अवलोकन के अधीन है और दुर्भावनापूर्ण कार्रवाई नहीं करता है, जब इसे नहीं देखा जा रहा है।

AppArmor इससे आगे बढ़ता है और एक आवेदन को केवल स्वीकृत संचालन के लिए हमेशा के लिए प्रतिबंधित करने की अनुमति देता है। AppArmor प्रोफाइल के साथ Ubuntu सॉफ्टवेयर सेंटर जहाज में समाप्त होने वाले ऐप्स ।


5

जैसा कि आपने पहचाना है, एक वर्चुअल मशीन अलगाव प्रदान करने के लिए बेहतर होगी, खासकर यदि आपके पास यह विश्वास करने का कारण है कि एक निष्पादन योग्य पहली जगह में दुर्भावनापूर्ण है। लेकिन यह भी सही नहीं है, क्योंकि वर्चुअलाइजेशन प्लेटफॉर्म (हार्डवेयर और सॉफ्टवेयर दोनों) में कमजोरियां बाहर निकालने के लिए दुर्भावनापूर्ण कोड द्वारा शोषण किया जा सकता है। यहां एक वास्तविक दुनिया वर्चुअलाइजेशन भेद्यता का एक उदाहरण है: http://www.kb.cert.org/vuls/id/649219


1

आप एक तस्वीर बना सकते हैं ।

स्नैप्स "सुरक्षा तंत्र के माध्यम से ओएस और अन्य ऐप से सीमित होते हैं, लेकिन उपयोगकर्ता और ओएस डिफॉल्ट्स द्वारा नियंत्रित ठीक-ठीक नीतियों के अनुसार अन्य स्नैप के साथ सामग्री और कार्यों का आदान-प्रदान कर सकते हैं।" ( http://snapcraft.io/docs/snaps/intro से )

ये AppArmor के अतिरिक्त अलगाव प्रदान करते हैं, उदाहरण के लिए seccomp का उपयोग करते हुए भी।

इसके अलावा, आपके सिस्टम पर आसान वितरण और परमाणु अपडेट के लिए एक स्नैप स्व-निहित हो सकता है।


0

धन्यवाद, उत्तर बहुत मददगार थे ...

मुझे यह भी मिला: https://downloads.cuckoosandbox.org/docs/

यह एक VM में बैठता है, जबकि मैलवेयर का विश्लेषण करने के लिए एक बहुत ही दिलचस्प उपकरण है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.