題:
Ubuntu的系統提示不是我的密碼欺騙嗎?
Arseni Mourzenko
2017-08-13 18:10:06 UTC
view on stackexchange narkive permalink

有時,Ubuntu顯示以下窗口:

Screen shot of "Authenticate" dialog box asking for password

此窗口可能是由某些後台進程運行(例如,自動運行)引起的。更新,或向Canonical報告錯誤的過程,該過程以這種方式顯示出來:

Screen shot of "System program problem detected" query box

由於這些是後台進程,因此第一個窗口是在我希望系統要求我輸入密碼的情況下,未顯示我對自己執行的操作的響應。這意味著:

  • 從用戶的角度來看,不能保證提示來自操作系統;可能是任何只有有限權限才能顯示窗口的惡意程序,並且通過提示我輸入密碼,將可以無限制地訪問整個計算機。

  • 該系統會定期提示用戶輸入密碼,該系統告訴用戶在某些應用程序要求時提供系統密碼是一件很自然的事情。

我的問題是:

  • 在一般的Linux或Ubuntu中是否有任何安全機制專門防止任何應用程序顯示與系統相同的對話框,要求我輸入密碼?

    • p>

    • 應該如何設計此類窗口以提高用戶安全性?為什麼不實現與Windows的 Ctrl kbd> + Alt kbd> + Del kbd> 登錄時類似的系統?

