主機防護的基本工作

主機防護的基本工作

前言大綱

資安相關網站

主機防護工作、基本三步驟

1、隨時更新系統軟體

Ubuntu 安裝完畢之後,必須進行更新,以獲得最新的軟體與系統程式,平常也要經常更新,以保持系統在最穩定、最安全的狀態,指令如下:

  • 指令一:$sudo apt update
    • 說明:用來取得遠端更新伺服器的套件檔案清單。
  • 指令二:$sudo apt -y dist-upgrade
    • 說明:更新套件。
  • 指令三:$sudo apt clean
    • 說明:清除更新時所下載回來的更新(安裝)檔案。
  • 指令四:$sudo apt autoremove
    • 說明:自動清除更新後用不到的舊版本檔案(例如舊的核心程式)

2、限制連線埠口與服務

當我們的主機啟動了一些服務,相對應的這些服務就會開啟一些Port (埠口) 。

當啟動一個網路服務,這個服務會依據 TCP/IP 的相關通訊協定啟動一個埠口在進行監聽, 那就是 TCP/UDP 封包的 port (埠口) 了。我們知道網路連線是雙向的,伺服器端得要啟動一個監聽的埠口, 用戶端得要隨機啟動一個埠口來接收回應的資料才行。

再來就是要來瞭解一下,我們的主機到底是開了多少的 port 呢?由於 port 的啟動與服務有關,那麼『服務』跟『 port 』對應的檔案是哪一個?再提醒一次呦!是『 /etc/services 』 啦!

Linux中,主要用來觀察 port 的則有底下兩個程式:

  • netstat:在本機上面以自己的程式監測自己的 port;
  • nmap:透過網路的偵測軟體輔助,可偵測非本機上的其他網路主機,但有違法之虞。

細節繁多,另闢說明如下:

3、啟動 SELinux(AppArmor) 來限制網路服務的權限

SELinux 使用所謂的委任式存取控制 (Mandatory Access Control, MAC) ,他可以針對特定的程序與特定的檔案資源來進行權限的控管! 也就是說,即使你是 root ,那麼在使用不同的程序時,你所能取得的權限並不一定是 root ,而得要看當時該程序的設定而定。 如此一來,我們針對控制的『主體』變成了『程序』而不是『使用者』喔!因此,這個權限的管理模式就特別適合網路服務的『程序』了! 因為,即使你的程序使用 root 的身份去啟動,如果這個程序被攻擊而被取得操作權,那該程序能作的事情還是有限的, 因為被 SELinux 限制住了能進行的工作了嘛!

舉例來說, WWW 伺服器軟體的達成程序為 httpd 這支程式, 而預設情況下, httpd 僅能在 /var/www/ 這個目錄底下存取檔案,如果 httpd 這個程序想要到其他目錄去存取資料時,除了規則設定要開放外,目標目錄也得要設定成 httpd 可讀取的模式 (type) 才行喔!限制非常多! 所以,即使不小心 httpd 被 cracker 取得了控制權,他也無權瀏覽 /etc/shadow 等重要的設定檔喔!

AppArmor 是作為 SELinux 的替代品出現的,因為對 SELinux 的批評者認為它難以讓管理員設定和維護。

這裡,我們不做深入研究,只是做基本的防護,所以當有異常時,我們得了解SELinux 的觀察、及如何啟動與關閉。

SELinux 的觀察

並非所有的 Linux distributions 都支援 SELinux 的,所以你必須要先觀察一下你的系統版本為何! SELinux 支援三種模式,分別如下:

  • enforcing:強制模式,代表 SELinux 運作中,且已經正確的開始限制 domain/type 了;
  • permissive:寬容模式:代表 SELinux 運作中,不過僅會有警告訊息並不會實際限制 domain/type 的存取。這種模式可以運來作為 SELinux 的 debug 之用;
  • disabled:關閉,SELinux 並沒有實際運作。

那你怎麼知道目前的 SELinux 模式呢?就透過 getenforce 吧!

  • $getenfore     //就顯示出目前的模式為 Enforcing 囉!

另外,我們又如何知道 SELinux 的政策 (Policy) 為何呢?這時可以來觀察設定檔啦:

  • $vim /etc/selinux/config  

SELinux 的啟動與關閉

上面是預設的政策與啟動的模式!你要注意的是,如果改變了政策則需要重新開機;如果由 enforcing 或 permissive 改成 disabled ,或由 disabled 改成其他兩個,那也必須要重新開機。這是因為 SELinux 是整合到核心裡面去的, 你只可以在 SELinux 運作下切換成為強制 (enforcing) 或寬容 (permissive) 模式,不能夠直接關閉 SELinux 的! 如果剛剛你發現 getenforce 出現 disabled 時,請到上述檔案修改成為 enforcing 然後重新開機吧!

如果你已經在 Enforcing 的模式,但是可能由於一些設定的問題導致 SELinux 讓某些服務無法正常的運作, 此時你可以將 Enforcing 的模式改為寬容 (permissive) 的模式,讓 SELinux 只會警告無法順利連線的訊息, 而不是直接抵擋主體程序的讀取權限。讓 SELinux 模式在 enforcing 與 permissive 之間切換的方法為:

不過請注意, setenforce 無法在 Disabled 的模式底下進行模式的切換喔!

