SparrowDoor, DLL yükleme saldırısı ile yüklenir. DLL hijacking host bilgisayarı olarak kullanılan yasal bir K7 Computing yürütülebilir dosyası (Indexer.exe), kötü amaçlı DLL (K7UI.dll) ve şifreli shellcode (MpSvc.dll) olmak üzere üç öğe kullanarak bunların tümü %PROGRAMDATA%\Software\ dizinine bırakılır. Sistemde kalıcılığı sağlamak için ilk SparrowDoor yürütmesiyle birlikte kullanılan komut satırı parametreleri -i, -k veya -d dışında kullanıldığı varsayılır. Kalıcılığı sağladıktan sonra, SparrowDoor -i komut satırı parametresi ile yürütülür.
Indexer.exe, K7UI.dll’i çalıştırmak için kütüphane gerektirir. Bundan dolayı, işletim sistemi belirtilen yükleme sırasına göre dizinlerde DLL dosyasını arar. Indexer.exe dosyasının depolandığı dizin, yükleme sırasında yüksek önceliğinden dolayı ilk sırada olduğu için, DLL arama sırası saldırısına uğrar. Sonuç olarak kötü amaçlı yazılım bu şekilde yüklenmiş olur. Indexer.exe kötü amaçlı K7UI.dll dosyasını yükler ve Indexer.exe’deki kodları bunu yayar (WinMain’den jmp K7UI.0x100010D0’a) ve ardından Indexer.exe’ye geri döner. Bu işlemin sonucu olarak Indexer.exe WinMain’in yerine K7UI.dll’de alt program çalıştırır. Bu alt program Başlatıcı olarak adlandırılır.
Başlatıcının görevi; MpSvc.dll’yi (şifreli shellcode) Indexer.exe’yi depolayan dizinden belleğe yüklemek, içeriğin şifresini çözmek ve devamında shellcodu yürütmektir.
Kabuk kodu (MpSvc.dll), anahtar dosyanın ilk dört baytı olacak şekilde dört baytlık XOR kullanılarak şifrelenir.
MpSvc.dll shellcode, bir PE (Portable executable) oluşturan çeşitli kitaplıkları yükler ve kullanılacak işlevlerin adreslerini bulur. Ardından, RWX belleği ayırır ve PE (Portable executable) oluşturmak için shellcode’daki çeşitli yerleri içine kopyalar. Ayrıca, bu sırada farklı kitaplıklardan çeşitli işlevlerin içe aktarılmasını çözer. Son olarak, yeni oluşturulan arka kapı PE’yi giriş noktasından yürütür. Yeniden oluşturulmuş yürütülebilir görüntünün, PE (Portable executable) başlığı yoktur. Bundan dolayı yükleyici, ayrılan bellek içinde sabit kodlanmış bir ofsetteki giriş noktasından arka kapıyı yürütür.
MpSvc.dll shellcode üzerinden yeni oluşturulmuş arka kapıda PE (Portable executable) başlığı eksiktir.
Arka kapı
Arka kapıya iletilen bağımsız değişkenler, Indexer.exe’ye veya enjekte edilen shellcodu/arka kapıyı alan diğer herhangi bir ikili dosyaya iletilen bağımsız değişkenlerden kaynak alır.
Aşağıdaki tabloda SparrowDoor’a sağlanan komut dizinleri parametrelerine dayanarak yapılan işlemler belirtilmiştir.
Parametre | İşlem/Eylem |
---|---|
Parametre yok veya aşağıdakilerle eşleşmiyor | Kalıcılık, kayıt defteri Run key ve ikili dosyada sabit kodlanmış konfigürasyon verilerini kullanarak oluşturulan ve başlatılan bir hizmet aracılığıyla ayarlanır. Son olarak, -i anahtarı ile arka kapı yeniden başlatılır. |
-i | Arka kapı -k anahtarıyla yeniden başlatılır . |
-k | Arka kapı yorumlayıcısı bir kill anahtarı ile çağrılır . |
-d | Arka kapı yorumlayıcısı, bir kill anahtarı olmadan çağrılır . |
Not:
- Kill anahtarı, arka kapıya SparrowDoor’u kaldırma veya yeniden başlatma ayrıcalığı verir.
- Arka kapı yorumlayıcısı, kullanılan parametreden bağımsız olarak çağrılır çünkü her zaman bir -k veya -d parametresi ile biter.
Yapılandırma verileri
İkili dosyada konfigürasyon bulunur ve multi-byte XOR anahtarı ^&32yUgf kullanılarak şifresi çözülür. Konfigürasyon detayları aşağıda belirtilmiştir:
struct config
{
char domain[64];
char user [64];
char pass[64];
char ip[64];
char port[2];
char serviceName[64];
char serviceDisplayName[128];
char serviceDescription[128];
};
Amaçlarıyla birlikte Anahtar/değer ikilileri aşağıda verilmiştir.
Anahtar | Değer | Amaç |
---|---|---|
domain | credits.offices-analytics[.]com | C&C server domain |
user | user | C&C serverına bağlanmak için kullanılan proxy ayarları |
pass | pass | |
ip | 127.1.1.1 | |
port | 8080 | |
service Name | WSearchIndex | Kalıcılığı sağlamak, hizmet oluşturmak için kullanılan bilgilerdir. Unutmayın ki ayrıca, serviceName’in kayıt defterindeki Run anahtarının altında değer adı olarak kullanılır. |
serviceDisplayName | Windows Search Index | |
serviceDescription | Dosyalar, e-posta ve diğer içerikler için içerik indeksleme, özellik önbelleğe alma ve arama sonuçları sağlar. |
Bağlantılar bir proxy üzerinden olabilir ve C&C (komuta kontrol) serverına 443 numaralı HTTPS bağlantı noktasında bağlanırlar. Bu yüzden, iletişim TLS kullanılarak şifrelenmelidir. C&C serverıyla ilk bağlantı kurma denemesi sırasında SparrowDoor, proxy kullanmadan bağlantının kurulup kurulamayacağını kontrol eder. Eğer bağlantı kurulmayacak olursa veriler bir proxy aracılığıyla gönderilir. Tüm giden veriler, hH7@83#mi XOR anahtarı kullanılarak şifrelenir. Ayrıca gelen tüm verilerin şifresi, h*^4hFa XOR anahtarı ile çözülür. Veriler, bir Komut ID ile başlayan, ardından gelen şifrelenmiş verilerin uzunluğu ve şifrelenmiş verilerden oluşan bir yapıdan oluşmaktadır.
Aşağıdaki görsel verilerin C&C serverına gönderilmesine dair bir örnektir.
Böyle bir durumda mağdurun Local IP adresi, 192.168.42.1 ile ondalık sayıya dönüştürülebilir.
Oturum ID, ProcessIdToSessionId Windows API kullanılarak bulunan, arka kapı işlemiyle ilişkili Remote Desktop Services oturum kimliğidir.
systemInfoHash, kullanıcı adı, bilgisayar adı, ana bilgisayar adresleri ve oturum kimliği kullanılarak sdbm karma algoritması aracılığıyla hesaplanır.
Arka kapı Interpreter Function
Bu fonksiyonda, SeDebugPrivilege’i etkinleştirmek için SparrowDoor işleminin erişim işaretleyicisinin ayarlanmasıyla birlikte yetki yükseltme işlemi gerçekleştirilir. Bu işlemden sonra bir sokette gönderme ve almaların devre dışı bırakılmasını önlemek için kapatma işlevi ( Ws2_32.dll ) yamalanır ve Closesocket işlevi (Ws2_32.dll), bekleyen verilerin gönderilmesini veya alınmasını beklemeden önce DONT_LINGER seçeneğinin soketi kapatması için yama yapılır. Son olarak, sistem bilgileri karşılığında verileri geri almak için C&C serverına gönderilir.
C&C sunucusundan alınan verilerdeki Komut ID alanına bağlı olarak, arka kapı farklı kötü amaçlı işlemler gerçekleştirebilir.
Komut ID alınarak SparrowDoor tarafından gerçekleştirilen eylemler
Komut ID | Eylem |
---|---|
0x1C615632 | Mevcut süreç kapanmıştır. |
0x1DE15F35 | Bir alt svchost.exe işlemi, C&C serverı tarafından -d parametresi belirtilen işlemin sürecin processToken bilgisi (Process ID) ile oluşturulur ve ardından shellcode işleme yüklenir. |
0x1A6B561A | C&C sunucusu tarafından sağlanan ad kullanılarak bir dizin oluşturulur. |
0x18695638 | Dosya yeniden adlandırılır. C&C serverı tarafından yeniden adlandırılacak dosya ve yeni ad sağlanır. |
0x196A5629 | Gelen verilerde belirtildiği gibi bir dosya silinir. |
0x17685647 | Verinin boyutu 1 ise ve veriler $ ile eşleşiyorsa, systemInfoHash’in uzunluğu ve bir dizi sürücü türü gönderilir. Verinin boyutu 2’den büyükse ve verinin ilk 2 baytı $\ ile eşleşiyorsa, belirtilen dizindeki dosyalar hakkında bilgi gönderilir. Bunlar; dosya öznitelikleri, boyutu ve yazım süresi |
0x15665665 | Belirtilen bir dosyanın içeriğini sızdırmak için yeni bir thread oluşturulur. |
0x16675656 | Kill anahtarı etkinleştirilirse, geçerli kalıcılık ayarları (kayıt defteri ve hizmet) kaldırılır ve Indexer.exe dosyası yürütülür (damlalığı yeniden başlatmak için). Değilse, arka kapı döngüsü yeniden başlatılır. |
0x14655674 | Verileri belirtilen bir dosyaya yazmak için yeni bir thread oluşturulur. |
0x12635692 | Eğer kill anahtarı etkinleştirildiğinde, kalıcılık ayarları kaldırılır. SparrowDoor (tarafından kullanılan tüm dosyaları Indexer.exe , K7UI.dll ve MpSvc.dll ) çıkarılır. Eğer kill anahtarı etkinelştirilmezse, arka kapı süreci tekrardan başlatılır. |
0x13645683 | Veriler “anahtar” ile eşleşirse, arka kapı -d anahtarı ile yeniden başlatılır. Eşleşmezse, bir cmd.exe shell oluşturur ve interaktif ters shell oluşturmak için (C&C sunucusu tarafından kullanılan) giriş ve çıkış için adlandırılan bağlantıları kurar.Veriler Exit\r\n ile eşleşirse, ortaya çıkan shell sonlandırılır. |
Diğer | Arka kapı döngüsünü yeniden başlatır. |