2012-06-12 14 views
9

मेरे पास एक वेब एप्लिकेशन है, और Google को Google खातों में जो कुछ जोड़ा गया है, उसके समान सुरक्षा के लिए सुरक्षित साइन-ऑन जोड़ने के साथ काम किया गया है।किसी वेब एप्लिकेशन को एक्सेस करने के लिए कंप्यूटर को अधिकृत करना

प्रयोग करें प्रकरण

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

हमें ऐसे समाधान की आवश्यकता है जो बहुत हल्का स्पर्श (अर्थात्, क्लाइंट-साइड सॉफ़्टवेयर स्थापना की आवश्यकता नहीं है), और सफारी, क्रोम, फ़ायरफ़ॉक्स और आईई 7+ (दुर्भाग्य से) के साथ काम करता है। हम x509 सुरक्षा प्रदान करेंगे, जो पर्याप्त सुरक्षा प्रदान करता है, लेकिन हमें अभी भी उन ग्राहकों के लिए समाधान की आवश्यकता है जो x509 का उपयोग नहीं कर सकते हैं या नहीं।

मेरा इरादा कुकीज (या, संभावित रूप से, स्थानीय संग्रहण का उपयोग करके, फ़्लैश कुकीज़ में गिरावट, और फिर सामान्य कुकीज़) का उपयोग करके प्राधिकरण जानकारी संग्रहीत करना है।

पहले ब्लश पर

Initial secure sign-on sequence diagram ट्रैक दो अलग-अलग मान (स्थानीय डेटा या कुकीज़): एक हैश एक सुरक्षित प्रवेश पर टोकन, साथ ही एक डिवाइस टोकन का प्रतिनिधित्व। दोनों मान वेब अनुप्रयोग द्वारा संचालित (और दर्ज) होते हैं, और ग्राहक को निर्देशित करते हैं। एसएसओ टोकन डिवाइस पर एक अनुक्रम संख्या पर निर्भर है। यह प्रभावी ढंग से उपकरणों को अनधिकृत करने की अनुमति देता है (सभी एसएसओ टोकन अमान्य हो जाते हैं) और अनुक्रम संख्या के उपयोग के माध्यम से प्रभावी ढंग से नहीं, हालांकि, मैं इस प्रश्न को पूछ रहा हूं), और एक गैर-उपयोग का उपयोग करता है।

समस्या

इस समाधान के साथ

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

मुझे लगता है कि एचएमएसी का उपयोग करना बेहतर होगा। डिवाइस को ट्रैक करें, अनुक्रम, एक निजी कुंजी के साथ एक nonce, timestamp, और हैश बनाएं, फिर हैश प्लस उन मानों को सादे पाठ के रूप में भेजें। सर्वर वही करता है (डिवाइस और अनुक्रम को सत्यापित करने के अलावा) और तुलना करता है। यह बहुत आसान लगता है, और बहुत अधिक भरोसेमंद .... मानते हुए कि हम निजी कुंजी को सुरक्षित रूप से बातचीत, विनिमय और स्टोर कर सकते हैं।

प्रश्न

तो फिर, मैं कैसे सुरक्षित रूप से अधिकृत डिवाइस के लिए एक निजी कुंजी के लिए बातचीत कर सकते हैं, और फिर सुरक्षित रूप से उस कुंजी की दुकान? क्या यह अधिक संभव है, कम से कम, अगर मैं स्थानीय स्टोरेज या फ्लैश कुकीज़ का उपयोग करके निजी कुंजी को संग्रहीत करने के लिए बसता हूं और कहता हूं कि यह "पर्याप्त अच्छा" है? या, क्या मैं अपने मूल मसौदे में कुछ ऐसा कर सकता हूं जो मैं वर्णित भेद्यता को कम करता हूं?

उत्तर

5

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

जैसा कि आपने इसे वर्णित किया है, सिस्टम में एक और तरीका रखो, आप अपने डिवाइस टोकन और एसएसओ टोकन प्रदान करने के लिए क्लाइंट के वेब ब्राउज़र पर काम कर रहे हैं और भरोसा कर रहे हैं। सही? यदि हां, तो आप इन टोकन के आंदोलन को अन्य उपकरणों पर कैसे रोक सकते हैं? (नीचे शमन रणनीतियों देखें।)

