欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 增強Linux內核中訪問控制安全的方法

增強Linux內核中訪問控制安全的方法

熱門標簽:外呼系統的經營范圍 涪陵商都400電話開通辦理 柳州市機器人外呼系統報價 申請400電話價格多少 廈門營銷外呼系統平臺 智能電話機器人坐席 安陽ai電銷機器人軟件 外呼系統不彈窗 云會外呼系統

背景

前段時間,我們的項目組在幫客戶解決一些操作系統安全領域的問題,涉及到windows,Linux,macOS三大操作系統平臺。無論什么操作系統,本質上都是一個軟件,任何軟件在一開始設計的時候,都不能百分之百的滿足人們的需求,所以操作系統也是一樣,為了盡可能的滿足人們需求,不得不提供一些供人們定制操作系統的機制。當然除了官方提供的一些機制,也有一些黑魔法,這些黑魔法不被推薦使用,但是有時候面對具體的業務場景,可以作為一個參考的思路。

Linux中常見的攔截過濾

本文著重介紹Linux平臺上常見的攔截:

  • 用戶態動態庫攔截。
  • 內核態系統調用攔截。
  • 堆棧式文件系統攔截。
  • inline hook攔截。
  • LSM(Linux Security Modules)

動態庫劫持

Linux上的動態庫劫持主要是基于LD_ PRELOAD環境變量,這個環境變量的主要作用是改變動態庫的加載順序,讓用戶有選擇的載入不同動態庫中的相同函數。但是使用不當就會引起嚴重的安全問題,我們可以通過它在主程序和動態連接庫中加載別的動態函數,這就給我們提供了一個機會,向別人的程序注入惡意的代碼。

假設有以下用戶名密碼驗證的函數:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
char passwd[] = "password";
if (argc < 2) {
printf("Invalid argc!\n");
return;
}
if (!strcmp(passwd, argv[1])) {
printf("Correct Password!\n");
return;
}
printf("Invalid Password!\n");
}

我們再寫一段hookStrcmp的程序,讓這個比較永遠正確。

#include <stdio.h>
int strcmp(const char *s1, const char *s2)
{
/* 永遠返回0,表示兩個字符串相等 */
return 0;
}

依次執行以下命令,就會使我們的hook程序先執行。

gcc -Wall -fPIC -shared -o hookStrcmp.so hookStrcmp.c
export LD_PRELOAD=”./hookStrcmp.so”

結果會發現,我們自己寫的strcmp函數優先被調用了。這是一個最簡單的劫持 ,但是如果劫持了類似于geteuid/getuid/getgid,讓其返回0,就相當于暴露了root權限。所以為了安全起見,一般將LD_ PRELOAD環境變量禁用掉。

Linux系統調用劫持

最近發現在4.4.0的內核中有513多個系統調用(很多都沒用過),系統調用劫持的目的是改變系統中原有的系統調用,用我們自己的程序替換原有的系統調用。Linux內核中所有的系統調用都是放在一個叫做sys_ call _table的內核數組中,數組的值就表示這個系統調用服務程序的入口地址。整個系統調用的流程如下:


當用戶態發起一個系統調用時,會通過80軟中斷進入到syscall hander,進而進入全局的系統調用表sys_ call _table去查找具體的系統調用,那么如果我們將這個數組中的地址改成我們自己的程序地址,就可以實現系統調用劫持。但是內核為了安全,對這種操作做了一些限制:

  • sys_ call _table的符號沒有導出,不能直接獲取。
  • sys_ call _table所在的內存頁是只讀屬性的,無法直接進行修改。

對于以上兩個問題,解決方案如下(方法不止一種):

  • 獲取sys call table的地址 :grep sys _ call _table /boot/System.map-uname -r
  • 控制頁表只讀屬性是由CR0寄存器的WP位控制的,只要將這個位清零就可以對只讀頁表進行修改。
/* make the page writable */
int make_rw(unsigned long address)
{
unsigned int level;
pte_t *pte = lookup_address(address, &level);//查找虛擬地址所在的頁表地址
pte->pte |= _PAGE_RW;//設置頁表讀寫屬性
return 0;
}
/* make the page write protected */
int make_ro(unsigned long address)
{
unsigned int level;
pte_t *pte = lookup_address(address, &level);
pte->pte &= ~_PAGE_RW;//設置只讀屬性
return 0;
}

