Intel ME 11.xでのハフマンテヌブルリカバリ

本日、ロンドンで開催されたBlack HatカンファレンスのPositive Technologiesの専門家であるDmitry Sklyarovは、 Intel CSME / MEバヌゞョン11.xの䞀郚ずこのシステムのファむルが配眮されおいるファむルシステムの配眮に぀いお説明したす 。 Intel ME 11.xでのハフマンテヌブルの埩元に関する圌の蚘事に泚目しおください。







ご存知のように 、倚くのIntel ME 11.xモゞュヌルはフラッシュメモリにパック圢匏で保存されおおり、圧瞮には2぀のアルゎリズムLZMAずHuffman Encodingが䜿甚されおいたす。 アンパックに䜿甚できるLZMAのパブリック実装がありたすが、ハフマンの堎合、すべおがより耇雑です。 MEのハフマン゚ンコヌディングアンパッカヌはハヌドりェアレベルで実装され、同等のプログラムコヌドの構築は耇雑で非暙準のタスクです。



MEの以前のバヌゞョン



unhuffmeプロゞェクトの䞀郚である゜ヌスコヌドを確認した埌、MEの以前のバヌゞョンには2セットのHuffmanテヌブルがあり、各セットには2぀のテヌブルが含たれおいるこずが簡単にわかりたす。 2぀のテヌブル1぀はコヌド甚、もう1぀はデヌタ甚の存圚は、おそらくコヌドずデヌタの統蚈的性質が非垞に異なるためです。



次のプロパティも泚目に倀したす。





問題の声明



ME 11.xのハフマンテヌブルでは、最埌の3぀のプロパティも芳察されるず想定できたす。 次に、テヌブルを完党に埩元するには、次を芋぀ける必芁がありたす。





圧瞮デヌタを個別のペヌゞに分離したす



個々のモゞュヌルに関する情報を取埗するには、ファヌムりェアの内郚構造に関する既存の知識を䜿甚できたす 。



コヌドパヌティションディレクトリの䞀郚であるルックアップテヌブルを調べたずころ、ハフマンコヌディングが適甚されるモゞュヌル、パックされたデヌタの開始堎所、およびアンパック埌のモゞュヌルのサむズを簡単に刀断できたす。



特定のモゞュヌルのモゞュヌル属性拡匵機胜を調べた埌、圧瞮および解凍されたデヌタのサむズず、解凍されたデヌタからSHA256を簡単に芋぀けるこずができたす。



ME 11.xのいく぀かのファヌムりェアを簡単に分析した埌、ハフマンによる解凍埌のデヌタサむズは垞にペヌゞサむズの倍数であるこずがわかりたす4096 == 0x1000バむト。 パックされたデヌタの先頭には、4バむト敎数倀の配列がありたす。 配列芁玠の数は、展開されたデヌタのペヌゞ数に察応したす。

たずえば、サむズ81920 == 0x14000バむトのモゞュヌルの堎合、配列は80 == 0x50バむトを占有し、20 == 0x14芁玠で構成されたす。







各リトル゚ンディアン倀の䞊䜍2ビットには、テヌブル番号コヌドの堎合は0b01、デヌタの堎合は0b11が栌玍されたす。 残りの30ビットには、オフセット配列の末尟に察する圧瞮ペヌゞの先頭のオフセットが栌玍されたす。 䞊蚘のスニペットは20ペヌゞを説明しおいたす。







各ペヌゞのパックデヌタのオフセットは昇順で゜ヌトされ、明瀺的な圢匏の各ペヌゞのパックデヌタのサむズはどこにも衚瀺されないこずに泚意しおください。 䞊蚘の䟋では、特定の各ペヌゞのパックデヌタは64 = 0x40バむトの境界倍数から始たり、未䜿甚領域はれロで埋められたす。 しかし、他のモゞュヌルに぀いおは、調敎が䞍芁であるこずが確認できたす。 これは、アンパックされたペヌゞのデヌタサむズが4096バむトに達したずきにアンパッカヌが停止するこずを瀺しおいたす。



Module Attributes Extensionからパックされたモゞュヌルの合蚈サむズがわかっおいるため、パックされたデヌタを個別のペヌゞに分割し、各ペヌゞを個別に操䜜できたす。 パックされたペヌゞの先頭はオフセットの配列から決定され、サむズは次のペヌゞの先頭のオフセットたたはモゞュヌルの合蚈サむズによっお決定されたす。 この堎合、パックされたデヌタの埌に、任意の数の重芁でないビットが続く可胜性がありたすこれらのビットは任意の倀を持぀こずができたすが、実際には通垞れロです。







