Lenovo U310でAES-NIのロックを解除します

この投稿は実質的にUEFIトピックの続きです。



購入履歴



全体の話は、ウルトラブックLenovo U310(Windows 8搭載)の購入から始まりました。 以下のようなパラメーターに従って、ウルトラブックが選択されました。





機密データ+作業プログラムのソースコードを常に使用するため、暗号化自体が重要でした。

したがって、このすべてがTrueCryptで暗号化されたHDD上のパーティション全体を占有していました。



データ量が非常に大きいため、暗号化のソフトウェア実装では十分ではありません。 むしろ、それで十分ですが、それらの検索はかなり長い+長いコンパイルになります。



だからこそ、ハードウェア暗号化AESをサポートするウルトラブックを入手したかったのです。

Intel i5-3317uプロセッサを搭載したU310が選択されました。 プロセッサの説明を見て、ハードウェアAES(AES-NI命令セットを使用して実装されている)があることを確認しました。





問題の始まり



購入後、すぐにすべてのサービスパーティションを削除し、Windows 8をSSDに配置しました(HDDにプログラムファイルを残しました)。 一般的に、私は仕事に満足していました。 データパーティションの暗号化を開始する時まで。 TrueCryptは、AES-NIが欠落していることを頑固に示しました。 CPUIDおよびその他のプログラムも、AES-NIが欠落していると書いています。 平均暗号化速度は218メガバイト/秒でしたが、プロセッサーの負荷は非常に高くなりました。



この理由でネットワークを検索したところ、プロセッサが同じであっても、AESのあるものとそうでないものがあることがわかりました。 以前のバージョンでは、すべてが機能していました(UEFI 65CN21WW)。 後で(UEFI 65CN89WW)動作しなくなりました。 これは、ハードウェアAESが利用可能になると、ウルトラブックがハードウェア暗号化のデバイスのカテゴリに移行されるため、暗号化機器としての認定が必要になるためと思われます。 また、Lenovoは、一部のウルトラブックのモデルで、AEFIブロックAES-NIを介して保存します



UEFIの古いバージョンを配置できませんでした 公式サイトのソフトウェアがUEFIのフラッシュを拒否し、エラーを発行した

エラー233-SecureFlashシステムでは保護されたカプセルのみが許可されています! ステータス= 1。



当時、ネットワークの新しいバージョンはなく、インストールされていませんでした。 一般に、ハードウェアAESの欠如に対処する必要がありました。



さらに、UEFIチップがボードにしっかりとはんだ付けされており、回復システムがなかったため、すべてが複雑になりました。 つまり 手首を軽く振ると、ウルトラブックはレンガになりました。



問題解決



w3bsit3-dns.comでしばらくしてから、GlowWormの友人がU310バージョン65CN90WWのUEFIを投稿したことに気付きました。 そして、普通ではありませんが、UEFIシェルの下からの更新の起動があります。 通常、BIOSをフラッシュできるUEFIモジュールが見つかったのはそこです。

ちなみに、UEFIのほとんどすべてのプログラムとモジュールにはPE +形式(64ビット)があります。 つまり x64をサポートするWindows用のCコンパイラを使用して簡単に作成できます。



一般に、再フラッシュ後、AESは機能しませんでした。 ほとんどの場合、ロックデータはNVRAMまたは他の場所にありました。 しかし、すでに小さな手がかりがありました。 正常に再フラッシュすることが可能であったため、UEFIモジュールのパッチを既に実験することができました。



マニュアルとネットワーク上の情報を読んだだけで、MSRレジスタの変数0x13CがAES-NIの動作に関与していることがわかりました。

読み取りおよび書き込みMSRへのアクセスは、カーネル(リング0)からのみ行うことができます。 そこに0または1を書き込むドライバーの手動書き込みでは、システムが書き込みを許可していないため、結果は得られませんでした。 また、ネットワークからの情報によると、一部の値はSMM(システム管理モード)からしか変更できないことがわかりましたが、これは単に現実的ではありません。



pastebinにAES-NIのロックを解除するためのパッチに関するメモが見つかりました。



ロックの意味は、MSR 0x13Cの値が判明し、AESが存在する場合、何らかの変数の値が要求され、その値に基づいて新しい値がMSR 0x13Cに書き込まれ、それによってAES-NIの動作が制御されることでした。