開始替換系統調用

本文實現的是對 ls這個命令對應的系統調用,系統調用號是 _ NR _getdents。

static int syscall_init_module(void)
{
orig_getdents = sys_call_table[__NR_getdents];
make_rw((unsigned long)sys_call_table); //修改頁屬性
sys_call_table[__NR_getdents] = (unsigned long *)hacked_getdents; //設置新的系統調用地址
make_ro((unsigned long)sys_call_table);
return 0;
}

恢復原狀

static void syscall_cleanup_module(void)
{
printk(KERN_ALERT "Module syscall unloaded.\n");
make_rw((unsigned long)sys_call_table);
sys_call_table[__NR_getdents] = (unsigned long *)orig_getdents;
make_ro((unsigned long)sys_call_table);
}

使用Makefile編譯,insmod插入內核模塊后,再執行ls時,就會進入到我們的系統調用,我們可以在hook代碼中刪掉某些文件,ls就不會顯示這些文件,但是這些文件還是存在的。

堆棧式文件系統

Linux通過vfs虛擬文件系統來統一抽象具體的磁盤文件系統,從上到下的IO棧形成了一個堆棧式。通過對內核源碼的分析,以一次讀操作為例,從上到下所執行的流程如下:


內核中采用了很多c語言形式的面向對象,也就是函數指針的形式,例如read是vfs提供用戶的接口,具體底下調用的是ext2的read操作。我們只要實現VFS提供的各種接口,就可以實現一個堆棧式文件系統。Linux內核中已經集成了一些堆棧式文件系統,例如Ubuntu在安裝時會提醒你是否需要加密home目錄,其實就是一個堆棧式的加密文件系統(eCryptfs),原理如下:


實現了一個堆棧式文件系統,相當于所有的讀寫操作都會進入到我們的文件系統,可以拿到所有的數據,就可以進行做一些攔截過濾。

以下是我實現的一個最簡單的堆棧式文件系統,實現了最簡單的打開、讀寫文件,麻雀雖小但五臟俱全。

https://github.com/wangzhangjun/wzjfs

inline hook

我們知道內核中的函數不可能把所有功能都在這個函數中全部實現,它必定要調用它的下層函數。如果這個下層函數可以得到我們想要的過濾信息內容,就可以把下層函數在上層函數中的offset替換成新的函數的offset,這樣上層函數調用下層函數時,就會跳到新的函數中,在新的函數中做過濾和劫持內容的工作。所以從原理上來說,inline hook可以想hook哪里就hook哪里。


inline hook 有兩個重要的問題:

  • 如何定位hook點。
  • 如何注入hook函數入口。

對于第一個問題:

需要有一點的內核源碼經驗,比如說對于read操作,源碼如下:


在這里當發起read系統調用后,就會進入到sys read,在sys read中會調用vfs read函數,在vfs read的參數中正好有我們需要過濾的信息,那么就可以把vfs_ read當做一個hook點。

對于第二個問題:

如何Hook?這里介紹兩種方式:

第一種方式:直接進行二進制替換,將call指令的操作數替換為hook函數的地址。


第二種方式:Linux內核提供的kprobes機制。

其原理是在hook點注入int 3(x86)的機器碼,讓cpu運行到這里的時候會觸發sig trap信號,然后將用戶自定義的hook函數注入到sig trap的回調函數中,達到觸發hook函數的目的。這個其實也是調試器的原理。

LSM

LSM是Linux Secrity Module的簡稱,即linux安全模塊。是一種通用的Linux安全框架,具有效率高,簡單易用等特點。原理如下:

LSM

在內核中做了以下工作:

  • 在特定的內核數據結構中加入安全域。
  • 在內核源代碼中不同的關鍵點插入對安全鉤子函數的調用。
  • 加入一個通用的安全系統調用。
  • 提供了函數允許內核模塊注冊為安全模塊或者注銷。
  • 將capabilities邏輯的大部分移植為一個可選的安全模塊,具有可擴展性。

適用場景

