脅威のスポットライト:Ratsnif – OceanLotusがしかける ネットワーク上の新たな脅威

By The Cylance Threat Research Team

本ブログ記事は、2019年7月1日に米国で公開された抄訳版です。原文はこちらからご覧頂けます。

はじめに

OceanLotus Group(別名APT32、CobaltKitty |以前の記事: OceanLotusのSpyRAT; ステガノグラフィを利用しているOceanLotus APT Group)は、"Ratsnif"と名付けられた一連のリモートアクセス型トロイの木馬を使用して、新しいネットワーク攻撃機能を利用しています。Blackberry Cylanceの脅威リサーチャーは、まさにネットワーク攻撃技法のスイス・アーミーナイフのようなこのトロイの木馬Ratsnifを解析しました。 2016年から積極的に開発されているこのトロイの木馬は、パケットスニッフィング、ゲートウェイ/デバイスのARPポイズニング、DNSポイズニング、HTTPインジェクション、MACスプーフィングなどの機能を組み合わせています。 

当社は4つの別個のRatsnifサンプルを調査しました。そのうちの3つは2016年に開発され、4つ目は2018年後半に作成されたものです。

サンプル1

  MD5  

  516ad28f8fa161f086be7ca122351edf

  SHA256  

b4e3b2a1f1e343d14af8d812d4a29440940b99aaf145b5699dfe277b5bfb8405

  ファイル名  

  javaw.exe, Client.exe

  パス  

  X:\Project\BotFrame\Debug\Client.exe

  サイズ  

  1.32 MB (1,387,520 バイト)

  ファイルタイプ  

  PE32 executable for MS Windows (コンソール) Intel 80386 32ビット用のPE32実行可能ファイル

  エイリアス  

  OceanLotus APT32 Ratsnif

  コンパイル   
時間   

  2016-08-05 07:57:13


概要

これまでに見つかった最も古いRatsnifの例は、そのC2ドメインが初めて有効化されたのと同じ日にコンパイルされています。

これはデバッグビルドだと思われ、その後の2016年9月に登場した亜種によく似ています。本記事で取り上げる2016年の3つの亜種に関する解析では、主にこの亜種に焦点を当てています。  

サンプル2

MD5  

  b2f8c9ce955d4155d466fbbb7836e08b

SHA256  

  b214c7a127cb669a523791806353da5c5c04832f123a0a6df118642eee1632a3

ファイル名  

  javaw.exe, Client.exe

パス  

  X:\Project\BotFrame\Debug\Client.exe

サイズ  

  1.32 MB (1,387,520 バイト)

ファイルタイプ  

  MS Windows(コンソール)Intel 80386 32ビット用のPE32実行可能ファイル

エイリアス  

  OceanLotus APT32 Ratsnif

コンパイル  
時間  

 2016-08-06 04:30:06


概要

このビルドは前述のサンプルの後24時間以内にコンパイルされましたが、機能的にはわずかな相違が1つあるだけです。つまり、再コンパイル前にpcap_dump_flush()の呼び出しが削除されています。


図1:b4e3b2a1f1e343d14af8d812d4a29440940b99aaf145b5699dfe277b5bfb8405でのpcap_dump_flushの呼び出し 


図2:b214c7a127cb669a523791806353da5c5c04832f123a0a6df118642eee1632a3でのpcap_dump_flushの呼び出しの喪失

さらに、再コンパイル後のサンプルの新しい"Age"を反映して、CodeViewデバッグ情報が変更されています。


図3:b4e3b2a1f1e343d14af8d812d4a29440940b99aaf145b5699dfe277b5bfb8405でのAge 0x14


図4:b214c7a127cb669a523791806353da5c5c04832f123a0a6df118642eee1632a3でのAge 0x15

これらのサンプルは両方とも、コンパイル後1分以内にVirusTotalに送信され、PDB情報と同じパスを含んでいます。このサンプルは、開発者によってオンラインスキャニングサービスに自動送信されたものと思われます。


図5:日時とパスを示すVirusTotalのSubmission画面

サンプル3

MD5  

  7f0ac1b4e169edc62856731953dad126

SHA256  

  b20327c03703ebad191c0ba025a3f26494ff12c5908749e33e71589ae1e1f6b3

ファイル名  

  javaw.exe, adobe.exe

パス  

  N/A

