1. 程式人生 > >系統安全概述

系統安全概述

系統安全概述

主要簡單介紹Linux,Windows,Android以及軟體系統的安全,瞭解常見的系統安全常識,會進行簡單的安全配置,對各類的系統安全有一個瞭解。

Linux 系統安全概述

Linux作業系統誕生於1991年,它是UNIX的一種典型的克隆系統。它是一個基於POSIX和UNIX的多使用者,多工,支援多執行緒和多CPU的作業系統,同時Linux也繼承了UNIX以網路為核心的設計思想,也是一個性能穩定的多使用者網路作業系統。

開源,開放,免費是Linux的魅力所在。Linux還具有良好的可移植性,Linux編譯後可以在大量處理器和具有不同體系結構約束和需求的平臺上執行。經過20年的發展,Linux作業系統成為在伺服器,嵌入式系統和個人計算機等多個方面得到廣泛應用的作業系統。

核心簡介

核心指的是一個提供硬體抽象層,磁碟檔案及檔案系統控制,多工等功能的系統軟體。一個核心並不似一個完整的作業系統。一套基於Linux核心的完整作業系統叫做Linux作業系統,或者是GNU/Linux。裝置驅動程式可以完全訪問硬體。Linux內的裝置驅動可以方便的以模組化的形式設定,並在系統執行期間直接裝載或解除安裝。

Linux是一個一體化核心系統。

Linux核心編號方式為: 主版本號.次版本號.修訂版本號

常用核心命令
檢視核心資訊:uname -a
檢視已載入模組:lsmod
載入核心模組:insmod filename
刪除核心模組:rmmod filename

OpenSSH安全配置

OpenSSH是SSH協議的免費開源實現。SSH協議族可以用來進行遠端控制,或在計算機之間傳檔案。而實現該功能的傳統方式,如Telnet(終端模擬協議),rcpftp,rsh都是極不安全的,並且會使用明文傳送密碼。OpenSSH提供了服務端後臺程式和客戶端工具,用來加密遠端控制元件和檔案傳輸中的資料,並由此來替代原來的類似服務。OpenSSH是使用SSH透過計算機網路加密通訊的實現。

Linux中的SSH服務可以通過/etc/ssh/sshd_config檔案進行配置

常用配置命令

  • 禁止root使用者登入:

    #Authentication:
    LoginGraceTime 120
    PermitRootLogin no
    StrictModes yes

  • 限制SSH驗證次數:

    MaxAuthTries 6

  • 禁止證書登入

    PubkeyAuthenticationno

  • 使用證書認證代替密碼認證

    PasswordAuthenticationno

  • 禁止使用客戶端的密碼記憶功能

    ChallengeResponseAuthentication yes

  • 禁止SSH埠對映

    AllowTcpForwarding no

  • IP地址限制

    可以通過對/etc/host.allow修改來設定允許登入的IP地址
    sshd:<IP地址> <IP地址>
    通過修改/etc/hosts.deny來設定禁止訪問的IP地址
    sshd:<IPd地址>

Shell安全

Shell(殼層)在電腦科學中是指“提供使用者使用介面”的軟體,通常指的是命令列介面的直譯器。一般來說,Shell是指作業系統中,提供訪問核心所提供的服務的程式。

常用配置命令

  • 記錄系統管理員的操作記錄

    (1)以root使用者登入,在/etc/profile.d/下新建儲存命令的檔案history_command檔案
    (2)編輯history_command檔案
    export HISFILE=$HOME/.bash_history
    export HISTSIZE=1200
    export HISTFILESIZE=1200
    export HISTCONTROL=ignoredups
    export HISTTIMEFORMAT=“‘whoami’%F %T”
    shopt -s histappend
    typeset -r HISTTIMEFORMAT

許可權管理和控制

  • 檢視檔案的詳細資訊

    ls -l

  • 改變檔案所屬使用者和組

    chown <要授予的許可權>

  • 修改檔案的許可權

    chmod <要授予的許可權>

iptables(防火牆)配置

iptables是用來設定,維護和檢查Linux核心的IP分組過濾規則的,它功能強大,主要分為三個表,每個表內有對應的規則鏈:

  1. filter是預設表,包含了內建的鏈INPUT(處理進入的分組),FORWARD(處理轉發的分組)和OUTPUT(處理本地生成的分組)

  2. nat表被查詢時表明遇到了產生新的連線的分組,由三個內建的鏈構成。PREROUTING(修改到來的分組),OUTPUT(修改路由之前本地的分組),POSTROUTING(修改準備出去的分組)

  3. mangle表用來對指定的分組進行修改。由兩個內建規則。PREROUTING(修改路由之前進入的分組),OUTPUT(修改路由之前本地的分組)