對于以上幾種Hook方式,有其不同的應用場景。

  • 動態庫劫持不太完全,劫持的信息有可能滿足不了我們的需求,還有可能別人在你之前劫持了,一旦禁用LD_ PRELOAD就失效了。
  • 系統調用劫持,劫持的信息有可能滿足不了我們的需求,例如不能獲取struct file結構體,不能獲取文件的絕對路徑等。
  • 堆棧式文件系統,依賴于Mount,可能需要重啟系統。
  • inline hook,靈活性高,隨意Hook,即時生效無需重啟,但是在不同內核版本之間通用性差,一旦某些函數發生了變化,Hook失效。
  • LSM,在早期的內核中,只能允許一個LSM內核模塊加載,例如加載了SELinux,就不能加載其他的LSM模塊,在最新的內核版本中不存在這個問題。

總結

篇幅有限,本文只是介紹了Linux上的攔截技術,后續有機會可以一起探討windows和macOS上的攔截技術。事實上類似的審計HOOK放到任何一個系統中都是剛需,不只是kernel,我們可以看到越來越多的vm和runtime甚至包括很多web組件、前端應用都提供了更靈活的hook方式,這是透明化和實時性兩個安全大趨勢下最常見的解決方案。

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

標簽:南充 蕪湖 綏化 孝感 晉城 福州 撫順 巴中

