Опубликован рабочий эксплоит для всех версий антивирусов. Вскрыт факт заимствования кода под GPL




Вчера Тэвис Орманди (Tavis Ormandy) из хакерского подразделения Project Zero компании Google выложил в открытый доступ информацию о многочисленных уязвимостях в антивирусных программах Symantec, в том числе уязвимостях с удалённым исполнением кода.

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

Программы Symantec используют одинаковое ядро, так что описанные методы работают для всех программ Symantec, в том числе для антивирусов, которые продаются под брендом Norton. Среди них:

  • Norton Security, Norton 360 и другие полученные в наследство продукты Norton (все платформы)
  • Symantec Endpoint Protection (все версии, все платформы)
  • Symantec Email Security (все платформы)
  • Symantec Protection Engine (все платформы)
  • Symantec Protection for SharePoint Servers
  • И другие

Тэвис Орманди из Project Zero обнародовал примеры некоторых уязвимостей, чтобы всем стала понятна суть проблемы.

В случае с антивирусами проблема в том, как они проверяют исполняемые файлы, запакованные упаковщиками вроде UPX. Чтобы проверить такие файлы, в антивирусах используются специальные распаковщики файлов, чтобы вернуть «экзешник» к исходному виду. Это помогает со стандартными упаковщиками, а для остальных приходится прибегать к эмуляции.

Тэвис Орманди пишет, что все эти методы порождают излишнюю сложность и чрезвычайно подвержены уязвимостям, потому что очень сложно сделать такой код безопасным. «Мы рекомендуем использовать песочницу и Security Development Lifecycle, но вендоры часто срезают здесь углы», — пишет Тэвис. Из-за этого распаковщики становятся огромным источником уязвимостей, как уже было в случаях с Comodo, ESET, Kaspersky, Fireeye и многими другими.

В случае с Symantec ситуация ещё хуже, потому что в её программах распаковщики работают в ядре!

Например, её распаковщик для ASPack допускает тривиальное переполнение буфера, если значение SizeOfRawData больше, чем SizeOfImage. Когда такое происходит, Symantec переносит «лишние» байты в буфер с помощью memcpy. Соответственно, мы можем легко запустить на исполнение на уровне ядра произвольный код, используя такой метод:

    char *buf = malloc(SizeOfImage);

    memcpy(&buf[DataSection->VirtualAddress],
           DataSection->PointerToRawData,
           SectionSizeOnDisk);

Уязвимость CVE-2016-2208 подробнее описана в баг-трекере. В операционных системах Linux, macOS и Unix она приводит к чистому переполнения на уровне рута в процессе Symantec или Norton, а в операционной системе Windows — к повреждению памяти ядра.

Поскольку Symantec использует специальный драйвер для перехвата всех системных прерываний, то для эксплуатации уязвимости достаточно просто отправить жертве файл по электронной почте или ссылку на эксплоит. Жертве не нужно открывать файл или переходить по ссылке, антивирус всё сделает самостоятельно. Это открывает возможность даже для автоматического распространения червя по всем системам с установленным антивирусом Symantec/Norton!

Таким образом можно легко заразить большое количество компьютеров в локальной сети предприятия.

Любопытно, что перед публикацией информации в открытом доступе Тэвис Орманди отправил эксплоит в отдел безопасности по электронной почте в zip-архиве, защищённом паролем, а пароль указал в тексте письма. Но почтовый сервер с установленными «средствами защиты» Symantec извлёк пароль из текста письма, применил его к архиву и в процессе изучения кода эксплоита обрушил сам себя.

Тэвис Орманди также рассказывает об уязвимостях при парсинге файлов PowerPoint и других файлов Microsoft Office, а также об уязвимостях эвристического движка Bloodhound Heuristics (Advanced Heuristic Protection). Исходный код эксплоита опубликован. Это на 100% рабочий эксплоит, который действует против стандартных конфигураций Norton Antivirus и Symantec Endpoint, и срабатывающий просто при отправке ссылки по почте или публикации ссылки на веб-странице (её не нужно открывать).

В данном случае уязвимы следующие продукты (здесь перечислены не все потенциально уязвимые программы Symantec, вполне возможно, что эксплоит срабатывает и в других):

  • Norton Antivirus (Mac, Windows)
  • Symantec Endpoint (Mac, Windows, Linux, Unix)
  • Symantec Scan Engine (все платформы)
  • Symantec Cloud/NAS Protection Engine (все платформы)
  • Symantec Email Security (все платформы)
  • Symantec Protection for SharePoint/Exchange/Notes/etc (все платформы)
  • Все остальные Symantec/Norton Carrier, Enterprise, SMB, Home и прочие антивирусные программы
  • И другие

