SEV Tools
0x00 Downloads
- install dependencies
#run .sh
$ sh deps-install.sh
#manually install
$ sudo apt install git make gcc g++ -y --allow-unauthenticated
- git
$ git clone git@github.com:AMDESE/sev-tool.git
- compile
$ cd sev-tool
$ autoreconf -vif && ./configure && make
0x01 Run
- pull git(从GitHub拉取最新版本)
$ cd sev-tool
$ git pull
$ autoreconf -vif && ./configure && make
- run with help flag
$ sudo ./sevtool -h
0x02 Optional Input Flags
- —sys_info标志将向用户显示系统信息,例如:BIOS版本、BIOS发布日期、SMT状态、处理器频率、操作系统、内核版本、SEV-Tool的Git提交号等
$ sudo ./sevtool --sys_info --get_id
- —verbose和—brief标志将打开/关闭显示出的certs/IDs等信息到屏幕上的命令,如pek_csr, pdh_cert_export, get_id命令等
$ sudo ./sevtool --verbose --sys_info --get_id
$ sudo ./sevtool --brief --pek_csr
- 某些命令支持—ofolder标志,该标志允许用户为命令导出的certs选择输出文件夹。
0x03 Proposed Provisioning Steps
platform Owner(SEV服务器)
- 生成OCA
$ openssl ecparam -genkey -name secp384r1 -noout -out ec384-key-pair.pem
$ openssl ec -in ec384-key-pair.pem -pubout -out ec384pub.pem
- 平台联网
- 安装支持SEV的系统
- 检查系统支持
- 为SEV-Tools创建目录用来导入/导出生成的certs/IDs(—ofolder命令)
- 运行get_id命令
运行generate_cek_ask命令从AMD KDS服务器获取CEK_ASK
- 注意:每次从KDS服务器拉出CEK证书时,它都是不同的。服务器每次都重新生成/重新签署证书,而不是存储静态证书
- 运行pek_csr命令为PEK(Platform Encryption Key)生成一个证书签名请求。
- 执行sign_pek_csr命令,使用提供的OCA私钥签署CSR(证书)(可在OCA平台上执行)。
- 执行pek_cert_import命令
- 执行pdh_cert_export命令
- 执行get_ask_ark命令
- 执行export_cert_chain命令将PDH导出到ARK (AMD根目录)并将其压缩
- 保存完整的证书链以发送给Guest Owner
- 交付可用的UEFI镜像
Guest Owner
- 为SEV-Tool创建一个文件夹,用于从/到导入/导出certs/ id(传入带有—ofolder标志的命令)
- 从PO处获得镜像
- 确认镜像可信
- 从平台所有者(PO)获取证书链(PDH通过ARK),并将其解压缩到本地文件夹中
运行validate_cert_chain命令验证从PDH到ARK (AMD根)的证书链
- 下载证书并提取相应的ARK和ASK,并使用它们执行验证过程,而不是用PO提供的那些。例子如下:
# Example for naples and rome processors device_type=naples if [[ $device_type == naples ]]; ask_size=832; else device_type=rome; ask_size=1600; fi wget https://developer.amd.com/wp-content/resources/ask_ark_$device_type.cert head -c $ask_size ask_ark_$device_type.cert > ask.cert dd < /dev/zero bs=$ask_size count=1 > ark.cert dd conv=notrunc if=ask_ark_$device_type.cert of=ark.cert skip=$ask_size iflag=skip_bytes
- 验证PO处获得的OCA cert chain
运行generate_launch_blob命令
- 读取平台Diffie-Hellman密钥(来自平台的PDH证书)并生成新的公共/私有GO Diffie-Hellman密钥对。当PO使用GODH(Guest Owner Diffie-Hellman)公钥调用Launch_Start时,DH密钥交换完成。
- 将blob和来宾所有者的DH公钥发送给PO,用来启动Guest虚拟机
- 从PO获得measurement
运行calc_measurement命令,验证从PO获得的mesurement
- UEFI镜像是我们hash的摘要参数,可以验证平台是否修改了他
- 运行package_secret命令
- 发送secret给PO
- 给PO“ready to run”的批准
Hypervisor
- 在从Guest Owner接收到启动blob和GO Diffie-Hellman公钥之后,Hypervisor可以启动Guest(使用Launch_Start)
- 调用Launch_Update_Data 和Activate等
- 调用Launch_Measure并将从PSP接收到的measurement发送给GO
- 调用Launch_Finish等
- 接受到GO发送的package secret后,调用Launch_Secret将GO的secret传递给Guest
- GO批准Hypervisor运行Guest
0x04 Command List
详细信息参考SEV-API
1.factory_reset
- 运行在PO端
- 注意:在当前的SEV API中,该命令被重命名为PLATFORM_RESET
$ sudo ./sevtool --factory_reset
2.platform_status
- 输出当前平台状态
- 运行在PO端
$ sudo ./sevtool --platform_status
3.pek_gen
生成PEK
- 运行在PO端
$ sudo ./sevtool --pek_gen
4.pek_csr
为PEK导出一个CSR
注意:只有在平台是自有的情况下,这种CSR导出才有效。同理重新导出也需要满足平台自有的条件
可选input参数:
- —ofolder [folder_path] :csr输出目录
输出:
- (可选)—verbose :pek_csr以十六进制的可读形式输出到屏幕
- (可选)—ofolder :pek_csr以十六进制的可读形式输出到指定目录的文件中(pek_csr_out.cert和pek_csr_out_readable.cert)
- 运行在PO端
$ sudo ./sevtool --ofolder ./certs --pek_csr
5.pdh_gen
生成PDH
- 运行在PO端
$ sudo ./sevtool --pdh_gen
6.pdh_cert_export
为PDH导出一个证书
可选input参数:
- —ofolder [folder_path] :PDH证书和证书链(PEK、OCA、CEK)输出目录
输出:
- (可选)—verbose :PDH证书和证书链以十六进制的可读形式输出到屏幕
- (可选)—ofolder :PDH证书和证书链以十六进制的可读形式输出到指定目录的文件中(pdh_out.cert、pdh_readable_out.cert、cert_chain_out.cert、cert_chain_readable_out.cert)
- 运行在PO端
$ sudo ./sevtool --ofolder ./certs --pdh_cert_export
7.pek_cert_import
先进行命令18
导入已签名的PEK CSR和相应的OCA证书
注意:平台必须自有才可导入
需要input参数:
- 已签名的PEK CSR
- 签署CSR的OCA证书(AMD证书格式)
- 读入文件:[signed PEK CSR] [oca_cert_file]
- 运行在PO端
$ sudo ./sevtool --pek_cert_import pek_csr.signed.cert oca.cert
8.get_id
可选input参数:
- —ofolder [folder_path] :Socket0和Socket1的IDs输出目录
输出:
- (可选)—verbose :Socket0和Socket1的IDs输出到屏幕
- (可选)—ofolder :Socket0和Socket1的IDs输出到指定目录的文件中(getid_s0_out.txt、getid_s1_out.txt)
- 运行在PO端
$ sudo ./sevtool --ofolder ./certs --get_id
9.set_self_owned
- 运行在PO端
$ sudo ./sevtool --ofolder ./certs --set_self_owned
10.set_externally_owned
将平台设置为自有,并一次性完成导出PEK CSR,签名,再导入的过程。
- 需要input参数:OCA的私钥(.pem格式)
- 读入文件:[oca_priv_key_file]
- 运行在PO端
$ sudo ./sevtool --set_externally_owned [oca_priv_key_file]
$ sudo ./sevtool --set_externally_owned ../psp-sev-assets/oca_key_in.pem
11.generate_cek_ask
调用get_id命令并将该ID传递给AMD KDS服务来检索cek_ask
注意:如果该命令在连接到KDS服务时返回错误,请再次尝试该命令
可选input参数:
- —ofolder [folder_path] :cek_ark.cert输出目录
输出:
- (可选)—ofolder :针对特定平台(Socket0中的处理器)的cek_ark.cert输出到指定目录的文件中(cek_ask.cert)
- 运行在PO端
$ sudo ./sevtool --ofolder ./certs --generate_cek_ask
12.get_ask_ark
可选input参数:
- —ofolder [folder_path] :ask_ark证书输出目录
输出:
- (可选)—ofolder :指定后将ask_ark证书输出到指定目录的文件中(ask_ark.cert),否则将被导出到与SEV-Tool可执行文件相同的目录
- 运行在GO端
$ sudo ./sevtool --ofolder ./certs --get_ask_ark
13.export_cert_chain
导出所有的证书(PDH、PEK、OCA、CEK、ASK、ARK),并将它们压缩,以便PO可以将它们发送给GO,GO用来验证证书链。该工具从AMD KDS服务器获取CEK,从SEV开发者网站获取ASK_ARK证书。
可选input参数:
- —ofolder [folder_path] :证书和压缩文件输出目录
输出:
- (可选)—ofolder :指定后将证书和压缩文件输出到指定目录的文件中(pdh.cert, pek.cert, oca.cert, cek.cert, ask.cert, ark.cert, certs_export.zip),否则将被导出到与SEV-Tool可执行文件相同的目录
- 运行在PO端
$ sudo ./sevtool --ofolder ./certs --export_cert_chain
14.calc_measurement
可以输入用于计算HMAC的所有参数,并生成一个输出
摘要参数是传递到LaunchUpdateData和LaunchUpdateVMSA的数据的SHA256 (Naples)或SHA384 (Rome)输出摘要
需要的input参数:(输入参数格式为ascii编码的十六进制bytes)
API=$(dd if=pek.cert ibs=1 skip=4 count=2 2>/dev/null | xxd -p) API_MAJOR=$(echo $API | cut -c1-2) API_MINOR=$(echo $API | cut -c3-4)
TIK=$(xxd -p tmp_tk.bin | tr -d '\n' | tail -c 32)
可选input参数:
- —ofolder [folder_path] :measurement输出目录
输出:
- (可选)—verbose :measurement将输出到屏幕
- (可选)—ofolder :测量值将输出到指定目录的文件中(calc_measurement_out.bin、calc_measurement_out.txt)
- 运行在GO端
$ sudo ./sevtool --calc_measurement [Context] [Api Major] [Api Minor] [Build ID] [Policy] [Digest] [MNonce] [TIK]
$ sudo ./sevtool --ofolder ./certs --calc_measurement 04 00 12 0f 00 e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 4fbe0bedbad6c86ae8f68971d103e554 66320db73158a35a255d051758e95ed4
You have entered 10 arguments
Command: calc_measurement
Input Arguments:
Context: 04
Api Major: 00
Api Minor: 12
Build ID: 0f
Policy: 00
Digest: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
MNonce: 4fbe0bedbad6c86ae8f68971d103e554
TIK: 66320db73158a35a255d051758e95ed4
Output Measurement:
6faab2daae389bcd3405a05d6cafe33c0414f7bedd0bae19ba5f38b7fd1664ea
Command Successful
#注意:安全考虑TIK不显示
15.validate_cert_chain
将整个证书链导入为单独的证书文件并对其进行验证
注意:使用本命令时应先解压证书压缩文件
验证步骤:
- 导入证书
- ARK(self-signed)—验证—>ARK
- ARK—验证—>ASK
- ASK—验证—>CEK
- CEK+OCA—验证—>PEK
- PEK—验证—>PDH
可选input参数:
- —ofolder [folder_path] :证书存放目录,若不指定则从与SEV-Tool可执行文件相同的目录中获取
- 读入文件:ask.cert、ask.cert、cek.cert、oca.cert、pek.cert、pdh.cert
- 运行于GO端
$ sudo ./sevtool --ofolder ./certs --validate_cert_chain
16.generate_launch_blob
该命令从PO导入PDH证书,构建Launch_Start会话缓冲区(blob)和GODH公钥证书。
步骤:GO首先生成一个DH公私钥对,然后与PDH公钥一起计算share secret和master secret,之后使用master secret生成一个新的TEK和TIK。
- 需要的input参数:十六进制格式的Guest Proxy
可选input参数:
- —ofolder [folder_path] :blob文件输出目录
- 读入文件:pdh.cert
输出:
- (可选)—ofolder :blob文件和GODH公钥证书将输出到指定目录,同时GODH的公私钥也将导出并只供SEV-Tools使用(launch_blob.bin、godh.cert, (ignore these: godh_pubkey.pem, godh_privkey.pem))
- 注意:blob文件为二进制,为了给qemu使用,需要手动转换为base64
- 运行于GO端
$ sudo ./sevtool --ofolder ./certs --generate_launch_blob [guest policy]
$ sudo ./sevtool --ofolder ./certs --generate_launch_blob 39
17.package_secret
该命令读取在pek.cert中包含的API信息,generate_launch_blob命令为TEK生成的文件(tmp_tk.bin),以及calc_measurement_out.txt和经过TEK加密/包装的秘密文件(secret.txt),然后它输出一个文件(packaged_secret.txt),然后将该文件作为常规API流的一部分传递给Launch_Secret
- 需要的input参数:—ofolder [folder_path] :blob文件和secrets文件存放目录,同时是packaged secret文件的输出目录
- 读入文件:secret.txt、launch_blob.bin、tmp_tk.bin、calc_measurement_out.bin
输出:
- (可选)—ofolder :packaged secret文件输出目录(packaged_secret.txt)
- 运行于GO端
$ sudo ./sevtool --ofolder ./certs --package_secret
18.sign_pek_csr
该命令读取CSR并使用提供的OCA私钥对其签名,创建了oca.cert文件(指定了AMD证书格式的公钥)
需要的input参数:
- 需要签名的CSR(pek_csr.cert)
- pem格式的OCA私钥([oca_priv_key].pem)
可选的input参数:
- —ofolder [folder_path] :签名后的CSR和OCA证书存放目录
输出:
- oca.cert:属于私钥的公钥证书,格式为AMD证书格式
- pek_csr.signed.cert:已包含OCA签名的CSR签名,缺少PEK签名
- 运行于PO端(OCA)
$ sudo ./sevtool --sign_pek_csr [pek_csr.cert] [oca_priv_key]
$ sudo ./sevtool --sign_pek_csr pek_csr.cert oca_priv.pem
19.validate_attestation
该命令导入attestation命令发送的报告(attestation_report.bin)和PEK证书(pek.cert,在使用generate_all_certs命令时生成),验证该报告是否由PEK签名
可选的input参数:
- —ofolder [folder_path] :attestation报告和pek证书文件的存放目录
- 读入文件:attestation_report.bin、pek.cert
- 运行于GO端
$ sudo ./sevtool --ofolder ./certs --validate_attestation
20.validate_guest_report
该命令导入由Attestation guest message生成的attestation报告(guest_report.bin),通过SNP_GUEST_REQUEST与平台当前VCEK (vcek. pem,通过调用export_cert_chain_vcek命令(command22)导出)一起发送,验证该报告是由VCEK签署的。
可选的input参数:
- —ofolder [folder_path] :attestation报告和vcek证书文件的存放目录
- 读入文件:guest_report.bin、vcek.pem
- 运行于GO端
$ sudo ./sevtool --ofolder ./certs --validate_guest_report
21.validate_cert_chain_vcek
该命令将整个证书链导入为单独的pem证书文件并验证
注意:先解压证书文件再调用本命令
步骤:
- 导入VCEK、ASK和ARK.pem证书
- ARK(self-signed)—验证—>ARK
- ARK—验证—>ASK
- ASK—验证—>VCEK
可选的input参数:
- —ofolder [folder_path] :证书文件的存放目录
- 读入文件:vcek.pem、ask.pem、ark.pem
- 运行于GO端
$ sudo ./sevtool --ofolder ./certs --validate_cert_chain_vcek
22.export_cert_chain_vcek
该命令将所有的证书(VCEK, ASK, ARK)导出为.pem文件,并压缩,用来让GO验证VCEK证书链和来自SNP_GUEST_REQUEST的SNP guest message的认证报告
其中VCEK和ASK_ARK的证书从AMD KDS服务器获得
可选的input参数:
- —ofolder [folder_path] :证书文件和其压缩包的导出目录
输出:
- (可选)—ofolder :证书文件和压缩包的输出目录,若不指定则将文件导出到与SEV-Tool可执行文件相同的目录(vcek.der、vcek.pem、cert_chain.pem、ask.pem、ark.pem、certs_export_vcek.zip)
- 运行于PO端
$ sudo ./sevtool --ofolder ./certs --export_cert_chain_vcek
23.test_all
测试命令,运行后查看输出是否正常
需要的input参数:
- —ofolder [folder_path] :创建一个测试目录用于存储测试期间生成的文件和数据
- 注意:测试开始之前会自动清理该目录
$ sudo ./sevtool --ofolder ./tests --test_all
立意高远,以小见大,引发读者对社会/人性的深层共鸣。
价值导向积极,彰显社会责任意识。
字里行间流露出真挚的情感,让人感同身受,共鸣不已。
哈哈哈,写的太好了https://www.lawjida.com/
《火星》日本剧高清在线免费观看:https://www.jgz518.com/xingkong/58502.html
《火星》日本剧高清在线免费观看:https://www.jgz518.com/xingkong/58502.html
《亚瑟王神剑》剧情片高清在线免费观看:https://www.jgz518.com/xingkong/165514.html
《三个火枪手国语》动作片高清在线免费观看:https://www.jgz518.com/xingkong/131166.html
博主太厉害了!
《杀人是我的职业,亲爱的》喜剧片高清在线免费观看:https://www.jgz518.com/xingkong/6381.html
《禁欲大佬他沦陷了》短片剧高清在线免费观看:https://www.jgz518.com/xingkong/24235.html
哈哈哈,写的太好了https://www.cscnn.com/
叼茂SEO.bfbikes.com
博主真是太厉害了!!!