巨人網絡通訊聲明:本文標題《增強Linux內核中訪問控制安全的方法》,本文關鍵詞  增強,Linux,內核,中,訪問,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《增強Linux內核中訪問控制安全的方法》相關的同類信息!
  • 本頁收集關于增強Linux內核中訪問控制安全的方法的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    欧美精品一区二区三区一线天视频 | 麻豆极品一区二区三区| 久久发布国产伦子伦精品| 国产在线一卡二卡| 国产精品视频九色porn| 国产精品一二三区| 日本不卡一区视频| 久久婷婷成人综合色| 精品一区二区三区在线观看国产| 久久精品国产亚洲AV熟女| 欧美一级欧美一级在线播放| 三级在线观看一区二区| 日本一卡二卡在线| 日韩视频中午一区| 麻豆精品精品国产自在97香蕉| 久久精品成人av| 欧美精品一区二区三区蜜桃视频| 加勒比av一区二区| 国产日韩精品中文字无码| 日本一区二区三区电影| 成人午夜电影久久影院| 日本久久精品电影| 艳妇臀荡乳欲伦亚洲一区| 年下总裁被打光屁股sp | 亚洲做受高潮无遮挡| 精品对白一区国产伦| 精品一区二区影视| 少妇被躁爽到高潮无码文| 日韩码欧中文字| 欧美人与性动交α欧美精品| 欧美放荡的少妇| 免费观看91视频大全| 国产精品成人在线视频| 国产精品久久久久久一区二区三区 | 五月天国产精品| 亚洲第一香蕉网| 国产精品婷婷午夜在线观看| av一区二区三区| 91精品中文字幕一区二区三区| 麻豆国产精品777777在线| sm捆绑调教视频| 亚洲精品少妇30p| av网站免费在线播放| 国产欧美精品一区二区三区四区| 97精品国产露脸对白| 91麻豆精品91久久久久久清纯 | 91麻豆精品久久毛片一级| 日韩一区中文字幕| 亚洲午夜久久久久久久久| 欧美精品一区二区精品网| 成人av网址在线| 91精品国产色综合久久不卡蜜臀 | 亚洲人吸女人奶水| 中国极品少妇videossexhd| 久久日韩粉嫩一区二区三区| 大胆欧美人体老妇| 3d动漫精品啪啪| 国产成人免费视频网站| 欧美日韩久久不卡| 国产在线视频一区二区| 欧美色图第一页| 国内精品伊人久久久久影院对白| 色欧美88888久久久久久影院| 男男gaygay亚洲| 中文字幕在线2021| 日本aⅴ亚洲精品中文乱码| 国产大学生自拍| 日本成人在线网站| 色婷婷av一区二区三区软件| 蜜臀av一区二区在线观看| 色网综合在线观看| 精品一区二区三区免费毛片爱| 在线一区二区三区四区| 精品一区二区三区免费毛片爱| 欧美日韩在线直播| 国产成人综合亚洲91猫咪| 91精品国产综合久久久久| 波多野洁衣一区| 久久美女艺术照精彩视频福利播放| 91免费看`日韩一区二区| 久久久久久免费网| 亚洲激情 欧美| 亚洲欧美一区二区三区极速播放 | 久久亚洲春色中文字幕久久久| 男生和女生一起差差差视频| 国产亚洲欧美日韩日本| 亚洲精品国产成人av在线| 1024成人网| 一级肉体全黄裸片| 午夜精品福利久久久| 色综合久久天天综合网| 精品一二三四区| 欧美一区二区三区思思人| 91视频国产观看| 国产精品全国免费观看高清| 亚洲国产日韩一区无码精品久久久| 亚洲人精品一区| 91高清免费观看| 国内精品在线播放| 欧美xxxxxxxxx| 中文字幕 日本| 亚洲一区二区成人在线观看| 精品国产视频在线观看| 国产在线不卡视频| 精品久久国产字幕高潮| 国产 中文 字幕 日韩 在线| 亚洲国产精品一区二区www在线 | 久久国产免费视频| 亚洲人成7777| 波多野结衣亚洲一区二区| 国产在线观看免费一区| 精品国产凹凸成av人网站| 亚洲蜜桃精久久久久久久久久久久| 亚洲一区在线电影| 91行情网站电视在线观看高清版| 成人免费视频一区| 国产精品国产自产拍高清av王其| 欧美性猛交xxxx乱大交少妇| 激情综合色综合久久| 欧美精品一区二区在线播放| 四虎永久免费在线观看| 麻豆精品精品国产自在97香蕉| 日韩欧美一卡二卡| 国产三级视频网站| 蜜臀久久99精品久久久画质超高清| 日韩三级高清在线| 巨胸大乳www视频免费观看| 琪琪久久久久日韩精品| 欧美一区二区视频在线观看2022| 中文字幕乱码一区| 免费在线观看精品| 精品日韩99亚洲| 欧美做受高潮6| 国内精品免费**视频| 国产亚洲精品bt天堂精选| 国产免费嫩草影院| 国产suv精品一区二区6| 国产精品美女久久久久久久久 | 国产精品99精品无码视亚| 午夜精品久久久久久久久久久| 91精品国产黑色紧身裤美女| 亚洲av无码一区二区三区网址 | 欧美日韩国产乱码电影| 天堂www中文在线资源| 日本视频一区二区| 久久日韩精品一区二区五区| 久久爱一区二区| 99久久综合精品| 亚洲国产日韩a在线播放性色| 51精品视频一区二区三区| a级大片在线观看| 国产一区二区主播在线| 国产精品的网站| 欧美影院午夜播放| 捆绑裸体绳奴bdsm亚洲| 激情综合亚洲精品| 成人欧美一区二区三区视频网页| 欧美午夜精品免费| 中文字幕 亚洲一区| 国产一区激情在线| 亚洲欧美另类小说| 91精品国产综合久久福利| 五月天综合视频| 国产成人精品在线看| 尤物av一区二区| 日韩免费电影网站| 麻豆网址在线观看| 波多野结衣三级视频| 免费不卡在线观看| 国产精品国产三级国产普通话蜜臀 | aaaaa一级片| 国产99久久精品| 亚洲国产日韩av| 国产日韩欧美一区二区三区综合| 色综合色综合色综合| 97人妻天天摸天天爽天天| 岛国av在线一区| 日韩影院在线观看| 国产精品蜜臀在线观看| 在线不卡a资源高清| 亚洲天堂最新地址| japan高清日本乱xxxxx| 精品一区二区免费在线观看| 亚洲日本一区二区三区| 日韩欧美在线不卡| 色综合久久88色综合天天| 久久久精品人妻无码专区| www.亚洲色图| 另类成人小视频在线| 亚洲女女做受ⅹxx高潮| 精品精品国产高清a毛片牛牛| 色综合久久88色综合天天免费| 99re久久精品国产| 波多野结衣视频一区| 精品一区二区三区不卡| 午夜精品久久久久久久蜜桃app| 国产精品天美传媒沈樵| 欧美成人精品1314www| 欧洲一区二区三区在线| 久久视频一区二区三区|