🗺️ 資安考證地圖

作業系統與端點強化:把每一扇門都關好,再多備幾道門

攻擊最後一定要落在某台電腦或伺服器上執行。網路邊界總有被突破的時候,主機本身有沒有多開的服務、太寬的權限、沒補的漏洞,決定了攻擊者進來之後能走多遠。

權限、白名單與系統強化 修補、虛擬修補與記憶體保護 AD 分層、PAM/JIT 與縱深防禦

💡 先搞懂問題:主機為什麼「裝好就能用」卻不安全

很多組織架一台新伺服器的方式是這樣的:把作業系統裝好、把網站或檔案服務架起來,確認大家連得上就上線。管理員帳號大家共用,因為方便交接;更新提醒跳出來先按「稍後」,因為怕重開機影響業務;同事需要什麼工具就自己下載安裝。這些做法的出發點都是方便,服務先開著以免之後要用,權限給大一點以免工作被擋。

問題在於作業系統與軟體的預設值同樣以方便為優先:用不到的服務開著、內建帳號還在、老舊協定沒關。每一個開著卻沒人用的服務、每一個沒補的已知漏洞,都是攻擊者可以試的門。更麻煩的是,入侵很少一步完成。攻擊者通常先找到一個入口,再在主機上執行自己的程式、設法拿到最高權限、留下下次還能回來的後門,最後用偷到的帳號擴散到其他主機。如果防守只做在第一步,這一步被突破,後面就一路暢通。

用一棟新落成的辦公大樓來想會清楚很多。交屋時,工班用的側門、卸貨口、舊鐵捲門都還能開,建商的臨時鑰匙也還在外面流通。負責安全的人要做的事是:封掉用不到的門、收回臨時鑰匙;每位員工的門禁卡只開他該去的樓層;大廳警衛只放「預約名單」上的訪客進來;門鎖廠公告某款鎖有瑕疵,就安排換鎖,零件還沒到就先加門鍊、派警衛盯著;總管理室那把能開所有門的萬用鑰匙,鎖在保全室裡,要用得登記。而且這些措施是一層套一層的:大廳警衛被騙過了,樓層還有門禁;樓層門禁被突破了,保險箱還有密碼。

按「▶ 下一步」,跟著攻擊者一步一步往主機深處走,看看每一步分別被哪一種防線對付;也可以直接點任一列。

圖 1 一次入侵的五個步驟(左)與本頁對應的防線(右)。這是教學用的簡化順序,真實攻擊不一定照這個次序。

回到資安:封掉用不到的門、收回臨時鑰匙,對應系統強化(Hardening):關閉不必要的服務與連接埠、停用或改名預設帳號,並依一份安全基準逐項鎖定設定。門禁卡只開該去的樓層,對應帳號與檔案權限的最小權限。大廳警衛只放預約名單上的人,對應應用程式白名單。換鎖是修補管理,零件沒到先加門鍊派警衛是虛擬修補與補償性控制。萬用鑰匙鎖在保全室、登記才借,是特權存取管理(PAM)與即時授權(JIT)。一層套一層,就是縱深防禦(Defense in Depth)。
這個比喻哪裡不準?
  • 大樓的門看得見,主機上的「門」大多看不見:一個預設開著的服務、一個設錯的檔案權限、一段沒檢查長度的程式碼,都可能是入口。所以強化要照著基準逐項檢查,而不是憑感覺巡一圈。
  • 換鎖通常不必停止營業,修補卻常常要重開機,甚至可能讓業務系統出錯。這是修補需要先測試、準備回復方案的原因,也是「知道有漏洞卻不能馬上補」這個難題的來源。
  • 大樓的門封了就一直是封的;主機的設定卻會被安裝程式、廠商維護人員、臨時排除故障的同事默默改回去。今天符合基準,不代表三個月後還符合,這叫組態漂移。
  • 記憶體保護這一類防護,在大樓裡找不到完全對應的東西。後面會另外用「訪客登記簿」來說明,但要記得它保護的是程式執行時的記憶體,不是實體的門。

🎮 互動實驗室

六個實驗室由內而外:先算清楚一個檔案的權限,再看什麼程式能跑、一台伺服器該關掉什麼、漏洞該怎麼排修補,接著用概念動畫看記憶體保護擋在哪一步,最後把所有防線疊成縱深防禦。畫面上的主機、帳號與程式都是虛構的示意,不會連到任何真實系統。

1Linux 權限計算器:755、644 到底開了什麼

Linux 把每個檔案的使用者分成三組:擁有者(owner)、群組(group)、其他人(others,主機上其餘所有帳號)。每組各有讀(r)、寫(w)、執行(x)三個開關,分別記作 4、2、1,加總就是一位數字。點圖上的格子、直接輸入數字,或點下方的常見設定,看看 ls -l 會怎麼顯示、每一組人實際能做什麼。範例檔案的擁有者是 root,群組是 staff。

2白名單 vs 黑名單:沒見過的程式能不能跑

一台會計部的電腦今天會陸續出現八支程式,有的是公司核可的,有的是惡意程式,其中幾支是防毒軟體還沒見過的新東西。先選一種管控模式,再把程式一支一支送進來,看看哪些被放行、哪些被擋下,最後比較兩種模式的成績。

目前是黑名單模式:只擋「已知是壞的」程式,其餘一律放行。按「▶ 送下一支程式」開始。

3主機強化體檢:替一台伺服器縮小攻擊面

