[PS3 ] C3 研討會
◆引言 426無斷轉載生兒子沒屁眼!
Wii 已經上市三年,期間總共有九次韌體更新。總銷售數量有七千三百萬台,
總共有三千萬台的開機程式(bootloader)有漏洞。使用HBC 玩家的數量大概有
一百萬人。
老任的軟體非常脆弱,就算不破解,也有可能一不小心就當機或是變磚。這也
是Wii 這麼快就被破解的原因之一。老任在這段期間嘗試防堵破解,但都徒勞
無功。 426無斷轉載生兒子沒屁眼!
XBOX360 從發售到今天只有兩次讓玩家有執行自製程式的機會,一次是《金剛
》遊戲的漏洞,另一次是除錯埠(JTAG)的破解。
PS3 因為厚機一開始支援安裝 Linux,因此$QNY跟破解陣營有了一段關係不錯
的蜜月期。但不能執行3D加速的限制最後還是讓雙方撕破臉,2007年底被發現
OtherOS 的RSX 漏洞,$QNY選擇直接閹掉OtherOS 後雙方正式宣戰。$QNY聲稱
薄機不再支援Linux 是為了降低主機的成本,但時至今日我們知道$QNY根本就
在放狗屁,因為 Linux明明就可以在薄機上面正常執行。
我們可以證明$QNY的措施是沒有意義的,他們根本不能阻止大家在主機上面執
行Linux 。
(秀投影片展示各個主機的破解難易度,顏色越深越難破解,破解的下場全都
是:盜版, PS3被破解後會不會落如同樣的下場呢?)
◆PS3 主機架構。
$QNY看上IBM 的Cell處理器後決定採用作為 PS3的主機 CPU,實際上就是一顆
64位元的PowerPC 處理器而已。$QNY跟 IBM設計了一個孤立的 SPU架構,絕大
部分對於 CPU資源的存取都必須透過 SPU,使用者能夠直接存取的部分非常有
限。由此可見$QNY在我們看不見的部分藏了不少東西。
主機的架構有三層: 426無斷轉載生兒子沒屁眼!
Lv1/HyperVisor ←→ SPU
Lv2/Game OS ←→ SPU
Problem State/Games 只有第一層跟第二層有辦法直接和 SPU溝通。
(PS3開機程序)
◆各家主機的安全架構
1.都有一次寫入的BootROM
2.Wii 跟 360使用了一次寫入的記憶體儲存金鑰
3.都使用公私鑰加密簽證機制
4.除了 Wii以外都用了連鎖認證機制,Wii 只在安裝韌體時使用,所以很容易
破解 426無斷轉載生兒子沒屁眼!
5.除了XBOX以外,其他主機都每台都有獨特的金鑰
6.除了Wii 以外,其他主機都有執行檔簽證機制
7.Wii 跟 PS3有獨立的安全輔助晶片
8.只有 Wii使用了儲存媒介簽證加密,遊戲光碟是加密的
9.Wii 跟 PS3有將主機內記憶體利用主機獨特金鑰加密
10.Wii 還有自身簽證的安全架構
Part 2:
http://www.youtube.com/watch?v=qFuTCEtK6l8
11. 360使用了主機記憶體加密的機制
12. 360跟 PS3都有Lv1 的防護機制HyperVisor
13. PS3有使者、核心模式,算是一種砂盒防護機制,Wii 跟 360都是在核心模
式執行程式
14.只有 360有防止降級的電子保險絲機制(eFUSE ),保險絲的狀態是加密、
解密的資訊之一,因此就算用晶片燒錄器強行寫入低版本的韌體也無法正常
解密執行。保險絲的位置在 CPU裡面,理論上無法還原。
但很顯然的, PS3的主機內記憶體加密機制已經可以繞過了,所以暫時不會對
破解造成太大的妨礙。同時由於硬碟的內容都是用同一把金鑰加密,而使用者
可以上傳一些測試文件到硬碟,然後將硬碟拆出,分析變動的地方,以此資訊
作為樣本進行暴力破解。 426無斷轉載生兒子沒屁眼!
◆OtherOS
(演講者很靠北地送了個獎盃給$QNY:拔掉OtherOS 就可以引起大家的注意)
我們知道薄機拿掉OtherOS 絕對不是因為$QNY技術有問題,也可以排除行銷方
面的問題,因為不會有人因為主機可以執行 Linux而拒絕購買。拿掉這個功能
只會激怒大家,讓大家群起而攻之。結果George Hotz (Geohot)開了第一槍,
把錯誤的記憶限制資訊寫入記憶體,然後騙過主機取得更大的記憶體權限。
◆Geohot漏洞 426無斷轉載生兒子沒屁眼!
Lv1/HyperVisor也是存在主機記憶體中,因此執行OtherOS 時, Linux跟HV其
實都是使用同一塊主記憶體,只是HV有分配權限,當Linux 核心需要更多記憶
體時,會向HV要求,然後HV給出,並在HTAB上紀錄,讓Linux 可以存取; Li-
nux要釋放記憶體時,也是跟HV通知要釋放,然後HV清除在HTAB上的紀錄。一
切都如此美好~。 426無斷轉載生兒子沒屁眼!
但Geohot耍了一些小手段,利用外部訊號欺騙HV剛剛宣告的記憶體又釋出了,
但實際上核心還是有存取權限。然後Geohot繼續用這種方式欺騙HV,盡量將主
機的記憶體佔滿,運氣好的話剛好某些記憶體的分頁表就會跑進剛剛欺騙的範
圍內,結果Linux 核心就可以讀到原本不該讀的資料,甚至也可以把HV整個讀
進來。 426無斷轉載生兒子沒屁眼!
有HV的資料就可以侵入HV模式。
($QNY得到第二座的獎盃:你們家的HyperVisor攤在陽光下了!)
雖然聽起來很厲害,理論上可以這樣搞,但沒有人知道把HV讀出來以後要做什
麼。結果這一槍反而激怒$QNY,發火把所有厚機的OtherOS 功能拔掉了,最後
也衍生出違反《歐盟消費者保護法》的爭議。
麻煩的是通常只有駭客們會使用OtherOS 功能,一般只玩遊戲的玩家根本不會
理會那個功能的有無,於是$QNY這一搞惹毛了所有乖乖使用OtherOS 的駭客,
他們決定要把$QNY從他們身上平白奪走的功能搶回來。
($QNY得到第三座獎盃:你惹到不該惹的人了!)
$QNY顯然太過大意,之後從內部流出了PSJB,一下子也讓大家複製出來。PSJB
如大家所知,是一個讓人在Lv2/GameOS裡面執行沒簽證程式的手段。
◆PSJB漏洞 426無斷轉載生兒子沒屁眼!
$QNY韌體系統在辨識 USB裝置時的程式有漏洞。所有的 USB裝置都有一個描述
子(discriptor),裡面存有一個字串,描述這個裝置的名稱,例如隨身碟的描
述子是磁碟標籤這樣。主機讀取描述子時,首先會讀取一開始的 8個byte,接
著讀取描述子的長度。
利用模擬方式,一口氣在 USB插槽上連接六個裝置,主機讀到第四個裝置的描
述子時,第四個裝置回答主機說描述子長度為 0,於是主機就沒有宣告任何記
憶體空間來儲存描述子字串。主機程式沒考慮到這種狀況,於是乎主機會嘗試
去處理不存在的字串,結果不小心就處理到讀第二個裝置描述子時存下來的東
西,而這個字串恰巧能夠騙過主機,於是主機能夠成功將記憶體初始化。
讀第二個裝置存下的字串結尾是04 21 B4 2F ,結果讓主機誤認說這個裝置的
描述子長度有0x2FB4,一讀暫存器自然就爆掉了。主機繼續讀取第三個裝置的
組態描述子(configuration discriptor),結果讓第三個裝置的資訊蓋掉程式
的指標,指向第一個裝置儲存酬載的地方,於是主機就執行到我們要讓他執行
的程式了。 426無斷轉載生兒子沒屁眼!
($QNY得到第四座獎盃:得到在Lv2 裡面執行程式的權限了!)
進一步分析之後我們發現HV根本不知道PSJB到底搞了什麼鬼,HV也不會去阻止
使用者利用PSJB執行未簽證的程式。所以這個HV到底在幹麼?走到這裡,我們
並沒有去破解Lv1/HV,也沒去破解SPE ,所以得出的結論就是……。
($QNY得到第五座獎盃:盜版參上!!)
天底下哪有這種只攻破Lv2 就可以執行盜版的好康事?有的原因就是因為$QNY
的防禦機制根本起不了作用。所以我們可以將遊戲備份到硬碟裡面,然後將光
碟機的位址換成硬碟的位址,因為Lv1 不會去檢查遊戲的完整性。SPE 也不理
。所以你要把遊戲備份到哪裡都無所謂。
到此,已經可以繞過HV了。 426無斷轉載生兒子沒屁眼!
$QNY發覺事情大條之後,開始嘗試阻止,於是發佈新版韌體3.42、3.50,好吧
!山不轉路轉,就降級。
◆降級
進入主機的方式其實不難,因為只是個簡單的對稱性加密HMAC而已,拿到金鑰
後就不是問題了。進入F/S Mode之後可以執行存在USB 隨身碟上而且簽證過的
程式,偏偏$QNY內控有問題,於是又流出能夠略過版本查驗的韌體更新程式。
所以說……。 426無斷轉載生兒子沒屁眼!
(第六座獎盃:越來越多的盜版)
◆AsbestOS
由於GameOS跟OtherOS 其實差異不大,只差在硬體存取權限而已。AsbestOS把
GameOS趕出了記憶體,換成自己,於是我們就能在薄機上執行Linux 的原因就
來這裡。我們可以將 Linux設成遠端模式,然後透過電腦下指令來執行程式。
我們並未滿足現狀,要用 USB破解工具才能執行自製程式很不方便,我們希望
找出一個一勞永逸的方法,讓主機一開機就進入 Linux。為此我們就需要分析
執行檔的結構。
◆執行檔SELF
有蠻複雜的加密方式,因此不是那麼容易就能破解的。
http://www.youtube.com/watch?v=84WI-jSgNMQ
Part 3:
◆預言
$QNY的算盤是:沒人看得到我們的程式碼
……除非能攻破PPE
能在GameOS裡面把程式解密!?這樣就不用破解安全輔助處理器了。
那加密金鑰咧? 426無斷轉載生兒子沒屁眼!
於是我們可以讓主機自動幫我們把程式解碼,而完全不用管到底是怎麼辦到的
。所以……
(第七座獎盃:障眼法騙不了人的!)
因此 PS3的安全輔助處理器沒用了 426無斷轉載生兒子沒屁眼!
◆連鎖認證
這個東西是個兩面刃,如果不被攻破,那就牢不可破,但萬一被攻破,就以透
過相互的認證機制全部拿下。只更新一部分程式是沒用的,因為還是可以透過
認證換回舊版的,所以要防就要整個砍掉重練。
◆破解開機程式 426無斷轉載生兒子沒屁眼!
我們能夠存取的範圍不多,但反正要執行程式,系統都會先把程式複製到執行
程式的區域,所以還是利用緩衝區溢位的老招,寫入大量的資料,把程式一口
氣蓋進去lv2ldr的位置。運起好的話就能把整個開機程式連根拔起。於是……
(第八座獎盃:得到AES 金鑰啦!)
簡單說,$QNY的機制是「一步錯,滿盤輸」,只要有一小個在孤立載入器的漏
洞被發現,整個連鎖認證的機制就毀了,而且這個漏洞會波及所有已經販售的
主機。我們可以藉此攔截開機程序,換成執行我們的程式,這樣開機時就可以
直接進入 Linux了。 426無斷轉載生兒子沒屁眼!
(第九座獎盃:連鎖認證機制破滅)
雖然說是「破滅」,但並非「神話」……
◆執行檔
簽證的問題怎麼辦?
要描述橢圓曲線有五個參數 p a b G N
Q = 公鑰
e = 資料的雜湊值
426無斷轉載生兒子沒屁眼!
R,S = 簽證指紋
當然最直接的就是直接找出用來加密的私鑰,但理論上是有困難的。這牽涉到
橢圓曲線的加密方式,相當複雜,而且牢不可破。第一個方程式沒人解得出來
,第二條比較簡單,但是有個亂數 m在裡面,也是有點麻煩。
R = (mG)_x ... (1)
S = (e + kR)/m ... (2) 426無斷轉載生兒子沒屁眼!
照理來說, m應該是個亂數,就像我們丟骰子一樣。但是,我也不知道為什麼
$QNY的骰子每次都會丟出相同的點數。因此當某兩個簽證指紋的 m相同時,就
代表 R也相同,於是可以透過簡單的加減乘除推出 m,然後是 k。
R = (mG)_x R = (mG)_x
S1 = (e1 + kR)/m S2 = (e2 + kR)/m
所以把S1減去S2,可以得到 426無斷轉載生兒子沒屁眼!
S1 - S2 = (e1 - e2)/m → m = (e1 - e2)/(S1 - S2)
k = (mS1 - e1)/R = (e1S2 - e2S1) / [R(S1 - S2)]
◆Elliptic Curve Digital Signature Algorithm, ECDSA 橢圓曲線數位簽證演
算法
我們用了 ECDSA演算法來保護我們的 HBC不被攻擊,程式碼大概是長這樣。你
看這裡,我們也用了亂數產生器。照理來說亂數產生器應該是有點複雜的,但
你知道$QNY的亂數產生器長什麼樣嗎?
int getRandomNumber()
{
return 4; //隨便丟骰子得到的結果
//骰子的結果當然是隨機的啦啾咪~
} 426無斷轉載生兒子沒屁眼!
於是可以得到 k, k就是私鑰,有了私鑰我們就可以高高興興的把程式拿來簽
證囉~!
(第十座獎盃:私鑰也到手啦~)
這個私鑰是$QNY在 PS3平台上最最重要的一樣資訊,有了這個以後,什麼 Lv2
、 Lv1防禦都沒用,那是防人翻牆侵入的,我手上有大門的鑰匙又何必翻牆?
更正一下,暫時還沒拿到Lv1 的金鑰 ,這部份還需要一些時間。
好了,所以公私鑰的加密機制也崩壞了。只剩下最後一關:BootROM ,但是這
個東西實在談不上是什麼高科技的玩意兒,我們沒花多少時間就讓他發生溢位
錯誤了。 426無斷轉載生兒子沒屁眼!
(第十一座獎盃:溢位錯誤的白金獎盃)
所以,謝謝啦,$QNY! http://fail0verflow.com
◆提問時間 426無斷轉載生兒子沒屁眼!
原本我們想在這裡直接展示我們的成果的,但是不知道為何暫時沒辦法正常運
作,兩年前也是一樣,不知道為何在關鍵時刻東西都會壞掉,我們會想辦法修
好,然後明天,明天我們會另外安排個時間來作展示。(Lightning Talk)
我們準備了兩隻麥克風,請到兩邊排隊,如果你不好意思在公開提問題的話,
你也可以私下到講台前來。
Q1:你們知道PSJB的來源嗎? 426無斷轉載生兒子沒屁眼!
A1:一無所知,但可以猜。只是有幾分證據只能講幾分話。
Q1:所以是從$QNY內部流出的?
A1:呵呵呵……。總之現在有很多晶片都可以模擬PSJB。但我們的破解方式不
一樣,而且目前的戰場有點髒,所以我們需要一些時間清理戰場,大概下
個月左右我們就可以把我們的成果整理成破解工具放出來。
Q2:既然已經有私鑰了,為何不能弄出個藍光軟體的酬載程式?
A2:我們目前還沒有拿到用來簽證遊戲的私鑰,而且那跟appldr有關,而且
$QNY已經換了好幾次私鑰……。 426無斷轉載生兒子沒屁眼!
更正一下,我搞錯了,是的,我們目前已經可以把遊戲簽證,但那不是我
們的目的。
還有問題嗎?沒有的話,離場的出口在右邊,離開時請帶走所有的垃圾,謝謝
! 426無斷轉載生兒子沒屁眼!
※ 編輯: cassine 來自: 140.112.18.73 (12/30 13:52)
→
12/30 13:21, , 1F
12/30 13:21, 1F
→
12/30 13:25, , 2F
12/30 13:25, 2F
推
12/30 13:28, , 3F
12/30 13:28, 3F
推
12/30 13:39, , 4F
12/30 13:39, 4F
******
剛剛打到一半斷線, 120大學的網路就是這樣ˋ(′_‵||)ˊ
所以這篇是斷線後載入暫存檔的,有些人的推文可能因此消失。另外這篇要轉錄
的話請先知會本人取得許可。
推
12/30 15:52, , 5F
12/30 15:52, 5F
推
12/30 16:51, , 6F
12/30 16:51, 6F
→
12/30 16:51, , 7F
12/30 16:51, 7F
推
12/30 17:11, , 8F
12/30 17:11, 8F
推
12/30 17:41, , 9F
12/30 17:41, 9F
推
12/30 18:45, , 10F
12/30 18:45, 10F
推
12/30 18:48, , 11F
12/30 18:48, 11F
推
12/30 19:09, , 12F
12/30 19:09, 12F
→
12/30 19:09, , 13F
12/30 19:09, 13F
推
12/30 19:54, , 14F
12/30 19:54, 14F
推
12/30 19:58, , 15F
12/30 19:58, 15F
推
12/30 20:12, , 16F
12/30 20:12, 16F
推
12/30 20:18, , 17F
12/30 20:18, 17F
推
12/30 22:09, , 18F
12/30 22:09, 18F
→
12/30 22:19, , 19F
12/30 22:19, 19F
推
12/30 22:27, , 20F
12/30 22:27, 20F
→
12/30 22:28, , 21F
12/30 22:28, 21F
推
12/30 22:33, , 22F
12/30 22:33, 22F
→
12/30 22:41, , 23F
12/30 22:41, 23F
推
12/30 23:18, , 24F
12/30 23:18, 24F
→
12/30 23:49, , 25F
12/30 23:49, 25F
推
12/30 23:57, , 26F
12/30 23:57, 26F
推
12/31 00:07, , 27F
12/31 00:07, 27F
推
12/31 00:21, , 28F
12/31 00:21, 28F
→
12/31 00:21, , 29F
12/31 00:21, 29F
→
12/31 00:21, , 30F
12/31 00:21, 30F
推
12/31 00:22, , 31F
12/31 00:22, 31F
推
12/31 01:13, , 32F
12/31 01:13, 32F
推
12/31 02:08, , 33F
12/31 02:08, 33F
推
12/31 11:05, , 34F
12/31 11:05, 34F
推
12/31 12:20, , 35F
12/31 12:20, 35F
※ 編輯: cassine 來自: 140.120.31.133 (12/31 17:04)
推
12/31 17:21, , 36F
12/31 17:21, 36F
推
01/01 03:13, , 37F
01/01 03:13, 37F
→
01/01 03:15, , 38F
01/01 03:15, 38F
→
01/01 03:15, , 39F
01/01 03:15, 39F
→
01/01 03:18, , 40F
01/01 03:18, 40F
推
01/02 22:29, , 41F
01/02 22:29, 41F
推
01/03 17:49, , 42F
01/03 17:49, 42F
討論串 (同標題文章)
完整討論串 (本文為第 1 之 3 篇):
29
42
Modchip 近期熱門文章
PTT遊戲區 即時熱門文章
6
12