常用配置命令

  • 檢視iptables規則

    iptables -L

  • 設定chain策略

    iptables -P INPUT DROP

  • 清空全部規則

    iptables -F

  • 網口轉發規則

    iptables -A FORWARD -i eth1 -j ACCEPT

  • 埠轉發規則

    iptables -t nat -A PREROUTING -p tcp -d <本地IP地址> -dport <要轉發的埠> -j DNAT --to <目的地址IP:埠號>

常用安全策略

Linux作業系統下有如下常用安全策略:

密碼長度,session超時時間,刪除不用的賬號和組,限制Root使用者直接Telnet或者rlogin,sshd登入

檢查是否存在除root之外UID為0的使用者,確保root使用者的系統路徑中不包含父目錄

查詢系統中沒有屬主的檔案,查詢系統中的隱藏檔案,判斷日誌與審計是否合規,登入超時設定,禁用不必要的服務

Window安全綜述

埠安全

常用埠
20埠:FTP資料傳輸,FTP伺服器使用TCP20埠連線客戶端進行資料的傳輸

21埠:FTP訊息控制,在被動模式下,FTP客戶端連線FTP伺服器時先連線伺服器的21埠進行協商,協商完成後根據協商的內容進行資料傳輸

22埠:SSH連線,一般預設使用TCP22埠進行系統的遠端管理

23埠:Telnet使用的埠,在Windows下可以用“Telnet+伺服器IP+埠”的方式來進入遠端主機的指定埠。也可以用來探測目的主機是否開放指定埠

25埠:SMTP服務的傳輸郵件埠,客戶端及郵件伺服器預設都是用25埠作為郵件傳送埠

53埠:DNS伺服器開放這個埠為客戶端提供域名解析服務

80埠:WEB服務,一般提供網頁服務

110埠:POP3服務,用於收取郵件的埠

135埠:遠端過程呼叫(RPC)服務,很多服務都依賴於這個服務

139埠:Windows檔案和印表機共享,可以用於共享檔案

143埠:IMAP服務,也是用來接收郵件的服務,與POP3相比能提供更豐富的功能

389埠:LADP協議的埠,這是一個輕量級的目錄訪問協議

443埠:用於HTTPS(加密的HTTP連線),提供安全的網站服務

995埠:加密的POP3服務埠

3389埠:遠端桌面服務,預設情況下系統管理員有遠端桌面登入的許可權

3306埠:MySQL資料庫預設的埠,容易被暴力破解導致洩密

27017埠:MongoDB資料庫預設埠,也容易導致洩密發生

修改預設埠

如何修改遠端桌面預設埠

賬戶安全

修改預設使用者名稱,設定複雜密碼

設定的密碼長度最好在8位以上,並且有大小寫字母和特殊字元的混合,Windows Server預設的密碼有效期為90天。

刪除多餘使用者

刪除系統中不需要的多餘使用者,減少被黑客利用的可能性

啟用密碼策略

在本地安全策略中啟用密碼策略,強制使用高強度的密碼

Android系統安全

Android是一種基於Linux的,自由的,開源的作業系統。它主要使用與移動裝置以及現在比較流行的IoT裝置,由Google和開放手機聯盟開發。Android系統機構可分為四層,從下到上依次為:核心層,系統執行庫層,應用程式框架層,應用層。

Android將安全設計貫穿整個個系統架構的各個層面,覆蓋系統核心,虛擬機器,應用程式框架層及應用程式層的各個環節。

系統安全機制

Android程序沙箱隔離機制

Android應用在安裝時會被賦予獨特的使用者標識(UID),每一個Android應用程式都執行在一個獨立的Dalivik虛擬機器中,而每個虛擬機器都位於單獨的一個Linux程序中,彼此之間只能通過程序間通訊來交換資料。這樣保證了單獨程式的崩潰或者是惡意行為不會對其他的程式產生太大的影響。

應用程式簽名機制

