DRAMストリングおよびバンクでの物理アドレスの表示方法

前の記事で、 Intel Sandy BridgeプロセッサがL3キャッシュの物理アドレスをマップする方法について説明しました。

次に、これらのプロセッサのメモリコントローラーがどのように物理アドレスをDRAMの場所、特にDRAMモジュールの行、バンク、列番号にマップするかを説明します。 DRAMアドレスマッピングと呼びます 。 例として1台のテストマシンを使用します。

動機:Rowhammerのバグ


Rowhammerバグに関連するDRAMアドレスのマッピングに興味があります。

Rowhammerは、特定の最悪ケースのメモリアクセスモデルがメモリ破損につながる可能性がある場合、一部のDRAMモジュールの問題です。 これらのDRAMでは、メモリラインの繰り返しのアクティブ化(「ラインの詰まり」)により、隣接するラインの脆弱なセルのビットが変化する電気ノイズが発生します。

これらの繰り返されるラインアクティベーションは、同じDRAMバンクの異なるラインにあるDRAMアドレスのペアへの複数のアクセスによって発生する可能性があります。 DRAMアドレスのマッピングを知ることは、アドレスのどのペアがこの「1つのバンク、異なる行」(同じバンク、異なる行、SBDR)プロパティを満たすかを示すので便利です。

アドレスマッピングの推測と確認


テストのために、私はRowhammerバグに対して脆弱なDRAMモジュールを搭載したマシンを使用しています。 このマシンでrowhammer_testを実行すると、少し変更があります。

このマシンのDRAMアドレスマッピングスキームを知りたいのですが、公開されていません:ここにSandy Bridgeプロセッサがありますが、Intelはこれらのプロセッサのメモリコントローラで使用されるアドレスマッピングを文書化していません。

実際、 rowhammer_testテストでrowhammer_test SBDRアドレスペアを知る必要はありrowhammer_testん。 彼は、ランダムに選択されたアドレスのペアをたたこうと数回試みます。 通常、それらの1/8または1/16はSBDRペアになります。これは、この車では各DIMMに8バンク(および合計16バンク)があるためです。 したがって、メモリのビットを変更するためにDRAMアドレスのマッピングを知る必要はありませんが、そのような知識はテストをより意図的に実施するのに役立ちます。

アドレスのマッピングは文書化されていませんが、DRAMジオメトリに基づいて合理的な仮定を立て、 rowhammer_testによって報告された物理アドレスに基づいて仮定を確認できることがrowhammer_test 。 テストでは、ビットが変更される物理アドレス( 「victims」 )と、これらの変更を行う物理アドレスのペア( 「aggressors」 )が報告されます。 これらのペアはSBDRペアでなければならないため、この経験的データへのアドレスの仮想マッピングを検証できます。

メモリジオメトリ


最初のステップは、マシンにインストールされているDIMMの数と、それらが内部的に構成されている方法を確認することです。

Linuxでdecode-dimmsを使用してDIMM情報を要求できdecode-dimms (UbuntuではI2C-toolsパッケージに含まれています)。 このツールは、DIMMのSPD(Serial Presence Detect)メタデータをデコードします。

私のテストマシンでは、2つの4ギガバイトSO-DIMMで 、8 GBのメモリを提供します。

decode-dimmsは、各モジュールについて次の情報を報告します。

 サイズ4096 MB
銀行x行x列xビット8 x 15 x 10 x 64
ランク2 

これは、両方のDIMMが次のことを意味します。


各DIMMには2つのランクと8つのバンクがあります。 DIMMの容量をクロスチェックすると、予想されたサイズが得られます。

1行あたり8 KB * 32768行* 2ランク* 8バンク= 4096 MB = 4 GB

DRAMアドレスのマッピング


テストコンピューターでは、物理アドレスのビットを次のように使用します。


なぜそのようなディスプレイですか?


このマッピングは、 rowhammer_testの結果にrowhammer_testています(以下を参照)が、シーケンシャルアクセスやステップまたはステップアクセスなどの一般的なメモリアクセスパターンに対して良好なパフォーマンスを提供するようにアドレスビットがマッピングされることも説明できます(ストライドアクセス):


rowhammer_testとの調整


rowhammer_test_extrowhammer_testの拡張バージョン)をテストマシンで6時間実行すると、22か所でビットの繰り返しの変更が明らかになりました。 ( ソースデータと分析コードを参照)。

文字列のミントのテストでは、3つのアドレス(A1、A2、V)のセットが生成されます。


これらのすべての結果について、3つのプロパティが完了することが期待されます。


可能なさらなるテスト


将来、DRAMアドレスマッピングがSBDRプロパティを正しく評価するかどうかを確認するために、さらに2つの実験を実行できます。


さらに、システムユニットから1つのDIMMを取り外すと、DRAMアドレスマッピングからチャネルビットが削除され、それに応じて攻撃者と被害者のアドレスが変更されます。 これも確認できます。

Source: https://habr.com/ru/post/J431102/


All Articles