Intel CPU Spectre ν¨μΉ(Retpoline) μ ν μ€νΈ
μ§λ Meltdown μ·¨μ½μ ν¨μΉλ₯Ό ν΅ν΄μ System Call ν¨μ νΈμΆμ 4λ°°μ μ±λ₯μ΄ νλ½λλ κ²μ μ μ μμμ΅λλ€.
νμ§λ§ μ΄ μ·¨μ½μ μ Intel CPUμμλ§ μ‘΄μ¬νλ μ·¨μ½μ μ΄λ©° Kernel Page Table Isolation (KPTI) ν¨μΉλ₯Ό ν΅ν΄ μ·¨μ½μ μ κ³ μΉ μ μμκ³ , AMD λ° ARM νλ‘μΈμμμλ μν₯μ΄ μμμμ μ μ μμμ΅λλ€.
Spectre μ·¨μ½μ μ μ΄μ ν¬μ€νΈμμλ μ€λͺ ν μ μ΄ μμμ΅λλ€. κ°λ¨νκ² λ€μ ν λ² μ€λͺ λ리μλ©΄, A νλ‘κ·Έλ¨μ΄ B νλ‘κ·Έλ¨μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μΉ¨λ²ν μ μλ μ·¨μ½μ μΌλ‘, ν¬κ²λ κ°μ λ¨Έμ μ OSκ° Host OSμ μ£Όμ λ²μκΉμ§ μΉ¨λ²ν μλ μλ λ§€μ° λ¬΄μμ΄ μ·¨μ½μ μ λλ€. μ΄ μ·¨μ½μ μ Intel CPU λΏλ§ μλλΌ, AMD, ARM CPUμλ μ·¨μ½μ μ΄ μ‘΄μ¬ν©λλ€.
Spectre μ·¨μ½μ μ 2κ°μ μ’ λ₯κ° μμ΅λλ€.
|
Spectre Variant 1 |
Spectre Variant 2 |
λμ μν€ν μ² |
Intel, AMD, ARM |
Intel, AMD, ARM |
곡격 λ°©λ² |
λΆκΈ°λ¬Έ μ€ μ·¨μ½ν μ½λμμ 곡격 |
μ μ±μ½λλ₯Ό ν΅ν 곡격 |
CVE |
CVE-2017-5753 |
CVE-2017-5715 |
ν¨μΉ λ°©λ² |
μννΈμ¨μ΄ μ λ°μ΄νΈ ν¨μΉ |
μννΈμ¨μ΄ μ λ°μ΄νΈ λ° CPU λ§μ΄ν¬λ‘μ½λ ν¨μΉ |
μμ§ Spectre Variant 2 μ·¨μ½μ μ λν΄μ AMD CPUμμλ λ°κ²¬λ λ°κ° μμμ΅λλ€. λ, Variant 1μ λν ν¨μΉμ λν΄μλ μ±λ₯ μ νκ° κ±°μ μμκ³ , 곡격 λ°©λ² λν λ§€μ° κΉλ€λ‘κΈ° λλ¬Έμ, Meltdown μ·¨μ½μ 보λ€λ κ·Έλ κ² μννμ§ μμ νΈμ λλ€.
νμ§λ§ Variant 2 μ·¨μ½μ μ λ€λ₯Έ νλ‘κ·Έλ¨μ μν΄μ 곡격ν μ μκΈ° λλ¬Έμ μ΄μΌκΈ°κ° λ€λ¦ λλ€. νμ§λ§ AMD CPUμ λν΄μλ μμ§ μ·¨μ½νλ€κ³ λμ¨ μ΄μΌκΈ°λ μμ΅λλ€. νμ¬ Intelκ³Ό ARM μν€ν μ²μμλ§ μ·¨μ½νλ€λ μ΄μΌκΈ°κ° μμΌλ©° Googleμμλ Android 8.0 νλ«νΌμμ ν¨μΉκ° μ΄λ―Έ μ§νλμκ³ , Linux Kernel μμλ μ΄λ―Έ ν¨μΉκ° μ΄λ£¨μ΄μ§ μν©μ λλ€. (λ¨, κ° λ°°ν¬ν λ³ ν¨μΉλ μ μΈ)
Google Retpoline
Google Project Zero νμμλ Spectre μ·¨μ½μ μ λν΄μ μ±λ₯ νλ½ μ΄μ μμ΄ ν΄κ²°ν μ μλ€. λΌκ³ μ΄μΌκΈ°ν μ μ΄ μμλλ°, μ΄ λ°©λ²μ΄ λ°λ‘ Retpoline ν΄κ²° λ°©λ²μ λλ€. Googleμμλ μ΄λ₯Ό μ€νμμ€ννμ¬ κ³΅κ°ν λ° μμ΅λλ€.
μ΄ λ°©λ²μ CPUμ ν¬κΈ°μ λμμ΄λ νλμ¨μ΄ κΈ°λ₯, νΉμ λ©λͺ¨λ¦¬ μ£Όμ ꡬ쑰 λ±μ ν° μμλ₯Ό λ°κΎΈμ§ μκ³ λ 보νΈν μ μλ λ°©λ²μΌλ‘ μ€μ KVM, Xen κ°μ κ°μ νκ²½μμ 곡격νλ κ²μ μΆ©λΆν λ°©μ§ν μ μμ΅λλ€.
ν¨μΉ μ μ©
μ§λ λ©νΈλ€μ΄ ν¨μΉ ν μ€νΈμ μ΄μ΄μ μ΄λ²μ μ€νν μ·¨μ½μ μ ν¨μΉλ₯Ό μ§ννμμ΅λλ€. μ§λ λ©νΈλ€μ΄ ν¨μΉλ 리λ μ€ μ»€λμ Meltdown ν¨μΉ μ΅μ μ μ£Όλ κ²λ§μΌλ‘ κ°λ¨ν 컀λμ μ»΄νμΌ ν μ μμμ§λ§, μ΄λ² ν¨μΉλ ν¨μΉ μ΅μ λ§μΌλ‘ μ»΄νμΌ λμ§ μμ΅λλ€.
Retpoline ν¨μΉκ° μ μ©λ 컀λμ μ»΄νμΌ νκΈ° μν΄ μλμ μ€λΉλ¬Όμ΄ νμν©λλ€.
- Linux Kernel 4.15-rc9
- GCC 7.2.1 λ²μ μ Retpoline μ΄μκ° μ μ©λ μ»΄νμΌλ¬
리λ μ€ μ»€λ μμ€λ₯Ό ꡬν΄μ μ»΄νμΌμ ν λ, λ°λμ GCC 7.2.1 μ»΄νμΌλ¬λ₯Ό μꡬν©λλ€. κ°κ°μ νλ‘κ·Έλ¨ μμ€λ μλμ λ²νΌμ ν΅ν΄ ꡬν μ μμ΅λλ€.
μ μ κ²½μ°, Ubuntu 17.10 곡μ λ ν¬μ§ν°λ¦¬μμ GCC 7.2.1 μ»΄νμΌλ¬λ₯Ό ꡬν μ μμ΄ μ§μ μμ€ μ€μΉλ₯Ό μ§ννμμ΅λλ€.
μμ μ μ»΄νμΌλ¬κ° μ΄λ κ² 7.2.1 20180118 μ΄ν λ²μ μ μ»΄νμΌλ¬λ₯Ό κ°μ§ μνμμ 컀λ μ΅μ μ Retpoline ν¨μΉλ₯Ό μ€ λ€μμμΌ Google Retpoline ν¨μΉκ° μ μ©λ©λλ€.
ν¨μΉ νμΈ λ° ν μ€νΈ
컀λμ λΉλνκ³ μ€μΉνλ€λ©΄, μ΄μ Google Retpoline ν¨μΉκ° μ μ©λμλμ§ νμΈν΄λ³΄λλ‘ νκ² μ΅λλ€.
Spectre Variant 2 μ·¨μ½μ λΆλΆμμ, Full generic retpoline νμκ° λνλλ©΄, Retpoline ν¨μΉκ° μ μ©λ κ²μ λλ€.
μ μ κ²½μ°, μ·¨μ½μ ν¨μΉ λκ΅¬μΈ Spectre-meltdown-checkerλ‘ νμΈνμμ§λ§, μ€μ λ‘ κ³΅μμ μΈ νμΈ λ°©λ²μ λ€μμ 컀λ κ°μ ν΅ν΄ νμΈν μ μμ΅λλ€.
# cat /sys/devices/system/cpu/vulnerabilities/spectre_v2
μμ κ°μ μΆλ ₯ν΄μ Full generic retpolineμ΄ λμ€λ©΄ μ μ©λ κ²μ λλ€.
λ§μ½ μ κ° μ¬μ©ν μ·¨μ½μ ν¨μΉ λꡬλ₯Ό μ¬μ©νκ³ μ νλ€λ©΄, μλμ Github λ§ν¬λ₯Ό μ¬μ©νμλ©΄ λ©λλ€.
(https://github.com/speed47/spectre-meltdown-checker)
ν¨μΉ μ μ©μ΄ νμΈλμμΌλ, λ°λ‘ ν μ€νΈ ν΄λ³΄λλ‘ νκ² μ΅λλ€.
ν μ€νΈλ μ§λλ² Meltdown ν¨μΉμμ μ±λ₯ νλ½μΌλ‘ μ΄μκ° λμλ System Call ν¨μμ File I/O λ§μ Test νμμ΅λλ€.
SystemCall Test
μ§λλ²κ³Ό λμΌνκ² 1μ΅ λ²μ System Call ν¨μλ₯Ό νΈμΆνμ¬ μΌλ§λ§νΌμ μκ°μ΄ 걸리λμ§λ₯Ό ν μ€νΈνμμ΅λλ€.
Retpoline ν¨μΉ μ μ κ²°κ³Όμ λλ€. λ¨μν Meltdown ν¨μΉλ§μ μ μ©ν΄μ, Meltdown ν¨μΉ μ μ κ²°κ³Όμ 4λ°° μ λμ μ°¨μ΄ κ·Έλλ‘μ λͺ¨μ΅μ λλ€.
Retpoline ν¨μΉ μ΄ν, μ±λ₯ λ³νκ° κ±°μ μμ΅λλ€.
File I/O Test
File I/O λΆλΆ ν μ€νΈλ μ§λ λ² Meltdown ν¨μΉμ λ§μ°¬κ°μ§λ‘ SSDμμ ν μ€νΈλ₯Ό μ§ννμμ΅λλ€.
ν¨μΉ μ μ ν
μ€νΈμ
λλ€. Meltdown μ±λ₯ μ²΄κ° μν₯μ μ‘΄μ¬ν©λλ€.
Retpoline ν¨μΉ μ μ© ν λͺ¨μ΅μ
λλ€. μμ μ±λ₯ λ³νκ° κ±°μ μ‘΄μ¬νμ§ μμ΅λλ€..
ν μ€νΈ κ²°λ‘ ... (Intel vs Google)
Meltdown ν¨μΉμ μμ΄μ μ±λ₯ μ²΄κ° λ³νκ° λ무 μ¬ν΄, Spectre μ·¨μ½μ ν¨μΉμμλ μ±λ₯ 체κ°μ΄ λ μλ€κ³ νλ€ νμ¬ κ΅μ₯ν κΈ΄μ₯νμ§λ§, λ€νν Google Retpoline ν¨μΉμμλ μ±λ₯ λ³νκ° μ‘΄μ¬νμ§ μμ μ‘°κΈμ μλ νμ΅λλ€. νμ§λ§ μμΈ μ¬νμ΄ μμ΅λλ€..
μ€μ λ‘ Intel CPU Spectre v2λ₯Ό ν¨μΉνλ λ°©λ²μλ 2κ°μ§ λ°©λ²μ΄ μ‘΄μ¬ν©λλ€. 첫 λ²μ§Έ λ°©λ²μ Intel CPUμ λ§μ΄ν¬λ‘μ½λλ₯Ό μμ ν λ°©λ²μΈλ°, μ΄ λ°©λ²μ μ΄μ©νλ©΄ 컀λμμλ IBRS, IBPB, STIBP κΈ°λ₯μ΄ νμ±νλ©λλ€. μ΄ κΈ°λ₯μ΄ νμ±ν λλ©΄, Intelμμλ μΌλΆ CPU μ±λ₯μ΄ μ νλλ€κ³ ν©λλ€.
(곡κ΅λ‘κ²λ μ μ CPUλ μμ§ λ§μ΄ν¬λ‘μ½λ ν¨μΉκ° μ§νλμ΄ μμ§ μμ μ΄ λΆλΆμ λν΄μλ ν
μ€νΈν μ μμμ΅λλ€..)
- IBRS: κ°μ λΆκΈ° κΈ°λ₯μ λλ νλκ·Έμ λλ€. μμ κ°μ λΆκΈ° κΈ°λ₯ μ체λ₯Ό λͺ»νλλ‘ λ§λ κ²μ΄μ£ .
- IBPB: 컀λ μμ <--> μ¬μ©μ μμκ° μ»¨ν μ€νΈ μ€μμΉμ΄ λ°μν κ²½μ°, BTBλ₯Ό μ λΆ μ΄κΈ°ν(κ°μ λΆκΈ° μ΄κΈ°ν) μμ μ ν΅ν΄ λ€λ₯Έ μ¬μ©μκ° BTBλ₯Ό λ³Ό μ μλλ‘ νλ κΈ°λ₯
- STIBP: λ¨μΌ νλ‘μΈμμμ νμ΄νΌμ€λ λ©/SMTκ° λμν λ, κ° μ€λ λ κ° λ©λͺ¨λ¦¬ μμμ 보νΈνλ κΈ°λ₯
λ λ²μ§Έ λ°©λ²μ Googleμμ μ μν Retpoline ν¨μΉ λ°©λ²μ μ΄μ©νλ κ²μ λλ€. μ΄ ν¨μΉ λ°©λ²μ μννΈμ¨μ΄ ν¨μΉλ‘ μ§νν μ μμΌλ©° CPU λ§μ΄ν¬λ‘μ½λκ° μμ λμ§ μμ μνμμλ μ·¨μ½μ ν¨μΉκ° κ°λ₯ν©λλ€. λ μ’μ κ²μ μ±λ₯ μ νκ° κ±°μ μλ€λ κ²μ΄μ§μ. μ·¨μ½μ μ λ§λ λ°©μμ Google Retpoline 곡μ λ¬Έμμ λμ¨ κ²μ²λΌ κ°μ λΆκΈ°λ₯Ό μμΈ‘ μ€ννμ¬ κ³΅κ²© μ½λλ₯Ό 격리 μν€λ λ°©λ²μ λλ€. μ€μ Googleμμλ μ΄ ν¨μΉ λ°©λ²μ Google Cloud Platform, Android, Google Chrome λΈλΌμ°μ μ μ μ©νμμ΅λλ€.
Google Chrome 63 λ²μ μ΄μμ μ¬μ©νκ³ κ³μ λ€λ©΄, μλμ λ§ν¬λ₯Ό ν΅ν΄μ νμ±ν ν μ μμ΅λλ€. μ΄ λ°©λ²μ Spectre v2 μ·¨μ½μ μ μ΄μ©ν 곡격μ μμ¬νλ©΄ μ¬μ΄νΈλ₯Ό 격리 μν€λ κΈ°λ₯μ λλ€. νμ§λ§ μ΄ λ°©λ²μ μμ§ μμ νλ κ²μ΄ μλλ―λ‘ μ°Έκ³ νμ μ μ¬μ©νμκΈ° λ°λλλ€.
(λ§ν¬: chrome://flags/#enable-site-per-process)
λ§μΉλ©°...
μ¬κΈ°κΉμ§ Linux μ΄μ체μ λ₯Ό μ΄μ©νμ¬ Spectre ν¨μΉ μ§νκ³Ό μ±λ₯μ ν μ€νΈ ν΄λ³΄μμ΅λλ€. μ μ μ μ₯μμλ λ§μ΄ν¬λ‘μ½λλ₯Ό ν¨μΉν μ±λ₯ ν μ€νΈλ λ§λ³΄κ³ μΆμμ§λ§, μμ½κ²λ μ΄ λΆλΆμ λμΌλ‘ λ³΄μ§ λͺ»ν μ , νμ§λ§ λ€ννλ μ±λ₯ μ΄μκ° μ΄λ§νΌμΌλ‘ λ§λ¬΄λ¦¬λμ΄μ λ€νμ΄λΌ μκ°νκ³ μμ΅λλ€.
νμ¬ Windows μ΄μ체μ μμλ IBRS, IBPB, STIBPλ₯Ό μ¬μ©ν Spectre v2 ν¨μΉμ λ¬Έμ κ° μλ μ μ νμΈνμ΅λλ€. μΌλΆ CPU λͺ¨λΈμμ μλμΌλ‘ μ΄μ체μ κ° μ¬λΆν λλ νμμ΄ μλ€κ³ νλ, ν΄λΉ λΆλΆμ μ£Όμνμκ³ , ν¨μΉλ₯Ό μ§νν΄μ£ΌμκΈ° λ°λλλ€.μλ§ μ‘°λ§κ° Windowsμμλ Google Retpoline ν¨μΉ λ°©λ²μ μ μ©νμ¬ λ€μ λ΄λμ§ μμκΉ λΌλ μ μ κ°μΈμ μΈ μκ°μ λλ€.
μ¬κΈ°κΉμ§ Spectre ν¨μΉ ν μ€νΈλ₯Ό λ§μΉλλ‘ νκ² μ΅λλ€.
[μ°Έκ³ ]: http://www.hwbattle.com/bbs/board.php?bo_table=cpumbram&wr_id=98565
'Infrastructure > Linux' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
리λ μ€μμ Unix ODBCλ₯Ό μ¬μ©ν΄λ³΄μ (0) | 2018.12.31 |
---|---|
Netplan - μ°λΆν¬(리λ μ€) λ€νΈμν¬ μ€μ (1) | 2018.11.05 |
Intel CPU Meltdown μ·¨μ½μ ν¨μΉ 2μ°¨ ν μ€νΈμ λ§λ¬΄λ¦¬ (0) | 2018.01.05 |
Intel CPU 보μ μ·¨μ½μ ν¨μΉλ‘ μΈν μ±λ₯ κ°μμ 1μ°¨ ν μ€νΈ (0) | 2018.01.04 |
Linuxμμ MQTT Broker, Mosquitto μ€μΉ (0) | 2017.08.28 |