虛構的檔案伺服器 fs-01(Windows Server)剛用預設值安裝上線。下面是依安全基準檢查出來的項目,勾選你要執行的強化措施,右邊的攻擊面分數會即時下降(分數是示意,越低代表攻擊者能試的門越少)。全部處理完之後,按「快轉三個月」看看組態漂移是怎麼發生的。

攻擊面100
這台主機所有項目都還是預設值,攻擊面分數 100。先從風險最高的項目開始勾,例如對網際網路開放的遠端桌面與 SMBv1。

4修補決策模擬:馬上補、排程補,還是先虛擬修補

同一週冒出好幾個漏洞,人力和停機時間都有限,不可能全部立刻處理。點一個情境,或自己調整下面五個條件,右邊的決策樹會亮出這個漏洞該走哪一條路,下方說明理由與接下來要做的事。

選一個情境開始。決策樹由上往下問三個問題:修補出了沒有、風險高不高、能不能停機。

5記憶體保護:寫太長的資料會蓋到哪裡、被誰擋下

想像大樓櫃台的訪客登記簿,「姓名」欄只有 8 格,緊接著是管理員蓋的「核對章」,再過去是「離開後要回到哪一樓」。如果寫字的人不看格子數一路寫下去,就會蓋到隔壁欄位。程式裡的緩衝區(buffer)也一樣:程式替輸入預留固定大小的空間,如果寫入時沒有檢查長度,多出來的資料就會蓋掉相鄰的記憶體,其中可能包括函式執行完要回到哪裡的返回位址。這就是緩衝區溢位(Buffer Overflow)。下面是純概念動畫,輸入只是一串字母,不含任何可執行的內容。

三個防護都先關著。先用「超長輸入」按幾次下一步,看看沒有任何保護時會發生什麼,再一個一個打開比較。

6縱深防禦:拆掉一層,下一層接得住嗎

圖上由外到內是七層防護,最裡面是要保護的資料。點任一層看它有哪些控制措施;取消勾選可以把那一層「拆掉」。選一種攻擊情境再按「▶ 發動攻擊」,紅點會由外往內走,停在第一個擋得住它的地方。

點圖上任一層,看這一層的控制措施。
七層都在。選一個情境按「▶ 發動攻擊」,再試著拆掉擋下它的那一層,看看誰接手。

📘 原理補完:把大樓接回主機的真實機制

前面的實驗室各自練一件事,這一節把它們接回正確的技術細節,並標出每一項的限制與容易混淆的地方。

1. 帳號與檔案權限:每個人只拿到工作需要的鑰匙

一切權限管理的前提是每人一個帳號。共用帳號讓事後查不出是誰做的,大型環境則用 LDAP 或 Active Directory 集中管理帳號。Linux 的帳號基本資料放在 /etc/passwd,所有人都能讀;密碼雜湊放在 /etc/shadow,只有 root 能讀,所以攻擊者拿下主機後最想拿的就是它。使用者下過的指令則記在家目錄的 .bash_history。

實驗室 1 的 rwx 對檔案和目錄意義不同,這是最常考的地方:

權限對一般檔案對目錄
r(4)讀取內容列出目錄裡有哪些檔名
w(2)修改內容在目錄裡新增、刪除、改名檔案(要搭配 x)
x(1)當成程式執行進入目錄、存取裡面的檔案

所以「能不能刪除某個檔案」要看的是它所在目錄有沒有寫入權限,而不是檔案本身。新建檔案的預設權限由 umask 決定,常見的 umask 022 會讓新檔案成為 644、新目錄成為 755。特殊位元方面,SUID(4)讓執行者暫時取得檔案擁有者的權限,SGID(2)取得檔案所屬群組的權限,用在目錄上則讓新檔案繼承目錄的群組;Sticky bit(1)用在共用目錄,讓使用者只能刪除自己的檔案。SUID 程式若屬於 root 又有漏洞或能被改寫,就是提權的捷徑,所以要定期用 find / -perm -4000 盤點。這些都屬於擁有者可以自行調整的自主存取控制;SELinux 則是 Linux 上強制存取控制(MAC)的實作,由系統政策決定,連 root 也受限制。存取控制模型的完整比較可以看存取控制模型。

Windows 的 NTFS 權限比 rwx 細,常見的標準權限由大到小有完全控制、修改、讀取和執行、列出資料夾內容、讀取、寫入。它有三個一定要懂的規則:一個人屬於多個群組時,各群組的允許權限會累加;子資料夾預設會繼承上層的權限;明確設定的拒絕優先於允許。另外,透過網路共用資料夾存取時,還要再和「共用權限」取比較嚴格的那一個。下圖用一個虛構的部門共用資料夾示範。

圖 2 NTFS 權限繼承。灰字是從上層繼承來的,深藍是在這一層明確設定的,紅字是拒絕。網路共用權限假設為「所有員工:讀取」。

帳號方面,Windows 內建的 Administrator 名稱人人知道,是猜密碼的頭號目標,建議停用或改名,管理工作改用具名的個人管理帳號;Guest 帳號應停用。UAC(使用者帳戶控制)讓管理員平常以一般權限執行,需要提高權限時才跳出確認,減少「一點到惡意程式就拿到整台電腦」的機會。Windows 最高權限的身分是 Administrator 與 SYSTEM,Linux/Unix 則是 root。

服務帳號是讓程式(備份、排程、資料庫服務)登入用的帳號,常被忽略:密碼寫在設定檔裡、多年沒換、為了省事直接加進網域管理員。正確做法是只給該服務需要的權限、禁止它互動式登入,並盡量改用 Windows 的受管理服務帳號(gMSA),由系統自動產生並輪換長密碼。服務帳號一旦權限過大,攻擊者只要拿到它的密碼或票證,就等於拿到整個網域。

