Підтримка
Цілодобова підтримка | Правила звернення

Зателефонуйте

Глобальна підтримка:
+7 (495) 789-45-86

Поширені запитання |  Форум |  Бот самопідтримки Telegram

Ваші запити

  • Всі: -
  • Незакриті: -
  • Останій: -

Зателефонуйте

Глобальна підтримка:
+7 (495) 789-45-86

Зв'яжіться з нами Незакриті запити: 

Профіль

Профіль

Linux.Rex.1

Добавлен в вирусную базу Dr.Web: 2016-08-13

Описание добавлено:

SHA1: 98172e49c3d5d70ffdcefd071f9762c58430a393

Многофункциональная самораспространяющаяся вредоносная программа для ОС Linux, написанная на языке Go. В архитектуре троянца имеется собственная реализация протокола DHT для обмена данными между узлами P2P-ботнета. Троянец запускается как узел P2P-сети, принимающий и обрабатывающий сообщения RPC. Вероятно, вредоносная программа этой версии все еще находится в стадии разработки, поскольку генерирует значительное количество отладочных сообщений, записываемых в файл на устройстве /dev/null.

При получении входного параметра -debug троянец запускает http-сервер на порту 6061. Помимо этого, троянец обрабатывает следующие команды:

КомандаОписание
scanзапустить rpc provider, принимающий задания на сканирование
elevateискать в системе пароли и ключи и попытаться повысить свои привилегии через sudo, su или подключение по ssh
stressзапустить rpc provider, принимающий задания на DDOS-атаки
-wait <num>подождать завершения процесса с указанным PID

При поступлении команды elevate пытается получить данные о пользователях и записать их в структуру следующего вида:

screen #drweb

В файлах ищутся закрытые SSH-ключи, а также выполняется синтаксический разбор PHP-файлов в поисках логинов и паролей пользователей. Отдельная функция извлекает учетные записи пользователей из drupalSettingsDatabases. Модуль пытается перезапустить себя с помощью su, sudo и через ssh.

После своего запуска троянец принимает команды из P2P-сети по протоколу HTTPS на порту 5099 и передает их локальным исполнителям. Для передачи заданий потомкам в его архитектуре реализовано межпроцессное взаимодействие (interprocess communication) по протоколу RPC.

На инфицированном узле запускается несколько RPC-плагинов. Плагин Scan применяется для поиска в сети ресурсов по заданному признаку и использует библиотеку https://github.com/natefinch/pie. Плагин использует сканеры со следующими именами:

  • Drupal;
  • DrupalRESTWS;
  • Wordpress;
  • magento;
  • airos;
  • JetSpeed;
  • kerner;
  • exagrid;
  • contactScanner;
  • ransomScanner.

Модуль scan

Некоторые структуры, используемые в данном модуле (используется псевдокод, подобный синтаксису Go):

struct SetBinaryRequest{
    platform string,
    Binary rex.Binary
} 
 
struct SetBinaryResponse{
}
 
struct scanRequest{
    target *scanner.Target;
}
 
struct scanResponse{
    result *scanner.Result;
}
 
struct scanner.Target{
    host          string,
    port          Int,
    Username      string,
    password      string,
    isHTTP        bool,
    isTLS         bool,
    Via           string,
    Err           error, //string
    DisableRansom bool,
    done          *chan struct {}
}
 
struct scanner.Result{
    _              *scanner.Target,
    mu              sync.Mutex,
    Username        string
    Password        string
    Domain          string
    isHTTP          Bool
    isTLS           Bool
    Via             string
    Err             err
    Emansipated     bool
    Contacts      []scanner.Contact
    Ransom         *struct { Deadline time.Time; Address string; Amount int; 
Step int; Stressed bool }
}
rex.Binary{
    SHA1    [20]uint8,
    Data    []uint8,
}
struct scanner.Service{
    nm          scanner.networkMapper,
    scanner    *scanner.ConnScanner,
    targets    *chan *scanner.Target,
    resultsMU   sync.Mutex,
    results   []scanner.Target
}
 
iface scanner.Dialer{
    func Dial;
    func DialContext;
}
 
iface scanner.Scanner{
    func Scan;
}
 
iface scanner.PHPExecutor{
    func ExecPHP;
}
 
struct scanner.ConnScanner {
    dialer       scanner.Dialer{},<-интерфейс с методами Dial, DialContext
    scanners   []scanner.Scanner, <-интерфейс с методом Scan
    binariesMu   sync.Mutex,
    binaries    *map[string]*rex.Binary,
}
 
struct scanner.HttpScanner{
    dialer      scanner.Dialer,
    http       *scanner.HTTP,
    payloadfn  *func(string) (io.Reader, error),
    scanners  []scanner.Scanner
}
 
struct scanner.HTTP {
    client    *http.Client,
    UserAgent  string
}
 