AppArmor 的啟動、關閉與觀察

apparmor有兩種工作模式,enforcement和complain

  • enforcement 模式下,應用將嚴格遵循配置文件裏列出的限制條件,未被授權的訪問將被拒絕。
  • complain模式下,如果應用違反了配置文件裏的限制條件,apparmor只是對程序的行爲進行記錄,不會拒絕訪問。

檢查AppArmor的當前狀態:

  • $sudo apparmor_status

完全禁用AppArmor,請執行以下操作:

  • $sudo systemctl disable apparmor
  • 重新啟動系統。

參考文件 : 


防護工作 - 針對不同型態的攻擊

"取得帳號資訊後猜密碼" 的防護工作

  • 減少資訊的曝光機會:
    • 例如不要將 Email Address 隨意散佈到 Internet 上頭。
  • 建立較嚴格的密碼設定規則:
  • 如果主機夠穩定且不會持續加入某些帳號時,也可以考慮使用 chattr 來限制帳號 (/etc/passwd, /etc/shadow) 的更改。
  • 完善的權限設定:
    • 由於這類的攻擊方式會取得你的某個使用者帳號的登入權限, 所以如果你的系統權限設定得宜的話,那麼攻擊者也僅能取得一般使用者的權限而已,對於主機的傷害比較有限啦! 所以說,權限設定是重要的。
    • 參考 : 檔案權限設定--之 --  

"利用系統的程式漏洞『主動』攻擊 " 的防護工作

"利用社交工程作欺騙"  的防護工作

  • 追蹤對談者:
    • 不要一味的相信對方,你必須要有信心的向上呈報, 不要一時心慌就中了計!
  • 不要隨意透露帳號/密碼等資訊:
    • 最好不要隨意在 Internet 上面填寫這些資料, 真的很危險的!因為在 Internet 上面,你永遠不知道對方螢幕前面坐著的是誰?

"利用程式功能的『被動』攻擊"  的防護工作

  • 隨時更新主機上的所有軟體:
    • 如果你的瀏覽器是沒有問題的, 那對方傳遞惡意程式碼時,你的瀏覽器就不會執行,那自然安全的多啊!
    • 參考 : Ubuntu 的更新與升級
  • 較小化軟體的功能:
  • 不要連接到不明的主機:其實這個才最難! 因為很多時候我們都用 google 在搜尋問題的解決之道啊,那你如何知道對方是否是騙人的? 所以,前面兩點防備還是很重要的!不要以為沒有連接上惡意網站就不會有問題啊!

"蠕蟲或木馬的 rootkit"  的防護工作

  • 不要隨意安裝不明來源的檔案或者是不明網站的檔案資料。
  • 不要讓系統有太多危險的指令:例如 SUID/SGID 的程式, 這些程式很可能會造成使用者不當的使用,而使得木馬程式有機可趁!
  • 可以定時以 rkhunter 之類的軟體來追查。

"DDoS 攻擊法 (Distributed Denial of Service )" 的防護工作

這種攻擊方法也是最難處理的,因為要嘛就得要系統核心有支援自動抵擋 DDoS 攻擊的機制, 要嘛你就得要自行撰寫偵測軟體來判斷!真是麻煩啊~而除非你的網站非常大, 並且『得罪不少人』,否則應該不會被 DDoS 攻擊啦! ^_^

fail2ban

Fail2ban 是一套以 Python 語言所撰寫的 GPLv2 授權軟體,藉由分析系統紀錄檔,並透過設定過濾條件 (filter) 及動作 (action),當符合我們所設定的過濾條件時,將觸發相對動作來達到自動化反應的效果 (如封鎖來源 IP、寄信通知管理者、查詢來源 IP 資訊等)
可以防止一些常見的服務被攻擊 ex: SSH, ftp, apache。

原理

  • 分析 log 檔案 ( 定義 filter ),把疑似攻擊的連線封鎖( action )
安裝
  • $sudo apt install fail2ban

設定檔結構

  • jail.conf 設定 filter 與 action 的關聯性, 建議自定義寫在 jail.local, jail.conf 在系統更新或升級的時候可能會變動。
  • filter.d/ 存放 filter 的設定檔, filter 定義攻擊篩選條件。
  • action.d/ 存放 action 的設定檔, action 定義後續執行動作 ex: 「sendmail 寄信通知」、「iptables 阻擋來源位址」、「使用 whois 查詢來源 domain 資訊」

參考: 清華大學-Fail2ban

"...其他" 的防護工作

  • 設定規則完善的防火牆:
  • 核心功能:
    • 這部份比較複雜,你必須要對系統核心有很深入的瞭解, 才有辦法設定好你的核心網路功能。
  • 登錄檔與系統監控:


參考資料

特色、摘要,Feature、Summary:

關鍵字、標籤,Keyword、Tag:

  • Ubuntu,Linux,Security,

留言

這個網誌中的熱門文章

Ubuntu 常用指令、分類與簡介

iptables的觀念與使用

網路設定必要參數IP、netmask(遮罩)、Gateway(閘道)、DNS

了解、分析登錄檔 - log

Python 與SQLite 資料庫

Blogger文章排版範本

Pandas 模組

如何撰寫Shell Script

查詢指令或設定 -Linux 線上手冊 - man

下載網頁使用 requests 模組