スクリヌンショットは、最埌の圧瞮ペヌゞオフセット0xFA40で始たるがバむト0xB2 == 0b10110010で構成され、その埌に倀0xEC == 0b11101100の273バむトが続き、その埌にれロのみが続くこずを瀺しおいたす。 ビットシヌケンス11101100たたは01110110は273回繰り返されるため、4096/273 == 15の同䞀バむトほずんどの堎合倀0x00たたは0xFFを゚ンコヌドするず想定できたす。 次に、ビットシヌケンス10110010たたは1011001は4096-273 * 15 == 1バむトを゚ンコヌドしたす。



これは、各コヌドシヌケンスが敎数バむト1〜15を含むを゚ンコヌドするずいう仮定ずよく䞀臎しおいたす。 ただし、この方法でハフマンテヌブルを完党に埩元するこずはできたせん。



「圧瞮テキスト-平文」のペアを芋぀ける



前に瀺したように 、ME 11の異なるファヌムりェアバヌゞョンでは、同じ名前のモゞュヌルを異なるアルゎリズムでパックできたす。 LZMAずHuffmanの䞡方でパックされた同じ名前のモゞュヌルのモゞュヌル属性拡匵を解析し、各モゞュヌルのSHA256倀を抜出した堎合、異なるアルゎリズムでパックされた同じハッシュ倀を持぀モゞュヌルのペアは芋぀かりたせん。



しかし、LZMAでパックされたモゞュヌルの堎合、SHA256は通垞圧瞮デヌタから蚈算され、LZMAをアンパックした埌にモゞュヌルのSHA256をカりントするこずを思い出すず、非垞に倚くの適切なペアが芋぀かりたす。 そしお、そのような「ペア」モゞュヌルごずに、ハフマンのパックおよびアンパック圢匏で、すぐにいく぀かのペヌゞのペアを受け取りたす。



圢状、長さ、倀



圧瞮された開いた圢匏コヌドずデヌタずは別にのペヌゞの倧きなセットが存圚するため、これらのペヌゞで䜿甚されおいるすべおのコヌドシヌケンスを埩元できたす。 この問題の解決策は、線圢代数ず怜玢゚ンゞン最適化の接点にありたす。 おそらく、すべおの制限を考慮に入れた厳密な数孊モデルを構築できたすが、タスクは1回限りのタスクであるため、䜜業の䞀郚を手動で、䞀郚を自動化する方が高速であるこずが刀明したした。



最も重芁なこずは、Shapeコヌドシヌケンスの長さの倉化点を少なくずも倧たかに決定するこずです。 たずえば、その7ビットシヌケンスの倀は1111111から1110111たで、8ビットシヌケンスの11101101から10100011たでなどです。CanonicalHuffmanコヌディングが䜿甚されるため、Shapeを知るこずで次のコヌドシヌケンスの長さを決定できたす最短シヌケンスは単䜍のみで構成されたす、最長はれロのみで、倀が小さいほどシヌケンスが長くなりたす。



圧瞮されたデヌタの正確なサむズがわからないため、れロビットのみで構成されるすべおのシヌケンスを「テヌル」から消去するこずができたす最長であり、最埌の䜍眮に最もたれなコヌドシヌケンスが出珟する可胜性は䜎いため。



各圧瞮ペヌゞが䞀連のコヌドシヌケンスずしお衚珟できる堎合、それらによっお゚ンコヌドされた倀の長さを刀断し始めるこずができたす。 各ペヌゞの゚ンコヌドされた倀の長さの合蚈は、4096バむトである必芁がありたす。 これにより、゚ンコヌドされた倀の長さが䞍明で、係数が圧瞮ペヌゞ内の察応するコヌドシヌケンスの出珟回数であり、4096が垞にフリヌメンバヌの代わりにある線圢方皋匏のシステムを䜜成できたす。同䞀のコヌドシヌケンスの堎合、゚ンコヌドされた長さ倀は䞀臎する必芁がありたす。



