## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-EUGNIS-SPECTRE-ATTACK
# ΠΡΠΈΠΌΠ΅Ρ Π°ΡΠ°ΠΊΠΈ Spectre
ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ°ΡΠΊΡΡΡΠΎΠ³ΠΎ ΡΠΊΡΠΏΠ»ΠΎΠΉΡΠ° Β«SpectreΒ» ΠΎΡ 2 ΡΠ½Π²Π°ΡΡ 2018 Π³ΠΎΠ΄Π° (CVE-2017-5753 ΠΈ CVE-2017-5715)
Spectre Π½Π°ΡΡΡΠ°Π΅Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ. ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°ΡΠ°ΠΊΡΡΡΠ΅ΠΌΡ ΠΎΠ±ΠΌΠ°Π½ΠΎΠΌ Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π±Π΅Π·ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π»ΡΡΡΠΈΠΌ ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°ΠΌ, ΡΠ°ΡΠΊΡΡΡΡ ΡΠ²ΠΎΠΈ ΡΠ΅ΠΊΡΠ΅ΡΡ. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈΠ· ΡΠΏΠΎΠΌΡΠ½ΡΡΡΡ
Π»ΡΡΡΠΈΡ
ΠΏΡΠ°ΠΊΡΠΈΠΊ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΡ Π°ΡΠ°ΠΊΠΈ ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π±ΠΎΠ»Π΅Π΅ Π²ΠΎΡΠΏΡΠΈΠΈΠΌΡΠΈΠ²ΡΠΌΠΈ ΠΊ Spectre.
* ΠΠΎΠΊΡΠΌΠ΅Π½Ρ Spectre β Π΄ΠΎΠΊΡΠΌΠ΅Π½Ρ Spectre ΠΈ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄
## Π―Π·ΡΠΊ
C, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ:
* stdio.h
* stdint.h
* intrin.h β Π΄Π»Ρ rdtscp ΠΈ clflush
## Π§ΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΏΡΠΈΠΌΠ΅Ρ?
ΠΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠ΅ΠΊΡΡ Β«The Magic Words are Squeamish Ossifrage.Β» Π² ΠΏΠ°ΠΌΡΡΡ, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ Π΅Π³ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΊΡΠΏΠ»ΠΎΠΉΡΠ°. ΠΡΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΡΠ·Π²ΠΈΠΌΠ°, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ Π² Π²ΡΠ²ΠΎΠ΄Π΅ ΡΠΎΡ ΠΆΠ΅ ΡΠ΅ΠΊΡΡ, ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΠΉ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ.
* * *
Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅, Π΅ΡΠ»ΠΈ Π±Ρ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² `victim_function()` Π²ΡΠΏΠΎΠ»Π½ΡΠ»ΠΈΡΡ ΡΡΡΠΎΠ³ΠΎ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, ΡΡΠ½ΠΊΡΠΈΡ ΡΠΈΡΠ°Π»Π° Π±Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· `array1[0..15]`, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ°Π·ΠΌΠ΅Ρ array1 = 16. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΈ ΡΠΏΠ΅ΠΊΡΠ»ΡΡΠΈΠ²Π½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π°ΠΌΠΈ Π³ΡΠ°Π½ΠΈΡ. Π€ΡΠ½ΠΊΡΠΈΡ `readMemoryByte()` Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π· Π²ΡΠ·ΡΠ²Π°Π΅Ρ `victim_function()` Π² ΠΎΠ±ΡΡΠ°ΡΡΠΈΡ
ΡΠ΅Π»ΡΡ
, ΡΡΠΎΠ±Ρ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΎΠ² ΠΎΠΆΠΈΠ΄Π°Π» Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ x, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π΅Ρ Ρ x Π²Π½Π΅ Π³ΡΠ°Π½ΠΈΡ. Π£ΡΠ»ΠΎΠ²Π½ΡΠΉ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π΅Π²Π΅ΡΠ½ΠΎ, ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠΏΠ΅ΠΊΡΠ»ΡΡΠΈΠ²Π½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΡΠ΅ΠΊΡΠ΅ΡΠ½ΡΠΉ Π±Π°ΠΉΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ x Π²Π½Π΅ Π³ΡΠ°Π½ΠΈΡ. ΠΠ°ΡΠ΅ΠΌ ΡΠΏΠ΅ΠΊΡΠ»ΡΡΠΈΠ²Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΠΈΡΠ°Π΅Ρ ΠΈΠ· `array2[array1[x] * 512]`, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΡΠ΅ΡΠΊΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ `array1[x]` Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΊΡΡΠ°. ΠΠ»Ρ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π°ΡΠ°ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ flush+probe, ΡΡΠΎΠ±Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΠΊΠ°ΠΊΠ°Ρ ΡΡΡΠΎΠΊΠ° ΠΊΡΡΠ° Π² `array2` Π±ΡΠ»Π° Π·Π°Π³ΡΡΠΆΠ΅Π½Π°, ΡΡΠΎ ΡΠ°ΡΠΊΡΡΠ²Π°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠ°ΠΊΠ° ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠ΅Π»Π΅Π²ΠΎΠΉ Π±Π°ΠΉΡ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π½Π΅ Π±ΡΠ» Π² ΠΊΡΡΠ΅, ΠΏΠ΅ΡΠ²Π°Ρ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡ Π΅Π³ΠΎ Π² ΠΊΡΡ.
ΠΠ΅ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 10 ΠΠ/Ρ Π½Π° i7 Surface Pro 3.
## Π‘Π±ΠΎΡΠΊΠ°
### Π‘ ΠΏΠΎΠΌΠΎΡΡΡ GCC
`gcc -std=c99 Source.c -o spectre.out` ΠΈΠ»ΠΈ `make`
### Π‘ ΠΏΠΎΠΌΠΎΡΡΡ Visual Studio
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π½ΠΎΠ²ΡΠΉ ΠΏΡΡΡΠΎΠΉ ΠΏΡΠΎΠ΅ΠΊΡ, Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ Source.c ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ Β«Π‘Π±ΠΎΡΠΊΠ°Β» (Build).
## ΠΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
### Π’Π΅ΡΡ
`.\spectre.out` Π±Π΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ².
### Π§ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ
`.\spectre.out {address} {length}` Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ:
* address β Π°Π΄ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ victim char *
* length β Π΄Π»ΠΈΠ½Π° char *
## ΠΡΡΠΎΡΠ½ΠΈΠΊΠΈ
* ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΡΠΊΡΠΏΠ»ΠΎΠΉΡΠ°Ρ
Spectre
* CVE-2017-5753 β ΠΠ°ΡΠΈΠ°Π½Ρ 1: ΠΎΠ±Ρ
ΠΎΠ΄ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π³ΡΠ°Π½ΠΈΡ
* CVE-2017-5715 β ΠΠ°ΡΠΈΠ°Π½Ρ 2: ΠΈΠ½ΡΠ΅ΠΊΡΠΈΡ ΡΠ΅Π»Π΅Π²ΠΎΠ³ΠΎ Π°Π΄ΡΠ΅ΡΠ° ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄Π°
* Π‘ΠΏΠΈΡΠΎΠΊ Π·Π°ΡΡΠΎΠ½ΡΡΡΡ
ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Intel