IBM Cloud: Intel SGX環境のHW構成を確認してみた

# 1.　はじめに

IBM Cloudでは（若干古いプロセッサーではあるが）Intel SGXが利用可能である。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/3476e7a4-3e30-5ece-6f89-99086b059cd8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/5c5fd996-d5fa-3fae-7903-25a4d73b408b.png)

実際にCentOSを使ってプロビジョニングしてみると、以下のようになるが、この構成を実環境で確認してみた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/96ab1059-cd0b-3fe5-bff5-caab4fdfd1be.png)


# 2. lshw/lscpuコマンドによるHyperthreadingの確認

- `cores=4 enabledcores=4 microcode=0 threads=4`となっているので、HyperThreadingは無効になっているように見える。
- `Thread(s) per core`も1である。

```
[root@xxxxx-sgx ~]# lshw -class processor
  *-cpu
       description: CPU
       product: Intel(R) Xeon(R) E-2174G CPU @ 3.80GHz
       vendor: Intel Corp.
       vendor_id: GenuineIntel
       physical id: 2c
       bus info: cpu@0
       version: 6.158.10
       serial: To Be Filled By O.E.M.
       slot: CPU
       size: 1068MHz
       capacity: 4700MHz
       width: 64 bits
       clock: 100MHz
       capabilities: lm fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp x86-64 constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb invpcid_single ssbd rsb_ctxsw ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear spec_ctrl intel_stibp flush_l1d arch_capabilities cpufreq
       configuration: cores=4 enabledcores=4 microcode=0 threads=4
```
```
[root@xxxxx-sgx ~]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    1
Core(s) per socket:    4
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 158
Model name:            Intel(R) Xeon(R) E-2174G CPU @ 3.80GHz
Stepping:              10
CPU MHz:               899.902
CPU max MHz:           4700.0000
CPU min MHz:           800.0000
BogoMIPS:              7584.00
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              8192K
NUMA node0 CPU(s):     0-3
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb invpcid_single ssbd rsb_ctxsw ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear spec_ctrl intel_stibp flush_l1d arch_capabilities
```
# 3. cpuidによる確認


- `SGX: Software Guard Extensions supported`の結果より、CPUが対応している。
- `SGX_LC: SGX launch config supported`の結果より、Flexible Launch Control (FLC)をサポートしている。
- `SGX1 supported `の結果より、BIOSでも有効化されている。


```
[root@xxxxx-sgx ~]# yum install cpuid
[root@xxxxx-sgx ~]# cpuid | grep -i sgx
Disclaimer: cpuid may not support decoding of all cpuid registers.
      SGX: Software Guard Extensions supported = true
      SGX_LC: SGX launch config supported      = true
   SGX capability (0x12/0):
      SGX1 supported                         = true
      SGX2 supported                         = false
   SGX attributes (0x12/1):
      SGX: Software Guard Extensions supported = true
      SGX_LC: SGX launch config supported      = true
   SGX capability (0x12/0):
      SGX1 supported                         = true
      SGX2 supported                         = false
   SGX attributes (0x12/1):
      SGX: Software Guard Extensions supported = true
      SGX_LC: SGX launch config supported      = true
   SGX capability (0x12/0):
      SGX1 supported                         = true
      SGX2 supported                         = false
   SGX attributes (0x12/1):
      SGX: Software Guard Extensions supported = true
      SGX_LC: SGX launch config supported      = true
   SGX capability (0x12/0):
      SGX1 supported                         = true
      SGX2 supported                         = false
   SGX attributes (0x12/1):
```


# 4. SGX-hardware listで紹介されているプログラムを利用した確認。

[この記事](https://hazm.at/mox/security/tee/intel-sgx/index.html#check-for-hardware-support)を参照。
[SGX-hardware list](https://github.com/ayeks/SGX-hardware) に含まれているテストプログラムを実行してより詳細な情報を確認することもできる。

- `sgx available: 1`となっていることから、CPUが対応している。
- `sgx launch control: 1`となっていることから、Flexible Launch Control (FLC)をサポートしている。
- `sgx 1 supported: 1`となっていることから、BIOSでも有効化されている。
- `size of EPC section in Processor Reserved Memory, 94 M`より、Enclave のメモリ空間で使用できる最大サイズは 94MB であることがわかる。

```
[root@xxxxx-sgx ~]# yum install -y git gcc
[root@xxxxx-sgx ~]# git clone https://github.com/ayeks/SGX-hardware.git
[root@xxxxx-sgx ~]# cd SGX-hardware/
[root@xxxxx-sgx SGX-hardware]# gcc test-sgx.c -o test-sgx
[root@xxxxx-sgx SGX-hardware]# ./test-sgx
eax: 906ea ebx: 2100800 ecx: 7ffafbff edx: bfebfbff
stepping 10
model 14
family 6
processor type 0
extended model 9
extended family 0
smx: 1

Extended feature bits (EAX=07H, ECX=0H)
eax: 0 ebx: 29c6fbf ecx: 40000000 edx: bc002e00
sgx available: 1
sgx launch control: 1

CPUID Leaf 12H, Sub-Leaf 0 of Intel SGX Capabilities (EAX=12H,ECX=0)
eax: 1 ebx: 0 ecx: 0 edx: 241f
sgx 1 supported: 1
sgx 2 supported: 0
MaxEnclaveSize_Not64: 1f
MaxEnclaveSize_64: 24

CPUID Leaf 12H, Sub-Leaf 1 of Intel SGX Capabilities (EAX=12H,ECX=1)
eax: 36 ebx: 0 ecx: 1f edx: 0

CPUID Leaf 12H, Sub-Leaf 2 of Intel SGX Capabilities (EAX=12H,ECX=2)
eax: 80200001 ebx: 0 ecx: 5e00001 edx: 0
size of EPC section in Processor Reserved Memory, 94 M

CPUID Leaf 12H, Sub-Leaf 3 of Intel SGX Capabilities (EAX=12H,ECX=3)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M

CPUID Leaf 12H, Sub-Leaf 4 of Intel SGX Capabilities (EAX=12H,ECX=4)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M

CPUID Leaf 12H, Sub-Leaf 5 of Intel SGX Capabilities (EAX=12H,ECX=5)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M

CPUID Leaf 12H, Sub-Leaf 6 of Intel SGX Capabilities (EAX=12H,ECX=6)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M

CPUID Leaf 12H, Sub-Leaf 7 of Intel SGX Capabilities (EAX=12H,ECX=7)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M

CPUID Leaf 12H, Sub-Leaf 8 of Intel SGX Capabilities (EAX=12H,ECX=8)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M

CPUID Leaf 12H, Sub-Leaf 9 of Intel SGX Capabilities (EAX=12H,ECX=9)
eax: 0 ebx: 0 ecx: 0 edx: 0
size of EPC section in Processor Reserved Memory, 0 M
```

# 5. サポート経由で入手したBIOS情報

- HyperthreadingはOFFになっている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/84392a0a-15b8-a909-c800-63894ed3f135.png)
- Intel SGXは有効化されている
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62127/5e670f57-7539-4305-835d-e9b0f111950e.png)