評論不作進一步討論;此對話已[移至聊天](http://chat.stackexchange.com/rooms/64019/discussion-on-question-by-arseni-mourzenko-isnt-ubuntus-system-prompt-for-my-p)。
六 答案:
Mike Ounsworth
2017-08-13 20:55:53 UTC
view on stackexchange narkive permalink

您的觀點都很好,您是正確的,但是在對此感到憤怒之前,我們需要提醒自己linux安全模型是如何工作的以及它旨在保護什麼。

請記住,Linux安全模型在設計時考慮了多用戶終端或SSH服務器。 Windows在設計時考慮了最終用戶工作站(但我聽說最近的Windows對終端更友好)。特別是,Linux約定在將應用程序沙箱化到用戶方面做得更好,而在Windows中,任何重要的東西都作為系統運行,而Linux GUI(X Server)吸納了安全性,Windows GUI具有內置的UAC之類的功能。基本上,Linux首先是(並且一直以來都是)服務器,其次是工作站,而Windows則恰恰相反。


安全模型

就OS(即內核)而言,您有7個tty控制台和任意數量的SSH連接(也稱為“登錄會話”)-碰巧ubuntu附帶了腳本,可以在 tty7上自動啟動GUI 會話,但對於內核來說,它只是另一個應用程序。

登錄會話和用戶帳戶之間的沙盒關係非常好,但是Linux採取了一種安全的心態,您不需要保護用戶自己。在這種安全模型中,如果您的帳戶受到惡意軟件的破壞,這是一個丟失的原因,但是我們仍然希望將其與其他帳戶隔離開來,以保護整個系統。

例如,Linux應用程序傾向於創建一個低權限用戶,例如 apache ftp ,這些用戶在不需要做有惡意的事情時就可以運行。如果攻擊者設法控制了正在運行的 apache 進程,則可以破壞其他 apache 進程,但在跳轉到 ftp 進程時會遇到麻煩

請注意,Windows在這裡採用了根本不同的方法,主要是通過約定,所有重要事物始終作為系統運行。與作為系統運行的惡意進程相比,Linux中的惡意服務具有更小的範圍來做壞事,因此Windows 需要付出更多的努力來保護具有管理員權限的人免受“他們自己”的侵害。 p>

GUI環境和非針對安全性的X Server都使這種安全模型陷入困境。在Windows中,當用戶進程請求特權升級時,內核會拋出一個特殊的受保護提示,其內存和鍵盤/鼠標總線與其餘桌面環境隔離。之所以可以這樣做,是因為GUI內置在OS中。在Linux中,GUI(X服務器)只是另一個應用程序,因此密碼提示屬於調用它們的進程,該進程以您的身份運行,與其他所有窗口和進程一樣以您的身份運行共享內存權限和輸入總線。

root提示符無法執行Iike鎖定鍵盤的操作,因為這些要么已經是root,要么需要完全重新設計X服務器(請參閱下面的Wayland)。 catch 22在這種情況下是將GUI與內核分開的缺點。但是,至少這與Linux安全模型保持一致。 ,我們可能不得不重寫很多東西。至少,內核需要具備GUI意識,以便能夠創建提示(今天還不是這樣)。另一個首選示例是GUI會話中的所有進程共享一個鍵盤總線。

看著我寫一個鍵盤記錄器,然後在另一個窗口中按一些鍵

 ➜〜xinput列表
⎡虛擬核心指針id = 2 [主指針(3)]⎜↳虛擬核心XTEST指針id = 4 [從屬指針(2)]⎜Logitech K400 Plus id = 9 [從屬指針(2)]⎜ETPS / 2 Elantech觸摸板id = 13 [從屬指針(2)]➜〜xinput測試9鍵釋放36鍵按下44 h鍵釋放44鍵按下40 e鍵釋放40鍵按下33 l鍵釋放33鍵按下33 l鍵按下39 okey釋放33鍵釋放39鍵按66鍵按31  

任何正在運行的進程,都可以在另一個進程的提示符或終端中嗅探密碼,然後自己調用sudo(這直接是因為“無需保護您免受您的思維定勢),因此除非我們從根本上更改安全模型並大規模重寫各種事情,否則提高密碼提示的安全性是沒有用的。

(值得注意的是, Gnome似乎至少可以在鎖定屏幕和新會話上沙箱化鍵盤總線通過“切換用戶”輸入,因為在那裡鍵入的內容不會顯示在我的會話的鍵盤總線中)


Wayland

Wayland是旨在更換X11。它將鎖定客戶端應用程序,以使它們無法竊取信息或影響其窗口外的任何內容。客戶端可以在外部IPC外部彼此通信的唯一方法是通過控制所有客戶端的合成器。但是,這不能解決根本問題,而只是將對信任的需求轉移到了合成器上。


虛擬化和容器

如果您使用雲技術,則可以可能會上下跳動地說“ Docker是答案!”。的確,布朗尼為您指出。儘管Docker本身並不是真的要增強安全性(感謝@SvenSlootweg),但它的確指向使用容器化和/或虛擬化作為與當前Linux體系結構兼容的轉發。

兩個值得注意的Linux發行版都考慮到了進程間隔離:

Qubes OS ,該操作系統在多個虛擬機中運行用戶級應用程序,這些虛擬機被劃分為“安全域”,例如

Android ,它以單獨的低特權用戶身份安裝和運行每個應用程序,從而獲得了進程級隔離和文件系統隔離(每個


底線:從最終用戶的角度來看,期望Linux表現出正常的行為是合理的。與Windows相同,但這是其中一種情況,您需要稍微了解一下基礎系統的工作方式以及為什麼採用這種方式進行設計。只要更改密碼提示的實現由您擁有的進程擁有,就不會完成任何事情。在單用戶GUI工作站的環境中,要使Linux獲得與Windows相同的安全行為,就需要對操作系統進行重大的重新設計,因此不太可能發生,但是像Docker這樣的事情可能會在更多的Linux系統中提供前進的方向,

在這種情況下,重要的區別是Linux在較低的級別上被設計為多用戶服務器,並且他們決定不保護用戶免受自身的攻擊,而Windows被設計為單用戶工作站,因此您確實需要在登錄會話中具有進程間保護。同樣重要的是,在Windows中,GUI是操作系統的一部分,而在Linux中,GUI只是另一個用戶級應用程序。

我不知道如何將其安裝到體內,但是[強制性xkcd](https://xkcd.com/1200/)
我認為這兩種操作系統都是“低級”的,功能完善的,完全可比的多用戶服務器。重要的是“ GUI是Windows(!)的一部分”與“ X會話只是另一個用戶程序”部分。
儘管所有這些事實實際上都是正確的,但我認為與該問題關係不大...
評論不作進一步討論;此對話已[移至聊天](http://chat.stackexchange.com/rooms/63876/discussion-on-answer-by-mike-ounsworth-isnt-ubuntus-system-prompt-for-my-passw)。
_請記住,Linux安全模型在設計時考慮了多用戶無頭或SSH服務器,並且在這種情況下Linux具有更多的保護。Windows在設計時考慮了最終用戶工作站,在這種情況下Windows具有更多的保護。_您從何得出結論的?
@JopV。主要是根據我自己的經驗;X服務器的安全性很差,雖然我不是Windows專家,但似乎讓多個用戶同時登錄GUI以及使任何重要的東西都作為系統運行而不是應用最小特權原則的約定看起來很糟糕。我很高興能改變看法。
“ *如果我們開始看到Linux發行版在未來幾年內將Web瀏覽器和其他高風險應用程序容器化,我不會感到震驚。”
這個答案可能應該解決Wayland對安全性的看法以及它如何改進安全性(但最終只是將合成器添加為您應該信任的另一件事)
-1
@Will可以使在您不信任的合成器中直接運行的代碼(或其中可能包含錯誤的代碼)更加安全。但是,您仍然需要信任合成器的實現,因為這是客戶端正在談論的主要內容。換句話說,如果您將一個合成器想像為服務器,將Windows /應用程序想像為客戶端,則服務器是否無法寫入您的房屋卻將您鍵入的內容公開給任何客戶端,或者讓我們來繪製客戶端,都無所謂任何地方的任何東西,並從據說“受信任”的應用程序中刮取像素。所有輸入都通過合成器。
@Timidger像往常一樣,在旁觀者的眼中以及相對於您要保護的內容而言,什麼是“安全的”;)
不幸的是,這個答案將Docker視為一種隔離措施。__Docker不能提供針對惡意應用程序的安全隔離__,因為這超出了Docker設計的目的(隔離意外污染的依賴項等)。某些容器化技術(OpenVZ,非特權LXC)可以提供安全隔離,但是Docker當然不是其中之一。另外,“容器”和“ VM”不是同一類東西。
@SvenSlootweg我使用的是(小c)容器,因為所有VM都是容器,但並非所有容器都是VM。鏈接的維基百科文章說_“除了隔離機制,內核還經常提供資源管理功能,以限制一個容器的活動對其他容器的影響。” _對我來說,這聽起來像是某種程度的安全隔離。
但是,“ @MikeOunsworth”的“某種程度”還不夠,“隔離惡意行為”與“隔離意外污染/資源過度使用”是兩個截然不同的事情。Docker只照顧後者,而不照顧後者,因此在談論惡意軟件時“完全”不足。另請參見https://gist.github.com/joepie91/1427c8fb172e07251a4bbc1974cdb9cd#secure-isolation
@SvenSlootweg該編輯是否符合您的想法?
deviantfan
2017-08-13 20:12:22 UTC
view on stackexchange narkive permalink

在Linux或Ubuntu中是否有任何安全機制可以阻止任何應用程序顯示與系統相同的對話框,要求我輸入密碼?

快速解答:否

從用戶的角度來看,不能保證提示來自操作系統;可能是任何只有有限權限才能顯示窗口的惡意程序,並且通過提示輸入我的密碼,可以不受限制地訪問整台計算機。

如果打開了惡意程序,在計算機上,顯示對話框的程序甚至都沒有關係。
如果是惡意程序,如下面的句子所述,它甚至不需要顯示對話框。如果它是合法程序,則惡意程序可以在X服務器環境(終端更好)中“監視”窗口以及您在其中鍵入的內容。

解決方案?

如果您有理由認為某些程序不值得信賴,可以使用沙箱(VM或更少的東西)。

否則,不要求輸入密碼。該對話框為非技術用戶提供了便利。如果您擔心安全性,或者是組織管理員或類似人員,那麼絕對不需要顯示GUI密碼查詢。正確配置非root用戶帳戶的權限(是或否,但不詢問),並且不要將桌面用作root用戶(因為這樣做是因為,它經常導致不必要地使用root用戶)。

通過定期提示用戶輸入密碼,系統會告訴用戶,每當某個應用程序要求輸入系統密碼時,這都是很自然的事情。

如前所述,不要問他們。作為管理員,“您的”用戶應具有明確定義的權限。

而且,關於以組織管理員的身份進行自動更新:您瘋了嗎:)嚴重的是,不要讓許多Ubuntu客戶端隨機地更新randon東西。您維護並測試然後發布的中央映像如何?或其他方向,例如Ansible?
完全獨立於安全性,更新可能會破壞事情。那就是為什麼。

儘管無節制更新的混亂狀態確實很危險,但是控制更新的最簡單(可能是最常見)的方法是不進行更新,這也是危險的。
這對企業來說很好,但是家庭用戶和小型企業呢?他們可能只是直接使用它。的確,這是Ubuntu的賣點(沒有詳盡的配置)。如果默認設置不安全,他們是否應該將其營銷給個人用戶?
@Kevin好吧,“應該”……通常,便利與安全性相反。令人遺憾的是,這足以使安全困擾許多經理和其他員工。如果Ubuntu表示“我們永遠都不會允許您在GUI中輸入密碼,甚至XTerm也不會,您始終需要打開根終端才能執行此類操作”,那將無助於他們提高市場份額。
而且,無論如何,只要我們不知道要防護什麼以及風險有多高,就不可能使用“安全”的操作系統。Ubuntu不能為“所有”用戶做出選擇,只是為其中的一部分做出了選擇。(那部分不知道終端是什麼)。
@deviantfan而且該部分也更容易受到偽造的欺騙。Windows僅因其市場份額而擁有當今數量的惡意軟件。隨著Ubuntu規模的擴大,它成為惡意軟件的更有趣的目標,並且當前操作系統的化身無法保護最終用戶免受智能攻擊者的侵害。這是一個非常重大的設計失敗。
-1
-1
@deviantfan不需要完全替換X-您可以執行與UAC相同的操作-當需要顯示提示時,請在一個單獨的終端會話中切換到完全獨立的特權應用程序,該會話似乎只是顯示舊的GUI。這比替換X簡單得多。不如UAC強大,但比現在的UAC強大得多,而且您可以避免輸入密碼(這樣就避免了虛假對話框)。如果您想了解遠程會話,那麼它們在Windows上也很容易受到攻擊(對於客戶端的按鍵記錄程序而言),就像在VM中運行系統一樣。
@Luaan好主意,我不確定是否混合會話真的比替換X容易得多...
Stig Hemmer
2017-08-14 12:41:16 UTC
view on stackexchange narkive permalink

是的。這是不安全的!

我個人總是取消該對話框。不是因為它可能是偽造的,而是因為它可能是真實的。不,我不這樣認為。

系統更新很好,我可以手動執行,但是讓我感到煩惱的是,錯誤報告系統需要這樣做。設計不好。

好吧,“對話”並不是特別安全。程序可以自己“提高”,這是一個風險(在命令行上也有相同的風險)。通常,這是一個方便的問題。如果您不想立即運行需要以root privs作為root的程序(連接到WLAN,升級安裝等),則必須打開root shell或為此運行sudo(您顯然可以這樣做)升級)。這不是一個壞主意,但對於面向GUI的OS來說,它太麻煩了。
問題在於需要root特權的程序還沒有suid。這就是suid存在的原因。(注意:不要對整個大型圖形程序進行suid操作。請製作一個小型suid程序來執行所需的操作,僅此而已)
您顯然不是Ubuntu或GUI的粉絲,對嗎?
我通常是Ubuntu的粉絲,但認為他們對此持反對態度。
@oldmud0您是否還記得Vista何時發布,幾乎成千上萬的人抱怨需要不斷在UAC對話框中單擊“確定”?當您實際上每次需要輸入密碼時,抱怨在Ubuntu中甚至變得更糟。當他們要求升級權限時,有些事情使我感到困惑……例如從“軟件中心”安裝僅當前用戶會使用的軟件(也許這已經改變了)。我認為Stig很有意思。太多的事情要求特權升級。
Peter - Reinstate Monica
2017-08-14 09:41:05 UTC
view on stackexchange narkive permalink

與您的感覺相反,(現代)Windows和Ubuntu處理特權級別和特權提升的方式非常相似。原因肯定是操作系統都是具有相似用例且面臨類似問題的多用戶系統。

這兩個操作系統都限制了普通用戶的操作(當然是通過運行程序)。用戶可以銷毀自己的數據,但在理想情況下不能銷毀其他人的數據(除非他們共享了數據),並且在理想情況下不能破壞或破壞系統。為了讀取和寫入系統數據,程序在兩個操作系統上都需要具有管理員(root)特權,通常只有admin / root啟動的程序才具有該特權。

為了簡化操作,這兩個操作系統都為默認用戶提供了通過sudo或UAC運行具有“提升特權”的單個程序的功能。兩種操作系統的GUI均會觸發一個對話框,以使用戶有機會阻止程序以管理員/超級用戶身份運行。兩種系統都具有根本不允許運行特權程序的用戶的概念。

Ubuntu對話框要求輸入密碼; Windows UAC對話框沒有。 (您似乎認為程序需要特殊權限才能顯示該對話框;事實並非如此。該程序正在為他們與該對話框詢問。如果有人偽造了該對話框,則會得到您(用戶)密碼,對於已經以該用戶身份運行的程序沒有任何好處。)

所有這些的最重要的一點是,惡意程序可以假裝它需要提升權限才能使用某些有用的內容並觸發對話框,一旦獲得它們,請格式化硬盤驅動器。 1 sup>對於兩個操作系統都是如此。因為在Windows下通常會安裝更多的第三方軟件,所以命中此類程序的機會可能比Ubuntu更高。

您提到在Windows中,UAC對話框通常是用戶操作(例如,安裝程序)的結果,而Ubuntu卻沒有明顯的原因啟動了該對話框。我能想到的一個原因是Windows軟件更新是由操作系統啟動的,因此它們已經具有提升的特權。也許Ubuntu在安裝前會詢問。

除了提供“我需要您護照,靴子和外套”之外的更多信息,確實很不錯。我這裡沒有Ubuntu系統,但是在對話框的左側看到了“ Details”標題。你看了說什麼嗎? (當然,惡意程序可以在其中偽造任何文本,但是您可以檢查所指控的程序是否確實在運行。)


1 sup>與實際覆蓋數據相比,這 糟糕。
嗯,Windows UAC東西有一些額外的保護,使欺騙更加困難,請參閱https://blogs.msdn.microsoft.com/uac/2006/05/03/user-account-control-prompts-on-the-secure-桌面/等,因此在Ubuntu上,惡意程序偽造對話框要容易得多。
@schlenk你是對的;操作系統中GUI的集成為MS Windows提供了在特權提升之前要求強制性UAC對話框的權限。我不知道其控制台可能未被佔用的Windows服務器如何處理該問題。可能在某個時候需要提升權限的所有程序都將立即以管理員身份運行。但是基本的問題似乎是Linux提示“突如其來”,而Windows的UAC提示(幾乎是?)始終是用戶交互(啟動程序等)的結果。UAC提示的主要安全優勢是它不能顯示錯誤的信息。
@PeterA.Schneider通過RDP連接時,您會獲得Windows UAC提示符,就像在控制台上一樣。我不知道引擎蓋下是否有明顯不同,但我懷疑不是很大。
如果您未以管理員身份登錄或將UAC設置為始終要求輸入密碼,則需要告知UAC密碼
我唯一不知道Windows的UAC提示出現在哪裡的唯一時間是在啟動時啟動的程序需要管理員權限。通常,它們僅在啟動的前10分鐘(在HDD上)或2-5分鐘(在SSD上)內顯示。
@T.Sar是的,但是有一個很好的理由,它不是默認值-實際上安全性較低。它使您容易受到偽造的UAC提示的攻擊,這些提示要求您輸入管理員密碼(系統無法阻止)。僅僅知道密碼也不允許您在沒有UAC提示的情況下提升自己的身份,但這會給您帶來一些麻煩。如果您是管理員,則無需輸入密碼;如果您不是這樣,則假定實際的管理員將足夠小心以防止這種情況發生(並且〜99%的管理員無論如何都要取消-認為是公司的)。
在Windows上,特權應用程序可以在不提示的情況下啟動其他特權應用程序-因此,更新服務通常以特權安裝,並且不需要提升。如果行為良好,他們*僅*可以處理安裝並正確授權二進製文件,因此,這是淨安全收益。許多程序的行為都不盡人意,但是它會變得越來越好-它開始是只有安裝和實際上危險的功能才需要提升。至於GUI,您可以*添加一個自定義子系統-但您說對了,它不是100%用戶模式的應用程序,與X不同。
o11c
2017-08-14 10:05:04 UTC
view on stackexchange narkive permalink

確保您的密碼未被監聽的最安全方法是使用SAK序列: alt-sysrq-k 。這將殺死當前VT(包括X11)上的所有程序,並且 init 將為您提供全新的登錄提示。我知道的唯一攻擊涉及更改內核鍵映射或破壞init本身,這兩種攻擊都已經需要root或更好的訪問。訪問X11的“獨占輸入”選項的方式),取決於您信任系統的多少,但是……您為什麼不能夠信任您的系統?

