【2018-11-20】勒索ウイルスGrandCrab-v 5.04完全分析


げんプログラムかいせき
サンプルダウンロードリンク
基本ファイル情報ExeInfoファイル情報を表示するPE32 Ollydbgエントリポイントコードは次のとおりです.
脱殻後 OEP,dump IAT、脱殻に成功した後Dieでコンパイル言語をDelphi 7と表示
IDAとODのエントリコード
反砂箱手段
  • メッセージループ
  • 複雑なメッセージループ、タイマーメッセージ、およびカスタムSendMsgを使用して、大量のメッセージを送信し、プログラムの実行時間を延長します.
  • デバイスコンテキスト
  • 長時間のメッセージサイクルはコアコード領域に到達し、中には多くの動的復号関数と大量のGetDCGetStockObjectがあり、一定の時間と大量のメモリ資源を消費した.
  • Sleep

  • 最も重要な手段はSleep()ですSleep 4 ファイルを解放
  • Callダウン
  • プログラムの多くのコードは動的に復号されており、具体的な復号プロセスとは関係なく、callジャンプ時に直接切断すればよい.ファイルを解放する call の図のように、まずPatchが落ちる前のSleepに注意してください.
  • OD大まか分析
  • F 7は過去の分析に従って、まずいくつかのAPIを取得して、それから1つのプロセスを作成して、それからデータをサブプロセスに書き込むことを発見しました
  • IDA詳細分析
  • ODScript dma dumpのメモリを使用して、IDAで静的解析を開きます.まず、GetProcAddressが複数のAPIのアドレスを取得し、その後、CreateProcessが自身のパスが存在するプロセスを作成し、CREATE_SUSPENDEDに転送して保留させ、ZwUnmapViewOfSectionを利用して元のすべてのセグメントをアンインストールし、RtlZeroMemoryを利用してメモリ領域を0VirtualAllocExに置き、WriteProcessMemoryと協力して新しいデータを書き込み、SetThreadContextResumeThreadを利用してプログラムのエントリポイントを修正し、保留中のプロセスの実行を再開Tips:dma : "dma start,size,path"
    ウイルス体を抽出してWriteProcessMemoryで切断し、書き込まれたのは完全なPEファイルであることが分かった.
    dmaコマンドで合計9セグメントのデータを抽出し、PEファイルを新規作成し、ファイルオフセットを手動で整列し、セクションの正しいオフセット量とセクションの実行可能な属性を変更し、ウイルス体を抽出しました.P.S. PCHunter
    第1部の総括元のプログラムはまず殻を加えて、それから大量の混同手段を持って、例えば図はProcessMonitorでいくつかのレジストリの値を読み取るだけでレジストリを書いていないことを検出して、更にその他の危険な操作がなくて、そのため多くの殺軟を过ごすことができます!またSleepなどの遅延手段を用いて砂箱分析の大部分を除去し,またプログラム実行コアウイルスの手段も隠蔽され,傀儡プロセスを利用して新しいPEファイルを書き込み入口点を変更して実行し,コア悪意コードを殺軟検出しにくくした.
    ウイルス体分析
    基本ファイル情報PE 32ビットプログラム、合計8セグメント、 脱殻ファイル情報この殻は脱殻しやすくて、簡単な異種あるいは暗号化の殻、3つのjmp eaxは切断してOEPに着くことができて、それからdump IAT、探し当てたOEPは以下の通りです
    シナリオは花が殻を脱いだ後にIDAを引きずってF 5が失効することを発見して、コードの各jnz jzの後に1段のごみの指令があるため、IDAなどの反アセンブリのツールのアセンブリを妨害して、IDAPythonを書いて花の指令を除去した後に反コンパイルすることができて、コードは以下の通りです
    def patch_junkcode(addr):
        data = list(get_bytes(addr,4))
        if(ord(data[0]) == 0x75 and ord(data[1]) == 0x5 and ord(data[2]) == 0x74 and ord(data[3]) == 0x3):
                for i in range(4,10):
                    patch_byte(addr+i,0x90)
    base = 0x401000
    len = 0x414C00 - base
    for i in range(len):
        patch_junkcode(base+i)
    print 'Finished!'

    ウイルス実行プロセス
  • 指定プロセス
  • を閉じる.
    システムプロセスを巡り、msftesql.exe、sqlagent.exe、sqlbrowser.exeなどの複数の特定のプロセスを閉じます.
  • 反発体
  • を開く.
    反発体を開き、親プロセスとのメモリデータ操作を同期します.
  • オペレーティングシステムWin 7以上
  • が要求する.VerifyVersionInfoW関数を使用して、オペレーティングシステムがWin7より大きいと判断します.そうしないと、プログラムを終了します.
  • ユーザ権限Low以上
  • を要求する.GetSidSubAuthority関数を用いて現在のユーザの権限がLow以上であると判断する
  • Win 7およびWin 8の権利
  • まずビットマップ書き込みデータを作成しますが、実はデータはその後のshellcodeで、このshellcodeを隠すためです.
    shellcodeを取得し、ZWQueryIntervalProfileを呼び出して現在のユーザー権限をシステム権限に昇格させ、権限付与原理関連リンク
  • Win 10の権利
  • 判断オペレーティングシステムはWin10で、少し前のTask Schedulerの1つの0dayの権利を利用して、まずStartXpsprintJobのアドレスを取得して、権利の原理の関連リンク
    その後、printconfig.dllにリンクして脆弱性をトリガーし、システム権限に昇格します.
  • 作成プロセス実行自己
  • オペレーティングシステムがWin 7より大きいと判断し、権限がLowより大きいと判断した後、自身の完全な経路を取得し、GetShortPathNameWを使用してUnicode経路の影響を回避した後、wmic伝達経路を利用して自身を再起動する
  • 検査エリア
  • キーボードレイアウトで領域をチェックすると、一部の領域ではその後のコードが実行されず、直接自分を削除して終了します.
    デフォルトの言語で領域を判断
  • 反発体
  • を作成する.
    派手な操作の山は、反発体を作成するために!作者がahnlabを皮肉っているようで、これはよくわかりません.
  • 必要なデータを復号する
  • .
    いくつかのデータを解読し、その後キーを初期化する際に使用しました.
  • クエリーシステム情報
  • レジストリで , , , ,CPU , をチェックしましたが、最も重要なのは一般的な をいくつか検索しましたが、検索だけです.
  • ランダム文字
  • を生成する.CryptGenRandomを使用して乱数を生成し、演算していくつかの幅の文字を得て、6つ取ってから大文字に変換し、ファイル名につなぎます.P.S.ファイル名は、あなたの支払いを指導するファイルの名前です.例えば、TZYLVF-DECRYPT.txt
  • は、公開秘密鍵ペア
  • を生成する.CryptGenKeyを使用してRSAの公開鍵ペアを生成し、その後CryptExportKeyを使用してメモリにエクスポートする
  • 公開鍵対書き込みレジストリ
  • HKEY_LOCAL_MACHINE\\SOFTWARE\\keys_data\\dataを作成し、publicprivateを作成し、前の公開鍵と公開鍵のペアをそれぞれ2つのサブキーに書き込む
  • 復号説明情報
  • 復号化後にXXXXXX-DECRYPT.txtに書き込む文字列は、ユーザへの説明書に相当する
  • スレッドオープン暗号化ファイル
  • 最初のスレッドはローカルエリアネットワーク共有ファイルを巡回します
    2番目のスレッドは、ローカルの有効なディスクおよびモバイルストレージデバイスを巡回します.
  • 採用の遍歴方法
  • ローカルエリアネットワークを巡回する方法とローカルを巡回する方法は同じで、まずディスクの有効性を判断して、有効であれば次の巡回を行います!次に、.および..ではない属性を満たしてから、現在のディレクトリの属性を取得する必要があります. ,SQL , RSA です.
  • 説明ファイル
  • を作成する
    以前の説明書の内容はずっとメモリに入っていて、まだファイルに書き込まれていません.各ディレクトリのループが開始されると、現在のディレクトリにファイルが作成され、ファイル名は前のランダム文字になり、メモリの説明書がファイルに書き込まれます.また、暗号化された時刻を記録するための.lockファイルも作成されます.
  • 暗号化ホワイトリスト
  • 暗号化されたホワイトリストは主に3つあり、 , :Program Files,Windows,Boot です.
    2つ目は で、ダイナミックにしか見えません
    3つ目は です
  • 暗号化
  • を実行
    ホワイトリスト以外のファイルに移動すると、ファイルの暗号化が開始されます.
  • シャドウコピーを削除
  • 暗号化が完了した後、Shadow Copyを削除し、一般ユーザーが削除した暗号化されていない元のファイルを回復することを防止する.
  • デスクトップバックグラウンド
  • を設定する.
    まずビットマップを作成してから色データを書き、その後、新しいファイルをファイルに書き、ファイルはTempディレクトリの下にあり、最後にSystemParametersInfoWを使用してこの画像をデスクトップの背景に設定します.
  • POST要求
  • を送信する.
    スレッドを作成します.まず、Webサイト情報を復号します.
    次に、文字列のリンク先をランダムに選択します.
    私がテストしたときにつづった文字列はhttp://www.2mmotorsport.biz/includes/pics/zurukafu.jpgで、最後にこのウェブサイトにPOSTリクエストを送信しました.
  • 自己
  • を削除する.
    ウイルス暗号化ファイルが完了すると、cmd 5sを呼び出して自分を削除します.
    第2部では上記の実行フローをまとめるとウイルス体の で、この勒索ウイルスは主に放出時に非常に隠れて位置決めが悪く、dumpから出たウイルス体にも花指令が静的分析に影響を与えるが、IDAPythonは花指令を除去することができる!それでもこのウイルスの本体は複雑で、 はWindowsの異なるバージョンで実行でき、異なる国で実行できます.1つの字は形容します:強い!
    END