close
X

黑客生存指南:仙界篇


「我溜進一個很神祕的會場,裡面一群敲程式碼的碼農們好像在搞大事情,就連出去上廁所警察蜀黍都跟著。」

這是前兩天一位朋友八卦時候提到的,據她說所謂的「溜」進去也並不容易,想盡了各種招才進去觀摩了一分鐘。

其實,所謂的神祕會場就是網鼎杯半決賽和總決賽現場。

早在大賽預賽階段編輯就開啟了暗中觀察模式,畢竟選拔賽主題「青龍之戰、白虎之戰、朱雀之戰、玄武之戰」非常霸氣且有逼格,全國各地21000多名參賽選手們抽成不同行業切磋,最終再從進入線下半決賽的200支戰隊中篩選出各行業排行榜前10—15支精英戰隊晉級決賽。

線上預選賽採用CTF解題的比賽模式,線下決賽則採用了國際頂級賽事慣用的AWD攻防兼備模式。為了保證「切磋」公平性,主辦方配備了14臺高頻率訊號遮蔽器(就是下面這貨)遮蔽場內選手通訊訊號,還找了督察進行巡查,總之就是前所未有的嚴格。


高頻率訊號遮蔽器

知乎上有一個問題,CTF線下賽應該如何打?點贊率最高的一個回答是這樣的:

手不要抖,心不要慌,線下攻防,也就那樣;


網路不通,交流不暢,鎮定自若,落後何妨;

專人運維,冷靜指揮,盯計分板,策略得當;

Pwn題雖多,Web更傷,挖洞很弱,光靠重放;

工具指令碼,準備匆忙,反正現場,也用不上。(情不自禁唱了出來)

當然這些圍觀群眾都是看不到,開賽後各戰隊便快速進入了狀態,展開了比分的爭奪。開賽18分鐘後,廣東省應急響應平臺紅帽先鋒戰隊率先拿下了全場首個一血,打響了網鼎杯半決賽戰場的第一槍。

到底這次賽事背後有什麼故事?雷鋒網宅客頻道採訪了獲得半決賽第一名決賽第六名的Lancet戰隊

Lancet名為柳葉刀,是醫生的手術刀,為病人消災祛病。他們想要做網路世界的手術刀,既要撕裂網路世界的表面看到安全隱患,也要為網路安全主刀消除隱患。Lancet最初是在15年10月由北京航空航天大學網路安全實驗室的小夥伴組建的。日常研究涉及到工控、韌體以及Web安全等各個層面,而對於CTF也是以賽代練,逐步提高。

雷鋒網:為什麼你們線上排名靠後,線下排名第一?

Lancet:因為線上賽規定最多6人蔘加,當然有些隊伍實際可能不止6個人一起打比賽,這種情況是監控不到的,也是網安比賽不可避免的bug。但線下賽限制人數最多四人,除非肚子裡還藏著一個。(編輯:喵喵喵?)

雷鋒網:這次的比賽過程是怎麼樣的?

Lancet:我們之前有過線下經驗,所以這次沒有特殊準備,就按以往的來。半決賽中跟以前的線下awd差不多,各隊都是web先做出來,但是初期彼此差距不大。後來我們靠一道pwn的一血打到第一,並迅速拉開了與第二名的差距。下午web大佬們靠第二個漏洞(我們隊先發現的)又拿到了許多分,鞏固了第一的優勢。第二天決賽有用到昨天的web和其中一道pwn題,但主辦方部署有些不一樣,導致我們初期用昨天的指令碼沒刷到分數(我們當時以為刷到了在做別的題),後來除錯 偵錯的時候耽誤了初期寶貴的20mins。整場打下來,除去中間有4輪主辦方驗證flag錯誤,這初期的20mins對我們影響很大,最後5-8名分數幾乎相近(大概就是一輪的差距),而我們靠一個密碼學題搶到了第6。

:這麼看來前一天你們似乎打的更好一些?

Lancet:第一天我們防守比較到位,可以說最後兩小時我們基本上沒事幹了,這種比賽根本核心在於一個時間效率的問題,就是說你如何用一段固定長度的時間去換取最多的flag,或者最多的別人的時間,也就時間效應。後面一天的狀態稍微差一點,可能是因為前一天晚上熬夜寫程式碼的原因。