Linux之間的主要區別Windows安全模型是在Linux下,您不要只是從Internet下載隨機可執行文件並運行它們。 (有人在將不可信任的Linux應用程序打包到類似Android的程序包沙箱中,但沒有人使用它們。)

我不會稱其為在“ Linux”中實現的“安全機制”……這更多是一種解決方法。
不能保證Magic SysRq支持可用。就像Linux內核中的許多其他內容一樣,它是一個可選選項。
-1
@o11c:許多發行版都禁用了大多數SysRQ功能。例如,Ubuntu的/etc/sysctl.d/10-magic-sysrq.conf設置了kernel.sysrq = 176 = 128 + 32 + 16 = reBoot / powerOff,remount Ro和Sync是唯一啟用的命令。另請參閱https://askubuntu.com/questions/11002/alt-sysrq-reisub-doesnt-reboot-my-laptop。IDK為什麼他們禁用SAK以及將內存內容轉儲到控制台(出於安全原因而禁用)。但是顯然OpenSUSE也使用176。另請參見https://bugs.launchpad.net/ubuntu/+source/procps/+bug/1025467:啟用176,之前已完全禁用。
這如何回答問題?
Joshua
2017-08-15 08:16:04 UTC
view on stackexchange narkive permalink

可怕,缺乏安全性。當我看到圖形化sudo的設計時,我忍了一下,做了 sudo passwd root 之後是 apt-get remove sudo ,然後,我通過提倡卸載使ubuntu IRC的人們感到非常惱火sudo。

