Проверка скрипта на вредоносные или шпионские команды

Посмотрите, нет ли в скрипте копирования, перемещения, передачи файлов или других вредоносных функций. Вот скрипт. Он получает информацию о жестком диске.

    #!/bin/bash
# safe-vendor-check.sh
# Безопасная проверка доступности скрытых (vendor) ATA-команд (ТОЛЬКО ЧТЕНИЕ)
# Использует: hdparm, smartctl, hddsupertool (если есть), lsblk, lspci (опционально)
# Риск: минимальный (команды только для чтения). Ни одна команда не изменяет диск.

set -euo pipefail

usage() {
  cat <<EOF
Использование:
  sudo ./safe-vendor-check.sh /dev/sdX [OUTPUT_DIR]

Пример:
  sudo ./safe-vendor-check.sh /dev/sda /root/reports

Если OUTPUT_DIR не указан — отчёт сохранится в ./report_<дата>/
EOF
  exit 1
}

if [ $# -lt 1 ] || [ "${1:-}" = "-h" ]; then
  usage
fi

DISK="$1"
OUTDIR="${2:-./report_$(date +%Y%m%d_%H%M%S)}"

# Проверки
if [ "$EUID" -ne 0 ]; then
  echo "Запустите как root: sudo $0 $*"
  exit 2
fi

if [ ! -b "$DISK" ]; then
  echo "Устройство $DISK не найдено (не block device)."
  exit 3
fi

mkdir -p "$OUTDIR"
echo "Отчёт будет записан в: $OUTDIR"

LOG="$OUTDIR/check.log"
exec > >(tee -a "$LOG") 2>&1

echo "=== SAFE VENDOR-ATA CHECK ==="
echo "Диск: $DISK"
echo "Дата: $(date)"
echo

# Инструменты: проверяем доступность
command -v hdparm >/dev/null 2>&1 || echo "Внимание: hdparm не установлен — некоторые проверки будут пропущены."
command -v smartctl >/dev/null 2>&1 || echo "Внимание: smartctl (smartmontools) не установлен — некоторые проверки будут пропущены."
command -v ./hddsupertool >/dev/null 2>&1 || command -v hddsupertool >/dev/null 2>&1 || echo "hddsupertool не найден в текущем каталоге — пропущу специфичные проверки."

echo "1) Список блочных устройств (lsblk)"
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,LABEL || true
echo

echo "2) Базовая информация (hdparm -I) — это чтение"
if command -v hdparm >/dev/null 2>&1; then
  echo ">>> hdparm -I $DISK"
  hdparm -I "$DISK" || true
  echo
else
  echo "hdparm отсутствует"
fi

echo "3) Security / Frozen / HPA (hdparm --security-status, --dco-identify) — чтение"
if command -v hdparm >/dev/null 2>&1; then
  echo ">>> hdparm --security-status $DISK"
  hdparm --security-status "$DISK" || true
  echo
  echo ">>> hdparm --dco-identify $DISK  (если поддерживается)"
  hdparm --dco-identify "$DISK" || true
  echo
else
  echo "hdparm отсутствует (пропуск)"
fi

echo "4) SMART + расширённая информация (smartctl -x)"
if command -v smartctl >/dev/null 2>&1; then
  echo ">>> smartctl -i -x $DISK  (идентификация и расширённые данные)"
  smartctl -i -x "$DISK" || true
  echo
  echo ">>> smartctl --scan"
  smartctl --scan || true
  echo
else
  echo "smartctl отсутствует"
fi

echo "5) Проверка отклика на vendor/test-features (hddsupertool safe calls) — только если hddsupertool доступен"
# Попытаемся вызвать безопасные команды HDDSuperTool: identify, read-native-max, testfeatures (если есть)
HDDST=""
if [ -x "./hddsupertool" ]; then
  HDDST="./hddsupertool"
elif command -v hddsupertool >/dev/null 2>&1; then
  HDDST="hddsupertool"
fi

if [ -n "$HDDST" ]; then
  echo "Используем hddsupertool: $HDDST"
  echo ">>> $HDDST $DISK --command identify"
  $HDDST "$DISK" --command identify || true
  echo
  echo ">>> $HDDST $DISK --command read-native-max"
  $HDDST "$DISK" --command read-native-max || true
  echo
  # Некоторые сборки HDDSuperTool/Clone имеют тестfeatures или testcommands, попробуем безопасно
  echo ">>> Проверяю наличие testfeatures/testcommands у hddsupertool"
  if $HDDST "$DISK" --help 2>&1 | grep -iq "test"; then
    echo "Команда testfeatures/testcommands обнаружена — выполню безопасную проверку"
    # попробуем сначала --command testfeatures, потом --command testcommands
    $HDDST "$DISK" --command testfeatures || true
    $HDDST "$DISK" --command testcommands || true
  else
    echo "testfeatures / testcommands не найдены в --help (пропуск)"
  fi
else
  echo "hddsupertool не найден — пропускаем шаг с ним"
fi

echo
echo "6) Попытка прочитать часть идентифицирующих секторов (чтение LBA 0, MBR) — чтение"
echo ">>> hexdump -C -n 512 /dev/${DISK#/dev/}  (внимание: будет читать сектор 0)"
# Используем dd с bs=512 count=1
dd if="$DISK" of="$OUTDIR/sector0.bin" bs=512 count=1 conv=sync,noerror 2>/dev/null || true
echo "Сохранён: $OUTDIR/sector0.bin (hexdump ниже)"
hexdump -C "$OUTDIR/sector0.bin" | sed -n '1,20p' || true
echo

echo "7) Лог dmesg (последние 200 строк) — поиск ошибок диска"
dmesg | egrep -i 'sd[a-z]|ata|sgx|scsi|disk' | tail -n 200 || true
echo

echo "8) PCI/контроллеры (опционально)"
if command -v lspci >/dev/null 2>&1; then
  echo ">>> lspci -nn | egrep -i 'sata|raid|storage|nvme|eth|usb' "
  lspci -nn | egrep -i 'sata|raid|storage|nvme|usb' || true
fi

echo
echo "=== FINISH ==="
echo "Отчёт сохранён: $LOG"
echo "Доп. файлы: $OUTDIR/sector0.bin"
echo
echo "ВАЖНО:"
echo "- Этот скрипт НЕ выполняет запись на диск."
echo "- Ни одна выполненная команда не изменяет SA/HPA/DCO/firmware."
echo "- Если вы захотите запустить vendor-команды или любые команды записи — сначала сделайте образ и проконсультируйтесь."

Ответы (0 шт):