Как правило, большинство пентестов проводятся по довольно простой схеме. Сначала при помощи социальной инженерии обеспечивается доступ к целевой среде или ее отдельному звену, а затем производится ее заражение техническими средствами. Вариации проведения атаки могут быть разными, однако обычно классический пентест — это сплав технической части и социальной инженерии в самых различных пропорциях. Недостаток классического пентеста заключается в том, что надо «нащупать» того самого сотрудника и после этого переходить к следующему этапу. Если бы можно было автоматизировать процесс поиска слабого звена и его дальнейшую эксплуатацию, то это могло бы ускорить процесс пентестинга и значительно повысить конечные шансы на успех.

 

WARNING!

Вся информация предоставлена исключительно в ознакомительных целях. Ни автор, ни редакция не несут ответственности за любой возможный вред, причиненный материалами данной статьи.

Согласно известной статистике, приведенной антивирусными компаниями, около 30% пользователей не пользуются антивирусами, попросту отключают их или не обновляют базы. Отталкиваясь от этого, можно утверждать, что в любой среднестатистической компании найдется определенная группа людей, которая очень пренебрежительно относится к информационной безопасности, и, в свою очередь, именно этих людей целесообразно использовать для проведения атаки. Кроме того, любая функционирующая система может быть подвержена влиянию целого ряда случайных факторов, которые также могут временно парализовать систему безопасности:

  • слетели настройки прокси-сервера, из-за чего антивирусные базы не были обновлены;
  • закончился срок лицензии антивируса, а о ее продлении руководство вовремя не позаботилось;
  • сбой работы сети сделал невозможным удаленную распечатку файлов, из-за чего все сотрудники были вынуждены скопировать документы на флешку и распечатать их в другом отделе.

Достаточно только включить воображение, и можно добавить еще десяток вариантов развития событий. Резюмируя сказанное, можно утверждать, что в любой среднестатистической организации есть потенциально ненадежные сотрудники и иногда возникают обстоятельства, которые могут нарушить привычную работу и парализовать защиту. Поэтому если ударить в нужном месте в нужное время, то атака будет успешна.

Процентное соотношения компьютеров на наличие real-time защиты
Процентное соотношения компьютеров на наличие real-time защиты

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

Фактически задача сводится к тому, чтобы найти человека, который забивает на безопасность, и почему бы не использовать для этого флешки?

Многие вирусописатели очень полюбили флеш-носители, так как они позволяют легко и быстро заражать компьютеры и даже самый элементарный USB-вирус имеет неплохие шансы на успех. Бум autorun-вирусов, который пришелся на 2008 год, спустя пять лет не сбавляет оборотов, более того, USB-вирусы стали еще наглее и порой даже не скрывают своего присутствия. И в то же время зараженная флешка — это универсальный индикатор грамотности ее владельца в вопросе элементарной ИБ. К примеру, если собрать десять флешек у различных людей, то наверняка у троих-четверых из них будут на флешках вирусы. Если спустя неделю повторно взять у этих людей флешки, то у двоих-троих вирусы останутся. Исходя из этого, можно утверждать, что на компьютерах, с которыми работают с данной флешки, не стоит даже самая элементарная защита или она по каким-то причинам отключена или не работает вовсе. Таким образом, даже если распространять самый заурядный вирус, который успешно детектится всеми антивирусами, только среди данной группы людей, то он сможет заразить большое количество компьютеров, прежде чем будет обнаружен. А раз эти компьютеры не имеют защиты, то также он долго сможет оставаться работоспособным.

Подверженность компьютерным угрозам исходя из наличия real-time защиты
Подверженность компьютерным угрозам исходя из наличия real-time защиты

Реализация

На определенный компьютер, к которому периодически подключают флешки, устанавливаем специальную программу, работающую по следующему алгоритму. При подключении очередной флешки программа пытается определить, заражена ли она. Так как нельзя учесть все многообразие USB-вирусов, то имеет смысл использовать эвристический подход определения заражения на основе следующих критериев:

  • наличие файла autorun.inf;
  • атрибуты файлов RHS;
  • малый размер подозрительного файла;
  • файловая система не NTFS;
  • отсутствие папки c именем autorun.inf;
  • наличие файлов ярлыков.

