2015-10-17 45 views
4

我打算通過互聯網公開一個基於Java的web服務遠程調試的端口,但是我兩次思考,我意識到它沒有任何認證。將java遠程調試器端口暴露給互聯網是否安全?

從理論上講,似乎可以編寫一個附加到遠程調試器端口的工具,並通過Java API執行任意系統命令。或修改/轉儲數據庫,等等。 至少這個漏洞利用似乎是這種情況http://securityaffairs.co/wordpress/36394/hacking/paypal-remote-code-execution.html

我不記得被暴露遠程調試器端口有史以來強烈警告。但是現在,當數百個僵屍網絡掃描端口尋找漏洞時,應該更好地宣傳它。

可以請任何人評論是否安全和/或如何以安全的方式在任意基於java的web服務上做到這一點?我的目標是能夠在生產服務器上執行遠程調試。

+0

爲什麼要調試生產?我建議只在你的開發環境中使用遠程調試。你可以應用IP過濾並利用你公司的防火牆來實現安全 – Bon

+0

你真的需要調試這個服務器,考慮爲本地主機設置一切,並打開一個SSH隧道,如果這是必要的。然後你可以在沒有其他人能夠進行調試的情況 – Marged

+0

我想到了ssh隧道。只是想知道這是否真的是一個問題,也許有一種常見的方式(如pubkey-auth)來實現這一點。 – Dmitriusan

回答

5

您可以將遠程調試配置爲使用SSL和身份驗證,這適用於Windows和Linux,但有點麻煩。港口始終開放。

我相信你有很好的理由來調試你的實時/高效應用程序,並且知道當你真正調試它時,而不僅僅是使用連接訪問JMX數據,例如當你連接調試器時你的應用程序將停止運行。

甲骨文documents一定的風險,一些更高或更低,這取決於你如何配置代理:

注意 - 潛在的安全問題已確定密碼 身份驗證的遠程連接,當客戶端獲得 來自不安全的RMI註冊表的遠程連接器(默認)。如果 攻擊者在 合法註冊表啓動之前在目標服務器上啓動了僞造的RMI註冊表,則攻擊者可以竊取客戶端的密碼 。這種情況下,即使啓用了SSL,也可以使用系統屬性 com.sun.management.jmxremote.port = portNum啓動啓用了遠程管理的Java VM 。儘管這樣的攻擊很可能會被發現,但它仍然是一個 漏洞。

注意 - 此配置不安全。知道 (或猜測)您的JMX端口號和主機名的任何遠程用戶將能夠通過 監控和控制您的Java應用程序和平臺。儘管開發可能接受 ,但不推薦用於生產 系統。

注意 - 此配置不安全:知道 (或猜測)您的端口號和主機名的任何遠程用戶將能夠監控 並控制您的Java應用程序和平臺。此外,可能的傷害不僅限於您在MBean中定義的操作。 A 遠程客戶端可以創建一個javax.management.loading.MLet MBean和 使用它來從任意URL創建新的MBean,至少如果沒有安全管理器的話是 。換句話說,一個流氓遠程客戶端可以讓您的Java應用程序執行任意代碼。

因此,雖然禁用安全性對於 開發可能是可接受的,但強烈建議您不要禁用生產系統的安全性 。

即使是涉及最高安全性(端口移動,ssl啓用,ssl客戶端證書驗證)的配置仍然存在風險。 如果您仍然需要調試連接,我建議您使用大概已經存在的ssh連接到服務器,並使用此連接創建一個到調試器端口的ssh隧道。您可以在這裏閱讀更多關於此:Cannot remotely debug JVM via SSH tunnel(因爲它已經在所以我不復制細節)

打開端口沒有加密和身份驗證將使任何人都可以連接到您的jvm。這將允許讀取和寫入JMX值,停止執行代碼,修改值,創建堆轉儲,覆蓋代碼和所有其他不好的內容。

+0

謝謝你的完整答案 – Dmitriusan