判斷「哪些是 Windows 上的特權身分」時,要記得三種:內建的 Administrator 帳號;任何被加進本機 Administrators 群組的帳號,即使名字看起來像一般員工,權限也和管理員一樣;以及系統服務使用的 Local System(也就是 SYSTEM),它在本機的權限甚至比 Administrator 更高。root 是 Linux/Unix 的名稱,Windows 沒有這個內建帳號。盤點特權帳號時,要看的是群組成員,而不只是帳號名稱。

另外兩個常見的帳號強化設定:Linux 伺服器通常禁止 root 直接遠端登入(SSH 設定中關閉),管理員先用個人帳號登入、再用 sudo 取得需要的權限,這樣紀錄上看得出是誰做的;Windows 則設定帳戶鎖定閾值,連續輸錯密碼達到一定次數就暫時鎖住帳號,基準通常要求一個不大的非零次數(例如 5 次以內),設成 0 代表永遠不鎖,等於放任線上猜密碼。鎖定閾值也有副作用:攻擊者故意用大量錯誤密碼去試,就能讓一大批合法使用者被鎖在門外,所以要搭配監控來源、把對外登入入口收進 VPN 或加上多因子驗證。

2. 應用程式白名單與可攜式媒體:限制什麼能跑、什麼能接

白名單採預設拒絕:只有列在清單上的程式能執行,其餘一律擋下;黑名單則只擋已知的壞程式。實驗室 2 看到的差別就在這裡:面對沒見過的新威脅,白名單比較安全,代價是維護成本較高,每次軟體改版或新增工具都要更新名單。Windows 可用 AppLocker 或群組原則實作,規則可以依檔案路徑、檔案雜湊或發行者的數位簽章來定:雜湊最精確但每次改版都要重登,發行者規則較好維護,路徑規則最方便,但如果放行的路徑是一般使用者可以寫入的資料夾,攻擊者把程式丟進去就能執行。導入時常先用「僅稽核」模式觀察一段時間,確認不會擋到正常業務再正式啟用。白名單最適合軟體很少變動的環境,例如產線電腦、櫃台端點與伺服器。

可攜式媒體方面,隨身碟可以把惡意程式帶進與外網實體隔離(Air-Gapped)的工廠,也能把整份客戶資料帶出公司。常見管控是:用 AD 群組原則或端點管控軟體統一停用或設為唯讀、只允許登記過的裝置、關閉自動執行(AutoRun),並對允許使用的隨身碟加密。要特別注意 BadUSB:它竄改的是 USB 裝置的韌體,讓電腦把它當成鍵盤,插上就自動「打字」下指令,隨身碟裡不一定有任何檔案,所以光靠防毒掃描擋不住,需要限制未知的鍵盤類(HID)裝置。各種惡意程式的差異可以參考惡意程式類型。

同樣的道理也適用在其他「會自稱是某種裝置」的東西。一片開發板或一支特製的 USB 裝置,可以被設定成模擬一張網路卡,電腦把它當成新的網路介面,資料就可能經由它流出去。這種路徑繞過了「禁用外接儲存裝置」的規則,因為它根本不是儲存裝置。所以管控要以裝置類別與白名單為準,把鍵盤、網路介面這類裝置也納入,而不是只盯著隨身碟。

可攜式媒體本身也要當成資產管理:登載在資產清冊上,才知道公司有幾支、在誰手上;存放在上鎖的地方;存有敏感資料就加密;不再使用或報廢前,要把內容徹底清除,不能只刪檔案。如果發現外部人員私自帶隨身碟進來使用,那支隨身碟就是證物:先暫扣、保全證據,檢查它插過的電腦有沒有被感染,查那段時間的檔案存取紀錄確認有沒有資料被帶走,再依合約與資安規定處理。「記下型號就還給對方」等於放走證據。

另一條常見的執行入口是 Office 巨集。群組原則可以對 Word、Excel 等程式分別設定「封鎖來自網際網路之檔案中的巨集」,系統依檔案下載時被標上的來源標記判斷,郵件附件或網路下載的文件就不能執行巨集。這項設定在登錄檔中是依 Office 版本號(16.0 是 Office 2016 起共用的版本號)與應用程式分開存放的,所以 Word 的設定不會自動套用到 Excel。

3. 系統強化、GCB 與組態漂移

系統強化是依一份安全基準(Security Baseline)逐項調整設定:關閉不用的服務與連接埠、移除或改名預設帳號、停用有重大漏洞的老協定(例如 SMBv1)、限制遠端桌面只從管理網段連入、移除正式主機上不需要的工具,並啟用稽核記錄。基準可參考國際通用的 CIS Benchmark;我國政府則訂有 GCB(Government Configuration Baseline,政府組態基準),參考美國 USGCB 的做法,涵蓋 Windows、瀏覽器、辦公軟體、網路設備等常見項目的安全設定建議值。依資通安全責任等級分級辦法,A、B 級公務機關的應辦事項包含導入 GCB。大量主機通常用群組原則或 GCB 工具統一派送,派送前要先在測試環境確認不會影響業務系統。

強化不是做一次就結束。設定會在維護、安裝軟體、臨時排除故障時被改掉,一點一點偏離基準,這叫組態漂移,所以要定期用工具比對實際設定與基準、產生報表。比對中發現的差異有兩種處理方式:沒有理由的偏離就改回基準;業務上真的需要偏離,就走例外申請,先評估偏離帶來的風險、訂出補償性控制,再依權責核准並定期複審,不是呈報到最高層就算數,也不是「業界都這樣」就放行。要分清楚的是,GCB 這類組態工具檢查的是設定值是否符合基準,弱點掃描找的是軟體版本上的已知漏洞,兩者對象不同。另外,考題若問評估作業系統或資安產品本身安全等級的國際標準,答案是共同準則(Common Criteria,ISO/IEC 15408),它評估的是產品,不是你的主機設定。

