クロストークの脆弱性

近年、Intelプロセッサのあらゆる種類の脆弱性に関する多数の報告が出始めましたそれらの中で最も有名なのは、投機的なコマンド実行の実装におけるエラーに基づくSpectreとMeltdownです。2020年6月、Crosstalkと呼ばれる新しい脆弱性に関するメッセージが表示されました

前述の脆弱性とは異なり、Crosstalkは1つのコアから別のコアへのデータ転送の脆弱性です。したがって、カーネル内の投機的な実行リークを克服するように設計された脆弱性プロテクターは、クロストークから保護できません。この種のデータリークの本質を理解するには、投機的命令の実行とは何か、プロセッサパイプラインがどのように機能するか、およびデータがコア間でどのように転送されるかを知る必要があります。これらの各トピックについて簡単に触れてみましょう。

投機的コンピューティング

プロセッサによる命令の投機的実行は、命令レベルで並列処理を検出するためのハードウェア方式の1つです。計算は、プログラム実行のいくつかのパスに対して同時に実行されます。最も単純な例は、条件付きブランチ内の2つのブランチの投機的評価です。

コンベヤー

, , . , . , , . 16 . , 8 .

?

x86 . , . Vrije Universiteit Amsterdam , . , - MDS (Model-Specific-Registers) RDMSR WRMSR. . userspace CPUID, RDRAND RDSEED.

, DRNG , bootguard . Crosstalk , , , RDRAND RDSEED.

RDRAND RDSEED

RDRAND , digital random number generator (DRNG), . DRNG , . RDSEED , .. RNG.

, RIDL, , : Line Fill Buffer, Load Ports, Store Buffer.

Line Fill Buffer (LFB) L1 Cache ( ) - L1 Cache. , , , LFB . . LFB.

Store Buffer .

Load Ports I/O . , Load Ports .

Crosstalk

Crosstalk . , . , , , LFB, , . . , . , , , .

FLUSH + RELOAD

inline int probe(char *adrs) {
  volatile unsigned long time;

  asm __volatile__ (
    "  mfence             \n"
    "  lfence             \n"
    "  rdtsc              \n"
    "  lfence             \n"
    "  movl %%eax, %%esi  \n"
    "  movl (%1), %%eax   \n"
    "  lfence             \n"
    "  rdtsc              \n"
    "  subl %%esi, %%eax  \n"
    "  clflush 0(%1)      \n"
    : "=a" (time)
    : "c" (adrs)
    :  "%esi", "%edx");
  return time;
}

RIDL LFB, . FLUSH + RELOAD, ( ) FLUSH, , . - . , LFB. ( load), pagefault. , , LFB. , FLUSH + RELOAD. , . , , , . - , LFB.

CPUID

pid_t pid = fork();
if (pid == 0) {
    while (1)
        asm volatile(
            "mov %0, %%eax\n"
            "cpuid\n"
            ::"r"(CPUID_LEAF):"eax","ebx","ecx","edx");
}

for(size_t offset = BEGIN_OFFSET; offset < BEGIN_OFFSET + 4; ++offset) {
    // ...
    for(size_t i(0); i < ITERS; ++i) {
        flush(reloadbuffer);
        tsx_leak_read_normal(leak + offset, reloadbuffer);
        reload(reloadbuffer, results);
    }
}

, CPUID. . MDS. RIDL. . , . FLUSH + RELOAD , . , CPUID 4 , CROSSTALK. , CROSSTALK

. RDSEED. , RDSEED 0, . RDSEED . , , RDRAND RDSEED, - RDSEED. , . , . , , FLUSH + RELOAD.

, , , . , CPUID, . , RDRAND RDSEED , . , LFB. MDS , (hyperthread), , .

, . , , . , , . , , , RDRAND, RDSEED EGETKEY. , , , .

Crosstalk , , . MDS ( , ). , , - . , , . , , MDS.




All Articles