web-dev-qa-db-ja.com

EternalBlueエクスプロイトはどのように機能しますか?

EternalBlue エクスプロイトがどのように機能するかについての説明を何気なくググってみましたが、WannaCryに関するメディアの嵐を考えると、せいぜいSMBエクスプロイト。 MicrosoftのSMBプロトコルの実装にバグがあったことがわかりましたが、知りたいのは、Microsoftのセキュリティ上の欠陥を悪用するためにどのような種類のペイロードを作成する必要があるか、そして何をしたかです。 Microsoftは、Windowsをそのような攻撃に対して脆弱なままにしたことを間違っていますか?一部のソースコードへの(評判の良い)リンクでさえ、私がこれまでに見つけた以上のものです。

15
butallmj

説明されているMetasploitのEternalBlueのエクスプロイトがある here

Srv!SrvOs2FeaToNtにバッファオーバーフローmemmove操作があります。サイズはSrv!SrvOs2FeaListSizeToNtで計算され、DWORDがWordに差し引かれる数学的エラーが発生します。カーネルプールはグルーミングされているため、オーバーフローがうまくレイアウトされ、SMBv1バッファーが上書きされます。実際のRIPハイジャックは、後でsrvnet!SrvNetWskReceiveCompleteで完了します。

私は専門家ではないので、Rubyはあまり理解していませんが、DWORDはWordの2倍の長さであるため、大きなバッファを送信してメモリに書き込むことができます。カーネルメモリは、データの書き込み中に整理(グルーミング)されるため、RIPポインターがハイジャックされ、上書きされたメモリをポイントすると、送信されたペイロードが読み取られ、実行されます。

あなたはソースコードを見ることができます ここ

間違ったことに関しては、DWORDからDWORDへ、またはWordからWordへの減算があったはずです。サイズの違いがあることで、メモリを上書きできました。

編集: チェックポイントは驚くべき書き込みを行いました このエクスプロイトに関連する3つのバグをすべて説明し、Ruby読んだコードはバグ1/3( Checkpointの記事のバグA)を参照してください。さらに深く知りたい場合は、チェックしてください。

15
Daniel V