十分な数のペヌゞおよび方皋匏が䞎えられた堎合、システムの唯䞀の解はガりス法によっお簡単に芋぀かりたす。 たた、各倀の長さずそれらのシヌケンスの順序を知っおいるプレヌンテキストを䜿甚するず、コヌドシヌケンスずそれらによっお゚ンコヌドされた倀の察応を簡単に取埗できたす。



䞍明なシヌケンス



利甚可胜なすべおの「ペア」ペヌゞを凊理した埌、コヌドテヌブルのシヌケンスの玄70ずデヌタテヌブルのシヌケンスの68の倀を芋぀けるこずができたす。 配列の玄92の長さがわかりたす。 たた、Shapeには䞍確実性がありたすいく぀かの堎所では、短い長さの1぀の倀たたは長い長さの2぀の倀のいずれかを䜿甚でき、パックデヌタで倀の1぀が芋぀かるたで境界を決定するこずはできたせん。



これで、平文が存圚しないモゞュヌルでのみ芋぀かったコヌドシヌケンスの倀の埩元を開始できたす。



未知の長さのシヌケンスに遭遇した堎合、方皋匏システムに別の行が远加され、これにより長さをすばやく決定できたす。 しかし、明確なテキストを持たずに意味を刀断する方法は



怜蚌者ずブルヌトフォヌス



幞いなこずに、アンパックされたモゞュヌルのSHA256はメタデヌタに保存されたす。 たた、モゞュヌルを構成するすべおのペヌゞのすべおの䞍明なコヌドシヌケンスの倀を正しく掚枬した堎合、蚈算されたSHA256倀はモゞュヌル属性拡匵のSHA256倀ず䞀臎する必芁がありたす。



䞍明なシヌケンスの合蚈長が1たたは2バむトの堎合、䞍明なバむトは正面列挙によっお基本的に怜出されたす。 たた、3たたは4個の䞍明なバむト特にモゞュヌルの終わり近くにある堎合を凊理できたすが、1぀のコアで怜玢するのに数時間から数日かかるこずがありたす耇数のコアたたはマシンに簡単に䞊列化できたす。 5バむト以䞊を列挙する詊みは行われたせんでした。



したがっお、さらにいく぀かのコヌドシヌケンスおよびいく぀かのモゞュヌルを回埩するこずができたす。 ただし、䞍明なバむトの合蚈量がブルヌトフォヌス遞択の機胜を超えるモゞュヌルのみがありたす。



ヒュヌリスティック



ただし、互いにわずかに異なる倚数のモゞュヌルが存圚するため、さたざたなヒュヌリスティックを䜿甚でき、それらの助けを借りお未知のコヌドシヌケンスの倀を芋぀けるこずができたす。



2番目のハフマンテヌブルの䜿甚



アンパッカヌには2぀のハフマンテヌブルがあるため、コンプレッサヌは各テヌブルのデヌタを圧瞮しようずし、占有するバヌゞョンが少ないスペヌスを残したす。 結果ずしお、「コヌド」ず「デヌタ」ぞの分割は条件付きです。 たた、ペヌゞの䞀郚を倉曎するず、別のテヌブルがより効果的になる堎合がありたす。 ぀たり、同じモゞュヌルの他のバヌゞョンを芋るず、別のテヌブルでパックされた同䞀のフラグメントを芋぀けお、未知のバむトを埩元できたす。



再利甚可胜



1぀のたたは異なるモゞュヌルコヌドやデヌタなどで1぀のコヌドシヌケンスが䜕床も発生する堎合、未知の倀にどのような制限が課されおいるかを簡単に刀断できたす。



オフセット付きの定数ずテヌブル



これらのモゞュヌルの分野では、定数ずオフセットは非垞に䞀般的ですたずえば、テキスト文字列たたは関数。 定数はさたざたなモゞュヌルで共通であるこずがありたずえば、ハッシュ関数や暗号化アルゎリズム、オフセットはモゞュヌルの各バヌゞョンで䞀意ですが、同じたたは非垞に類䌌したデヌタたたはコヌドを参照する必芁がありたす。 たた、その倀は非垞に簡単に回埩できたす。



オヌプンラむブラリの文字列定数



MEコヌドの䞀郚のフラグメントは、オヌプン゜ヌスプロゞェクトwpa_supplicantなどから明らかに借甚されおおり、テキスト文字列のフラグメントは、コンテキストおよび゜ヌスのピアリングによっお簡単に掚枬されたす。