サイズ  

  432 KB (442,880 バイト)

ファイルタイプ  

 PE32実行可能ファイル(DLL)(GUI)Intel 80386、MS Windows用

エイリアス  

  OceanLotus APT32 Ratsnif

コンパイル  
時間  

  2016-09-13 09:26:42

 


概要

 

 

2016年8月に登場した以前のサンプルと非常によく似た機能を持つこのサンプルは、リリースビルドであり、OceanLotusによって広くデプロイされた初期Ratsnifの1つであると思われます。

 

脅威の機能

 

 

  • HTTP経由のC2
  • パケットスニッフィング
  • ARPポイズニング
  • DNSスプーフィング
  • HTTPリダイレクト
  • リモートシェル

 

解析

 

 

実行時に、Ratsnifは"onceinstance"という名前の1度だけ実行するミューテックスを作成し、Winsockバージョン2.2を初期化して、ユーザー名やコンピューター名、ワークステーション構成(NetWkstaGetInfo API経由)、Windowsシステムディレクトリ、ネットワークアダプタ情報などのシステム情報を取得します。この情報は、/cl_client_online.php APIエンドポイントへのHTTP POSTを介して攻撃者のC2サーバーに送信されます。次に、ロギングスレッドが作成されます。これは、/cl_client_logs.php.へのHTTP POSTリクエストを介してログメッセージをC2へルーティングするために使用されます。次にマルウェアは、wpcap.dllをロードしてから次の機能をインポートします。

  • pcap_sendqueue_transmit
  • pcap_findalldevs
  • pcap_freealldevs
  • pcap_open_live
  • pcap_sendqueue_alloc
  • pcap_next_ex
  • pcap_sendqueue_queue
  • pcap_sendpacket
  • pcap_close
  • pcap_sendqueue_destroy
  • pcap_dump_open
  • pcap_dump_ftell
  • pcap_dump_flush
  • pcap_dump_close
  • pcap_dump

WinPcapのロードに成功したら、 /cl_client_cmd.php, に別のHTTP POSTリクエストを送信します。これは、攻撃者からコマンドコードを取得するために使用されます。このコードは、10秒ごとにコマンドをチェックします。C2コマンドは、Windows APIを介してハードコードされた静的鍵を使用するAESによって復号されてから、単純なコマンドプロセッサーによってディスパッチされます。

C2

観測されたすべてのRatsnifサンプルでは、使用されているかどうかを問わず、1つ以上のC2ドメインがハードコードされています。このサンプルには2つのハードコードされたドメインが含まれていますが、これまでに有効になったのは1つだけです。

  • search[.]webstie[.]net
  • dns[.]domain-resolve[.]org (無効)

C2サーバー自体は、次のエンドポイントをサポートし、非常に直感的に命名されたWeb APIを公開するものと思われます。

  URL 

  説明

  /cl_client_online.php  

  取得したシステム情報を含むPOST

  /cl_client_cmd.php  

  GET C2コマンド

  /cl_client_cmd_res
.php  

  C2コマンドのPOST結果

  /cl_client_logs.php  

  POST ログメッセージ


このマルウェアでは、 cl_client_cmd.php HTTPレスポンスを介して発行される次のコマンドが実行可能です。

サンプル4

MD5  

  88eae0d31a6c38cfb615dd75918b47b1

SHA256  

  7fd526e1a190c10c060bac21de17d2c90eb2985633c9ab74020a2b78acd8a4c8

ファイル名  

  N/A

パス  

  N/A

サイズ  

  745 KB (762,880 bytes)

ファイルタイプ  

  PE32実行可能ファイル(DLL)(GUI)Intel 80386、MS Windows用

エイリアス   

  OceanLotus APT32 Ratsnif

コンパイル  
時間  

  2018-08-08(水)、02:52:52 UTC


概要

2018年後半に表面化し、独自のOceanLotusシェルコードローダーでラップされたこのサンプルは、Macnica Networksのブログで初めて報告されました。2016年の亜種と比較すると、このサンプルでは構成ファイルが導入されており、操作をC2に頼っていません。また、HTTPインジェクション、プロトコル解析、およびSSLハイジャックという形で新たな機能も追加されています。