struct scanner.Drupal{
    _         *scanner.HTTP,
    dialer     scanner.Dialer,
    payloadfn *func(string) (io.Reader, error)
}
     
struct scanner.Wordpress {
    _          *scanner.HTTP
    payloadfn  *func(string) (io.Reader, error)
    revslider  *scanner.PHP
    showbiz    *scanner.PHP
    wpo        *scanner.PHP
}
 
struct scanner.PHP{
    _ scanner.PHPExecutor
    _ scanner.Dialer
}
... 

Сканер Drupal

В первую очередь троянец проверяет, установлена ли на атакуемом сайте CMS Drupal. Для этого он ищет файл Changelog.TXT и индексную страницу сайта, после чего выполняет их синтаксический разбор. Проверяет наличие уязвимости CVE-2014-3704. Затем с помощью SQL-инъекции в форме для ввода логина троянец выполняет следующий запрос:

update users set name='%s',pass='%s',status='1' where uid='1';

Затем выполняется запрос:

UPDATE filter_format SET status='1' WHERE format='php_core';

Далее выполняется команда:

kill `grep -l \^/tmp/x /proc/*/cmdline|sed s,/proc/,,|sed s,/cmdline,,`

После этого Linux.Rex.1 загружает на скомпрометированный сайт собственную копию и запускает ее:

nohup %s >/tmp/l 2>&1

Сканер DrupalRESTWS

Проверяет на сайте наличие уязвимости https://www.exploit-db.com/exploits/40130/. Никаких иных действий не выполняет.

Сканер Wordpress

Проверяет наличие на атакуемом узле Wordpress, а также ряда известных уязвимостей этой CMS.

Сканер contactScanner

Запрашивает с указанного узла страницу HTML, выполняет ее синтаксический разбор и извлекает из нее адреса электронной почты.

Сканер magento

Ищет уязвимости RCE (remote code execution) в CMS Magento.

Сканер kerner

Атакует удаленный узел с использованием уязвимости типа shellshock.

Сканер airos

Ищет в сети устройства под управлением операционной системы AirOS и пытается обнаружить уязвимость Ubiquiti airOS Arbitrary File Upload.

Сканер exagrid

Проверяет версию ПО Exagrid (приложения для управления системами хранения данных) в поисках закрытых ключей.

Сканер jetspeed

Проверяет наличие уязвимости CVE-2016-0712 (Reflected Cross Site Scripting in URI path).

Сканер RansomScanner

Пытается получить с запрошенной веб-страницы все домены и возвращает те, которые соответствуют переданному IP.

Модуль Stress

Как и в случае с модулем сканера, запускает RPC-сервер c именем "Stresser". Этот модуль отвечает за выполнение DDoS-атак и рассылку сообщений по электронной почте. Выполняются следующие виды DDoS-атак:

  • HttpFlood;
  • HttpPost;
  • slowLoris;
  • tlsThc;
  • DnsAmp.

Также троянец рассылает по электронной почте сообщения с использованием следующего шаблона:

We are Armada Collective.
All your servers will be DDoS-ed starting {{ .Time.Weekday.String }} ({{ .Time.Format "Jan 2 2006" }}) if you don't pay {{ .Amount }} Bitcoins @ {{ .Address }}
When we say all, we mean all - users will not be able to access sites host with you at all.
If you don't pay by {{ .Time.Weekday.String }}, attack will start, price to stop will increase by {{ .Step }} BTC for every day of attack.
If you report this to media and try to get some free publicity by using our name, instead of paying, attack will start permanently and will last for a long time.
This is not a joke.
Our attacks are extremely powerful - sometimes over 1 Tbps per second. So, no cheap protection will help.
Prevent it all with just {{ .Amount }} BTC @ {{ .Address }}
Do not reply, we will probably not read. Pay and we will know its you. AND YOU WILL NEVER AGAIN HEAR FROM US!
Bitcoin is anonymous, nobody will ever know you cooperated.

Или:

We are Anonymous.
All your servers will be DDoS-ed starting {{ .Time.Weekday.String }} ({{ .Time.Format "Jan 2 2006" }}) if you don't pay {{ .Amount }} Bitcoins @ {{ .Address }}
When we say all, we mean all - users will not be able to access sites host with you at all. Right now we will start 15 minutes attack on your site's IP {{ .IP }}.
It will not be hard, we will not crash it at the moment to try to minimize eventual damage, which we want to avoid at this moment.
It's just to prove that this is not a hoax. Check your logs!
If you don't pay by {{ .Time.Weekday.String }}, attack will start, price to stop will increase by {{ .Step }} BTC for every day of attack.
If you report this to media and try to get some free publicity by using our name, instead of paying, attack will start permanently and will last for a long time.
This is not a joke.
Our attacks are extremely powerful - sometimes over 1 Tbps per second.
So, no cheap protection will help.
Prevent it all with just {{ .Amount }} BTC @ {{ .Address }}
Do not reply, we will probably not read. Pay and we will know its you.
AND YOU WILL NEVER AGAIN HEAR FROM US!
Bitcoin is anonymous, nobody will ever know you cooperated.

