一区二区视频免费看_日韩精品a在线观看91_精品视频123区在线观看_日韩在线a电影_av三级在线播放_免费在线视频一区二区_欧美中文字幕视频_国产视频一区二_欧美日韩精品高清_亚洲欧洲日韩精品在线

聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

dm-verity-ramdisk文件系統校驗的解決方法

來源:CSDN 時間:2023-02-15 11:20:40

近期做的一個項目,由于客戶對安全性要求比較高,涉及到文件系統校驗的問題,起初是在ramdisk中掛載rootfs后對所有重要的文件檢查sha256,但是隨著rootfs的逐步增大,發現校驗花費的時間太長,竟然達到十幾秒,于是就想改用一種方案,首先想到的是整個rootfs校驗后在掛載,這樣肯定是比一個文件一個文件校驗要來得快些,但是項目中用的是nandflash,并不是EMMC,所以文件系統只能采用支持壞塊管理的ubifs,于是這里就存在問題了,ubi層負責邏輯塊到物理塊的映射,也就是說在物理存儲上塊不一定是邏輯連續的,這樣在ubifs還沒有掛載之前讀取整個鏡像然后整體校驗肯定是行不通的,一個解決辦法是讀取ubi卷設備而不是mtd設備,這樣的話是可行的,但是一種更好的辦法是采用dm-verity,但是這個是Linux項目,并不是Android項目,通過對dm-verity移植,這里記錄一下對dm-verity的理解。

dm-verity是什么?


【資料圖】

它是dm(device mapper)的一個target,是一個虛擬塊設備,專門用于文件系統的校驗

+------------------------------+

|                fs                   |

+------------------------------+

|

+-------------------------------+

|         dm-verity               |

+-------------------------------+

|

+-------------------------------+

|            block driver        |

+--------------------------------+

|

+-------------------------------+

|               block device    |

+-------------------------------+

fs在掛載的時候直接指定dm-verity設備,也就是fs直接交互的設備是dm-verity,dm-verity調用真正的塊驅動去讀取對應的塊,并計算hash值和hash-tree中對應的hash值進行比較,如果相等,則說明塊沒有被篡改,返回塊數據給fs,如果不相等,則說明塊被篡改,根據mode是返回EIO,或者直接重啟。

首先通過ioctl去crt(create)一個dm-verity設備,通過傳入參數指定這個創建的dm-verity設備的一些特性,傳入的參數包括verity-table,當然也可以使用命令直接創建:

Set up a device:  # dmsetup create vroot --readonly --table \    "0 2097152 verity 1 /dev/sda1 /dev/sda2 4096 4096 262144 1 sha256 "\    "4392712ba01368efdf14b05c76f9e4df0d53664630b5d48632ed17a137f39076 "\    "1234000000000000000000000000000000000000000000000000000000000000"

verity-table的內容如下:

40 def build_verity_table(block_device, data_blocks, root_hash, salt):41    table = "1 %s %s %s %s %s %s sha256 %s %s"42    table %= (  block_device,43                block_device,44                BLOCK_SIZE,45                BLOCK_SIZE,46                data_blocks,47                data_blocks + (METADATA_SIZE / BLOCK_SIZE),48                root_hash,49                salt)50    return table

block_device描述了該dm-verity設備對應了那個底層的塊設備,第二個block_device指定了hash-tree存在于哪個塊設備上,對于我這個項目就是/dev/ubiblock0_0,BLOCK_SIZE描述了多大一個塊對應一個hash,一般都4k, data_blocks描述了有多少個4k的塊,data_blocks + (METADATA_SIZE / BLOCK_SIZE)表示hash-tree在對應塊設備上的偏移,由此來找到hash-tree,root_hash為hash-tree的根hash。

dm-verity工作在塊設備之上,所以這里是/dev/ubiblock0_0,于是就不能再用ubifs 了,因為ubifs工作在卷設備之上,而/dev/ubi0_0是一個字符設備,所以只能采用工作在塊設備之上的文件系統,我這里采用了squashfs,因為它比較簡單。

dm-verity的工作原理

通過前面的描述,很容易理解dm-verity的工作過程,就拿我這個項目來說,squashfs需要讀取某個塊時,調用dm-verity讀取對應的塊,dm-verity根據verity-table中block_device,調用block_device讀取對應的塊,讀取到塊的內容后dm-verity會算出塊的sha256,然后跟verity-hash-tree中相對應的hash值進行比較,如果相等,則說明該塊沒有被修改過,一切正常。

為何dm-verify支持所有的文件系統?