Под Windows это приводит к исполнению кода на уровне SYSTEM, в остальных операционных системах — с правами рута.

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

UPD. Как выяснилось, Symantec заимствовала код из open-source библиотек libmspack и unrarsrc — и не обновляла их как минимум семь лет!
Поделиться с друзьями
-->

Комментарии (23)


  1. teecat
    29.06.2016 13:21
    -3

    В случае с Symantec ситуация ещё хуже, потому что в её программах распаковщики работают в ядре!

    В ядре чего? Операционной системы или в антивирусных базах? Скорее всего логично последнее, но как иначе? Антивирус это в первую очередь универсальный распаковщик всего и вся, распаковщик, который вытащит файл, даже если стандартные разархиваторы не справятся. Поэтому для антивирусов распаковка должна находиться в постоянно обновляемых базах, чтобы можно было на лету добавить/обновить алгоритмы распаковки/анализа

    Поскольку Symantec использует специальный драйвер для перехвата всех системных прерываний

    Тоже вариантов нет — нужно перехватывать все ниже вредоносных программ

    Тоесть вопрос не архитектуры, на что наезд, а качества программирования в компании


    1. IvaYan
      29.06.2016 17:05
      +3

      Я так понял, что распаковка производится в упомянутом драйвере. Это следует из фразы «мы можем легко запустить на исполнение на уровне ядра произвольный код». Обычно, когда говорят про «уровень ядра» имеется ввиду именно ядро ОС.


      1. teecat
        29.06.2016 17:41
        -2

        Если так, то это крайне неоптимально, тогда любое обновление этой части антивирусных баз потребовало бы перезагрузки для замены драйвера. Плюс драйвер перехватов может быть не один — нет смысла в каждый драйвер засовывать свою копию баз.


        1. IvaYan
          29.06.2016 21:40
          +2

          А причем тут антивирусные базы? Драйвер от них не зависит в общем случае. Драйвер осуществляет перехват набора ядерных функций, через это контролируется поведение запущенных приложений.
          В случае с Symantec — оказалось, что этот драйвер помимо, собственно, перехвата, еще занимался распаковкой сжатых/зашифрованных исполнимых файлов.
          Чтобы распаковать такой файл надо либо воспользоваться готовым распаковщиком (как с тем же UPX), или пишут эмулятор, который имитирует запуск программы, чтобы она сама себя распаковала: «Это помогает со стандартными упаковщиками, а для остальных приходится прибегать к эмуляции.». Что, по-вашему, храниться в базах в этом случае?
          И вот именно этот эмулятор, судя по всему, и является частью драйвера в случае Symantec. Вопрос о разумности такого решения можно оставить открытым, стоит только отметить, что написание драйвера, в общем случае, сложнее, чем написание обычного приложения, а раз так, то у них (у разработчиков из Symantec), вероятно, были веские причины для такого решения.


          1. teecat
            30.06.2016 13:33
            -1

            https://www.symantec.com/security_response/securityupdates/detail.jsp?fid=security_advisory&pvid=security_advisory&year=&suid=20160628_00

            Parsing of maliciously-formatted container files may cause memory corruption, integer overflow or buffer overflow in Symantecs Decomposer engine. Successful exploitation of these vulnerabilities typically results in an application-level denial of service but could result in arbitrary code execution. An attacker could potentially run arbitrary code by sending a specially crafted file to a user.


            1. IvaYan
              30.06.2016 14:00

              И? Про базы тут, опять же, ни слова нет.


              1. teecat
                30.06.2016 14:11
                +1

                В описании уязвимости говорится, что уязвимость не на уровне ядра, а уровне приложений. Значит не в драйвере, а в самой программе. Обычное место расположения анпакеров в антивирусах — базы. А вот как они обновляются — тут зависит от архитектуры конкретного антивируса. Антивирусное ядро может входить в состав баз или входить в состав самого антивируса


                1. IvaYan
                  30.06.2016 14:13

                  Нет, там указано, что отказ в обслуживании может быть на уровне приложения, а не то, что сама уязвимость на этом уровне. То есть, уязвимость в драйвере может привести к отказу основного приложения. Это уже не говоря о том, что там не указано, что именно считается приложением, может имеется ввиду, что отказ не-аппаратный.


  1. edd_k
    29.06.2016 13:32
    +3

    Мда, послать подальше антивирусы 10+ лет назад — было правильным решением.


    1. Lure_of_Chaos
      29.06.2016 14:09
      +1

      По-моему, антивирусы больше вредят системе, чем вирусы — в том смысле, что при грамотно настроенной системе и осторожной, аккуратной работе риск «заразиться» невелик, тогда как наличие антивируса безусловно нагружает систему постоянно. Это напоминает страховку — вероятность пожара невелика, но страховые взносы должны платиться регулярно.


      1. edd_k
        29.06.2016 21:18

        Антивирус тоже стОит выбирать такой, чтобы настраивался. Тогда чем он будет постоянно нагружать систему, если все проверено и только трафик проверяй. Но из бесплатных ничего не впечатляло, проц был одноядерный, файрволл работает исправно, за компом кроме меня никто не работает. Вот и смысл в том антивирусе? Еще одно ПО, которому можно слишком многое. Обойдусь. И действительно, никаких проблем.


        1. Lure_of_Chaos
          30.06.2016 02:58
          +1

          > Тогда чем он будет постоянно нагружать систему, если все проверено
          Резидентные антивирусы контролируют все происходящее в системе — трафик, дисковые операции и т.д. Или теперь антивирусы не такие агрессивные?

          Лично я отказался от резидентных АВ, предпочитая VirusTotal и раз в месяц CureIt ради профилактики. Для контроля системы еще пользуюсь Anvir Task Manager. Тоже, примерно за 10 лет, не заметил подхваченной заразы. То ли не подхватил, то ли не заметил :)


          1. edd_k
            30.06.2016 14:49
            -2

            На диске 100 000 файлов. Установив антивирус, вы выполнили полную проверку. В дальнейшем по всей логике нет нужды ПЕРЕпроверять то, что не менялось. Сканируется новое / изменяемое. В «грамотно настроенной системе» (с). А антивирус — это часть системы. Он тоже должен быть грамотно настроен. Есть такие, которые можно гибко настраивать, есть такие, которые нельзя.

            >> Или теперь антивирусы не такие агрессивные?

            При грамотной настройке — агрессивны в пределах необходимости. Если вы заносите НОВЫЙ 200-метровый архив-экзешник, логично потерпеть его проверку. Желательно при этом видеть соответствующее сообщение.

            Меня совсем другие их недостатки напрягали.


      1. saboteur_kiev
        02.07.2016 21:33

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


  1. Lure_of_Chaos
    29.06.2016 14:03
    -2

    Воистину, чем сложнее система, тем более она хрупка. Т.е. любое «лишнее» установленное приложение повышает потенциальную уязвимость машины в целом. И да, антивирусы тоже, ведь они тоже программы. Даже виртуальные машины, как программы, наверняка уязвимы и существует возможность просочиться заразе на хост-систему.
    Что еще хуже — антивирусы вынуждены работать с повышенными привилегиями, следовательно — уязвимости в них наиболее опасны. Иронично, что антивирусы по идее должны повышать безопасность системы, но нет, реальность доказывает ошибочность и даже опасность иллюзии защищенности у пользователя, поставившему себе антивирус.

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


  1. to_climb
    29.06.2016 16:27
    +8

    Контекстная реклама Symantec Antivirus от Яндекс.Директа особенно хорошо дополняет эту статью.

    Для тех, у кого AdBlock


  1. a5b
    29.06.2016 18:44
    +2

    Интересные подробности: https://googleprojectzero.blogspot.com/2016/06/how-to-compromise-enterprise-endpoint.html

    Symantec dropped the ball here. A quick look at the decomposer library shipped by Symantec showed that they were using code derived from open source libraries like libmspack and unrarsrc, but hadn’t updated them in at least 7 years.


    opennet напоминает в http://www.opennet.ru/opennews/art.shtml?num=44694, что libmspack распространяется по условиям GPL2:
    При этом данный код не синхронизировался с оригинальными библиотеками уже 7 лет и содержит все устранённые в них за это время уязвимости. Libmspack распространяется под лицензией GPLv2, поэтому ещё не раскрытым остаётся вопрос возможного нарушения лицензии GPL.


    PS: баг https://bugs.chromium.org/p/project-zero/issues/detail?id=820 открыт May 6, 2016, публично доступен с 17 мая. Здесь уже был пост 18 мая: https://geektimes.ru/post/275962/. CVE-2016-2208 "The kernel component in Symantec Anti-Virus Engine (AVE) 20151.1 before 20151.1.1.4 allows remote attackers to execute arbitrary code ..."


  1. xMushroom
    29.06.2016 22:27

    > или публикации ссылки на веб-странице (её не нужно открывать).
    Ничего не понимаю. То есть антивирус открывает все ссылки на всех открытых мной веб-страницах, и те ссылки, которые оказались на файлы — сам скачивает и распаковывает? Или как еще можно использовать уязвимость в распаковщике без открытия ссылки?


    1. selivanov_pavel
      30.06.2016 00:13
      +2

      В современных браузерах есть prefetch. Но вообще странно. Хотя можно ещё наверное сделать так: img src=badfile.exe.jpg и браузер его сам скачает


  1. savostin
    01.07.2016 11:25

    И давно это антивирусы читают (буквально) почту и вытаскивают оттуда пароли к приаттаченным файлам?
    Кто вообще до такого додумался?


    1. grossws
      03.07.2016 04:57

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


      1. anmiles
        03.07.2016 23:16

        <...> в Gmail запрещено пересылать файлы определенного типа, а именно <...> архивы с вложенными архивами, которые защищены паролем.

        Интересно, какой антивирус стоит на серверах гугла, распаковывающих составные архивы с целью убедиться в их незапароленности?


        1. a5b
          04.07.2016 00:24

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

          Несколько источников
          https://cloud.google.com/security/whitepaper "Google Security Whitepaper. This whitepaper applies to Google Cloud Platform products described at cloud.google.com."
          Google makes use of multiple antivirus engines in Gmail, Drive, servers and workstations to help identify malware that may be missed by antivirus signatures.


          https://cloud.google.com/appengine/docs/java/mail/ App Engine Mail API Overview
          Mail that matches a known signature for spam, viruses, or other malicious content may not be accepted for delivery.


          Для Google Web Security for Enterprise в рекламе упоминались "несколько сигнатурных движков": http://www.gpartner.eu/documents/web_security_for_enterprise.pdf
          Its patented security technology employs multiple reputation and behavior analysis techniques and vast amounts of daily web data to detect new threats. Its signature-based detection utilizes multiple, industry-leading anti-malware engines with hourly and emergency signature updates, two-hour signature response times, and the largest global malware research laboratories and collection networks.
          Google Web Security for Enterprise is built on a proprietary security platform that detects new and known malware threats through the use of multiple signature-based anti-malware scan engines, multiple reputation and behavior detection engines, and automated machine-learning technologies. This combination of multiple detection technologies, heuristics, and the industry’s largest web data
          set...


          В статье сотрудников Google "The Ghost In The Browser Analysis of Web-based Malware" 2007 года про онлайн-угрозы есть такое о классификации:
          https://www.usenix.org/legacy/events/hotbots07/tech/full_papers/provos/provos.pdf
          To classify the different types of malware, we use a majority voting scheme based on the characterization provided by popular anti-virus software. Employing multiple anti-virus engines allows us to determine whether some of the malware binaries are actually new, false positive, or older exploits. Since anti-virus companies have invested in dedicated resources to classify malware, we rely on them for all malware classification.… As many anti-virus engines rely on creating signatures from malware samples, adversaries can prevent detection by changing binaries more frequently than anti-virus engines are updated with new signatures.


          В http://www.ghettoforensics.com/2014/02/google-actively-scanning-malware-emails.html были комментарии от (предположительно) представителей — комбинация неназванных сторонних решений и собственных разработок (одно из внешних решений одно время пыталось применить ряд паролей к архивам):
          Alex Petit-Bianco 19 February, 2014 13:26
          Hey — to protect our users from downloading malicious files, we use a combination of third party antivirus software and internal virus scanning solutions to detect whether or not attachments or other downloadable files may be harmful. Your post alerted us to the fact that one of our third party software components was checking for encryption using 'infected.' as a password.

          As a result, it decrypted a limited set of zipped payloads in attempts to search for malware. We're currently working on disabling that feature and appreciate you bringing it to our attention.
          • Alex Petit-Bianco, Google Antivirus Infrastructure.



          Известно, что на 2014 год gmail не использовал VirusTotal (сервис мигрировал в google app engine в конце 2011 и был куплен google в сентябре 2012, но изначально сохранял независимость):
          This is Bernardo Quintero, VirusTotal's manager. Google is not using VT for scanning all emails for malware, we have nothing to do with what you mentioned. Could you update your post to clarify it? and let me know if you need more info about VirusTotal (I have no idea how Gmail scans for malware, but it's not related to VT).