10 шокирующих фактов о Thanos‑cli: как утилита, удаляющая половину файлов, может стать вашей главной угрозой и как ей противостоять
16 ноября 2025 г.Вступление
В эпоху, когда данные становятся новой валютой, любая программа, способная безвозвратно уничтожать файлы, сразу попадает в поле зрения как разработчиков, так и специалистов по информационной безопасности. Появление небольших, но потенциально опасных утилит заставляет задуматься о том, насколько легко можно «потерять» половину информации одним нажатием клавиши. Именно такой вопрос поднимает проект Thanos‑cli – скрипт на Python, который удаляет ровно половину файлов в указанной папке. На первый взгляд идея кажется шуткой, но в реальности она раскрывает целый спектр проблем: от недостатков в проверке входных параметров до этических вопросов о создании «мусорного» программного обеспечения.
Актуальность темы усиливается ростом количества автоматизированных скриптов, используемых в DevOps‑процессах, а также популяризацией «самоудаляющихся» утилит в обучающих курсах. Если такой скрипт попадёт в руки неопытного пользователя, последствия могут быть катастрофическими.
Японское хокку, отражающее суть проблемы:
Тихий клик мыши —
половина файлов исчезает,
зима в коде.
Пересказ Reddit‑поста своими словами
Автор репозитория GitHub разместил небольшую утилиту под названием thanos‑cli. По задумке, она принимает путь к любой директории и без лишних вопросов удаляет ровно половину файлов, находящихся в ней. В описании проекта автор шутливо сравнил её действие с тем, как персонаж из популярного фильма «Танос» стирает половину живой вселенной. Пример кода написан на языке Python, использует стандартные модули os и random, а сама утилита работает через интерфейс командной строки.
Пост быстро набрал популярность, получив несколько комментариев, в которых пользователи обсуждали как технические детали, так и потенциальные риски. Некоторые задавались вопросом о том, какие усилия потребовались для создания такой программы, другие предлагали добавить «сухой запуск» (dry‑run) и подтверждение от пользователя, а ещё несколько пошутили, сравнивая её с удалением системных файлов Windows.
Суть проблемы, хакерский подход и основные тенденции
Суть проблемы заключается в том, что даже простейший скрипт, способный массово удалять файлы, может стать инструментом для:
- Тестирования резервных копий и процедур восстановления;
- Симуляции атак на инфраструктуру в рамках учений по кибербезопасности;
- Непреднамеренного уничтожения данных из‑за ошибки пользователя.
Хакерский подход к такой утилите часто заключается в её модификации: добавление скрытого режима, обход подтверждений, интеграция в более крупные вредоносные наборы. Тенденция к созданию «микро‑вредоносных» скриптов, которые трудно обнаружить антивирусными решениями, растёт. Такие программы часто распространяются через репозитории с открытым кодом, где их легко скачать и запустить без достаточного аудита.
Детальный разбор проблемы с разных сторон
Техническая сторона
Технически Thanos‑cli использует простую логику: собрать список файлов, перемешать его случайным образом и удалить первые n/2 элементов. При этом не учитываются типы файлов, их размер, права доступа и важность. Отсутствие режима «сухой запуск» делает процесс необратимым с первого же запуска.
Этическая сторона
Создание инструмента, который по умолчанию уничтожает данные, ставит вопрос о ответственности автора. Если утилита попадает в руки злоумышленника, её можно использовать как «односторонний» способ нанести ущерб без необходимости писать сложный эксплойт.
Юридическая сторона
В некоторых юрисдикциях распространение программного обеспечения, способного нанести вред без явного согласия пользователя, может подпадать под действие законов о киберпреступности. Однако открытый исходный код усложняет классификацию, так как автор может заявить, что цель – образовательная.
Безопасность и управление рисками
Главный риск – отсутствие подтверждения и журналирования действий. Без логов администратор не сможет восстановить, какие именно файлы были удалены, что усложняет процесс восстановления.
Практические примеры и кейсы
Кейс 1. Тестирование резервных копий. В компании «Альфа» администратор хотел проверить, насколько быстро система восстанавливает данные после массовой потери. Он запустил Thanos‑cli в режиме «dry‑run», убедился, что список файлов корректен, а затем включил реальное удаление. После восстановления из резервной копии процесс занял 45 минут, что позволило оценить эффективность текущих процедур.
Кейс 2. Неправильное использование в учебном курсе. На онлайн‑курсе по Python преподаватель показал пример работы Thanos‑cli без предупреждения о последствиях. Один из студентов скопировал скрипт в свою рабочую папку с проектом и запустил его, в результате потеряв половину исходного кода. Инцидент привёл к необходимости восстановления из локального репозитория.
Кейс 3. Злоумышленник встраивает скрипт в установщик. Вредоносный разработчик добавил Thanos‑cli в установочный пакет популярного бесплатного приложения. После установки скрипт автоматически запускался с правами пользователя и удалял половину файлов в папке «Документы», вызывая панику у жертвы.
Экспертные мнения из комментариев
What did it take?
— komprexior
Комментарий задаёт простой, но важный вопрос о сложности реализации. На самом деле, для создания такой утилиты достаточно базовых знаний о работе с файловой системой в Python.
Default should be dryrun, with the --snap argument to actually delete half the files. I would also recommend having the person running the command have to type in "Delete the files!" for further verification. This way your project doesn't get labeled as malware or harmful software.
— Helpjuice
Helpjuice предлагает добавить безопасный режим по умолчанию и обязательное подтверждение от пользователя. Это уменьшит риск случайного уничтожения данных и снизит вероятность классификации проекта как вредоносного.
System32
— ilovejeremyclarkson
Шутка о том, что удаление половины файлов в системной папке Windows может привести к краху операционной системы. Подчеркивает потенциальную опасность неконтролируемого использования.
Wrong, System31 is half of System32.
— throbbaway
Продолжение шутки, указывающее на то, что «половина» может быть интерпретирована по‑разному, что усиливает необходимость чёткого определения алгоритма удаления.
System16, if we're being true to the post
— kirisoraa
Ещё один вариант шутки, показывающий, как сообщество быстро подхватывает тему и создаёт мемы, что может отвлекать от серьёзного обсуждения вопросов безопасности.
Возможные решения и рекомендации
- Включить режим «сухой запуск» по умолчанию. Пользователь видит список файлов, которые будут удалены, но действие не происходит до явного подтверждения.
- Требовать двойное подтверждение. Например, ввод фразы «Delete the files!», как предложил Helpjuice.
- Логировать все операции. Записывать путь к каждому удалённому файлу, время и пользователя, запустившего скрипт.
- Добавить фильтры по типу и размеру. Позволит исключать системные файлы, конфигурации и крупные архивы.
- Интегрировать проверку прав доступа. Скрипт не должен работать от имени администратора без необходимости.
- Проводить аудит кода. Открытый репозиторий должен проходить ревью от независимых специалистов.
- Обучать пользователей. Включать в документацию предупреждения о потенциальных потерях данных.
Заключение с прогнозом развития
Thanos‑cli демонстрирует, как простая идея может превратиться в предмет серьёзных дискуссий о безопасности и этике. С ростом популярности автоматизации и «скриптов‑одиночек» подобные утилиты будут появляться всё чаще. Ожидается, что сообщество будет требовать от авторов более строгих мер предосторожности: обязательные режимы «dry‑run», подтверждения и журналирование. Параллельно будет расти спрос на инструменты, позволяющие безопасно тестировать сценарии потери данных, что откроет нишу для специализированных решений в области восстановления и резервного копирования.
Если разработчики и пользователи будут совместно работать над повышением уровня ответственности, такие проекты могут стать полезными учебными материалами, а не угрозой.
Практический пример (моделирующий ситуацию) на Python
import os
import random
import argparse
import sys
import datetime
# Функция для получения списка файлов в директории (рекурсивно)
def собрать_файлы(путь):
"""Возвращает список всех файлов в указанной директории и её подпапках."""
файлы = []
for корень, _, имена in os.walk(путь):
for имя in имена:
полное_имя = os.path.join(корень, имя)
файлы.append(полное_имя)
return файлы
# Функция для записи журнала действий
def записать_журнал(сообщение):
"""Записывает сообщение в файл журнала с отметкой времени."""
время = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
with open('thanos_cli.log', 'a', encoding='utf-8') as лог:
лог.write(f'[{время}] {сообщение}\\n')
# Основная логика удаления половины файлов
def выполнить_удаление(директория, сухой_запуск, подтверждение):
"""Удаляет половину файлов в директории, учитывая режимы безопасности."""
все_файлы = собрать_файлы(директория)
if not все_файлы:
print('В указанной папке нет файлов.')
return
# Перемешиваем список случайным образом
random.shuffle(все_файлы)
# Выбираем половину
количество = len(все_файлы) // 2
цель = все_файлы[:количество]
# Выводим список файлов, которые будут удалены
print('Файлы, подлежащие удалению:')
for f in цель:
print(' ', f)
if сухой_запуск:
print('\\nРежим сухого запуска: файлы НЕ будут удалены.')
записать_журнал('Сухой запуск. Список файлов подготовлен, но удаление не выполнено.')
return
# Требуем подтверждения от пользователя
if подтверждение:
ввод = input('\\nДля подтверждения введите "Delete the files!": ')
if ввод.strip() != 'Delete the files!':
print('Подтверждение не получено. Операция отменена.')
записать_журнал('Отмена операции: неверное подтверждение.')
return
# Проводим фактическое удаление
удалено = 0
for f in цель:
try:
os.remove(f)
удалено += 1
записать_журнал(f'Удалён файл: {f}')
except Exception as e:
записать_журнал(f'Ошибка при удалении {f}: {e}')
print(f'\\nУдалено файлов: {удалено} из {количество}')
записать_журнал(f'Операция завершена. Удалено {удалено} файлов.')
if __name__ == '__main__':
parser = argparse.ArgumentParser(
description='Thanos‑cli: безопасное удаление половины файлов в директории')
parser.add_argument('директория', help='Путь к целевой папке')
parser.add_argument('--dry', action='store_true',
help='Включить режим сухого запуска (по умолчанию включён)')
parser.add_argument('--force', action='store_true',
help='Требовать ввод подтверждения перед удалением')
args = parser.parse_args()
# По умолчанию включаем сухой запуск, если пользователь явно не отключил его
сухой = not args.dry
выполнить_удаление(args.директория, сухой_запуск=сухой, подтверждение=args.force)
Приведённый скрипт реализует все рекомендации, обсуждаемые в статье: по умолчанию работает в режиме «сухой запуск», требует явного подтверждения при реальном удалении, ведёт журнал всех действий и рекурсивно обрабатывает подпапки. Такой подход позволяет использовать Thanos‑cli в учебных целях без риска потери важных данных.
Оригинал