該項目在選用dm-verity之前,我一直都在懷疑dm-verity是否支持ubifs,通過前面的描述,如果你對dm-verity的工作原理足夠理解的話,你就會發現,dm-verity跟文件系統是無關的,只要文件系統是工作在塊設備之上的,所以ubifs是不可以的,工作在塊設備之上的文件系統都是可以的,dm-verity是對邏輯塊校驗hash值,產生hash-tree的時候也是根據文件系統鏡像來產生的(然后除ubifs之外,不存在邏輯塊的概念,但是可以類似將它看出邏輯塊直接等于物理塊),至于邏輯塊到物理塊直接是怎樣映射,dm-verity根本就不需要關心。

dm-verity為何這么快?

了解了原理之后這個就很好回答了,因為dm-verity并不需要在掛載前對所有的塊進行校驗,而是在使用的過程中用到哪個塊就校驗哪個塊的hash值,這樣對于像android一個分區幾個G來說優勢就顯得更加明顯了。

dm-verity是如何保證安全的?

前面說過每個block都在hash-tree中記錄了對應的hash值,這樣就能防止別人篡改block的內容了,但是如果黑客把block改了之后,重新計算hash把hash-tree中對應的hash值也改了呢,這樣就能神不知鬼不覺了,所以必須要有一種機制防止hash-tree被篡改,hash-tree是這樣一種結構,所有的block對應的hash值放在最底層,也就是第0層,如下圖:

第1層的hash值由下面一層的hash值計算得到,除了第0層,其他的層hash值都不對應物理上block的hash值,它們存在的意義只是為了構建hash鏈,防止hash篡改,這樣第0層的hash值改變了的話,上層對應的hash值也需要修改,也就是說根hash也需要修改,所以只需要一種機制能保證root-hash不被篡改就行了。

Android中采用的方法是算root-hash的簽名,verity-table中保存了root-hash,對verity-table進行簽名,它們的存儲分布如下:

在Android中,系統進入ramdisk后,由/system/core/fs_mgr/ 負責dm-verity設備的創建,verity-table的校驗,這里涉及到的一些知識是:

1.如何知道哪些分區需要校驗?

fs_mgr通過讀取fstab文件,其中記錄了哪些分區需要校驗

2.如何知道需要校驗的分區中verity-table的位置?

這是用戶空間(/system/core/fs_mgr/ )的工作,android的做法是通過讀取文件系統的超級塊(Superblock,簡稱SB),里面記錄了文件系統的大小,verity-table緊挨著文件系統鏡像之后

3.簽名的key存放在哪里?

這里指的是public key

verity-table-metadata主要是為了校驗verity-table的合法性,android的格式為:

def build_metadata_block(verity_table, signature):    table_len = len(verity_table)    block = struct.pack("II256sI", MAGIC_NUMBER, VERSION, signature, table_len)    block += verity_table    block = block.ljust(METADATA_SIZE, "\x00")    return block

verity-table的校驗是在用戶空間(/system/core/fs_mgr/ )中完成的,校驗合法之后會將verity-table傳給kernel使用。

上面說的這些只是Android的一套,自己實現的話沒必要完全按照它的來,比如說verity-table和hash-tree沒有必要放在分區中,可以放在ramdisk中,簽名和校驗RSA2014可以自己實現,public key存放的位置可以自己決定,如放在ramdisk中或放在OTP中。

dm-verity異常處理

dm-verity簽名校驗失敗后會怎么做呢?下面是Android的做法:

在metadata分區中會記錄dm-verity的狀態,提示是否掛載,同時在dm-verity設備創建時也會指定mode,dm-verity在內核中塊hash校驗失敗后不同的mode表現的行為不一樣。

// Verity modesenum verity_mode {    VERITY_MODE_EIO = 0,    VERITY_MODE_LOGGING = 1,    VERITY_MODE_RESTART = 2,    VERITY_MODE_LAST = VERITY_MODE_RESTART,    VERITY_MODE_DEFAULT = VERITY_MODE_RESTART};static int load_verity_table(struct dm_ioctl *io, char *name, uint64_t device_size, int fd, char *table,int mode){    ...    if (mode == VERITY_MODE_EIO) { //對于比較老的內核dm-verity驅動,是不支持mode的,當block hash校驗不過時總是cause an I/O error for corrupted blocks        // allow operation with older dm-verity drivers that are unaware        // of the mode parameter by omitting it; this also means that we        // cannot use logging mode with these drivers, they always cause        // an I/O error for corrupted blocks        strcpy(verity_params, table);    } else if (snprintf(verity_params, bufsize, "%s %d", table, mode) < 0) {                     return -1;    }    ...    ioctl(fd, DM_TABLE_LOAD, io);}