GCB 的範圍不只作業系統。國家資通安全研究院公布的基準還包括瀏覽器、Office 等應用程式、資料庫(例如 SQL Server)與網路設備等類型,清單會隨版本增修。資安健診裡的「組態設定檢視」,就是拿這些基準去比對機關的電腦、瀏覽器與資料庫設定。

除了作業系統本身,裝在上面的服務也有常見的組態缺陷,強化時要一起處理:

還有一類主機要特別小心:能對全公司電腦派送程式的系統,例如修補派送伺服器(WSUS)、端點管理平台與防毒管理主機。它們平常用來推送更新,一旦被入侵,攻擊者就能在幾分鐘內把同一支惡意程式送到每一台電腦,不管各台裝的是哪一家防毒。這類主機應該和網域控制站一樣,放在最高保護層級來管理。

4. 修補管理與虛擬修補

系統強化是把用不到的門封起來、把設定調對;修補是修掉程式本身已知的漏洞,兩件事都要做。修補管理是一個持續的循環,按下方的「▶ 下一步」逐步看每個階段在做什麼。

按「▶ 下一步」從盤點資產開始,或直接點任一個階段。

圖 3 修補管理循環。左邊往下是「準備與判斷」,右邊往上是「執行與確認」,驗證完再回到盤點。

修補程式還沒釋出(零時差漏洞)、已釋出但需要時間測試,或設備根本不能停機時,就出現一段空窗期。這時的做法是虛擬修補(Virtual Patching):不動主機本身,而是在流量必經的 WAF 或 IPS 上加規則,針對這個漏洞的攻擊特徵擋下,例如 Log4Shell 時期在請求中檢查 jndi 查詢字串。它能爭取時間,但規則可能被變形繞過,漏洞本身也還在,最終仍要回到真正的修補。和它搭配的是補償性控制(Compensating Control),也就是原本的控制做不到時的替代方案:限制誰能連到這台主機、停用受影響的功能、加強監控。已經停止支援、不會再有修補的舊系統,則應從網路上隔離或規劃汰換。WAF 與 IPS 的位置可以對照防火牆與 DMZ。要注意兩個常見錯誤選項:「等廠商修補就好」什麼都沒做;「直接關掉整個服務」通常不符合業務需求,也不是題目要的答案。

也要分清楚一般網路防火牆能做到什麼。它依 IP 位址與連接埠決定放不放行;如果漏洞就在必須對外開放的網站或服務裡,惡意請求走的是合法的連接埠,防火牆看不出內容有問題。所以「遠端程式碼執行漏洞用防火牆擋住就好」是錯的觀念:能檢查應用層內容的 WAF/IPS 可以爭取時間,真正的解法還是修補或移除有漏洞的元件。另一個常見誤解是「零時差只會出現在新系統」。已停止支援的作業系統照樣會被找到新漏洞,差別是廠商不會再出修補,這個零時差永遠不會結束,只能隔離、補償或汰換。

案例:Log4Shell 需要記住的事實
  • Log4j 是 Java 程式常用的開源日誌函式庫,受影響的是 Log4j 2.x。2021 年底接連公布的 CVE-2021-44228(一般稱 Log4Shell)、CVE-2021-45046、CVE-2021-45105,是同一波事件。
  • 44228 的成因是日誌內容裡的 JNDI 查詢會被執行,攻擊者讓伺服器去連外部的 LDAP 等服務載入程式碼,形成遠端程式碼執行。JNDI 能用的協定不只 LDAP,也包括 RMI、DNS 等。
  • 三個漏洞的性質不同:45046 原本被評為阻斷服務,後來確認在特定設定下也能執行程式碼;45105 是無窮遞迴造成的阻斷服務,不能拿來執行程式碼。
  • 2.17.0 起修掉這三個漏洞,之後又有 2.17.1 修正另一個較難利用的問題,實務上應升到最新的穩定版。修補完成前,常見的虛擬修補是在 WAF 檢查請求裡的 jndi 字樣。

最後,有效的弱點管理至少要有兩件事並行:定期弱點掃描,知道自己有哪些漏洞;以及一套修補管理流程,確保找到的漏洞真的被排序、處理、驗證。只買新防毒或只掃不修,都不算弱點管理。

5. 記憶體保護、提權與後門

緩衝區溢位常見於 C/C++ 這類不會自動檢查邊界的語言。實驗室 5 看到的三道防護,各自擋在攻擊的不同步驟,下圖把它們排在同一條時間線上。點右邊的任一項看說明。

點右邊的任一個防護,看它擋在哪一步、怎麼擋。

圖 4 三道記憶體保護分別擋在不同步驟,所以彼此互補,通常一起啟用。最上面的「安全寫法」才是根本解。

機制做法擋在哪一步限制
Stack Canary在返回位址前放一個隨機檢查值,函式返回前比對返回前發現被蓋過,立刻中止檢查值若被洩漏,或攻擊不經過它(例如只改其他變數),就擋不到
ASLR程式、函式庫、堆疊與堆積每次執行放在不同位址讓攻擊者猜不到該跳去哪裡程式若洩漏任何一個位址,或隨機範圍太小,效果就會打折
DEP/NX把堆疊、堆積等資料區標記為不可執行塞進來的資料不能被當成程式執行擋不住改用程式裡原本就有的程式碼片段拼湊的手法,需要和 ASLR 搭配

