2012-02-11 25 views
9

मैं हाल ही में एफ़टीपी से निपट रहा हूं और मुझे इंडी घटक TIdFTP की सुरक्षा के बारे में निश्चित नहीं है। यही कारण है कि मैंने कुछ परीक्षण बनाए हैं जिन्हें मैं आपके साथ साझा करना चाहता हूं ताकि आप सर्वोत्तम प्रथाओं और यह कैसे किया जा सके।डेल्फी 7 टीआईडीएफटीपी एफ़टीपी सुरक्षा (पासवर्ड सुरक्षा)

सबसे पहले मैं सिर्फ वस्तु इंस्पेक्टर का उपयोग कर उपयोगकर्ता नाम और पासवर्ड घटक में कहा: enter image description here

और एक सीधा संबंध है जो अच्छी तरह से काम करता है बनाया:

procedure TForm1.FormActivate(Sender: TObject); 
begin 
    try 
    FTP.Connect(); 
    ShowMessage ('Connection success'); 
    except 
    ShowMessage ('Connection failure'); 
    end; 
end; 

इस विधि के साथ समस्या यह है कि यदि आप संसाधन हैकर जैसे साधारण टूल का उपयोग करते हैं तो आप तुरंत उस डेटा को देख सकते हैं:

Host = 'ivstefano.com' 
Password = 'testpass' 
Username = 'testuser' 

तब मैं OI से निकालकर और कोड में यह डालने हर कोई के रूप में किसी और करता है के द्वारा एक छोटा सा होशियार होने का फैसला किया:

FTP.Host:= 'ivstefano.com'; 
FTP.Username:= 'testuser'; 
FTP.Password:= 'testpass'; 

फिर भी किसी को होशियार वह आसानी से हेक्स संपादक की तरह कुछ उपकरण का उपयोग और देख सकते हैं अगर क्या में exe में संकलित किया गया है: enter image description here

तो क्या मैं अंत में एक एन्क्रिप्शन उपकरण OTP (One Time Pad Wiki) जिसे आप यहां Sample OTP tool से डाउनलोड कर सकते हैं का उपयोग कर बनाने के लिए था:

enter image description here

मैंने इसे 'पासवर्ड' कीवर्ड के साथ अपना पासवर्ड 'testpass' एन्क्रिप्ट करने के लिए उपयोग किया। तब मैं, OTP एन्क्रिप्टेड स्ट्रिंग (#25+#2+#3+#7+#117+#19+#31+#6) और कुंजी (#108+#101+#109+#111+#110) ले लिया दोनों पात्रों में से ASCII राशि में है और उन्हें अपने मुख्य एफ़टीपी कनेक्शन कार्यक्रम में प्रयुक्त OTP फिर से उपयोग कर उन्हें डिक्रिप्ट करने के लिए:

function opt(text, key: String): String; 
var i: Integer; 
begin 
    SetLength(Result, length(text)); 
    for i:= 1 to length(text) do 
    Result[i]:= Char(Byte(text[i]) xor (i + Byte(key[i mod length(key)]))); 
end; 

procedure TFTPTester.FormActivate(Sender: TObject); 
var decyptedPass: String; 
begin 
    decyptedPass:= opt(#25+#2+#3+#7+#117+#19+#31+#6, #108+#101+#109+#111+#110); 
    FTP.Host:= 'ivstefano.com'; 
    FTP.Username:= 'testuser'; 
    FTP.Password:= decyptedPass; 
    try 
    FTP.Connect(); 
    ShowMessage ('Connection success with pass: ' + decyptedPass); 
    except 
    ShowMessage ('Connection failure'); 
    end; 
end; 

और आप कर सकते हैं के रूप में देखना यह ठीक से जोड़ता है:

enter image description here

और यदि हम हेक्स को देखो फिर से हम देख सकते हैं keyphrase और एन्क्रिप्टेड पासवर्ड यहाँ लेकिन कम से कम नहीं हैं कि सादा पाठ पासवर्ड:

enter image description here

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

अतिरिक्त विचार: शायद डेल्फी कोड को खराब करना बेहतर विकल्प होगा?

प्रश्न: यदि कोई है तो अपने पासवर्ड की सुरक्षा का एक बेहतर तरीका क्या है?

स्रोत: यहाँ FTPTester और OTP जनरेटर के लिए स्रोत कोड पा सकते हैं: Link to both

+1

ध्यान दें कि आप क्या दिखा रहे हैं OTP का नहीं है भेजता है। एक ओटीपी (वन-टाइम पैड) एक कुंजी को उसी लंबाई का उपयोग करता है जैसे डेटा संरक्षित किया जाता है (और कुंजी पूरी तरह से यादृच्छिक होनी चाहिए)। –

+0

आप सही हैं, लेकिन फिर जब मैंने सवाल पूछा, तो मुझे कोई बेहतर जानकारी नहीं मिली :) – ziGi

+0

कुछ भी आपको कम से कम प्रश्न में संशोधन करने से रोकता है। :) ओटीपी हर समय की सबसे गलत समझ एन्क्रिप्शन योजना होना चाहिए, फिर भी सबसे सरल ... –

उत्तर

2

मैं आपके exe फ़ाइल को एन्क्रिप्ट करने के लिए asprotect जैसे सॉफ़्टवेयर के लिए कुछ सुरक्षा उपकरण का उपयोग करूंगा।

लेकिन वैसे भी रूप में रेमी Lebeau कहा एफ़टीपी सादा पाठ है, जो एक बड़ी सुरक्षा छेद है के रूप में पासवर्ड ...

5

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

मामलों को और भी खराब बनाने के लिए, एफ़टीपी प्रोटोकॉल पासवर्ड को सादे पाठ में प्रसारित करता है, इसलिए वायरसहार्क जैसे एक सादे पैकेट स्निफर भी इसे निष्पादन योग्य हैक किए बिना इसे देख पाएंगे, जब तक आप SSL का उपयोग नहीं करते (जो इंडी 9 और इससे पहले एफ़टीपी के लिए समर्थन नहीं करता था - इसके लिए इंडी 10 में अपग्रेड)।

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