時光匆匆,不知不覺間已經邁入了七月,我們一路相伴,經過KCTF精彩激烈的比拼,之後又對賽題依次進行了詳細的點評和思路分析,不知道看過題目解析的你有沒有感到豁然開朗呢?
今天解析的這道題就厲害了,截至比賽結束時無人攻破。廢話不多說,下面就讓我們來看下第七題,一起鬥智鬥勇,看看如何去化解部落衝突!
題目簡介
題目背景:
經過幾天幾夜的奮戰,雙眼已經開始不聽使喚,不停的往下掉。終於,世界變成一片黑暗,思想變得虛無。待雙眼睜開,白光閃進雙眼,只見一個和你相同模樣的人正在你的面前仔細端詳著你。
“你是誰?”
“我是你”
空氣中開始迴盪起一陣陰森詭異的笑聲……有一個守護寶石的部落出現在你面前,首領長老叫司看。那個和你長得一樣的,是部落裡的一位勇士,名叫狂場,勇猛善戰。他身後站著一個女巫,斜挎著一個獸皮袋,名叫暴風雪,擅長設定機關和控制天氣。
在這個自由的世界裡,部落之間經常發生衝突。衝突來臨時,他們各有分工。狂場是場上隊長,帶領著勇士們衝鋒陷陣。暴風雪會在開仗之前,先在戰場上佈下機關,並且在戰爭過程中通過控制天氣來引導狂場正確走位。
如果走位正確,就能毫髮無傷;如果走位錯誤,肯定要被射成刺蝟。但是,暴風雪自身很脆弱,一旦被敵人發現就非常危險。所以她通常隱匿在戰場的某個角落。而司看的任務就是:監督狂場嚴格聽從天氣的指示,禁止狂場回頭看暴風雪,以免暴露她隱藏的位置。
狂場已經等了你很久了。能否拿到寶石,就看你的走位了。
本題共有1840人圍觀,截至比賽結束沒有人能攻破此題。是第二賽段難度最高的一道題。
看雪評委crownless點評
“部落衝突”這道題模擬了一個正版軟體,假設攻擊方花錢購買了這個軟體,並獲得了一個正確序列號,然後這個攻擊者想求出另外一個使用者的正確序列號。分析向量表和雜湊值的疊加結果的隨機性,是此題的解題線索。
出題團隊簡介
本題出題戰隊 中婭之戒 :
再拜各位大佬!
本次2019KCTF Q2的中婭之戒由三名隊員組成:
Venessa:仍舊被玄學擊垮的密碼學方向在讀研(小)究(姑)生(娘)
loom:我只是一隻小貓咪,我不應該為生活發愁.jpg
上海劉一刀:科銳31期4階段學員,戰隊裡話最多且技術最辣雞的弟弟,寫殼比較像cxk
//這裡還有一些奇奇怪怪的資料↓
//http://www.51asm.com/zuixindongtai/xueyuandongtai/2019/0702/247.html
設計思路
“部落衝突”是一個模擬實戰環境的CM。
模擬場景:攻擊者得到了一組授權後,通過觀察分析,使用相關技術推算得到另一組授權。
“部落衝突”是“七十二疑冢”的升級作品。
“七十二疑冢”考驗的是攻擊方的CRC演算法能力。它選用了CRC校驗作為基本運算,而CRC函式(在多項式意義下)是線性運算的,從而使得“七十二疑冢”能被高效破解。
為了進一步提高難度,“部落衝突”採用了雜湊函式作為作為基本運算,而序列號就是依次序改變雜湊函式種子的下標。演算法如下:
上一輪種子經過雜湊函式生成的雜湊值(256bit),疊加上由序列號指定的常向量(給定256個向量,每個向量256bit)計算出本輪迭代值,作為下一輪雜湊的種子。
按照這樣的規則迭代下去,直至窮盡序列號。如果最終計算結果得到全0序列(256bit),即為破解成功。或者說,要想正面攻克部落衝突本質上就是一個尋找弱碰撞的過程,其窮舉難度很大。
如果把破解思路安排在hash碰撞上,太沒意思,而且也是違規的。
作者安排的正確解法是什麼呢?
“部落衝突”模擬了一個正版軟體。
假設攻擊方花錢購買了這個軟體,並獲得了一個(以狂場為使用者名稱的)正確序列號,然後這個攻擊者想求出另外一個使用者(使用者名稱為“你”)的正確序列號。
上述計算過程被包裝成一個名為“部落衝突”的遊戲。
要求解的序列號就是“你”的走位,只有成功躲開所有射擊(中0箭)才能活著走出戰陣(破解成功)。
而“你”不是唯一的玩家。遊戲中已經有一名叫做“狂場”的通關玩家,並且題幹中已經顯式給出了他的走位(已知一組正確序列號)。
通過分析“狂場”的走位,發現其中暗藏的規律,應當可以得到解題思路。
分析過程如下:
1)觀察狂場的走位,序列號本身並無特殊規律 --> 解題線索蘊藏於走位過程中。
2)遊戲的流程是單向進行的,每一輪迭代值由雜湊演算法迭代生成,不可逆推或跳過 --> 必須一步一步跟蹤迭代結果。
3)脫殼後最先可以看到256*256bit的向量表,看起來資料隨機毫無規律(但作者是有機會在其中精心構造資料的) --> 作為用來疊加到雜湊值的向量,不太可能單獨成為解題線索,所以攻擊者不能拋開雜湊函式和雜湊值單獨分析向量表。
4)雜湊函式得到怎樣的雜湊值,對於出題者來說也是難以控制(預測或構造)的,同時雜湊函式因其特性可以作為偽隨機數生成器(或偽隨機數生成器的一部分) --> 雜湊值應當依概率滿足偽隨機序列的特點,因此也不能作為作者預埋解題線索的地方。
5)結合3)4)分析,儘管向量表和雜湊值都看似隨機,但根據計算流程,二者的疊加結果才是真正值得分析的,作者預留的解題線索只能在這個地方。
6)如果此題的計算過程真的都是隨機的,那麼作者也難設計有效解法 --> 作者預埋的解題線索必然是“不隨機”的。
所以,分析向量表和雜湊值的疊加結果的隨機性,是此題的解題線索。
據此分析“狂場”的走位,使用經典的隨機性檢測方法*分別對迭代值進行隨機性檢測,會發現:每3步會出現一個“遊程分佈*”嚴重不隨機的迭代值。
本題的隨機性檢測方法,基於 國家密碼管理局釋出的《GM/T 0005-2012 隨機性檢測規範》。
具體演算法如下:
其中:
n為待檢測序列長度(此題中n=256)
igamc為不完全伽馬函式(Incomplete Gamma Function)
本題中“狂場”的走位先後經過的迭代值及其遊程分佈檢測P-value值如下:
第0步,初始種子,若以%s輸出為“狂場”的漢字,即玩家使用者名稱;
第19步,迭代值為全0序列(中0箭,中箭支數其實就是256bit序列中有多少個1),為此題目標;
第3、6、9、12、15、18步(即每隔3步)所處迭代值及其遊程分佈檢測P-value值如下:
{ 0xAA, 0xD2, 0x6B, 0x41, 0x6E, 0x1D, 0x54, 0x9F, 0xAB, 0x7D, 0xE9, 0x7A, 0x95, 0x6B, 0x4D, 0xD5, 0x55, 0x28, 0xDD, 0xDF, 0x95, 0x06, 0xAF, 0x6A, 0xAB, 0xAA, 0xAA, 0xD5, 0xC0, 0xA6, 0xD9, 0x8D },// 0.0000000000005602
{ 0x55, 0xA6, 0xE8, 0xAD, 0x42, 0xCA, 0xFA, 0xAF, 0xAC, 0x34, 0x32, 0xAA, 0x0D, 0x5F, 0x6C, 0x92, 0x95, 0xDD, 0x6A, 0xFD, 0xA7, 0xDA, 0xAB, 0x4A, 0xBB, 0x6B, 0x68, 0xFD, 0xAA, 0xB5, 0xA1, 0x7A },// 0.0000000000002456
{ 0x57, 0x2E, 0xB6, 0xD5, 0x35, 0xA2, 0xB5, 0x1F, 0x8A, 0xAA, 0xEA, 0x15, 0x5F, 0x50, 0x24, 0x2B, 0x57, 0xF5, 0x5A, 0xAF, 0xFD, 0x45, 0x55, 0xDB, 0x35, 0xFF, 0x6E, 0x25, 0xA8, 0x95, 0xAA, 0xA5 },// 0.0000000000000025
{ 0xAA, 0xD5, 0x67, 0xDA, 0x92, 0xCC, 0xB4, 0x24, 0xA1, 0x51, 0x6A, 0x36, 0x4A, 0x15, 0x35, 0x54, 0xA1, 0xB5, 0x2B, 0xEB, 0x25, 0xF7, 0xAE, 0xA6, 0xD5, 0x5F, 0x29, 0x3A, 0xA2, 0xAE, 0xAA, 0x22 },// 0.0000000000005478
{ 0x2A, 0xD0, 0xA5, 0x56, 0x49, 0x94, 0x42, 0x5E, 0x52, 0x12, 0xAB, 0x81, 0x15, 0x20, 0xB2, 0x56, 0x50, 0x2F, 0x5A, 0xEA, 0x95, 0xCE, 0xBC, 0xAA, 0x92, 0x15, 0x52, 0x55, 0xA0, 0x4E, 0x75, 0x4A },// 0.0000000000003175
{ 0x52, 0xAB, 0xA0, 0x8D, 0x54, 0xAA, 0xA2, 0xBA, 0x16, 0x88, 0x90, 0x67, 0x12, 0x89, 0x3A, 0x8B, 0xFA, 0xAA, 0xA9, 0x55, 0x15, 0x11, 0x6E, 0x8E, 0x2B, 0xA0, 0xD9, 0x51, 0x71, 0x52, 0x2B, 0xC0 },// 0.0000000000005624
可以觀察到P-value值均小於10^(-12)
在得知了“遊程分佈不隨機”這個線索之後,可以求解本題:
1)以“你”為初始種子出發
2)以3步為深度限制,遍歷所有組合(共256*256*256=2^24=16777216種)
3)對於每種組合得到的雜湊值,用相同量級檢測其遊程分佈P-value值
4)記錄這些隨機性嚴重異常的組合,並以其迭代結果為種子
5)重複步驟2)3)4),就能在5分鐘之內找出“你”的完整序列號:3C97E45B5E8DB16C9BD0DF4A00EAED0D8CA413ADCFD68E2EC7923EE2620B62A191135E25C0A6F2B4
附“你”的正確走位各步迭代值的P-value:
附:
1、隨機性檢測方法:
參見https://baike.baidu.com/item/隨機性/10578688
2、遊程分佈檢測(runs distribution test):
根據國家密碼管理局釋出的《GM/T 0005-2012 隨機性檢測規範》,遊程分佈檢測是:一種統計檢測專案,用於檢測待檢序列中相同長度遊程(指序列中由連續的“0”或“1”組成的子序列,並且該子序列的前導與後繼元素都與其本身元素不同)的數目是否接近一致。
▲
END
精彩回顧:
1、【英雄榜單】看雪.紐盾 KCTF 晉級賽Q2 排行榜出爐!
2、看雪.紐盾 KCTF 2019 Q2 | 第一題點評及解題思路
3、看雪.紐盾 KCTF 2019 Q2 | 第二題點評及解題思路
4、看雪.紐盾 KCTF 2019 Q2 | 第三題點評及解題思路
5、看雪.紐盾 KCTF 2019 Q2 | 第四題點評及解題思路
6、看雪.紐盾 KCTF 2019 Q2 | 第五題點評及解題思路
7、看雪.紐盾 KCTF 2019 Q2 | 第六題點評及解題思路
主辦方
看雪學院(www.kanxue.com)是一個專注於PC、移動、智慧裝置安全研究及逆向工程的開發者社群!建立於2000年,歷經19年的發展,受到業內的廣泛認同,在行業中樹立了令人尊敬的專業形象。平臺為會員提供安全知識的線上課程教學,同時為企業提供智慧裝置安全相關產品和服務。
合作伙伴
上海紐盾科技股份有限公司(www.newdon.net)成立於2009年,是一家以“網路安全”為主軸,以“科技源自生活,紐盾服務社會”為核心經營理念,以網路安全產品的研發、生產、銷售、售後服務與相關安全服務為一體的專業安全公司,致力於為數字化時代背景下的使用者提供安全產品、安全服務以及等級保護等安全解決方案。
10大議題正式公佈!第三屆看雪安全開發者峰會重磅來襲!
小手一戳,瞭解更多
詳情連結:
https://www.bagevent.com/event/2195041