這些機制都不修正程式錯誤本身,而是讓錯誤更難被利用,所以仍要搭配安全的程式寫法:寫入前檢查長度、使用會檢查邊界的函式,或改用記憶體安全的語言。另外兩個相關名詞也要認得:CPU 以特權環區分權限,作業系統核心在 Ring 0(核心模式),一般程式在權限較低的使用者模式;Spectre 利用處理器的分支預測與推測執行,從快取的時間差推敲出不該讀到的資料,這類硬體漏洞需要韌體、微碼與作業系統一起更新。

ASLR 也用在作業系統核心上,叫 KASLR(Kernel ASLR):核心與驅動程式每次開機載入的位置都不同。攻擊核心漏洞通常要先知道核心函式在哪個位址,所以情境若明確是「核心」的溢位且需要推測核心位址,KASLR 是最精確的答案;選項只有 ASLR 時,也選它,因為兩者是同一種位址隨機化的觀念。Windows 上還有一個 SafeSEH:程式出錯時會跳到「例外處理常式」,攻擊者曾經用溢位改寫這個跳轉目標,SafeSEH 只允許跳到編譯時登記過的處理常式。至於「可執行空間保護」(Executable Space Protection),是 DEP/NX 這一類做法的統稱。

記憶體相關的程式弱點不只一種,考試常要你分辨:

名稱發生什麼事根本對策
堆疊型溢位寫爆函式裡的區域變數,可能蓋到返回位址(實驗室 5 示範的就是這種)寫入前檢查長度,使用有邊界檢查的函式
堆積型溢位寫爆程式執行中動態要來的記憶體(heap),蓋壞相鄰的資料結構同上,並啟用堆積保護
整數溢位數字算超過型別能表示的範圍而繞回變小,常導致配置的空間太小,接著引發緩衝區溢位運算前檢查範圍
格式字串漏洞把使用者輸入直接當成 printf 這類函式的「格式」,輸入裡的格式符號會讓函式讀出甚至改寫記憶體格式固定寫死,輸入只當成參數傳入
記憶體洩漏程式要了記憶體、用完卻沒有歸還,時間一久可用記憶體被吃光、系統變慢或當機確實釋放,或使用自動管理記憶體的語言

C#、Java 這類受控語言在存取陣列時會自動檢查邊界,一般寫法不會發生傳統的緩衝區溢位;但 C# 允許在標記為 unsafe 的區塊裡直接操作指標,這一段程式就回到和 C 一樣的風險,程式碼檢測時要特別看。

不同漏洞要配不同的對策,把對策配錯是常見的錯誤選項:

漏洞合適的對策不夠或不對的做法
緩衝區溢位安全寫法為本,DEP、ASLR、Stack Canary 讓它難以被利用只靠防毒
遠端程式碼執行修補或移除有漏洞的元件;修補前用 WAF/IPS 虛擬修補只靠網路防火牆(服務本來就開著,擋不到內容)
指令注入不要把輸入交給系統的命令列直譯器,改用不經過它的 API;輸入以白名單驗證只用黑名單過濾特殊字元(容易被編碼繞過)
資源注入使用者只能從白名單裡選要存取的檔案、路徑或連接埠黑名單列舉危險名稱

權限提升(Privilege Escalation)是在同一台主機上從一般帳號往上拿到 root 或 Administrator,手段包括權限設錯的 SUID 程式、以高權限執行的服務漏洞、核心漏洞;從一台主機跳到其他主機則叫橫向移動,兩者不要混淆。拿到高權限後,攻擊者會設法持久化(Persistence):在登錄檔的 Run/RunOnce 機碼、系統服務或排程工作中加入自己的程式,讓每次開機都會執行;後門則是繞過正常驗證的秘密通道,連開發者留下的「維護後門」也可能被攻擊者找到並利用。DLL 側載則是把惡意 DLL 放在合法程式優先搜尋的路徑,讓合法程式把它載入執行。這些手法在 MITRE ATT&CK 裡分別屬於權限提升與持久化等戰術。防守這一段靠的是前面講的最小權限、記憶體保護,以及用安全基準比對找出多出來的帳號、服務與自動執行項目。

圖 1 的五步是為了對應防線而簡化的。教科書常把一次入侵分成五個階段:偵察(收集公開資訊)、掃描(探查有哪些主機、IP 與服務)、取得存取(真正打進去,例如利用緩衝區溢位、攔截通訊或破解密碼;得手的權限可能落在應用程式、作業系統或網路任一層)、維持存取(後門與持久化),以及清除痕跡。考題若問「取得存取」階段,用工具掃描有哪些主機與服務是前一階段的事,不屬於它。要注意社交工程是騙人,不是利用程式弱點;緩衝區溢位、SQL 注入、暴力破解才是對程式或系統本身下手。

站在防守方,有些工具與行為是值得告警的跡象。Netcat(nc)能在任意連接埠收發資料,常被拿來建立後門連線;wget、curl、FTP 這些能下載檔案的指令,常出現在攻擊者「從外面抓後門進來」的步驟,而 ping 只測試連線,不能傳檔。持久化也常會偽裝:一個取名像系統更新的排程工作,內容卻是用 PowerShell 略過執行原則、在背景隱藏執行指令碼,看名稱不能判斷,要看它實際執行什麼。

6. AD 網域防護與特權存取管理