昨天大概七八點鐘回去,我寫程式碼是寫到快兩點,然後今天是6點半起來。特別辛苦。

還有一個就是flag提交的那一部分,我們用的還是前一天的隊伍token,雖然終端顯示提交成功,但因為種種原因並沒有成功。而且初始的flag分數還是蠻高的,因為這個原因,我們損失了最初幾輪的flag。最終從比賽結果來看,前幾名分差其實都不是很大,所以上述的失誤還是影響到我們最終的名次了。

還有另外一點,就是今天的web題目限制了寫入權限,昨天我們使用的比較nasty的技巧都沒有用上。

雷鋒網:CTF與滲透測試實戰的區別是什麼?

Lancet:CTF相當於滲透測試的一種抽象,就是將滲透測試中的具體操作比如入侵掃描等抽象成一種模型。這種模型雖然和真實場景存在差異,但一定程度上也能預測真實場景,或者說對真實場景起到一定的作用。

雷鋒網:經常在一些CTF比賽中看到你們,你們覺得打比賽的意義是什麼?

Lancet:贏得獎金和獲得獎項是一方面,更重要的是可以認識更多圈子裡的人。其實安全圈相對較小,但生態是比較好的。打這種比賽除了可以認識各種各樣的戰隊還能在比賽之後分享過程中出現的問題以及交流解決問題的思路。這就是不同的思想碰撞之後對自己的技術進行賦能的過程,賽場有益的技術對手也是朋友。比如我們這次比賽結束後就和孕婦防護服等戰隊的基友們(在各種比賽偶遇已成基友)探討了一波。

雷鋒網:每次參賽都會提前準備嗎?

Lancet:當然,可以說是吃老本的一種方式。比如你在之前的研究或者比賽中存留了一些指令碼和一些想法,要進行比賽時候就需要提前把這整套工具體系或整套指令碼體系做出來。比賽的時候就聽天由命吧,比賽完之後,再通過比賽結果的反饋,將反饋輸出到你的指令碼里,可以交指令碼進行進一步的修繕。

也就是我們有一套比較通用的框架,如果要參加比賽就需要根據主辦方環境和規則的不同進行調整,這套框架已經幫我們賺了很多錢。

雷鋒網:參加完「網鼎杯」之後,有什麼打線下賽經驗分享?

Lancet:首先一點還是要考慮,線下賽考察的能力,是一種攻守兼備的狀態。

先說防守,比較傳統的方式(web)就是使用通防指令碼,而通防指令碼一般分為過濾型和轉發型兩種, 根據需求靈活選擇。防守還有一個很重要的輔助作用就是payload收集和重放,所以有一整套完整的payload利用工具鏈將是錦上添花。

再說攻擊,程式碼審計部分略去不談,在做權限維持的時候,最重要的就是隱蔽與多樣性。以我們Lancet內部使用的AWD-INTEL的框架為例,在進行權限維持的時候,我們引入了一個叫做shell service的概念(還在開發中),下面是內部設計文件中的一部分:

  1. 基於種子進行shell變異(shell型別,shell名稱,shell儲存位置)

  2. 通過web介面檢視每個host中shell的種類和型別

  3. 可以結合server.py 獲取server端的狀態(webshell主動掃描,waf掃描)

  4. 一個host可以多達5個shell,允許自定義新增shell

  5. shell高隱蔽性(類weevely後門)

  6. 垃圾流量併入到shell service中(因為垃圾流量即將轉型成基於原始碼生成,而非傳統的通過代理流量生成【考慮效率因素和覆蓋率】)

從以上我們可以看出shell service設計過程中對隱蔽性,多樣性,甚至少量變異性的追求和優化。

「網鼎杯」網路安全大賽是由國家網路與資訊保安資訊通報中心、國家密碼管理局商用密碼管理辦公室支持,永信至誠主辦,360公司、阿里、百度、騰訊、中科院信工所、清華大學聯合協辦的國家級網路安全大賽。


分享是一種美德,喜歡就幫我們讚一下支持吧~

為你推薦