脅威の機能

  • OceanLotusローダーによりデプロイ
  • (以前のバージョンにおけるバックドアコマンドとは対照的に)被害者のネットワーク環境に合わせて、別個に提供された構成ファイルを使用
  • 別個に提供されたSSL証明書を使用してSSLハイジャックを実行
  • SSLトラフィックの復号にWolfSSLライブラリ(バージョン3.11)を使用(https://github.com/wolfSSL/wolfssl)
  • HTTPトラフィックの解析にhttp_parser.cを使用(https://elixir.bootlin.com/zephyr/v1.13.0/source/subsys/net/lib/http/http_parser.c)
  • プロトコル解析を介してログイン認証情報やその他の機密データを抽出することに重点を置いたパケットスニッフィング
  • ARPポイズニング
  • DNSスプーフィング
  • HTTPリダイレクト
  • HTTPインジェクション

 

解析

 

この特定のサンプルでは、実際のスニファ実行可能ファイルは、ローダーDLL内でエンコードされ、シェルコードの2つの層でラップされたBase64です。ローダーDLLがペイロードをデコードし、それをメモリにコピーして第1段階のシェルコードを実行します。これにより、バイナリが圧縮解除され、別のスレッドで第2段階のシェルコードが実行されます。第2段階のシェルコードはスニファ実行可能ファイルをメモリに挿入し、プロセスコマンドラインを返すいくつかのAPI関数(GetCommandLineA、GetCommandLineW、_acmdln、_wcmdln)をフックして、代わりにハードコードされた文字列を返すようにします。この文字列には、実行可能ファイルの元のパスと構成ファイルへのパスを指定するパラメータが含まれています。

  C:\Users\Administrator\Desktop\api\temp\royal\HkYh9CvH7.exe -p
  C:\ProgramData\setting.cfg

図6:埋め込まれたコマンドライン

攻撃者がなぜ構成パスをマルウェアに渡すためにこの複雑な方法を使用しているのかは、今のところ不明です。

構成ファイルはBase64でエンコードされた単純なテキストファイルであり、最初の行は無視され、後続の各行がパラメータを指定します。次に例を示します。

  [unused_line]
  -ip [ATTACKER IP ADDRESS]
  -ga [DEFAULT GATEWAY]
  -subnet [SUBNET MASK]
  -sniff -ssl_ip [IP ADDRESS]
  -html_inject [BROWSER PROCESS NAME]
  -dlog_ip [IP ADDRESS]
  -mac [ATTACKER MAC ADDRESS] "true"|"false"
  -name [DOMAIN NAME] [REDIRECTION IP]
  -all
  -dnsttl [INT VALUE]
  -log [LOGFILE PATH]
  -pass [CREDENTIALS DUMP PATH]
  -dwn_ip [IP ADDRESS]

図7:構成ファイルのオプション

ただし、dwn_ipパラメータの値の解析にバグがあり、この値が構成内に存在するとメモリ読み取り違反が発生します。


図8:コード内のバグ:"dwn_ip"の値は文字列として渡されるのに対し、print_debug_msgは文字列へのポインタを想定している

実行されると、このスニファは指定されたファイルから構成を読み取り、Base64を使用してそれをデコードし、インメモリ構造に展開します。構成で"-sniff"パラメータが指定された場合、このマルウェアはファイアウォール例外を追加し、レジストリで各ネットワークアダプタに対するLarge Send Offload(LSO)を無効化します。

  netsh advfirewall firewall add rule name=\"Core Networking - Router Solicitation\" dir=in action=allow program={self_path} enable=yes

図9:Windowsファイアウォール規則を追加するために使用されるコマンドライン

  wmic path win32_networkadapter where index=%d call disable

図10:LSOを無効化する前にネットワークアダプタを無効化するために使用されるコマンドライン

2016年の亜種と同じAPIを(pcap_geterrを追加)wpcap.dllからインポートした後、このマルウェアはARPポイズニングとDNSスプーフィングを担うスレッドを作成します。

SSLトラフィックを復号するために、このマルウェアは、WolfSSLと呼ばれるオープンソースライブラリと、別個に提供された証明書および秘密鍵ファイルを使用して、SSLハイジャックを実行します。このために、65000~65535の範囲内で最初に使用可能なポートをリスニングする内部WolfSSLサーバーを作成します。


図11:WolfSSLの使用

すべてのパケットを1つのPCAPファイルに格納していたRatsnifの2016年の亜種とは異なり、2018年の亜種では、パケットから機密情報を収集するために複数のsnifferクラスが採用されています。これにより、攻撃者が収集、流出、処理する必要のあるデータ量が最小化され、また、攻撃者がどのような情報に関心を持っているかが明らかになります。

このマルウェアは、次のプロトコル/ポートに対するトラフィックをスニッフィングできます。

  インターフェース

 ポート

  ヘッダー

  CSniffFtp

  21, 990

  ABOR ACCT ADAT ALLO APPE AUTH CCC CDUP CONF CWD DELE ENC EPRT EPSV FEAT HELP HOST LANG LIST LPRT LPSV MDTM MIC MKD MLSD MLST MODE NLST OPTS PASS PASV PBSZ PORT PROT PWD QUIT REIN REST RETR RMD RNFR RNTO SITE SIZE SMNT STAT STOR STOU STRU SYST TYPE USER XCUP XMKD XPWD XRCP XRMD XRSQ XSEM XSEN 230

  CSniffImap

  143, 993

  CAPABILITY LOGOUT STARTTLS AUTHENTICATE LOGIN SELECT EXAMINE CREATE RENAME LSUB STATUS APPEND CHECK CLOSE EXPUNGE FETCH STORE UID

  CSniffLdap

  389, 636, 10389, 10636

  多種

  CSniffNntp

  119

  AUTHINFO USER AUTHINFO PASS ANONYMOUS 281

  CSniffPop

  110, 995

  RCEV RCVD RSET +OK USER PASS RETR QUIT

  CSniffSmb

  445

  多種

  CSniffSmtp

  25, 465

  HELO MAIL RCPT SEND SOML SAML VRFY EXPN TURN FROM

  CSniffTds

  1433

  SELECT name, password_hash FROM master.sys.sql_logins where is_disabled = 0; -- priv

  CSniffTelnet

  23

  Login Failed login: password:

  SniffHttp2

  80, 443

  多種


各snifferクラスのインターフェースには、それぞれ受信パケットと送信パケットから機密情報を抽出するための2つのメソッドが含まれています。これらは通常、認証情報の窃盗を容易にするために、クリアテキストヘッダー文字列の検索に頼っています。


図12:Telnetプロトコルでのログインおよびパスワードコマンドの検索

さらに、HTTPスニファインターフェースは、攻撃者が提供した任意のコンテンツをHTMLに挿入することもできます。

C2

このサンプルには、.rdataセクションにハードコードされたBase64エンコードのC2 URLが含まれていますが(2016年のバージョンと同じアドレス)、このマルウェアではこのURLは使用されていないようです。代わりに、このマルウェアは、別のモジュールによる後続の流出のために、取得した情報をテキストファイルに記録します。

このサンプルが機能したのと同じ状況を再現するため、デフォルトゲートウェイは192.168.8.135に設定され、DNSサーバーおよびHTTPサーバーとして機能するようiNetSimが実行されました。攻撃者のマシンは192.168.8.134にあり、被害マシンは192.168.8.138にありました。Ratsnifは、次のように機能するよう構成されました。

  TEST CONFIG
  -ip "192.168.8.134"
  -ga "192.168.8.135"
  -subnet "255.255.255.0"
  -sniff
  -ssl_ip "192.168.8.254"
  -html_inject "iexplore.exe"
  -dlog_ip "192.168.8.254"
  -mac "00:0C:29:59:62:46" "true"
  -name "www.google.com" "192.168.8.135"
  -dnsttl "100"
  -log "C:\ratsnif.log"
  -pass "C:\ratsnif.pcap"
  -dwn_ip

図13:テストに使用された構成

図14は、自身(192.168.8.134)とデフォルトゲートウェイ(192.168.8.135)は無視して、構成ファイルに指定されたサブネット上のすべてのマシンのMACアドレスを要求するARPパケットを送信するマルウェアを示しています。


図14:ARPブロードキャスト

図15は、自身(192.168.8.134)とデフォルトゲートウェイ(192.168.8.135)は無視して、構成ファイルに指定されたサブネット上のすべてのマシンのMACアドレスを要求するARPパケットを送信するマルウェアを示しています。/p>

サブネット上のすべてのマシンのMACアドレスを取得した後、Ratsnifはこれらのアドレスに迷惑なARPパケットを送りつけ、各被害マシンのデフォルトゲートウェイのMACアドレスを更新します。


図15:ARPポイズニング

図16は、被害マシンにおける影響を示しています。ここでは、攻撃者のIPアドレスとデフォルトゲートウェイのIPアドレス(192.168.8.135)の両方が同じ物理アドレスを共有しています。


図16:arp – 被害マシンの汚染されたARPテーブルを示す結果

ARPテーブルが汚染されると、デフォルトゲートウェイ宛のすべてのトラフィックはRatsnifを介してルーティングされ、再送前に保存および操作される可能性が生じます。

最後に、図17はwww.google.comに対する汚染されたDNSレスポンスを示しています。ここでは、DNSクエリがRatsnifによって傍受され、攻撃者の管理下にあるIPアドレスを指すよう変更され、元のリクエスターに偽のレスポンスが送信されています。


図17:実行されたARPポイズニングとDNSスプーフィングを示すRatsnifのログファイル出力

C2

search.webstie.net

Whois

属性  

  値

サーバー  

  whois.web4africa.net

レジストラー  

  WEB4AFRICA INC

電子メール  

  contact@privacyprotect.org

名前  

  Domain Admin, C/O ID#10760

組織  

  Privacy Protection Service INC d/b/a PrivacyProtect.org

番地  

  PO Box 16

都市  

  Nobby Beach

州   

  Queensland

郵便番号  

  QLD 4218

国  

 オーストラリア

電話  

  4536946676

ネームサーバー  

  ns21.cloudns.net

  ns22.cloudns.net

  ns23.cloudns.net

  ns24.cloudns.net


履歴


Shodanから入手したこの履歴は、Ratsnifおよびその他のOceanLotusのマルウェアを制御するために、C2サーバーがHTTP、SMB、RDPなどのさまざまなポートを公開したときのものです。


図18:search.webstie.netのShodanの履歴

結論

Ratsnifは、おそらくデプロイが限定的だったために検知されなかった期間の長さを考慮すると、興味深い発見です。Ratsnifでは、2年以上にわたり機能の開発を垣間見ることのできるまれな機会が得られ、攻撃者が自分たちの不正な目的のためにどのようにツールを変えていくかを観察できました。すべてのサンプルでは、オープンソースコード/スニペットから多くを借用しているものの、全体的な開発品質は低いと思われます。簡潔に言うと、RatsnifはOceanLotusのマルウェアで通常見られる高水準を満たしていません。

付録

侵入の痕跡(IOC)

  インジケータ

  タイプ

  説明

 b4e3b2a1f1e343d14af8d812d4a29440940b99aaf145b5699dfe277b5bfb8405

  SHA256

  Ratsnif

b214c7a127cb669a523791806353da5c5c04832f123a0a6df118642eee1632a3

  SHA256

  Ratsnif

b20327c03703ebad191c0ba025a3f26494ff12c5908749e33e71589ae1e1f6b3

  SHA256

  Ratsnif

7fd526e1a190c10c060bac21de17d2c90eb2985633c9ab74020a2b78acd8a4c8

  SHA256

  Ratsnif

  onceinstance

  ミューテックス

  Mutex name

  search[.]webstie[.]net

  ドメイン

  C2

  66.85.185.126

  IP

  search[.]webstie[.]net

  dns[.]domain-resolve[.]org

  ドメイン

  C2

  X:\Project\BotFrame\Debug\Client.pdb

  PDB

  PDB Path

  ntdata.tmp

  ファイル

  パケットキャプチャ出力

  コアネットワーク - ルーター要請

  Windowsファイアウォール規則

  7fd5…

 

MITRE

  戦術

  ID

  名前

  注記

  発見

  T1040

  ネットワークスニッフィング

  Sパケットをスニッフィングしてファイルに保存

  T1046

  ネットワークサービススキャニング

  ARP/SMB

  T1082

  システム情報の発見

  ユーザー/コンピューター名、システムディレクトリ、ワークステーション情報

  コマンドアンドコントロール

  T1043

  よく使用されるポート

  HTTP/HTTPS

  T1065

  あまり使用されないポート

  65000 - 65536

  T1001

  データ難読化

  RSA/AES C2暗号化

  影響

  T1493

  送信されたデータの操作

  パケットの傍受、変更、再送の実行

 

 

 

 

 

Tags: