如何使用FindBugs進(jìn)行安全掃描

前言

隨著移動(dòng)互聯(lián)網(wǎng)的飛速發(fā)展车遂,移動(dòng)端產(chǎn)品滿(mǎn)天飛盾剩,深入各行各業(yè),移動(dòng)端安全已經(jīng)變得跟PC端安全同等重要地位璧疗。但由于移動(dòng)端自身特性姨裸,移動(dòng)端操作系統(tǒng)以及應(yīng)用程序的安全性做的還不是很成熟秧倾。因此,我們?cè)陂_(kāi)發(fā)移動(dòng)端App的時(shí)候傀缩,要盡量多地避免安全漏洞問(wèn)題那先。本文主要是從預(yù)防的角度出發(fā),介紹一個(gè)靜態(tài)代碼掃描工具赡艰,在編譯階段來(lái)提前發(fā)現(xiàn)代碼的安全漏洞售淡。

FindSecurityBugs簡(jiǎn)介

FindSecurityBugs是Java靜態(tài)分析工具FindBugs的插件,通過(guò)一系列的規(guī)則發(fā)現(xiàn)代碼中的Java安全漏洞瞄摊。這個(gè)工具可以集成在很多IDE中勋又,包括Eclipse或IntelliJ。目前這個(gè)項(xiàng)目已經(jīng)在安全社區(qū)中獲得了不少關(guān)注度换帜。該工具的最新版本還增加了專(zhuān)門(mén)針對(duì)Android端產(chǎn)品的漏洞類(lèi)型楔壤。因此,它也是一個(gè)不錯(cuò)的移動(dòng)端安全掃描工具惯驼。如果你想更詳細(xì)的了解它蹲嚣,可以去訪(fǎng)問(wèn)FindeSecurityBugs的Github社區(qū)

FindSecurityBugs用法

由于FindSecurityBugs是FindBugs的一個(gè)插件祟牲,因此我們使用它的時(shí)候先要下載FindBugs工具隙畜。你可以去FindBugs的官方網(wǎng)站獲取最新的安裝包,這里就不介紹安裝過(guò)程了说贝。

一议惰、命令行方式

示例:

./findbugs -textui -low -html -output myreport.html  /Users/darylzhang/Downloads/findbugs-3.0.1/test/

下面是常見(jiàn)參數(shù)說(shuō)明
-home 定義findbugs2軟件存放位置
-low 提交警告及任何級(jí)別以上報(bào)告
-medium 提交中,高級(jí)報(bào)告(默認(rèn))
-high 只提交高級(jí)警告
-xml 警告以 xml輸出
-html 警告以 html輸出
-output 定義輸出的文件名
-onlyAnalyze 只分析指定的 class/package
-exclude 忽略指定的 class/package (必修以 xml定義過(guò)濾的命名)
-include 只輸出指定的 class/package (必修以xml定義過(guò)濾的命名)

二乡恕、集成到Eclipse插件

1. 系統(tǒng)要求

首先要在電腦上安裝Eclipse 3.3以上的版本言询,且安裝JRE/JDK 1.5以上版本俯萎。

2. 安裝FindBugs插件

1)通過(guò)Eclipse的站點(diǎn)更新功能可以將FindBugs自動(dòng)下載并安裝到Eclipse插件。


圖1

2)目前提供三個(gè)FindBugs的下載地址:

3)你也可以直接通過(guò)以下地址下載:http://prdownloads.sourceforge.net/findbugs/edu.umd.cs.findbugs.plugin.eclipse_3.0.1.20150306.zip?download 运杭,然后解壓到Eclipse的插件目錄
4)下載FindSecurityBugs擴(kuò)展包
下載地址:http://h3xstream.github.io/find-sec-bugs/download.htm
5)安裝FindSecurityBugs擴(kuò)展包

  • 打開(kāi)Eclipse偏好設(shè)置
  • 進(jìn)入Java->FindBugs選項(xiàng)
  • 找到插件選項(xiàng)卡夫啊,導(dǎo)入擴(kuò)展包
圖2

3. 報(bào)告配置