指定mode后,kernel中碰到校驗不過的塊的處理:

/* * Handle verification errors. */static int verity_handle_err(struct dm_verity *v, enum verity_block_type type,                   unsigned long long block){    ...    out:    if (v->mode == DM_VERITY_MODE_LOGGING)        return 0;      if (v->mode == DM_VERITY_MODE_RESTART)        kernel_restart("dm-verity device corrupted");      return 1;}

記錄一下移植的過程中踩過的坑:

在移植的過程中發現Android6.0是有bug的,在產生hash-tree的時候:

image_size = os.stat(out_file).st_size

由于img是sparse過后的,所以這里的大小肯定是不對的,正確的做法應該是先unsparse,然后再計算大小。

另外這里采用的是ubiblock:

ubiblock --create  /dev/ubi0_0

mtd--->ubi------>ubi vol----->ubiblock

另外還可以采用gluebi:

mtd---->ubi---->ubi vol--->mtd--->mtdblock

ubiblock比較簡單,缺點是只讀,在掛載時必須指定為只讀:

mount -t squashfs  /dev/ubiblock0_0  /mnt  -o ro

生成燒錄鏡像的過程:

rootfs dir---------mksquash------------>rootfs.squashfs-----------ubinize-------------->rootfs.ubi

把rootfs.ubi燒進去即可。

最終實現的效果如下:

責任編輯:

標簽: 文件系統

相關推薦:

精彩放送:

