概念:
? ? 本身Shift Left這個(gè)單詞的在測(cè)試行業(yè)的意思就是將軟件測(cè)試階段盡量前置铅辞,測(cè)試、開發(fā)人員使用項(xiàng)目管理、自動(dòng)化測(cè)試工具全量參與到軟件開發(fā)活動(dòng)中粗梭。ShiftLeft這家公司于17年創(chuàng)建,19年2月份獲得B輪2000萬美元融資级零,自稱是應(yīng)用云安全領(lǐng)域的創(chuàng)新者断医,提出了全自動(dòng)的安全即服務(wù)(SECaas)的解決方案。聯(lián)合創(chuàng)始人是FireEye的首席產(chǎn)品和戰(zhàn)略官。
安全DNA
????是指對(duì)每個(gè)應(yīng)用程序每個(gè)版本的源代碼進(jìn)行分析并提取安全相關(guān)的詳細(xì)信息鉴嗤,包括漏洞斩启,敏感數(shù)據(jù),策略信息和編碼錯(cuò)誤醉锅。采集安全dna的目的是兼顧迭代階段兔簇,方便為agent創(chuàng)建策略,解決通用方案的不足硬耍。
產(chǎn)品
針對(duì)代碼審計(jì)和漏洞研究安全人員的Ocular產(chǎn)品:
????該產(chǎn)品的前身是c++類的https://github.com/octopus-platform/joern垄琐,一改以往搜索漏洞需要手工查找的局面,創(chuàng)新針對(duì)代碼屬性視圖Code Property Graph (CPG)的設(shè)計(jì)查詢語言(Read-Eval-Print-Loop(REPL)经柴,支持控制流分析此虑、語法樹、調(diào)用關(guān)系口锭、依賴朦前,目錄接口、框架類(內(nèi)置了自動(dòng)標(biāo)記框架的策略)的分析鹃操,支持自定義查詢語句和集成到CI韭寸,輸出支持各種報(bào)文的結(jié)果,支持語言有java荆隘、c#和c恩伺、c++。曾經(jīng)發(fā)現(xiàn)時(shí)linux內(nèi)核的oday和jackson-databind反序列化漏洞(CVE-2017–7525)椰拒。整體類似semmle公司的ql技術(shù)晶渠。
使用:
筆者準(zhǔn)備了一項(xiàng)spring框架編寫的漏洞測(cè)試用例,controller分別存在不同的漏洞用來檢測(cè)誤報(bào)燃观、漏報(bào)褒脯。安裝后啟動(dòng)分析,將目標(biāo)代碼提取生成CPG信息缆毁》ǎ可以配置過濾掉公共和開源組件代碼。
-
進(jìn)入到主界面脊框,準(zhǔn)備執(zhí)行查詢語言:
-
load剛才生成的cpg文件颁督。
使用cpg.dependency.name.l命令查看依賴關(guān)系,不同于直接解析pom.xml文件浇雹,基于實(shí)際代碼關(guān)系的分析可以發(fā)現(xiàn)項(xiàng)目依賴的深層次關(guān)系沉御。
支持通過./cpg2sp.sh --cpg vlu.bin.zip? -o javavulnerablelab.sp命令通過自建的策略自動(dòng)查找發(fā)現(xiàn)漏洞。
-
查詢代碼里的入?yún)ⅰ?/p>
-
測(cè)試下污點(diǎn)分析技術(shù)昭灵。定義污染源為全部的入?yún)⒎婉伞6x污點(diǎn)為調(diào)用url的方法聂儒。查看是否可達(dá)。
也可以使用如下命令審計(jì)反序列化漏洞硫痰。
val sinkMethods = cpg.method.or(
? ? ?_.fullName(".*(XMLdecoder|ObjectInputStream).*readObject.*"),
? ? ?_.fullName(".*XStream.*fromXML.*"),
? ? ?_.fullName(".*readObjectNodData|readResolve|readExternal.*"),
? ? ?_.fullName(".*ObjectInputStream.*readUnshared.*"))
sinkMethods.calledBy(cpg.method).newCallChain.p
其他的利用請(qǐng)參考https://docs.shiftleft.io/ocular/tutorials/cve-2018-19859
適用于應(yīng)用分析和運(yùn)行階段的ShiftLeft Inspect and Protect產(chǎn)品:
????該產(chǎn)品可以理解為支持Java和C#的弱白盒+強(qiáng)云端Rasp。優(yōu)點(diǎn)為充分利用了持續(xù)集成的能力窜护。??
??可以看到漏洞信息可以在兩個(gè)時(shí)間產(chǎn)出:第一階段在分析時(shí)效斑,上傳編譯好的代碼在云端,分析源代碼或者字節(jié)碼得到CPG柱徙,獲取初步白盒審計(jì)結(jié)果缓屠、頁面路由、代碼內(nèi)敏感信息护侮;第二階段是通過javaagent的方式啟動(dòng)java應(yīng)用程序敌完,通過支持原生、微服務(wù)羊初、云環(huán)境滨溉、容器、虛擬機(jī)的微代理獲取運(yùn)行時(shí)數(shù)據(jù)和指標(biāo)推送到代理服務(wù)器长赞。通過dashboard進(jìn)行結(jié)果展示晦攒、流程閉環(huán)。
使用
如上圖所示安裝好后配置環(huán)境變量得哆,使用sl run建立名為HelloShiftLeft的app脯颜。工具首次運(yùn)行下載?ShiftLeft JVM Analyzer Plugin。
-
第一階段為分析編譯好的war包贩据。
通過go程序上傳war包栋操。產(chǎn)生中間文件上傳、診斷饱亮。
-
下一步是獲取云端代碼分析得出的結(jié)果矾芙,創(chuàng)建了一個(gè)名為Run Profile for Runtime(SPR)的自定義工具,并將其加載到與應(yīng)用程序一起運(yùn)行的微代理上近上,以微代理的方式啟動(dòng)蠕啄。
-
看下源代碼的啟動(dòng)方式,一目了然的rasp戈锻。
-
可惜這種方式會(huì)對(duì)系統(tǒng)性能和兼容性有影響歼跟。jenkins掛了(是jdk的原因嗎?不過不影響程序獲取源碼分析格遭、啟動(dòng)階段的漏洞信息)哈街。
更換一個(gè)較為簡(jiǎn)單的web程序順利啟動(dòng)。
-
分析完后dashboard可以看到結(jié)果信息拒迅。簡(jiǎn)介頁面包括提取的應(yīng)用內(nèi)部的url包括filter接口的實(shí)現(xiàn)類骚秦、servlet和RequestMapping她倘。可以看到源代碼掃描審計(jì)的結(jié)果標(biāo)記區(qū)分了code和runtime階段所發(fā)現(xiàn)的作箍。(筆者使用的是最新版的jenkins編譯硬梁,看到的結(jié)果可能都是誤報(bào)...)。此外還有各種數(shù)據(jù)方面的認(rèn)證信息胞得、PII數(shù)據(jù)荧止、反序列化數(shù)據(jù)、環(huán)境信息阶剑、文件讀寫類跃巡、http信息、輸入牧愁、日志素邪、輸出、重定向猪半、session兔朦、緩存。
漏洞簡(jiǎn)述頁包括級(jí)別磨确、類型烘绽、調(diào)用次數(shù)、狀態(tài)俐填。
-
詳情頁顯示漏洞描述安接、代碼所在行數(shù)、輸入數(shù)據(jù)英融、運(yùn)行時(shí)調(diào)用次數(shù)盏檐、數(shù)據(jù)流向調(diào)用關(guān)系(這里用DOT和graphviz表示更好些)。
?綜述
????這套產(chǎn)品適用于CI / CD流程并經(jīng)常發(fā)布的創(chuàng)新公司驶悟。該產(chǎn)品的目標(biāo)市場(chǎng)包括技術(shù)胡野,銀行和醫(yī)療保健。也適用于將工作上云的傳統(tǒng)企業(yè)痕鳍。真正將源代碼分析結(jié)果和RASP結(jié)合起來效果還是不錯(cuò)的,在持續(xù)集成階段就可以發(fā)現(xiàn)安全風(fēng)險(xiǎn)硫豆。另外在越權(quán)類漏洞的檢測(cè)上其實(shí)也是大有用武之地的。