O1在王城門口卡了三天。
那個過路人說的他都懂,攻的是信任,不是牆,要找一條關係的鏈子順著走上去。道理他懂。
但他看不到那條鏈子。
他站在第一間石室裡,手上有一把過路人給他的鑰匙,一個最底層的身分,一個誰都不會多看一眼的雜役。他用這個身分能進門,能在裡面走動,能看到很多人。
可是他看到的是一堆人。
一個一個的人。這個是管燈的,那個是管帳的,那邊那個是看門的。他能看到每一個人是誰,卻看不出來他們之間有什麼關係。
誰聽誰的?誰能用誰的名義?誰替誰保管過鑰匙?哪個雜役其實掛在一個他看不見的名冊上,而那個名冊剛好通到很裡面?
他站在人群中間,覺得自己像個瞎子,眼前明明全是人,他卻連他們怎麼連在一起都看不見。
那三天他很懵。他把每一個人的名字、職稱都抄下來了,抄了滿滿三頁。可是那三頁只是一份名單。名單不會告訴你,誰的背後站著誰。
第三天晚上他又去找史帝凡。
這次史帝凡有空。他聽完 O1 的描述,沒有說話,從自己的行囊裡牽出一樣東西。
那是一隻狗。
不是很大,瘦瘦的,鼻子很長,眼睛是那種一直在聞、一直在找的眼睛。牠一被牽出來,鼻子就開始動,對著王城的方向。
「這是血獵犬。」史帝凡說,「牠聞的不是人。是血脈。」
「血脈?」
「誰跟誰有關係,誰的權能從誰那裡繼承來的。」史帝凡把繩子遞給他,「你看不到的那些線,牠聞得到。」
O1 牽著那隻狗走進王城。
他做的事情很簡單,簡單到他一開始懷疑有沒有用——他只是牽著狗,讓牠把城裡每一個人都聞一遍。這個雜役聞一下,那個管事聞一下,牆上掛的每一面職稱牌都湊上去聞一下。
聞了很久。牠什麼都聞,不挑。
然後他把狗牽回通道口,蹲下來。
那隻狗抖了抖身體,然後,牠聞到的東西,在地上顯出來了。
一張圖。
那張圖是 O1 這輩子沒看過的東西。
城裡所有的人,都在圖上。但重點不是那些人,是人跟人之間的線。
密密麻麻的線。這個雜役連到那個管事,那個管事連到一個更高的職位,那個職位又連到另外三個人。有的線很粗,有的線很細;有的線是單向的,有的是雙向的。
整張圖看起來像一團亂麻。
但那不是亂麻。那是這座城真正的樣子。
外面那些牆、那些門、那些職稱牌,是這座城給人看的表面。而這張圖,是它底下真正在運作的東西——誰的權力從哪裡來,誰其實能碰到誰。
然後 O1 遇到了新的問題。
圖太大了。
那隻狗把整座城都聞了,所以整座城都在圖上。幾百條線,交纏在一起,他一時之間根本不知道要看哪裡。
他在那張圖前面蹲了很久——久到膝蓋都麻了。他一條線一條線地追,追到一半忘記自己從哪裡出發,只好回到起點重來。他試著先找那些「看起來很粗」的線,發現粗的不一定有用;他試著先找最靠近王座的人,發現那些人守得最嚴。
半天過去了。他還在讀那張圖。
他一度以為是自己太笨。 一張圖而已,怎麼會看半天。
後來他才明白:這張圖本來就要看這麼久。 那隻狗負責把線聞出來,可是「哪一條線能走」,狗不會告訴他。牠只把城攤開在他面前,剩下的是他的事。
看圖是慢的。因為看圖不是用眼睛,是用腦子。
到了下午,那隻狗做了一件事:牠用鼻子,在圖上點出了一條線。
不是最短的那條——最短的那條,中間卡著一個守得死死的人,過不去。狗點的是第二條,繞遠一點,但每一步都走得通。
那條線從 O1 手上那個最底層的雜役開始,穿過幾個人,一路連到最裡面那個家族的門。
中間經過的人,沒有一個是「管事的」——全是些不起眼的角色:一個管鑰匙的、一個以前替主人跑過腿的、一個因為某個舊約定還留著一把舊鑰匙的老僕。
一個一個看,他們都不重要。
但把他們連起來,就是一條從門口通到王座的路。
O1 盯著那條線,忽然覺得胃有點涼。
因為這隻狗做的事情,他認得。
這隻狗做的事,就是派令官做的事。
派令官也是這樣看人的。他不看一個人會什麼、做過什麼——他看的是關係:這個人是誰帶進來的,這個人跟誰走得近,這個人的名字最近從誰嘴裡出現過。他順著那些線判斷一個人能到哪裡、不能到哪裡。
O1 這輩子最恨的就是這個。他恨那些看不見的線比他的能力更重要,恨自己的名字因為不在對的線上就被劃掉。
而現在,他蹲在這裡,手裡牽著一隻做著同樣事情的狗。
只是這一次,那雙看關係的眼睛,長在他手上。
他在王城那一頁的下面,補了一行字。
他寫的時候手停頓了一下,因為這行字他自己讀起來都覺得複雜:
「那些線一直都在。以前它們用來擋我。現在我得學會讀它們。」
寫完他看著那行字。
他發現他對那些線的感覺變了。不是不恨了,那七年的帳不會這麼容易就消。
而是他第一次意識到:那些把人連在一起的線,本身沒有善惡。 派令官用它們來排擠人,那個過路人用它們來拉人一把,而現在他要用它們來攻進一座城。
線是同一種線。差別在讀它的人。
有兩條線他怎麼看都看不懂,狗把它們聞出來了,可是他不明白那代表什麼。
他去找了那個過路人。他把圖攤開,指著那兩條線,問:「這個我讀不出來。」
過路人看了一眼,講了兩句。就兩句,那兩條線的意思就通了。
「這也要問喔?」過路人笑他。
「嗯。」O1 說,他沒有覺得不好意思,「這個我不會。」
那是他這輩子,第一次能把「這個我不會」四個字,講得這麼平常。
那天他牽著狗,把那條路走了一遍。
從雜役,到管鑰匙的,到跑過腿的,到那個留著舊鑰匙的老僕,一步一步。每一步他都不是用砸的——他是用「上一個人的名義」,讓下一個人替他開門。
走到那個家族門口的時候,天快亮了。
他沒有推門。他知道自己還差最後一步,那一步是明天的事(Day 17)。
但他第一次,看見了整條路。
Day 15 說 AD 攻的是信任。這一篇講:信任怎麼被看見。
因為問題就在這裡,信任是看不見的。登入一台機器,看不到「這台機器信任哪個帳號」;看著一個使用者,看不到「他能不能走到管理員」。AD 攻擊最難的第一步,是把看不見的關係變成看得見的東西。
AD 攻擊通常從一個已知的網域身分開始:
這就是故事裡那把「過路人給的鑰匙」。 它不強,通常只是個最低權限的網域使用者。但它的價值不在權限,在視野:有了一個網域身分,你就能開始「查戶口」。
有了立足點,先把整個網域的「戶籍資料」撈出來:
我實際慣用的工具,老實講不多:
至於 rpcclient,只有在少數幾台「剛好開著 RPC 而且有東西可問」的靶機上用過,不是常備。windapsearch、PowerView 這些我列出來讓你知道有,但不是我的主力。
工具不用多。這幾個能把「網域裡有誰、他們大概怎麼分群」問清楚。
但清單有個先天的問題:它告訴你有哪些人,不告訴你他們怎麼連在一起。而 AD 攻擊要的正是「怎麼連」。
這就是故事裡那隻狗。
BloodHound 把上面那些零散的清單,組成一張關係圖:節點是使用者、群組、電腦,邊是它們之間的關係(「是成員」「能改密碼」「登入在」「能遠端登入」……)。
它分兩部分:
它最強的功能,是故事裡那隻狗「用鼻子點出一條線」的動作:
「從我現在這個帳號,到網域管理員,最短的路徑是什麼?」
按下去,它幫你把路徑標出來。
這是本篇的核心,也是很多人卡在 AD 的原因。
用清單,看到的是:「Bob 是 IT 群組成員」「IT 群組對 Server01 有本地管理員權限」「Alice 最近登入過 Server01」「Alice 在網域管理員群組裡」。
四條各自獨立的事實。分開看,沒有一條是漏洞。
但把它們連起來:
控制 Bob → Bob 能管 Server01 → Alice 登入在 Server01(憑證還在記憶體裡)→ 我拿到 Alice → Alice 是網域管理員。
一條從 Bob 到整個網域的路。
而這條路上,沒有任何一個「漏洞」——每一步都是正常的權限設計。弱點不在任何一個節點,弱點在它們的連法。
這就是為什麼故事裡那句話是「別找門,找關係」。
我讀一張 BloodHound 的圖,常常要花半天以上。
有很長一段時間,為這件事很焦慮。一張圖而已,工具都幫我畫好了,怎麼還要看半天?是不是我特別笨?
後來想通了:不是。這張圖本來就要看這麼久。
BloodHound 最容易騙人的地方,就是它給你一種「答案都在圖上了」的錯覺。好像路徑都畫出來了,剩下的只是照著走。
不是的。工具給你的是「有哪些關係」,不是「哪一條關係走得通」。
而且很多圖,到最後也不是自己讀懂的。
常常是拿著那張圖去問人,「我這樣解讀對不對?」「這條路我走不通,是哪裡卡住?」把自己卡住的地方講給一個走過的人聽,他一句話就點開了。
AD 這種東西,關係複雜到一個程度,本來就不是一個人關起門來能全部想通的。 去問,不是因為弱,是因為這條路本來就是很多人一起走出來的。
如果也在為「BloodHound 開著卻不知道下一步」而焦慮,沒有比較差。只是在做一件本來就慢的事。
工具給圖,讀圖是你的事(跟 Day 10 巡紋鏡一樣)。實務順序:
第 4 點是實戰的節奏:先看最短,從短的開始試,卡住就換下一條。 不要死磕一條路,這又回到 Day 11 的幻廊,AD 裡一樣有幻廊。
BloodHound 的蒐集動作在真實環境裡很吵——它會對網域發出大量查詢,防守方偵測得到。
呼應 Day 4:你的每一個動作都會留下痕跡,而你要為那些痕跡負責。
Day 15 說「換一種眼睛」。BloodHound 就是那種眼睛的義肢。
但工具給圖,不會給直覺。讀圖的能力是慢慢養的——每打一台 AD 環境,就多認得幾種「關係的形狀」:哪一種連法代表可以 Kerberoast,哪一種代表有委派可以濫用,哪一種代表憑證就躺在某台機器上等你。Day 17 會拆開講。
圖是工具畫的。但看懂圖的是你,而看懂它需要時間——很多時間。
別找門,找關係。
那些線一直都在——差別只在,這一次讀它的人是你。