代碼庫遭攻擊,黑客公開用戶私有代碼。。。

今天,盡管網(wǎng)絡安全從未如此重要,但在很大程度上,它對于其他領域的人來說是神秘的。
黑客的故事,都很令人著迷,比如一個孤膽黑客,僅憑借一臺計算機和一顆腦袋就干掉了壞人,或者欺騙了壞人。無可否認的是,黑客的原型具有一種培養(yǎng)出來的精神氣質:自由精神、個性和微妙的詭詐。從 20 世紀 90 年代的經(jīng)典電影片《黑客》(Hackers)到更現(xiàn)代(也更現(xiàn)實)的美國電視連續(xù)劇《黑客軍團》(Mr. Robot),長久以來,黑客在流行文化中占據(jù)著特殊地位。
隨著軟件行業(yè)繼續(xù)“吞噬世界”,軟件安全行業(yè)也隨之發(fā)展。隨著部署的軟件越來越多,越來越多的軟件容易受到攻擊也就在情理之中了。事實上,越來越多的專業(yè)人士開始擔心,網(wǎng)絡安全公司人手嚴重不足,幾乎沒有足夠的人手來應對日益增多的網(wǎng)絡攻擊。更糟糕的是,軟件開發(fā)人員加速培訓計劃的持續(xù)推進,而這意味著更多的開發(fā)人員正在部署沒有經(jīng)過任何正規(guī)安全培訓的代碼。
安全基礎知識的缺失一直是個問題:許多高校在計算機科學學位課程中并不要求安全培訓,但由于學校鼓勵開發(fā)人員用較少的培訓來做更多的工作,結果導致了這個問題進一步惡化。
此外,軟件生態(tài)系統(tǒng)越來越鼓勵開發(fā)人員嚴重依賴第三方軟件,他們往往沒有評估該軟件的漏洞。2016 年的“l(fā)eft-pad 庫”事件讓我們看到,對第三方軟件越來越多的依賴是如何讓互聯(lián)網(wǎng)面臨風險的。
left-pad 是一個簡單的程序,它可以用某些字符(通常是 0 或空格),來“填充”左側的文本值,直到它達到指定的大小為止。這個函數(shù)主要用于格式化文本輸出,使其更容易閱讀。實現(xiàn)很簡單;在這一事件發(fā)生時,該函數(shù)只有 11 行簡單的 JavaScript 代碼。然而,有成千上萬的開發(fā)人員在他們的代碼中包含了這個庫,他們中的許多人在不知情的情況下包含了一個包含 left-pad 的不同庫。
這一事件始于一個名為 npm 的流行 JavaScript 庫管理工具中取消了 left-pad 庫。當時,所有依賴 left-pad 的項目都崩潰了。所有依賴于依賴 left-pad 的項目的那些項目也都崩潰了。對于 JavaScript 社區(qū)來說,這是一個巨大的麻煩,也讓許多業(yè)余愛好者和公司暫時停止了開發(fā)。
從安全角度來看是這樣的:如果 left-pad 的維護者沒有取消發(fā)布庫,而是增加一個這樣“功能”:將 left-pad 的填充信息記錄發(fā)送到他們控制的服務器上,或者更糟糕的是,如果是試圖安裝一些更全面的監(jiān)控惡意軟件呢?如果庫只有一個小小的 Bug,可以被聰明的黑客加以利用,那會不會有那么惡意呢?
因為有那么多人在不知情的情況下依賴于代碼,這種漏洞利用很容易被下游開發(fā)者忽視。這種相互依存的軟件網(wǎng)絡是軟件生態(tài)系統(tǒng)日益復雜的一種方式,它放大了小漏洞的威力。
去年,《大西洋》(the Atlantic)雜志發(fā)表了一篇文章《The Coming Software Apocalypse》(《正應驗的軟件啟示錄》),該文對現(xiàn)代軟件的異常復雜性以及隱藏在復雜性中的簡單錯誤如何導致災難性問題進行了令人痛心的審視。要我舉個例子嗎?整個華盛頓州發(fā)生了長達 6 小時的停電事件,導致 911 報警熱線電話停機,無法響應呼叫:
雖然這次 911 停機事件不是協(xié)同攻擊(Coordinated attack)的結果,但我們很容易把這個漏洞想象成《Ocean’s Eleven》電影(大陸:《十一羅漢》、香港:《盜海豪情》、臺灣:《瞞天過?!罚╋L格的蒙太奇畫面的一部分:黑客們在實施大規(guī)模搶劫之前,會設法讓數(shù)值突破上限,這樣,就可以在他們脫身之前阻止有關搶劫的報道。這是一個普通的錯誤,在一般情況下,很容易得到原諒,但如果是拒絕 911 電話呼叫的話,可能會帶來悲慘的可怕后果。
防范和防止這種類型的故障,絕對是軟件安全專業(yè)人員的工作范圍。思考任何軟件所有可能出現(xiàn)的故障模式,對系統(tǒng)加固和風險緩解都是至關重要的。然而不幸的是,像為數(shù)據(jù)庫條目設置任意閾值這樣的小錯誤可能會產(chǎn)生巨大的人為影響,而軟件世界中遍地到處都是小錯誤(還記得千年蟲問題嗎?)
讓我們來看看另一個例子,黑客能夠利用“魚缸智能溫度計”來竊取賭場的豪賭者數(shù)據(jù)庫。在這種情況下,與賭場網(wǎng)絡的其他入口點相比,溫度計更不安全。事實上,“物聯(lián)網(wǎng)”上的設備就是出了名的不安全。據(jù)《連線》(Wired)雜志報道,這類設備經(jīng)常容易受到攻擊,原因多種多樣,包括設備制造商缺乏對安全的承諾、設備上運行的代碼缺乏透明度,以及使用和安裝這些設備的人缺乏相關知識。
安裝“智能溫度計”的員工并不是軟件安全專家,這是可以理解的(老實說,這也是預料之中的)。即使是許多精通軟件的人沒有將溫度計視為攻擊載體,也是情有可原的。然而不幸的是,每一個聯(lián)網(wǎng)的設備都會讓我們容易遭受攻擊。我們需要設備制造商開始認真對待安全問題。此外,人們應該明智地仔細考慮他們從“智能”設備和“愚蠢”設備中獲得了多少價值。為了享受用智能手機關燈的便利而冒著網(wǎng)絡攻擊的風險,值得嗎?
首先是最知名的原型。攻擊性安全工作就像“破門而入”,做一些你不該做的事情。任何一個攻擊性黑客的特定目標都可能有很大的不同,從執(zhí)行勒索軟件攻擊(如 WannaCry)到竊取數(shù)據(jù)庫記錄,但這項技術的關鍵始終無非是關乎這樣的一個問題:“我能做什么?這個系統(tǒng)的所有者不想讓我做什么呢?”
有時,這項工作涉及到軟件設計和實現(xiàn)的深層知識。以最近一次針對加密貨幣交易網(wǎng)站 MyEtherWallet.com 的攻擊事件為例。在這次攻擊中,黑客利用了兩個關鍵網(wǎng)絡協(xié)議的薄弱點。首先,黑客攻擊了域名系統(tǒng)(Domain name system,DNS),該系統(tǒng)將人類可以理解的名稱(如 MyEtherWallet.com)映射到計算機可以理解的 IP 地址,這些 IP 地址用于路由互聯(lián)網(wǎng)流量。這種稱為域名服務器投毒(DNS poisoning)的攻擊,允許黑客能夠發(fā)送偽造的 IP 地址來響應 MyEtherWallet.com 的查詢。
其次,黑客攻擊了邊界網(wǎng)關協(xié)議(Border gateway protocol,BGP),該協(xié)議使用 IP 地址,實際控制如何通過互聯(lián)網(wǎng)的物理基礎設施路由流量。這種稱為 BGP 泄漏(BGP leak)的攻擊,導致互聯(lián)網(wǎng)流量通過受感染的計算機傳播,從而使攻擊者能夠毒害更多的 DNS 查詢。
結果,一些在瀏覽器地址欄輸入 MyEtherWallet.com 的用戶被發(fā)送到一個看起來像 MyEtherWallet.com 的釣魚網(wǎng)站。當毫無戒心的用戶在釣魚網(wǎng)站輸入自己的用戶名和密碼時,這些信息就會發(fā)送給攻擊者,然后他們使用這些信息來清空這些賬戶。
其他的攻擊性工作可以更加人性化。就拿這段搞笑(但也恐怖)的視頻來說吧,一位社會工程專家僅僅用了一個電話號碼欺詐器(Phone number spoofer)、一段嬰兒哭泣的音頻以及個人魅力,就接管了某人的手機賬戶:
嗨,您好。不,這不是我的賬戶,啊,我的孩子哭了……您能幫幫我嗎?
入侵系統(tǒng)需要黑客有創(chuàng)造力、靈活性和全局觀。黑客,無論是白帽黑客、黑帽黑客,還是介于這兩者之間的黑客,都能從思考多種入侵系統(tǒng)的選擇中獲益。以入侵電話賬戶為例 ,攻擊者可能會嘗試暴力破解(Brute force)來獲取他們的目標密碼。他們可能會使用類似針對上述 MyEtherWallet 的釣魚攻擊(Phishing scheme)。他們也可能會嘗試像上面視頻里的社會工程策略。他們還有可能會嘗試使用惡意軟件主動入侵電話公司的網(wǎng)絡。
當一個入侵策略看起來不起作用時,攻擊者就會嘗試其他策略。震網(wǎng)病毒(Stuxnet)和火焰病毒(Flame)的故事就很能說明問題。這兩個程序是有史以來最令人印象深刻、也是最為復雜的惡意軟件。據(jù)信,這兩個蠕蟲病毒是由為美國和以色列政府工作的黑客從 2007 年開始合作創(chuàng)建的。震網(wǎng)病毒是一種蠕蟲病毒,它有一個特定的目標:感染并關閉伊朗的核設施離心機?;鹧娌《?,以惡意軟件標準衡量,是一個巨大的程序,大約有 60MB,更像是一把從事間諜活動的瑞士軍刀。一旦主機感染這個惡意軟件,控制者就能竊取數(shù)據(jù)、監(jiān)控按鍵輸入、打開攝像頭和麥克風,并打開遠程通道以便安裝更多的惡意軟件。
最初讓安全專家認為這兩種蠕蟲是同一個創(chuàng)建者的原因是它們的特征:病毒用來傳播自己的機制?;鹧娌《纠昧艘粋€針對 Windows 更新服務器的漏洞,使病毒能夠偽裝成合法的系統(tǒng)更新,這顯然是一種將蠕蟲病毒廣泛傳播的有效方式。
另一方面,震網(wǎng)病毒針對的目標是一個已知采取內外網(wǎng)之間物理隔離措施的設施——這意味著該設施中的所有計算機都沒有連接到互聯(lián)網(wǎng)。震網(wǎng)病毒依靠的是一個這樣的漏洞,允許被感染的 U 盤自動感染它們所插入的任何 Windows 計算機。沒有人知道誰是所謂的“零號病人”,但據(jù)我們所知,國家安全局的特工在伊朗核設施的停車場周圍“散落”了幾個受感染的 U 盤。
火焰病毒使用了這種完全相同的 USB 漏洞,這也是安全專家最初將這兩種病毒聯(lián)系在一起的發(fā)現(xiàn)之一,但震網(wǎng)病毒似乎沒有利用 Windows 更新服務器的漏洞。震網(wǎng)病毒的創(chuàng)建者知道他們無法通過這種方式來入侵與互聯(lián)網(wǎng)隔離的系統(tǒng),所以他們沒有利用這種漏洞來傳播病毒。另一方面,雖然震網(wǎng)病毒總是試圖感染插入受感染計算機上的 U 盤并進一步傳播自己,但火焰病毒卻關閉了這個功能?;鹧娌《静]有像震網(wǎng)病毒那樣,將自己復制到新的 U 盤上。
關鍵是,即使火焰病毒和震網(wǎng)病毒的創(chuàng)建者可以利用相同的漏洞來傳播惡意軟件,但他們并沒有把所有的漏洞都拿出來加以利用,看看哪些漏洞會被攔截。他們經(jīng)過仔細思考,根據(jù)自己的目標決定使用哪些漏洞。
在政府部門工作,能夠制造像火焰病毒和震網(wǎng)病毒這樣的惡意軟件的人,就是黑客界的 NBA:少數(shù)杰出的黑客從事這類工作。還有其他一些人在從事類似的工作,但他們的專業(yè)知識較少,而且他們所從事的工作的利害關系也不像網(wǎng)絡戰(zhàn)那么極端。
滲透測試人員是公司花錢雇傭的黑客,讓他們試圖入侵公司自己的系統(tǒng)。公司付錢讓黑客報告他們是如何入侵公司系統(tǒng)的,這樣他們就可以加固自己的系統(tǒng)。另一類黑客,介于滲透測試人員(白帽黑客)和惡意黑客(黑帽黑客)之間,他們是試圖從許多公司提供的“Bug 賞金計劃”中獲利的個人。通過 Bug 賞金計劃,公司同意向任何能夠對其系統(tǒng)進行特定操作(比如訪問數(shù)據(jù)庫)的人支付報酬,以換取黑客解釋他們是如何做到的。
滲透測試人員所做的大部分工作都依賴于使用預制工具來執(zhí)行攻擊測試。他們是工具的使用者,而不是工具的創(chuàng)造者。許多工具仍然需要一些技術專業(yè)知識來操作,但不需要那么多。滲透測試人員可能是程序員或軟件工程師,也可能不是,但他們幾乎都是熟練的計算機用戶,他們喜歡學習新技術和新興工具集。
由于所需的技能在很大程度上取決于具體的目標,因此,進攻性工作的范圍是廣泛而多樣的。從技術含量最低的社會工程到技術含量最高的惡意軟件、加密破解程序和網(wǎng)絡入侵工具的開發(fā)。
緩解和防范都與防御有關:構建系統(tǒng),讓黑客難以做他們不應該做的事情。從事這類工作的人往往是技術性很強的。軟件工程師,尤其是在系統(tǒng)級工作的工程師,承擔了這項工作的很大一部分。
也就是說,系統(tǒng)管理員、DevOps 工程師和網(wǎng)絡工程師都會參與一些緩解 / 防范項目。應用開發(fā)者也必須做一些這方面的工作,特別是要修補他們所構建的應用程序引入的安全漏洞。這種工作正逐漸從應用工程師轉移到系統(tǒng)工程師。操作系統(tǒng)工程師定義應用程序開發(fā)人員用來訪問重要內容的接口,比如文件系統(tǒng)或網(wǎng)卡上的文件。因為安全性現(xiàn)在是計算機系統(tǒng)的頭等大事,所以默認情況下,確保系統(tǒng)安全的責任就落在了最了解系統(tǒng)的人身上。Windows 操作系統(tǒng)團隊最了解 Windows 是如何工作的,因此,他們最清楚如何防止在操作系統(tǒng)級別發(fā)生嚴重的入侵。換句話說,一個優(yōu)秀的操作系統(tǒng)應該讓應用程序工程師很難引入安全漏洞。
大型組織都有專門的軟件團隊致力于創(chuàng)建 API,這些 API 本質上是安全的,可以供應用開發(fā)者使用。通過限制應用開發(fā)者只能做出“安全”的選擇,我們就可以大幅降低總體攻擊面。例如,Google 在 4 月份宣布,Android 操作系統(tǒng)現(xiàn)在默認所有連接都采用 TLS,這意味著互聯(lián)網(wǎng)連接在默認情況下是加密的。
使用未加密的連接顯然會帶來隱私風險,而默認使用 TLS 可以防止 Android 用戶全面暴露在這種風險之下。在之前的版本中,應用開發(fā)者要確保連接被正確加密。通過防止應用開發(fā)者意外做出 "錯誤的決定",Google 消除了各種潛在的攻擊載體。
軟件的激增和潛在攻擊者數(shù)量的增加,給各類開發(fā)人員帶來了壓力。顯然,如果應用程序開發(fā)人員能夠做到不造成安全漏洞,那將是極好的,因為操作系統(tǒng)工程師已經(jīng)堵住了所有可以將得到的漏洞,但這想法是不現(xiàn)實的。因此,應用程序開發(fā)人員及其管理團隊需要在整個軟件開發(fā)生命周期中更加注意安全實踐。
現(xiàn)在,人們想進入編程領域的方式比以往任何時候都要多,但其中大多數(shù)(包括許多高校學位課程)完全沒有關注如何設計安全的軟件。軟件組織需要認真對待構建安全軟件系統(tǒng)的意識、培訓和執(zhí)行。
軟件中不可避免的漏洞使得軟件開發(fā)下游的安全實踐也成為必要。系統(tǒng)管理員等 IT 專業(yè)人員也會執(zhí)行緩解和防范任務,例如,設置安全的 VPN 以限制對重要內部服務器或數(shù)據(jù)庫的訪問、選擇一家在安全方面投入大量資源的云提供商,以及設置監(jiān)控和日志記錄工具,以便在網(wǎng)絡上的設備出現(xiàn)異常行為或發(fā)送可疑流量時通知參與方。
日常計算機用戶也應該采取緩解措施,希望通過選擇強密碼、最大限度地減少密碼重用、使用雙因素身份驗證,并使用注重隱私 / 安全性的軟件,如 EFF 的 HTTPS Everywhere、Brave Web 瀏覽器或 Keybase。
就像“現(xiàn)實生活”中的安全措施一樣,防范通常是一場比別人更不容易受到侵害的游戲。試想一下,一輛未上鎖的車比一輛上鎖的車更容易被搶,不是嗎?扒手會尋找從褲子后面口袋露出來的錢包。入室盜竊者會避開狗吠和警報系統(tǒng)。數(shù)據(jù)竊賊在訴諸窮舉暴力攻擊之前,會先嘗試常用密碼。黑客在網(wǎng)絡中尋找薄弱點(比如魚缸智能溫度計)。有一樣東西是黑客們喜歡的——就像打開了一扇門——那就是過時的軟件。
黑客們希望將時間和精力花在破解一些能讓他們訪問很多機器的東西上,如果能在一個主要的操作系統(tǒng)、網(wǎng)絡服務器平臺或加密庫中找到一個缺陷,那將是一只會下金蛋的鵝。當發(fā)現(xiàn)這樣的缺陷時,有缺陷系統(tǒng)的安全團隊就會做出反應,發(fā)布更新來堵住漏洞。保持更新是注重安全的 IT 經(jīng)理工作的一個關鍵方面。
最后,由于安全工作的性質日新月異,在紅隊對藍隊的演習中,攻防雙方通過交換進行交叉訓練是很常見的。學習如何攻擊系統(tǒng)有助于你更好地防御黑客攻擊,反之亦然。
攻擊是不可避免的;取證就是對攻擊進行事后調查。比如現(xiàn)在臭名昭著的 2016 年美國民主黨全國委員會郵件泄密事件,這些公司都是在事后才被雇傭的。當時雇傭后,要拿回電子郵件已經(jīng)太晚了,但任何理智的人都會希望:
阻止別人(或同樣的人)再次入侵系統(tǒng)。 弄清被盜的東西都有哪些,以及(如果可能的話)。 確定黑客的身份。
理想的情況是,網(wǎng)絡攻擊的受害者能夠比其他人更早知道這一點。與緩解和防范工作相結合,注重安全的工程師和 IT 專業(yè)人員通常會在關鍵的軟件系統(tǒng)中添加日志和報告工具。這種報告可能涉及從崩潰報告接收遙測數(shù)據(jù),或者記錄入站和出站的網(wǎng)絡流量。這些報告工作創(chuàng)造了一些線索,數(shù)字偵探最終可以利用這些線索來找出某人是如何入侵系統(tǒng)的,哪些東西被泄露或被竊取了,以及問題的潛在范圍。
根據(jù)不同的情況,取證工作可能涉及到查看數(shù)據(jù)庫訪問日志、網(wǎng)絡流量日志、在文件系統(tǒng)中搜尋有關入侵的線索,比如惡意軟件和被入侵用戶創(chuàng)建或更改的文件。這項工作往往是多學科的,黑客很有創(chuàng)造力,他們會使用很多策略來入侵系統(tǒng),所以數(shù)字取證專家需要精通各種策略。
對于數(shù)字取證的大多數(shù)人來說,目標是確定目標數(shù)據(jù)和 / 或系統(tǒng),并從這些系統(tǒng)中收集和恢復這些信息,然后分析收集的數(shù)據(jù),以確定攻擊行為是如何發(fā)生的。安全審計的結果最終可能成為訴訟或刑事起訴。數(shù)字取證專家得益于對法律和法律程序的理解,以幫助他們知道哪些信息可能與律師、法官和陪審團相關。他們還知道如何以一種不使信息在法庭上不被接受的方式獲取信息,這對于 FBI 等機構的數(shù)字取證工作來說絕對是至關重要的。
在防范方面,許多工作都是由軟件工程師完成的,以確保系統(tǒng)的安全。在取證中,它更多的是關于使用工具和理解全局,而不是編寫代碼。數(shù)字取證專家將編寫簡單的腳本和程序來幫助他們尋找、收集和保存線索,而且,肯定有人在編寫這些工具。但在大多數(shù)情況下,取證工作并不涉及軟件庫的創(chuàng)建或任何大規(guī)模的軟件工程工作。
最后一種類型的安全專家也涉及到最多的數(shù)學問題。密碼學研究人員開發(fā)了新的代碼、密碼算法和加密技術,以確保數(shù)據(jù)能夠以一種保護數(shù)據(jù)的方式安全存儲或傳輸。密碼學是一個嚴重依賴計算機科學和數(shù)學主題的領域。
正是這些人發(fā)明了像 RSA 公鑰加密過程或 SHA 系列加密哈希函數(shù)等算法。這與上述任何其他工作都有本質上的不同。以上所有其他類型的工作都涉及到保護和破解實際存在的系統(tǒng),它們涉及到實際的電話、實際的數(shù)據(jù)庫和實際的網(wǎng)絡服務器。而密碼學是關于更抽象地保護數(shù)據(jù)的安全。
密碼學家在很大程度上依賴于數(shù)學原理來創(chuàng)建能夠以幾種關鍵方式處理數(shù)據(jù)的算法。具體來說,密碼學領域是圍繞這五大支柱展開的:
保密性:只有受信任的各方才能讀取消息。 完整性:任何人都不能篡改或更改安全數(shù)據(jù)。 身份驗證:可以確認相關各方的身份。 授權:可以為各個受信任方建立不同級別的訪問權限。 不可否認性:這樣就可以證明收到了一條消息。
傳輸層安全協(xié)議(Transport Layer Security,TLS)是網(wǎng)絡通信安全的基礎,它涉及到提供認證、保密性和完整性的加密算法。身份驗證確保你連接到正確的網(wǎng)絡服務器;保密性以確保只有你和該網(wǎng)絡服務器可以看到你的通信;完整性確保在消息傳輸過程中沒有人能夠改變這些消息。TLS 允許在大部分連接中使用不集中不同的加密算法,但在 TLS 握手過程中需要使用 RSA 進行身份驗證并確保保密性。
TLS 實現(xiàn)(如 OpenSSL)的開發(fā)人員依賴數(shù)學研究人員發(fā)明具有所需特性的加密算法。就像應用開發(fā)者依靠操作系統(tǒng)工程師為操作系統(tǒng)提供安全的 API 一樣,操作系統(tǒng)工程師依賴密碼學家發(fā)明安全的加密算法。這個層次上的問題會在整個依賴數(shù)學的技術中層出不窮,例如,火焰病毒之所以能夠通過偽裝成合法的 Windows 更新進行傳播,就在于一種名為 MD5 的加密哈希算法的錯誤。
許多密碼學家正在研究新的加密算法,以期不受量子計算機的影響。強大的量子計算機有望破解 RSA。如果一臺高性能量子計算機出現(xiàn),RSA 將會變得完全不安全,大量互聯(lián)網(wǎng)流量將不得不改用后量子密碼學的加密算法來代替 RSA。
軟件安全是一個巨大的市場,而且正在不斷增長,現(xiàn)在是深入其中的最佳時機。如果你已經(jīng)在軟件領域中工作,那么學習更多的安全最佳實踐就顯得尤為重要。計算機和互聯(lián)網(wǎng)不會在短期內消失,所以,我們還是不妨想想辦法保護這些該死的東西吧!
作者介紹:
Tyler Elliot Bettilyon,充滿好奇心的人,教授計算機編程,撰寫與社會和政治有關的文章。個人網(wǎng)站為:www.tebs-lab.com
原文鏈接:
https://sourl.cn/2qkawk
覺得本文對你有幫助?請分享給更多人
關注「全棧開發(fā)者社區(qū)」加星標,提升全棧技能
本公眾號會不定期給大家發(fā)福利,包括送書、學習資源等,敬請期待吧!
如果感覺推送內容不錯,不妨右下角點個在看轉發(fā)朋友圈或收藏,感謝支持。
好文章,留言、點贊、在看和分享一條龍吧??