Если данная флешка заражена, то программа записывает ее в базу с указанием серийного номера и хеша подозрительного файла. Если спустя несколько дней флешка повторно подключается к этому компьютеру (а такое происходит почти всегда) и на ней все так же остаются подозрительные файлы, то производится ее заражение нашим «вирусом»; если же подозрительного файла не осталось, то программа удаляет из базы серийный номер этой флешки. Когда же заражается новый компьютер, вирус запоминает серийный номер материнской флешки и никогда ее не заражает и не анализирует, чтобы спустя время не выдать себя, если владелец флешки «поумнеет».

Для получения серийного номера напишем следующую функцию на основе API GetVolumeInformation:

String GetFlashSerial(AnsiString DriveLetter)
{
 DWORD NotUsed;
 DWORD VolumeFlags;
 char VolumeInfo[MAX_PATH];
 DWORD VolumeSerialNumber;

 GetVolumeInformation( AnsiString(DriveLetter + ":\\").c_str()  ,
 NULL, sizeof(VolumeInfo), &VolumeSerialNumber, &NotUsed,
 &VolumeFlags, NULL, 0);

 String S;
 return S.sprintf("%X", VolumeSerialNumber);
}

Надо отметить, что функция GetFlashSerial получает не статичный уникальный кодификатор устройства, а лишь серийный номер тома. Этот номер задается случайным числом и, как правило, меняется каждый раз при форматировании устройства. В наших же целях достаточно только серийного номера флешки, так как задача жесткой привязки не стоит, а форматирование подразумевает полное уничтожение информации, фактически приравнивая отформатированную флешку к новой.

Теперь приступим к реализации самой эвристики.

bool IsItABadFlash(AnsiString DriveLetter)
{
 DWORD NotUsed;
 char drive_fat[30];
 DWORD VolumeFlags;
 char VolumeInfo[MAX_PATH];
 DWORD VolumeSerialNumber;

 GetVolumeInformation( AnsiString(DriveLetter + ":\\").c_str()  ,
 NULL, sizeof(VolumeInfo), &VolumeSerialNumber, &NotUsed,
 &VolumeFlags, drive_fat, sizeof(drive_fat));

  bool badflash=false;

  if ((String(drive_fat)!="NTFS") && (FileExists(DriveLetter + ":\\autorun.inf")))
  {
   DWORD dwAttrs;
   dwAttrs = GetFileAttributes(AnsiString(DriveLetter + ":\ \autorun.inf").c_str());
   if ((dwAttrs & FILE_ATTRIBUTE_SYSTEM)
   && (dwAttrs & FILE_ATTRIBUTE_HIDDEN)
   && (dwAttrs & FILE_ATTRIBUTE_READONLY))
   {
    badflash = true;
   }
  }

 if (!badflash)
 {

 TSearchRec sr;
 FindFirst(DriveLetter+":\\*.lnk", faAnyFile, sr);
 int filep=sr.Name.LastDelimiter(".");
 AnsiString filebez=sr.Name.SubString(1, filep-1);
 if (DirectoryExists(DriveLetter+":\\"+filebez))
 {
  DWORD dwAttrs = GetFileAttributes(AnsiString(DriveLetter+":\\"+filebez).c_str());
   if ((dwAttrs & FILE_ATTRIBUTE_SYSTEM)
   && (dwAttrs & FILE_ATTRIBUTE_HIDDEN))
   {
    badflash = true;
   }
 }
}
  return badflash;
}

