自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

避免CI成為一個(gè)安全隱患

開發(fā) 開發(fā)工具
最近臨時(shí)交接了一個(gè)客戶測試環(huán)境和產(chǎn)品環(huán)境的維護(hù)工作。交接的客戶資產(chǎn)包含:代碼庫、生產(chǎn)環(huán)境主機(jī)、測試環(huán)境主機(jī)、搭建在測試環(huán)境主機(jī)上的持續(xù)集成服務(wù)器以及對應(yīng)的賬號密碼。

背景

最近臨時(shí)交接了一個(gè)客戶測試環(huán)境和產(chǎn)品環(huán)境的維護(hù)工作。交接的客戶資產(chǎn)包含:代碼庫、生產(chǎn)環(huán)境主機(jī)、測試環(huán)境主機(jī)、搭建在測試環(huán)境主機(jī)上的持續(xù)集成服務(wù)器以及對應(yīng)的賬號密碼。這個(gè)持續(xù)集成服務(wù)器采用Jenkins搭建,并且可以用來部署測試環(huán)境和生產(chǎn)環(huán)境的應(yīng)用。

[[198613]]

不久,接到了客戶的一個(gè)維護(hù)請求:把最新的生產(chǎn)環(huán)境數(shù)據(jù)同步到測試環(huán)境里。

這個(gè)維護(hù)任務(wù)需要通過SSH登錄到測試環(huán)境主機(jī)上進(jìn)行操作。測試主機(jī)是通過authorized_keys進(jìn)行SSH認(rèn)證的,只要你自己的ssh-key被添加到了主機(jī)上,就可以實(shí)現(xiàn)無密碼登錄。

這樣有兩個(gè)好處:一方面維護(hù)人員無需使用密碼,避免了生產(chǎn)環(huán)境密碼的泄露。另一方面可以按需吊銷不再使用的客戶端,及時(shí)回收權(quán)限。所以我需要把自己的sshpublickey交給管理員,讓他把我的key加到可訪問列表里。

悲劇的是,前管理員告訴我,他的key因?yàn)楦鼡Q電腦的關(guān)系沒有及時(shí)更新。所以,他也無法登錄主機(jī)。而且之前參與維護(hù)的其它管理員的key也都失效了,這意味著我們失去了對主機(jī)的控制。此時(shí),我手上只有登錄Jenkins的的用戶名和密碼,于是一個(gè)邪惡的想法就誕生了:

既然Jenkins可以執(zhí)行腳本,那么我是否可以通過Jenkins把我的key注入進(jìn)去?

[[198614]]

于是我把ExecuteShell的Job變成了我的命令行,通過運(yùn)行日志得知了宿主用戶的文件目錄信息。然后把自己的sshpublickey加到了登錄列表里(此處省略敏感信息):

  1. sudo sh -c“cp~/.ssh/authorized_keys~/.ssh/authorized_keys.bak” 
  2.  
  3. sudo sh -c"echo‘{我的sshpublickey}’>>~/.ssh/authorized_keys" 

It works !

我成功的登錄了機(jī)器,但這卻暴露了一個(gè)問題:持續(xù)集成服務(wù)器成為了一個(gè)安全隱患。

首先,持續(xù)集成服務(wù)器可以執(zhí)行代碼。這就意味著它有可能執(zhí)行有害代碼。

其次,持續(xù)集成服務(wù)器缺乏足夠的用戶鑒權(quán),這很有可能導(dǎo)致未授權(quán)用戶訪問。

無權(quán)限控制的服務(wù)器+可以執(zhí)行代碼=裸奔的肉雞

那么,如何構(gòu)建一個(gè)更安全的持續(xù)集成服務(wù)器?

rootless原則

“神操縱著萬物,你感覺得到他,但永遠(yuǎn)看不見他。”

——《圣經(jīng)·希伯來書11:27》

在服務(wù)器的世界里,root用戶就是神,擁有至高的權(quán)力和力量。如果有人獲得了“神之力”,后果可能不堪設(shè)想。

[[198615]]

無論是Web服務(wù)器、數(shù)據(jù)庫服務(wù)器還是持續(xù)集成服務(wù)器。都是這個(gè)世界里的二等公民,權(quán)限和力量都應(yīng)該受到約束。執(zhí)行的時(shí)候應(yīng)該受到控制。

此外,應(yīng)該極力避免sudo的濫用,尤其是對那些從外部訪問的用戶。很多情況下,為了操作方便,很多用戶都有sudo的權(quán)限。但這恰恰造成了低權(quán)限用戶通過提升自己的訪問權(quán)限進(jìn)行有害操作。

在上述的故事里,因?yàn)闆]有對Jenkins的主機(jī)用戶做有效隔離,導(dǎo)致了我可以用sudo注入自己的key獲得機(jī)器的訪問權(quán)限。

沙盒隔離原則

因?yàn)槌掷m(xù)集成服務(wù)器會執(zhí)行腳本或運(yùn)行程序,而這些程序和腳本有可能是存在惡意代碼的。所以,對應(yīng)的任務(wù)應(yīng)該在隔離的安全沙盒中執(zhí)行,例如:受限的用戶,受限的權(quán)限,受限的空間。