仍然理解,這是完全不安全的。在終端上還可以(更好的是,當外殼更弱時,它相對未知,並且尚未真正發動針對它的攻擊),但現在是一個明顯的弱點。

我寧願啟動第二個X實例作為根,現在一年不到一次,所以我必須給圖形程序根。 (我通過直接啟動X:1而不是通過運行startx來執行此操作,因此目標應用程序僅在root的X實例中運行)。如果您更經常需要root用戶,我建議 apt-get install ssh ssh -X root @ localhost

如果您需要拒絕投票的理由... a)卸載sudo將無濟於事,因為此對話框不是sudo。b)這個問題不是關於sudo是不安全的,因為事實並非如此。c)第二個X實例無濟於事。d)X為根?根本不推薦。e)ssh'ing自己的本地計算機並不比sudo安全得多,相反(更多的代碼錯誤或錯誤配置可能性)
-1
您所謂的“ sudo提示”不是由程序sudo運行的,因此無法通過卸載sudo刪除。嘗試一下,例如。通過在窗口打開時查看過程列表。...我不知道X環境的現代性與任何事情有關。X(新舊)建立在防止安全密碼窗口的原則上。如果不破壞X,則無法更改。
用於切換X環境和終端的@deviantfan: Ctrl-Alt-Fx序列工作正常。“作為根的X是不安全的”的神話來自無數的現代窗口管理器,幾乎沒有一個是經過遠程強化的,因此永遠都不應紮根。過去有一些安全的地方。我一直堅持不懈地使用毒藥,直到我的眼部疾病嚴重到無法獲得輔助功能為止。
a)Imho組合鍵和老鼠藥在這裡無關緊要。b)我並不是說X作為根是自動不安全的。c)感謝您警告我不要相信安全神話。值得慶幸的是,我還是天生的懷疑論者,我自己檢查了很多事情之後才相信。d)我沒有進一步討論,沒有理由。
有問題的提示來自Polkit。完全不同的系統。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...