Active Directory(AD)管著整家公司的帳號、群組與電腦權限,網域控制站上的帳號資料庫 ntds.dit 是攻擊者的終極目標。AD 防護的核心觀念是分層管理模型(Tier Model):把資產分成三層,Tier 0 是網域控制站與身分系統,Tier 1 是伺服器與應用程式,Tier 2 是一般工作站與使用者;每一層有自己的管理帳號,高層級的帳號不登入低層級的主機。原因是 Windows 登入時會在那台主機的記憶體裡留下可被竊取的憑證,網域管理員登入一台被入侵的工作站,等於把網域的鑰匙交出去。點下圖的兩個開關看看違反規則會發生什麼。

圖 5 AD 分層管理模型。綠色實線是允許的登入,紅色虛線是攻擊者能走的路。

其他重點:網域控制站只給極少數人管理,並從專用的管理工作站(PAW)登入;LAPS(本機管理員密碼解決方案)讓每台電腦的本機管理員密碼都不同且定期自動更換,攻擊者拿下一台,無法用同一組密碼走到下一台;高權限帳號放進 Protected Users 群組,並啟用 Credential Guard 保護記憶體中的憑證。BloodHound 能把 AD 的帳號、群組、主機與權限畫成關係圖,找出「從一般帳號走到網域管理員」的路徑,紅隊拿來規劃攻擊,藍隊拿來找該拆掉的權限。AD 裡出現來路不明的高權限帳號,要當成持久化跡象調查。

AD 和 LDAP 常被混為一談。AD 是微軟的目錄服務,也就是那套存放帳號、群組、電腦與原則的系統本身;LDAP 是存取目錄的通訊協定,AD 支援用它查詢與修改資料,預設走 389 埠,加密版 LDAPS 走 636。一個新建的網域預設會有 Builtin、Computers、Users 等容器與 Domain Controllers 組織單位。

AD 遭入侵時常見的幾個名詞:攻擊者從主機記憶體偷走使用者的 Kerberos 票證,拿到別台主機重用、不需要知道密碼,叫 Pass-the-Ticket;直接用偷到的密碼雜湊登入叫 Pass-the-Hash。這正是分層模型要避免高權限帳號留下憑證的原因。ntds.dit 在網域控制站運作時被系統鎖住,無法直接複製,攻擊者會改用磁碟區陰影複製(vssadmin、diskshadow)或 ntdsutil 的匯出功能取得一份副本,所以網域控制站上出現這些工具的執行紀錄要立刻追查,AD 的備份檔也要和網域控制站同等保護。

時間同步也是 AD 的一部分。Kerberos 驗證要求各主機時間接近(預設容許差 5 分鐘),日誌要對得起來也要時間一致。成本最低又一致的做法是:讓主要的網域控制站向可靠的外部標準時間來源校時,其他主機與設備再向網域控制站同步,而不是每台各自找來源。至於機關的資安健診,除了網路架構與封包層面的惡意活動檢視,也會檢查使用者電腦的更新狀況與目錄伺服器(AD)的組態設定。

特權存取管理(PAM,Privileged Access Management)專管少數高風險的特權帳號:管理員、服務帳號與委外廠商的維護帳號。它把這些帳號的密碼放進密碼保險箱集中保管並自動輪換,使用時由 PAM 代為登入並錄下整段操作。即時授權(JIT,Just-in-Time)更進一步:帳號平時沒有權限,提出工作單並核准後,才開通這次工作需要的範圍與時段,到期自動收回。拖動下方的滑桿,比較常設權限與 JIT 的「可被盜用時間」。

圖 6 一週 168 小時中,特權帳號「有權限」的時段(數字為示意)。帳號被盜時,攻擊者只能在有權限的時段用它。

要注意幾個常見的「看起來像最小權限、其實不是」的選項:永久管理員權限加上 MFA、只限制來源 IP、共用 root 密碼由兩人各保管一半,都沒有解決「權限一直開著」的問題;兩人分持密碼只適合平常封存、緊急時才啟用的破窗帳號(Break-glass)。PAM 和 IAM 的差別是:IAM 管所有使用者的身分與存取,PAM 專管少數高風險的特權帳號。

7. 縱深防禦與控制類型

縱深防禦把防護分成多層,每層用不同性質的控制:技術面(防火牆、EDR、加密)、管理面(政策、訓練、審核流程)與實體面(門禁、監視器)。控制也可以依作用時機分類:

類型作用本頁的例子
預防性擋在事情發生之前系統強化、修補、白名單、最小權限、DEP/ASLR、JIT
偵測性在事情發生時發現稽核記錄、組態漂移掃描、EDR 告警、Stack Canary 偵測到溢位
矯正性事後修復、恢復還原備份、隔離受感染主機、把漂移的設定改回基準
補償性原本的控制做不到時的替代方案無法修補時的虛擬修補與網路隔離、組態例外的額外管控
嚇阻性讓人打消念頭登入畫面的法律警語、明顯的監視器
指導性告訴人應該怎麼做資安政策、作業程序、端點使用規範
復原性把服務與資料恢復到正常狀態從離線備份還原、災後重建主機(不少教材把它併入矯正性)

分類時容易混的幾個:加密是預防性,因為資料就算被偷走也讀不懂;操作側錄與入侵偵測系統是偵測性;備份本身是為了復原。「指導性」是政策與規範,不是「回復設定」,回復設定屬於矯正性。若題目改用作用時機分成事前、事中、事後:監看入侵偵測系統、審查稽核日誌、即時監看監視器畫面,都是在事情發生當下或不久後察覺,屬於事中的偵測;弱點掃描的目的是在被攻擊前找出弱點以便修補,通常放在事前(也有教材因為它是在「發現問題」而列為偵測性,作答時先看題目採用哪一種分法)。