每個應用程式在被安裝之前都會被檢查是否進行了數字簽名。數字簽名由開發者在開發完成之後使用自己的私鑰進行完成。當應用升級時需要檢查新版應用的數字簽名是否與已安裝的應用相同,否則會被當成一個新的應用程式。通過數字簽名可以有效的防止惡意軟體替換已安裝的應用。

許可權宣告機制

Android應用想要進行一些操作,就需要提前先獲取相應的系統許可權,例如需要進行網路連線就需要先獲取網路連線的許可權才可以執行操作。不同級別要求應用程式使用許可權的認證方式也不一樣,Normal級別申請即可使用,Dangerous級需要安裝時由使用者確認,Signature和SignatureOrSystem級則必須是系統使用者才可以。在Android 6.0的版本之後又引入了動態許可權管理機制,程式不僅僅在安裝時需要使用者確認所需許可權,在執行時也需要使用者確認,這樣進一步的保證了整個系統的許可權安全。

程序通訊機制

Android的跨程序通訊通過基於記憶體共享的Binder實現,提供輕量級的遠端呼叫,通過介面描述語言(AIDL)定義介面和交換資料的型別,確保程序間通訊的資料不會溢位越界。

記憶體管理機制

基於Linux的低記憶體管理機制,設計實現了獨特的LMK,將程序重要性分級,分組,當記憶體不足時,自動清理低級別程序所佔用的記憶體。同時引入Ashmem記憶體機制,使Android具備清理不再使用共享記憶體區域的能力。

Root

在Android系統上獲取超級使用者許可權的過程叫做root,超級使用者擁有全部檔案的與程式的許可權,因此手機廠商出於安全考慮會在出廠時關閉手機的root許可權,手機系統執行在普通使用者許可權下,使用者無法作業系統中的檔案和資料。

Root的作用及危害

作用:

  1. 解除安裝手機自帶的軟體
  2. 安裝一些特殊的軟體
  3. 啟用或禁用自啟動程式
  4. 好奇

危害:

  1. 硬體危害:root後可能導致一些檔案丟失,影響手機電流或照明功率,進而燒壞硬體
  2. 系統危害:root後可能導致系統不穩定,出現無法開機或者頻繁自動重啟的現象
  3. 軟體危害:root後可能導致一些軟體執行異常,產生充電緩慢,待機縮短等情況
  4. 資訊洩露風險:手機root後會導致惡意軟體容易入侵到手機,同時由於處於root狀態,容易被惡意軟體獲取到個人機密資訊

Root原理

Android獲取root其實和Linux獲取root使用者是一樣的。在Linux系統下輸入su root並輸入密碼即可切換到root使用者,其實就是將uid(使用者id)和gid(組id)設定為0。

在Android系統中,獲得root許可權比沒有root許可權多了兩個東西,一個是su二進位制檔案,一個是superuser.apk,su用來獲取root許可權的命令,superuser.apk是一個管理工具,可以對root許可權進行管理和提示。

Root的過程其實就是把su檔案放到/system/bin/Superuser.apk放到system/app下面,還需要設定/system/bin/su可以讓任意使用者執行。

Root思路

Linux檔案許可權:

-rwxr-xr-x:r表示該檔案可讀,w表示該檔案可寫,x代表該檔案可執行,-表示沒有許可權。第一組rwx表示檔案所有者的許可權,第二組rwx表示和檔案所有者同一組的人的許可權,第三組rwx表示其他使用者對該檔案的許可權

rsw他的執行許可權標識位是一個s,s表示任何一個使用者執行該檔案都擁有檔案所有者的許可權。若檔案所有者是root使用者,則任何使用者都可以以root使用者的許可權執行該檔案。

其實實現Android的root主要是將所有者是root的su命令檔案放到指定位置即可。

cp /data/temp/su/system/bin/#copy su 到 /system/分割槽
chown root:root su #su 的所有者設定成root
chmod 4775 /system/bin/su #把su 設定成-rwsr-xr-x

但是上邊的三行命令都需要在root許可權下才能執行成功,也就是說只有在root許可權下才能執行上邊的三條命令,但這三條命令是為了獲得root許可權,因此這是一個邏輯閉環。

目前實現root有兩種思路:

  1. 找到一個已經有root許可權的程序來完成上述命令,一般多為利用系統漏洞進行提權,常見的如adbd,rild,mtpd,vold等程序都是有root許可權的。

  2. 另一種就是通過系統外植入,例如通過Recovery刷機的形式刷入su