進(jìn)入報(bào)告配置頁(yè)面設(shè)置要掃描的Bug級(jí)別,比如我們這里只關(guān)注安全類(lèi)型的bug的話(huà)辆憔,就只勾選Security選項(xiàng)撇眯。并設(shè)置報(bào)告級(jí)別為low,這樣就可以盡可能多的報(bào)告所有問(wèn)題虱咧。


圖3

4. 開(kāi)始掃描

右鍵點(diǎn)擊要掃描的工程熊榛,找到Finde Bugs菜單項(xiàng),選擇Find Bugs開(kāi)始掃描彤钟。如下圖所示来候。


圖4
  1. 查看報(bào)告
    掃描完成后,我們可以進(jìn)入Bug Explorer查看結(jié)果報(bào)告逸雹,當(dāng)然如果沒(méi)看到這個(gè)窗口,我們可以在Window—>Show view—>others里面調(diào)出來(lái)云挟。
圖5

FindSecurityBugs能掃描的問(wèn)題

這里簡(jiǎn)單介紹幾種FindSecurityBugs能掃描出來(lái)的Android漏洞類(lèi)型梆砸。

1. 外部文件讀寫(xiě)權(quán)限漏洞

應(yīng)用程序具有寫(xiě)入外部存儲(chǔ)(一般是SD卡)的權(quán)限。開(kāi)通了這個(gè)權(quán)限會(huì)導(dǎo)致多個(gè)安全隱患园欣。比如帖世,應(yīng)用程序可以通過(guò)READ_EXTERNAL_STORAGE權(quán)限來(lái)獲取存儲(chǔ)在本地SD卡的文件,如果這些數(shù)據(jù)包含用戶(hù)敏感信息沸枯,而且沒(méi)有加密的話(huà)日矫,那將會(huì)造成用戶(hù)隱私的泄密。
存在風(fēng)險(xiǎn)的代碼片段:

file file = new File(getExternalFilesDir(TARGET_TYPE), filename);
fos = new FileOutputStream(file);
fos.write(confidentialData.getBytes());
fos.flush();

修復(fù)建議:

fos = openFileOutput(filename, Context.MODE_PRIVATE);
fos.write(string.getBytes());

2. 廣播

Broadcast intents可以被任何擁有相關(guān)權(quán)限的應(yīng)用程序截獲绑榴,從而獲得敏感信息哪轿。
存在風(fēng)險(xiǎn)的代碼片段:

Intent i = new Intent();
i.setAction("com.insecure.action.UserConnected");
i.putExtra("username", user);
i.putExtra("email", email);
i.putExtra("session", newSessionId);

this.sendBroadcast(v1);

修復(fù)建議:

Intent i = new Intent();
i.setAction("com.secure.action.UserConnected");

sendBroadcast(v1);

3. 寫(xiě)文件權(quán)限

我們通過(guò)寫(xiě)權(quán)限MODE_WORLD_READABLE來(lái)寫(xiě)文件的時(shí)候,有可能會(huì)把文件的內(nèi)容暴露出來(lái)翔怎,如下代碼片段:

fos = openFileOutput(filename, MODE_WORLD_READABLE);
fos.write(userInfo.getBytes());

解決方案:

fos = openFileOutput(filename, MODE_PRIVATE);

4. Webview的Javascript執(zhí)行權(quán)限

開(kāi)通Webview的Javascript執(zhí)行權(quán)限意味著為XSS開(kāi)通了后門(mén)窃诉,頁(yè)面的渲染有可能會(huì)被反射XSS,存儲(chǔ)XSS和DOM XSS所劫持赤套。如下代碼片段開(kāi)通了Javascript權(quán)限:

WebView myWebView = (WebView) findViewById(R.id.webView);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

這樣飘痛,惡意代碼可以通過(guò)如下的方式攻擊你:

function updateDescription(newDescription) {
    $("#userDescription").html("<p>"+newDescription+"</p>");
}

5. Webview暴露Javascript接口

在Android代碼中使用JavaScript接口,將會(huì)暴露本地的API容握。只要加一個(gè)XSS觸發(fā)器宣脉,JavaScript代碼就可以調(diào)用你的Java類(lèi)。如下代碼片段:

WebView myWebView = (WebView) findViewById(R.id.webView);

myWebView.addJavascriptInterface(new FileWriteUtil(this), "fileWriteUtil");

WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);

