APP手勢密碼繞過
之前寫的文章收到了很多的好評,主要就是幫助到了大家學習到了新的思路。自從發布了第一篇文章,我就開始籌備第二篇文章了,最終打算在07v8首發,這篇文章我可以保障大家能夠學習到很多思路。之前想準備例子視頻,請求了很多家廠商進行授權,但是涉及漏洞信息方面的,廠商都是很嚴謹的,所以,整個過程沒有相關的實際例子,但是我盡可能的用詳細的描述讓大家能夠看得懂。大家不要睡著呦~
說到APP手勢密碼繞過的問題,大家可能有些從來沒接觸過,或者接觸過,但是思路也就停留在那幾個點上,這裏我總結了我這1年來白帽子生涯當中所挖掘的關於這方面的思路,有些是網上已經有的,有些是我自己不斷摸索所發現的。
這裏說下APP手勢密碼繞過的危害,手勢密碼一般應用在支付類,金融類,安全類等相關的APP,比如XX金融,XX支付,XX錢包,XX安全中心等APP,這些基本都會有手勢密碼,手勢密碼是一個用戶的第一把APP鎖,如果這個鎖攻破了,那麽後面也就容易對用戶造成威脅,雖然這個問題利用起來是需要物理操作,但是本質上我們不看如何的利用起來如何如何的難,我們就看它的安全漏洞問題。本次文章裏所有說到的思路包含四種環境:需要ROOT權限,不需要ROOT環境,需要越獄環境,不需要越獄環境。
無需ROOT&越獄環境手勢密碼繞過的思路
0x01 利用APP廣告繞過
本來打算想到網上找例子,但是沒有找到。一般APP都會在啟動頁面時加載廣告,此時,如果驗證不當,當你點擊廣告後直接返回一下,就可以繞過手勢密碼。
0x02 利用多重啟動繞過
這個多重啟動也是我之前很早發現的思路,之前發現以為必須要ROOT環境,後來發現完全不需要,直接打開APP,停留在APP手勢密碼輸入頁面,此時我們按home鍵返回到桌面,隨便打開個應用市場,再搜索這個APP,此時由於你已經下載了這個APP,那麽它顯示的就是打開,這時你點擊打開,它會又重新啟動一次APP,如果驗證不當,可導致直接繞過手勢密碼,進入到APP。
0x03 利用退出繞過&爆破
這個問題也是我在很久之前測試中發現的,當然,現在這種問題很多APP還是存在的,希望盡快修復這方面的問題。一般手勢密碼允許輸入的錯誤次數為5次,當錯誤次數達到了5次了,就會需要重新登錄,而這時這個超過次數的信息可能會彈出框來提醒,或者直接顯示在TextView,也就是直接顯示在手勢密碼界面上,這都不是問題,不要點擊任何解密,比如它彈出了手勢密碼次數超過限制框框,信息框下方會有個確認的按鈕,不要點擊,我們直接返回到桌面,然後清理掉後臺的APP,有時候會清理不幹凈,導致還是在後臺允許著,這可能會導致失敗,所以,為了成功起見,到設置裏的找到相關的應用,然後選擇強制停止,然後再次打開APP,這時如果驗證沒做好,就會直接進到主頁面,或請輸入新的手勢密碼頁面,或者會再次跳出手勢密碼驗證界面,這時跳出的手勢密碼驗證頁面就存在爆破的問題,因為現在你又有5次機會輸入手勢密碼,以此思路循壞,可造成對手勢密碼的暴力拆解。
這個問題我找到了相關的例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2015-0127528.html
0x04 利用清理不當繞過
一些APP會這樣儲存手勢密碼,把手勢密碼儲存在本地文本信息裏,把賬戶的登錄狀態信息儲存在本地數據庫裏,當清理掉這個本地數據後,實際上它並沒有清理掉登錄信息也就是並沒有清理掉本地數據庫信息,而是清理掉了本地文本信息,這就導致了清理掉了手勢密碼,而登錄狀態還是保持的,就導致了繞過問題。另一個思路比如你直接卸載再安裝同樣是這個原理。
這裏我找到了2個例子,第一個例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2013-036972.html
第二個例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2013-040714.html
0x05 利用顯示不當繞過
一些APP當你啟動APP的時候,它會在短時間內進入到或者說可以點擊到APP內的某些功能,此時你只要一直點擊這個頁面,只要夠快,就可以繞過手勢密碼,達到這個功能界面。
關於這個問題,我找到了例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2014-057885.html
0x06 利用APP自帶提示繞過
一些APP會自帶提示,比如在狀態欄內是不是推送一些信息,如果驗證不當,就可以直接繞過手勢密碼,直接進入到主頁面。
0x07 利用快捷發送繞過
這個我從來就沒遇到過,APP手勢密碼驗證界面會出現設置按鈕,直接設置沒有加以驗證從而繞過。
這類問題我找到了例子:
http://wooyun.jozxing.cc/static/bugs/wooyun-2012-014456.html
0x09 利用清理缺陷繞過
跟剛剛那個說的很像,也是手勢密碼跟賬戶信息儲存在不同處,而追後只清理掉手勢密碼沒清理掉登錄信息的問題,在需要手勢密碼驗證的界面點擊忘記手勢密碼,此時會跳轉到登錄界面,直接返回到桌面,清理掉後臺運行的APP,再次打開就直接進入到主界面,並且是登錄狀態。
0x10 利用界面設計缺陷繞過
以前看到過相關問題,問題是出現在IOS下的,所以我就列出來了,當進入到手勢密碼界面,可以左右滑動,從而滑動到主頁面,繞過手勢密碼,這個問題可能已經很少軟件存在了。
總結:
以上思路有些是我自己測試過程中所發現的,有些是網上的,以上思路都是在無需ROOT環境下或越獄下實現的,但是IOS下的軟件這裏面的思路基本很少可以實現,因為這些思路主要是android 下的APP問題。現在很多大型APP有一半都存在這個問題,希望各大廠商下的SRC盡快去修復或者白帽子發現了盡快提交,避免對用戶以及自身產品造成影響。
以上是無需各種環境的,下面這些是需要高權限的環境下的繞過思路。
ROOT權限&越權權限下繞過手勢密碼的思路
(修改時所需要的軟件RE管理器、Sqlite編輯器)
0x01 利用拒絕服務繞過
通過分析APP,找到跟手勢密碼相關的組件,利用拒絕服務攻擊可直接繞過手勢密碼到達主頁面,因為都是不同的Activity,當這個Activity停止後,就會跳轉到下個Activity,而下個Activity就是主頁面,從而繞過了手勢密碼。
這個問題我沒有在測試過程中應用過,我找到了相關的例子可提供詳細的參考:
http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0177256.html
0x02 修改shared_prefs目錄下的文件從而繞過的思路總結
我為了省略一些不必要的分類,就把所有關於這個目錄下的繞過方式歸類到這第二種思路內,方法大家閱讀吸收。在我挖掘這方面問題的這麽多時間來,我把容易出現點盡可能詳細的描述出來。在這個文件夾內我們只看XML,有些備份的文件就沒必要看了,在這麽眾多的文件內怎麽找到關於這個手勢密碼相關的文件內, 這裏我就給大家說下我的技巧吧,我的技巧其實很簡單,比如你修改手勢密碼時過好1分鐘再修改,因為你進入APP時會加載信息,此時文件時間會同步變動,等在設置手勢密碼那裏我們停住,等過1分鐘再修改,這時,就可以篩選出相對來說比較精確的文件了,這時再一一查看,全都是加密的值就沒必要去看,參數相對來說很少且基本都是time值,也沒必要去看,後面可以通過相同的方法再來一次篩選。
經過如上你找到了儲存手勢密碼的文件後,就可以開始修改了,這裏我說下相關的思路。
第一種思路:修改文件權限
你可以把它的讀權限去掉,只留下寫入權限,如果APP驗證不當,當你啟動APP後它便會調用設置手勢密碼的界面,因為你沒有讀權限,那麽只有寫,誤以為你需要設置手勢密碼,所以繞過了手勢密碼驗證。當然也可以把所有權限全部去掉,不讓它加載手勢密碼,那麽直接啟動就行。
第二種思路:修改文件內容
當修改權限這種思路無用時,就得需要修改內容了。在文件內找到手勢密碼,看手勢密碼是否加密,如果加密看能否得知加密方式以及明文信息,比如是base64或MD5等一些常見加密,那就去解密,便可得帶密碼,直接輸入密碼就行。如何加密方式無從得知,可以測試當關閉手勢密碼後手勢密碼的值,如果這時這個參數內的值被清空或者這個參數被刪除了,就可以利用這種方式清空這個參數或參數值,如果當手勢密碼關閉時這時還是存在值,可以復制這個關閉時產生的值用在另一個賬戶當中,看能夠強制關閉,如果沒有做校驗那麽就可以直接強制關閉手勢密碼,達到繞過目的。這裏我說下我的一個小技巧,可能這個問題會困擾到很多挖掘這方面問題的白帽子,在你修改這個文件時,你可能你發現你修改了,但是APP任何變化,比如你都禁用了任何權限了但是卻還是沒有任何變化,此時問題不是APP做了什麽驗證和限制,而且你沒有徹底的清理掉後臺運行的APP進場,當你修改時,其實它一直在運行著,運行著是不能修改文件內容的,就好你你卸載正在運行的軟件一樣,只不過在手機上你修改文件時看不到任何關於APP正在運行無法修改文件的提示,而電腦上就會提醒,所以你應該到設置內或快捷方式找到對應APP,選擇強制退出,然後再修改文件,再打開,就可以了。網上我實在是找不到這相關的例子,找到了一個但是也只是很簡單簡單的明文顯示問題,這讓我很無奈。
這是一個手勢密碼明文顯示問題:
http://wooyun.jozxing.cc/static/bugs/wooyun-2016-0190545.html
第三種思路:修改目錄權限
當你發現修改對應的文件沒有作用的時候,可能是你找錯了或者修改有問題,這時你可以嘗試修改這個shared_prefs目錄權限,把讀寫權限全部去掉再運行APP,這時就可以繞過手勢密碼。
0x03 修改databases目錄下的文件從而達到繞過
同樣是利用上面的方法找到相關手勢密碼所存放的數據庫文件。當你找到了儲存手勢密碼的相關文件,我這裏就說下相關思路。
提前說下,如果你打開數據庫文件出現這個錯誤提示
其實有很多思路,你可以修改權限,具體是修改哪裏的權限我忘記了,好像是修改這個數據庫文件的權限,或者數據庫目錄權限,把執行權限都勾上,具體請自己去測試下。
也可以直接把這個數據庫地址復制到本地目錄也就是sdcard目錄下,就可以正常打開,因為權限允許,然後修改後再覆蓋回去,再修改好相關權限即可。
第一種思路:修改數據庫文件內容
如果手勢密碼是明文存放在數據庫文件內,可以通過Sqlite編輯器找到對應的數據庫文件,修改裏面內容,同樣,如果加了密可以嘗試解密,如果不行,進行不斷測試,看當無手勢密碼時這個數據庫裏的值得內容為什麽,如何為空,那麽就可以直接清除掉當前的內容就可以繞過,如果是其它值同樣復制下這個關閉下的值去替換看能夠關閉不同的賬戶手勢密碼,如果能,那麽問題就存在。
第二種思路:修改數據庫文件權限
當第一種思路不行時,你可以嘗試修改當前數據庫文件權限,把所有權限去掉,看能否繞過。
第三種思路:修改數據庫目錄權限
如果都不行,那麽可能是你找錯了文件或者修改出錯,可以直接修改目錄權限,把所有權限去掉或者只去掉執行權限,看能否繞過
0x04 修改files目錄的文件從而達到繞過
這個也是我在測試中發現的問題,有時候這個目錄下會存放這手勢密碼相關的文件,在這裏你可以根據我上面說的思路是具體哪個文件,然後不停開關手勢密碼查看其內容已經其它文件是否跟著變換,也可以嘗試修改文件權限或者目錄權限。
如何找到手勢密碼存放在哪裏?關鍵就是我上面說的方法,不斷修改觀看其目錄和文件時間是否同步變換跟隨,這裏說下,有些目錄時間跟你修改時間不同步但是其目錄裏的文件是同步了的,比較隱蔽,比如你修改了手勢密碼,根據修改時間找相關的目錄以及文件,但是一些目錄它時間還是以前的時間,不細心的可能就會直接不看,但是我都會去看的,然後裏面的文件最近修改時間就是我剛修改手勢密碼的時間,所以細心很重要,如果不註意這個問題,你可能就找不當這個問題的存在或者需要花費很久的時間才能找到了。
文章中有些思路算是我自己發現的也可以說是首發,最後我在把我一個最新思路公布出來,我真的毫無保留的奉獻給大家了,為的就是促進這方面更安全的發展以及讓你們學習到更多的相關思路,以後可能做開發或者以及在做開發的過程中可以規避這些問題。
最新思路:禁用權限再開啟權限繞過
這個問題需要看APP是不是實時的交互,也就是當本地本件發送改變APP馬上就根據本地文件的改變做出改變。
同樣是找到相關文件,當你修改這個文件的權限時,比如把讀權限去掉,你再打開APP,發現沒有驗證手勢密碼,可能你此時此刻很開心,但是你會發現當前的登錄信息以及被清除掉了,這時不要沮喪,這時再把讀權限修改回去,打上勾,你回到APP,只要它可以自動同步了,那麽此時就會讀取數據庫裏的登錄信息,那麽狀態就會從未登錄狀態變為登錄狀態了。
也可以直接修改當前目錄的權限,思路也是同樣的。
如果以上所有思路都是不可行的,可以嘗試最終的這個思路,只要它是實時的,基本可以繞過吧。
有些手勢密碼跟登錄信息混合在一起,也加了校驗,此時你找到數據庫目錄databases,把讀權限全部去掉,然後打開APP,此時它會進入到主頁,但是沒有任何登錄信息,可能會顯示未登錄或者一片空白信息,此時你再把讀權限修改回去再回到當前APP,此時它會自動加載APP登錄信息,那麽登錄信息就出來了,此時手勢密碼也就繞過成功。
總結:我為什麽寫這樣的一片文章?因為我註意到目前沒有人總結這方面的思路,所以我用我這麽久挖掘裏發現的思路和網上的一些思路歸結為一起做了總結,但是我想說網上的思路我都從來沒有成功過,我也沒在網上找相關的思路,文章內大部分思路都是我自己在繞過手勢密碼時逐一運用過的,所以我歸結為了一起,目前是讓更多的人學習到相關的知識以及思路,讓廠商更早得知道自己產品所存在的問題從而盡早修復。整個文章寫作過程用了4個多小時,很快樂!這裏面很多問題都是由於沒有對本地手勢密碼加以驗證以及做出實時驗證從而導致的問題,之前也有很多廠商說你這個問題不構成威脅,因為你是在ROOT權限下實現的,但是我還是那句話,如果你的APP不存在問題,不管我在什麽環境下都無法找到你的漏洞,歸根到底還是你的APP存在問題,問題就在這裏,發現了問題,去解決,讓這個世界更美!最後希望大家堅持自己所學,在即將到來的新的一年,祝大家新年快樂吧!下次文章見~
07v8 Double-S說
本文作者在文中歸納總結了作者在挖洞過程中對於APP手勢密碼繞過的思路以及網上的一些思路進行了總結,希望讓更多白帽們能認識到更多的挖洞思路和想法,希望大家有所收獲,也希望更多的廠商更加註重安全。
APP手勢密碼繞過