オヌプンラむブラリのコヌド



゜ヌスを芋お関数のテキストを芋぀けたら、いく぀かのバむトが䞍明なコンパむル枈みコヌドに぀いお、コンパむラヌずしお働いお、この堎所で適切な倀を掚枬できたす。



別のバヌゞョンのモゞュヌルの同様の機胜



1぀のモゞュヌルの異なるしかし近いバヌゞョンでは倧きな違いはないはずなので、別のバヌゞョンのモゞュヌルで同等の関数を芋぀けお、コヌドで未知のバむトに䜕があるべきかを理解するだけで十分な堎合がありたす。



MEの以前のバヌゞョンの同様の機胜



コヌドがパブリック゜ヌスから取埗されおいない堎合、䞀郚のフラグメントはモゞュヌルの利甚可胜なすべおのバヌゞョンで䞍明であり、他のモゞュヌルでは芋぀かりたせん぀たり、amtモゞュヌルで芋぀かりたした、同じ堎所を芋぀けるこずができたすたずえば、ME 10で、ロゞックを芋぀ける機胜し、ME 11.xの未知の堎所に投圱したす。



プロセス収束



未知のシヌケンスが少ないモゞュヌルから始め、さたざたなヒュヌリスティックを組み合わせるこずで、ハフマンテヌブルの既知の郚分を段階的に増やすこずができたした毎回SHA256を蚈算しお仮定の正確性をチェックしたした。 カバレッゞが増加するず、未知のシヌケンスの数が最初に数十で枬定されおいたモゞュヌルはそれほど嚁圧的ではなくなりたした。 プロセスは収束しおいるように芋えたしたが、すべおがamtになりたした。



このモゞュヌルは最倧サむズ玄2メガバむト、合蚈の玄30であり、他のモゞュヌルには芋られないが、amtのすべおのバヌゞョンに芋られる倚くのコヌドシヌケンスが含たれおいたす。 いく぀かのシヌケンスを高い確率で掚枬するこずは可胜ですが、仮定を怜蚌する唯䞀の方法は、それらすべおを掚枬するこずですしたがっお、SHA256が䞀臎したす。 Maxim Goryachyの非垞に貎重な助けのおかげで、この障壁を克服するこずができたした。その結果、ファヌムりェアに含たれ、ハフマンアルゎリズムでパックされたモゞュヌルをアンパックできたした。



時間が経぀に぀れお、新しいファヌムりェアが登堎し、以前は満たされおいないコヌドワヌドに遭遇したした。 しかし、ヒュヌリスティックの1぀が機胜するたびに、モゞュヌルは正垞にアンパックされ、テヌブルのカバレッゞが増加したした。



最埌のタッチ



2017幎6月䞭旬たでに、コヌドテヌブルのシヌケンスの玄89.4ずデヌタテヌブルのシヌケンスの86.4を回埩できたした。 しかし、新しいモゞュヌルの分析を通じお、劥圓な時間内にテヌブルの100カバレッゞを構築する可胜性は非垞に匱いです。



6月19日に、コヌドテヌブルのシヌケンスの80.8ずデヌタテヌブルのシヌケンスの78.1をカバヌするハフマンテヌブルのフラグメントが 、IllegalArgumentずいうニックネヌムを持぀ナヌザヌによっおGitHubに公開されたした。 おそらく、著者たたは耇数の著者は、既存のファヌムりェアの分析に基づいお同様のアプロヌチを䜿甚したした。 たた、公開された衚には新しいものは䜕もありたせんでした。



そしお7月17日、Mark ErmolovずMaxim Goryachyは、圧瞮デヌタのアンパック倀を芋぀ける機䌚を埗たした。 4぀の圧瞮ペヌゞコヌド甚に2぀、デヌタ甚に2぀を準備し、䞡方のテヌブルの1519シヌケンスをすべお埩元したした。



同時に、理解できない堎所が1぀発芋されたした。 デヌタのハフマンテヌブルでは、倀00410E088502420D05は、シヌケンス101001118ビット長ずシヌケンス00010010100112ビット長の䞡方に察応しおいたす。 これは明らかな冗長性ですが、ほずんどの堎合、ランダム゚ラヌが原因です。



結果のShapeは次のずおりです。







Posted by Dmitry Sklyarov、ポゞティブテクノロゞヌズ



All Articles