pdx-kernel spec 安全操作系統開發目標 一、Usr 證書 二、Imp 證書 三、Exe 證書

安全操作系統開發目標

1、實現《一種基於內核加固的、防範操作系統超級賬戶作惡的權限控制方法》專利文檔中所提及的核心功能,主要是通過usr/imp/exe授權以及相應規則在kernel級別的驗證來實現防止root作惡的核心功能;

2、圍繞核心功能開發相關配套工具,目標是讓pdx kernel使用起來更加方便,工具主要包括數字證書的製作、申請、替換、撤銷,以及白名單的製作與簽名,還有對接了kek_login的sshd服務以及login程序;

3、對核心安全規則進行補充,主要用來對磁盤進行保護,規則還在定製中,目標是削弱root的磁盤權限,無法隨意刪除任意目錄,將文件/目錄的讀寫權限與數字證書或簽名綁定在一起以達到此目的;

4、設計一套管理系統,用來統一管理各種授權的申請與撤銷等,對終端系統進行統一集中管理,對關鍵操作日誌進行統一收集,或直接寫入utopia區塊鏈以做到防篡改的操作記錄;

一、Usr 證書

初始授權

  • 證書命名規則: usr_[uid]_[soid].der
  • Common name = loginname
  • 證書的 nsComment 擴展屬性中存放規則信息;
  • 格式 v=0&name=root&uid=0&gids=[0,1000,1001]&caps=[]&ip=1.1.1.1&mac=aa:bb:aa:dd

規則信息擴展屬性中,包含 ”v, name, uid, gids, caps, ip, mac”,具體結構如下:

struct pdx_attrs_usr {
    char *v, *name, *uid, *gids, *caps, *ip, *mac;
    int v_sz, name_sz, uid_sz, gids_sz, caps_sz, ip_sz, mac_sz;
    char *raw_data;
    int raw_data_sz;
};

分別用來表示“版本、登錄名、用戶ID、組ID列表、權能列表、ip地址、mac地址”,在執行kek_login系統調用時會驗證這些屬性;

二、Imp 證書

每一個扮演/轉換授權項(imp-item)一般包括如下內容:授權應用程序(以其代碼的哈希值表示)、可扮演/轉換的UID/GID列表(比如root可以在apache應用程序中轉換爲apache服務賬戶)、扮演/轉換條件(比如需不需要內核登錄認證)等。

初始授權

  • 證書命名規則: imp_[uid]_[soid].der
  • Common name = loginname
  • 證書的 nsComment 擴展屬性中存放規則信息;

規則的文本協議描述如下:

  • 例子 "v=0&iu=["1000:0xaa:2:ls:0x1111","1001:0xbb:2:pwd:0x22"]&au=["0::0::*"]";
  • 格式:v=0&items=[item,item,...]
  • item結構:“uid:usr_so0_cert_hex:login_enmu:app_name:app_bin_hex”
  • item說明:分爲5個段落,每個段落以”:”分割,具體含義如下表

  1. uid:用戶的uid

  2. usr_so0_cert_hex:此字段可以有兩個值

    • hex(sha1(usr_uid_so0.der)),用戶usr證書的sha1hex值,字母小寫;用來關聯 usr 證書;
    • ”*” 通配符,表示忽略此條件;
  3. app_name : App 的名字,此字段可以有兩個值

    • full path
    • ”*” 通配符,表示忽略此條件; 這個字段不做判斷條件,僅用 hex 判斷即可
  4. app_hex : hex(sha1(app_bin)),此字段可以有兩個值

    • 應用程序的 sha1 hex 值,全部字母小寫
    • ”*” 通配符,表示忽略此條件
      內核會給白名單應用賦值爲 “#”,用於跳過imp驗證規則;

三、Exe 證書

每一個合法的UID,都必須有一個執行授權(exe.authz)配置文件(或其他機制),該配置文件針對每一個受限執行的應用程序(以其哈希值表示)的受限系統調用有一個執行授權項(exe-item),內容包括該應用程序哈希值、系統調用名稱、各調用參數的取值範圍、允許/不允許調用,最後是一個或多個安全管理員對這些扮演/轉換授權項的簽名及其公鑰或X.509證書。

執行權範圍:

1、是否可執行(hook : security_bprm_check)證書合法則具備執行權
2、執行參數限制(TODO:參數通常是 k=v / k v,但是v的值怎麼限制呢?)
3、是否可以使用磁盤(fs=[path : */r/w/,...])
4、是否可以使用網絡(out/in : */ip:port)
5、內存保護

  • 證書命名規則: [apphex][uid][soid].der
  • Common name = uname@appname //只用於顯示,不做教研,教研只針對ext中的hex進行
  • 證書的 nsComment 擴展屬性中存放規則信息;
  • 格式:v=0&hex=”0xf”&uid=0&fs=[“/xxx:*”,”/xxx:r”,...]&ob=[“ip:port”,...]&ib=[“ip:port”,...]&m=[todo]&a=[todo]&s=[todo]

hex

sha1_hex(bin)

uid

用戶 uid,驗證時用

fs

文件系統授權,格式爲[”path:perm”,...],其中path可以是文件也可以是目錄,perm取值範圍[r,w,rw,h,*]分別表示“只讀、只寫、讀寫、隱藏、不限制”;
如果fs爲空(fs=[]或沒有fs字段),則文件系統不做限制;

如果只想限制某個目錄,其餘不限制則可以用“*”來補充配置項;

例1:fs=[“/var/log:w”,”/data:r”,”/private:h”,”:”]
表示/var/log只寫,/data只讀,/private拒絕訪問,其他目錄不限制;

例2:fs=[“/var/log:”,”:r”]
表示/var/log不做限制,其他目錄均爲只讀;

ob

網絡outbound授權,格式爲[”ip:port”,...],其中ip和port均可取值爲“”;
port正常取值範圍0~65535,“-”減號表示拒絕某個端口,“0”表示全部拒絕,”
”表示不限制;
如果ob爲空(ob=[]或沒有ob字段),則網絡outbound不做限制;

例1:ob=[“192.168.100.1:0”,”:80”,”:-8080”]
表示拒絕訪問”192.168.100.1”,允許訪問全部ip的80端口,拒絕訪問所有的8080端口;

ib

網絡inbound授權,格式爲[”ip:port”,...],其中ip和port均可取值爲“”;
port正常取值範圍0~65535,“-”減號表示拒絕某個端口,“0”表示全部拒絕,”
”表示不限制;
如果ib爲空(ib=[]或沒有ib字段),則網絡inbound不做限制;

例1:ib=[“192.168.100.1:0”,”:80”,”:-8080”]
表示拒絕來自”192.168.100.1”的請求,允許全部ip請求本地80端口,拒絕全部ip請求本地8080端口;

m

跨進程內存訪問權限申請,格式爲[“path/hex:perm”,...];
其中 path 取值範圍 [/proc/kcore, /dev/mem, /dev/kmem];
其中 perm 取值範圍 [r, w, rw, *],rw == *;
注意關於 path 的權限配置就只支持 r,不出現在權限列表中默認都是無權限;

例:m=[“/proc/kcore:r”,”0xfffa”:”rw”, ”0xfffb”:”r”]

表示 /proc/kcore 有讀權限,0xfffa 有讀寫權,0xfffb 有讀權限,/dev/mem 與 /dev/kmem 沒有出現在配置列表中,則無權訪問;

a

TODO: Exec args 過濾規則?

s

TODO: 重點的 syscall 過濾規則?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章