Алгоритм эвристической функции достаточно прост. Сначала мы отсеиваем все устройства с файловой системой NTFS и те, которые не содержат файл autorun.inf. Как правило, все флешки по умолчанию идут с файловой системой FAT32 (реже FAT и еще реже exFAT), однако иногда системные администраторы или другие сотрудники IT-отдела форматируют их в систему NTFS для своих нужд. «Умники» нам не нужны, их мы сразу исключаем. Следующим этапом проверяем файл autorun.inf на атрибуты «скрытый» и «системный». Файл autorun.inf может принадлежать и совершенно законной программе, но если в нем присутствуют данные атрибуты, то можно с очень большой вероятностью утверждать, что флешка заражена вирусом.

Сейчас многие вирусописатели стали реже использовать файл autorun.inf для заражения машин. Причин сразу несколько: во-первых, почти все антивирусы или пользователи отключают опцию автозапуска; во-вторых, на компьютере может быть несколько вирусов, использующих одинаковый способ распространения, и каждый из них перезаписывает файл на свой лад. Поэтому все чаще начал использоваться способ заражения через создание ярлыков и скрытие оригинальных папок. Чтобы не оставить и эти флешки без внимания, мы проверяем наличие файла ярлыка и наличие папки с таким же именем в корне тома. Если при этом папка также имеет атрибуты «скрытый» и «системный», то помечаем эту флешку как зараженную.

Конечно, эвристика имеет свои погрешности и нюансы, поэтому есть смысл ее тщательно проработать к конкретной задаче, однако в нашем случае можно со 100%-й вероятностью утверждать ее корректность.

Если с эвристическим анализом флешки все в целом ясно, то с «заражением» возможны нюансы. Например, можно попросту перезаписать старый вирус нашим без каких-либо поправок в файл autorun.inf, файлы, ярлыки и прочее. Таким образом, наш «вирус» получит управление на новом компьютере, но предварительно лучше также сделать старую копию вируса и сохранить в том же каталоге с чуть отличающимся именем. Если по каким-то причинам на другом компьютере будет работать антивирус, то он обнаружит старый вирус, удалит его, выдаст пользователю предупреждение об успешном уничтожении угрозы — и тем самым обеспечит ложное чувство безопасности у пользователя, а наш «вирус» останется незамеченным.

Кроме этого, в декабрьском выпуске «Хакера» мы также писали об уязвимостях DLL hijacking в различном ПО и о его эффективном применении. Поэтому если предполагается, что на флешках могут находиться такие программы, как менеджеры паролей или портативные версии различного ПО, то имеет смысл использовать данную уязвимость и тем самым расширить спектр пораженных машин и ценность полученных данных для пентеста.

Кстати, не всегда имеет смысл прибегать к заражению флешек. К примеру, если у ИБ-отдела стоит задача просто периодического мониторинга сотрудников на наличие «ненадежных людей», то разумнее установить данную программу на несколько машин и просто записывать серийные номера флешек и время создания вредоносного файла для сбора статистики. Тем самым не требуется буквальным образом обыскивать всех сотрудников, и при этом сохраняется конфиденциальность данных на флешках, а на основе полученных данных можно судить также о возможном заражении домашних компьютеров пользователей и состояния ИБ в целом. Ведь, как мы уже писали ранее, любая система подвержена случайным факторам и не исключен риск появления угроз.

Значения самых популярных угроз
Значения самых популярных угроз

Тестирование

Развернув программу в относительно средней по масштабу сети, уже через неделю мы получили достаточно красноречивые данные. Более 20% всех подключенных флешек были инфицированы каким-либо вирусом или трояном, и более 15% по-прежнему оставались инфицированными при повторном подключении спустя пару дней. Надо также отметить, что на многих компьютерах стояла антивирусная защита, которая периодически исполняла свои обязанности. Однако то привычное равнодушие к выскакивающему предупреждению антивируса, к которому уже давно привыкли пользователи при подключении флешки, не позволяла им предположить, что они имеют дело с совершенно иной угрозой. Ложное чувство безопасности позволяло пользователям без смущения подключать флешку к различным компьютерам, а нашей программе успешно делать свое дело.

Графическое сравнение самых популярных угроз
Графическое сравнение самых популярных угроз