अब, अपने सवालों के आमने-सामने की इस के साथ दिमाग में जवाब देने के लिए:

"तो फिर, मैं कैसे सुरक्षित रूप से अधिकृत डिवाइस के लिए एक निजी कुंजी के लिए बातचीत कर सकते हैं और फिर उस कुंजी को सुरक्षित रूप से स्टोर करें? "

यह ऐसा करने में कोई दिक्कत नहीं है, लेकिन जैसा कि मैंने ऊपर बताया है, यह मदद नहीं करेगा।

पर्याप्त "?

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

"या फिर, वहाँ कुछ मैं अपने मूल मसौदा जोखिम को कम करने के लिए क्या कर सकते है मैं वर्णन करता हूं? "

निश्चित रूप से शमन रणनीतियां हैं जो आपके उपयोगकर्ता स्थापित आधार और जोखिम के लिए आपकी सहिष्णुता पर निर्भर करती हैं।

मुख्य प्रश्न, जैसा कि मैंने इसे देखा - कौशल और क्षमताओं के बारे में सोचें जो एक मशीन से दूसरे मशीन में टोकन ले जा सकते हैं - क्या आपकी शमन रणनीति उस व्यवहार में महत्वपूर्ण कमी कर सकती है जो सिस्टम को खराब किए बिना "ईमानदार" उपयोगकर्ताओं के लिए प्रदर्शन और प्रयोज्यता?

यहां कुछ सुझाव दिए गए हैं:

  • आप इस तरह के RSA SecurID के रूप में, दो कारक प्रमाणीकरण इस्तेमाल कर सकते हैं। यह मशीन टोकन को स्थानांतरित करने से नहीं रोकेगा, लेकिन इसकी आवश्यकता होगी कि टीएफए इसके साथ आगे बढ़े।

  • आप इन टोकन की स्थानीय प्रतियों को खराब या छिपाने का प्रयास कर सकते हैं, लेकिन यह केवल अस्पष्टता के माध्यम से सुरक्षा की तरह लगता है।

  • आप मशीन के मैक पते की जांच कर सकते हैं। यदि डिवाइस टोकन को स्थानांतरित करने के बजाय किसी मैक पते को क्लोन करना कठिन होता है, तो यह सुरक्षा की उपयोगी परत हो सकती है।

  • आप कुछ टोकन तक पहुंच को "लॉक डाउन" करने वाले कुछ अनुकूलित ब्राउज़र के उपयोग की आवश्यकता के लिए प्रयास कर सकते हैं। यह सिर्फ एक विचार है; मुझे नहीं पता कि यह व्यावहारिक है या नहीं।

  • यदि आप जानते हैं कि मशीनों को शारीरिक रूप से स्थानांतरित नहीं किया जाना है, तो आप नेटवर्क गुणों की जांच कर सकते हैं ताकि यह साबित हो सके कि मशीन एक अलग नेटवर्क स्थान पर है, और इस प्रकार, भौतिक स्थान।

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

  • स्थानीय डिवाइस टोकन संग्रहीत करने के बजाय, आपको उस एप्लिकेशन की स्थापना की आवश्यकता हो सकती है जो वेब एप्लिकेशन को प्रमाणीकरण API प्रदान करता है। यह एप्लिकेशन कंप्यूटर पर कहीं भी एम्बेड कर सकता है जो हैक करना, रूट करना या स्थानांतरित करना मुश्किल है। संगीत समारोह में साथ अलग से ऊपर विचार से (इस तरह, इस आवेदन एक "दो कारक प्रमाणीकरण" प्रणाली मशीन के लिए प्रदान करेगा।)

  • , या, आप एक अलग "फोन घर" आवेदन स्थापित कर सकता है उपकरण पर। यह आपके सर्वर के साथ समय-समय पर "चेक इन" करेगा। यदि यह नेटवर्क स्थान, डिवाइस कॉन्फ़िगरेशन बदलता है, या प्रत्युत्तर देना बंद कर देता है तो आप तदनुसार पहुंच से इंकार कर सकते हैं।