pastebinにコードがありました

0000000000033D7: B9 3C 01 00 00 mov ecx,13Ch 00000000000033DC: E8 47 18 00 00 call 0000000000004C28 00000000000033E1: A8 01 test al,1 00000000000033E3: 75 2E jne 0000000000003413 00000000000033E5: 0F B7 15 F4 11 00 movzx edx,word ptr [000045E0h] 00 00000000000033EC: 66 0F BA E2 09 bt dx,9 00000000000033F1: 72 0B jb 00000000000033FE 00000000000033F3: F6 C2 04 test dl,4 00000000000033F6: 75 06 jne 00000000000033FE 00000000000033F8: 48 83 C8 03 or rax,3 00000000000033FC: EB 08 jmp 0000000000003406 00000000000033FE: 48 83 E0 FD and rax,0FFFFFFFFFFFFFFFDh 0000000000003402: 48 83 C8 01 or rax,1 0000000000003406: 48 8B D0 mov rdx,rax 0000000000003409: B9 3C 01 00 00 mov ecx,13Ch 000000000000340E: E8 1F 18 00 00 call 0000000000004C32 0000000000003413: 33 C0 xor eax,eax 0000000000003415: 48 83 C4 38 add rsp,38h 0000000000003419: C3 ret and change 00000000000033F8: 48 83 C8 03 or rax,3 to 00000000000033F8: 48 83 C8 01 or rax,1
      
      







しかし、それは他のラップトップでのUEFIの言及でした。 したがって、モジュールとアドレスが一致しない場合があります。 しかし、署名によって自分でいつでも見つけることができます。



パッチファームウェア



1)まず、PhoenixToolツールが必要です。 PhoenixTool 2.01がネット上で見つかりました。 それを使用して、ファームウェアを解凍します(ファイル65CN90WWv.rom)

ファイルは次の形式です

XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXXX_0_XXXX.ROM

XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXXXXX_1_XXXX.ROM

XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXX_2_XXXX.ROM

XXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXXXX_3_XXXX.ROM



XXXXがファイルに一致する場合、これらのファイルは同じモジュールに属します。 0、1、2、3の数字が変わります。 ファイルの1つにはコード(バイナリまたはPE64)があり、別のファイルにはモジュールの説明(名前)



2)次に、構築する必要がある署名を見つける必要があります。 頭に浮かぶのは、mov ecx、13Ch命令を使用することだけです。これには、MSRに関心のある数が含まれているためです。



3)Total Commanderを使用して、HEXの内容でファイルを検索します:B9 3C 01 00 00(mov ecx、13Chオペコードだけがあります)。 その結果、CpuInitDxe.efiとShell.efiの2つのモジュールが見つかりました。

論理的には、CpuInitDxe.efiはちょうどいいです。 これは、ファイル62D171CB-78CD-4480-8678-C6A2A797A8DE_1_727.ROMを持つモジュールの名前です。



4)62D171CB-78CD-4480-8678-C6A2A797A8DE_1_727.ROMを、必要な命令が見つかったコードのIDA(64ビットバージョン)を介して分解します。 この命令は、sub_4580関数にあります。 すぐ近くに命令またはrax、3が表示されます(HEXのオペコード:48 83 C8 03)



5)WinHEXを使用すると、ファイル内のその場所を簡単に見つけて(HEX:48 83 C8 03)、それをHEX:48 83 C8 01に置き換えることができます。



6)PhoenixToolを使用して、パッチを適用したモジュールを交換します



以上で、新しいファームウェアの準備ができました。



結果



フラッシュと再起動後、TrueCryptはAES-NI命令の存在を確認しました(CPUIDと他のプログラムがこれを確認しました)。

AESパフォーマンス(TrueCrypt測定による)は218メガバイト/秒から1.2ギガバイト/秒に増加しました。 そのため、ほぼ5倍の速度になりました。



もちろん、(nvramまたは他の場所を編集することで)すべてを簡単に行うことができるかもしれませんが、私にとってはこれは不明のままです。



行われたすべての作業の唯一のマイナス点は、ウルトラブックが保証を失ったことです。



All Articles