Коротко об алгоритме

  • Устанавливаем нашу программу на компьютеры в компании.
  • Сканируем подключаемые флешки на наличие признаков зараженности.
  • «Заражаем» флешки пользователей нашим тестовым «вирусом» или переписываем их номера для статистики.
  • Докладываем начальству, наказываем пользователей-раздолбаев, держим, не пущаем и запрещаем.

Заключение

Подводя черту, можно сказать, что главный недостаток этого метода — его неопределенность. Никто не знает, когда именно к компьютеру будет подключена та самая «подходящая» флешка, поскольку это сильно зависит от среды, в которой развернута программа. Однако этот недостаток не умаляет главного преимущества метода. Можно очень долго оставаться незамеченными и, растворяясь среди других угроз, поражать все новые и новые машины полностью в автоматическом режиме. Несложно заметить, что такая методика имеет определенный эффект масштаба. Чем больше сотрудников работает в организации и чем разнообразнее внутренние коммуникации, тем больший будет результат. Хотя этот подход будет отлично работать в структуре совершенно любого масштаба, ведь его основная задача сводится не к массовому поражению системы, а к целевому удару по самому слабому звену — человеку. ][

15 комментариев

  1. 07.07.2014 at 18:31

  2. 07.07.2014 at 18:50

  3. 07.07.2014 at 22:16

    Блин, а чё делать если у меня Mac и у всех в организации тоже? Как проникать то?

    • 07.07.2014 at 22:54

      Лишнее подтверждение, что мак ненужен.

    • 08.07.2014 at 04:32

      Мак хакнули сами разрабы. Теперь ты туда нифига поставить не сможешь, унылый ассортимент железа по высокой цене, немощность в отсутствии «официального сервисного центра».

      • 10.07.2014 at 09:09

        Mac, стабильный,системный файлы скрыты,все сделано за ползователя,драйвера не нужно ставить все уже установлено.Про Windows могут сказать что она вся багнутая, пишет постоянно завершение работы.Нет понятия что Windows или Mac -плохие оба хорошие,просто люди пользуются разными операционками

  4. 08.07.2014 at 08:54

    На каком языке это написано? String GetFlashSerial(AnsiString DriveLetter)
    Неужели все такие гики сразу по двум трём строчекам определяют язык программирования?

  5. 08.07.2014 at 14:02

    Хой, Хакер. Первая функция, в ней GetVolumeInformation вторым параметром принимает указатель на буфер получающий имя volum’а. Если там NULL, то третий параметр (указывающий размер буфера) игнорируется. В реализации мало того что не передан указатель на char, так ещё передан размер буфера. Вывод: буфер не нужен, убирайте его.

  6. 08.07.2014 at 18:46

    «эвристический подход определения заражения на основе следующих критериев:

    ….

    файловая система не NTFS;»

    Т.е. старый добрый фат, который до сих пор имеется на большинстве флэшек, является критерием заражения?
    Однако.

    • 09.07.2014 at 13:32

      Они имеют в виду, что если NTFS, то уж точно не заражён, потому что convert N: /fs:ntfs может сделать только тот, кто вряд ли допустит появления заразы на флешке.

    • 11.07.2014 at 23:20

      Тут больше имеется ввиду, то что все флешки с завода идут с фатами, и если их кто-то конвертирует в нтфс то обычно сисадмин или еще какой-то спец для своих целей. Грубо говоря, относительно умный парень в компании, потому его флешки не трогаем, чтобы не спалится раньше времени…однако на моей практике встречал только раз,два флешки переформатированные в нтфс.

    • 29.07.2014 at 14:19

      Мне кажется, что надо включить флешки с NTFS, т.к. форматнуть флешку для NTFS может любой человек, которому понадобилось перекинуть файл весом более 4 ГБ (фильм например). В convert N: /fs:ntfs нет необходимости, потому что все можно сделать через управление дисками в windows.

Оставить мнение

Check Also

Страдания с ReactOS. Почему в заменителе Windows работают трояны, но не работает Word

Сегодня в нашей кунсткамере демонстрируется необычайный организм — двадцатилетний зародыш …