アカウント名:
パスワード:
電源供給なしでも内容を保持できるものは DRAM とは呼びません。
DRAM に見せかけたなにかを作れるとして、それをどうやって活用するかは難しいですね。DRAM に書かれた内容をすべて WiFi で外部に送るとか?
DRAMチップ内は制御回路があるからその気があればチップ内のROMなり回路に不正なコードを混ぜることは可能。ここで、「不正なコードがいるのはメモリセルそのものじゃない」と言われれば仰る通り。ユーザにとっては、メモリセルに直接アクセスできない以上はセル内だろうと制御部だろうと差はないけど。
ユーザにとって瑣末な話を続けてみる。DRAMのメモリセルそのものに初期値をもたせることは可能だろうか?DDR3はリセット端子があるけど、それを各セルにつなぐのは容易ではないか…な?。
POSTコード辺りはまだ固定値だと思うので、初期化時にBIOSを改竄>ROM領域から仮想マシン注入>正規OS起動とかでしょうかねぇ?
DRAMの場合、1本だけ使うのならともかく、複数挿して使う場合にどのようにメモリの中身をマシンから見えるようにするかは実装依存ですよね。極端な話、データバス側をてんでバラバラに接続してても各ビットが確実に読み書きできれば問題ないし、SDRAMのようにメモリチップ内部が高速アクセスのため複数のバンク構成を採っている場合でも、どのアドレスにどのスロットのどのバンクを割り振るかはホスト側で決められることで、それをDRAM自体が知っている必要は全くない。おそらく物理アドレスと仮想アドレスの関係も知らんでしょう。確かにメインメモリ上にアドレス変換テーブルは展開されているでしょうが、どのアドレスにそれが来るのか、おそらくDRAM側では見当もつかないだろうと思います。それをチェックするロジックはかなり大規模になるでしょう。当然、DRAMとしては貴重な回路面積を多量にもっていかれて容量が減ってしまいます。しかも確実にそのチップに変換テーブルが載るかどうか確実ではない。その上、たいていのCPUはキャッシュを持ってますから、正確にデータの書き換えられた履歴を追っかけるのも難しい。
そう考えると、確実にどう読まれるか予想できるROM上のファームウェアと比較して、苦労の多さに比較して得られるモノは少ないので、何が書かれるか分からないDRAMのほうに何か仕込むのは難しいと思いますよ。
まず、私が想定してるのは単なるDRAMチップでなく、DRAMモジュールを想定していました。現行のPCを攻撃ターゲットとした場合、CPUとメモリコントローラーに関しては種類が限られます。特にAMDは既に長期に渡りCPUに内蔵されており、Intelもi7から内蔵されていますのでメモリアクセス方法はかなり固定されます。マッピングテーブルに関して実は資料が公開されてる場合もありまして、AMDに関してはBIOS and Kernel Developer’s Guide [amd.com]を参照すれば詳しく載っています。
そもそも、攻撃対象が判明してるなら、電源投入直後に書き込まれる内容を元にどのバンクが割り当てられたか各々のメモリが判別可能と思われます。# 極論、対象のどのスロットに差し込まれてもOK、それ以外だったら無効化される程度の自由度さえあればOK(むしろ発覚させない為にその方が好ましい)。
また現行メモリはヒートスプレッダが装備されるケースもあり、その際は物理的に基盤パターンやチップを隠蔽可能となります。この場合別にDRAMモジュールの内部に実装する必要すらなく、隙間から見える形さえ気にすればある程度堂々と仕込めます。例えば片面は本物のDRAMで、反対側のDRAMは偽装されたROMと高周波デバイスのような形ですね。BGAなら、足の本数もわからないでしょうし
攻撃手法として今のPOSTコードやBIOSはまだASLRの様な所まで辿り着いていないのではないでしょうか?でしたら、本物のBIOSが起動する前や途中に独自の攻撃コードをスタックオーバーラン等のようなアドレス書き換えの要領で起動させ、ハイパーバイザとして起動後に本物のBIOSのように振舞ってしまえば外部からは簡単には判らなくなります。そして後の全てのコードは攻撃者のハイパーバイザ上で稼動するのでお好きに煮るなり焼くなりすれば良いのです。場合によっては、POSTコード・BIOSがキャッシュに全て収まってしまうので実際には無理という可能性もありますが・・・
もちろん、言う程この手法は簡単ではないでしょうね。少なくともメモリに使われる信号を読めて改竄する必要がありますし、本当に可能なのか?記憶領域の問題等がありますから。
所詮キャパシタの塊なんだから、メモリセルの初期値はランダムと言うのが建前ですよね?BIOSがメモリチェックして固定パターン書き込んで初期化する。供給電圧が特定の値&&リフレッシュサイクル(でいいのか?)の時のアドレスが特定の時だけビットパターンが面白いことになるというのはやれなくないように思えますけど。これを応用すると、メモリチェックでは大丈夫でも某かの消費電力制御ソフトと特殊なDRAMでバックドアが形成出来てしまうかも知れない。或るパワーステートで、確実にあるアドレスをアクセスするソフトがあれば、この実行コードをすり替えることが出来る。とか…
DRAMのメモリセルそのものに初期値をもたせることは可能だろうか?
その「初期値」はどうやってチップ内に保存されているのか考えてみてくれよ。#ROM以外の何物でもないな。
その初期値が書き換え不可能であればそうですね。
DRAMセルの中に数KバイトのROM領域を作ってしまうという話じゃないかと。
普通、DRAMセルといえば1ビットを記憶する単位のことなんで、その中に数Kバイトも書けたら、そりゃすごいなあ、と思ってしまいました。
上の方にも「1Gチップに512バイトほど不正コードを突っ込んで」とかいう話があったけど、512バイトの連続領域が1チップに記憶されると思っているのかと。
> 上の方にも「1Gチップに512バイトほど不正コードを突っ込んで」とかいう話があったけど、512バイトの連続領域が1チップに記憶されると思っているのかと。
頭が固いおじさんだな。
不正コードを1チップに記憶されなきゃいけない必然性はないでしょ。
DRAMにDRAM以外の何かを入れる時点で、もう何でもありですよ。DRAMモジュールにCPUを載せてDRAMをエミュレートして、高度な条件下でDRAM内容を書き換えるってことも可能かと。
そのうち、WiFiも搭載されたりするんでしょか。
あの~、その言葉はいつ出てきたんですか?
『上の方にも「1Gチップに512バイトほど不正コードを突っ込んで」とかいう話があったけど、512バイトの連続領域が1チップに記憶されると思っているのかと』と書いてますが。この文を見て、「512バイトの連続領域は1チップに記憶されない」という情報を導き出せない人が存在すると主張するのでしょうか?
ちょっと知識があるだけで、まわりをすぐに見下すよくあるあれですね。
私がDRAMに関して持っている知識など、本当に初歩的なものだけです。そんなものは、「ちょっと知識がある」にも入りません。それに、知っていても何の自慢にもならないような知識です。そんなもので人を見下せるわけがありませんね。が、DRAMに関する話をするのであれば、最低限必要な知識ぐらい身につけてないと、意味がある意見など述べられるわけがありません。それだけの話です。それを指摘すると、「人を見下した」ということになるんですか?
これ [srad.jp]とこれ [srad.jp]についてどう思うか話してくれないか?
フレームのもとになりそうなコメントに、「フレームのもと」というモデがついているな、としか思いませんが。それが何か。
「ギャーギャー騒ぐ」という表現も意味不明です。あなたのコメントの親コメントには、穏やかな言葉が並んでいるだけなのですが、一体どの部分をもって「騒ぐ」と言っているのでしょうか?
さらに冷やせば電源落としても記憶保持できる時間を延長できるし。
8ビットマイコンで当時の64KBサイズのDRAMの場合、10秒くらいは余裕でしたっけ。リセット後にウォームスタートかけてDRAMにロードされたメモリイメージをブッコ抜くぐらいは普通にできました。スペックシート上では2ms以内に128Cycle(7bit)分のリフレッシュが必要なはずなんですけどね。
32bitマシンで余ってる4GB超メモリを使うRAMディスクが流行ったとき、ためしにRAMディスクにウォームスタート機能を付けてみたんですが、あちこち壊れて使いものになりませんでしたよ。中途半端に残ってる分たちが悪いです。仮想マシン上ではうまく動いたんですけどね(仮想マシンの仮想化されたメモリには当然リフレッシュ動作なんか必要ないから)。
この攻撃への対策として,共通鍵暗号方式AESの暗号化処理をRAMではなくSSE命令のレジスタだけを用いるように改良したAESSEという実装方式がEUROSEC 2010 [iseclab.org]という学会で発表されているそうです( 論文 [sigops-france.fr]と著者のブログ [w0rm.de]で公開されているスライド資料 [w0rm.de])
「DRAM に偽装した何か」ならまだしも、DRAM にウィルスを仕込むと書いてたらやっぱりネタ扱いでしょう。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
人生unstable -- あるハッカー
ぱらのいや (スコア:5, 興味深い)
・組込機器のチップの外部調達が増えている。
・悪意のあるチップ設計者によって、余計な機能が組み込まれるかもしれない。(機器を停止したり、情報を外部に転送したり)
・各ブロックが互いを信用しない構成をとり、不正な動作を検出・停止する必要がある。
・回路規模は数%増えるかもしれないが国防関係者なら評価してくれるだろう。
つまり……
中国やイスラエルの情報収集機関が、情報を横取りしたり機器を強制停止する蟲を仕込む*かもしれない*から対策しておけ、という事でしょうか?
(個人で行っても旨味はないよね。 愉快犯ならありえるけど経歴を棒に振る程の喜びが得られるものなの?)
notice : I ignore an anonymous contribution.
Re:ぱらのいや (スコア:2, おもしろおかしい)
DRAMにだってやろうと思えば、ウィルス入れられるよね。
政府調達が無茶苦茶になってきてるから、確かに国防レベルだと
心配した方がいいと思う。
Re: (スコア:0)
これのどこが「おもしろおかしい」なの?
Re: (スコア:0)
Re: (スコア:0)
「RAMディスク作成ソフト」と銘打ってリリースすれば
デジタル署名がなくても、出処が不明でも勝手にインストールしてもらえるよ
おまけにアホなライターが宣伝までしてくれる
Re: (スコア:0)
DDR3とかだと、どのOSに刺さるか大体解るしだろうしね。
1Gチップに512バイトほど不正コードを突っ込んで、ある種の
条件でのみアクセスさせるってのは可能だよ。
Re: (スコア:0)
電源供給なしでも内容を保持できるものは DRAM とは呼びません。
Re:ぱらのいや (スコア:1, 興味深い)
君がDRAMと思っているものに
攻撃者がROMでもフラッシュメモリでもなんでも積んでる
って可能性を考えたことはないのかい?
Re: (スコア:0)
Re: (スコア:0)
DRAM に見せかけたなにかを作れるとして、それをどうやって活用するかは難しいですね。
DRAM に書かれた内容をすべて WiFi で外部に送るとか?
Re:ぱらのいや (スコア:1)
DRAMチップ内は制御回路があるからその気があればチップ内のROMなり回路に不正なコードを混ぜることは可能。
ここで、「不正なコードがいるのはメモリセルそのものじゃない」と言われれば仰る通り。
ユーザにとっては、メモリセルに直接アクセスできない以上はセル内だろうと制御部だろうと差はないけど。
ユーザにとって瑣末な話を続けてみる。
DRAMのメモリセルそのものに初期値をもたせることは可能だろうか?
DDR3はリセット端子があるけど、それを各セルにつなぐのは容易ではないか…な?。
Re:ぱらのいや (スコア:1)
POSTコード辺りはまだ固定値だと思うので、初期化時にBIOSを改竄>ROM領域から仮想マシン注入>正規OS起動とかでしょうかねぇ?
Re:ぱらのいや (スコア:4, 興味深い)
DRAMの場合、1本だけ使うのならともかく、複数挿して使う場合に
どのようにメモリの中身をマシンから見えるようにするかは実装依存ですよね。
極端な話、データバス側をてんでバラバラに接続してても各ビットが確実に読み書きできれば問題ないし、
SDRAMのようにメモリチップ内部が高速アクセスのため複数のバンク構成を採っている場合でも、
どのアドレスにどのスロットのどのバンクを割り振るかはホスト側で決められることで、
それをDRAM自体が知っている必要は全くない。おそらく物理アドレスと仮想アドレスの関係も知らんでしょう。
確かにメインメモリ上にアドレス変換テーブルは展開されているでしょうが、どのアドレスにそれが来るのか、
おそらくDRAM側では見当もつかないだろうと思います。それをチェックするロジックはかなり大規模になるでしょう。
当然、DRAMとしては貴重な回路面積を多量にもっていかれて容量が減ってしまいます。
しかも確実にそのチップに変換テーブルが載るかどうか確実ではない。
その上、たいていのCPUはキャッシュを持ってますから、正確にデータの書き換えられた履歴を追っかけるのも難しい。
そう考えると、確実にどう読まれるか予想できるROM上のファームウェアと比較して、苦労の多さに比較して
得られるモノは少ないので、何が書かれるか分からないDRAMのほうに何か仕込むのは難しいと思いますよ。
Re:ぱらのいや (スコア:1)
まず、私が想定してるのは単なるDRAMチップでなく、DRAMモジュールを想定していました。
現行のPCを攻撃ターゲットとした場合、CPUとメモリコントローラーに関しては種類が限られます。
特にAMDは既に長期に渡りCPUに内蔵されており、Intelもi7から内蔵されていますのでメモリアクセス方法はかなり固定されます。
マッピングテーブルに関して実は資料が公開されてる場合もありまして、AMDに関してはBIOS and Kernel Developer’s Guide [amd.com]を参照すれば詳しく載っています。
そもそも、攻撃対象が判明してるなら、電源投入直後に書き込まれる内容を元にどのバンクが割り当てられたか各々のメモリが判別可能と思われます。
# 極論、対象のどのスロットに差し込まれてもOK、それ以外だったら無効化される程度の自由度さえあればOK(むしろ発覚させない為にその方が好ましい)。
また現行メモリはヒートスプレッダが装備されるケースもあり、その際は物理的に基盤パターンやチップを隠蔽可能となります。
この場合別にDRAMモジュールの内部に実装する必要すらなく、隙間から見える形さえ気にすればある程度堂々と仕込めます。
例えば片面は本物のDRAMで、反対側のDRAMは偽装されたROMと高周波デバイスのような形ですね。
BGAなら、足の本数もわからないでしょうし
攻撃手法として今のPOSTコードやBIOSはまだASLRの様な所まで辿り着いていないのではないでしょうか?
でしたら、本物のBIOSが起動する前や途中に独自の攻撃コードをスタックオーバーラン等のようなアドレス書き換えの要領で起動させ、
ハイパーバイザとして起動後に本物のBIOSのように振舞ってしまえば外部からは簡単には判らなくなります。
そして後の全てのコードは攻撃者のハイパーバイザ上で稼動するのでお好きに煮るなり焼くなりすれば良いのです。
場合によっては、POSTコード・BIOSがキャッシュに全て収まってしまうので実際には無理という可能性もありますが・・・
もちろん、言う程この手法は簡単ではないでしょうね。
少なくともメモリに使われる信号を読めて改竄する必要がありますし、本当に可能なのか?記憶領域の問題等がありますから。
Re:ぱらのいや (スコア:1)
所詮キャパシタの塊なんだから、メモリセルの初期値はランダムと言うのが建前ですよね?
BIOSがメモリチェックして固定パターン書き込んで初期化する。
供給電圧が特定の値&&リフレッシュサイクル(でいいのか?)の時のアドレスが特定の時だけビットパターンが面白いことになるというのはやれなくないように思えますけど。
これを応用すると、メモリチェックでは大丈夫でも某かの消費電力制御ソフトと特殊なDRAMでバックドアが形成出来てしまうかも知れない。
或るパワーステートで、確実にあるアドレスをアクセスするソフトがあれば、この実行コードをすり替えることが出来る。とか…
Re: (スコア:0)
その「初期値」はどうやってチップ内に保存されているのか考えてみてくれよ。
#ROM以外の何物でもないな。
Re: (スコア:0)
その初期値が書き換え不可能であればそうですね。
Re:ぱらのいや (スコア:1)
Re: (スコア:0)
普通、DRAMセルといえば1ビットを記憶する単位のことなんで、その中に数Kバイトも書けたら、そりゃすごいなあ、と思ってしまいました。
上の方にも「1Gチップに512バイトほど不正コードを突っ込んで」とかいう話があったけど、512バイトの連続領域が1チップに記憶されると思っているのかと。
Re: (スコア:0, フレームのもと)
> 上の方にも「1Gチップに512バイトほど不正コードを突っ込んで」とかいう話があったけど、512バイトの連続領域が1チップに記憶されると思っているのかと。
頭が固いおじさんだな。
不正コードを1チップに記憶されなきゃいけない必然性はないでしょ。
DRAMにDRAM以外の何かを入れる時点で、もう何でもありですよ。
DRAMモジュールにCPUを載せてDRAMをエミュレートして、
高度な条件下でDRAM内容を書き換えるってことも可能かと。
そのうち、WiFiも搭載されたりするんでしょか。
Re: (スコア:0)
『上の方にも「1Gチップに512バイトほど不正コードを突っ込んで」とかいう話があったけど、512バイトの連続領域が1チップに記憶されると思っているのかと』と書いてますが。この文を見て、「512バイトの連続領域は1チップに記憶されない」という情報を導き出せない人が存在すると主張するのでしょうか?
私がDRAMに関して持っている知識など、本当に初歩的なものだけです。そんなものは、「ちょっと知識がある」にも入りません。それに、知っていても何の自慢にもならないような知識です。そんなもので人を見下せるわけがありませんね。が、DRAMに関する話をするのであれば、最低限必要な知識ぐらい身につけてないと、意味がある意見など述べられるわけがありません。それだけの話です。それを指摘すると、「人を見下した」ということになるんですか?
Re: (スコア:0)
フレームのもとになりそうなコメントに、「フレームのもと」というモデがついているな、としか思いませんが。それが何か。
「ギャーギャー騒ぐ」という表現も意味不明です。あなたのコメントの親コメントには、穏やかな言葉が並んでいるだけなのですが、一体どの部分をもって「騒ぐ」と言っているのでしょうか?
Re: (スコア:0)
Re:ぱらのいや (スコア:3, 興味深い)
さらに冷やせば電源落としても記憶保持できる時間を延長できるし。
8ビットマイコンで当時の64KBサイズのDRAMの場合、10秒くらいは余裕でしたっけ。
リセット後にウォームスタートかけてDRAMにロードされたメモリイメージをブッコ抜くぐらいは
普通にできました。
スペックシート上では2ms以内に128Cycle(7bit)分のリフレッシュが必要なはずなんですけどね。
Re: (スコア:0)
32bitマシンで余ってる4GB超メモリを使うRAMディスクが流行ったとき、ためしにRAMディスクにウォームスタート機能を付けてみたんですが、あちこち壊れて使いものになりませんでしたよ。中途半端に残ってる分たちが悪いです。仮想マシン上ではうまく動いたんですけどね(仮想マシンの仮想化されたメモリには当然リフレッシュ動作なんか必要ないから)。
Cold Boot Attack (スコア:1, 興味深い)
この攻撃への対策として,共通鍵暗号方式AESの暗号化処理をRAMではなくSSE命令のレジスタだけを用いるように改良したAESSEという実装方式がEUROSEC 2010 [iseclab.org]という学会で発表されているそうです( 論文 [sigops-france.fr]と著者のブログ [w0rm.de]で公開されているスライド資料 [w0rm.de])
Re: (スコア:0)
バカとか言ってるんじゃないよな。
Re: (スコア:0)
「DRAM に偽装した何か」ならまだしも、DRAM にウィルスを仕込むと書いてたらやっぱりネタ扱いでしょう。