2012-02-11 94 views
9

我一直在處理FTP最近,我不確定Indy組件TIdFTP的安全性。這就是爲什麼我創建了一些我想與你分享的測試,這樣你就可以給出你對最佳實踐的看法以及它是如何完成的。Delphi 7 TIdFTP FTP安全(密碼保護)

首先,我只是用Object Inspector中添加的組件的用戶名和密碼: enter image description here

而且創建了一個簡單的連接效果很好:

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

的問題,此方法是如果你使用Resource Hacker這樣的簡單工具,你可以立即看到所有的數據:

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

我用它用關鍵字'lemon'加密我的密碼'testpass'。然後我把OTP加密的字符串(#25+#2+#3+#7+#117+#19+#31+#6)和鍵(#108+#101+#109+#111+#110),無論是在文字的ASCII總和,並用它們在我的主FTP連接程序再次使用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

如果我們看一下六角再次,我們可以看到的關鍵詞和加密的密碼都在這裏,但至少沒有明文密碼:

enter image description here

結論:儘管如此,「黑客」可以看到的關鍵詞和加密的口令,但將是更難猜測如何使用的關鍵,因爲他要逆向工程代碼,看看解密通是什麼我用過的加密類型。基本上我可以發明我自己的加密和解密,所以它不是必需的OTP,但如果有人更先進,他仍然可以看到我解密加密密碼的方式,並通過將密鑰應用於加密密碼來訪問我的FTP。

其他想法:也許混淆Delphi代碼將是一個更好的選擇?

問題:什麼是保護密碼的更好方法?

來源:這裏可以找到的FTPTester和OTP生成源代碼:Link to both

+1

注意,你所展示的不是一個OTP。 OTP(一次性鍵盤)使用與要保護的數據長度相同的鍵(並且鍵必須是完全隨機的)。 – 2014-08-12 12:15:29

+0

你是對的,但當時我問這個問題,我不知道更好:) – ziGi 2014-08-12 12:19:36

+0

沒有什麼能阻止你至少修改問題。 :) OTP必須是所有時間中最容易被誤解的加密方案,但是最簡單的... – 2014-08-12 12:24:19

回答

2

我會使用一些保護工具的軟件,如asprotect加密您的exe文件。

但無論如何,作爲雷米勒博說FTP發送密碼以純文本,這是一個很大的安全漏洞......

5

它並不真正的問題你如何存儲密碼。您使用的任何類型的存儲都將具有足夠的逆向工程技術。遲早,純文本版本在傳遞給TIdFTP之前必須在內存中解密,並且有些工具(IDA等)可以在解密發生後查看該內存。只需在調試器下運行可執行文件,並在Password屬性設置器或Connect方法中放置斷點並在命中時查看內存。

更糟糕的是,FTP協議無論如何都以純文本的方式傳輸密碼,所以即使只是一個簡單的數據包嗅探器,例如Wireshark,也可以在不竊取可執行文件的情況下看到它,除非您使用SSL Indy 9和更早版本不支持FTP - 升級到Indy 10)。