縱深防禦也叫分層防禦或洋蔥式防禦。它不限於機房這類實體場景,而是同時涵蓋管理、實體、技術三個面向;也不是買一個功能最強的產品擋住所有攻擊,那反而是單點防禦。多層防護的效果常用 4D 來描述,下圖由外往內看攻擊者會依序碰到什麼。

攻擊者從外往內 嚇阻 Deter 警語、明顯的監視器,讓人打消念頭 偵測 Detect IDS、EDR、日誌告警,盡早發現 延遲 Delay 網段隔離、多道驗證,拖慢他的腳步 拒止 Deny 存取控制、加密,最後拿不到資料 偵測得越早、延遲得越久,應變時間越充裕

圖 7 縱深防禦的 4D。延遲的目的是讓「偵測到」到「被攻破」之間有足夠時間讓人應變。

典型的多層做法,是把不同用途的設備放進不同網段,再在網段之間各自過濾流量,而不是只在個人電腦裝防毒,或只替每個人開帳號。縱深防禦是一套架構原則,它也不能取代資安託管或監控服務,兩者是互補的。

補償性控制在考題裡常以兩種情境出現。第一種是設備不能修補:停止支援的舊機台、醫療儀器、產線設備,合適的做法是放進獨立的 VLAN(網路微切分),只開放必要的來源 IP 與連接埠,並加上身分驗證與存取控制;多裝幾套防毒、提高掃描頻率或買保險,都沒有真的降低被入侵的機會。第二種是人力不足做不到職責分離:一個人身兼開發、上線與資料庫管理時,可以用增加操作紀錄與監控、提高稽核頻率、實施工作輪調來補償,把資安工作丟給其他業務單位則只是轉移問題。

實驗室 6 最後一個開關示範了縱深防禦最容易被忽略的前提:各層要彼此獨立。層數多不等於安全,如果每一層的管理介面都用同一組管理員帳號,這組帳號一被盜,好幾層就一起失守;只把防火牆換一個廠牌,也不算增加一層。

容易混淆的地方
  • 系統強化 vs 修補管理:強化是減少攻擊面、把設定調對;修補是修掉程式本身已知的漏洞。
  • 虛擬修補 vs 真正修補:虛擬修補只在前端擋住已知的攻擊路徑,漏洞還在;真正修補才是移除漏洞。
  • 白名單 vs 黑名單:白名單只放行已知的好程式(預設拒絕),黑名單只擋已知的壞程式;對未知威脅白名單較安全,但維護成本較高。
  • ASLR vs DEP:ASLR 讓位址難猜,DEP 讓資料區不能執行,兩者互補。
  • 提權 vs 橫向移動:提權是在同一台主機往上拿更高權限;橫向移動是擴散到其他主機。
  • /etc/passwd vs /etc/shadow:前者存帳號基本資料、所有人可讀;後者存密碼雜湊、只有 root 可讀。
  • GCB 工具 vs 弱點掃描:前者檢查設定值是否符合基準,後者找軟體版本上的已知漏洞。
  • ASLR vs KASLR:同一種位址隨機化,前者用在一般程式與函式庫,後者用在作業系統核心。
  • AD vs LDAP:AD 是目錄服務本身,LDAP 是存取目錄的協定(389/LDAPS 636)。
  • 指導性 vs 矯正性:指導性是政策與規範,告訴人該怎麼做;把設定改回正確、隔離受害主機是矯正性。
  • BadUSB vs 一般 USB 病毒:前者改的是裝置韌體、冒充鍵盤或網卡,後者是隨身碟裡的檔案;只禁用儲存裝置擋不住前者。

📌 考點補強:作業系統基本功、連接埠與易混淆快問快答

主機強化的題目常夾帶幾個作業系統的基本觀念,以及「看到某個連接埠要想到什麼服務」。這一節把它們補齊,最後用一組快問快答把全頁容易混淆的名詞再練一次。

1. 作業系統在做什麼、有哪幾種

作業系統夾在硬體與應用程式中間,負責三件事:提供使用者操作的介面;分配與管理 CPU、記憶體、檔案、裝置等資源;提供系統服務並保護各程式互不干擾。修圖、剪影片這類功能是應用程式的事,不是作業系統的職責。依「怎麼分配 CPU、給幾個人用」,常見的分類如下:

類型重點
分時系統把 CPU 時間切成固定的小片段,輪流分給每個程式,時間到就換下一個,讓多個程式看起來同時在跑(常見的輪流排程叫 Round-Robin)
多人多工多位使用者經由終端機或工作站登入同一台主機,各自同時執行多個程式,例如 Linux/Unix 伺服器
單人多工一個人同時開多個程式,例如一般個人電腦
即時系統重點是「一定要在期限內完成」,用在工控、醫療、車用設備,不是平均分時間
多處理機系統硬體上有兩顆以上的 CPU 一起運算,講的是硬體架構,不是排程方式

多個程式共用資源時,可能發生死結(Deadlock):每個程式都抓著別人需要的資源、又在等別人手上的資源,結果誰都動不了。死結要同時滿足四個條件才會發生:互斥(資源一次只能給一個程式)、持有並等待(抓著資源的同時還在等別的)、不可搶奪(資源不能被強制收回)、循環等待(彼此等成一個圈)。所以如果資源「可以被強制收回」,就破壞了其中一個條件,反而是避免死結的方法。