新聞聚焦
Top www.日韩免费| 亚洲福利在线观看| 蜜桃视频一日韩欧美专区| 1区2区在线| 一区二区91| 国产日韩成人精品| 日韩在线视频免费观看高清中文 | 国产乱码午夜在线视频| 欧美高清视频一区二区三区| 亚洲校园欧美国产另类 | 中文字幕精品在线视频| 国产福利一区二区| 精品1区2区3区| 日韩久久久精品| 日韩精品视频网| 欧美自拍一区| 久久久精品国产99久久精品芒果| 中文字幕精品在线| 欧美日韩国产影片| 一区二区精品免费| 在线三级av| 日韩欧中文字幕| 久久精品一级爱片| 精品欧美日韩在线| 中文字幕人成乱码在线观看| 国产 欧美 日韩 在线| 极品久久久久久| 不卡视频一区二区三区| 亚洲最新免费视频| 国产激情在线| 免费视频一区三区| 精品在线网站观看| 91精品久久久久久蜜臀| 国产高潮久久久| 中文国产字幕在线观看| 亚洲高清中文字幕| 二区三区不卡不卡视频| av免费不卡国产观看| 亚洲美女视频一区| 中文字幕伊人| 欧美日韩中文精品| 精品一区二区三区中文字幕| 91精品国产自产| 亚洲乱码视频| 国产免费永久在线观看| 欧美三级在线视频| 中文字幕日韩欧美| 日韩网站中文字幕| 欧美日韩在线视频免费观看| 亚洲免费视频一区| 久久激情一区| 久久精品国产91精品亚洲| 欧美日韩在线播放三区四区| 婷婷中文字幕在线观看| 欧美日韩亚洲天堂| 精品福利一区二区三区| 日韩欧美字幕| 国产视频1区| 一区二区视频在线观看免费的| 激情综合色综合久久| 国产成人va亚洲电影| 日韩.欧美.亚洲| 国产成人精品999| 亚洲视频中文字幕| 国产v日产∨综合v精品视频| 日韩免费视频一区| 精品久久久久久无| 亚洲免费中文字幕| 日韩va亚洲va欧洲va国产| 欧美日韩第一| 日韩三级免费观看| 国产免费久久| 国产欧美综合在线| 91精品国产91久久久| 久久久综合av| 国产福利三区| 日韩欧美在线中文字幕| 午夜伦欧美伦电影理论片| 欧美久久久久久蜜桃| 欧美日韩在线不卡一区| 成人a在线视频免费观看| 国产视频2区| 日韩欧美一二三| 欧美日韩国产91| 欧美日韩在线观看首页| 久久99精品久久久久婷婷| 欧美在线视频二区| 国产一卡2卡3卡免费网站| 精品对白一区国产伦| 亚洲a一级视频| 蜜桃视频中文字幕| 欧美日韩午夜在线| 午夜黄色小视频| 日韩精品在线观看网站| 午夜国产在线视频| 国产高清精品在线| 顶级网黄在线播放| 久久久精品欧美| 中文字幕亚洲一区二区av在线| 欧美日韩国产91| 精品视频国产| 最近中文字幕在线中文视频| 一二三区精品福利视频| 国产高清在线视频| 精品人妻一区二区免费视频| 中文字幕在线看视频国产欧美| 国产欧美高清在线| 色一区在线观看| 精品区一区二区| 玖玖在线免费视频| 一级一片免费视频| 成人一区二区不卡免费| 欧美在线视频二区| www.久久草| 91精品国产综合久久久久久漫画| 亚洲社区在线| 一级片在线播放| 国产视频中文字幕| 欧美亚洲国产激情| 一区二区国产在线| 日韩欧美中文免费| 国产久卡久卡久卡久卡视频精品| 精品三区视频| 日韩av一区在线| 一区二区三区久久| 亚洲一区三区在线观看| 日韩中文字幕视频在线观看| 日韩欧美国产网站| 日韩中文字幕在线视频观看| 日韩视频第二页| 国产绿帽一区二区三区| 国产无遮挡在线视频免费观看| 丰满少妇一区二区| 一级网站免费观看| 日韩精品在线视频观看| 欧美一级在线免费| 国产激情在线观看| 中文字幕欧美国内| 精品人妻一区二区三区视频| 高清1区2区| aaa欧美日韩| 日韩视频在线免费播放| 国产在线高潮| 日韩欧美中文字幕在线观看| 日韩视频在线一区| 精品一二三区视频| 91精品国产日韩91久久久久久| 中文字幕在线观看视频www| 亚洲欧洲一区二区天堂久久| 国产一区在线不卡| 成人ww免费完整版在线观看| 亚洲国产欧美久久| av免费观看网站| 日韩欧美国产黄色| 激情五月综合| 国产在线小视频| 欧美日韩精品是欧美日韩精品| 久久久精品福利| 欧美日韩色综合| 国产一级视频| 日韩中文字幕精品视频| 精品日韩在线观看| 国产一卡2卡3卡4卡网站免费| 欧美日韩国产中文| 日韩欧美一二三| aa国产成人| 日韩字幕在线观看| 91精品视频在线| 一区二区在线视频播放| 在线一区免费| 91亚洲国产| 国产乱码午夜在线视频| 国产裸舞福利在线视频合集| 日韩精品福利视频| 亚洲一区精品在线| 国产欧美日韩不卡| 一二三区精品福利视频| 精品视频123区在线观看| 日韩一级网站| 欧美激情视频一区二区三区在线播放 | 国产在线观看91| 欧美中文字幕在线| 亚洲欧美999| 91精品婷婷国产综合久久| 日韩综合精品| 中文字幕在线看精品乱码| 日韩在线视频免费观看高清中文| 欧美日韩精品中文字幕| 一区二区不卡在线播放| 欧美日韩在线看| 欧洲精品久久久| 国产欧美综合视频| 一区二区精品区| 国产一级免费看| 国精品产品一区| 中文字幕精品在线视频| 亚洲乱码中文字幕| 日本不卡免费高清视频| 亚洲美女视频一区| 欧美一级免费在线观看| 成人ww免费完整版在线观看| 久本草在线中文字幕亚洲欧美| 国产在线不卡一区| 91精品国产91久久久久久青草| 色屁屁一区二区| 中文字幕在线观看亚洲| 国产嫩草影院久久久久| 国产欧美第一页| 91久久在线| 亚洲欧美久久234| 国产无遮挡在线视频免费观看| 中文字幕人成乱码在线观看| 日韩欧美中文字幕精品| 一本久久a久久精品亚洲| 国产香蕉精品视频| 久久91精品国产91久久小草| 日韩中文字幕在线播放| 在线看av的网址| 国产午夜精品全部视频播放| 欧美日韩不卡在线视频| 亚洲人线精品午夜| 区日韩二区欧美三区| 久久久精品免费免费| 国产高清在线观看| 日韩中文字幕网| 亚洲娇小xxxx欧美娇小| 欧美日韩一二| 99精品免费观看| 在线免费视频一区二区| 在线免费91| 一级日韩一级欧美| 日韩精品综合在线| 欧美日韩国产综合视频在线观看| 亚洲免费婷婷| 欧美日韩视频网站| 免费看日韩精品| 1区不卡电影| 国产三级做爰在线观看| 国产在线导航| 黄色国产网站在线观看| 精品人妻一区二区三区视频| 国产午夜精品视频| 欧美日韩高清一区二区不卡| 欧美日韩视频在线| 精品国产1区2区3区| 老司机久久99久久精品播放免费| 亚洲高清精品视频| 三级精品视频| 中文字幕精品www乱入免费视频| 综合激情一区| 在线观看区一区二| 欧美日韩国产高清一区| 精品日韩在线播放| 黄色片免费在线| 91国内精品在线视频| 在线亚洲免费| 久久精品免费看| 色综合天天综合网天天狠天天 | 国产调教精品| 亚洲精品欧美二区三区中文字幕| 91精品国产色综合久久不卡蜜臀| 久久久91精品| 亚洲一级在线| 精品久久在线观看| 亚洲第一页中文字幕| 91精品久久久久久蜜臀| 黄色片网站在线| 91精品日本| 亚洲中文字幕一区| 亚洲а∨精品天堂在线| 91精品国产综合久久香蕉的特点| 国产在线观看91| 国产一区不卡在线| 天天综合天天| 日韩亚洲欧美中文高清在线| 在线日韩中文| 中文字幕在线视频第一页| 日韩欧美在线1卡| 免费在线播放av| 欧美日韩中文精品| 日韩欧美在线第一页| 国产蜜臀在线| 日韩欧美亚洲国产| 欧美日韩综合色| 精品播放一区二区| 中文字幕中文字幕精品| 在线观看av的网站| 国产午夜在线观看| 国产在线小视频| 日韩欧美亚洲视频| 国产欧美日韩中文| 国产欧美日韩中文字幕| 欧美日韩中文精品| 91精品国产自产在线| 亚洲黄色片在线观看| 国产综合成人久久大片91| 九一精品国产| 午夜av一区| 亚洲成年人在线播放| 日韩色在线观看| 精品1区2区3区| 亚洲欧洲日韩在线| 日韩在线视频观看正片免费网站| 亚洲.国产.中文慕字在线| 色综合婷婷久久| 国产婷婷色一区二区三区| 亚洲国产91精品在线观看| 国产一区 二区 三区一级| 欧美日韩中文字幕| 日韩不卡在线播放| 日韩视频一区| 在线不卡一区二区| 国产乱码在线| 色综合影院在线| 国产一级在线播放| 欧美日韩一二| 国产午夜精品视频免费不卡69堂| 视频一区不卡| 中文在线视频| 日韩av一区在线| 欧美国产日韩在线播放| 国产一级在线| 韩国av一区二区| 国产日韩av高清| 天堂中文在线视频| 91精品国产综合久久精品| 国产无遮挡在线视频免费观看| 欧洲一级精品| 一区二区三区精品99久久| 欧美日韩精品区| 中文在线视频观看| aaa欧美日韩| 欧美日韩综合色| 中文字幕2020第一页| 日韩久久精品网| 欧美性生交大片免费| 中文字幕日韩国产| 欧美日韩亚洲91| 99中文字幕一区| 在线视频不卡国产V| 国产视频一区三区| a视频免费在线观看| 日韩欧美资源站| 精品全国在线一区二区| 亚洲乱码中文字幕| 欧美日韩激情在线一区二区三区| 国产成人精品999| 精品九九久久| 久草中文在线观看| 日韩中文在线视频| 日韩精品在线第一页| 国产免费一级| 免费视频二区| 欧美婷婷精品激情| 二区视频在线观看| 日韩在线视频中文字幕| 国产欧美日韩久久| 中文字幕日韩精品在线| 中文精品视频| 国产日韩电影| 天堂在线中文| 天堂在线中文资源| 91国内在线| 日本免费在线视频不卡一不卡二| 国产激情99| 亚洲女人天堂a在线播放| 天天综合天天添夜夜添狠狠添| 91精品国产综合久久久久久漫画| 中文字幕在线亚洲| 国产午夜精品全部视频播放| 亚洲视频资源在线| 欧美日韩中文字幕日韩欧美| 成人禁用看黄a在线| 欧美日韩免费不卡视频一区二区三区| 欧美日韩在线综合| 一区二区中文字幕在线| 精品视频资源站| 人成免费在线视频| 中文字幕视频在线观看| 欧洲一级精品| 日韩av一区在线| 日韩中文字幕二区| 国产在线观看91| 精品日韩av一区二区| 在线视频不卡国产V| 中文字幕久久av| 精品日韩在线| 国产乱国产乱老熟300| 在线一区二区三区精品| 色综合天天综合网天天狠天天| 久久久久久久久99精品| 99在线精品视频免费观看20| 欧美国产小视频| 色屁屁一区二区| av手机天堂| 日韩精品综合在线| 欧美日韩99| 97caopor国产在线视频| 欧美日韩成人一区二区| 日韩在线高清|