[...]
class FileWriteUtil {
    Context mContext;

    FileOpenUtil(Context c) {
        mContext = c;
    }

    public void writeToFile(String data, String filename, String tag) {
        [...]
    }
}

總結(jié)

代碼掃描只是一種手段剔氏,畢竟規(guī)則有限塑猖,我們不能過(guò)分依賴(lài)堪遂。正在的移動(dòng)安全還是需要我們的移動(dòng)開(kāi)發(fā)者增強(qiáng)安全意識(shí),提高自己的代碼防范能力萌庆,從而從代碼源頭避免安全漏洞溶褪。作為測(cè)試人員,也應(yīng)該積極了解移動(dòng)安全的常見(jiàn)漏洞践险,這樣可以及早發(fā)現(xiàn)App的安全風(fēng)險(xiǎn)猿妈,保證產(chǎn)品的安全。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末巍虫,一起剝皮案震驚了整個(gè)濱河市彭则,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌占遥,老刑警劉巖俯抖,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異瓦胎,居然都是意外死亡芬萍,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)搔啊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)柬祠,“玉大人,你說(shuō)我怎么就攤上這事负芋÷祝” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵旧蛾,是天一觀(guān)的道長(zhǎng)莽龟。 經(jīng)常有香客問(wèn)我,道長(zhǎng)锨天,這世上最難降的妖魔是什么毯盈? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮绍绘,結(jié)果婚禮上奶镶,老公的妹妹穿的比我還像新娘。我一直安慰自己陪拘,他們只是感情好厂镇,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著左刽,像睡著了一般捺信。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天迄靠,我揣著相機(jī)與錄音秒咨,去河邊找鬼。 笑死掌挚,一個(gè)胖子當(dāng)著我的面吹牛雨席,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吠式,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼陡厘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了特占?” 一聲冷哼從身側(cè)響起糙置,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎是目,沒(méi)想到半個(gè)月后谤饭,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡懊纳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年揉抵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片长踊。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡功舀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出身弊,到底是詐尸還是另有隱情,我是刑警寧澤列敲,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布阱佛,位于F島的核電站,受9級(jí)特大地震影響戴而,放射性物質(zhì)發(fā)生泄漏凑术。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一所意、第九天 我趴在偏房一處隱蔽的房頂上張望淮逊。 院中可真熱鬧,春花似錦扶踊、人聲如沸泄鹏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)备籽。三九已至,卻和暖如春分井,著一層夾襖步出監(jiān)牢的瞬間车猬,已是汗流浹背霉猛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留珠闰,地道東北人惜浅。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像伏嗜,于是被迫代替她去往敵國(guó)和親坛悉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • FindBugs簡(jiǎn)介 為什么使用靜態(tài)分析工具 FindBugs的使用 FindBugs常見(jiàn)的兩種使用時(shí)機(jī)(1)開(kāi)發(fā)...
    greensure閱讀 542評(píng)論 0 1
  • 靜態(tài)掃描操作手冊(cè) 前言 靜態(tài)源代碼掃描是近年被人提及較多的軟件應(yīng)用安全解決方案之一。它是指在軟件工程中八酒,程序員在寫(xiě)...
    MrGago閱讀 601評(píng)論 0 0
  • 源代碼是構(gòu)成信息系統(tǒng)的基石空民。對(duì)源代碼進(jìn)行安全審計(jì),可以在系統(tǒng)實(shí)現(xiàn)階段就發(fā)現(xiàn)大量的安全漏洞和潛在威脅隱患羞迷,可節(jié)省5%...
    得奕閱讀 545評(píng)論 0 0
  • 等母親回家 文:我是素顏 我家門(mén)口有一棵棗樹(shù)界轩,一個(gè)人張開(kāi)胳膊是抱不過(guò)來(lái)的,它的年齡比兩個(gè)爺爺加起來(lái)的年齡都老衔瓮。 夢(mèng)...
    我是素顏閱讀 228評(píng)論 0 0
  • 似水流年浊猾,沖淡了許多記憶和往事,帶走了許多歡笑和淚水热鞍,惟有真情和摯愛(ài)永駐葫慎,歷久彌新。 昨晚到超市備足做葉貼材料薇宠。 ...
    月色黃昏閱讀 626評(píng)論 8 10