作業系統保護自己的幾個機制:行程隔離讓每個執行中的程式有自己的記憶體空間,一個程式當掉或被入侵不會直接改到別的程式;抽象介面讓使用者與程式不必知道硬體細節就能使用資源;安全模式只載入最基本的驅動程式開機,常用來排除故障或清除開機就會自動執行的惡意程式。CPU 本身則用特權環把權限分層,點下圖的任一環看說明。

Ring 3一般應用程式 Ring 2 Ring 1 Ring 0核心 權限 越內越高
點任一環,看哪些程式在這一層執行。

圖 8 x86 的特權環。主流作業系統實際上只用 Ring 0(核心模式)與 Ring 3(使用者模式)。

兩個平台的小常識也常出現:Windows 的可執行檔有 .exe、.com,批次檔 .bat 也能直接執行,程式格式稱為 PE;ELF 是 Linux 與其他類 Unix 系統的執行檔格式,Windows 不能直接執行。更新作業系統的工具,Windows 是 Windows Update(舊版命令列工具叫 wuauclt,企業內用 WSUS 集中派送),Debian/Ubuntu 用 apt 或 apt-get,Red Hat 系列用 yum 或 dnf。單獨一個 update 不是指令,它只是 apt-get update 這類指令後面的參數。

2. 看到連接埠要想到什麼

強化與日誌判讀的題目常只給一個埠號,要你判斷是什麼服務、有沒有問題。下表是和主機強化最相關的幾個:

埠號服務強化重點
22SSH禁止 root 直接登入,改用金鑰並限制來源
23Telnet明文傳輸,應停用改用 SSH
389/636LDAP/LDAPS目錄查詢,外部不應直接連到網域控制站
445SMB 檔案分享停用 SMBv1,邊界防火牆封鎖對網際網路的進出
1433Microsoft SQL Server資料庫不應對外開放,只允許應用程式主機連入
3389RDP 遠端桌面不對網際網路開放,經 VPN 或跳板並加多因子驗證
5900VNC另一種遠端桌面軟體,常被遺忘在主機上,應盤點移除

所以如果紀錄顯示外部 IP 在深夜連到內部主機的 3389,意思是有人用遠端桌面登入那台主機;同時出現 1433,代表對方也直接連上了資料庫服務。這兩個埠本來就不應該讓外部直接碰到。

3. 易混淆快問快答

7一題一秒:控制類型與易混淆名詞

每張卡片描述一個情境或現象,選出它屬於哪一類或是哪個名詞。答完會立刻告訴你對錯與理由,按「下一張」繼續,全部答完會列出你答錯的卡片。可以切換題組,只練控制類型或只練名詞。

第一張卡片已經出現,選一個答案開始。

✅ 自我檢測

以下是原創情境題,點選答案後會立即顯示對錯與解析。

🎯 重點整理:考前 30 秒

  1. Linux 權限:擁有者/群組/其他人各有 r=4、w=2、x=1;755 是 rwxr-xr-x,644 是 rw-r--r--,600 只有擁有者能讀寫。刪除檔案看目錄的 w;SUID 以擁有者身分執行,是提權熱點,用 find / -perm -4000 盤點;/etc/shadow 存密碼雜湊、只有 root 可讀。
  2. Windows 帳號與 NTFS:權限依群組累加、子資料夾預設繼承、明確拒絕優先,網路存取再和共用權限取較嚴格者。內建 Administrator 停用或改名、Guest 停用,UAC 讓管理員平常以一般權限執行;服務帳號只給必要權限,可改用 gMSA。
  3. 白名單 vs 黑名單:白名單預設拒絕、只放行核可程式,較能擋未知威脅但維護成本高(AppLocker);USB 用群組原則統一管控、關閉自動執行,BadUSB 會冒充鍵盤,防毒擋不住。
  4. 系統強化:關掉不需要的服務、埠、帳號、老協定與工具,依 CIS Benchmark 或 GCB 基準設定;定期比對找出組態漂移,例外要先評估風險、訂補償性控制、依權責核准並定期複審。
  5. 修補管理:盤點、取得、評估、測試、部署、驗證,並備好回復方案;多個修補依風險排序(可遠端利用、已被攻擊、直接對外者先)。修補未出或不能停機時,用 WAF/IPS 虛擬修補加補償性控制頂住,但最終仍要真正修補。
  6. 記憶體保護:Stack Canary 擋在返回前、ASLR 讓位址猜不準、DEP/NX 讓資料區不能執行,三者互補但不修正程式錯誤;提權是同一台往上拿權限,持久化靠 Run 機碼、服務、排程與後門。
  7. AD、PAM 與縱深防禦:AD 分三層、高層帳號不登入低層主機,LAPS 讓本機管理員密碼每台不同;PAM 管密碼保險箱、輪換與錄影,JIT 讓權限只在需要時短暫存在。多層獨立的控制並用就是縱深防禦,共用同一組帳號會讓多層一起失守。
  8. 作業系統基本功與連接埠:分時系統把 CPU 切成時間片輪流用;死結四條件是互斥、持有並等待、不可搶奪、循環等待;核心在 Ring 0、應用程式在 Ring 3;ELF 是 Linux 執行檔。記住 22 SSH、389 LDAP、445 SMB、1433 SQL Server、3389 RDP。
  9. 縱深防禦與控制補充:4D 是嚇阻、偵測、延遲、拒止;指導性是政策規範,回復設定是矯正性;加密是預防、操作側錄是偵測、備份是復原。KASLR 是核心的位址隨機化;格式字串、整數溢位、記憶體洩漏要分清;防火牆擋不住已開放服務上的遠端程式碼執行。