В начале каждого письма следует строка:

FORWARD THIS MAIL TO WHOEVER IS IMPORTANT IN YOUR COMPANY AND CAN MAKE DECISION!

Некоторые структуры, используемые в данном модуле (используется псевдокод, подобный синтаксису Go):

struct stresser.Stresser {
    ua        *scanner.HTTP,
    nworkers   Int,
    jobsch    *chan ransom.Jobs
    token     *chan struct {}
}
 
typedef ransom.Jobs map[string]*ransom.Job
 
struct ransom.Job{
    IP        net.IP,
    DeadLine  time.Time,
    Address   string,
    Amount    Int,
    Step      Int,
    Stressed  Bool
}
 
struct rpc.StressArgs{
    IP       net.IP,
    Duration time.Time,
    Message  string,
    Yield    Bool
}
 
struct rpc.StressReply{
}  
 
iface stresser.Runner{
    func Run;
}
 
struct rpc.SetRansomJobsArgs{
    Jobs ransom.Jobs
}
 
struct rpc.SetRansomJobsReply{
}

Если троянец запускается без параметров, он работает как новый узел в DHT-сети. Отслеживает обращения на порт 5099. Пытается определить внешний IP-адрес обращением к следующим ресурсам:

https://ipv4.icanhazip.com
https://ipinfo.io/ip
http://www.trackip.net/ip?json

Авторы троянца предусмотрели в его архитектуре собственную реализацию протокола DHT. Для передачи информации между узлами используется библиотека https://github.com/gorilla/rpc.

Используются следующие структуры:

struct node.Node{
    ProxyAddr      string,
    cfg           *node.Config,
    mu             sync.Mutex,
    epoch          time.Time,
    dialer         node.Dialer,
    ip            *net.IP,
    targets       *chan *scanner.Target,
    jobsMu         sync.Mutex,
    jobs          *map[string]chan string,
    resultsMu      sync.Mutex,
    results     []*scanner.Result,
    key           *rsa.PrivateKey,
    mcp           *rsa.PublicKey,
    metrics       *map[string]*node.Counter,
    nodeMetricsMu  sync.Mutex,
    nodeMetrics   *map[string]map[string]interface {},
    report         Bool,
    safe           Bool,
    selfUpdate     Bool,
    ipWhitelist  []net.Ip,
    public         Bool,
    binariesMu     sync.Mutex,
    binaries      *map[string]*rex.Binary,
    myBinaryHash   hash.Hash, <-интерфейс
    dht           *dht.Node,
    stress        *chan *node.stressJob,
    ransomjobsch  *chan ransom.Jobs,
    ua            *scanner.HTTP
}
 
struct node.Config {
    disableScanner   Bool,
    disableStresser  Bool,
    disableRansom    Bool,
    _               *scanner.ConnScannerConfig
}
 
struct dht.Node{
    cfg         dht.NodeConfig,
    ContactDir  string,
    rtMu        sync.Mutex,
    rt          dht.RoutingTable,
    s          *dht.Store,
    addr       *net.TCPAddr,
    client     *dht.Client,
    wkeys    []*rsa.PublicKey
}
 
struct dht.NodeConfig {
    Bootstrap   []string,
    SaveContacts  string
}
 
struct dht.Store{
    mu  sync.Mutex,
    m  *map[dht.NodeID]*dht.Value
}
 
typedef dht.NodeID [0x14]uint8
 
struct dht.Client{
    node *dht.Node,
    rpc  *rpc.Client
}
 
struct dht.RoutingTable {
    _           dht.NodeID,
    buckets [160]dht.Bucket
}
typedef dht.Bucket [0x14]dht.Contact
 
struct dht.Contact {
    _     dht.NodeID,
    addr  string,
    time  time.Time
}
 
struct dht.Value{
    _         dht.NodeID,
    bytes   []uint8,
    sha1    []uint8,
    expires   time.Time,
    PSS     []uint8
}

В троянце хранится список адресов узлов бот-сети, к которым будет произведена попытка подключения. Если внешний IP совпадает с одним из них, то к нему подключение производиться не будет.

Новость о троянце

Рекомендации по лечению


Linux

На загруженной ОС выполните полную проверку всех дисковых разделов с использованием продукта Антивирус Dr.Web для Linux.

Демо бесплатно

На 1 месяц (без регистрации) или 3 месяца (с регистрацией и скидкой на продление)

Скачать Dr.Web

По серийному номеру