在上述的故事里,我就通過CI執(zhí)行了一段不安全的腳本成功獲得了登錄主機(jī)的權(quán)限。

如果這些任務(wù)在隔離并受控的Docker容器里執(zhí)行,那么會安全得多。

當(dāng)然,也可以考慮采用TravisCI這樣的第三方持續(xù)集成服務(wù)來保證安全性。

備份和備份核查原則

在上述故事里,因?yàn)槿狈τ行У膫浞輽C(jī)制,導(dǎo)致了所有人都無法訪問主機(jī)。此外,我在修改authorized_keys的時(shí)候先進(jìn)行了備份。這樣,如果我注入失敗,還可以還原。

[[198616]]

這里的備份,不光是對配置、數(shù)據(jù)的備份,還有崗位的備份。

如果管理員有備份,完全不會出現(xiàn)無法登陸的事情。

如果有備份QA服務(wù)器,完全可以不需要當(dāng)前的QA服務(wù)器。

在做任何變更前,都應(yīng)該做好備份以及還原的準(zhǔn)備。因?yàn)槿魏巫兏紩?ldquo;蝴蝶效應(yīng)”。

但是,光備份是不夠的。如果備份不能有效還原,那和沒有備份沒有什么區(qū)別。所以,要定時(shí)的進(jìn)行備份恢復(fù)測試。確保備份在各種情況下可用。

多重要素身份驗(yàn)證原則

上述的持續(xù)集成服務(wù)器是暴露在互聯(lián)網(wǎng)中的,任何一個(gè)人訪問到這個(gè)站點(diǎn),通過一定程度的密碼破解,就可以獲得這個(gè)持續(xù)集成服務(wù)器的訪問控制權(quán)限。從而可以做出上述的操作。

所以,有了用戶名和密碼,并不一定是可信用戶。還需要通過更多的手段,諸如手機(jī)短信驗(yàn)證碼或者第三方認(rèn)證集成來驗(yàn)證用戶的身份。

關(guān)鍵操作手動驗(yàn)證原則

試想一下,如果在上述的例子中我并沒有服務(wù)器的訪問權(quán)限。而是通過提交未經(jīng)審查的代碼自動運(yùn)行測試腳本。實(shí)際上也會造成同樣的效果。

有時(shí)候我們會為了方便,讓持續(xù)集成服務(wù)器自動觸發(fā)測試。但是,恰恰是這種“方便”帶來了額外的安全隱患。而這樣的方便,不光方便了自己,也方便了惡意入侵者。

所以,不能為了方便而留下安全隱患。在關(guān)鍵操作上設(shè)置為手動操作,并通過一定機(jī)制保證關(guān)鍵操作的可靠性才是最佳實(shí)踐。

[[198617]]

構(gòu)建安全CI的幾個(gè)實(shí)踐:

采用Sibling的方式在Docker里運(yùn)行任務(wù)。

賬戶密碼管理統(tǒng)一采用LDAP認(rèn)證,如果過期則從外部修改。

CI的登錄權(quán)限和其它的認(rèn)證方式(比如GitHub、Okta等)集成起來。并用組限制登錄。

對于生產(chǎn)環(huán)境的CI,通過更加細(xì)粒度的權(quán)限限制來隔離一些危險(xiǎn)操作。

官方的安全指南

不少持續(xù)集成工具的官方都提供了最佳實(shí)踐以及安全指南幫助我們構(gòu)建持續(xù)集成服務(wù)器。請務(wù)必在構(gòu)建持續(xù)集成服務(wù)器前閱讀并理解這些安全實(shí)踐和措施,并遵照安全最佳實(shí)踐構(gòu)建持續(xù)集成服務(wù)器:

  • Jenkins最佳實(shí)踐
  • Jenkins官方安全指南

如果沒有這些如果

上面提到了太多的如果。如果這些“如果”能發(fā)生在事前,這些問題就不會產(chǎn)生。持續(xù)集成本身是開發(fā)的最佳實(shí)踐,但如果缺乏安全的意識,一味的追求方便和高效,則會帶來很大的安全隱患。通過一些簡單而基礎(chǔ)的措施和手段,我們就能大大的降低風(fēng)險(xiǎn)。

【本文是51CTO專欄作者“ThoughtWorks”的原創(chuàng)稿件,微信公眾號:思特沃克,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文

責(zé)任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2017-07-07 08:58:21

2011-08-16 13:48:26

2010-09-17 14:29:23

2014-04-18 16:26:19

2017-02-24 08:11:09

Docker數(shù)據(jù)安全容器

2009-07-06 13:38:02

2012-06-25 09:18:36

2009-09-07 16:56:02

2019-07-23 08:56:46

IoT物聯(lián)網(wǎng)安全

2014-07-03 11:01:13

mongoDB安全隱患

2016-09-29 22:09:26

2014-06-26 13:38:19

2012-06-26 09:35:03

Firefox瀏覽器

2014-04-14 13:19:41

初志科技電子文檔

2022-01-20 10:54:23

移動手機(jī)短信驗(yàn)證碼隱患

2011-06-17 13:20:02

2013-07-31 09:29:12

NASA云安全云托管服務(wù)器

2013-02-21 10:11:58

2009-03-17 09:48:00

2011-05-05 18:28:18

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號