मुझे उम्मीद है कि इससे मदद मिलती है। मैं खुद को एक सुरक्षा विशेषज्ञ नहीं मानता, लेकिन मुझे डिजाइन समस्याओं के माध्यम से सोचने का आनंद मिलता है। यदि आप https://security.stackexchange.com/ पर पूछते हैं तो आपको कुछ बेहतर प्रतिक्रिया मिल सकती हैं)

+0

हम "अपरिचित" मशीनों के लिए एक बार का पासवर्ड इस्तेमाल करेंगे, या जिनके दावों में विफल रहता है। जैसा कि मैंने प्रश्न में उल्लेख किया है, अन्य सुझावों के लिए मुझे "हल्का स्पर्श" लागू करना है (जिसका अर्थ है कि इसे कोई अतिरिक्त सॉफ़्टवेयर की आवश्यकता नहीं है), अन्यथा मैं उस मार्ग पर जाऊंगा। मेरा मूल समाधान इस तथ्य के प्रकाश में "सर्वोत्तम प्रयास" का प्रस्ताव करता है कि, जैसा कि आपने कहा था, मैं ग्राहक को उन बाधाओं को नियंत्रित नहीं कर सकता जो मुझे दी गई हैं, जहां सभी अन्य विफल हो जाते हैं, हम खाते को ध्वजांकित करते हैं और 1TP सत्यापन की आवश्यकता होती है। – HackedByChinese

+0

हालांकि, आप सिस्टम का स्थानांतरित होने पर पता लगाने का उल्लेख करते हैं। मैंने उपयोगकर्ताओं के अनुमानित शहर को रिकॉर्ड करने के लिए भू-आईपी एपीआई का उपयोग करने के बारे में सोचा था। उस पर विस्तार, शायद मैं अजीब व्यवहार की कोशिश करने और पता लगाने के लिए क्लाइंट आईपी पते पर हेरिस्टिक को नियोजित कर सकता हूं, जब किसी प्रकार का पता चला है तो 1TP सत्यापन पर वापस आना। वास्तव में मोबाइल ग्राहकों के लिए, हमें केवल x509 ऑथ या क्लाइंट सॉफ़्टवेयर की स्थापना की आवश्यकता हो सकती है। वैसे भी, इस बारे में सोचने में समय लगाने के लिए धन्यवाद। – HackedByChinese

+0

मदद करने के लिए खुशी हुई। मुझे बस दो अन्य प्रासंगिक SO प्रश्न मिले जो आपको कुछ विचार दे सकते हैं: [विशिष्ट रूप से कंप्यूटर की पहचान करना] (http://stackoverflow.com/questions/671876/whats-a-good-way-to-uniquely-identify-a- कंप्यूटर/671 9 14 # 671 9 14) और [नेटवर्क पर सुरक्षित ग्राहक पहुंच के लिए डिवाइस फिंगरप्रिंट] (http://stackoverflow.com/questions/7649074/device-fingerprint-for-secure-client-access-over-tls-network)। –

1

कंप्यूटर के मैक पते को कैप्चर करने और डेटाबेस में उस जानकारी को संग्रहीत करने के बारे में क्या? जैसा कि आप जानते हैं मैक पता सभी कंप्यूटरों के लिए अद्वितीय है, एक आईपी पता छंद।

Getting MAC address on a web page using a Java applet

ऑनलाइन खोज रहे हैं वहाँ वेबपेजों और एप्लेट के माध्यम से MAC पते पर कब्जा करने के कई तरीके हैं।

+0

यदि मैं जावा एप्लेट चलाने के लिए था, तो मुझे लगता है कि मैं इसे ओएस से सुरक्षित रूप से एक निजी/सार्वजनिक कुंजी ब्रोकर रखूंगा, और फिर वहां से एचएमएसी का उपयोग करूंगा। जावा एप्लेट्स का उपयोग करना एक दिलचस्प विचार है, लेकिन यह मूल रूप से "आवश्यक क्लाइंट सॉफ्टवेयर" श्रेणी में आता है। शायद मैं इसे फिर से देखूंगा, हालांकि। धन्यवाद। – HackedByChinese

संबंधित मुद्दे